php-4.2.3/0040755000175200000240000000000007535765613011165 5ustar zeevstaffphp-4.2.3/build/0040755000175200000240000000000007535765534012266 5ustar zeevstaffphp-4.2.3/build/bsd_makefile0100755000175200000240000000301107437364571014606 0ustar zeevstaff#! /bin/sh # +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: bsd_makefile,v 1.3 2025/02/28 08:25:29 sebastian Exp $ # # cwd must be top_srcdir test -f build/bsd_makefile || exit 2 test -f bsd_converted && exit 0 tmpfile=`mktemp /tmp/bsd_makefile.XXXXXX 2>/dev/null` || tmpfile="tmp.$$" for i in build/*.mk; do sed 's/^include \(.*\)/.include "\1"/' $i >$tmpfile \ && cp $tmpfile $i done rm -f $tmpfile touch bsd_converted exit 0 php-4.2.3/build/build.mk0100644000175200000240000000503307437364571013711 0ustar zeevstaff# +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: build.mk,v 1.11 2025/02/28 08:25:29 sebastian Exp $ # # # Makefile to generate build tools # SUBDIRS = Zend TSRM STAMP = buildmk.stamp ALWAYS = generated_lists all: $(STAMP) $(ALWAYS) @$(MAKE) AMFLAGS=$(AMFLAGS) -s -f build/build2.mk generated_lists: @echo makefile_am_files = Zend/Makefile.am \ TSRM/Makefile.am > $@ @echo config_h_files = Zend/acconfig.h TSRM/acconfig.h >> $@ @echo config_m4_files = Zend/Zend.m4 TSRM/tsrm.m4 TSRM/threads.m4 \ Zend/acinclude.m4 ext/*/config*.m4 sapi/*/config.m4 >> $@ $(STAMP): build/buildcheck.sh @build/buildcheck.sh && touch $(STAMP) snapshot: distname='$(DISTNAME)'; \ if test -z "$$distname"; then \ distname='php4-snapshot'; \ fi; \ myname=`basename \`pwd\`` ; \ cd .. && cp -rp $$myname $$distname; \ cd $$distname; \ rm -f $(SUBDIRS) 2>/dev/null || true; \ for i in $(SUBDIRS); do \ test -d $$i || (test -d ../$$i && cp -rp ../$$i $$i); \ done; \ find . -type l -exec rm {} \; ; \ $(MAKE) AMFLAGS=--copy -f build/build.mk; \ cd ..; \ tar cf $$distname.tar $$distname; \ rm -rf $$distname $$distname.tar.*; \ bzip2 -9 $$distname.tar; \ md5sum $$distname.tar.bz2; \ sync; sleep 2; \ md5sum $$distname.tar.bz2; \ bzip2 -t $$distname.tar.bz2 cvsclean: @for i in `find . -name .cvsignore`; do \ (cd `dirname $$i` 2>/dev/null && rm -rf `cat .cvsignore` *.o *.a || true); \ done @rm -f $(SUBDIRS) 2>/dev/null || true .PHONY: $(ALWAYS) snapshot cvsclean php-4.2.3/build/build2.mk0100644000175200000240000000571507441743341013771 0ustar zeevstaff# +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: build2.mk,v 1.25.2.1 2025/03/07 20:00:33 derick Exp $ # include generated_lists TOUCH_FILES = mkinstalldirs install-sh missing LT_TARGETS = ltmain.sh config.guess config.sub makefile_in_files = $(makefile_am_files:.am=.in) makefile_files = $(makefile_am_files:e.am=e) config_h_in = main/php_config.h.in acconfig_h_SOURCES = acconfig.h.in $(config_h_files) targets = $(TOUCH_FILES) $(makefile_in_files) configure $(config_h_in) all: Zend/Makefile.am TSRM/Makefile.am $(targets) Zend/Makefile.am: test -d Zend || (test -d ../Zend && ln -s ../Zend Zend) TSRM/Makefile.am: test -d TSRM || (test -d ../TSRM && ln -s ../TSRM TSRM) acconfig.h: $(acconfig_h_SOURCES) @echo rebuilding $@ cat $(acconfig_h_SOURCES) > $@ $(makefile_in_files): $(makefile_am_files) aclocal.m4 configure.in $(config_m4_files) @echo rebuilding Makefile templates @for i in $(LT_TARGETS); do \ if test -f "$$i"; then \ mv $$i $$i.bak; \ cp $$i.bak $$i; \ fi; \ done @test -f want_dependencies || flag=-i; \ automake -a $$flag $(AMFLAGS) $(makefile_files) 2>&1 | $(SUPPRESS_WARNINGS) @for i in $(LT_TARGETS); do mv $$i.bak $$i; done aclocal.m4: configure.in acinclude.m4 dynlib.m4 aclocal 2>&1 | $(SUPPRESS_WARNINGS) SUPPRESS_WARNINGS = (egrep -v '(AC_TRY_RUN called without default to allow cross compiling|AC_PROG_CXXCPP was called before AC_PROG_CXX|.*AM_PROG_LEX.*|defined in acinclude.m4 but never used|AC_PROG_LEX invoked multiple times|AC_PROG_CPP was called before)'||true) $(config_h_in): configure acconfig.h # explicitly remove target since autoheader does not seem to work # correctly otherwise (timestamps are not updated) @echo rebuilding $@ @rm -f $@ @autoheader 2>&1 | $(SUPPRESS_WARNINGS) $(TOUCH_FILES): touch $(TOUCH_FILES) configure: aclocal.m4 configure.in $(config_m4_files) @echo rebuilding $@ @autoconf 2>&1 | $(SUPPRESS_WARNINGS) php-4.2.3/build/buildcheck.sh0100755000175200000240000000724707440630111014702 0ustar zeevstaff#! /bin/sh # +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Authors: Stig Bakken | # | Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: buildcheck.sh,v 1.16 2025/03/04 08:28:57 sas Exp $ # echo "buildconf: checking installation..." # autoconf 2.13 or newer ac_version=`autoconf --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` if test -z "$ac_version"; then echo "buildconf: autoconf not found." echo " You need autoconf version 2.13 or newer installed" echo " to build PHP from CVS." exit 1 fi IFS=.; set $ac_version; IFS=' ' if test "$1" = "2" -a "$2" -lt "13" || test "$1" -lt "2"; then echo "buildconf: autoconf version $ac_version found." echo " You need autoconf version 2.13 or newer installed" echo " to build PHP from CVS." exit 1 else echo "buildconf: autoconf version $ac_version (ok)" fi # automake 1.4 or newer am_version=`automake --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` am_version_clean=`echo $am_version|sed -e 's/-p[0-9]*$//'` if test "$am_version" = ""; then echo "buildconf: automake not found." echo " You need automake version 1.4 or newer installed" echo " to build PHP from CVS." exit 1 fi IFS=.; set $am_version_clean; IFS=' ' if test "$1" = "1" -a "$2" -lt "4" || test "$1" -lt "1"; then echo "buildconf: automake version $am_version found." echo " You need automake version 1.4 or newer installed" echo " to build PHP from CVS." exit 1 else echo "buildconf: automake version $am_version (ok)" fi # libtool 1.4 or newer libtool=`which libtool` if test ! -f "$libtool"; then libtool=`which glibtool`; fi lt_pversion=`$libtool --version 2>/dev/null|sed -n -e 's/^[^0-9]*//' -e 1's/[- ].*//p'` if test "$lt_pversion" = ""; then echo "buildconf: libtool not found." echo " You need libtool version 1.4 or newer installed" echo " to build PHP from CVS." exit 1 fi lt_version=`echo $lt_pversion|sed -e 's/\([a-z]*\)$/.\1/'` IFS=.; set $lt_version; IFS=' ' if test "$1" -gt "1" || test "$2" -ge "4"; then echo "buildconf: libtool version $lt_pversion (ok)" else echo "buildconf: libtool version $lt_pversion found." echo " You need libtool version 1.4 or newer installed" echo " to build PHP from CVS." exit 1 fi am_prefix=`which automake | sed -e 's#/[^/]*/[^/]*$##'` lt_prefix=`echo $libtool | sed -e 's#/[^/]*/[^/]*$##'` if test "$am_prefix" != "$lt_prefix"; then echo "WARNING: automake and libtool are installed in different" echo " directories. This may cause aclocal to fail." echo " continuing anyway" fi exit 0 php-4.2.3/build/dynlib.mk0100644000175200000240000000241307437364572014073 0ustar zeevstaff# +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: dynlib.mk,v 1.4 2025/02/28 08:25:30 sebastian Exp $ # all: all-recursive include $(builddir)/libs.mk include $(top_srcdir)/build/rules.mk php-4.2.3/build/fastgen.sh0100755000175200000240000000465507437364575014264 0ustar zeevstaff#! /bin/sh # # +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: fastgen.sh,v 1.14 2025/02/28 08:25:33 sebastian Exp $ # if test "$#" = "0"; then echo "Usage: fastgen.sh " fi srcdir=$1 shift mkdir_p=$1 shift bsd_makefile=$1 shift top_srcdir=`(cd $srcdir; pwd)` top_builddir=`pwd` if test "$mkdir_p" = "yes"; then mkdir_p="mkdir -p" else mkdir_p="$top_srcdir/build/shtool mkdir -p" fi if test "$bsd_makefile" = "yes"; then (cd $top_srcdir; ./build/bsd_makefile) for makefile in $@; do echo "fastgen.sh: creating $makefile" dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'` $mkdir_p "$dir/" cat - $top_srcdir/$makefile.in <$makefile top_srcdir = $top_srcdir top_builddir = $top_builddir srcdir = $top_srcdir/$dir builddir = $top_builddir/$dir VPATH = $top_srcdir/$dir EOF test -z "$dir" && dir=. touch $dir/.deps done else for makefile in $@; do echo "fastgen.sh: creating $makefile" dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'` $mkdir_p "$dir/" cat - $top_srcdir/$makefile.in <$makefile top_srcdir = $top_srcdir top_builddir = $top_builddir srcdir = $top_srcdir/$dir builddir = $top_builddir/$dir VPATH = $top_srcdir/$dir EOF test -z "$dir" && dir=. touch $dir/.deps done fi php-4.2.3/build/genif.sh0100644000175200000240000000124307261110754013667 0ustar zeevstaff#! /bin/sh # $Id: genif.sh,v 1.2 2025/03/30 14:02:20 sas Exp $ # replacement for genif.pl infile="$1" shift srcdir="$1" shift extra_module_ptrs="$1" shift awk="$1" shift if test "$infile" = "" -o "$srcdir" = ""; then echo "please supply infile and srcdir" exit 1 fi module_ptrs="$extra_module_ptrs" header_list="" olddir=`pwd` cd $srcdir for ext in ${1+"$@"} ; do module_ptrs=" phpext_${ext}_ptr,@NEWLINE@$module_ptrs" header_list="$header_list ext/$ext/*.h" done includes=`$awk -f ./build/print_include.awk $header_list` cd $olddir cat $infile | \ sed \ -e "s'@EXT_INCLUDE_CODE@'$includes'" \ -e "s'@EXT_MODULE_PTRS@'$module_ptrs'" \ -e 's/@NEWLINE@/\ /g' php-4.2.3/build/library.mk0100644000175200000240000000261007437364575014260 0ustar zeevstaff# +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: library.mk,v 1.12 2025/02/28 08:25:33 sebastian Exp $ # LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X) $(LTLIBRARY_NAME): $(LTLIBRARY_OBJECTS) $(LTLIBRARY_DEPENDENCIES) $(LINK) $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_LIBADD) php-4.2.3/build/ltlib.mk0100644000175200000240000000243607437364576013731 0ustar zeevstaff# +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: ltlib.mk,v 1.7 2025/02/28 08:25:34 sebastian Exp $ # targets = $(LTLIBRARY_NAME) include $(top_srcdir)/build/rules.mk include $(top_srcdir)/build/library.mk php-4.2.3/build/mkdep.awk0100644000175200000240000000434507437364577014100 0ustar zeevstaff# +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 2000 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: mkdep.awk,v 1.5 2025/02/28 08:25:35 sebastian Exp $ # # Usage: # # echo top_srcdir top_builddir srcdir CPP [CPP-ARGS] filenames | \ # awk -f mkdep.awk > dependencies { top_srcdir=$1 top_builddir=$2 srcdir=$3 cmd=$4 for (i = 5; i <= NF; i++) { if (match($i, "^-[A-Z]") == 0) break; cmd=cmd " " $i } dif=i-1 for (; i <= NF; i++) filenames[i-dif]=$i no_files=NF-dif for(i = 1; i <= no_files; i++) { if (system("test -r " filenames[i]) != 0) continue target=filenames[i] sub(srcdir "/", "", target) target2=target sub("\.(c|cpp)$", ".lo", target); sub("\.(c|cpp)$", ".slo", target2); for (e in used) delete used[e] cmdx=cmd " " filenames[i] done=0 while ((cmdx | getline) > 0) { if (match($0, "^# [0-9]* \".*\.h\"") != 0) { if (sub(top_srcdir, "$(top_srcdir)", $3) == 0) sub(top_builddir, "$(top_builddir)", $3) if (substr($3,2,1) != "/" && used[$3] != 1) { if (done == 0) printf(target " " target2 ":") done=1 printf(" \\\n\t" substr($3,2,length($3)-2)) used[$3] = 1; } } } if (done == 1) print "\n" } } php-4.2.3/build/print_include.awk0100644000175200000240000000017207261110754015606 0ustar zeevstaff/phpext_/ { if (old_filename != FILENAME) { printf "#include \"" FILENAME "\"@NEWLINE@" old_filename = FILENAME } } php-4.2.3/build/program.mk0100644000175200000240000000254507437364577014274 0ustar zeevstaff# +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: program.mk,v 1.6 2025/02/28 08:25:35 sebastian Exp $ # PROGRAM_OBJECTS = $(PROGRAM_SOURCES:.c=.lo) $(PROGRAM_NAME): $(PROGRAM_DEPENDENCIES) $(PROGRAM_OBJECTS) $(LINK_CLEAN) $(PROGRAM_LDFLAGS) $(PROGRAM_OBJECTS) $(PROGRAM_LDADD) php-4.2.3/build/rules.mk0100644000175200000240000000577007507203164013740 0ustar zeevstaff# +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: rules.mk,v 1.35.2.3 2025/06/29 00:59:32 sniper Exp $ # include $(top_srcdir)/build/rules_common.mk all: all-recursive install: install-recursive distclean-recursive depend-recursive clean-recursive all-recursive install-recursive: @otarget=`echo $@|sed s/-recursive//`; \ list='$(SUBDIRS)'; for i in $$list; do \ target="$$otarget"; \ echo "Making $$target in $$i"; \ if test "$$i" = "."; then \ ok=yes; \ target="$$target-p"; \ fi; \ (cd $$i && $(MAKE) $$target) || exit 1; \ done; \ if test "$$otarget" = "all" && test -z '$(targets)'; then ok=yes; fi; \ if test "$$ok" != "yes"; then $(MAKE) "$$otarget-p" || exit 1; fi all-p: $(targets) install-p: $(targets) $(install_targets) distclean-p depend-p clean-p: depend: depend-recursive @echo $(top_srcdir) $(top_builddir) $(srcdir) $(CPP) $(INCLUDES) $(EXTRA_INCLUDES) $(DEFS) $(CPPFLAGS) $(srcdir)/*.c *.c | $(AWK) -f $(top_srcdir)/build/mkdep.awk > $(builddir)/.deps || true clean: clean-modules clean-recursive clean-x clean-modules: clean-x: rm -f $(targets) *.lo *.slo *.la *.o $(CLEANFILES) rm -rf .libs libs/* distclean: distclean-recursive clean-x rm -f config.cache config.log config.status config_vars.mk libtool \ php_config.h stamp-h Makefile build-defs.h php4.spec libphp4.module test: $(top_builddir)/sapi/cli/php @if test "$(TESTS)" = ""; then \ TOP_BUILDDIR=$(top_builddir) TOP_SRCDIR=$(top_srcdir) $(top_builddir)/sapi/cli/php -c $(top_srcdir)/php.ini-dist $(top_srcdir)/run-tests.php $(srcdir); \ else \ TOP_BUILDDIR=$(top_builddir) TOP_SRCDIR=$(top_srcdir) $(top_builddir)/sapi/cli/php -c $(top_srcdir)/php.ini-dist $(top_srcdir)/run-tests.php $(TESTS); \ fi include $(builddir)/.deps .PHONY: all-recursive clean-recursive install-recursive \ $(install_targets) install all clean depend depend-recursive shared \ distclean-recursive distclean clean-x all-p install-p distclean-p \ depend-p clean-p php-4.2.3/build/rules_common.mk0100644000175200000240000000515707437364600015314 0ustar zeevstaff# +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: rules_common.mk,v 1.11 2025/02/28 08:25:36 sebastian Exp $ # include $(top_builddir)/config_vars.mk COMMON_FLAGS = $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) COMPILE = $(CC) $(COMMON_FLAGS) $(CFLAGS) $(EXTRA_CFLAGS) CXX_COMPILE = $(CXX) $(COMMON_FLAGS) $(CXXFLAGS) $(EXTRA_CXXFLAGS) SHARED_COMPILE = $(SHARED_LIBTOOL) --mode=compile $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) -prefer-pic $(EXTRA_CFLAGS) -c $< && touch $@ CXX_SHARED_COMPILE = $(SHARED_LIBTOOL) --mode=compile $(CXX) $(COMMON_FLAGS) $(CXXFLAGS_CLEAN) -prefer-pic $(EXTRA_CXXFLAGS) -c $< && touch $@ LINK = $(LIBTOOL) --mode=link $(COMPILE) $(LDFLAGS) -o $@ LINK_CLEAN = $(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p INSTALL = $(top_srcdir)/build/shtool install -c INSTALL_DATA = $(INSTALL) -m 644 DEFS = -I. -I$(srcdir) -I$(top_builddir)/main -I$(top_srcdir) moduledir = $(EXTENSION_DIR) CXX_SUFFIX = .cpp .SUFFIXES: .SUFFIXES: .slo .c $(CXX_SUFFIX) .lo .o .s .y .l .c.o: $(COMPILE) -c $< $(CXX_SUFFIX).o: $(CXX_COMPILE) -c $< .s.o: $(COMPILE) -c $< .c.lo: $(PHP_COMPILE) $(CXX_SUFFIX).lo: $(CXX_PHP_COMPILE) .s.lo: $(PHP_COMPILE) .c.slo: $(SHARED_COMPILE) $(CXX_SUFFIX).slo: $(CXX_SHARED_COMPILE) .y.c: $(YACC) $(YFLAGS) $< && mv y.tab.c $*.c if test -f y.tab.h; then \ if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \ else :; fi .l.c: $(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@ php-4.2.3/build/rules_pear.mk0100644000175200000240000000574007437364601014752 0ustar zeevstaff# +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: rules_pear.mk,v 1.16 2025/02/28 08:25:37 sebastian Exp $ # include $(top_srcdir)/build/rules_common.mk install_targets = install-modules all: all-recursive install: install-recursive distclean-recursive depend-recursive clean-recursive all-recursive install-recursive: @otarget=`echo $@|sed s/-recursive//`; \ list='$(SUBDIRS)'; for i in $$list; do \ target="$$otarget"; \ echo "Making $$target in $$i"; \ if test "$$i" = "."; then \ ok=yes; \ target="$$target-p"; \ fi; \ (cd $$i && $(MAKE) $$target) || exit 1; \ done; \ if test "$$otarget" = "all" && test -z '$(targets)'; then ok=yes; fi; \ if test "$$ok" != "yes"; then $(MAKE) "$$otarget-p" || exit 1; fi all-p: $(targets) install-p: $(targets) $(install_targets) distclean-p depend-p clean-p: depend: depend-recursive @echo $(top_srcdir) $(top_builddir) $(srcdir) $(CPP) $(INCLUDES) $(EXTRA_INCLUDES) $(DEFS) $(CPPFLAGS) $(srcdir)/*.c *.c | $(AWK) -f $(top_srcdir)/build/mkdep.awk > $(builddir)/.deps || true clean: clean-recursive clean-x clean-x: rm -f $(targets) *.lo *.slo *.la *.o $(CLEANFILES) rm -rf .libs distclean: distclean-recursive clean-x rm -f config.cache config.log config.status config_vars.mk libtool \ config.h stamp-h Makefile build-defs.h php4.spec libphp4.module cvsclean: @for i in `find . -name .cvsignore`; do \ (cd `dirname $$i` 2>/dev/null && rm -rf `cat .cvsignore` *.o *.a || true); \ done @rm -f $(SUBDIRS) 2>/dev/null || true install-modules: @test -d modules && \ $(mkinstalldirs) $(moduledir) && \ echo "installing shared modules into $(moduledir)" && \ rm -f modules/*.la && \ cp modules/* $(moduledir) || true include $(builddir)/.deps .PHONY: all-recursive clean-recursive install-recursive \ $(install_targets) install all clean depend depend-recursive shared \ distclean-recursive distclean clean-x all-p install-p distclean-p \ depend-p clean-p php-4.2.3/build/shtool0100755000175200000240000005626507106731743013524 0ustar zeevstaff#!/bin/sh ## ## GNU shtool -- The GNU Portable Shell Tool ## Copyright (c) 1994-2000 Ralf S. Engelschall ## ## See http://www.gnu.org/software/shtool/ for more information. ## See ftp://ftp.gnu.org/gnu/shtool/ for latest version. ## ## Version 1.4.9 (16-Apr-2000) ## Ingredients: 3/17 available modules ## ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ## USA, or contact Ralf S. Engelschall . ## ## Notice: Given that you include this file verbatim into your own ## source tree, you are justified in saying that it remains separate ## from your package, and that this way you are simply just using GNU ## shtool. So, in this situation, there is no requirement that your ## package itself is licensed under the GNU General Public License in ## order to take advantage of GNU shtool. ## ## ## Usage: shtool [] [ [] []] ## ## Available commands: ## echo Print string with optional construct expansion ## install Install a program, script or datafile ## mkdir Make one or more directories ## ## Not available commands (because module was not built-in): ## mdate Pretty-print modification time of a file or dir ## table Pretty-print a field-separated list as a table ## prop Display progress with a running propeller ## move Move files with simultaneous substitution ## mkln Make link with calculation of relative paths ## mkshadow Make a shadow tree through symbolic links ## fixperm Fix file permissions inside a source tree ## tarball Roll distribution tarballs ## guessos Simple operating system guesser ## arx Extended archive command ## slo Separate linker options by library class ## scpp Sharing C Pre-Processor ## version Generate and maintain a version information file ## path Deal with program paths ## if [ $# -eq 0 ]; then echo "$0:Error: invalid command line" 1>&2 echo "$0:Hint: run \`$0 -h' for usage" 1>&2 exit 1 fi if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then echo "This is GNU shtool, version 1.4.9 (16-Apr-2000)" echo "Copyright (c) 1994-2000 Ralf S. Engelschall " echo "Report bugs to " echo '' echo "Usage: shtool [] [ [] []]" echo '' echo 'Available global :' echo ' -v, --version display shtool version information' echo ' -h, --help display shtool usage help page (this one)' echo ' -d, --debug display shell trace information' echo '' echo 'Available [] []:' echo ' echo [-n] [-e] [ ...]' echo ' install [-v] [-t] [-c] [-C] [-s] [-m] [-o] [-g]' echo ' [-e] ' echo ' mkdir [-t] [-f] [-p] [-m] [ ...]' echo '' echo 'Not available (because module was not built-in):' echo ' mdate [-n] [-z] [-s] [-d] [-f] [-o] ' echo ' table [-F] [-w] [-c] [-s] ...' echo ' prop [-p]' echo ' move [-v] [-t] [-e] [-p] ' echo ' mkln [-t] [-f] [-s] [ ...] ' echo ' mkshadow [-v] [-t] [-a] ' echo ' fixperm [-v] [-t] [ ...]' echo ' tarball [-t] [-v] [-o ] [-c ] [-d ] [-u' echo ' ] [-g ] [-e ] [ ...]' echo ' guessos ' echo ' arx [-t] [-C] [ ...]' echo ' slo [-p] -- -L -l [-L -l ...]' echo ' scpp [-v] [-p] [-f] [-o] [-t] [-M]' echo ' [-D] [-C] [ ...]' echo ' version [-l] [-n] [-p] [-s] [-i]' echo ' [-d] ' echo ' path [-s] [-r] [-d] [-b] [-m] [-p] [ ...]' echo '' exit 0 fi if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then echo "GNU shtool 1.4.9 (16-Apr-2000)" exit 0 fi if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then shift set -x fi name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'` case "$name" in echo|install|mkdir ) # implicit tool command selection tool="$name" ;; * ) # explicit tool command selection tool="$1" shift ;; esac arg_spec="" opt_spec="" gen_tmpfile=no ## ## DISPATCH INTO SCRIPT PROLOG ## case $tool in echo ) str_tool="echo" str_usage="[-n] [-e] [ ...]" arg_spec="0+" opt_spec="n.e." opt_n=no opt_e=no ;; install ) str_tool="install" str_usage="[-v] [-t] [-c] [-C] [-s] [-m] [-o] [-g] [-e] " arg_spec="2=" opt_spec="v.t.c.C.s.m:o:g:e:" opt_v=no opt_t=no opt_c=no opt_C=no opt_s=no opt_m="" opt_o="" opt_g="" opt_e="" ;; mkdir ) str_tool="mkdir" str_usage="[-t] [-f] [-p] [-m] [ ...]" arg_spec="1+" opt_spec="t.f.p.m:" opt_t=no opt_f=no opt_p=no opt_m="" ;; -* ) echo "$0:Error: unknown option \`$tool'" 2>&1 echo "$0:Hint: run \`$0 -h' for usage" 2>&1 exit 1 ;; * ) echo "$0:Error: unknown command \`$tool'" 2>&1 echo "$0:Hint: run \`$0 -h' for usage" 2>&1 exit 1 ;; esac ## ## COMMON UTILITY CODE ## # determine name of tool if [ ".$tool" != . ]; then # used inside shtool script toolcmd="$0 $tool" toolcmdhelp="shtool $tool" msgprefix="shtool:$tool" else # used as standalone script toolcmd="$0" toolcmdhelp="sh $0" msgprefix="$str_tool" fi # parse argument specification string eval `echo $arg_spec |\ sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'` # parse option specification string eval `echo h.$opt_spec |\ sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'` # interate over argument line opt_PREV='' while [ $# -gt 0 ]; do # special option stops processing if [ ".$1" = ".--" ]; then shift break fi # determine option and argument opt_ARG_OK=no if [ ".$opt_PREV" != . ]; then # merge previous seen option with argument opt_OPT="$opt_PREV" opt_ARG="$1" opt_ARG_OK=yes opt_PREV='' else # split argument into option and argument case "$1" in -[a-zA-Z0-9]*) eval `echo "x$1" |\ sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \ -e 's/";\(.*\)$/"; opt_ARG="\1"/'` ;; -[a-zA-Z0-9]) opt_OPT=`echo "x$1" | cut -c3-` opt_ARG='' ;; *) break ;; esac fi # eat up option shift # determine whether option needs an argument eval "opt_MODE=\$opt_MODE_${opt_OPT}" if [ ".$opt_ARG" = . -a ".$opt_ARG_OK" != .yes ]; then if [ ".$opt_MODE" = ".:" -o ".$opt_MODE" = ".+" ]; then opt_PREV="$opt_OPT" continue fi fi # process option case $opt_MODE in '.' ) # boolean option eval "opt_${opt_OPT}=yes" ;; ':' ) # option with argument (multiple occurances override) eval "opt_${opt_OPT}=\"\$opt_ARG\"" ;; '+' ) # option with argument (multiple occurances append) eval "opt_${opt_OPT}=\"\$opt_${opt_OPT} \$opt_ARG\"" ;; * ) echo "$msgprefix:Error: unknown option: \`-$opt_OPT'" 1>&2 echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2 exit 1 ;; esac done if [ ".$opt_PREV" != . ]; then echo "$msgprefix:Error: missing argument to option \`-$opt_PREV'" 1>&2 echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2 exit 1 fi # process help option if [ ".$opt_h" = .yes ]; then echo "Usage: $toolcmdhelp $str_usage" exit 0 fi # complain about incorrect number of arguments case $arg_MODE in '=' ) if [ $# -ne $arg_NUMS ]; then echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2 echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2 exit 1 fi ;; '+' ) if [ $# -lt $arg_NUMS ]; then echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2 echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2 exit 1 fi ;; esac # establish a temporary file on request if [ ".$gen_tmpfile" = .yes ]; then if [ ".$TMPDIR" != . ]; then tmpdir="$TMPDIR" elif [ ".$TEMPDIR" != . ]; then tmpdir="$TEMPDIR" else tmpdir="/tmp" fi tmpfile="$tmpdir/.shtool.$$" rm -f $tmpfile >/dev/null 2>&1 touch $tmpfile fi ## ## DISPATCH INTO SCRIPT BODY ## case $tool in echo ) ## ## echo -- Print string with optional construct expansion ## Copyright (c) 1998-2000 Ralf S. Engelschall ## Originally written for WML as buildinfo ## text="$*" # check for broken escape sequence expansion seo='' bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'` if [ ".$bytes" != .3 ]; then bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'` if [ ".$bytes" = .3 ]; then seo='-E' fi fi # check for existing -n option (to suppress newline) minusn='' bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'` if [ ".$bytes" = .3 ]; then minusn='-n' fi # determine terminal bold sequence term_bold='' term_norm='' if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then case $TERM in # for the most important terminal types we directly know the sequences xterm|xterm*|vt220|vt220*) term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' /dev/null` term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' /dev/null` ;; vt100|vt100*) term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' /dev/null` term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' /dev/null` ;; # for all others, we try to use a possibly existing `tput' or `tcout' utility * ) paths=`echo $PATH | sed -e 's/:/ /g'` for tool in tput tcout; do for dir in $paths; do if [ -r "$dir/$tool" ]; then for seq in bold md smso; do # 'smso' is last bold="`$dir/$tool $seq 2>/dev/null`" if [ ".$bold" != . ]; then term_bold="$bold" break fi done if [ ".$term_bold" != . ]; then for seq in sgr0 me rmso reset; do # 'reset' is last norm="`$dir/$tool $seq 2>/dev/null`" if [ ".$norm" != . ]; then term_norm="$norm" break fi done fi break fi done if [ ".$term_bold" != . -a ".$term_norm" != . ]; then break; fi done ;; esac if [ ".$term_bold" = . -o ".$term_norm" = . ]; then echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2 fi fi # determine user name username='' if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uU]'`" != . ]; then username="$LOGNAME" if [ ".$username" = . ]; then username="$USER" if [ ".$username" = . ]; then username="`(whoami) 2>/dev/null |\ awk '{ printf("%s", $1); }'`" if [ ".$username" = . ]; then username="`(who am i) 2>/dev/null |\ awk '{ printf("%s", $1); }'`" if [ ".$username" = . ]; then username='unknown' fi fi fi fi fi # determine user id userid='' if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%U'`" != . ]; then userid="`(id -u) 2>/dev/null`" if [ ".$userid" = . ]; then str="`(id) 2>/dev/null`" if [ ".`echo $str | grep '^uid[ ]*=[ ]*[0-9]*('`" != . ]; then userid=`echo $str | sed -e 's/^uid[ ]*=[ ]*//' -e 's/(.*//'` fi if [ ".$userid" = . ]; then userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \ sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` if [ ".$userid" = . ]; then userid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \ sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` if [ ".$userid" = . ]; then userid='?' fi fi fi fi fi # determine host name hostname='' if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then hostname="`(uname -n) 2>/dev/null |\ awk '{ printf("%s", $1); }'`" if [ ".$hostname" = . ]; then hostname="`(hostname) 2>/dev/null |\ awk '{ printf("%s", $1); }'`" if [ ".$hostname" = . ]; then hostname='unknown' fi fi case $hostname in *.* ) domainname=".`echo $hostname | cut -d. -f2-`" hostname="`echo $hostname | cut -d. -f1`" ;; esac fi # determine domain name domainname='' if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then if [ ".$domainname" = . ]; then if [ -f /etc/resolv.conf ]; then domainname="`egrep '^[ ]*domain' /etc/resolv.conf | head -1 |\ sed -e 's/.*domain//' \ -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \ -e 's/^\.//' -e 's/^/./' |\ awk '{ printf("%s", $1); }'`" if [ ".$domainname" = . ]; then domainname="`egrep '^[ ]*search' /etc/resolv.conf | head -1 |\ sed -e 's/.*search//' \ -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \ -e 's/ .*//' -e 's/ .*//' \ -e 's/^\.//' -e 's/^/./' |\ awk '{ printf("%s", $1); }'`" fi fi fi fi # determine current time time_day='' time_month='' time_year='' time_monthname='' if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[DMYm]'`" != . ]; then time_day=`date '+%d'` time_month=`date '+%m'` time_year=`date '+%Y' 2>/dev/null` if [ ".$time_year" = . ]; then time_year=`date '+%y'` case $time_year in [5-9][0-9]) time_year="19$time_year" ;; [0-4][0-9]) time_year="20$time_year" ;; esac fi case $time_month in 1|01) time_monthname='Jan' ;; 2|02) time_monthname='Feb' ;; 3|03) time_monthname='Mar' ;; 4|04) time_monthname='Apr' ;; 5|05) time_monthname='May' ;; 6|06) time_monthname='Jun' ;; 7|07) time_monthname='Jul' ;; 8|08) time_monthname='Aug' ;; 9|09) time_monthname='Sep' ;; 10) time_monthname='Oct' ;; 11) time_monthname='Nov' ;; 12) time_monthname='Dec' ;; esac fi # expand special ``%x'' constructs if [ ".$opt_e" = .yes ]; then text=`echo $seo "$text" |\ sed -e "s/%B/${term_bold}/g" \ -e "s/%b/${term_norm}/g" \ -e "s/%u/${username}/g" \ -e "s/%U/${userid}/g" \ -e "s/%h/${hostname}/g" \ -e "s/%d/${domainname}/g" \ -e "s/%D/${time_day}/g" \ -e "s/%M/${time_month}/g" \ -e "s/%Y/${time_year}/g" \ -e "s/%m/${time_monthname}/g" 2>/dev/null` fi # create output if [ .$opt_n = .no ]; then echo $seo "$text" else # the harder part: echo -n is best, because # awk may complain about some \xx sequences. if [ ".$minusn" != . ]; then echo $seo $minusn "$text" else echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text" fi fi ;; install ) ## ## install -- Install a program, script or datafile ## Copyright (c) 1997-2000 Ralf S. Engelschall ## Originally written for shtool ## src="$1" dst="$2" # If destination is a directory, append the input filename if [ -d $dst ]; then dst=`echo "$dst" | sed -e 's:/$::'` dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'` dst="$dst/$dstfile" fi # Add a possible extension to src and dst if [ ".$opt_e" != . ]; then src="$src$opt_e" dst="$dst$opt_e" fi # Check for correct arguments if [ ".$src" = ".$dst" ]; then echo "$msgprefix:Error: source and destination are the same" 1>&2 exit 1 fi # Make a temp file name in the destination directory dstdir=`echo $dst | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'` dsttmp="$dstdir/#INST@$$#" # Verbosity if [ ".$opt_v" = .yes ]; then echo "$src -> $dst" 1>&2 fi # Copy or move the file name to the temp name # (because we might be not allowed to change the source) if [ ".$opt_C" = .yes ]; then opt_c=yes fi if [ ".$opt_c" = .yes ]; then if [ ".$opt_t" = .yes ]; then echo "cp $src $dsttmp" 1>&2 fi cp $src $dsttmp || exit $? else if [ ".$opt_t" = .yes ]; then echo "mv $src $dsttmp" 1>&2 fi mv $src $dsttmp || exit $? fi # Adjust the target file # (we do chmod last to preserve setuid bits) if [ ".$opt_s" = .yes ]; then if [ ".$opt_t" = .yes ]; then echo "strip $dsttmp" 1>&2 fi strip $dsttmp || exit $? fi if [ ".$opt_o" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chown $opt_o $dsttmp" 1>&2 fi chown $opt_o $dsttmp || exit $? fi if [ ".$opt_g" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chgrp $opt_g $dsttmp" 1>&2 fi chgrp $opt_g $dsttmp || exit $? fi if [ ".$opt_m" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chmod $opt_m $dsttmp" 1>&2 fi chmod $opt_m $dsttmp || exit $? fi # Determine whether to do a quick install # (has to be done _after_ the strip was already done) quick=no if [ ".$opt_C" = .yes ]; then if [ -r $dst ]; then if cmp -s $src $dst; then quick=yes fi fi fi # Finally install the file to the real destination if [ $quick = yes ]; then if [ ".$opt_t" = .yes ]; then echo "rm -f $dsttmp" 1>&2 fi rm -f $dsttmp else if [ ".$opt_t" = .yes ]; then echo "rm -f $dst && mv $dsttmp $dst" 1>&2 fi rm -f $dst && mv $dsttmp $dst fi ;; mkdir ) ## ## mkdir -- Make one or more directories ## Copyright (c) 1996-2000 Ralf S. Engelschall ## Originally written for public domain by Noah Friedman ## Cleaned up and enhanced for shtool ## errstatus=0 for p in ${1+"$@"}; do # if the directory already exists... if [ -d "$p" ]; then if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then echo "$msgprefix:Error: directory already exists: $p" 1>&2 errstatus=1 break else continue fi fi # if the directory has to be created... if [ ".$opt_p" = .no ]; then if [ ".$opt_t" = .yes ]; then echo "mkdir $p" 1>&2 fi mkdir $p || errstatus=$? else # the smart situation set fnord `echo ":$p" |\ sed -e 's/^:\//%/' \ -e 's/^://' \ -e 's/\// /g' \ -e 's/^%/\//'` shift pathcomp='' for d in ${1+"$@"}; do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp="./$pathcomp" ;; esac if [ ! -d "$pathcomp" ]; then if [ ".$opt_t" = .yes ]; then echo "mkdir $pathcomp" 1>&2 fi mkdir $pathcomp || errstatus=$? if [ ".$opt_m" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chmod $opt_m $pathcomp" 1>&2 fi chmod $opt_m $pathcomp || errstatus=$? fi fi pathcomp="$pathcomp/" done fi done exit $errstatus ;; esac exit 0 ##EOF## php-4.2.3/build/sysv_makefile0100755000175200000240000000277607437364601015055 0ustar zeevstaff#! /bin/sh # +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: sysv_makefile,v 1.3 2025/02/28 08:25:37 sebastian Exp $ # # cwd must be top_srcdir test -f build/sysv_makefile || exit 2 test -f bsd_converted || exit 1 tmpfile=`mktemp /tmp/sysv_makefile.XXXXXX` || tmpfile="tmp.$$" for i in build/*.mk; do sed 's/^\.include "\(.*\)"/include \1/' $i >$tmpfile \ && cp $tmpfile $i done rm -f $tmpfile rm bsd_converted exit 0 php-4.2.3/configure0100755000175200000240000705460507535765605013113 0ustar zeevstaff#! /bin/sh # +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available at through the world-wide-web at | # | http://www.php.net/license/2_02.txt. | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id: dynlib.m4,v 1.9 2025/02/28 08:25:27 sebastian Exp $ # # Do all the work for Automake. This macro actually does too much -- # some checks are only needed if your package does certain things. # But this isn't really a big deal. # serial 1 # # Check to make sure that the build environment is sane. # # Like AC_CONFIG_HEADER, but automatically create stamp file. # Add --enable-maintainer-mode option to configure. # From Jim Meyering # serial 1 # Define a conditional. # serial 1 # @defmac AC_PROG_CC_STDC # @maindex PROG_CC_STDC # @ovindex CC # If the C compiler in not in ANSI C mode by default, try to add an option # to output variable @code{CC} to make it so. This macro tries various # options that select ANSI C on some system or another. It considers the # compiler to be in ANSI C mode if it handles function prototypes correctly. # # If you use this macro, you should check after calling it whether the C # compiler has been set to accept ANSI C; if not, the shell variable # @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source # code in ANSI C, you can make an un-ANSIfied copy of it by using the # program @code{ansi2knr}, which comes with Ghostscript. # @end defmac # libtool.m4 - Configure libtool for the host system. -*-Shell-script-*- # serial 46 AC_PROG_LIBTOOL # AC_LIBTOOL_HEADER_ASSERT # ------------------------ # AC_LIBTOOL_HEADER_ASSERT # _LT_AC_CHECK_DLFCN # -------------------- # _LT_AC_CHECK_DLFCN # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # --------------------------------- # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR # --------------------------------- # _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR # _LT_AC_PROG_ECHO_BACKSLASH # -------------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. # _LT_AC_PROG_ECHO_BACKSLASH # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ------------------------------------------------------------------ # _LT_AC_TRY_DLOPEN_SELF # AC_LIBTOOL_DLOPEN_SELF # ------------------- # AC_LIBTOOL_DLOPEN_SELF # _LT_AC_LTCONFIG_HACK # AC_LIBTOOL_DLOPEN - enable checks for dlopen support # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's # AC_ENABLE_SHARED - implement the --enable-shared flag # Usage: AC_ENABLE_SHARED[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AC_DISABLE_SHARED - set the default shared flag to --disable-shared # AC_ENABLE_STATIC - implement the --enable-static flag # Usage: AC_ENABLE_STATIC[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AC_DISABLE_STATIC - set the default static flag to --disable-static # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install # AC_LIBTOOL_PICMODE - implement the --with-pic flag # Usage: AC_LIBTOOL_PICMODE[(MODE)] # Where MODE is either `yes' or `no'. If omitted, it defaults to # `both'. # AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library # AC_PATH_MAGIC - find a file program which can recognise a shared library # AC_PROG_LD - find the path to the GNU or non-GNU linker # AC_PROG_LD_GNU - # AC_PROG_LD_RELOAD_FLAG - find reload flag for linker # -- PORTME Some linkers may need a different reload flag. # AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics # AC_PROG_NM - find the path to a BSD-compatible name lister # AC_CHECK_LIBM - check for math library # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for # the libltdl convenience library and INCLTDL to the include flags for # the libltdl header and adds --enable-ltdl-convenience to the # configure arguments. Note that LIBLTDL and INCLTDL are not # AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not # provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed # with '${top_builddir}/' and INCLTDL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for # the libltdl installable library and INCLTDL to the include flags for # the libltdl header and adds --enable-ltdl-install to the configure # arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is # AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed # libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and INCLTDL will be prefixed # with '${top_srcdir}/' (note the single quotes!). If your package is # not flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. # old names # This is just to silence aclocal about the macro not being used # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Defaults: ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer" ac_help="$ac_help SAPI modules: " ac_help="$ac_help --with-aolserver=DIR Specify path to the installed AOLserver" ac_help="$ac_help --with-apxs[=FILE] Build shared Apache 1.x module. FILE is the optional pathname to the Apache apxs tool; defaults to "apxs"." ac_help="$ac_help --with-apache[=DIR] Build Apache 1.x module. DIR is the top-level Apache build directory, defaults to /usr/local/apache." ac_help="$ac_help --with-mod_charset Enable transfer tables for mod_charset (Rus Apache)." ac_help="$ac_help --with-apxs2[=FILE] EXPERIMENTAL: Build shared Apache 2.0 module. FILE is the optional pathname to the Apache apxs tool; defaults to "apxs"." ac_help="$ac_help --with-caudium=DIR Build PHP as a Pike module for use with Caudium DIR is the Caudium server dir, with the default value /usr/local/caudium/server." ac_help="$ac_help --enable-force-cgi-redirect Enable the security check for internal server redirects. You should use this if you are running the CGI version with Apache. " ac_help="$ac_help --enable-discard-path If this is enabled, the PHP CGI binary can safely be placed outside of the web tree and people will not be able to circumvent .htaccess security. " ac_help="$ac_help --with-fhttpd[=DIR] Build fhttpd module. DIR is the fhttpd sources directory, defaults to /usr/local/src/fhttpd." ac_help="$ac_help --enable-cli EXPERIMENTAL: Enable building CLI version of PHP." ac_help="$ac_help --with-fastcgi=SRCDIR Build PHP as FastCGI application" ac_help="$ac_help --with-isapi=DIR Build PHP as an ISAPI module for use with Zeus." ac_help="$ac_help --with-nsapi=DIR Build PHP as NSAPI module for use with iPlanet." ac_help="$ac_help --with-phttpd=DIR Build PHP as phttpd module" ac_help="$ac_help --with-pi3web=DIR Build PHP as a module for use with Pi3Web." ac_help="$ac_help --with-roxen=DIR Build PHP as a Pike module. DIR is the base Roxen directory, normally /usr/local/roxen/server." ac_help="$ac_help --enable-roxen-zts Build the Roxen module using Zend Thread Safety." ac_help="$ac_help --with-servlet[=DIR] Include servlet support. DIR is the base install directory for the JSDK. This SAPI prereqs the java extension must be built as a shared dl." ac_help="$ac_help --with-thttpd=SRCDIR Build PHP as thttpd module" ac_help="$ac_help --with-tux=MODULEDIR Build PHP as a TUX module (Linux only)" ac_help="$ac_help --with-webjames=SRCDIR Build PHP as a WebJames module (RISC OS only)" ac_help="$ac_help General settings: " ac_help="$ac_help --enable-debug Compile with debugging symbols." ac_help="$ac_help --with-layout=TYPE Sets how installed files will be laid out. Type is one of "PHP" (default) or "GNU"" ac_help="$ac_help --with-config-file-path=PATH Sets the path in which to look for php.ini, defaults to PREFIX/lib" ac_help="$ac_help --with-pear=DIR Install PEAR in DIR (default PREFIX/lib/php) --without-pear Do not install PEAR" ac_help="$ac_help --enable-safe-mode Enable safe mode by default." ac_help="$ac_help --with-exec-dir[=DIR] Only allow executables in DIR when in safe mode defaults to /usr/local/php/bin" ac_help="$ac_help --with-openssl[=DIR] Include OpenSSL support (requires OpenSSL >= 0.9.5) " ac_help="$ac_help --enable-sigchild Enable PHP's own SIGCHLD handler." ac_help="$ac_help --enable-magic-quotes Enable magic quotes by default." ac_help="$ac_help --disable-rpath Disable passing additional runtime library search paths" ac_help="$ac_help --enable-libgcc Enable explicitly linking against libgcc" ac_help="$ac_help --disable-short-tags Disable the short-form Define the location of zlib install directory" ac_help="$ac_help --with-zlib[=DIR] Include ZLIB support (requires zlib >= 1.0.9)." ac_help="$ac_help --with-aspell[=DIR] Include ASPELL support." ac_help="$ac_help --enable-bcmath Enable bc style precision math functions." ac_help="$ac_help --with-bz2[=DIR] Include BZip2 support" ac_help="$ac_help --enable-calendar Enable support for calendar conversion" ac_help="$ac_help --with-ccvs[=DIR] Include CCVS support" ac_help="$ac_help --with-cpdflib[=DIR] Include cpdflib support (requires cpdflib >= 2)." ac_help="$ac_help --with-jpeg-dir[=DIR] jpeg dir for cpdflib 2.x" ac_help="$ac_help --with-tiff-dir[=DIR] tiff dir for cpdflib 2.x" ac_help="$ac_help --with-crack[=DIR] Include crack support." ac_help="$ac_help --disable-ctype Disable ctype functions" ac_help="$ac_help --with-curl[=DIR] Include CURL support" ac_help="$ac_help --with-cybercash[=DIR] Include CyberCash support. DIR is the CyberCash MCK install directory." ac_help="$ac_help --with-cybermut[=DIR] Include CyberMut (french Credit Mutuel telepaiement)" ac_help="$ac_help --with-cyrus Include cyrus imap support" ac_help="$ac_help --with-db Include old xDBM support (deprecated)" ac_help="$ac_help --enable-dba=shared Build DBA as a shared module" ac_help="$ac_help --with-gdbm[=DIR] Include GDBM support" ac_help="$ac_help --with-ndbm[=DIR] Include NDBM support" ac_help="$ac_help --with-db2[=DIR] Include Berkeley DB2 support" ac_help="$ac_help --with-db3[=DIR] Include Berkeley DB3 support" ac_help="$ac_help --with-dbm[=DIR] Include DBM support" ac_help="$ac_help --with-cdb[=DIR] Include CDB support" ac_help="$ac_help " ac_help="$ac_help --enable-dbase Enable the bundled dbase library" ac_help="$ac_help --with-dbplus Include dbplus support" ac_help="$ac_help --enable-dbx Enable dbx" ac_help="$ac_help --enable-dio Enable direct I/O support" ac_help="$ac_help --with-dom[=DIR] Include DOM support (requires libxml >= 2.4.14). DIR is the libxml install directory." ac_help="$ac_help --with-dom-xslt[=DIR] Include DOM XSLT support (requires libxslt >= 1.0.3). DIR is the libxslt install directory." ac_help="$ac_help --with-dom-exslt[=DIR] Include DOM EXSLT support (requires libxslt >= 1.0.3). DIR is the libexslt install directory." ac_help="$ac_help --enable-exif Enable EXIF support" ac_help="$ac_help --with-fbsql[=DIR] Include FrontBase support. DIR is the FrontBase base directory." ac_help="$ac_help --with-fdftk[=DIR] Include FDF support." ac_help="$ac_help " ac_help="$ac_help --enable-filepro Enable the bundled read-only filePro support." ac_help="$ac_help --with-fribidi[=DIR] Include fribidi support (requires FriBidi >=0.1.12)." ac_help="$ac_help --enable-ftp Enable FTP support" ac_help="$ac_help --with-gd[=DIR] Include GD support (DIR is GD's install dir)." ac_help="$ac_help --enable-gd-native-ttf GD: Enable TrueType string function." ac_help="$ac_help --with-jpeg-dir=DIR GD: Set the path to libjpeg install prefix." ac_help="$ac_help --with-png-dir=DIR GD: Set the path to libpng install prefix." ac_help="$ac_help --with-xpm-dir=DIR GD: Set the path to libXpm install prefix." ac_help="$ac_help --with-freetype-dir=DIR GD: Set the path to freetype2 install prefix." ac_help="$ac_help --with-ttf[=DIR] GD: Include FreeType 1.x support" ac_help="$ac_help --with-t1lib[=DIR] GD: Include T1lib support." ac_help="$ac_help --with-gettext[=DIR] Include GNU gettext support." ac_help="$ac_help --with-gmp Include GNU MP support" ac_help="$ac_help --with-hyperwave Include Hyperwave support" ac_help="$ac_help --with-icap[=DIR] Include ICAP support." ac_help="$ac_help --with-iconv[=DIR] Include iconv support" ac_help="$ac_help --with-imap[=DIR] Include IMAP support. DIR is the c-client install prefix." ac_help="$ac_help --with-kerberos[=DIR] IMAP: Include Kerberos support. DIR is the Kerberos install dir." ac_help="$ac_help --with-imap-ssl[=DIR] IMAP: Include SSL support. DIR is the OpenSSL install dir." ac_help="$ac_help --with-informix[=DIR] Include Informix support. DIR is the Informix base install directory, defaults to ${INFORMIXDIR:-nothing}." ac_help="$ac_help --with-ingres[=DIR] Include Ingres II support. DIR is the Ingres base directory (default $II_SYSTEM/II/ingres)" ac_help="$ac_help --with-interbase[=DIR] Include InterBase support. DIR is the InterBase base install directory, defaults to /usr/interbase" ac_help="$ac_help --with-ircg Include IRCG support" ac_help="$ac_help --with-ircg-config IRCG: Path to the ircg-config script" ac_help="$ac_help --with-java[=DIR] Include Java support. DIR is the JDK base install directory. This extension is always built as shared." ac_help="$ac_help --with-ldap[=DIR] Include LDAP support." ac_help="$ac_help --enable-mbstring Enable multibyte string support" ac_help="$ac_help --enable-mbstr-enc-trans Enable japanese encoding translation" ac_help="$ac_help --enable-mbregex Enable multibyte regex support" ac_help="$ac_help --with-mcal[=DIR] Include MCAL support." ac_help="$ac_help --with-mcrypt[=DIR] Include mcrypt support." ac_help="$ac_help --with-mcve[=DIR] Include MCVE support" ac_help="$ac_help --with-mhash[=DIR] Include mhash support." ac_help="$ac_help --with-ming[=DIR] Include MING support" ac_help="$ac_help --with-mnogosearch[=DIR] Include mnoGoSearch support. DIR is the mnoGoSearch base install directory, defaults to /usr/local/mnogosearch." ac_help="$ac_help --with-msession[=DIR] Include msession support" ac_help="$ac_help --with-msql[=DIR] Include mSQL support. DIR is the mSQL base install directory, defaults to /usr/local/Hughes." ac_help="$ac_help --with-muscat[=DIR] Include Muscat support." ac_help="$ac_help --with-mysql[=DIR] Include MySQL support. DIR is the MySQL base directory. If unspecified, the bundled MySQL library will be used." ac_help="$ac_help --with-ncurses[=DIR] Include ncurses support (CLI/CGI only)." ac_help="$ac_help --with-oci8[=DIR] Include Oracle-oci8 support. Default DIR is ORACLE_HOME." ac_help="$ac_help --with-adabas[=DIR] Include Adabas D support. DIR is the Adabas base install directory, defaults to /usr/local." ac_help="$ac_help --with-sapdb[=DIR] Include SAP DB support. DIR is SAP DB base install directory, defaults to /usr/local." ac_help="$ac_help --with-solid[=DIR] Include Solid support. DIR is the Solid base install directory, defaults to /usr/local/solid" ac_help="$ac_help --with-ibm-db2[=DIR] Include IBM DB2 support. DIR is the DB2 base install directory, defaults to /home/db2inst1/sqllib" ac_help="$ac_help --with-empress[=DIR] Include Empress support. DIR is the Empress base install directory, defaults to \$EMPRESSPATH. From PHP4, this option only supports Empress Version 8.60 and above" ac_help="$ac_help --with-empress-bcs[=DIR] Include Empress Local Access support. DIR is the Empress base install directory, defaults to \$EMPRESSPATH. From PHP4, this option only supports Empress Version 8.60 and above." ac_help="$ac_help --with-birdstep[=DIR] Include Birdstep support. DIR is the Birdstep base install directory, defaults to /usr/local/birdstep." ac_help="$ac_help --with-custom-odbc[=DIR] Include a user defined ODBC support. The DIR is ODBC install base directory, which defaults to /usr/local. Make sure to define CUSTOM_ODBC_LIBS and have some odbc.h in your include dirs. E.g., you should define following for Sybase SQL Anywhere 5.5.00 on QNX, prior to run configure script: CPPFLAGS=\"-DODBC_QNX -DSQLANY_BUG\" LDFLAGS=-lunix CUSTOM_ODBC_LIBS=\"-ldblib -lodbc\"." ac_help="$ac_help --with-iodbc[=DIR] Include iODBC support. DIR is the iODBC base install directory, defaults to /usr/local." ac_help="$ac_help --with-esoob[=DIR] Include Easysoft OOB support. DIR is the OOB base install directory, defaults to /usr/local/easysoft/oob/client." ac_help="$ac_help --with-unixODBC[=DIR] Include unixODBC support. DIR is the unixODBC base install directory, defaults to /usr/local." ac_help="$ac_help --with-openlink[=DIR] Include OpenLink ODBC support. DIR is the OpenLink base install directory, defaults to /usr/local. This is the same as iODBC." ac_help="$ac_help --with-dbmaker[=DIR] Include DBMaker support. DIR is the DBMaker base install directory, defaults to where the latest version of DBMaker is installed (such as /home/dbmaker/3.6)." ac_help="$ac_help --with-oracle[=DIR] Include Oracle-oci7 support. Default DIR is ORACLE_HOME." ac_help="$ac_help --enable-overload EXPERIMENTAL: Enable user-space object overloading support." ac_help="$ac_help --with-ovrimos[=DIR] Include Ovrimos SQL Server support. DIR is the Ovrimos libsqlcli install directory." ac_help="$ac_help --enable-pcntl Enable experimental pcntl support (CLI/CGI only)" ac_help="$ac_help --without-pcre-regex Do not include Perl Compatible Regular Expressions support. Use --with-pcre-regex=DIR to specify DIR where PCRE's include and library files are located, if not using bundled library." ac_help="$ac_help --with-pdflib[=DIR] Include PDFlib support." ac_help="$ac_help --with-jpeg-dir[=DIR] PDFLIB: define libjpeg install directory. (OPTIONAL for PDFlib v4)" ac_help="$ac_help --with-png-dir[=DIR] PDFLIB: define libpng install directory. (OPTIONAL for PDFlib v4)" ac_help="$ac_help --with-tiff-dir[=DIR] PDFLIB: define libtiff install directory. (OPTIONAL for PDFlib v4)" ac_help="$ac_help --with-pfpro[=DIR] Include Verisign Payflow Pro support." ac_help="$ac_help --with-pgsql[=DIR] Include PostgreSQL support. DIR is the PostgreSQL base install directory, defaults to /usr/local/pgsql." ac_help="$ac_help --disable-posix Disable POSIX-like functions" ac_help="$ac_help --with-pspell[=DIR] Include PSPELL support." ac_help="$ac_help --with-qtdom Include QtDOM support (requires Qt >= 2.2.0)." ac_help="$ac_help --with-libedit[=DIR] Include libedit readline replacement (CLI/CGI only)." ac_help="$ac_help --with-readline[=DIR] Include readline support (CLI/CGI only)." ac_help="$ac_help --with-recode[=DIR] Include recode support." ac_help="$ac_help --disable-session Disable session support" ac_help="$ac_help --with-mm[=DIR] Include mm support for session storage" ac_help="$ac_help --enable-shmop Enable shmop support" ac_help="$ac_help --with-snmp[=DIR] Include SNMP support." ac_help="$ac_help --enable-ucd-snmp-hack Enable UCD SNMP hack" ac_help="$ac_help --enable-sockets Enable sockets support" ac_help="$ac_help --with-regex=TYPE regex library type: system, apache, php" ac_help="$ac_help --with-system-regex (deprecated) Use system regex library" ac_help="$ac_help --enable-aggregate EXPERIMENTAL: Enable user-space aggregation support." ac_help="$ac_help --with-swf[=DIR] Include swf support" ac_help="$ac_help --with-sybase[=DIR] Include Sybase-DB support. DIR is the Sybase home directory, defaults to /home/sybase." ac_help="$ac_help --with-sybase-ct[=DIR] Include Sybase-CT support. DIR is the Sybase home directory. Defaults to /home/sybase." ac_help="$ac_help --enable-sysvsem Enable System V semaphore support." ac_help="$ac_help --enable-sysvshm Enable the System V shared memory support." ac_help="$ac_help --enable-tokenizer Enable tokenizer support" ac_help="$ac_help --with-vpopmail[=DIR] Include vpopmail support." ac_help="$ac_help --enable-wddx Enable WDDX support." ac_help="$ac_help " ac_help="$ac_help --disable-xml Disable XML support using bundled expat lib" ac_help="$ac_help --with-expat-dir=DIR XML: external libexpat install dir" ac_help="$ac_help --with-xmlrpc[=DIR] Include XMLRPC-EPI support." ac_help="$ac_help --with-expat-dir=DIR XMLRPC-EPI: libexpat dir for XMLRPC-EPI." ac_help="$ac_help --with-iconv-dir=DIR XMLRPC-EPI: iconv dir for XMLRPC-EPI." ac_help="$ac_help --enable-xslt Enable xslt support." ac_help="$ac_help --with-xslt-sablot=DIR XSLT: Enable the sablotron backend." ac_help="$ac_help --with-expat-dir=DIR XSLT: libexpat dir for Sablotron" ac_help="$ac_help --with-sablot-js=DIR Sablotron: enable JavaScript support for Sablotron" ac_help="$ac_help --with-yaz[=DIR] Include YAZ support (ANSI/NISO Z39.50). DIR is the YAZ bin install directory." ac_help="$ac_help --enable-yp Include YP support." ac_help="$ac_help --with-zip[=DIR] Include ZIP support (requires zziplib >= 0.10.6)." ac_help="$ac_help Other settings: " ac_help="$ac_help --enable-versioning Export only required symbols. See INSTALL for more information" ac_help="$ac_help --enable-shared[=PKGS] build shared libraries [default=yes]" ac_help="$ac_help --enable-static[=PKGS] build static libraries [default=yes]" ac_help="$ac_help --enable-fast-install[=PKGS] optimize for fast installation [default=yes]" ac_help="$ac_help --with-gnu-ld assume the C compiler uses GNU ld [default=no]" # Find the correct PATH separator. Usually this is `:', but # DJGPP uses `;' like DOS. if test "X${PATH_SEPARATOR+set}" != Xset; then UNAME=${UNAME-`uname 2>/dev/null`} case X$UNAME in *-DOS) lt_cv_sys_path_separator=';' ;; *) lt_cv_sys_path_separator=':' ;; esac PATH_SEPARATOR=$lt_cv_sys_path_separator fi # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. IFS="${IFS= }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi ac_help="$ac_help --disable-libtool-lock avoid locking (might break parallel builds)" ac_help="$ac_help --with-pic try to use only PIC/non-PIC objects [default=use both]" ac_help="$ac_help --enable-experimental-zts This will most likely break your build" ac_help="$ac_help --enable-inline-optimization If you have much memory and are using gcc, you might try this." ac_help="$ac_help --enable-memory-limit Compile with memory limit support. " ac_help="$ac_help --with-tsrm-pth[=pth-config] Use GNU Pth." ac_help="$ac_help --with-tsrm-st" ac_help="$ac_help --with-tsrm-pthreads Use POSIX threads (default)" # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.13" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=README.CVS-RULES # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi # Find the correct PATH separator. Usually this is `:', but # DJGPP uses `;' like DOS. if test "X${PATH_SEPARATOR+set}" != Xset; then UNAME=${UNAME-`uname 2>/dev/null`} case X$UNAME in *-DOS) lt_cv_sys_path_separator=';' ;; *) lt_cv_sys_path_separator=':' ;; esac PATH_SEPARATOR=$lt_cv_sys_path_separator fi echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 echo "configure:1565: checking for Cygwin environment" >&5 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_cygwin=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_cygwin=no fi rm -f conftest* rm -f conftest* fi echo "$ac_t""$ac_cv_cygwin" 1>&6 CYGWIN= test "$ac_cv_cygwin" = yes && CYGWIN=yes echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 echo "configure:1598: checking for mingw32 environment" >&5 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mingw32=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_mingw32=no fi rm -f conftest* rm -f conftest* fi echo "$ac_t""$ac_cv_mingw32" 1>&6 MINGW32= test "$ac_cv_mingw32" = yes && MINGW32=yes rm -f config.nice cat >config.nice<> config.nice fi done for arg in $0 "$@"; do echo "'$arg' \\" >> config.nice done echo '"$@"' >> config.nice chmod +x config.nice for arg in $0 "$@"; do CONFIGURE_COMMAND="$CONFIGURE_COMMAND '$arg'" done ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Make sure we can run config.sub. if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 echo "configure:1680: checking host system type" >&5 host_alias=$host case "$host_alias" in NONE) case $nonopt in NONE) if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } fi ;; *) host_alias=$nonopt ;; esac ;; esac host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:1712: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 echo "configure:1765: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "$*" != "X $srcdir/configure conftestfile" \ && test "$*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { echo "configure: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" 1>&2; exit 1; } fi test "$2" = conftestfile ) then # Ok. : else { echo "configure: error: newly created file is older than distributed files! Check your system clock" 1>&2; exit 1; } fi rm -f conftest* echo "$ac_t""yes" 1>&6 if test "$program_transform_name" = s,x,x,; then program_transform_name= else # Double any \ or $. echo might interpret backslashes. cat <<\EOF_SED > conftestsed s,\\,\\\\,g; s,\$,$$,g EOF_SED program_transform_name="`echo $program_transform_name|sed -f conftestsed`" rm -f conftestsed fi test "$program_prefix" != NONE && program_transform_name="s,^,${program_prefix},; $program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" # sed with no file args requires a program. test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:1822: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi PACKAGE=php VERSION=4.2.3 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } fi missing_dir=`cd $ac_aux_dir && pwd` echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 echo "configure:1861: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (aclocal --version) < /dev/null > /dev/null 2>&1; then ACLOCAL=aclocal echo "$ac_t""found" 1>&6 else ACLOCAL="$missing_dir/missing aclocal" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 echo "configure:1874: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoconf --version) < /dev/null > /dev/null 2>&1; then AUTOCONF=autoconf echo "$ac_t""found" 1>&6 else AUTOCONF="$missing_dir/missing autoconf" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 echo "configure:1887: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (automake --version) < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake echo "$ac_t""found" 1>&6 else AUTOMAKE="$missing_dir/missing automake" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 echo "configure:1900: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoheader --version) < /dev/null > /dev/null 2>&1; then AUTOHEADER=autoheader echo "$ac_t""found" 1>&6 else AUTOHEADER="$missing_dir/missing autoheader" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 echo "configure:1913: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (makeinfo --version) < /dev/null > /dev/null 2>&1; then MAKEINFO=makeinfo echo "$ac_t""found" 1>&6 else MAKEINFO="$missing_dir/missing makeinfo" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 echo "configure:1930: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6 if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE PHP_VERSION=$VERSION echo "/* automatically generated by configure */" > php_version.h.new echo "/* edit configure.in to change version number */" >> php_version.h.new echo "#define PHP_VERSION \"$PHP_VERSION\"" >> php_version.h.new cmp php_version.h.new php_version.h >/dev/null 2>&1 if test $? -ne 0 ; then rm -f php_version.h && mv php_version.h.new php_version.h && \ echo 'Updated php_version.h' else rm -f php_version.h.new fi if test "$with_shared_apache" != "no" && test -n "$with_shared_apache" ; then { echo "configure: error: --with-shared-apache is not supported. Please refer to the documentation for using APXS" 1>&2; exit 1; } fi if test -n "$with_apache" && test -n "$with_apxs"; then { echo "configure: error: --with-apache and --with-apxs cannot be used together" 1>&2; exit 1; } fi cwd=`pwd` php_shtool=$srcdir/build/shtool T_MD=`$php_shtool echo -n -e %B` T_ME=`$php_shtool echo -n -e %b` test -z "$CFLAGS" && auto_cflags=1 abs_srcdir=`(cd $srcdir; pwd)` abs_builddir=`pwd` $php_shtool mkdir -p libs rm -f libs/* PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES sapi/Makefile ext/Makefile Makefile pear/Makefile main/Makefile sapi/cli/Makefile" # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2005: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2035: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2086: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:2118: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF #line 2129 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:2134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:2160: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:2165: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:2193: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 echo "configure:2226: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 echo "configure:2229: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" if eval "test \"`echo '$''{'ac_cv_prog_cc_${ac_cc}_c_o'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'foo(){}' > conftest.c # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' if { (eval echo configure:2241: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && test -f conftest.o && { (eval echo configure:2242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:2247: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' if { (eval echo configure:2249: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && test -f conftest.o && { (eval echo configure:2250: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 cat >> confdefs.h <<\EOF #define NO_MINUS_C_MINUS_O 1 EOF fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:2277: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # This must be in double quotes, not single quotes, because CPP may get # substituted into the Makefile and "${CC-cc}" will confuse make. CPP="${CC-cc} -E" # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2298: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2315: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2332: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi rm -f conftest* fi rm -f conftest* ac_cv_prog_CPP="$CPP" fi CPP="$ac_cv_prog_CPP" else ac_cv_prog_CPP="$CPP" fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for AIX""... $ac_c" 1>&6 echo "configure:2357: checking for AIX" >&5 cat > conftest.$ac_ext <&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define _ALL_SOURCE 1 EOF else rm -rf conftest* echo "$ac_t""no" 1>&6 fi rm -f conftest* echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6 echo "configure:2384: checking for ${CC-cc} option to accept ANSI C" >&5 if eval "test \"`echo '$''{'am_cv_prog_cc_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else am_cv_prog_cc_stdc=no ac_save_CC="$CC" # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" cat > conftest.$ac_ext < #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main() { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } EOF if { (eval echo configure:2437: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* am_cv_prog_cc_stdc="$ac_arg"; break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* done CC="$ac_save_CC" fi if test -z "$am_cv_prog_cc_stdc"; then echo "$ac_t""none needed" 1>&6 else echo "$ac_t""$am_cv_prog_cc_stdc" 1>&6 fi case "x$am_cv_prog_cc_stdc" in x|xno) ;; *) CC="$CC $am_cv_prog_cc_stdc" ;; esac echo $ac_n "checking whether compiler supports -R""... $ac_c" 1>&6 echo "configure:2461: checking whether compiler supports -R" >&5 if eval "test \"`echo '$''{'php_cv_cc_dashr'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else SAVE_LIBS=$LIBS LIBS="-R /usr/lib $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* php_cv_cc_dashr=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* php_cv_cc_dashr=no fi rm -f conftest* LIBS=$SAVE_LIBS fi echo "$ac_t""$php_cv_cc_dashr" 1>&6 if test $php_cv_cc_dashr = "yes"; then ld_runpath_switch=-R else echo $ac_n "checking whether compiler supports -Wl,-rpath,""... $ac_c" 1>&6 echo "configure:2494: checking whether compiler supports -Wl,-rpath," >&5 if eval "test \"`echo '$''{'php_cv_cc_rpath'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else SAVE_LIBS=$LIBS LIBS="-Wl,-rpath,/usr/lib $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* php_cv_cc_rpath=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* php_cv_cc_rpath=no fi rm -f conftest* LIBS=$SAVE_LIBS fi echo "$ac_t""$php_cv_cc_rpath" 1>&6 if test $php_cv_cc_rpath = "yes"; then ld_runpath_switch=-Wl,-rpath, else ld_runpath_switch=-L fi fi # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2532: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="ranlib" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" fi fi RANLIB="$ac_cv_prog_RANLIB" if test -n "$RANLIB"; then echo "$ac_t""$RANLIB" 1>&6 else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 echo "configure:2560: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftestdata if ln -s X conftestdata 2>/dev/null then rm -f conftestdata ac_cv_prog_LN_S="ln -s" else ac_cv_prog_LN_S=ln fi fi LN_S="$ac_cv_prog_LN_S" if test "$ac_cv_prog_LN_S" = "ln -s"; then echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2585: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_AWK="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi AWK="$ac_cv_prog_AWK" if test -n "$AWK"; then echo "$ac_t""$AWK" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$AWK" && break done for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2619: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_YACC="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi YACC="$ac_cv_prog_YACC" if test -n "$YACC"; then echo "$ac_t""$YACC" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" if test "$YACC" != "bison -y"; then echo "configure: warning: You will need bison if you want to regenerate the PHP parsers." 1>&2 else echo $ac_n "checking bison version""... $ac_c" 1>&6 echo "configure:2653: checking bison version" >&5 set `bison --version| grep 'GNU Bison' | cut -d ' ' -f 4 | sed -e 's/\./ /'` if test "${1}" = "1" -a "${2}" -lt "28"; then echo "configure: warning: You will need bison 1.28 if you want to regenerate the Zend parser (found ${1}.${2})." 1>&2 fi echo "$ac_t""${1}.${2} (ok)" 1>&6 fi # Extract the first word of "flex", so it can be a program name with args. set dummy flex; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2663: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_LEX="flex" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_LEX" && ac_cv_prog_LEX="lex" fi fi LEX="$ac_cv_prog_LEX" if test -n "$LEX"; then echo "$ac_t""$LEX" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$LEXLIB" then case "$LEX" in flex*) ac_lib=fl ;; *) ac_lib=l ;; esac echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6 echo "configure:2697: checking for yywrap in -l$ac_lib" >&5 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$ac_lib $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LEXLIB="-l$ac_lib" else echo "$ac_t""no" 1>&6 fi fi if test -n "$LEX"; then echo $ac_n "checking lex output file root""... $ac_c" 1>&6 echo "configure:2740: checking lex output file root" >&5 if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # The minimal lex program is just a single line: %%. But some broken lexes # (Solaris, I think it was) want two %% lines, so accommodate them. echo '%% %%' | $LEX if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else { echo "configure: error: cannot find output from $LEX; giving up" 1>&2; exit 1; } fi fi echo "$ac_t""$ac_cv_prog_lex_root" 1>&6 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6 echo "configure:2761: checking whether yytext is a pointer" >&5 if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c ac_save_LIBS="$LIBS" LIBS="$LIBS $LEXLIB" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_prog_lex_yytext_pointer=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* LIBS="$ac_save_LIBS" rm -f "${LEX_OUTPUT_ROOT}.c" fi echo "$ac_t""$ac_cv_prog_lex_yytext_pointer" 1>&6 if test $ac_cv_prog_lex_yytext_pointer = yes; then cat >> confdefs.h <<\EOF #define YYTEXT_POINTER 1 EOF fi : fi echo $ac_n "checking for working const""... $ac_c" 1>&6 echo "configure:2804: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } ; return 0; } EOF if { (eval echo configure:2858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_const=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_c_const" 1>&6 if test $ac_cv_c_const = no; then cat >> confdefs.h <<\EOF #define const EOF fi if test "$ac_cv_c_const" = "yes" ; then LEX_CFLAGS="-DYY_USE_CONST" fi if test -z "$host_alias"; then host_alias=$ac_cv_host_alias fi BSD_MAKEFILE=no case $host_alias in *solaris*) CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS" if test "${enable_libgcc+set}" != "set" && test "$GCC" = "yes"; then enable_libgcc=yes fi ;; *dgux*) CPPFLAGS="$CPPFLAGS -D_BSD_TIMEOFDAY_FLAVOR";; *darwin*|*rhapsody*) CPPFLAGS="$CPPFLAGS -traditional-cpp";; *bsdi*) BSD_MAKEFILE=yes;; *beos*) beos_threads=1 LIBS="$LIBS -lbe -lroot";; *mips*) CPPFLAGS="$CPPFLAGS -D_XPG_IV";; esac save_CFLAGS=$CFLAGS save_LIBS=$LIBS if test -n "$ac_cv_pthreads_lib"; then LIBS="$LIBS -l$ac_cv_pthreads_lib" fi if test -n "$ac_cv_pthreads_cflags"; then CFLAGS="$CFLAGS $ac_cv_pthreads_cflags" fi if test "$cross_compiling" = yes; then pthreads_working=no else cat > conftest.$ac_ext < #include void *thread_routine(void *data) { return data; } int main() { pthread_t thd; pthread_mutexattr_t mattr; int data = 1; pthread_mutexattr_init(&mattr); return pthread_create(&thd, NULL, thread_routine, &data); } EOF if { (eval echo configure:3006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then pthreads_working=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* pthreads_working=no fi rm -fr conftest* fi LIBS=$save_LIBS CFLAGS=$save_CFLAGS echo $ac_n "checking for pthreads_cflags""... $ac_c" 1>&6 echo "configure:3026: checking for pthreads_cflags" >&5 if eval "test \"`echo '$''{'ac_cv_pthreads_cflags'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_pthreads_cflags= if test "$pthreads_working" != "yes"; then for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do ac_save=$CFLAGS CFLAGS="$CFLAGS $flag" if test "$cross_compiling" = yes; then pthreads_working=no else cat > conftest.$ac_ext < #include void *thread_routine(void *data) { return data; } int main() { pthread_t thd; pthread_mutexattr_t mattr; int data = 1; pthread_mutexattr_init(&mattr); return pthread_create(&thd, NULL, thread_routine, &data); } EOF if { (eval echo configure:3059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then pthreads_working=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* pthreads_working=no fi rm -fr conftest* fi CFLAGS=$ac_save if test "$pthreads_working" = "yes"; then ac_cv_pthreads_cflags=$flag break fi done fi fi echo "$ac_t""$ac_cv_pthreads_cflags" 1>&6 echo $ac_n "checking for pthreads_lib""... $ac_c" 1>&6 echo "configure:3088: checking for pthreads_lib" >&5 if eval "test \"`echo '$''{'ac_cv_pthreads_lib'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_pthreads_lib= if test "$pthreads_working" != "yes"; then for lib in pthread pthreads c_r; do ac_save=$LIBS LIBS="$LIBS -l$lib" if test "$cross_compiling" = yes; then pthreads_working=no else cat > conftest.$ac_ext < #include void *thread_routine(void *data) { return data; } int main() { pthread_t thd; pthread_mutexattr_t mattr; int data = 1; pthread_mutexattr_init(&mattr); return pthread_create(&thd, NULL, thread_routine, &data); } EOF if { (eval echo configure:3121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then pthreads_working=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* pthreads_working=no fi rm -fr conftest* fi LIBS=$ac_save if test "$pthreads_working" = "yes"; then ac_cv_pthreads_lib=$lib break fi done fi fi echo "$ac_t""$ac_cv_pthreads_lib" 1>&6 if test "$pthreads_working" = "yes"; then threads_result="POSIX-Threads found" else threads_result="POSIX-Threads not found" fi # Check whether --enable- or --disable- was given. if test "${enable_+set}" = set; then enableval="$enable_" : fi PHP_VAR_SUBST="$PHP_VAR_SUBST SHLIB_SUFFIX_NAME" SHLIB_SUFFIX_NAME=so case $host_alias in *hpux*) SHLIB_SUFFIX_NAME=sl ;; *darwin*) SHLIB_SUFFIX_NAME=dylib ;; esac PHP_SAPI=cgi php_build_target=program SAPI_PROGRAM=php SAPI_SHARED=libs/libphp4.$SHLIB_SUFFIX_NAME SAPI_STATIC=libs/libphp4.a SAPI_LIBTOOL=libphp4.la echo "$ac_t""" 1>&6 echo "$ac_t""${T_MD}Configuring SAPI modules${T_ME}" 1>&6 echo $ac_n "checking for AOLserver support""... $ac_c" 1>&6 echo "configure:3198: checking for AOLserver support" >&5 # Check whether --with-aolserver or --without-aolserver was given. if test "${with_aolserver+set}" = set; then withval="$with_aolserver" PHP_AOLSERVER=$withval else PHP_AOLSERVER=no fi echo "$ac_t""$PHP_AOLSERVER" 1>&6 if test "$PHP_AOLSERVER" != "no"; then if test -d "$PHP_AOLSERVER/include"; then PHP_AOLSERVER_SRC=$PHP_AOLSERVER fi if test -z "$PHP_AOLSERVER_SRC" || test ! -d $PHP_AOLSERVER_SRC/include; then { echo "configure: error: Please specify the path to the source distribution of AOLserver using --with-aolserver-src=DIR" 1>&2; exit 1; } fi if test ! -d $PHP_AOLSERVER/bin ; then { echo "configure: error: Please specify the path to the root of AOLserver using --with-aolserver=DIR" 1>&2; exit 1; } fi enable_experimental_zts=yes if test "$pthreads_working" != "yes"; then { echo "configure: error: ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads." 1>&2; exit 1; } fi if test "$PHP_AOLSERVER_SRC/include" != "/usr/include"; then if test -z "$PHP_AOLSERVER_SRC/include" || echo "$PHP_AOLSERVER_SRC/include" | grep '^/' >/dev/null ; then ai_p=$PHP_AOLSERVER_SRC/include else ep_dir="`echo $PHP_AOLSERVER_SRC/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_AOLSERVER_SRC/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_AOLSERVER 1 EOF PHP_SAPI=aolserver php_build_target=shared INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$PHP_AOLSERVER/bin/" fi echo $ac_n "checking for Apache 1.x module support via DSO through APXS""... $ac_c" 1>&6 echo "configure:3274: checking for Apache 1.x module support via DSO through APXS" >&5 # Check whether --with-apxs or --without-apxs was given. if test "${with_apxs+set}" = set; then withval="$with_apxs" if test "$withval" = "yes"; then APXS=apxs $APXS -q CFLAGS >/dev/null 2>&1 if test "$?" != "0" && test -x /usr/sbin/apxs; then #SUSE 6.x APXS=/usr/sbin/apxs fi else if test -z "$withval" || echo "$withval" | grep '^/' >/dev/null ; then APXS=$withval else ep_dir="`echo $withval|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" APXS="$ep_realdir/`basename \"$withval\"`" fi fi $APXS -q CFLAGS >/dev/null 2>&1 if test "$?" != "0"; then echo "$ac_t""" 1>&6 echo "$ac_t""" 1>&6 echo "$ac_t""Sorry, I was not able to successfully run APXS. Possible reasons:" 1>&6 echo "$ac_t""" 1>&6 echo "$ac_t""1. Perl is not installed;" 1>&6 echo "$ac_t""2. Apache was not compiled with DSO support (--enable-module=so);" 1>&6 echo "$ac_t""3. 'apxs' is not in your path. Try to use --with-apxs=/path/to/apxs" 1>&6 echo "$ac_t""The output of $APXS follows" 1>&6 $APXS { echo "configure: error: Aborting" 1>&2; exit 1; } fi APXS_LDFLAGS="@SYBASE_LFLAGS@ @SYBASE_LIBS@ @SYBASE_CT_LFLAGS@ @SYBASE_CT_LIBS@" APXS_INCLUDEDIR=`$APXS -q INCLUDEDIR` APXS_CFLAGS=`$APXS -q CFLAGS` APXS_HTTPD=`$APXS -q SBINDIR`/`$APXS -q TARGET` # Test that we're trying to configure with apache 1.x ac_output=`$APXS_HTTPD -v 2>&1` ac_IFS=$IFS IFS="- /. " set $ac_output IFS=$ac_IFS APACHE_VERSION=`expr $4 \* 1000000 + $5 \* 1000 + $6` if test "$APACHE_VERSION" -ge 2000000; then { echo "configure: error: Use --with-apxs2 with Apache 2.x!" 1>&2; exit 1; } fi for flag in $APXS_CFLAGS; do case $flag in -D*) CPPFLAGS="$CPPFLAGS $flag";; esac done if test "$APXS_INCLUDEDIR" != "/usr/include"; then if test -z "$APXS_INCLUDEDIR" || echo "$APXS_INCLUDEDIR" | grep '^/' >/dev/null ; then ai_p=$APXS_INCLUDEDIR else ep_dir="`echo $APXS_INCLUDEDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$APXS_INCLUDEDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_SAPI=apache # Test whether apxs support -S option $APXS -q -S CFLAGS="$APXS_CFLAGS" CFLAGS >/dev/null 2>&1 if test "$?" != "0"; then APACHE_INSTALL="$APXS -i -a -n php4 $SAPI_SHARED" # Old apxs does not have -S option else APACHE_INSTALL="\$(mkinstalldirs) \"\$(INSTALL_ROOT)`$APXS -q LIBEXECDIR`\" && $APXS -S LIBEXECDIR=\"\$(INSTALL_ROOT)`$APXS -q LIBEXECDIR`\" -i -a -n php4 $SAPI_SHARED" fi php_build_target=shared if test -z "`$APXS -q LD_SHLIB`" || test "`$APXS -q LIBEXECDIR`" = "modules"; then PHP_APXS_BROKEN=yes fi STRONGHOLD= cat >> confdefs.h <<\EOF #define HAVE_AP_CONFIG_H 1 EOF cat >> confdefs.h <<\EOF #define HAVE_AP_COMPAT_H 1 EOF echo "$ac_t""yes" 1>&6 case $host_alias in *aix*) APXS_LIBEXECDIR=`$APXS -q LIBEXECDIR` EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-bI:$APXS_LIBEXECDIR/httpd.exp" ;; esac else echo "$ac_t""no" 1>&6 fi APACHE_INSTALL_FILES="\$(srcdir)/sapi/apache/mod_php4.* sapi/apache/libphp4.module" if test "$PHP_SAPI" != "apache"; then echo $ac_n "checking for Apache 1.x module support""... $ac_c" 1>&6 echo "configure:3415: checking for Apache 1.x module support" >&5 # Check whether --with-apache or --without-apache was given. if test "${with_apache+set}" = set; then withval="$with_apache" if test "$withval" = "yes"; then # Apache's default directory withval=/usr/local/apache fi if test "$withval" != "no"; then APACHE_MODULE=yes if test -z "$withval" || echo "$withval" | grep '^/' >/dev/null ; then withval=$withval else ep_dir="`echo $withval|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" withval="$ep_realdir/`basename \"$withval\"`" fi # For Apache 1.2.x if test -f $withval/src/httpd.h; then APACHE_INCLUDE=-I$withval/src APACHE_TARGET=$withval/src PHP_SAPI=apache APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_INSTALL_FILES $APACHE_TARGET" PHP_LIBS="-L. -lphp3" echo "$ac_t""yes - Apache 1.2.x" 1>&6 STRONGHOLD= if test -f $withval/src/ap_config.h; then cat >> confdefs.h <<\EOF #define HAVE_AP_CONFIG_H 1 EOF fi # For Apache 2.0.x elif test -f $withval/include/httpd.h && test -f $withval/srclib/apr/include/apr_general.h ; then { echo "configure: error: --with-apache does not work with Apache 2.x!" 1>&2; exit 1; } # For Apache 1.3.x elif test -f $withval/src/main/httpd.h; then APACHE_HAS_REGEX=1 APACHE_INCLUDE="-I$withval/src/main -I$withval/src/os/unix -I$withval/src/ap" APACHE_TARGET=$withval/src/modules/php4 if test ! -d $APACHE_TARGET; then mkdir $APACHE_TARGET fi PHP_SAPI=apache APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp4.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/sapi/apache/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/sapi/apache/apMakefile.libdir $APACHE_TARGET/Makefile.libdir" PHP_LIBS="-Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4" echo "$ac_t""yes - Apache 1.3.x" 1>&6 STRONGHOLD= if test -f $withval/src/include/ap_config.h; then cat >> confdefs.h <<\EOF #define HAVE_AP_CONFIG_H 1 EOF fi if test -f $withval/src/include/ap_compat.h; then cat >> confdefs.h <<\EOF #define HAVE_AP_COMPAT_H 1 EOF if test ! -f $withval/src/include/ap_config_auto.h; then { echo "configure: error: Please run Apache\'s configure or src/Configure program once and try again" 1>&2; exit 1; } fi else if test -f $withval/src/include/compat.h; then cat >> confdefs.h <<\EOF #define HAVE_OLD_COMPAT_H 1 EOF fi fi # Also for Apache 1.3.x elif test -f $withval/src/include/httpd.h; then APACHE_HAS_REGEX=1 APACHE_INCLUDE="-I$withval/src/include -I$withval/src/os/unix" APACHE_TARGET=$withval/src/modules/php4 if test ! -d $APACHE_TARGET; then mkdir $APACHE_TARGET fi PHP_SAPI=apache PHP_LIBS="-Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4" APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp4.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/sapi/apache/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/sapi/apache/apMakefile.libdir $APACHE_TARGET/Makefile.libdir" echo "$ac_t""yes - Apache 1.3.x" 1>&6 STRONGHOLD= if test -f $withval/src/include/ap_config.h; then cat >> confdefs.h <<\EOF #define HAVE_AP_CONFIG_H 1 EOF fi if test -f $withval/src/include/ap_compat.h; then cat >> confdefs.h <<\EOF #define HAVE_AP_COMPAT_H 1 EOF if test ! -f $withval/src/include/ap_config_auto.h; then { echo "configure: error: Please run Apache\'s configure or src/Configure program once and try again" 1>&2; exit 1; } fi else if test -f $withval/src/include/compat.h; then cat >> confdefs.h <<\EOF #define HAVE_OLD_COMPAT_H 1 EOF fi fi # For StrongHold 2.2 elif test -f $withval/apache/httpd.h; then APACHE_INCLUDE=-"I$withval/apache -I$withval/ssl/include" APACHE_TARGET=$withval/apache PHP_SAPI=apache PHP_LIBS="-Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4" APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp4.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET" STRONGHOLD=-DSTRONGHOLD=1 echo "$ac_t""yes - StrongHold" 1>&6 if test -f $withval/apache/ap_config.h; then cat >> confdefs.h <<\EOF #define HAVE_AP_CONFIG_H 1 EOF fi if test -f $withval/src/ap_compat.h; then cat >> confdefs.h <<\EOF #define HAVE_AP_COMPAT_H 1 EOF if test ! -f $withval/src/include/ap_config_auto.h; then { echo "configure: error: Please run Apache\'s configure or src/Configure program once and try again" 1>&2; exit 1; } fi else if test -f $withval/src/compat.h; then cat >> confdefs.h <<\EOF #define HAVE_OLD_COMPAT_H 1 EOF fi fi else echo "$ac_t""no" 1>&6 { echo "configure: error: Invalid Apache directory - unable to find httpd.h under $withval" 1>&2; exit 1; } fi else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi INCLUDES="$INCLUDES $APACHE_INCLUDE" fi if test "x$APXS" != "x" -a "`uname -sv`" = "AIX 4" -a "$GCC" != "yes"; then APXS_EXP=-bE:sapi/apache/mod_php4.exp fi PHP_VAR_SUBST="$PHP_VAR_SUBST APXS_EXP" PHP_VAR_SUBST="$PHP_VAR_SUBST APACHE_INCLUDE" PHP_VAR_SUBST="$PHP_VAR_SUBST APACHE_TARGET" PHP_VAR_SUBST="$PHP_VAR_SUBST APXS" PHP_VAR_SUBST="$PHP_VAR_SUBST APXS_LDFLAGS" PHP_VAR_SUBST="$PHP_VAR_SUBST APACHE_INSTALL" PHP_VAR_SUBST="$PHP_VAR_SUBST STRONGHOLD" echo $ac_n "checking for mod_charset compatibility option""... $ac_c" 1>&6 echo "configure:3602: checking for mod_charset compatibility option" >&5 # Check whether --with-mod_charset or --without-mod_charset was given. if test "${with_mod_charset+set}" = set; then withval="$with_mod_charset" echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define USE_TRANSFER_TABLES 1 EOF else echo "$ac_t""no" 1>&6 fi if test -n "$APACHE_MODULE"; then if test -n "$GCC"; then gcc_arg_name=ac_cv_gcc_arg_rdynamic echo $ac_n "checking whether $CC supports -rdynamic""... $ac_c" 1>&6 echo "configure:3626: checking whether $CC supports -rdynamic" >&5 if eval "test \"`echo '$''{'ac_cv_gcc_arg_rdynamic'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void somefunc() { };' > conftest.c cmd='$CC -rdynamic -c conftest.c' if eval $cmd 2>&1 | egrep -e -rdynamic >/dev/null ; then ac_result=no else ac_result=yes fi eval $gcc_arg_name=$ac_result rm -f conftest.* fi echo "$ac_t""$ac_cv_gcc_arg_rdynamic" 1>&6 if eval test "\$$gcc_arg_name" = "yes"; then gcc_rdynamic=yes else : fi if test "$gcc_rdynamic" = "yes"; then PHP_LDFLAGS="$PHP_LDFLAGS -rdynamic" fi fi $php_shtool mkdir -p sapi/apache PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES sapi/apache/libphp4.module" php_build_target=static fi if test -n "$APACHE_INSTALL"; then INSTALL_IT=$APACHE_INSTALL fi echo $ac_n "checking for Apache 2.0 module support via DSO through APXS""... $ac_c" 1>&6 echo "configure:3672: checking for Apache 2.0 module support via DSO through APXS" >&5 # Check whether --with-apxs2 or --without-apxs2 was given. if test "${with_apxs2+set}" = set; then withval="$with_apxs2" if test "$withval" = "yes"; then APXS=apxs $APXS -q CFLAGS >/dev/null 2>&1 if test "$?" != "0" && test -x /usr/sbin/apxs; then APXS=/usr/sbin/apxs fi else if test -z "$withval" || echo "$withval" | grep '^/' >/dev/null ; then APXS=$withval else ep_dir="`echo $withval|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" APXS="$ep_realdir/`basename \"$withval\"`" fi fi $APXS -q CFLAGS >/dev/null 2>&1 if test "$?" != "0"; then echo "$ac_t""" 1>&6 echo "$ac_t""" 1>&6 echo "$ac_t""Sorry, I cannot run apxs. Possible reasons follow:" 1>&6 echo "$ac_t""" 1>&6 echo "$ac_t""1. Perl is not installed" 1>&6 echo "$ac_t""2. apxs was not found. Try to pass the path using --with-apxs2=/path/to/apxs" 1>&6 echo "$ac_t""3. Apache was not built using --enable-so (the apxs usage page is displayed)" 1>&6 echo "$ac_t""" 1>&6 echo "$ac_t""The output of $APXS follows:" 1>&6 $APXS { echo "configure: error: Aborting" 1>&2; exit 1; } fi APXS_HTTPD=`$APXS -q SBINDIR`/`$APXS -q TARGET` # Test that we're trying to configure with apache 2.x ac_output=`$APXS_HTTPD -v 2>&1` ac_IFS=$IFS IFS="- /. " set $ac_output IFS=$ac_IFS APACHE_VERSION=`expr $4 \* 1000000 + $5 \* 1000 + $6` if test "$APACHE_VERSION" -le 2000000; then { echo "configure: error: Use --with-apxs with Apache 1.3.x!" 1>&2; exit 1; } elif test "$APACHE_VERSION" -lt 2000035; then { echo "configure: error: Apache version >= 2.0.35 required." 1>&2; exit 1; } fi APXS_INCLUDEDIR=`$APXS -q INCLUDEDIR` APXS_CFLAGS=`$APXS -q CFLAGS` for flag in $APXS_CFLAGS; do case $flag in -D*) CPPFLAGS="$CPPFLAGS $flag";; esac done if test "$APXS_INCLUDEDIR" != "/usr/include"; then if test -z "$APXS_INCLUDEDIR" || echo "$APXS_INCLUDEDIR" | grep '^/' >/dev/null ; then ai_p=$APXS_INCLUDEDIR else ep_dir="`echo $APXS_INCLUDEDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$APXS_INCLUDEDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_SAPI=apache2filter INSTALL_IT="$APXS -i -a -n php4 $SAPI_LIBTOOL" php_build_target=shared enable_experimental_zts=yes if test "$pthreads_working" != "yes"; then { echo "configure: error: ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads." 1>&2; exit 1; } fi echo "$ac_t""yes" 1>&6 case $host_alias in *aix*) APXS_SBINDIR=`$APXS -q SBINDIR` EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-bI:$APXS_SBINDIR/httpd.exp" ;; esac else echo "$ac_t""no" 1>&6 fi PHP_VAR_SUBST="$PHP_VAR_SUBST APXS" RESULT=no echo $ac_n "checking for Caudium support""... $ac_c" 1>&6 echo "configure:3804: checking for Caudium support" >&5 # Check whether --with-caudium or --without-caudium was given. if test "${with_caudium+set}" = set; then withval="$with_caudium" if test "$prefix" = "NONE"; then CPREF=/usr/local/; fi if test ! -d $withval ; then if test "$prefix" = "NONE"; then withval=/usr/local/caudium/server/ else withval=$prefix/caudium/server/ fi fi if test -f $withval/bin/caudium; then PIKE=$withval/bin/caudium elif test -f $withval/bin/pike; then PIKE=$withval/bin/pike else { echo "configure: error: Couldn't find a pike in $withval/bin/" 1>&2; exit 1; } fi if $PIKE -e 'float v; int rel;sscanf(version(), "Pike v%f release %d", v, rel);v += rel/10000.0; if(v < 7.0268) exit(1); exit(0);'; then PIKE_MODULE_DIR=`$PIKE --show-paths 2>&1| grep '^Module' | sed -e 's/.*: //'` PIKE_INCLUDE_DIR=`echo $PIKE_MODULE_DIR | sed -e 's,lib/pike/modules,include/pike,' -e 's,lib/modules,include/pike,' ` if test -z "$PIKE_INCLUDE_DIR" -o -z "$PIKE_MODULE_DIR"; then { echo "configure: error: Failed to figure out Pike module and include directories" 1>&2; exit 1; } fi echo "$ac_t""yes" 1>&6 PIKE=`echo $PIKE | pike -e 'int tries=100; string orig,pike=Stdio.File("stdin")->read()-"\n"; orig=pike; if(search(orig, "/")) orig = combine_path(getcwd(), orig); while(!catch(pike=readlink(pike)) && tries--) ; write(combine_path(dirname(orig), pike)); '` if test "$PIKE_INCLUDE_DIR" != "/usr/include"; then if test -z "$PIKE_INCLUDE_DIR" || echo "$PIKE_INCLUDE_DIR" | grep '^/' >/dev/null ; then ai_p=$PIKE_INCLUDE_DIR else ep_dir="`echo $PIKE_INCLUDE_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PIKE_INCLUDE_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$prefix" != "NONE"; then PIKE_C_INCLUDE=$prefix/include/`basename $PIKE` else PIKE_C_INCLUDE=/usr/local/include/`basename $PIKE` fi echo $ac_n "checking for C includes in $PIKE_C_INCLUDE""... $ac_c" 1>&6 echo "configure:3876: checking for C includes in $PIKE_C_INCLUDE" >&5 if test -f $PIKE_C_INCLUDE/version.h; then PIKE_TEST_VER=`$PIKE -e 'string v; int rel;sscanf(version(), "Pike v%s release %d", v, rel); write(v+"."+rel);'` ###### VERSION MATCH CHECK ####### PMAJOR="^#define PIKE_MAJOR_VERSION" PMINOR="^#define PIKE_MINOR_VERSION" PBUILD="^#define PIKE_BUILD_VERSION" PIKE_CMAJOR_VERSION=0 PIKE_CMINOR_VERSION=0 PIKE_CBUILD_VERSION=0 PIKE_CMAJOR_VERSION=`grep "$PMAJOR" $PIKE_C_INCLUDE/version.h | sed -e 's/\(#define.*N \)\(.*\)/\2/'` if test -z "$PIKE_CMAJOR_VERSION"; then if test -n "`grep f_version $PIKE_C_INCLUDE/version.h`"; then PIKE_CMAJOR_VERSION=6 fi else PIKE_CMINOR_VERSION=`grep "$PMINOR" $PIKE_C_INCLUDE/version.h | sed -e 's/\(#define.*N \)\(.*\)/\2/'` PIKE_CBUILD_VERSION=`grep "$PBUILD" $PIKE_C_INCLUDE/version.h | sed -e 's/\(#define.*N \)\(.*\)/\2/'` fi if test "$PIKE_TEST_VER" = "${PIKE_CMAJOR_VERSION}.${PIKE_CMINOR_VERSION}.${PIKE_CBUILD_VERSION}"; then if test "$PIKE_C_INCLUDE" != "/usr/include"; then if test -z "$PIKE_C_INCLUDE" || echo "$PIKE_C_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$PIKE_C_INCLUDE else ep_dir="`echo $PIKE_C_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PIKE_C_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PIKE_INCLUDE_DIR="$PIKE_INCLUDE_DIR, $PIKE_C_INCLUDE" echo "$ac_t""found" 1>&6 else echo "$ac_t""version mismatch" 1>&6 fi else echo "$ac_t""not found" 1>&6 fi else { echo "configure: error: Caudium PHP4 requires Pike 7.0 or newer" 1>&2; exit 1; } fi PIKE_VERSION=`$PIKE -e 'string v; int rel;sscanf(version(), "Pike v%s release %d", v, rel); write(v+"."+rel);'` cat >> confdefs.h <<\EOF #define HAVE_CAUDIUM 1 EOF PHP_SAPI=caudium php_build_target=shared INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $withval/lib/$PIKE_VERSION/PHP4.so" RESULT=" *** Pike binary used: $PIKE *** Pike include dir(s) used: $PIKE_INCLUDE_DIR *** Pike version: $PIKE_VERSION" enable_experimental_zts=yes if test "$pthreads_working" != "yes"; then { echo "configure: error: ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads." 1>&2; exit 1; } fi fi echo "$ac_t""$RESULT" 1>&6 if test "$PHP_SAPI" = "cgi"; then echo $ac_n "checking whether writing to stdout works""... $ac_c" 1>&6 echo "configure:3975: checking whether writing to stdout works" >&5 if eval "test \"`echo '$''{'ac_cv_write_stdout'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_write_stdout=no else cat > conftest.$ac_ext < #endif #define TEXT "This is the test message -- " main() { int n; n = write(1, TEXT, sizeof(TEXT)-1); return (!(n == sizeof(TEXT)-1)); } EOF if { (eval echo configure:4004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_write_stdout=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_write_stdout=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_write_stdout" 1>&6 if test "$ac_cv_write_stdout" = "yes"; then cat >> confdefs.h <<\EOF #define PHP_WRITE_STDOUT 1 EOF fi if test -n "whether to force Apache CGI redirect"; then echo $ac_n "checking whether to force Apache CGI redirect""... $ac_c" 1>&6 echo "configure:4036: checking whether to force Apache CGI redirect" >&5 fi # Check whether --enable-force-cgi-redirect or --disable-force-cgi-redirect was given. if test "${enable_force_cgi_redirect+set}" = set; then enableval="$enable_force_cgi_redirect" PHP_FORCE_CGI_REDIRECT=$enableval else PHP_FORCE_CGI_REDIRECT=no fi case $PHP_FORCE_CGI_REDIRECT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_FORCE_CGI_REDIRECT=`echo "$PHP_FORCE_CGI_REDIRECT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_FORCE_CGI_REDIRECT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_FORCE_CGI_REDIRECT" = "no" && PHP_FORCE_CGI_REDIRECT=yes fi if test -n "whether to force Apache CGI redirect"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_FORCE_CGI_REDIRECT" = "yes"; then REDIRECT=1 else REDIRECT=0 fi cat >> confdefs.h <&6 echo "configure:4095: checking whether to discard path_info + path_translated" >&5 fi # Check whether --enable-discard-path or --disable-discard-path was given. if test "${enable_discard_path+set}" = set; then enableval="$enable_discard_path" PHP_DISCARD_PATH=$enableval else PHP_DISCARD_PATH=no fi case $PHP_DISCARD_PATH in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DISCARD_PATH=`echo "$PHP_DISCARD_PATH"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DISCARD_PATH=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DISCARD_PATH" = "no" && PHP_DISCARD_PATH=yes fi if test -n "whether to discard path_info + path_translated"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_DISCARD_PATH" = "yes"; then DISCARD_PATH=1 else DISCARD_PATH=0 fi cat >> confdefs.h <&6 echo "configure:4157: checking for fhttpd module support" >&5 # Check whether --with-fhttpd or --without-fhttpd was given. if test "${with_fhttpd+set}" = set; then withval="$with_fhttpd" if test "$withval" = "yes"; then # fhttpd source directory withval=/usr/local/src/fhttpd fi if test "$withval" != "no"; then # For fhttpd 0.3.x if test -f $withval/servproc.h; then FHTTPD_INCLUDE=-I$withval/ FHTTPD_LIB=$withval/servproc.o FHTTPD_TARGET=$withval/ php_build_target=static PHP_SAPI=cgi cat >> confdefs.h <<\EOF #define FHTTPD 1 EOF echo "$ac_t""yes - fhttpd 0.3.x" 1>&6 else echo "$ac_t""no" 1>&6 { echo "configure: error: Invalid fhttpd directory - unable to find servproc.h under $withval" 1>&2; exit 1; } fi else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi INCLUDES="$INCLUDES $FHTTPD_INCLUDE" PHP_VAR_SUBST="$PHP_VAR_SUBST FHTTPD_LIB" PHP_VAR_SUBST="$PHP_VAR_SUBST FHTTPD_TARGET" echo $ac_n "checking for CLI build""... $ac_c" 1>&6 echo "configure:4205: checking for CLI build" >&5 # Check whether --enable-cli or --disable-cli was given. if test "${enable_cli+set}" = set; then enableval="$enable_cli" PHP_SAPI_CLI=$enableval else PHP_SAPI_CLI=no fi if test "$PHP_SAPI_CLI" != "yes"; then disable_cli=1 fi echo "$ac_t""$PHP_SAPI_CLI" 1>&6 echo $ac_n "checking for FastCGI support""... $ac_c" 1>&6 echo "configure:4230: checking for FastCGI support" >&5 # Check whether --with-fastcgi or --without-fastcgi was given. if test "${with_fastcgi+set}" = set; then withval="$with_fastcgi" if test "$withval" = "yes"; then FASTCGIPATH=/usr/local else FASTCGIPATH=$withval fi test -f "$FASTCGIPATH/lib/libfcgi.a" || { echo "configure: error: Unable to find libfcgi.a in $FASTCGIPATH/lib" 1>&2; exit 1; } test -f "$FASTCGIPATH/include/fastcgi.h" || { echo "configure: error: Unable to find fastcgi.h in $FASTCGIPATH/include" 1>&2; exit 1; } PHP_SAPI=fastcgi PHP_LIBS=$FASTCGIPATH/lib/libfcgi.a if test "$FASTCGIPATH/include" != "/usr/include"; then if test -z "$FASTCGIPATH/include" || echo "$FASTCGIPATH/include" | grep '^/' >/dev/null ; then ai_p=$FASTCGIPATH/include else ep_dir="`echo $FASTCGIPATH/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$FASTCGIPATH/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi EXT_PROGRAM_LDADD="$EXT_PROGRAM_LDADD $FASTCGIPATH/lib/libfcgi.a" INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_PROGRAM \$(bindir)/$SAPI_FASTCGI" RESULT=yes PHP_VAR_SUBST="$PHP_VAR_SUBST FASTCGI_LIBADD" PHP_VAR_SUBST="$PHP_VAR_SUBST EXT_PROGRAM_LDADD" else RESULT=no fi echo "$ac_t""$RESULT" 1>&6 RESULT=no echo $ac_n "checking for Zeus ISAPI support""... $ac_c" 1>&6 echo "configure:4296: checking for Zeus ISAPI support" >&5 # Check whether --with-isapi or --without-isapi was given. if test "${with_isapi+set}" = set; then withval="$with_isapi" if test "$withval" = "yes"; then ZEUSPATH=/usr/local/zeus # the default else ZEUSPATH=$withval fi test -f "$ZEUSPATH/web/include/httpext.h" || { echo "configure: error: Unable to find httpext.h in $ZEUSPATH/web/include" 1>&2; exit 1; } enable_experimental_zts=yes if test "$pthreads_working" != "yes"; then { echo "configure: error: ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads." 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define WITH_ZEUS 1 EOF if test "$ZEUSPATH/web/include" != "/usr/include"; then if test -z "$ZEUSPATH/web/include" || echo "$ZEUSPATH/web/include" | grep '^/' >/dev/null ; then ai_p=$ZEUSPATH/web/include else ep_dir="`echo $ZEUSPATH/web/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ZEUSPATH/web/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_SAPI=isapi php_build_target=shared INSTALL_IT="\$(SHELL) \$(srcdir)/install-sh -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$ZEUSPATH/web/bin/" RESULT=yes fi echo "$ac_t""$RESULT" 1>&6 echo $ac_n "checking for NSAPI support""... $ac_c" 1>&6 echo "configure:4362: checking for NSAPI support" >&5 # Check whether --with-nsapi or --without-nsapi was given. if test "${with_nsapi+set}" = set; then withval="$with_nsapi" PHP_NSAPI=$withval else PHP_NSAPI=no fi echo "$ac_t""$PHP_NSAPI" 1>&6 if test "$PHP_NSAPI" != "no"; then if test ! -d $PHP_NSAPI/bin ; then { echo "configure: error: Please specify the path to the root of your Netscape server using --with-nsapi=DIR" 1>&2; exit 1; } fi echo $ac_n "checking for NSAPI include files""... $ac_c" 1>&6 echo "configure:4382: checking for NSAPI include files" >&5 if test -d $PHP_NSAPI/include ; then NSAPI_INCLUDE=$PHP_NSAPI/include echo "$ac_t""Netscape-Enterprise/3.x style" 1>&6 fi if test -d $PHP_NSAPI/plugins/include ; then NSAPI_INCLUDE="$NSAPI_INCLUDE -I$PHP_NSAPI/plugins/include" echo "$ac_t""iPlanet/4.x style" 1>&6 fi if test "$NSAPI_INCLUDE" = ""; then { echo "configure: error: Please check you have nsapi.h in either DIR/include or DIR/plugins/include" 1>&2; exit 1; } fi if test "$NSAPI_INCLUDE" != "/usr/include"; then if test -z "$NSAPI_INCLUDE" || echo "$NSAPI_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$NSAPI_INCLUDE else ep_dir="`echo $NSAPI_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$NSAPI_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi enable_experimental_zts=yes if test "$pthreads_working" != "yes"; then { echo "configure: error: ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads." 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define HAVE_NSAPI 1 EOF PHP_SAPI=nsapi php_build_target=shared INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$PHP_NSAPI/bin/" fi RESULT=no echo $ac_n "checking for PHTTPD support""... $ac_c" 1>&6 echo "configure:4449: checking for PHTTPD support" >&5 # Check whether --with-phttpd or --without-phttpd was given. if test "${with_phttpd+set}" = set; then withval="$with_phttpd" if test ! -d $withval ; then { echo "configure: error: You did not specify a directory" 1>&2; exit 1; } fi enable_experimental_zts=yes if test "$pthreads_working" != "yes"; then { echo "configure: error: ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads." 1>&2; exit 1; } fi PHTTPD_DIR=$withval if test "$PHTTPD_DIR/include" != "/usr/include"; then if test -z "$PHTTPD_DIR/include" || echo "$PHTTPD_DIR/include" | grep '^/' >/dev/null ; then ai_p=$PHTTPD_DIR/include else ep_dir="`echo $PHTTPD_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHTTPD_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_PHTTPD 1 EOF PHP_SAPI=phttpd php_build_target=shared INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$PHTTPD_DIR/modules/" RESULT=yes fi echo "$ac_t""$RESULT" 1>&6 if test -n "for Pi3Web Support"; then echo $ac_n "checking for Pi3Web Support""... $ac_c" 1>&6 echo "configure:4516: checking for Pi3Web Support" >&5 fi # Check whether --with-pi3web or --without-pi3web was given. if test "${with_pi3web+set}" = set; then withval="$with_pi3web" PHP_PI3WEB=$withval else PHP_PI3WEB=no fi case $PHP_PI3WEB in shared,*) ext_output="yes, shared" ext_shared=yes PHP_PI3WEB=`echo "$PHP_PI3WEB"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_PI3WEB=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_PI3WEB" = "no" && PHP_PI3WEB=yes fi if test -n "for Pi3Web Support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_PI3WEB" != "no"; then if test "$PHP_PI3WEB" = "yes"; then PI3PATH=../.. # the default else PI3PATH=$PHP_PI3WEB fi test -f "$PI3PATH/PiAPI/PiAPI.h" || { echo "configure: error: Unable to find PiAPI.h in $PI3PATH/PiAPI" 1>&2; exit 1; } enable_experimental_zts=yes if test "$pthreads_working" != "yes"; then { echo "configure: error: ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads." 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define WITH_PI3WEB 1 EOF if test "$PI3PATH/PiAPI" != "/usr/include"; then if test -z "$PI3PATH/PiAPI" || echo "$PI3PATH/PiAPI" | grep '^/' >/dev/null ; then ai_p=$PI3PATH/PiAPI else ep_dir="`echo $PI3PATH/PiAPI|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PI3PATH/PiAPI\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$PI3PATH/Pi2API" != "/usr/include"; then if test -z "$PI3PATH/Pi2API" || echo "$PI3PATH/Pi2API" | grep '^/' >/dev/null ; then ai_p=$PI3PATH/Pi2API else ep_dir="`echo $PI3PATH/Pi2API|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PI3PATH/Pi2API\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$PI3PATH/Pi3API" != "/usr/include"; then if test -z "$PI3PATH/Pi3API" || echo "$PI3PATH/Pi3API" | grep '^/' >/dev/null ; then ai_p=$PI3PATH/Pi3API else ep_dir="`echo $PI3PATH/Pi3API|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PI3PATH/Pi3API\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$PI3PATH/PHP4" != "/usr/include"; then if test -z "$PI3PATH/PHP4" || echo "$PI3PATH/PHP4" | grep '^/' >/dev/null ; then ai_p=$PI3PATH/PHP4 else ep_dir="`echo $PI3PATH/PHP4|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PI3PATH/PHP4\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_SAPI=pi3web php_build_target=shared INSTALL_IT="\$(SHELL) \$(srcdir)/install-sh -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$PI3PATH/bin/" fi RESULT=no echo $ac_n "checking for Roxen/Pike support""... $ac_c" 1>&6 echo "configure:4713: checking for Roxen/Pike support" >&5 # Check whether --with-roxen or --without-roxen was given. if test "${with_roxen+set}" = set; then withval="$with_roxen" if test ! -d $withval ; then { echo "configure: error: You did not specify a directory" 1>&2; exit 1; } fi if test -f $withval/bin/roxen; then PIKE=$withval/bin/roxen elif test -f $withval/bin/pike; then PIKE=$withval/bin/pike else { echo "configure: error: Couldn't find a pike in $withval/bin/" 1>&2; exit 1; } fi if $PIKE -e 'float v; catch(v = __VERSION__ + (__BUILD__/10000.0)); if(v < 0.7079) exit(1); exit(0);'; then PIKE_MODULE_DIR=`$PIKE --show-paths 2>&1| grep '^Module' | sed -e 's/.*: //'` PIKE_INCLUDE_DIR=`echo $PIKE_MODULE_DIR | sed -e 's,lib/pike/modules,include/pike,' -e 's,lib/modules,include/pike,'` if test -z "$PIKE_INCLUDE_DIR" -o -z "$PIKE_MODULE_DIR"; then { echo "configure: error: Failed to figure out Pike module and include directories" 1>&2; exit 1; } fi else { echo "configure: error: Roxen/PHP requires Pike 0.7.79 or newer" 1>&2; exit 1; } fi if test "$PIKE_INCLUDE_DIR" != "/usr/include"; then if test -z "$PIKE_INCLUDE_DIR" || echo "$PIKE_INCLUDE_DIR" | grep '^/' >/dev/null ; then ai_p=$PIKE_INCLUDE_DIR else ep_dir="`echo $PIKE_INCLUDE_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PIKE_INCLUDE_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_ROXEN 1 EOF PHP_SAPI=roxen php_build_target=shared INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $PIKE_MODULE_DIR/PHP4.so" RESULT="yes Pike binary used: $PIKE Pike include dir: $PIKE_INCLUDE_DIR Pike module directory: $PIKE_MODULE_DIR" PIKE_INCLUDE_DIR=" -I$PIKE_INCLUDE_DIR " fi echo "$ac_t""$RESULT" 1>&6 if test "$RESULT" != "no" ; then RESULT=no echo $ac_n "checking if Roxen should use ZTS""... $ac_c" 1>&6 echo "configure:4791: checking if Roxen should use ZTS" >&5 # Check whether --enable-roxen-zts or --disable-roxen-zts was given. if test "${enable_roxen_zts+set}" = set; then enableval="$enable_roxen_zts" enable_experimental_zts=yes if test "$pthreads_working" != "yes"; then { echo "configure: error: ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads." 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define ROXEN_USE_ZTS 1 EOF RESULT=yes fi echo "$ac_t""$RESULT" 1>&6 fi echo $ac_n "checking for Servlet support""... $ac_c" 1>&6 echo "configure:4818: checking for Servlet support" >&5 # Check whether --with-servlet or --without-servlet was given. if test "${with_servlet+set}" = set; then withval="$with_servlet" if test "$withval" != "no"; then if test "$withval" = "yes"; then SERVLET_CLASSPATH=. else if test -f $withval/lib/servlet.jar; then SERVLET_CLASSPATH=$withval/lib/servlet.jar fi if test -f $withval/lib/jsdk.jar; then SERVLET_CLASSPATH=$withval/lib/jsdk.jar fi if test -d $withval/javax; then SERVLET_CLASSPATH=$withval fi if test -z "$SERVLET_CLASSPATH"; then echo "$ac_t""no" 1>&6 { echo "configure: error: unable to find servlet libraries" 1>&2; exit 1; } fi fi cat >> confdefs.h <<\EOF #define SAPI_SERVLET 1 EOF INSTALL_IT="\$(mkinstalldirs) \$(libdir)" INSTALL_IT="$INSTALL_IT; \$(INSTALL) -m 0755 \$(srcdir)/sapi/servlet/phpsrvlt.jar \$(libdir)" INSTALL_IT="$INSTALL_IT; \$(INSTALL) -m 0755 $SAPI_SHARED \$(libdir)" PHP_SAPI=servlet php_build_target=shared enable_experimental_zts=yes if test "$pthreads_working" != "yes"; then { echo "configure: error: ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads." 1>&2; exit 1; } fi echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi PHP_VAR_SUBST="$PHP_VAR_SUBST SERVLET_CLASSPATH" # Check whether --with-thttpd or --without-thttpd was given. if test "${with_thttpd+set}" = set; then withval="$with_thttpd" test -d $withval || echo "$ac_t""thttpd directory does not exist ($withval)" 1>&6 egrep thttpd.2.21b $withval/version.h >/dev/null || echo "$ac_t""This version only supports thttpd-2.21b" 1>&6 if test -z "$withval" || echo "$withval" | grep '^/' >/dev/null ; then THTTPD=$withval else ep_dir="`echo $withval|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" THTTPD="$ep_realdir/`basename \"$withval\"`" fi if test -n "$GCC"; then gcc_arg_name=ac_cv_gcc_arg_rdynamic echo $ac_n "checking whether $CC supports -rdynamic""... $ac_c" 1>&6 echo "configure:4903: checking whether $CC supports -rdynamic" >&5 if eval "test \"`echo '$''{'ac_cv_gcc_arg_rdynamic'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void somefunc() { };' > conftest.c cmd='$CC -rdynamic -c conftest.c' if eval $cmd 2>&1 | egrep -e -rdynamic >/dev/null ; then ac_result=no else ac_result=yes fi eval $gcc_arg_name=$ac_result rm -f conftest.* fi echo "$ac_t""$ac_cv_gcc_arg_rdynamic" 1>&6 if eval test "\$$gcc_arg_name" = "yes"; then gcc_rdynamic=yes else : fi if test "$gcc_rdynamic" = "yes"; then PHP_LDFLAGS="$PHP_LDFLAGS -rdynamic" fi fi INSTALL_IT="\ echo 'PHP_LIBS = -L. -lphp4 \$(PHP_LIBS) \$(EXTRA_LIBS)' > $THTTPD/php_makefile; \ echo 'PHP_LDFLAGS = \$(NATIVE_RPATHS) \$(PHP_LDFLAGS)' >> $THTTPD/php_makefile; \ echo 'PHP_CFLAGS = \$(COMMON_FLAGS) \$(CFLAGS_CLEAN) \$(CPPFLAGS) \$(EXTRA_CFLAGS)' >> $THTTPD/php_makefile; \ \$(LN_S) $abs_srcdir/sapi/thttpd/thttpd.c $THTTPD/php_thttpd.c; \ \$(LN_S) $abs_srcdir/sapi/thttpd/php_thttpd.h $abs_builddir/$SAPI_STATIC $THTTPD/;\ test -f $THTTPD/php_patched || \ (cd $THTTPD && patch < $abs_srcdir/sapi/thttpd/thttpd_patch && touch php_patched)" PHP_THTTPD="yes, using $THTTPD" if test "$THTTPD" != "/usr/include"; then if test -z "$THTTPD" || echo "$THTTPD" | grep '^/' >/dev/null ; then ai_p=$THTTPD else ep_dir="`echo $THTTPD|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THTTPD\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi php_build_target=static PHP_SAPI=thttpd else PHP_THTTPD=no fi echo $ac_n "checking for thttpd""... $ac_c" 1>&6 echo "configure:4986: checking for thttpd" >&5 echo "$ac_t""$PHP_THTTPD" 1>&6 PHP_TUX=no # Check whether --with-tux or --without-tux was given. if test "${with_tux+set}" = set; then withval="$with_tux" INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $withval/php4.tux.so" for ac_hdr in tuxmodule.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:5001: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:5011: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 { echo "configure: error: Cannot find tuxmodule.h" 1>&2; exit 1; } fi done php_build_target=shared PHP_SAPI=tux PHP_TUX=yes fi echo $ac_n "checking for TUX""... $ac_c" 1>&6 echo "configure:5048: checking for TUX" >&5 echo "$ac_t""$PHP_TUX" 1>&6 unset PHP_TUX # Check whether --with-webjames or --without-webjames was given. if test "${with_webjames+set}" = set; then withval="$with_webjames" if test -z "$withval" || echo "$withval" | grep '^/' >/dev/null ; then WEBJAMES=$withval else ep_dir="`echo $withval|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" WEBJAMES="$ep_realdir/`basename \"$withval\"`" fi INSTALL_IT="\ echo 'PHP_LIBS = -l$abs_srcdir/$SAPI_STATIC \$(PHP_LIBS) \$(EXTRA_LIBS)' > $WEBJAMES/build/php; \ echo 'PHP_LDFLAGS = \$(NATIVE_RPATHS) \$(PHP_LDFLAGS)' >> $WEBJAMES/build/php; \ echo 'PHP_CFLAGS = -DPHP \$(COMMON_FLAGS) \$(EXTRA_CFLAGS) -I$abs_srcdir/sapi/webjames' >> $WEBJAMES/build/php;" PHP_WEBJAMES="yes, using $WEBJAMES" if test "$WEBJAMES" != "/usr/include"; then if test -z "$WEBJAMES" || echo "$WEBJAMES" | grep '^/' >/dev/null ; then ai_p=$WEBJAMES else ep_dir="`echo $WEBJAMES|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$WEBJAMES\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi php_build_target=static PHP_SAPI=webjames else PHP_WEBJAMES="no" fi echo $ac_n "checking for webjames""... $ac_c" 1>&6 echo "configure:5118: checking for webjames" >&5 echo "$ac_t""$PHP_WEBJAMES" 1>&6 echo $ac_n "checking for chosen SAPI module""... $ac_c" 1>&6 echo "configure:5124: checking for chosen SAPI module" >&5 echo "$ac_t""$PHP_SAPI" 1>&6 if test "$enable_experimental_zts" = "yes"; then if test -n "$ac_cv_pthreads_lib"; then LIBS="$LIBS -l$ac_cv_pthreads_lib" fi if test -n "$ac_cv_pthreads_cflags"; then CFLAGS="$CFLAGS $ac_cv_pthreads_cflags" fi if test -z "$host_alias" && test -n "$host"; then host_alias=$host fi if test -z "$host_alias"; then { echo "configure: error: host_alias is not set. Make sure to run config.guess" 1>&2; exit 1; } fi case $host_alias in *solaris*) PTHREAD_FLAGS="-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT";; *freebsd*) PTHREAD_FLAGS="-D_REENTRANT -D_THREAD_SAFE";; *linux*) PTHREAD_FLAGS=-D_REENTRANT;; *aix*) PTHREAD_FLAGS=-D_THREAD_SAFE;; *irix*) PTHREAD_FLAGS=-D_POSIX_THREAD_SAFE_FUNCTIONS;; *hpux*) PTHREAD_FLAGS=-D_REENTRANT;; *sco*) PTHREAD_FLAGS=-D_REENTRANT;; esac if test -n "$PTHREAD_FLAGS"; then CPPFLAGS="$CPPFLAGS $PTHREAD_FLAGS" fi fi echo "$ac_t""" 1>&6 echo "$ac_t""${T_MD}Running system checks${T_ME}" 1>&6 echo $ac_n "checking for missing declarations of reentrant functions""... $ac_c" 1>&6 echo "configure:5182: checking for missing declarations of reentrant functions" >&5 cat > conftest.$ac_ext < int main() { struct tm *(*func)() = localtime_r ; return 0; } EOF if { (eval echo configure:5191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat >> confdefs.h <<\EOF #define MISSING_LOCALTIME_R_DECL 1 EOF fi rm -f conftest* cat > conftest.$ac_ext < int main() { struct tm *(*func)() = gmtime_r ; return 0; } EOF if { (eval echo configure:5216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat >> confdefs.h <<\EOF #define MISSING_GMTIME_R_DECL 1 EOF fi rm -f conftest* cat > conftest.$ac_ext < int main() { char *(*func)() = asctime_r ; return 0; } EOF if { (eval echo configure:5241: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat >> confdefs.h <<\EOF #define MISSING_ASCTIME_R_DECL 1 EOF fi rm -f conftest* cat > conftest.$ac_ext < int main() { char *(*func)() = ctime_r ; return 0; } EOF if { (eval echo configure:5266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat >> confdefs.h <<\EOF #define MISSING_CTIME_R_DECL 1 EOF fi rm -f conftest* cat > conftest.$ac_ext < int main() { char *(*func)() = strtok_r ; return 0; } EOF if { (eval echo configure:5291: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat >> confdefs.h <<\EOF #define MISSING_STRTOK_R_DECL 1 EOF fi rm -f conftest* echo "$ac_t""done" 1>&6 # Extract the first word of "sendmail", so it can be a program name with args. set dummy sendmail; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:5314: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_PROG_SENDMAIL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$PROG_SENDMAIL" in /*) ac_cv_path_PROG_SENDMAIL="$PROG_SENDMAIL" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_PROG_SENDMAIL="$PROG_SENDMAIL" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_PROG_SENDMAIL="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi PROG_SENDMAIL="$ac_cv_path_PROG_SENDMAIL" if test -n "$PROG_SENDMAIL"; then echo "$ac_t""$PROG_SENDMAIL" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -n "$PROG_SENDMAIL"; then cat >> confdefs.h <<\EOF #define HAVE_SENDMAIL 1 EOF fi echo $ac_n "checking whether system uses EBCDIC""... $ac_c" 1>&6 echo "configure:5355: checking whether system uses EBCDIC" >&5 if eval "test \"`echo '$''{'ac_cv_ebcdic'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_ebcdic=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_ebcdic=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_ebcdic=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_ebcdic" 1>&6 if test "$ac_cv_ebcdic" = "yes"; then cat >> confdefs.h <<\EOF #define CHARSET_EBCDIC 1 EOF fi if test -d /usr/pkg/include -a -d /usr/pkg/lib ; then CPPFLAGS="$CPPFLAGS -I/usr/pkg/include" LDFLAGS="$LDFLAGS -L/usr/pkg/lib" fi INCLUDES="$INCLUDES -I\$(top_builddir)/Zend" test -d /usr/ucblib && if test "/usr/ucblib" != "/usr/lib"; then if test -z "/usr/ucblib" || echo "/usr/ucblib" | grep '^/' >/dev/null ; then ai_p=/usr/ucblib else ep_dir="`echo /usr/ucblib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"/usr/ucblib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R/usr/ucblib -L/usr/ucblib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6 echo "configure:5442: checking for socket in -lsocket" >&5 ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 case socket in c|c_r|pthread*) ;; *) LIBS="-lsocket $LIBS" ;; esac cat >> confdefs.h <<\EOF #define HAVE_LIBSOCKET 1 EOF else echo "$ac_t""no" 1>&6 echo $ac_n "checking for htonl in -lsocket""... $ac_c" 1>&6 echo "configure:5497: checking for htonl in -lsocket" >&5 ac_lib_var=`echo socket'_'htonl | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 case socket in c|c_r|pthread*) ;; *) LIBS="-lsocket $LIBS" ;; esac else echo "$ac_t""no" 1>&6 fi fi unset ac_cv_func_yp_get_default_domain echo $ac_n "checking for yp_get_default_domain""... $ac_c" 1>&6 echo "configure:5555: checking for yp_get_default_domain" >&5 if eval "test \"`echo '$''{'ac_cv_func_yp_get_default_domain'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char yp_get_default_domain(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_yp_get_default_domain) || defined (__stub___yp_get_default_domain) choke me #else yp_get_default_domain(); #endif ; return 0; } EOF if { (eval echo configure:5583: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_yp_get_default_domain=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_yp_get_default_domain=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'yp_get_default_domain`\" = yes"; then echo "$ac_t""yes" 1>&6 php_no_nsl_checks=yes else echo "$ac_t""no" 1>&6 fi unset ac_cv_func_yp_get_default_domain if test "$php_no_nsl_checks" != "yes"; then echo $ac_n "checking for gethostname in -lnsl""... $ac_c" 1>&6 echo "configure:5607: checking for gethostname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 case nsl in c|c_r|pthread*) ;; *) LIBS="-lnsl $LIBS" ;; esac cat >> confdefs.h <<\EOF #define HAVE_LIBNSL 1 EOF else echo "$ac_t""no" 1>&6 echo $ac_n "checking for gethostbyaddr in -lnsl""... $ac_c" 1>&6 echo "configure:5662: checking for gethostbyaddr in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyaddr | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 case nsl in c|c_r|pthread*) ;; *) LIBS="-lnsl $LIBS" ;; esac cat >> confdefs.h <<\EOF #define HAVE_LIBNSL 1 EOF else echo "$ac_t""no" 1>&6 fi fi fi echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 echo "configure:5724: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 case dl in c|c_r|pthread*) ;; *) LIBS="-ldl $LIBS" ;; esac else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6 echo "configure:5776: checking for sin in -lm" >&5 ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo m | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for inet_aton in -lresolv""... $ac_c" 1>&6 echo "configure:5824: checking for inet_aton in -lresolv" >&5 ac_lib_var=`echo resolv'_'inet_aton | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo resolv | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 echo $ac_n "checking for inet_aton in -lbind""... $ac_c" 1>&6 echo "configure:5870: checking for inet_aton in -lbind" >&5 ac_lib_var=`echo bind'_'inet_aton | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lbind $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo bind | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 echo $ac_n "checking for __inet_aton in -lbind""... $ac_c" 1>&6 echo "configure:5916: checking for __inet_aton in -lbind" >&5 ac_lib_var=`echo bind'_'__inet_aton | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lbind $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo bind | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi fi fi echo $ac_n "checking for res_search in -lsocket""... $ac_c" 1>&6 echo "configure:5970: checking for res_search in -lsocket" >&5 ac_lib_var=`echo socket'_'res_search | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for dn_skipname in -lresolv""... $ac_c" 1>&6 echo "configure:6006: checking for dn_skipname in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_skipname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo resolv | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for __dn_skipname in -lresolv""... $ac_c" 1>&6 echo "configure:6053: checking for __dn_skipname in -lresolv" >&5 ac_lib_var=`echo resolv'_'__dn_skipname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo resolv | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi LIBS="$LIBS -lsocket" cat >> confdefs.h <<\EOF #define HAVE_LIBSOCKET 1 EOF else echo "$ac_t""no" 1>&6 echo $ac_n "checking for res_search in -lresolv""... $ac_c" 1>&6 echo "configure:6108: checking for res_search in -lresolv" >&5 ac_lib_var=`echo resolv'_'res_search | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lresolv" cat >> confdefs.h <<\EOF #define HAVE_LIBRESOLV 1 EOF else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dn_skipname in -lresolv""... $ac_c" 1>&6 echo "configure:6153: checking for dn_skipname in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_skipname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo resolv | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for __dn_skipname in -lresolv""... $ac_c" 1>&6 echo "configure:6200: checking for __dn_skipname in -lresolv" >&5 ac_lib_var=`echo resolv'_'__dn_skipname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo resolv | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi fi fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:6257: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:6270: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:6337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi if test "`uname -s 2>/dev/null`" != "QNX"; then ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 echo "configure:6367: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> int main() { DIR *dirp = 0; ; return 0; } EOF if { (eval echo configure:6380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 echo "configure:6405: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -ldir" else echo "$ac_t""no" 1>&6 fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 echo "configure:6446: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lx" else echo "$ac_t""no" 1>&6 fi fi else for ac_hdr in dirent.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:6492: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:6502: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done fi echo $ac_n "checking for fclose declaration""... $ac_c" 1>&6 echo "configure:6531: checking for fclose declaration" >&5 cat > conftest.$ac_ext < int main() { int (*func)() = fclose ; return 0; } EOF if { (eval echo configure:6540: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cat >> confdefs.h <<\EOF #define MISSING_FCLOSE_DECL 0 EOF echo "$ac_t""ok" 1>&6 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat >> confdefs.h <<\EOF #define MISSING_FCLOSE_DECL 1 EOF echo "$ac_t""missing" 1>&6 fi rm -f conftest* for ac_hdr in ApplicationServices/ApplicationServices.h \ alloca.h \ arpa/inet.h \ arpa/nameser.h \ crypt.h \ fcntl.h \ grp.h \ ieeefp.h \ langinfo.h \ limits.h \ locale.h \ netinet/in.h \ pwd.h \ resolv.h \ signal.h \ stdarg.h \ stdlib.h \ string.h \ syslog.h \ sysexits.h \ sys/file.h \ sys/mman.h \ sys/mount.h \ sys/resource.h \ sys/select.h \ sys/socket.h \ sys/statfs.h \ sys/statvfs.h \ sys/vfs.h \ sys/sysexits.h \ sys/time.h \ sys/types.h \ sys/varargs.h \ sys/wait.h \ unistd.h \ unix.h \ utime.h \ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:6604: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:6614: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 echo "configure:6645: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF if { (eval echo configure:6658: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_tm=sys/time.h fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_tm" 1>&6 if test $ac_cv_struct_tm = sys/time.h; then cat >> confdefs.h <<\EOF #define TM_IN_SYS_TIME 1 EOF fi echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 echo "configure:6679: checking for tm_zone in struct tm" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm_zone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_cv_struct_tm> int main() { struct tm tm; tm.tm_zone; ; return 0; } EOF if { (eval echo configure:6692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_zone=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_tm_zone=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_tm_zone" 1>&6 if test "$ac_cv_struct_tm_zone" = yes; then cat >> confdefs.h <<\EOF #define HAVE_TM_ZONE 1 EOF else echo $ac_n "checking for tzname""... $ac_c" 1>&6 echo "configure:6712: checking for tzname" >&5 if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifndef tzname /* For SGI. */ extern char *tzname[]; /* RS6000 and others reject char **tzname. */ #endif int main() { atoi(*tzname); ; return 0; } EOF if { (eval echo configure:6727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_var_tzname=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_var_tzname=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_var_tzname" 1>&6 if test $ac_cv_var_tzname = yes; then cat >> confdefs.h <<\EOF #define HAVE_TZNAME 1 EOF fi fi echo $ac_n "checking for tm_gmtoff in struct tm""... $ac_c" 1>&6 echo "configure:6751: checking for tm_gmtoff in struct tm" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm_gmtoff'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_cv_struct_tm> int main() { struct tm tm; tm.tm_gmtoff; ; return 0; } EOF if { (eval echo configure:6764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_gmtoff=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_tm_gmtoff=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_tm_gmtoff" 1>&6 if test "$ac_cv_struct_tm_gmtoff" = yes; then cat >> confdefs.h <<\EOF #define HAVE_TM_GMTOFF 1 EOF fi echo $ac_n "checking for struct flock""... $ac_c" 1>&6 echo "configure:6787: checking for struct flock" >&5 if eval "test \"`echo '$''{'ac_cv_struct_flock'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { struct flock x; ; return 0; } EOF if { (eval echo configure:6802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_flock=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_flock=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_flock" 1>&6 if test "$ac_cv_struct_flock" = "yes" ; then cat >> confdefs.h <<\EOF #define HAVE_STRUCT_FLOCK 1 EOF fi echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 echo "configure:6829: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { socklen_t x; ; return 0; } EOF if { (eval echo configure:6846: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_socklen_t=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_socklen_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_socklen_t" 1>&6 if test "$ac_cv_socklen_t" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_SOCKLEN_T 1 EOF fi echo $ac_n "checking size of long""... $ac_c" 1>&6 echo "configure:6872: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_long=8 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); exit(0); } EOF if { (eval echo configure:6891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long" 1>&6 cat >> confdefs.h <&6 echo "configure:6911: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_int=4 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); exit(0); } EOF if { (eval echo configure:6930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_int=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_int" 1>&6 cat >> confdefs.h <&6 echo "configure:6951: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { struct stat s; s.st_blksize; ; return 0; } EOF if { (eval echo configure:6964: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blksize=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_st_blksize=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_st_blksize" 1>&6 if test $ac_cv_struct_st_blksize = yes; then cat >> confdefs.h <<\EOF #define HAVE_ST_BLKSIZE 1 EOF fi if test "`uname -s 2>/dev/null`" != "QNX"; then echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 echo "configure:6986: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blocks'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { struct stat s; s.st_blocks; ; return 0; } EOF if { (eval echo configure:6999: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blocks=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_st_blocks=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_st_blocks" 1>&6 if test $ac_cv_struct_st_blocks = yes; then cat >> confdefs.h <<\EOF #define HAVE_ST_BLOCKS 1 EOF else LIBOBJS="$LIBOBJS fileblocks.${ac_objext}" fi else echo "configure: warning: warnings level for cc set to 0" 1>&2 WARNING_LEVEL=0 fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 echo "configure:7026: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { struct stat s; s.st_rdev; ; return 0; } EOF if { (eval echo configure:7039: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_st_rdev=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_st_rdev" 1>&6 if test $ac_cv_struct_st_rdev = yes; then cat >> confdefs.h <<\EOF #define HAVE_ST_RDEV 1 EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 echo "configure:7061: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 echo "configure:7094: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "uid_t" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_uid_t=yes else rm -rf conftest* ac_cv_type_uid_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_uid_t" 1>&6 if test $ac_cv_type_uid_t = no; then cat >> confdefs.h <<\EOF #define uid_t int EOF cat >> confdefs.h <<\EOF #define gid_t int EOF fi echo $ac_n "checking for struct sockaddr_storage""... $ac_c" 1>&6 echo "configure:7129: checking for struct sockaddr_storage" >&5 if eval "test \"`echo '$''{'ac_cv_sockaddr_storage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { struct sockaddr_storage s; s ; return 0; } EOF if { (eval echo configure:7142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sockaddr_storage=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_sockaddr_storage=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_sockaddr_storage" 1>&6 if test "$ac_cv_sockaddr_storage" = yes; then cat >> confdefs.h <<\EOF #define HAVE_SOCKADDR_STORAGE 1 EOF fi echo $ac_n "checking for IPv6 support""... $ac_c" 1>&6 echo "configure:7163: checking for IPv6 support" >&5 if eval "test \"`echo '$''{'ac_cv_ipv6_support'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include int main() { struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0; ; return 0; } EOF if { (eval echo configure:7177: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_ipv6_support=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_ipv6_support=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_ipv6_support" 1>&6 if test "$ac_cv_ipv6_support" = yes; then cat >> confdefs.h <<\EOF #define HAVE_IPV6 1 EOF fi echo $ac_n "checking for vprintf""... $ac_c" 1>&6 echo "configure:7201: checking for vprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char vprintf(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_vprintf) || defined (__stub___vprintf) choke me #else vprintf(); #endif ; return 0; } EOF if { (eval echo configure:7229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vprintf=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_vprintf=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_VPRINTF 1 EOF else echo "$ac_t""no" 1>&6 fi if test "$ac_cv_func_vprintf" != yes; then echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 echo "configure:7253: checking for _doprnt" >&5 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char _doprnt(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub__doprnt) || defined (__stub____doprnt) choke me #else _doprnt(); #endif ; return 0; } EOF if { (eval echo configure:7281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func__doprnt=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func__doprnt=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_DOPRNT 1 EOF else echo "$ac_t""no" 1>&6 fi fi for ac_func in asctime_r \ chroot \ ctime_r \ cuserid \ crypt \ flock \ gai_strerror \ gcvt \ getlogin \ gethostbyaddr \ getprotobyname \ getprotobynumber \ getservbyname \ getservbyport \ getrusage \ gettimeofday \ gmtime_r \ inet_aton \ isascii \ link \ localtime_r \ lockf \ lrand48 \ memcpy \ memmove \ mkstemp \ mmap \ nl_langinfo \ putenv \ realpath \ random \ rand_r \ regcomp \ res_search \ setitimer \ setlocale \ localeconv \ setsockopt \ setvbuf \ shutdown \ sin \ snprintf \ srand48 \ srandom \ statfs \ statvfs \ std_syslog \ strcasecmp \ strcoll \ strdup \ strerror \ strftime \ strstr \ strtok_r \ symlink \ tempnam \ tzset \ unsetenv \ usleep \ utime \ vsnprintf \ do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:7369: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:7397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done echo $ac_n "checking for getaddrinfo""... $ac_c" 1>&6 echo "configure:7423: checking for getaddrinfo" >&5 if eval "test \"`echo '$''{'ac_cv_func_getaddrinfo'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g); ; return 0; } EOF if { (eval echo configure:7435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_func_getaddrinfo=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_func_getaddrinfo=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_func_getaddrinfo" 1>&6 if test "$ac_cv_func_getaddrinfo" = yes; then cat >> confdefs.h <<\EOF #define HAVE_GETADDRINFO 1 EOF fi for ac_func in strlcat strlcpy getopt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:7458: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:7486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" fi done echo $ac_n "checking whether utime accepts a null argument""... $ac_c" 1>&6 echo "configure:7513: checking whether utime accepts a null argument" >&5 if eval "test \"`echo '$''{'ac_cv_func_utime_null'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftestdata; > conftestdata # Sequent interprets utime(file, 0) to mean use start of epoch. Wrong. if test "$cross_compiling" = yes; then ac_cv_func_utime_null=no else cat > conftest.$ac_ext < #include main() { struct stat s, t; exit(!(stat ("conftestdata", &s) == 0 && utime("conftestdata", (long *)0) == 0 && stat("conftestdata", &t) == 0 && t.st_mtime >= s.st_mtime && t.st_mtime - s.st_mtime < 120)); } EOF if { (eval echo configure:7534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_utime_null=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_func_utime_null=no fi rm -fr conftest* fi rm -f core core.* *.core fi echo "$ac_t""$ac_cv_func_utime_null" 1>&6 if test $ac_cv_func_utime_null = yes; then cat >> confdefs.h <<\EOF #define HAVE_UTIME_NULL 1 EOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 echo "configure:7560: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF if { (eval echo configure:7572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_alloca_h=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 if test $ac_cv_header_alloca_h = yes; then cat >> confdefs.h <<\EOF #define HAVE_ALLOCA_H 1 EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 echo "configure:7593: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < # define alloca _alloca # else # if HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main() { char *p = (char *) alloca(1); ; return 0; } EOF if { (eval echo configure:7626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_func_alloca_works=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 if test $ac_cv_func_alloca_works = yes; then cat >> confdefs.h <<\EOF #define HAVE_ALLOCA 1 EOF fi if test $ac_cv_func_alloca_works = no; then # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=alloca.${ac_objext} cat >> confdefs.h <<\EOF #define C_ALLOCA 1 EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 echo "configure:7658: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5 | egrep "webecray" >/dev/null 2>&1; then rm -rf conftest* ac_cv_os_cray=yes else rm -rf conftest* ac_cv_os_cray=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_os_cray" 1>&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:7688: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:7716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <&6 fi done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 echo "configure:7743: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext < addr) ? 1 : -1; } main () { exit (find_stack_direction() < 0); } EOF if { (eval echo configure:7770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_stack_direction=-1 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 cat >> confdefs.h <&6 echo "configure:7793: checking whether sprintf is broken" >&5 if eval "test \"`echo '$''{'ac_cv_broken_sprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_broken_sprintf=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_broken_sprintf=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_broken_sprintf=yes fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_broken_sprintf" 1>&6 if test "$ac_cv_broken_sprintf" = "yes"; then cat >> confdefs.h <<\EOF #define PHP_BROKEN_SPRINTF 1 EOF else cat >> confdefs.h <<\EOF #define PHP_BROKEN_SPRINTF 0 EOF fi echo $ac_n "checking for declared timezone""... $ac_c" 1>&6 echo "configure:7842: checking for declared timezone" >&5 if eval "test \"`echo '$''{'ac_cv_declared_timezone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #ifdef HAVE_SYS_TIME_H #include #endif int main() { time_t foo = (time_t) timezone; ; return 0; } EOF if { (eval echo configure:7863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_declared_timezone=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_declared_timezone=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_declared_timezone" 1>&6 if test "$ac_cv_declared_timezone" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_DECLARED_TIMEZONE 1 EOF fi echo $ac_n "checking for type of reentrant time-related functions""... $ac_c" 1>&6 echo "configure:7889: checking for type of reentrant time-related functions" >&5 if eval "test \"`echo '$''{'ac_cv_time_r_type'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_time_r_type=POSIX else cat > conftest.$ac_ext < main() { char buf[27]; struct tm t; time_t old = 0; int r, s; s = gmtime_r(&old, &t); r = (int) asctime_r(&t, buf, 26); if (r == s && s == 0) return (0); return (1); } EOF if { (eval echo configure:7918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_time_r_type=hpux else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() { struct tm t, *s; time_t old = 0; char buf[27], *p; s = gmtime_r(&old, &t); p = asctime_r(&t, buf, 26); if (p == buf && s == &t) return (0); return (1); } EOF if { (eval echo configure:7948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_time_r_type=irix else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_time_r_type=POSIX fi rm -fr conftest* fi fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_time_r_type" 1>&6 case $ac_cv_time_r_type in hpux) cat >> confdefs.h <<\EOF #define PHP_HPUX_TIME_R 1 EOF ;; irix) cat >> confdefs.h <<\EOF #define PHP_IRIX_TIME_R 1 EOF ;; esac echo $ac_n "checking for readdir_r""... $ac_c" 1>&6 echo "configure:7986: checking for readdir_r" >&5 if eval "test \"`echo '$''{'ac_cv_func_readdir_r'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char readdir_r(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_readdir_r) || defined (__stub___readdir_r) choke me #else readdir_r(); #endif ; return 0; } EOF if { (eval echo configure:8014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_readdir_r=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_readdir_r=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'readdir_r`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_cv_func_readdir_r=yes else echo "$ac_t""no" 1>&6 ac_cv_func_readdir=no fi if test "$ac_cv_func_readdir_r" = "yes"; then echo $ac_n "checking for type of readdir_r""... $ac_c" 1>&6 echo "configure:8036: checking for type of readdir_r" >&5 if eval "test \"`echo '$''{'ac_cv_what_readdir_r'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_what_readdir_r=none else cat > conftest.$ac_ext < #include #ifndef PATH_MAX #define PATH_MAX 1024 #endif main() { DIR *dir; char entry[sizeof(struct dirent)+PATH_MAX]; struct dirent *pentry = (struct dirent *) &entry; dir = opendir("/"); if (!dir) exit(1); if (readdir_r(dir, (struct dirent *) entry, &pentry) == 0) exit(0); exit(1); } EOF if { (eval echo configure:8072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_what_readdir_r=POSIX else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* cat > conftest.$ac_ext < #include int readdir_r(DIR *, struct dirent *); EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:8093: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_what_readdir_r=old-style else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_what_readdir_r=none fi rm -f conftest* fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_what_readdir_r" 1>&6 case $ac_cv_what_readdir_r in POSIX) cat >> confdefs.h <<\EOF #define HAVE_POSIX_READDIR_R 1 EOF ;; old-style) cat >> confdefs.h <<\EOF #define HAVE_OLD_READDIR_R 1 EOF ;; esac fi if eval "test \"`echo '$''{'ac_cv_type_$1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif #ifdef HAVE_NETINET_IN_H #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "in_addr_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_in_addr_t=yes else rm -rf conftest* ac_cv_type_in_addr_t=no fi rm -f conftest* fi if test $ac_cv_type_in_addr_t = no; then cat >> confdefs.h <<\EOF #define in_addr_t u_int EOF fi # Check whether --enable- or --disable- was given. if test "${enable_+set}" = set; then enableval="$enable_" : fi if test -n "whether to include debugging symbols"; then echo $ac_n "checking whether to include debugging symbols""... $ac_c" 1>&6 echo "configure:8188: checking whether to include debugging symbols" >&5 fi # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" PHP_DEBUG=$enableval else PHP_DEBUG=no fi case $PHP_DEBUG in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DEBUG=`echo "$PHP_DEBUG"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DEBUG=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DEBUG" = "no" && PHP_DEBUG=yes fi if test -n "whether to include debugging symbols"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_DEBUG" = "yes"; then PHP_DEBUG=1 ZEND_DEBUG=yes else PHP_DEBUG=0 ZEND_DEBUG=no fi if test -n "layout of installed files"; then echo $ac_n "checking layout of installed files""... $ac_c" 1>&6 echo "configure:8245: checking layout of installed files" >&5 fi # Check whether --with-layout or --without-layout was given. if test "${with_layout+set}" = set; then withval="$with_layout" PHP_LAYOUT=$withval else PHP_LAYOUT=PHP fi case $PHP_LAYOUT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_LAYOUT=`echo "$PHP_LAYOUT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_LAYOUT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_LAYOUT" = "no" && PHP_LAYOUT=yes fi if test -n "layout of installed files"; then echo "$ac_t""$ext_output" 1>&6 fi case $PHP_LAYOUT in GNU) oldstyleextdir=no ;; *) oldstyleextdir=yes ;; esac if test -n "path to configuration file"; then echo $ac_n "checking path to configuration file""... $ac_c" 1>&6 echo "configure:8303: checking path to configuration file" >&5 fi # Check whether --with-config-file-path or --without-config-file-path was given. if test "${with_config_file_path+set}" = set; then withval="$with_config_file_path" PHP_CONFIG_FILE_PATH=$withval else PHP_CONFIG_FILE_PATH=DEFAULT fi case $PHP_CONFIG_FILE_PATH in shared,*) ext_output="yes, shared" ext_shared=yes PHP_CONFIG_FILE_PATH=`echo "$PHP_CONFIG_FILE_PATH"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_CONFIG_FILE_PATH=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_CONFIG_FILE_PATH" = "no" && PHP_CONFIG_FILE_PATH=yes fi if test -n "path to configuration file"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_CONFIG_FILE_PATH" = "DEFAULT"; then case $PHP_LAYOUT in GNU) PHP_CONFIG_FILE_PATH=$sysconfdir ;; *) PHP_CONFIG_FILE_PATH=$libdir ;; esac fi # compatibility if test "x$with_pear" = "x" -a "x$enable_pear" = "xno"; then with_pear=no fi if test -n "whether to install PEAR, and where"; then echo $ac_n "checking whether to install PEAR, and where""... $ac_c" 1>&6 echo "configure:8368: checking whether to install PEAR, and where" >&5 fi # Check whether --with-pear or --without-pear was given. if test "${with_pear+set}" = set; then withval="$with_pear" PHP_PEAR=$withval else PHP_PEAR=DEFAULT fi case $PHP_PEAR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_PEAR=`echo "$PHP_PEAR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_PEAR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_PEAR" = "no" && PHP_PEAR=yes fi if test -n "whether to install PEAR, and where"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_PEAR" != "no"; then PEAR_DIR=pear PEAR_INSTALLDIR=$PHP_PEAR fi if test "$PHP_PEAR" = "DEFAULT" -o "x$PHP_PEAR" = "xyes"; then case $PHP_LAYOUT in GNU) PEAR_INSTALLDIR=$datadir/pear;; *) PEAR_INSTALLDIR=$libdir/php;; esac fi test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS" if test -n "whether to enable safe mode by default"; then echo $ac_n "checking whether to enable safe mode by default""... $ac_c" 1>&6 echo "configure:8431: checking whether to enable safe mode by default" >&5 fi # Check whether --enable-safe-mode or --disable-safe-mode was given. if test "${enable_safe_mode+set}" = set; then enableval="$enable_safe_mode" PHP_SAFE_MODE=$enableval else PHP_SAFE_MODE=no fi case $PHP_SAFE_MODE in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SAFE_MODE=`echo "$PHP_SAFE_MODE"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SAFE_MODE=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SAFE_MODE" = "no" && PHP_SAFE_MODE=yes fi if test -n "whether to enable safe mode by default"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SAFE_MODE" = "yes"; then cat >> confdefs.h <<\EOF #define PHP_SAFE_MODE 1 EOF else cat >> confdefs.h <<\EOF #define PHP_SAFE_MODE 0 EOF fi echo $ac_n "checking for safe mode exec dir""... $ac_c" 1>&6 echo "configure:8489: checking for safe mode exec dir" >&5 # Check whether --with-exec-dir or --without-exec-dir was given. if test "${with_exec_dir+set}" = set; then withval="$with_exec_dir" if test "$withval" != "no"; then if test "$withval" = "yes"; then cat >> confdefs.h <<\EOF #define PHP_SAFE_MODE_EXEC_DIR "/usr/local/php/bin" EOF echo "$ac_t""/usr/local/php/bin" 1>&6 else cat >> confdefs.h <&6 fi else cat >> confdefs.h <<\EOF #define PHP_SAFE_MODE_EXEC_DIR "/usr/local/php/bin" EOF echo "$ac_t""/usr/local/php/bin" 1>&6 fi else cat >> confdefs.h <<\EOF #define PHP_SAFE_MODE_EXEC_DIR "/usr/local/php/bin" EOF echo "$ac_t""/usr/local/php/bin" 1>&6 fi if test -n "for OpenSSL support"; then echo $ac_n "checking for OpenSSL support""... $ac_c" 1>&6 echo "configure:8531: checking for OpenSSL support" >&5 fi # Check whether --with-openssl or --without-openssl was given. if test "${with_openssl+set}" = set; then withval="$with_openssl" PHP_OPENSSL=$withval else PHP_OPENSSL=no fi case $PHP_OPENSSL in shared,*) ext_output="yes, shared" ext_shared=yes PHP_OPENSSL=`echo "$PHP_OPENSSL"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_OPENSSL=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_OPENSSL" = "no" && PHP_OPENSSL=yes fi if test -n "for OpenSSL support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_OPENSSL" = "yes"; then PHP_OPENSSL="/usr/local/ssl /usr/local /usr /usr/local/openssl" fi if test "$PHP_OPENSSL" != "no"; then if test "$PHP_OPENSSL" = "no"; then PHP_OPENSSL="/usr/local/ssl /usr/local /usr /usr/local/openssl" fi for i in $PHP_OPENSSL; do if test -r $i/include/openssl/evp.h; then OPENSSL_DIR=$i OPENSSL_INC=$i/include fi done if test -z "$OPENSSL_DIR"; then { echo "configure: error: Cannot find OpenSSL's " 1>&2; exit 1; } fi old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$OPENSSL_INC echo $ac_n "checking for OpenSSL version""... $ac_c" 1>&6 echo "configure:8599: checking for OpenSSL version" >&5 cat > conftest.$ac_ext < #if OPENSSL_VERSION_NUMBER >= 0x0090500fL yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t"">= 0.9.5" 1>&6 else rm -rf conftest* { echo "configure: error: OpenSSL version 0.9.5 or greater required." 1>&2; exit 1; } fi rm -f conftest* CPPFLAGS=$old_CPPFLAGS if test "$OPENSSL_DIR/lib" != "/usr/lib"; then if test -z "$OPENSSL_DIR/lib" || echo "$OPENSSL_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$OPENSSL_DIR/lib else ep_dir="`echo $OPENSSL_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OPENSSL_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$OPENSSL_DIR/lib -L$OPENSSL_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi echo $ac_n "checking for CRYPTO_free in -lcrypto""... $ac_c" 1>&6 echo "configure:8661: checking for CRYPTO_free in -lcrypto" >&5 ac_lib_var=`echo crypto'_'CRYPTO_free | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lcrypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 case crypto in c|c_r|pthread*) ;; *) LIBS="-lcrypto $LIBS" ;; esac else echo "$ac_t""no" 1>&6 { echo "configure: error: libcrypto not found!" 1>&2; exit 1; } fi echo $ac_n "checking for SSL_CTX_set_ssl_version in -lssl""... $ac_c" 1>&6 echo "configure:8718: checking for SSL_CTX_set_ssl_version in -lssl" >&5 ac_lib_var=`echo ssl'_'SSL_CTX_set_ssl_version | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lssl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 case ssl in c|c_r|pthread*) ;; *) LIBS="-lssl $LIBS" ;; esac else echo "$ac_t""no" 1>&6 { echo "configure: error: libssl not found!" 1>&2; exit 1; } fi if test "$OPENSSL_INC" != "/usr/include"; then if test -z "$OPENSSL_INC" || echo "$OPENSSL_INC" | grep '^/' >/dev/null ; then ai_p=$OPENSSL_INC else ep_dir="`echo $OPENSSL_INC|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OPENSSL_INC\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -n "whether to enable PHP's own SIGCHLD handler"; then echo $ac_n "checking whether to enable PHP's own SIGCHLD handler""... $ac_c" 1>&6 echo "configure:8811: checking whether to enable PHP's own SIGCHLD handler" >&5 fi # Check whether --enable-sigchild or --disable-sigchild was given. if test "${enable_sigchild+set}" = set; then enableval="$enable_sigchild" PHP_SIGCHILD=$enableval else PHP_SIGCHILD=no fi case $PHP_SIGCHILD in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SIGCHILD=`echo "$PHP_SIGCHILD"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SIGCHILD=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SIGCHILD" = "no" && PHP_SIGCHILD=yes fi if test -n "whether to enable PHP's own SIGCHLD handler"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SIGCHILD" = "yes"; then cat >> confdefs.h <<\EOF #define PHP_SIGCHILD 1 EOF else cat >> confdefs.h <<\EOF #define PHP_SIGCHILD 0 EOF fi if test -n "whether to enable magic quotes by default"; then echo $ac_n "checking whether to enable magic quotes by default""... $ac_c" 1>&6 echo "configure:8872: checking whether to enable magic quotes by default" >&5 fi # Check whether --enable-magic-quotes or --disable-magic-quotes was given. if test "${enable_magic_quotes+set}" = set; then enableval="$enable_magic_quotes" PHP_MAGIC_QUOTES=$enableval else PHP_MAGIC_QUOTES=no fi case $PHP_MAGIC_QUOTES in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MAGIC_QUOTES=`echo "$PHP_MAGIC_QUOTES"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MAGIC_QUOTES=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MAGIC_QUOTES" = "no" && PHP_MAGIC_QUOTES=yes fi if test -n "whether to enable magic quotes by default"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MAGIC_QUOTES" = "yes"; then cat >> confdefs.h <<\EOF #define MAGIC_QUOTES 1 EOF else cat >> confdefs.h <<\EOF #define MAGIC_QUOTES 0 EOF fi if test -n "whether to enable runpaths"; then echo $ac_n "checking whether to enable runpaths""... $ac_c" 1>&6 echo "configure:8933: checking whether to enable runpaths" >&5 fi # Check whether --enable-rpath or --disable-rpath was given. if test "${enable_rpath+set}" = set; then enableval="$enable_rpath" PHP_RPATH=$enableval else PHP_RPATH=yes fi case $PHP_RPATH in shared,*) ext_output="yes, shared" ext_shared=yes PHP_RPATH=`echo "$PHP_RPATH"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_RPATH=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_RPATH" = "no" && PHP_RPATH=yes fi if test -n "whether to enable runpaths"; then echo "$ac_t""$ext_output" 1>&6 fi if test -n "whether to explicitly link against libgcc"; then echo $ac_n "checking whether to explicitly link against libgcc""... $ac_c" 1>&6 echo "configure:8982: checking whether to explicitly link against libgcc" >&5 fi # Check whether --enable-libgcc or --disable-libgcc was given. if test "${enable_libgcc+set}" = set; then enableval="$enable_libgcc" PHP_LIBGCC=$enableval else PHP_LIBGCC=no fi case $PHP_LIBGCC in shared,*) ext_output="yes, shared" ext_shared=yes PHP_LIBGCC=`echo "$PHP_LIBGCC"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_LIBGCC=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_LIBGCC" = "no" && PHP_LIBGCC=yes fi if test -n "whether to explicitly link against libgcc"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_LIBGCC" = "yes"; then libgcc_libpath=`gcc --print-libgcc-file-name|sed 's%/*[^/][^/]*$%%'` if test -z "$libgcc_libpath"; then { echo "configure: error: Cannot locate libgcc. Make sure that gcc is in your path" 1>&2; exit 1; } fi if test "$libgcc_libpath" != "/usr/lib"; then if test -z "$libgcc_libpath" || echo "$libgcc_libpath" | grep '^/' >/dev/null ; then ai_p=$libgcc_libpath else ep_dir="`echo $libgcc_libpath|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$libgcc_libpath\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$libgcc_libpath -L$libgcc_libpath $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi case gcc in c|c_r|pthread*) ;; *) LIBS="$LIBS -lgcc" ;; esac fi if test -n "whether to enable short tags by default"; then echo $ac_n "checking whether to enable short tags by default""... $ac_c" 1>&6 echo "configure:9087: checking whether to enable short tags by default" >&5 fi # Check whether --enable-short-tags or --disable-short-tags was given. if test "${enable_short_tags+set}" = set; then enableval="$enable_short_tags" PHP_SHORT_TAGS=$enableval else PHP_SHORT_TAGS=yes fi case $PHP_SHORT_TAGS in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SHORT_TAGS=`echo "$PHP_SHORT_TAGS"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SHORT_TAGS=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SHORT_TAGS" = "no" && PHP_SHORT_TAGS=yes fi if test -n "whether to enable short tags by default"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SHORT_TAGS" = "yes"; then cat >> confdefs.h <<\EOF #define DEFAULT_SHORT_OPEN_TAG "1" EOF else cat >> confdefs.h <<\EOF #define DEFAULT_SHORT_OPEN_TAG "0" EOF fi if test -n "whether to enable dmalloc"; then echo $ac_n "checking whether to enable dmalloc""... $ac_c" 1>&6 echo "configure:9149: checking whether to enable dmalloc" >&5 fi # Check whether --enable-dmalloc or --disable-dmalloc was given. if test "${enable_dmalloc+set}" = set; then enableval="$enable_dmalloc" PHP_DMALLOC=$enableval else PHP_DMALLOC=no fi case $PHP_DMALLOC in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DMALLOC=`echo "$PHP_DMALLOC"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DMALLOC=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DMALLOC" = "no" && PHP_DMALLOC=yes fi if test -n "whether to enable dmalloc"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_DMALLOC" = "yes"; then echo $ac_n "checking for dmalloc_error in -ldmalloc""... $ac_c" 1>&6 echo "configure:9197: checking for dmalloc_error in -ldmalloc" >&5 ac_lib_var=`echo dmalloc'_'dmalloc_error | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldmalloc $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 case dmalloc in c|c_r|pthread*) ;; *) LIBS="-ldmalloc $LIBS" ;; esac cat >> confdefs.h <<\EOF #define HAVE_DMALLOC 1 EOF CPPFLAGS="$CPPFLAGS -DDMALLOC_FUNC_CHECK" else echo "$ac_t""no" 1>&6 { echo "configure: error: Problem with enabling dmalloc. Please check config.log for details." 1>&2; exit 1; } fi fi echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 echo "configure:9260: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 case crypt in c|c_r|pthread*) ;; *) LIBS="-lcrypt $LIBS" ;; esac case crypt in c|c_r|pthread*) ;; *) LIBS="$LIBS -lcrypt" ;; esac cat >> confdefs.h <<\EOF #define HAVE_CRYPT 1 EOF else echo "$ac_t""no" 1>&6 fi # Check whether --enable- or --disable- was given. if test "${enable_+set}" = set; then enableval="$enable_" : fi echo "$ac_t""" 1>&6 echo "$ac_t""${T_MD}Configuring extensions${T_ME}" 1>&6 # reading config stubs if test -n "if the location of ZLIB install directory is defined"; then echo $ac_n "checking if the location of ZLIB install directory is defined""... $ac_c" 1>&6 echo "configure:9357: checking if the location of ZLIB install directory is defined" >&5 fi # Check whether --with-zlib-dir or --without-zlib-dir was given. if test "${with_zlib_dir+set}" = set; then withval="$with_zlib_dir" PHP_ZLIB_DIR=$withval else PHP_ZLIB_DIR=no fi case $PHP_ZLIB_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_ZLIB_DIR=`echo "$PHP_ZLIB_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_ZLIB_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_ZLIB_DIR" = "no" && PHP_ZLIB_DIR=yes fi if test -n "if the location of ZLIB install directory is defined"; then echo "$ac_t""$ext_output" 1>&6 fi if test -n "for ZLIB support"; then echo $ac_n "checking for ZLIB support""... $ac_c" 1>&6 echo "configure:9406: checking for ZLIB support" >&5 fi # Check whether --with-zlib or --without-zlib was given. if test "${with_zlib+set}" = set; then withval="$with_zlib" PHP_ZLIB=$withval else PHP_ZLIB=no fi case $PHP_ZLIB in shared,*) ext_output="yes, shared" ext_shared=yes PHP_ZLIB=`echo "$PHP_ZLIB"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_ZLIB=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_ZLIB" = "no" && PHP_ZLIB=yes fi if test -n "for ZLIB support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_ZLIB" != "no" -o "$PHP_ZLIB_DIR" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS zlib" if test -d "$abs_srcdir/ext/zlib"; then ext_builddir=ext/zlib ext_srcdir=$abs_srcdir/ext/zlib else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi if test "$ZLIB_DIR/lib" != "/usr/lib"; then if test -z "$ZLIB_DIR/lib" || echo "$ZLIB_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ZLIB_DIR/lib else ep_dir="`echo $ZLIB_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ZLIB_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ZLIB_SHARED_LIBADD"; then ZLIB_SHARED_LIBADD="-R$ZLIB_DIR/lib -L$ZLIB_DIR/lib $ZLIB_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi echo $ac_n "checking for gzgets in -lz""... $ac_c" 1>&6 echo "configure:9720: checking for gzgets in -lz" >&5 ac_lib_var=`echo z'_'gzgets | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lz $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_ZLIB 1 EOF else echo "$ac_t""no" 1>&6 { echo "configure: error: ZLIB extension requires zlib >= 1.0.9" 1>&2; exit 1; } fi PHP_ZLIB_DIR=$ZLIB_DIR case z in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then ZLIB_SHARED_LIBADD="-lz $ZLIB_SHARED_LIBADD" else case z in c|c_r|pthread*) ;; *) LIBS="-lz $LIBS" ;; esac fi ;; esac if test "$ZLIB_INCDIR" != "/usr/include"; then if test -z "$ZLIB_INCDIR" || echo "$ZLIB_INCDIR" | grep '^/' >/dev/null ; then ai_p=$ZLIB_INCDIR else ep_dir="`echo $ZLIB_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ZLIB_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi echo $ac_n "checking for fopencookie""... $ac_c" 1>&6 echo "configure:9830: checking for fopencookie" >&5 if eval "test \"`echo '$''{'ac_cv_func_fopencookie'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char fopencookie(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_fopencookie) || defined (__stub___fopencookie) choke me #else fopencookie(); #endif ; return 0; } EOF if { (eval echo configure:9858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_fopencookie=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_fopencookie=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'fopencookie`\" = yes"; then echo "$ac_t""yes" 1>&6 have_glibc_fopencookie=yes else echo "$ac_t""no" 1>&6 fi if test "$have_glibc_fopencookie" = "yes" ; then cat > conftest.$ac_ext < int main() { cookie_io_functions_t cookie; ; return 0; } EOF if { (eval echo configure:9889: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* have_cookie_io_functions_t=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* fi rm -f conftest* if test "$have_cookie_io_functions_t" = "yes" ; then cookie_io_functions_t=cookie_io_functions_t have_fopen_cookie=yes else cat > conftest.$ac_ext < int main() { _IO_cookie_io_functions_t cookie; ; return 0; } EOF if { (eval echo configure:9914: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* have_IO_cookie_io_functions_t=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* fi rm -f conftest* if test "$have_cookie_io_functions_t" = "yes" ; then cookie_io_functions_t=_IO_cookie_io_functions_t have_fopen_cookie=yes fi fi if test "$have_fopen_cookie" = "yes" ; then cat >> confdefs.h <<\EOF #define HAVE_FOPENCOOKIE 1 EOF cat >> confdefs.h <&6 echo "configure:9947: checking for ASPELL support" >&5 # Check whether --with-aspell or --without-aspell was given. if test "${with_aspell+set}" = set; then withval="$with_aspell" if test "$withval" != "no"; then if test "$withval" = "yes"; then ASPELL_DIR=/usr/local else ASPELL_DIR=$withval fi if test "$ASPELL_DIR/include" != "/usr/include"; then if test -z "$ASPELL_DIR/include" || echo "$ASPELL_DIR/include" | grep '^/' >/dev/null ; then ai_p=$ASPELL_DIR/include else ep_dir="`echo $ASPELL_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ASPELL_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test -n "$ASPELL_DIR/lib"; then if test "$ASPELL_DIR/lib" != "/usr/lib"; then if test -z "$ASPELL_DIR/lib" || echo "$ASPELL_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ASPELL_DIR/lib else ep_dir="`echo $ASPELL_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ASPELL_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ASPELL_DIR/lib -L$ASPELL_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case aspell in c|c_r|pthread*) ;; *) LIBS="-laspell $LIBS" ;; esac if test ! -f "$ASPELL_DIR/include/aspell-c.h"; then { echo "configure: error: Could not find aspell-c.h in $ASPELL_DIR/include - please copy it manually from the aspell sources to $ASPELL_DIR/include" 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define HAVE_ASPELL 1 EOF echo "$ac_t""yes" 1>&6 EXT_SUBDIRS="$EXT_SUBDIRS aspell" if test -d "$abs_srcdir/ext/aspell"; then ext_builddir=ext/aspell ext_srcdir=$abs_srcdir/ext/aspell else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "" != "shared" && test "" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 fi else echo "$ac_t""no" 1>&6 fi if test -n "whether to enable bc style precision math functions"; then echo $ac_n "checking whether to enable bc style precision math functions""... $ac_c" 1>&6 echo "configure:10271: checking whether to enable bc style precision math functions" >&5 fi # Check whether --enable-bcmath or --disable-bcmath was given. if test "${enable_bcmath+set}" = set; then enableval="$enable_bcmath" PHP_BCMATH=$enableval else PHP_BCMATH=no fi case $PHP_BCMATH in shared,*) ext_output="yes, shared" ext_shared=yes PHP_BCMATH=`echo "$PHP_BCMATH"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_BCMATH=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_BCMATH" = "no" && PHP_BCMATH=yes fi if test -n "whether to enable bc style precision math functions"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_BCMATH" != "no"; then cat >> confdefs.h <<\EOF #define WITH_BCMATH 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS bcmath" if test -d "$abs_srcdir/ext/bcmath"; then ext_builddir=ext/bcmath ext_srcdir=$abs_srcdir/ext/bcmath else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:10646: checking for BZip2 support" >&5 fi # Check whether --with-bz2 or --without-bz2 was given. if test "${with_bz2+set}" = set; then withval="$with_bz2" PHP_BZ2=$withval else PHP_BZ2=no fi case $PHP_BZ2 in shared,*) ext_output="yes, shared" ext_shared=yes PHP_BZ2=`echo "$PHP_BZ2"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_BZ2=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_BZ2" = "no" && PHP_BZ2=yes fi if test -n "for BZip2 support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_BZ2" != "no"; then if test -r $PHP_BZ2/include/bzlib.h; then BZIP_DIR=$PHP_BZ2 else echo $ac_n "checking for BZip2 in default path""... $ac_c" 1>&6 echo "configure:10696: checking for BZip2 in default path" >&5 for i in /usr/local /usr; do if test -r $i/include/bzlib.h; then BZIP_DIR=$i echo "$ac_t""found in $i" 1>&6 fi done fi if test -z "$BZIP_DIR"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please reinstall the BZip2 distribution" 1>&2; exit 1; } fi if test "$BZIP_DIR/include" != "/usr/include"; then if test -z "$BZIP_DIR/include" || echo "$BZIP_DIR/include" | grep '^/' >/dev/null ; then ai_p=$BZIP_DIR/include else ep_dir="`echo $BZIP_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$BZIP_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST BZ2_SHARED_LIBADD" if test "$ext_shared" = "yes"; then BZ2_SHARED_LIBADD="-lbz2 $BZ2_SHARED_LIBADD" if test -n "$BZIP_DIR/lib"; then if test "$BZIP_DIR/lib" != "/usr/lib"; then if test -z "$BZIP_DIR/lib" || echo "$BZIP_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$BZIP_DIR/lib else ep_dir="`echo $BZIP_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$BZIP_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "BZ2_SHARED_LIBADD"; then BZ2_SHARED_LIBADD="-R$BZIP_DIR/lib -L$BZIP_DIR/lib $BZ2_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$BZIP_DIR/lib"; then if test "$BZIP_DIR/lib" != "/usr/lib"; then if test -z "$BZIP_DIR/lib" || echo "$BZIP_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$BZIP_DIR/lib else ep_dir="`echo $BZIP_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$BZIP_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$BZIP_DIR/lib -L$BZIP_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case bz2 in c|c_r|pthread*) ;; *) LIBS="-lbz2 $LIBS" ;; esac fi echo $ac_n "checking for BZ2_bzerror in -lbz2""... $ac_c" 1>&6 echo "configure:10840: checking for BZ2_bzerror in -lbz2" >&5 ac_lib_var=`echo bz2'_'BZ2_bzerror | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lbz2 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_BZ2 1 EOF else echo "$ac_t""no" 1>&6 { echo "configure: error: bz2 module requires libbz2 >= 1.0.0" 1>&2; exit 1; } fi EXT_SUBDIRS="$EXT_SUBDIRS bz2" if test -d "$abs_srcdir/ext/bz2"; then ext_builddir=ext/bz2 ext_srcdir=$abs_srcdir/ext/bz2 else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:11096: checking whether to enable calendar conversion support" >&5 fi # Check whether --enable-calendar or --disable-calendar was given. if test "${enable_calendar+set}" = set; then enableval="$enable_calendar" PHP_CALENDAR=$enableval else PHP_CALENDAR=no fi case $PHP_CALENDAR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_CALENDAR=`echo "$PHP_CALENDAR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_CALENDAR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_CALENDAR" = "no" && PHP_CALENDAR=yes fi if test -n "whether to enable calendar conversion support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_CALENDAR" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_CALENDAR 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS calendar" if test -d "$abs_srcdir/ext/calendar"; then ext_builddir=ext/calendar ext_srcdir=$abs_srcdir/ext/calendar else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:11358: checking for CCVS support" >&5 fi # Check whether --with-ccvs or --without-ccvs was given. if test "${with_ccvs+set}" = set; then withval="$with_ccvs" PHP_CCVS=$withval else PHP_CCVS=no fi case $PHP_CCVS in shared,*) ext_output="yes, shared" ext_shared=yes PHP_CCVS=`echo "$PHP_CCVS"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_CCVS=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_CCVS" = "no" && PHP_CCVS=yes fi if test -n "for CCVS support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_CCVS" != "no"; then if test -r $PHP_CCVS/include/cv_api.h; then CCVS_DIR=$PHP_CCVS else for i in /usr /usr/local /usr/local/ccvs ; do if test -r $i/include/cv_api.h; then CCVS_DIR=$i fi done fi if test -z "$CCVS_DIR"; then { echo "configure: error: not found. Please check your CCVS installation; cv_api.h should be in /include/" 1>&2; exit 1; } fi if test "$CCVS_DIR/include" != "/usr/include"; then if test -z "$CCVS_DIR/include" || echo "$CCVS_DIR/include" | grep '^/' >/dev/null ; then ai_p=$CCVS_DIR/include else ep_dir="`echo $CCVS_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CCVS_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then CCVS_SHARED_LIBADD="-lccvs $CCVS_SHARED_LIBADD" if test -n "$CCVS_DIR/lib"; then if test "$CCVS_DIR/lib" != "/usr/lib"; then if test -z "$CCVS_DIR/lib" || echo "$CCVS_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$CCVS_DIR/lib else ep_dir="`echo $CCVS_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CCVS_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "CCVS_SHARED_LIBADD"; then CCVS_SHARED_LIBADD="-R$CCVS_DIR/lib -L$CCVS_DIR/lib $CCVS_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$CCVS_DIR/lib"; then if test "$CCVS_DIR/lib" != "/usr/lib"; then if test -z "$CCVS_DIR/lib" || echo "$CCVS_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$CCVS_DIR/lib else ep_dir="`echo $CCVS_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CCVS_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$CCVS_DIR/lib -L$CCVS_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ccvs in c|c_r|pthread*) ;; *) LIBS="-lccvs $LIBS" ;; esac fi EXT_SUBDIRS="$EXT_SUBDIRS ccvs" if test -d "$abs_srcdir/ext/ccvs"; then ext_builddir=ext/ccvs ext_srcdir=$abs_srcdir/ext/ccvs else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:11755: checking for cpdflib support" >&5 # Check whether --with-cpdflib or --without-cpdflib was given. if test "${with_cpdflib+set}" = set; then withval="$with_cpdflib" case $withval in no) echo "$ac_t""no" 1>&6 ;; yes) echo "$ac_t""yes" 1>&6 EXT_SUBDIRS="$EXT_SUBDIRS cpdf" if test -d "$abs_srcdir/ext/cpdf"; then ext_builddir=ext/cpdf ext_srcdir=$abs_srcdir/ext/cpdf else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "" != "shared" && test "" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:11971: checking for cpdf_open in -lcpdf" >&5 ac_lib_var=`echo cpdf'_'cpdf_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lcpdf $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_CPDFLIB 1 EOF else echo "$ac_t""no" 1>&6 { echo "configure: error: Cpdf module requires cpdflib >= 2." 1>&2; exit 1; } fi case cpdf in c|c_r|pthread*) ;; *) LIBS="-lcpdf $LIBS" ;; esac case tiff in c|c_r|pthread*) ;; *) LIBS="-ltiff $LIBS" ;; esac case jpeg in c|c_r|pthread*) ;; *) LIBS="-ljpeg $LIBS" ;; esac ;; *) test -f $withval/include/cpdflib.h && CPDFLIB_INCLUDE=$withval/include if test -n "$CPDFLIB_INCLUDE" ; then echo "$ac_t""yes" 1>&6 EXT_SUBDIRS="$EXT_SUBDIRS cpdf" if test -d "$abs_srcdir/ext/cpdf"; then ext_builddir=ext/cpdf ext_srcdir=$abs_srcdir/ext/cpdf else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "" != "shared" && test "" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:12264: checking for libjpeg (needed by cpdflib 2.x)" >&5 # Check whether --with-jpeg-dir or --without-jpeg-dir was given. if test "${with_jpeg_dir+set}" = set; then withval="$with_jpeg_dir" echo "$ac_t""yes" 1>&6 if test -z $withval; then withval=/usr/local fi LIBS="$LIBS -L$withval/lib" echo $ac_n "checking for jpeg_read_header in -ljpeg""... $ac_c" 1>&6 echo "configure:12275: checking for jpeg_read_header in -ljpeg" >&5 ac_lib_var=`echo jpeg'_'jpeg_read_header | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ljpeg $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo jpeg | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 echo "$ac_t""no" 1>&6 fi if test -n "$withval/lib"; then if test "$withval/lib" != "/usr/lib"; then if test -z "$withval/lib" || echo "$withval/lib" | grep '^/' >/dev/null ; then ai_p=$withval/lib else ep_dir="`echo $withval/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$withval/lib -L$withval/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case jpeg in c|c_r|pthread*) ;; *) LIBS="-ljpeg $LIBS" ;; esac else echo "$ac_t""no" 1>&6 echo "configure: warning: If configure fails try --with-jpeg-dir=" 1>&2 fi echo $ac_n "checking for libtiff (needed by cpdflib 2.x)""... $ac_c" 1>&6 echo "configure:12383: checking for libtiff (needed by cpdflib 2.x)" >&5 # Check whether --with-tiff-dir or --without-tiff-dir was given. if test "${with_tiff_dir+set}" = set; then withval="$with_tiff_dir" echo "$ac_t""yes" 1>&6 if test -z $withval; then withval=/usr/local fi LIBS="$LIBS -L$withval/lib" echo $ac_n "checking for TIFFOpen in -ltiff""... $ac_c" 1>&6 echo "configure:12394: checking for TIFFOpen in -ltiff" >&5 ac_lib_var=`echo tiff'_'TIFFOpen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ltiff $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo tiff | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 echo "$ac_t""no" 1>&6 fi if test -n "$withval/lib"; then if test "$withval/lib" != "/usr/lib"; then if test -z "$withval/lib" || echo "$withval/lib" | grep '^/' >/dev/null ; then ai_p=$withval/lib else ep_dir="`echo $withval/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$withval/lib -L$withval/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case tiff in c|c_r|pthread*) ;; *) LIBS="-ltiff $LIBS" ;; esac else echo "$ac_t""no" 1>&6 echo "configure: warning: If configure fails try --with-tiff-dir=" 1>&2 fi withval=$old_withval LIBS="$LIBS -L$withval/lib" echo $ac_n "checking for cpdf_open in -lcpdf""... $ac_c" 1>&6 echo "configure:12504: checking for cpdf_open in -lcpdf" >&5 ac_lib_var=`echo cpdf'_'cpdf_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lcpdf $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_CPDFLIB 1 EOF else echo "$ac_t""no" 1>&6 { echo "configure: error: Cpdflib module requires cpdflib >= 2." 1>&2; exit 1; } fi LIBS=$old_LIBS if test -n "$withval/lib"; then if test "$withval/lib" != "/usr/lib"; then if test -z "$withval/lib" || echo "$withval/lib" | grep '^/' >/dev/null ; then ai_p=$withval/lib else ep_dir="`echo $withval/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$withval/lib -L$withval/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case cpdf in c|c_r|pthread*) ;; *) LIBS="-lcpdf $LIBS" ;; esac if test "$CPDFLIB_INCLUDE" != "/usr/include"; then if test -z "$CPDFLIB_INCLUDE" || echo "$CPDFLIB_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$CPDFLIB_INCLUDE else ep_dir="`echo $CPDFLIB_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CPDFLIB_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi else echo "$ac_t""no" 1>&6 fi ;; esac else echo "$ac_t""no" 1>&6 fi if test -n "for CRACKlib support"; then echo $ac_n "checking for CRACKlib support""... $ac_c" 1>&6 echo "configure:12647: checking for CRACKlib support" >&5 fi # Check whether --with-crack or --without-crack was given. if test "${with_crack+set}" = set; then withval="$with_crack" PHP_CRACK=$withval else PHP_CRACK=no fi case $PHP_CRACK in shared,*) ext_output="yes, shared" ext_shared=yes PHP_CRACK=`echo "$PHP_CRACK"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_CRACK=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_CRACK" = "no" && PHP_CRACK=yes fi if test -n "for CRACKlib support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_CRACK" != "no"; then for i in /usr/local/lib /usr/lib $PHP_CRACK/lib $PHP_CRACK/cracklib; do test -f $i/libcrack.$SHLIB_SUFFIX_NAME -o -f $i/libcrack.a && CRACK_LIBDIR=$i done for i in /usr/local/include /usr/include $PHP_CRACK/include $PHP_CRACK/cracklib; do test -f $i/packer.h && CRACK_INCLUDEDIR=$i done if test -z "$CRACK_LIBDIR"; then { echo "configure: error: Cannot find the cracklib library file" 1>&2; exit 1; } fi if test -z "$CRACK_INCLUDEDIR"; then { echo "configure: error: Cannot find a cracklib header file" 1>&2; exit 1; } fi if test "$CRACK_INCLUDEDIR" != "/usr/include"; then if test -z "$CRACK_INCLUDEDIR" || echo "$CRACK_INCLUDEDIR" | grep '^/' >/dev/null ; then ai_p=$CRACK_INCLUDEDIR else ep_dir="`echo $CRACK_INCLUDEDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CRACK_INCLUDEDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then CRACK_SHARED_LIBADD="-lcrack $CRACK_SHARED_LIBADD" if test -n "$CRACK_LIBDIR"; then if test "$CRACK_LIBDIR" != "/usr/lib"; then if test -z "$CRACK_LIBDIR" || echo "$CRACK_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$CRACK_LIBDIR else ep_dir="`echo $CRACK_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CRACK_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "CRACK_SHARED_LIBADD"; then CRACK_SHARED_LIBADD="-R$CRACK_LIBDIR -L$CRACK_LIBDIR $CRACK_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$CRACK_LIBDIR"; then if test "$CRACK_LIBDIR" != "/usr/lib"; then if test -z "$CRACK_LIBDIR" || echo "$CRACK_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$CRACK_LIBDIR else ep_dir="`echo $CRACK_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CRACK_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$CRACK_LIBDIR -L$CRACK_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case crack in c|c_r|pthread*) ;; *) LIBS="-lcrack $LIBS" ;; esac fi EXT_SUBDIRS="$EXT_SUBDIRS crack" if test -d "$abs_srcdir/ext/crack"; then ext_builddir=ext/crack ext_srcdir=$abs_srcdir/ext/crack else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_CRACK 1 EOF fi if test -n "whether to enable ctype functions"; then echo $ac_n "checking whether to enable ctype functions""... $ac_c" 1>&6 echo "configure:13056: checking whether to enable ctype functions" >&5 fi # Check whether --enable-ctype or --disable-ctype was given. if test "${enable_ctype+set}" = set; then enableval="$enable_ctype" PHP_CTYPE=$enableval else PHP_CTYPE=yes fi case $PHP_CTYPE in shared,*) ext_output="yes, shared" ext_shared=yes PHP_CTYPE=`echo "$PHP_CTYPE"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_CTYPE=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_CTYPE" = "no" && PHP_CTYPE=yes fi if test -n "whether to enable ctype functions"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_CTYPE" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_CTYPE 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS ctype" if test -d "$abs_srcdir/ext/ctype"; then ext_builddir=ext/ctype ext_srcdir=$abs_srcdir/ext/ctype else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:13318: checking for CURL support" >&5 fi # Check whether --with-curl or --without-curl was given. if test "${with_curl+set}" = set; then withval="$with_curl" PHP_CURL=$withval else PHP_CURL=no fi case $PHP_CURL in shared,*) ext_output="yes, shared" ext_shared=yes PHP_CURL=`echo "$PHP_CURL"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_CURL=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_CURL" = "no" && PHP_CURL=yes fi if test -n "for CURL support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_CURL" != "no"; then if test -r $PHP_CURL/include/curl/easy.h; then CURL_DIR=$PHP_CURL else echo $ac_n "checking for CURL in default path""... $ac_c" 1>&6 echo "configure:13368: checking for CURL in default path" >&5 for i in /usr/local /usr; do if test -r $i/include/curl/easy.h; then CURL_DIR=$i echo "$ac_t""found in $i" 1>&6 fi done fi if test -z "$CURL_DIR"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please reinstall the libcurl distribution - easy.h should be in /include/curl/" 1>&2; exit 1; } fi CURL_CONFIG="curl-config" echo $ac_n "checking for cURL 7.9 or greater""... $ac_c" 1>&6 echo "configure:13385: checking for cURL 7.9 or greater" >&5 if ${CURL_DIR}/bin/curl-config --libs print > /dev/null 2>&1; then CURL_CONFIG=${CURL_DIR}/bin/curl-config else if ${CURL_DIR}/curl-config --libs print > /dev/null 2>&1; then CURL_CONFIG=${CURL_DIR}/curl-config fi fi curl_version_full=`$CURL_CONFIG --version` curl_version=`echo ${curl_version_full} | sed -e 's/libcurl //' | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` if test "$curl_version" -ge 7009000; then echo "$ac_t""$curl_version_full" 1>&6 CURL_LIBS=`$CURL_CONFIG --libs` else { echo "configure: error: cURL version 7.9 or later is required to compile php with cURL support" 1>&2; exit 1; } fi if test "$CURL_DIR/include" != "/usr/include"; then if test -z "$CURL_DIR/include" || echo "$CURL_DIR/include" | grep '^/' >/dev/null ; then ai_p=$CURL_DIR/include else ep_dir="`echo $CURL_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CURL_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi for ac_i in $CURL_LIBS; do case $ac_i in -l*) ac_ii=`echo $ac_i|cut -c 3-` case $ac_ii in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then CURL_SHARED_LIBADD="$CURL_SHARED_LIBADD -l$ac_ii" else case $ac_ii in c|c_r|pthread*) ;; *) LIBS="$LIBS -l$ac_ii" ;; esac fi ;; esac ;; -L*) ac_ii=`echo $ac_i|cut -c 3-` if test "$ac_ii" != "/usr/lib"; then if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then ai_p=$ac_ii else ep_dir="`echo $ac_ii|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ac_ii\"`" fi if test "$ext_shared" = "yes" && test -n "CURL_SHARED_LIBADD"; then CURL_SHARED_LIBADD="-R$ac_ii -L$ac_ii $CURL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi ;; esac done if test "$ext_shared" = "yes"; then CURL_SHARED_LIBADD="-lcurl $CURL_SHARED_LIBADD" if test -n "$CURL_DIR/lib"; then if test "$CURL_DIR/lib" != "/usr/lib"; then if test -z "$CURL_DIR/lib" || echo "$CURL_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$CURL_DIR/lib else ep_dir="`echo $CURL_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CURL_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "CURL_SHARED_LIBADD"; then CURL_SHARED_LIBADD="-R$CURL_DIR/lib -L$CURL_DIR/lib $CURL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$CURL_DIR/lib"; then if test "$CURL_DIR/lib" != "/usr/lib"; then if test -z "$CURL_DIR/lib" || echo "$CURL_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$CURL_DIR/lib else ep_dir="`echo $CURL_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CURL_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$CURL_DIR/lib -L$CURL_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case curl in c|c_r|pthread*) ;; *) LIBS="-lcurl $LIBS" ;; esac fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" $CURL_LIBS -L$CURL_DIR/lib $LDFLAGS" echo $ac_n "checking for curl_easy_perform in -lcurl""... $ac_c" 1>&6 echo "configure:13608: checking for curl_easy_perform in -lcurl" >&5 ac_lib_var=`echo curl'_'curl_easy_perform | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lcurl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_CURL 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: There is something wrong. Please check config.log for more information." 1>&2; exit 1; } fi EXT_SUBDIRS="$EXT_SUBDIRS curl" if test -d "$abs_srcdir/ext/curl"; then ext_builddir=ext/curl ext_srcdir=$abs_srcdir/ext/curl else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:13874: checking for CyberCash support" >&5 # Check whether --with-cybercash or --without-cybercash was given. if test "${with_cybercash+set}" = set; then withval="$with_cybercash" if test "$withval" != "no"; then test -f $withval/mckcrypt.h && MCK_DIR=$withval test -f $withval/c-api/mckcrypt.h && MCK_DIR=$withval/c-api if test -n "$MCK_DIR"; then echo "$ac_t""yes" 1>&6 EXT_SUBDIRS="$EXT_SUBDIRS cybercash" if test -d "$abs_srcdir/ext/cybercash"; then ext_builddir=ext/cybercash ext_srcdir=$abs_srcdir/ext/cybercash else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "" != "shared" && test "" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:14092: checking for base64_encode in -lmckcrypto" >&5 ac_lib_var=`echo mckcrypto'_'base64_encode | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lmckcrypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_MCK 1 EOF else echo "$ac_t""no" 1>&6 { echo "configure: error: Please reinstall the CyberCash MCK - cannot find mckcrypto lib" 1>&2; exit 1; } fi LIBS=$old_LIBS if test -n "$MCK_DIR/lib"; then if test "$MCK_DIR/lib" != "/usr/lib"; then if test -z "$MCK_DIR/lib" || echo "$MCK_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MCK_DIR/lib else ep_dir="`echo $MCK_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MCK_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$MCK_DIR/lib -L$MCK_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case mckcrypto in c|c_r|pthread*) ;; *) LIBS="-lmckcrypto $LIBS" ;; esac if test "$MCK_DIR" != "/usr/include"; then if test -z "$MCK_DIR" || echo "$MCK_DIR" | grep '^/' >/dev/null ; then ai_p=$MCK_DIR else ep_dir="`echo $MCK_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MCK_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi else echo "$ac_t""no" 1>&6 fi fi else echo "$ac_t""no" 1>&6 fi if test -n "for cybermut support"; then echo $ac_n "checking for cybermut support""... $ac_c" 1>&6 echo "configure:14235: checking for cybermut support" >&5 fi # Check whether --with-cybermut or --without-cybermut was given. if test "${with_cybermut+set}" = set; then withval="$with_cybermut" PHP_CYBERMUT=$withval else PHP_CYBERMUT=no fi case $PHP_CYBERMUT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_CYBERMUT=`echo "$PHP_CYBERMUT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_CYBERMUT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_CYBERMUT" = "no" && PHP_CYBERMUT=yes fi if test -n "for cybermut support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_CYBERMUT" != "no"; then for i in /usr/local /usr $PHP_CYBERMUT; do if test -r $i/cm-mac.h; then CYBERMUT_INC_DIR=$i elif test -r $i/include/cm-mac.h; then CYBERMUT_INC_DIR=$i/include fi if test -r $i/libcm-mac.a; then CYBERMUT_LIB_DIR=$i elif test -r $i/lib/libcm-mac.a; then CYBERMUT_LIB_DIR=$i/lib fi done if test -z "$CYBERMUT_INC_DIR"; then { echo "configure: error: Could not find cm-mac.h Please make sure you have the CyberMut SDK installed. Use ./configure --with-cybermut= if necessary" 1>&2; exit 1; } fi if test -z "$CYBERMUT_LIB_DIR"; then { echo "configure: error: Could not find libcm-mac.a Please make sure you have the CyberMut SDK installed. Use ./configure --with-cybermut= if necessary" 1>&2; exit 1; } fi echo "$ac_t""found in $CYBERMUT_LIB_DIR" 1>&6 echo "$ac_t""linking libcm-mac.a with libcybermut.a" 1>&6 ln -sf $CYBERMUT_LIB_DIR/libcm-mac.a $CYBERMUT_LIB_DIR/libcybermut.a if test "$CYBERMUT_INC_DIR" != "/usr/include"; then if test -z "$CYBERMUT_INC_DIR" || echo "$CYBERMUT_INC_DIR" | grep '^/' >/dev/null ; then ai_p=$CYBERMUT_INC_DIR else ep_dir="`echo $CYBERMUT_INC_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CYBERMUT_INC_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST CYBERMUT_SHARED_LIBADD" if test "$ext_shared" = "yes"; then CYBERMUT_SHARED_LIBADD="-lcybermut $CYBERMUT_SHARED_LIBADD" if test -n "$CYBERMUT_LIB_DIR"; then if test "$CYBERMUT_LIB_DIR" != "/usr/lib"; then if test -z "$CYBERMUT_LIB_DIR" || echo "$CYBERMUT_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$CYBERMUT_LIB_DIR else ep_dir="`echo $CYBERMUT_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CYBERMUT_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n "CYBERMUT_SHARED_LIBADD"; then CYBERMUT_SHARED_LIBADD="-R$CYBERMUT_LIB_DIR -L$CYBERMUT_LIB_DIR $CYBERMUT_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$CYBERMUT_LIB_DIR"; then if test "$CYBERMUT_LIB_DIR" != "/usr/lib"; then if test -z "$CYBERMUT_LIB_DIR" || echo "$CYBERMUT_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$CYBERMUT_LIB_DIR else ep_dir="`echo $CYBERMUT_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$CYBERMUT_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$CYBERMUT_LIB_DIR -L$CYBERMUT_LIB_DIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case cybermut in c|c_r|pthread*) ;; *) LIBS="-lcybermut $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_CYBERMUT 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS cybermut" if test -d "$abs_srcdir/ext/cybermut"; then ext_builddir=ext/cybermut ext_srcdir=$abs_srcdir/ext/cybermut else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:14659: checking for cyrus imap support" >&5 fi # Check whether --with-cyrus or --without-cyrus was given. if test "${with_cyrus+set}" = set; then withval="$with_cyrus" PHP_CYRUS=$withval else PHP_CYRUS=no fi case $PHP_CYRUS in shared,*) ext_output="yes, shared" ext_shared=yes PHP_CYRUS=`echo "$PHP_CYRUS"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_CYRUS=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_CYRUS" = "no" && PHP_CYRUS=yes fi if test -n "for cyrus imap support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_CYRUS" != "no"; then found_cyrus=no found_sasl=no found_openssl=no for i in /usr /usr/local $PHP_CYRUS; do if test -r $i/include/cyrus/imclient.h && test "$found_cyrus" = "no"; then if test "$i/include" != "/usr/include"; then if test -z "$i/include" || echo "$i/include" | grep '^/' >/dev/null ; then ai_p=$i/include else ep_dir="`echo $i/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST CYRUS_SHARED_LIBADD" if test "$ext_shared" = "yes"; then CYRUS_SHARED_LIBADD="-lcyrus $CYRUS_SHARED_LIBADD" if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n "CYRUS_SHARED_LIBADD"; then CYRUS_SHARED_LIBADD="-R$i/lib -L$i/lib $CYRUS_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$i/lib -L$i/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case cyrus in c|c_r|pthread*) ;; *) LIBS="-lcyrus $LIBS" ;; esac fi found_cyrus=yes fi if test -r $i/include/sasl.h && test "$found_sasl" = "no"; then if test "$i/include" != "/usr/include"; then if test -z "$i/include" || echo "$i/include" | grep '^/' >/dev/null ; then ai_p=$i/include else ep_dir="`echo $i/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST SASL_SHARED_LIBADD" if test "$ext_shared" = "yes"; then SASL_SHARED_LIBADD="-lsasl $SASL_SHARED_LIBADD" if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n "SASL_SHARED_LIBADD"; then SASL_SHARED_LIBADD="-R$i/lib -L$i/lib $SASL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$i/lib -L$i/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sasl in c|c_r|pthread*) ;; *) LIBS="-lsasl $LIBS" ;; esac fi found_sasl=yes fi if test -r $i/include/openssl/ssl.h && test "$found_openssl" = "no" && test "$PHP_OPENSSL" = "no"; then PHP_VAR_SUBST="$PHP_VAR_SUBST OPENSSL_SHARED_LIBADD" PHP_VAR_SUBST="$PHP_VAR_SUBST CRYPTO_SHARED_LIBADD" if test "$ext_shared" = "yes"; then OPENSSL_SHARED_LIBADD="-lssl $OPENSSL_SHARED_LIBADD" if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n "OPENSSL_SHARED_LIBADD"; then OPENSSL_SHARED_LIBADD="-R$i/lib -L$i/lib $OPENSSL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$i/lib -L$i/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ssl in c|c_r|pthread*) ;; *) LIBS="-lssl $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then CRYPTO_SHARED_LIBADD="-lcrypto $CRYPTO_SHARED_LIBADD" if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n "CRYPTO_SHARED_LIBADD"; then CRYPTO_SHARED_LIBADD="-R$i/lib -L$i/lib $CRYPTO_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$i/lib -L$i/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case crypto in c|c_r|pthread*) ;; *) LIBS="-lcrypto $LIBS" ;; esac fi found_openssl=yes fi done if test "$found_cyrus" = "no"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please Re-install the cyrus distribution" 1>&2; exit 1; } fi if test "$found_sasl" = "no"; then echo "$ac_t""sasl not found" 1>&6 { echo "configure: error: Please Re-install the cyrus distribution" 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define HAVE_CYRUS 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS cyrus" if test -d "$abs_srcdir/ext/cyrus"; then ext_builddir=ext/cyrus ext_srcdir=$abs_srcdir/ext/cyrus else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:15402: checking for xDBM support" >&5 fi # Check whether --with-db or --without-db was given. if test "${with_db+set}" = set; then withval="$with_db" PHP_DB=$withval else PHP_DB=no fi case $PHP_DB in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DB=`echo "$PHP_DB"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DB=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DB" = "no" && PHP_DB=yes fi if test -n "for xDBM support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_DB" != "no"; then echo $ac_n "checking for gdbm_open in -lgdbm""... $ac_c" 1>&6 echo "configure:15451: checking for gdbm_open in -lgdbm" >&5 ac_lib_var=`echo gdbm'_'gdbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgdbm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define GDBM 1 EOF DBM_TYPE=gdbm; DBM_LIB=-lgdbm else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dbm_open in -lc""... $ac_c" 1>&6 echo "configure:15492: checking for dbm_open in -lc" >&5 ac_lib_var=`echo c'_'dbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lc $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define NDBM 1 EOF DBM_TYPE=ndbm; DBM_LIB= else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6 echo "configure:15533: checking for dbm_open in -ldbm" >&5 ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldbm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define NDBM 1 EOF DBM_TYPE=ndbm; DBM_LIB=-ldbm else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dbm_open in -ldb""... $ac_c" 1>&6 echo "configure:15574: checking for dbm_open in -ldb" >&5 ac_lib_var=`echo db'_'dbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldb $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define NDBM 1 EOF DBM_TYPE=ndbm; DBM_LIB=-ldb else echo "$ac_t""no" 1>&6 DBM_TYPE="" fi fi fi fi echo $ac_n "checking preferred dbm library""... $ac_c" 1>&6 echo "configure:15627: checking preferred dbm library" >&5 if test "a$DBM_TYPE" = a; then echo "$ac_t""none found" 1>&6 echo "configure: warning: No dbm library found - using built-in flatfile support" 1>&2 else echo "$ac_t""$DBM_TYPE chosen" 1>&6 fi PHP_VAR_SUBST="$PHP_VAR_SUBST DBM_LIB" PHP_VAR_SUBST="$PHP_VAR_SUBST DBM_TYPE" if test "$DBM_LIB" = "-lgdbm"; then ac_safe=`echo "gdbm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for gdbm.h""... $ac_c" 1>&6 echo "configure:15645: checking for gdbm.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:15655: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 GDBM_INCLUDE="" else echo "$ac_t""no" 1>&6 echo "$ac_t"""Try /usr/local/include/gdbm.h"" 1>&6; ac_safe=`echo "/usr/local/include/gdbm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for /usr/local/include/gdbm.h""... $ac_c" 1>&6 echo "configure:15678: checking for /usr/local/include/gdbm.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:15688: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 GDBM_INCLUDE=-I/usr/local/include else echo "$ac_t""no" 1>&6 echo "$ac_t"""Try /opt/local/include/gdbm.h"" 1>&6; ac_safe=`echo "/opt/local/include/gdbm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for /opt/local/include/gdbm.h""... $ac_c" 1>&6 echo "configure:15711: checking for /opt/local/include/gdbm.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:15721: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 GDBM_INCLUDE=-I/opt/local/include else echo "$ac_t""no" 1>&6 echo "$ac_t"""Try /usr/pkg/include/gdbm.h"" 1>&6; ac_safe=`echo "/usr/pkg/include/gdbm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for /usr/pkg/include/gdbm.h""... $ac_c" 1>&6 echo "configure:15744: checking for /usr/pkg/include/gdbm.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:15754: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 GDBM_INCLUDE="" else echo "$ac_t""no" 1>&6 echo "$ac_t"""Giving up - You need to install gdbm.h somewhere"" 1>&6; exit fi fi fi fi fi if test -n "$DBM_LIB"; then INCLUDES="$INCLUDES $GDBM_INCLUDE" EXTRA_LIBS="$EXTRA_LIBS $DBM_LIB" fi EXT_SUBDIRS="$EXT_SUBDIRS db" if test -d "$abs_srcdir/ext/db"; then ext_builddir=ext/db ext_srcdir=$abs_srcdir/ext/db else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "" != "shared" && test "" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:16018: checking whether to enable DBA" >&5 fi # Check whether --enable-dba or --disable-dba was given. if test "${enable_dba+set}" = set; then enableval="$enable_dba" PHP_DBA=$enableval else PHP_DBA=no fi case $PHP_DBA in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DBA=`echo "$PHP_DBA"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DBA=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DBA" = "no" && PHP_DBA=yes fi if test -n "whether to enable DBA"; then echo "$ac_t""$ext_output" 1>&6 fi # Check whether --with-gdbm or --without-gdbm was given. if test "${with_gdbm+set}" = set; then withval="$with_gdbm" if test "$withval" != "no"; then for i in /usr/local /usr $withval; do if test -f "$i/include/gdbm.h"; then THIS_PREFIX="$i" fi done unset ac_cv_lib_gdbm_gdbm_open old_LDFLAGS=$LDFLAGS LDFLAGS="-L$THIS_PREFIX/lib $LDFLAGS" echo $ac_n "checking for gdbm_open in -lgdbm""... $ac_c" 1>&6 echo "configure:16080: checking for gdbm_open in -lgdbm" >&5 ac_lib_var=`echo gdbm'_'gdbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgdbm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define DBA_GDBM 1 EOF THIS_LIBS=gdbm else echo "$ac_t""no" 1>&6 fi LDFLAGS=$old_LDFLAGS if test -n "$THIS_PREFIX" && test "$THIS_PREFIX" != "/usr"; then THIS_INCLUDE=$THIS_PREFIX/include THIS_LFLAGS=$THIS_PREFIX/lib fi THIS_RESULT="yes" if test "$THIS_PREFIX" != "/usr" -a "$THIS_INCLUDE" = ""; then { echo "configure: error: cannot find necessary header file(s)" 1>&2; exit 1; } fi if test "$THIS_LIBS" = "" ; then { echo "configure: error: cannot find necessary library" 1>&2; exit 1; } fi if test "$THIS_INCLUDE" != "/usr/include"; then if test -z "$THIS_INCLUDE" || echo "$THIS_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$THIS_INCLUDE else ep_dir="`echo $THIS_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then DBA_SHARED_LIBADD="-l$THIS_LIBS $DBA_SHARED_LIBADD" if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n "DBA_SHARED_LIBADD"; then DBA_SHARED_LIBADD="-R$THIS_LFLAGS -L$THIS_LFLAGS $DBA_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$THIS_LFLAGS -L$THIS_LFLAGS $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $THIS_LIBS in c|c_r|pthread*) ;; *) LIBS="-l$THIS_LIBS $LIBS" ;; esac fi unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX fi fi echo $ac_n "checking for GDBM support""... $ac_c" 1>&6 echo "configure:16274: checking for GDBM support" >&5 if test "$THIS_RESULT" = "yes"; then HAVE_DBA=1 echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi unset THIS_RESULT # Check whether --with-ndbm or --without-ndbm was given. if test "${with_ndbm+set}" = set; then withval="$with_ndbm" if test "$withval" != "no"; then for i in /usr/local /usr $withval; do if test -f "$i/include/db1/ndbm.h" ; then THIS_PREFIX=$i NDBM_EXTRA=db1/ndbm.h elif test -f "$i/include/ndbm.h" ; then THIS_PREFIX=$i NDBM_EXTRA=ndbm.h fi done if test "$NDBM_EXTRA" != ""; then cat >> confdefs.h <&6 echo "configure:16313: checking for dbm_open in -l$LIB" >&5 ac_lib_var=`echo $LIB'_'dbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define DBA_NDBM 1 EOF THIS_LIBS=$LIB else echo "$ac_t""no" 1>&6 fi LDFLAGS=$old_LDFLAGS done if test -n "$THIS_PREFIX" && test "$THIS_PREFIX" != "/usr"; then THIS_INCLUDE=$THIS_PREFIX/include THIS_LFLAGS=$THIS_PREFIX/lib fi THIS_RESULT="yes" if test "$THIS_PREFIX" != "/usr" -a "$THIS_INCLUDE" = ""; then { echo "configure: error: cannot find necessary header file(s)" 1>&2; exit 1; } fi if test "$THIS_LIBS" = "" ; then { echo "configure: error: cannot find necessary library" 1>&2; exit 1; } fi if test "$THIS_INCLUDE" != "/usr/include"; then if test -z "$THIS_INCLUDE" || echo "$THIS_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$THIS_INCLUDE else ep_dir="`echo $THIS_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then DBA_SHARED_LIBADD="-l$THIS_LIBS $DBA_SHARED_LIBADD" if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n "DBA_SHARED_LIBADD"; then DBA_SHARED_LIBADD="-R$THIS_LFLAGS -L$THIS_LFLAGS $DBA_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$THIS_LFLAGS -L$THIS_LFLAGS $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $THIS_LIBS in c|c_r|pthread*) ;; *) LIBS="-l$THIS_LIBS $LIBS" ;; esac fi unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX fi fi echo $ac_n "checking for NDBM support""... $ac_c" 1>&6 echo "configure:16508: checking for NDBM support" >&5 if test "$THIS_RESULT" = "yes"; then HAVE_DBA=1 echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi unset THIS_RESULT # Check whether --with-db2 or --without-db2 was given. if test "${with_db2+set}" = set; then withval="$with_db2" if test "$withval" != "no"; then for i in /usr/local /usr /usr/BerkeleyDB $withval/BerkeleyDB $withval; do if test -f "$i/db2/db.h"; then THIS_PREFIX=$i DB2_EXTRA=db2 elif test -f "$i/include/db2/db.h"; then THIS_PREFIX=$i DB2_EXTRA=db2/db.h elif test -f "$i/include/db/db2.h"; then THIS_PREFIX=$i DB2_EXTRA=db/db2.h elif test -f "$i/include/db2.h"; then THIS_PREFIX=$i DB2_EXTRA=db2.h elif test -f "$i/include/db.h" ; then THIS_PREFIX=$i DB2_EXTRA=db.h fi done if test "$DB2_EXTRA" = "db2" ; then DBA_INCLUDE="$DBA_INCLUDE -I$THIS_PREFIX/db2" DB2_EXTRA=db.h fi if test -n "$DB2_EXTRA"; then cat >> confdefs.h <&6 echo "configure:16561: checking for db_appinit in -l$LIB" >&5 ac_lib_var=`echo $LIB'_'db_appinit | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define DBA_DB2 1 EOF THIS_LIBS=$LIB else echo "$ac_t""no" 1>&6 fi LDFLAGS=$old_LDFLAGS done if test -n "$THIS_PREFIX" && test "$THIS_PREFIX" != "/usr"; then THIS_INCLUDE=$THIS_PREFIX/include THIS_LFLAGS=$THIS_PREFIX/lib fi THIS_RESULT="yes" if test "$THIS_PREFIX" != "/usr" -a "$THIS_INCLUDE" = ""; then { echo "configure: error: cannot find necessary header file(s)" 1>&2; exit 1; } fi if test "$THIS_LIBS" = "" ; then { echo "configure: error: cannot find necessary library" 1>&2; exit 1; } fi if test "$THIS_INCLUDE" != "/usr/include"; then if test -z "$THIS_INCLUDE" || echo "$THIS_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$THIS_INCLUDE else ep_dir="`echo $THIS_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then DBA_SHARED_LIBADD="-l$THIS_LIBS $DBA_SHARED_LIBADD" if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n "DBA_SHARED_LIBADD"; then DBA_SHARED_LIBADD="-R$THIS_LFLAGS -L$THIS_LFLAGS $DBA_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$THIS_LFLAGS -L$THIS_LFLAGS $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $THIS_LIBS in c|c_r|pthread*) ;; *) LIBS="-l$THIS_LIBS $LIBS" ;; esac fi unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX fi fi echo $ac_n "checking for Berkeley DB2 support""... $ac_c" 1>&6 echo "configure:16756: checking for Berkeley DB2 support" >&5 if test "$THIS_RESULT" = "yes"; then HAVE_DBA=1 echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi unset THIS_RESULT # Check whether --with-db3 or --without-db3 was given. if test "${with_db3+set}" = set; then withval="$with_db3" if test "$withval" != "no"; then for i in /usr/local /usr /usr/local/BerkeleyDB.3.0 $withval; do if test -f "$i/include/db.h" ; then THIS_PREFIX=$i DB3_EXTRA=db.h fi done if test -n "$DB3_EXTRA"; then cat >> confdefs.h <&6 echo "configure:16792: checking for db_create in -l$LIB" >&5 ac_lib_var=`echo $LIB'_'db_create | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define DBA_DB3 1 EOF THIS_LIBS=$LIB else echo "$ac_t""no" 1>&6 fi LDFLAGS=$old_LDFLAGS done if test -n "$THIS_PREFIX" && test "$THIS_PREFIX" != "/usr"; then THIS_INCLUDE=$THIS_PREFIX/include THIS_LFLAGS=$THIS_PREFIX/lib fi THIS_RESULT="yes" if test "$THIS_PREFIX" != "/usr" -a "$THIS_INCLUDE" = ""; then { echo "configure: error: cannot find necessary header file(s)" 1>&2; exit 1; } fi if test "$THIS_LIBS" = "" ; then { echo "configure: error: cannot find necessary library" 1>&2; exit 1; } fi if test "$THIS_INCLUDE" != "/usr/include"; then if test -z "$THIS_INCLUDE" || echo "$THIS_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$THIS_INCLUDE else ep_dir="`echo $THIS_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then DBA_SHARED_LIBADD="-l$THIS_LIBS $DBA_SHARED_LIBADD" if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n "DBA_SHARED_LIBADD"; then DBA_SHARED_LIBADD="-R$THIS_LFLAGS -L$THIS_LFLAGS $DBA_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$THIS_LFLAGS -L$THIS_LFLAGS $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $THIS_LIBS in c|c_r|pthread*) ;; *) LIBS="-l$THIS_LIBS $LIBS" ;; esac fi unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX fi fi echo $ac_n "checking for Berkeley DB3 support""... $ac_c" 1>&6 echo "configure:16987: checking for Berkeley DB3 support" >&5 if test "$THIS_RESULT" = "yes"; then HAVE_DBA=1 echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi unset THIS_RESULT # Check whether --with-dbm or --without-dbm was given. if test "${with_dbm+set}" = set; then withval="$with_dbm" if test "$withval" != "no"; then for i in /usr/local /usr $withval; do if test -f "$i/include/dbm.h" ; then THIS_PREFIX=$i fi done for LIB in db1 dbm c; do old_LDFLAGS=$LDFLAGS LDFLAGS="-L$THIS_PREFIX/lib $LDFLAGS" echo $ac_n "checking for dbminit in -l$LIB""... $ac_c" 1>&6 echo "configure:17015: checking for dbminit in -l$LIB" >&5 ac_lib_var=`echo $LIB'_'dbminit | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define DBA_DBM 1 EOF THIS_LIBS=$LIB else echo "$ac_t""no" 1>&6 fi LDFLAGS=$old_LDFLAGS done if test -n "$THIS_PREFIX" && test "$THIS_PREFIX" != "/usr"; then THIS_INCLUDE=$THIS_PREFIX/include THIS_LFLAGS=$THIS_PREFIX/lib fi THIS_RESULT="yes" if test "$THIS_PREFIX" != "/usr" -a "$THIS_INCLUDE" = ""; then { echo "configure: error: cannot find necessary header file(s)" 1>&2; exit 1; } fi if test "$THIS_LIBS" = "" ; then { echo "configure: error: cannot find necessary library" 1>&2; exit 1; } fi if test "$THIS_INCLUDE" != "/usr/include"; then if test -z "$THIS_INCLUDE" || echo "$THIS_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$THIS_INCLUDE else ep_dir="`echo $THIS_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then DBA_SHARED_LIBADD="-l$THIS_LIBS $DBA_SHARED_LIBADD" if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n "DBA_SHARED_LIBADD"; then DBA_SHARED_LIBADD="-R$THIS_LFLAGS -L$THIS_LFLAGS $DBA_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$THIS_LFLAGS -L$THIS_LFLAGS $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $THIS_LIBS in c|c_r|pthread*) ;; *) LIBS="-l$THIS_LIBS $LIBS" ;; esac fi unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX fi fi echo $ac_n "checking for DBM support""... $ac_c" 1>&6 echo "configure:17210: checking for DBM support" >&5 if test "$THIS_RESULT" = "yes"; then HAVE_DBA=1 echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi unset THIS_RESULT # Check whether --with-cdb or --without-cdb was given. if test "${with_cdb+set}" = set; then withval="$with_cdb" if test "$withval" != "no"; then for i in /usr/local /usr $withval; do if test -f "$i/include/cdb.h" ; then THIS_PREFIX=$i fi done for LIB in cdb c; do old_LDFLAGS=$LDFLAGS LDFLAGS="-L$THIS_PREFIX/lib $LDFLAGS" echo $ac_n "checking for cdb_bread in -l$LIB""... $ac_c" 1>&6 echo "configure:17238: checking for cdb_bread in -l$LIB" >&5 ac_lib_var=`echo $LIB'_'cdb_bread | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define DBA_CDB 1 EOF THIS_LIBS=$LIB else echo "$ac_t""no" 1>&6 fi LDFLAGS=$old_LDFLAGS done if test -n "$THIS_PREFIX" && test "$THIS_PREFIX" != "/usr"; then THIS_INCLUDE=$THIS_PREFIX/include THIS_LFLAGS=$THIS_PREFIX/lib fi THIS_RESULT="yes" if test "$THIS_PREFIX" != "/usr" -a "$THIS_INCLUDE" = ""; then { echo "configure: error: cannot find necessary header file(s)" 1>&2; exit 1; } fi if test "$THIS_LIBS" = "" ; then { echo "configure: error: cannot find necessary library" 1>&2; exit 1; } fi if test "$THIS_INCLUDE" != "/usr/include"; then if test -z "$THIS_INCLUDE" || echo "$THIS_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$THIS_INCLUDE else ep_dir="`echo $THIS_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then DBA_SHARED_LIBADD="-l$THIS_LIBS $DBA_SHARED_LIBADD" if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n "DBA_SHARED_LIBADD"; then DBA_SHARED_LIBADD="-R$THIS_LFLAGS -L$THIS_LFLAGS $DBA_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$THIS_LFLAGS"; then if test "$THIS_LFLAGS" != "/usr/lib"; then if test -z "$THIS_LFLAGS" || echo "$THIS_LFLAGS" | grep '^/' >/dev/null ; then ai_p=$THIS_LFLAGS else ep_dir="`echo $THIS_LFLAGS|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$THIS_LFLAGS\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$THIS_LFLAGS -L$THIS_LFLAGS $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $THIS_LIBS in c|c_r|pthread*) ;; *) LIBS="-l$THIS_LIBS $LIBS" ;; esac fi unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX fi fi echo $ac_n "checking for CDB support""... $ac_c" 1>&6 echo "configure:17433: checking for CDB support" >&5 if test "$THIS_RESULT" = "yes"; then HAVE_DBA=1 echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi unset THIS_RESULT echo $ac_n "checking whether to enable DBA interface""... $ac_c" 1>&6 echo "configure:17445: checking whether to enable DBA interface" >&5 if test "$HAVE_DBA" = "1"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_DBA 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS dba" if test -d "$abs_srcdir/ext/dba"; then ext_builddir=ext/dba ext_srcdir=$abs_srcdir/ext/dba else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 fi # Check whether --with-dbase or --without-dbase was given. if test "${with_dbase+set}" = set; then withval="$with_dbase" enable_dbase=$withval fi if test -n "whether to enable dbase support"; then echo $ac_n "checking whether to enable dbase support""... $ac_c" 1>&6 echo "configure:17677: checking whether to enable dbase support" >&5 fi # Check whether --enable-dbase or --disable-dbase was given. if test "${enable_dbase+set}" = set; then enableval="$enable_dbase" PHP_DBASE=$enableval else PHP_DBASE=no fi case $PHP_DBASE in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DBASE=`echo "$PHP_DBASE"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DBASE=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DBASE" = "no" && PHP_DBASE=yes fi if test -n "whether to enable dbase support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_DBASE" = "yes"; then cat >> confdefs.h <<\EOF #define DBASE 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS dbase" if test -d "$abs_srcdir/ext/dbase"; then ext_builddir=ext/dbase ext_srcdir=$abs_srcdir/ext/dbase else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:17939: checking for dbplus support" >&5 fi # Check whether --with-dbplus or --without-dbplus was given. if test "${with_dbplus+set}" = set; then withval="$with_dbplus" PHP_DBPLUS=$withval else PHP_DBPLUS=no fi case $PHP_DBPLUS in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DBPLUS=`echo "$PHP_DBPLUS"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DBPLUS=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DBPLUS" = "no" && PHP_DBPLUS=yes fi if test -n "for dbplus support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_DBPLUS" != "no"; then # --with-dbplus -> check with-path SEARCH_PATH="/usr/dbplus /usr/local/dbplus /opt/dbplus" SEARCH_FOR="/include/dbconfig.h" if test -r $PHP_DBPLUS/; then # path given as parameter DBPLUS_DIR=$PHP_DBPLUS else # search default path list echo $ac_n "checking for dbplus files in default path""... $ac_c" 1>&6 echo "configure:17992: checking for dbplus files in default path" >&5 for i in $SEARCH_PATH ; do if test -r $i/$SEARCH_FOR; then DBPLUS_DIR=$i echo "$ac_t""found in $i" 1>&6 fi done fi if test -z "$DBPLUS_DIR"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please reinstall the dbplus distribution" 1>&2; exit 1; } fi # --with-dbplus -> add include path if test "$DBPLUS_DIR/include" != "/usr/include"; then if test -z "$DBPLUS_DIR/include" || echo "$DBPLUS_DIR/include" | grep '^/' >/dev/null ; then ai_p=$DBPLUS_DIR/include else ep_dir="`echo $DBPLUS_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DBPLUS_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi # --with-dbplus -> chech for lib and symbol presence LIBNAME=Ddb LIBSYMBOL=Db_Init old_LIBS=$LIBS LIBS="-L$DBPLUS_DIR/lib -lm -ldl -lDmacc -lDracc" echo $ac_n "checking for $LIBSYMBOL in -l$LIBNAME""... $ac_c" 1>&6 echo "configure:18045: checking for $LIBSYMBOL in -l$LIBNAME" >&5 ac_lib_var=`echo $LIBNAME'_'$LIBSYMBOL | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$LIBNAME $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_DBPLUSLIB 1 EOF else echo "$ac_t""no" 1>&6 { echo "configure: error: wrong dbplus lib version or lib not found" 1>&2; exit 1; } fi LIBS=$old_LIBS PHP_VAR_SUBST="$PHP_VAR_SUBST DBPLUS_SHARED_LIBADD" if test "$ext_shared" = "yes"; then DBPLUS_SHARED_LIBADD="-l$LIBNAME $DBPLUS_SHARED_LIBADD" if test -n "$DBPLUS_DIR/lib"; then if test "$DBPLUS_DIR/lib" != "/usr/lib"; then if test -z "$DBPLUS_DIR/lib" || echo "$DBPLUS_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DBPLUS_DIR/lib else ep_dir="`echo $DBPLUS_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DBPLUS_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "DBPLUS_SHARED_LIBADD"; then DBPLUS_SHARED_LIBADD="-R$DBPLUS_DIR/lib -L$DBPLUS_DIR/lib $DBPLUS_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$DBPLUS_DIR/lib"; then if test "$DBPLUS_DIR/lib" != "/usr/lib"; then if test -z "$DBPLUS_DIR/lib" || echo "$DBPLUS_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DBPLUS_DIR/lib else ep_dir="`echo $DBPLUS_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DBPLUS_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$DBPLUS_DIR/lib -L$DBPLUS_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $LIBNAME in c|c_r|pthread*) ;; *) LIBS="-l$LIBNAME $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then DBPLUS_SHARED_LIBADD="-lDmacc $DBPLUS_SHARED_LIBADD" if test -n "$DBPLUS_DIR/lib"; then if test "$DBPLUS_DIR/lib" != "/usr/lib"; then if test -z "$DBPLUS_DIR/lib" || echo "$DBPLUS_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DBPLUS_DIR/lib else ep_dir="`echo $DBPLUS_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DBPLUS_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "DBPLUS_SHARED_LIBADD"; then DBPLUS_SHARED_LIBADD="-R$DBPLUS_DIR/lib -L$DBPLUS_DIR/lib $DBPLUS_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$DBPLUS_DIR/lib"; then if test "$DBPLUS_DIR/lib" != "/usr/lib"; then if test -z "$DBPLUS_DIR/lib" || echo "$DBPLUS_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DBPLUS_DIR/lib else ep_dir="`echo $DBPLUS_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DBPLUS_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$DBPLUS_DIR/lib -L$DBPLUS_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case Dmacc in c|c_r|pthread*) ;; *) LIBS="-lDmacc $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then DBPLUS_SHARED_LIBADD="-lDracc $DBPLUS_SHARED_LIBADD" if test -n "$DBPLUS_DIR/lib"; then if test "$DBPLUS_DIR/lib" != "/usr/lib"; then if test -z "$DBPLUS_DIR/lib" || echo "$DBPLUS_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DBPLUS_DIR/lib else ep_dir="`echo $DBPLUS_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DBPLUS_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "DBPLUS_SHARED_LIBADD"; then DBPLUS_SHARED_LIBADD="-R$DBPLUS_DIR/lib -L$DBPLUS_DIR/lib $DBPLUS_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$DBPLUS_DIR/lib"; then if test "$DBPLUS_DIR/lib" != "/usr/lib"; then if test -z "$DBPLUS_DIR/lib" || echo "$DBPLUS_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DBPLUS_DIR/lib else ep_dir="`echo $DBPLUS_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DBPLUS_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$DBPLUS_DIR/lib -L$DBPLUS_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case Dracc in c|c_r|pthread*) ;; *) LIBS="-lDracc $LIBS" ;; esac fi EXT_SUBDIRS="$EXT_SUBDIRS dbplus" if test -d "$abs_srcdir/ext/dbplus"; then ext_builddir=ext/dbplus ext_srcdir=$abs_srcdir/ext/dbplus else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:18588: checking whether to enable dbx support" >&5 fi # Check whether --enable-dbx or --disable-dbx was given. if test "${enable_dbx+set}" = set; then enableval="$enable_dbx" PHP_DBX=$enableval else PHP_DBX=no fi case $PHP_DBX in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DBX=`echo "$PHP_DBX"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DBX=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DBX" = "no" && PHP_DBX=yes fi if test -n "whether to enable dbx support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_DBX" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS dbx" if test -d "$abs_srcdir/ext/dbx"; then ext_builddir=ext/dbx ext_srcdir=$abs_srcdir/ext/dbx else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:18846: checking whether to enable direct I/O support" >&5 fi # Check whether --enable-dio or --disable-dio was given. if test "${enable_dio+set}" = set; then enableval="$enable_dio" PHP_DIO=$enableval else PHP_DIO=no fi case $PHP_DIO in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DIO=`echo "$PHP_DIO"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DIO=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DIO" = "no" && PHP_DIO=yes fi if test -n "whether to enable direct I/O support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_DIO" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS dio" if test -d "$abs_srcdir/ext/dio"; then ext_builddir=ext/dio ext_srcdir=$abs_srcdir/ext/dio else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:19106: checking for DOM support" >&5 fi # Check whether --with-dom or --without-dom was given. if test "${with_dom+set}" = set; then withval="$with_dom" PHP_DOM=$withval else PHP_DOM=no fi case $PHP_DOM in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DOM=`echo "$PHP_DOM"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DOM=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DOM" = "no" && PHP_DOM=yes fi if test -n "for DOM support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_DOM" != "no"; then DOMXML_DIR_ADD="" if test -r $PHP_DOM/include/libxml2/libxml/tree.h; then DOMXML_DIR=$PHP_DOM DOMXML_DIR_ADD="/libxml2" elif test -r $PHP_DOM/include/libxml/tree.h; then DOMXML_DIR=$PHP_DOM else for i in /usr/local /usr; do test -r $i/include/libxml/tree.h && DOMXML_DIR=$i test -r $i/include/libxml2/libxml/tree.h && DOMXML_DIR=$i && DOMXML_DIR_ADD="/libxml2" done fi if test -z "$DOMXML_DIR"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please reinstall the libxml >= 2.4.14 distribution" 1>&2; exit 1; } fi old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$DOMXML_DIR/include$DOMXML_DIR_ADD echo $ac_n "checking for libxml version""... $ac_c" 1>&6 echo "configure:19175: checking for libxml version" >&5 cat > conftest.$ac_ext < #if LIBXML_VERSION >= 20414 yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t"">= 2.4.14" 1>&6 else rm -rf conftest* { echo "configure: error: libxml version 2.4.14 or greater required." 1>&2; exit 1; } fi rm -f conftest* CPPFLAGS=$old_CPPFLAGS if test -f $DOMXML_DIR/lib/libxml2.a -o -f $DOMXML_DIR/lib/libxml2.$SHLIB_SUFFIX_NAME ; then DOM_LIBNAME=xml2 else DOM_LIBNAME=xml fi XML2_CONFIG=$DOMXML_DIR/bin/xml2-config if test -x $XML2_CONFIG; then DOM_LIBS=`$XML2_CONFIG --libs` for ac_i in $DOM_LIBS; do case $ac_i in -l*) ac_ii=`echo $ac_i|cut -c 3-` case $ac_ii in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then DOMXML_SHARED_LIBADD="$DOMXML_SHARED_LIBADD -l$ac_ii" else case $ac_ii in c|c_r|pthread*) ;; *) LIBS="$LIBS -l$ac_ii" ;; esac fi ;; esac ;; -L*) ac_ii=`echo $ac_i|cut -c 3-` if test "$ac_ii" != "/usr/lib"; then if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then ai_p=$ac_ii else ep_dir="`echo $ac_ii|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ac_ii\"`" fi if test "$ext_shared" = "yes" && test -n "DOMXML_SHARED_LIBADD"; then DOMXML_SHARED_LIBADD="-R$ac_ii -L$ac_ii $DOMXML_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi ;; esac done else if test "$ext_shared" = "yes"; then DOMXML_SHARED_LIBADD="-l$DOM_LIBNAME $DOMXML_SHARED_LIBADD" if test -n "$DOMXML_DIR/lib"; then if test "$DOMXML_DIR/lib" != "/usr/lib"; then if test -z "$DOMXML_DIR/lib" || echo "$DOMXML_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DOMXML_DIR/lib else ep_dir="`echo $DOMXML_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXML_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "DOMXML_SHARED_LIBADD"; then DOMXML_SHARED_LIBADD="-R$DOMXML_DIR/lib -L$DOMXML_DIR/lib $DOMXML_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$DOMXML_DIR/lib"; then if test "$DOMXML_DIR/lib" != "/usr/lib"; then if test -z "$DOMXML_DIR/lib" || echo "$DOMXML_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DOMXML_DIR/lib else ep_dir="`echo $DOMXML_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXML_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$DOMXML_DIR/lib -L$DOMXML_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $DOM_LIBNAME in c|c_r|pthread*) ;; *) LIBS="-l$DOM_LIBNAME $LIBS" ;; esac fi fi if test "$DOMXML_DIR/include$DOMXML_DIR_ADD" != "/usr/include"; then if test -z "$DOMXML_DIR/include$DOMXML_DIR_ADD" || echo "$DOMXML_DIR/include$DOMXML_DIR_ADD" | grep '^/' >/dev/null ; then ai_p=$DOMXML_DIR/include$DOMXML_DIR_ADD else ep_dir="`echo $DOMXML_DIR/include$DOMXML_DIR_ADD|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXML_DIR/include$DOMXML_DIR_ADD\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$PHP_ZLIB_DIR" = "no"; then { echo "configure: error: DOMXML requires ZLIB. Use --with-zlib-dir=" 1>&2; exit 1; } else if test "$ext_shared" = "yes"; then DOMXML_SHARED_LIBADD="-lz $DOMXML_SHARED_LIBADD" if test -n "$PHP_ZLIB_DIR/lib"; then if test "$PHP_ZLIB_DIR/lib" != "/usr/lib"; then if test -z "$PHP_ZLIB_DIR/lib" || echo "$PHP_ZLIB_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_ZLIB_DIR/lib else ep_dir="`echo $PHP_ZLIB_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_ZLIB_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "DOMXML_SHARED_LIBADD"; then DOMXML_SHARED_LIBADD="-R$PHP_ZLIB_DIR/lib -L$PHP_ZLIB_DIR/lib $DOMXML_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PHP_ZLIB_DIR/lib"; then if test "$PHP_ZLIB_DIR/lib" != "/usr/lib"; then if test -z "$PHP_ZLIB_DIR/lib" || echo "$PHP_ZLIB_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_ZLIB_DIR/lib else ep_dir="`echo $PHP_ZLIB_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_ZLIB_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PHP_ZLIB_DIR/lib -L$PHP_ZLIB_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case z in c|c_r|pthread*) ;; *) LIBS="-lz $LIBS" ;; esac fi fi cat >> confdefs.h <<\EOF #define HAVE_DOMXML 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS domxml" if test -d "$abs_srcdir/ext/domxml"; then ext_builddir=ext/domxml ext_srcdir=$abs_srcdir/ext/domxml else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:19735: checking for DOM XSLT support" >&5 fi # Check whether --with-dom-xslt or --without-dom-xslt was given. if test "${with_dom_xslt+set}" = set; then withval="$with_dom_xslt" PHP_DOM_XSLT=$withval else PHP_DOM_XSLT=no fi case $PHP_DOM_XSLT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DOM_XSLT=`echo "$PHP_DOM_XSLT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DOM_XSLT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DOM_XSLT" = "no" && PHP_DOM_XSLT=yes fi if test -n "for DOM XSLT support"; then echo "$ac_t""$ext_output" 1>&6 fi if test -n "for DOM EXSLT support"; then echo $ac_n "checking for DOM EXSLT support""... $ac_c" 1>&6 echo "configure:19784: checking for DOM EXSLT support" >&5 fi # Check whether --with-dom-exslt or --without-dom-exslt was given. if test "${with_dom_exslt+set}" = set; then withval="$with_dom_exslt" PHP_DOM_EXSLT=$withval else PHP_DOM_EXSLT=no fi case $PHP_DOM_EXSLT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_DOM_EXSLT=`echo "$PHP_DOM_EXSLT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_DOM_EXSLT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_DOM_EXSLT" = "no" && PHP_DOM_EXSLT=yes fi if test -n "for DOM EXSLT support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_DOM_XSLT" != "no"; then if test -r $PHP_DOM_XSLT/include/libxslt/transform.h; then DOMXSLT_DIR=$PHP_DOM_XSLT else for i in /usr/local /usr; do test -r $i/include/libxslt/transform.h && DOMXSLT_DIR=$i done fi if test -z "$DOMXSLT_DIR"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please reinstall the libxslt >= 1.0.3 distribution" 1>&2; exit 1; } fi old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$DOMXSLT_DIR/include echo $ac_n "checking for libxslt version""... $ac_c" 1>&6 echo "configure:19848: checking for libxslt version" >&5 cat > conftest.$ac_ext < #if LIBXSLT_VERSION >= 10003 yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t"">= 1.0.3" 1>&6 else rm -rf conftest* { echo "configure: error: libxslt version 1.0.3 or greater required." 1>&2; exit 1; } fi rm -f conftest* CPPFLAGS=$old_CPPFLAGS if test "$ext_shared" = "yes"; then DOMXML_SHARED_LIBADD="-lxslt $DOMXML_SHARED_LIBADD" if test -n "$DOMXSLT_DIR/lib"; then if test "$DOMXSLT_DIR/lib" != "/usr/lib"; then if test -z "$DOMXSLT_DIR/lib" || echo "$DOMXSLT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DOMXSLT_DIR/lib else ep_dir="`echo $DOMXSLT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXSLT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "DOMXML_SHARED_LIBADD"; then DOMXML_SHARED_LIBADD="-R$DOMXSLT_DIR/lib -L$DOMXSLT_DIR/lib $DOMXML_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$DOMXSLT_DIR/lib"; then if test "$DOMXSLT_DIR/lib" != "/usr/lib"; then if test -z "$DOMXSLT_DIR/lib" || echo "$DOMXSLT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DOMXSLT_DIR/lib else ep_dir="`echo $DOMXSLT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXSLT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$DOMXSLT_DIR/lib -L$DOMXSLT_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case xslt in c|c_r|pthread*) ;; *) LIBS="-lxslt $LIBS" ;; esac fi if test "$DOMXSLT_DIR/include" != "/usr/include"; then if test -z "$DOMXSLT_DIR/include" || echo "$DOMXSLT_DIR/include" | grep '^/' >/dev/null ; then ai_p=$DOMXSLT_DIR/include else ep_dir="`echo $DOMXSLT_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXSLT_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$PHP_DOM" = "no"; then { echo "configure: error: DOMXSLT requires DOMXML. Use --with-dom=" 1>&2; exit 1; } fi if test -f $DOMXML_DIR/lib/libxml2.a -o -f $DOMXML_DIR/lib/libxml2.$SHLIB_SUFFIX_NAME ; then DOM_LIBNAME=xml2 else DOM_LIBNAME=xml fi if test "$ext_shared" = "yes"; then DOMXML_SHARED_LIBADD="-l$DOM_LIBNAME $DOMXML_SHARED_LIBADD" if test -n "$DOMXML_DIR/lib"; then if test "$DOMXML_DIR/lib" != "/usr/lib"; then if test -z "$DOMXML_DIR/lib" || echo "$DOMXML_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DOMXML_DIR/lib else ep_dir="`echo $DOMXML_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXML_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "DOMXML_SHARED_LIBADD"; then DOMXML_SHARED_LIBADD="-R$DOMXML_DIR/lib -L$DOMXML_DIR/lib $DOMXML_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$DOMXML_DIR/lib"; then if test "$DOMXML_DIR/lib" != "/usr/lib"; then if test -z "$DOMXML_DIR/lib" || echo "$DOMXML_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DOMXML_DIR/lib else ep_dir="`echo $DOMXML_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXML_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$DOMXML_DIR/lib -L$DOMXML_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $DOM_LIBNAME in c|c_r|pthread*) ;; *) LIBS="-l$DOM_LIBNAME $LIBS" ;; esac fi if test "$DOMXML_DIR/include$DOMXML_DIR_ADD" != "/usr/include"; then if test -z "$DOMXML_DIR/include$DOMXML_DIR_ADD" || echo "$DOMXML_DIR/include$DOMXML_DIR_ADD" | grep '^/' >/dev/null ; then ai_p=$DOMXML_DIR/include$DOMXML_DIR_ADD else ep_dir="`echo $DOMXML_DIR/include$DOMXML_DIR_ADD|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXML_DIR/include$DOMXML_DIR_ADD\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test -f $DOMXML_DIR/lib/libxsltbreakpoint.a -o -f $DOMXML_DIR/lib/libxsltbreakpoint.$SHLIB_SUFFIX_NAME ; then if test "$ext_shared" = "yes"; then DOMXML_SHARED_LIBADD="-lxsltbreakpoint $DOMXML_SHARED_LIBADD" if test -n "$DOMXML_DIR/lib"; then if test "$DOMXML_DIR/lib" != "/usr/lib"; then if test -z "$DOMXML_DIR/lib" || echo "$DOMXML_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DOMXML_DIR/lib else ep_dir="`echo $DOMXML_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXML_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "DOMXML_SHARED_LIBADD"; then DOMXML_SHARED_LIBADD="-R$DOMXML_DIR/lib -L$DOMXML_DIR/lib $DOMXML_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$DOMXML_DIR/lib"; then if test "$DOMXML_DIR/lib" != "/usr/lib"; then if test -z "$DOMXML_DIR/lib" || echo "$DOMXML_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DOMXML_DIR/lib else ep_dir="`echo $DOMXML_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMXML_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$DOMXML_DIR/lib -L$DOMXML_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case xsltbreakpoint in c|c_r|pthread*) ;; *) LIBS="-lxsltbreakpoint $LIBS" ;; esac fi fi cat >> confdefs.h <<\EOF #define HAVE_DOMXSLT 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST DOMXML_SHARED_LIBADD" fi if test "$PHP_DOM_EXSLT" != "no"; then if test "$PHP_DOM" = "no"; then { echo "configure: error: DOMEXSLT requires DOMXML. Use --with-dom=" 1>&2; exit 1; } fi if test "$PHP_DOM_XSLT" = "no"; then { echo "configure: error: DOMEXSLT requires DOMXSLT. Use --with-dom-xslt=" 1>&2; exit 1; } fi if test -r $PHP_DOM_EXSLT/include/libexslt/exslt.h; then DOMEXSLT_DIR=$PHP_DOM_EXSLT else for i in /usr/local /usr; do test -r $i/include/libexslt/exslt.h && DOMEXSLT_DIR=$i done fi if test -z "$DOMEXSLT_DIR"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please reinstall the libxslt >= 1.0.3 distribution" 1>&2; exit 1; } fi old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$DOMEXSLT_DIR/include echo $ac_n "checking for libexslt version""... $ac_c" 1>&6 echo "configure:20272: checking for libexslt version" >&5 cat > conftest.$ac_ext < #if LIBEXSLT_VERSION >= 600 yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t"">= 1.0.3" 1>&6 else rm -rf conftest* { echo "configure: error: libxslt version 1.0.3 or greater required." 1>&2; exit 1; } fi rm -f conftest* CPPFLAGS=$old_CPPFLAGS if test "$ext_shared" = "yes"; then DOMXML_SHARED_LIBADD="-lexslt $DOMXML_SHARED_LIBADD" if test -n "$DOMEXSLT_DIR/lib"; then if test "$DOMEXSLT_DIR/lib" != "/usr/lib"; then if test -z "$DOMEXSLT_DIR/lib" || echo "$DOMEXSLT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DOMEXSLT_DIR/lib else ep_dir="`echo $DOMEXSLT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMEXSLT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "DOMXML_SHARED_LIBADD"; then DOMXML_SHARED_LIBADD="-R$DOMEXSLT_DIR/lib -L$DOMEXSLT_DIR/lib $DOMXML_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$DOMEXSLT_DIR/lib"; then if test "$DOMEXSLT_DIR/lib" != "/usr/lib"; then if test -z "$DOMEXSLT_DIR/lib" || echo "$DOMEXSLT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$DOMEXSLT_DIR/lib else ep_dir="`echo $DOMEXSLT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMEXSLT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$DOMEXSLT_DIR/lib -L$DOMEXSLT_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case exslt in c|c_r|pthread*) ;; *) LIBS="-lexslt $LIBS" ;; esac fi if test "$DOMEXSLT_DIR/include" != "/usr/include"; then if test -z "$DOMEXSLT_DIR/include" || echo "$DOMEXSLT_DIR/include" | grep '^/' >/dev/null ; then ai_p=$DOMEXSLT_DIR/include else ep_dir="`echo $DOMEXSLT_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$DOMEXSLT_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_DOMEXSLT 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST DOMXML_SHARED_LIBADD" fi if test -n "whether to enable EXIF support"; then echo $ac_n "checking whether to enable EXIF support""... $ac_c" 1>&6 echo "configure:20443: checking whether to enable EXIF support" >&5 fi # Check whether --enable-exif or --disable-exif was given. if test "${enable_exif+set}" = set; then enableval="$enable_exif" PHP_EXIF=$enableval else PHP_EXIF=no fi case $PHP_EXIF in shared,*) ext_output="yes, shared" ext_shared=yes PHP_EXIF=`echo "$PHP_EXIF"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_EXIF=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_EXIF" = "no" && PHP_EXIF=yes fi if test -n "whether to enable EXIF support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_EXIF" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_EXIF 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS exif" if test -d "$abs_srcdir/ext/exif"; then ext_builddir=ext/exif ext_srcdir=$abs_srcdir/ext/exif else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:20705: checking for FrontBase SQL92 (fbsql) support" >&5 fi # Check whether --with-fbsql or --without-fbsql was given. if test "${with_fbsql+set}" = set; then withval="$with_fbsql" PHP_FBSQL=$withval else PHP_FBSQL=no fi case $PHP_FBSQL in shared,*) ext_output="yes, shared" ext_shared=yes PHP_FBSQL=`echo "$PHP_FBSQL"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_FBSQL=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_FBSQL" = "no" && PHP_FBSQL=yes fi if test -n "for FrontBase SQL92 (fbsql) support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_FBSQL" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_FBSQL 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS fbsql" if test -d "$abs_srcdir/ext/fbsql"; then ext_builddir=ext/fbsql ext_srcdir=$abs_srcdir/ext/fbsql else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi elif test "$PHP_FBSQL" != "no"; then if test -f $PHP_FBSQL/include/FBCAccess/FBCAccess.h; then FBSQL_INSTALLATION_DIR=$PHP_FBSQL else { echo "configure: error: Directory $PHP_FBSQL is not a FrontBase installation directory" 1>&2; exit 1; } fi fi if test -z "$FBSQL_INSTALLATION_DIR/lib/libFBCAccess.a"; then { echo "configure: error: Could not find $FBSQL_INSTALLATION_DIR/lib/libFBCAccess.a" 1>&2; exit 1; } fi if test "$ext_shared" = "yes"; then $FBSQL_INSTALLATION_DIR/lib="-lFBCAccess $$FBSQL_INSTALLATION_DIR/lib" if test -n "$FBSQL_INSTALLATION_DIR/lib"; then if test "$FBSQL_INSTALLATION_DIR/lib" != "/usr/lib"; then if test -z "$FBSQL_INSTALLATION_DIR/lib" || echo "$FBSQL_INSTALLATION_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$FBSQL_INSTALLATION_DIR/lib else ep_dir="`echo $FBSQL_INSTALLATION_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$FBSQL_INSTALLATION_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "$FBSQL_INSTALLATION_DIR/lib"; then $FBSQL_INSTALLATION_DIR/lib="-R$FBSQL_INSTALLATION_DIR/lib -L$FBSQL_INSTALLATION_DIR/lib $$FBSQL_INSTALLATION_DIR/lib" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$FBSQL_INSTALLATION_DIR/lib"; then if test "$FBSQL_INSTALLATION_DIR/lib" != "/usr/lib"; then if test -z "$FBSQL_INSTALLATION_DIR/lib" || echo "$FBSQL_INSTALLATION_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$FBSQL_INSTALLATION_DIR/lib else ep_dir="`echo $FBSQL_INSTALLATION_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$FBSQL_INSTALLATION_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$FBSQL_INSTALLATION_DIR/lib -L$FBSQL_INSTALLATION_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case FBCAccess in c|c_r|pthread*) ;; *) LIBS="-lFBCAccess $LIBS" ;; esac fi if test "$FBSQL_INSTALLATION_DIR/include" != "/usr/include"; then if test -z "$FBSQL_INSTALLATION_DIR/include" || echo "$FBSQL_INSTALLATION_DIR/include" | grep '^/' >/dev/null ; then ai_p=$FBSQL_INSTALLATION_DIR/include else ep_dir="`echo $FBSQL_INSTALLATION_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$FBSQL_INSTALLATION_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -n "for FDF support"; then echo $ac_n "checking for FDF support""... $ac_c" 1>&6 echo "configure:21121: checking for FDF support" >&5 fi # Check whether --with-fdftk or --without-fdftk was given. if test "${with_fdftk+set}" = set; then withval="$with_fdftk" PHP_FDFTK=$withval else PHP_FDFTK=no fi case $PHP_FDFTK in shared,*) ext_output="yes, shared" ext_shared=yes PHP_FDFTK=`echo "$PHP_FDFTK"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_FDFTK=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_FDFTK" = "no" && PHP_FDFTK=yes fi if test -n "for FDF support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_FDFTK" != "no"; then for i in /usr /usr/local $PHP_FDFTK; do if test -r $i/include/FdfTk.h; then FDFTK_DIR=$i elif test -r $i/include/fdftk.h; then cat >> confdefs.h <<\EOF #define HAVE_FDFTK_H_LOWER 1 EOF FDFTK_DIR=$i fi done if test -z "$FDFTK_DIR"; then { echo "configure: error: FdfTk.h or fdftk.h not found. Please reinstall the fdftk distribution." 1>&2; exit 1; } fi if test "$FDFTK_DIR/include" != "/usr/include"; then if test -z "$FDFTK_DIR/include" || echo "$FDFTK_DIR/include" | grep '^/' >/dev/null ; then ai_p=$FDFTK_DIR/include else ep_dir="`echo $FDFTK_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$FDFTK_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi FDFLIBRARY="" for i in fdftk FdfTk; do save_old_LDFLAGS=$LDFLAGS LDFLAGS="-L$FDFTK_DIR/lib -lm $LDFLAGS" echo $ac_n "checking for FDFOpen in -l$i""... $ac_c" 1>&6 echo "configure:21222: checking for FDFOpen in -l$i" >&5 ac_lib_var=`echo $i'_'FDFOpen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$i $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS FDFLIBRARY=$i else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi done if test -z "$FDFLIBRARY"; then { echo "configure: error: fdftk module requires >= fdftk 2.0" 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define HAVE_FDFLIB 1 EOF if test "$ext_shared" = "yes"; then FDFTK_SHARED_LIBADD="-l$FDFLIBRARY $FDFTK_SHARED_LIBADD" if test -n "$FDFTK_DIR/lib"; then if test "$FDFTK_DIR/lib" != "/usr/lib"; then if test -z "$FDFTK_DIR/lib" || echo "$FDFTK_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$FDFTK_DIR/lib else ep_dir="`echo $FDFTK_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$FDFTK_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "FDFTK_SHARED_LIBADD"; then FDFTK_SHARED_LIBADD="-R$FDFTK_DIR/lib -L$FDFTK_DIR/lib $FDFTK_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$FDFTK_DIR/lib"; then if test "$FDFTK_DIR/lib" != "/usr/lib"; then if test -z "$FDFTK_DIR/lib" || echo "$FDFTK_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$FDFTK_DIR/lib else ep_dir="`echo $FDFTK_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$FDFTK_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$FDFTK_DIR/lib -L$FDFTK_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $FDFLIBRARY in c|c_r|pthread*) ;; *) LIBS="-l$FDFLIBRARY $LIBS" ;; esac fi PHP_VAR_SUBST="$PHP_VAR_SUBST FDFTK_SHARED_LIBADD" EXT_SUBDIRS="$EXT_SUBDIRS fdf" if test -d "$abs_srcdir/ext/fdf"; then ext_builddir=ext/fdf ext_srcdir=$abs_srcdir/ext/fdf else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:21595: checking whether to enable the bundled filePro support" >&5 fi # Check whether --enable-filepro or --disable-filepro was given. if test "${enable_filepro+set}" = set; then enableval="$enable_filepro" PHP_FILEPRO=$enableval else PHP_FILEPRO=no fi case $PHP_FILEPRO in shared,*) ext_output="yes, shared" ext_shared=yes PHP_FILEPRO=`echo "$PHP_FILEPRO"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_FILEPRO=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_FILEPRO" = "no" && PHP_FILEPRO=yes fi if test -n "whether to enable the bundled filePro support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_FILEPRO" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_FILEPRO 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS filepro" if test -d "$abs_srcdir/ext/filepro"; then ext_builddir=ext/filepro ext_srcdir=$abs_srcdir/ext/filepro else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:21857: checking for FriBidi support" >&5 fi # Check whether --with-fribidi or --without-fribidi was given. if test "${with_fribidi+set}" = set; then withval="$with_fribidi" PHP_FRIBIDI=$withval else PHP_FRIBIDI=no fi case $PHP_FRIBIDI in shared,*) ext_output="yes, shared" ext_shared=yes PHP_FRIBIDI=`echo "$PHP_FRIBIDI"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_FRIBIDI=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_FRIBIDI" = "no" && PHP_FRIBIDI=yes fi if test -n "for FriBidi support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_FRIBIDI" != "no"; then if test "$PHP_FRIBIDI" = "yes"; then PHP_FRIBIDI=/usr/local fi echo $ac_n "checking for header files in "$PHP_FRIBIDI/include/fribidi"""... $ac_c" 1>&6 echo "configure:21911: checking for header files in "$PHP_FRIBIDI/include/fribidi"" >&5 if test -f $PHP_FRIBIDI/include/fribidi/fribidi.h && test -f $PHP_FRIBIDI/include/fribidi/fribidi_types.h && test -f $PHP_FRIBIDI/include/fribidi/fribidi_char_sets.h; then FRIBIDI_INCDIR=$PHP_FRIBIDI/include/fribidi/ echo "$ac_t""found all" 1>&6 else echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for libfribidi.so file in "$PHP_FRIBIDI/lib/"""... $ac_c" 1>&6 echo "configure:21921: checking for libfribidi.so file in "$PHP_FRIBIDI/lib/"" >&5 if test -f "$PHP_FRIBIDI/lib/libfribidi.so" ; then FRIBIDI_LIBDIR=$PHP_FRIBIDI/lib/ echo "$ac_t""found" 1>&6 else echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for glibconfig.h in "usr/lib/glib/include/"""... $ac_c" 1>&6 echo "configure:21931: checking for glibconfig.h in "usr/lib/glib/include/"" >&5 if test -f /usr/lib/glib/include/glibconfig.h ; then echo "$ac_t""found" 1>&6 GLIB_INCDIR=/usr/lib/glib/include/ else echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for FriBidi version""... $ac_c" 1>&6 echo "configure:21941: checking for FriBidi version" >&5 FRIBIDI_CONFIG=$PHP_FRIBIDI/bin/fribidi-config if test -x $FRIBIDI_CONFIG; then fribidi_version_full=`$FRIBIDI_CONFIG --version` fi fribidi_version=`echo ${fribidi_version_full} | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` if test "$fribidi_version" -ge 9000; then echo "$ac_t""$fribidi_version_full" 1>&6 else { echo "configure: error: FriBidi version 0.9.0 or later is required to compile php with FriBidi support" 1>&2; exit 1; } fi echo $ac_n "checking sanity to build extension""... $ac_c" 1>&6 echo "configure:21957: checking sanity to build extension" >&5 if test -n "$FRIBIDI_INCDIR" && test -n "$FRIBIDI_LIBDIR" && test -n "$GLIB_INCDIR"; then echo "$ac_t""yes" 1>&6 if test ""$FRIBIDI_INCDIR"" != "/usr/include"; then if test -z ""$FRIBIDI_INCDIR"" || echo ""$FRIBIDI_INCDIR"" | grep '^/' >/dev/null ; then ai_p="$FRIBIDI_INCDIR" else ep_dir="`echo "$FRIBIDI_INCDIR"|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \""$FRIBIDI_INCDIR"\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test ""$GLIB_INCDIR"" != "/usr/include"; then if test -z ""$GLIB_INCDIR"" || echo ""$GLIB_INCDIR"" | grep '^/' >/dev/null ; then ai_p="$GLIB_INCDIR" else ep_dir="`echo "$GLIB_INCDIR"|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \""$GLIB_INCDIR"\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then FRIBIDI_SHARED_LIBADD="-lfribidi $FRIBIDI_SHARED_LIBADD" if test -n ""$FRIBIDI_LIBDIR""; then if test ""$FRIBIDI_LIBDIR"" != "/usr/lib"; then if test -z ""$FRIBIDI_LIBDIR"" || echo ""$FRIBIDI_LIBDIR"" | grep '^/' >/dev/null ; then ai_p="$FRIBIDI_LIBDIR" else ep_dir="`echo "$FRIBIDI_LIBDIR"|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \""$FRIBIDI_LIBDIR"\"`" fi if test "$ext_shared" = "yes" && test -n "FRIBIDI_SHARED_LIBADD"; then FRIBIDI_SHARED_LIBADD="-R"$FRIBIDI_LIBDIR" -L"$FRIBIDI_LIBDIR" $FRIBIDI_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n ""$FRIBIDI_LIBDIR""; then if test ""$FRIBIDI_LIBDIR"" != "/usr/lib"; then if test -z ""$FRIBIDI_LIBDIR"" || echo ""$FRIBIDI_LIBDIR"" | grep '^/' >/dev/null ; then ai_p="$FRIBIDI_LIBDIR" else ep_dir="`echo "$FRIBIDI_LIBDIR"|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \""$FRIBIDI_LIBDIR"\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R"$FRIBIDI_LIBDIR" -L"$FRIBIDI_LIBDIR" $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case fribidi in c|c_r|pthread*) ;; *) LIBS="-lfribidi $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_FRIBIDI 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS fribidi" if test -d "$abs_srcdir/ext/fribidi"; then ext_builddir=ext/fribidi ext_srcdir=$abs_srcdir/ext/fribidi else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 fi fi if test -n "whether to enable FTP support"; then echo $ac_n "checking whether to enable FTP support""... $ac_c" 1>&6 echo "configure:22341: checking whether to enable FTP support" >&5 fi # Check whether --enable-ftp or --disable-ftp was given. if test "${enable_ftp+set}" = set; then enableval="$enable_ftp" PHP_FTP=$enableval else PHP_FTP=no fi case $PHP_FTP in shared,*) ext_output="yes, shared" ext_shared=yes PHP_FTP=`echo "$PHP_FTP"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_FTP=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_FTP" = "no" && PHP_FTP=yes fi if test -n "whether to enable FTP support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_FTP" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_FTP 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS ftp" if test -d "$abs_srcdir/ext/ftp"; then ext_builddir=ext/ftp ext_srcdir=$abs_srcdir/ext/ftp else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:22620: checking for GD support" >&5 fi # Check whether --with-gd or --without-gd was given. if test "${with_gd+set}" = set; then withval="$with_gd" PHP_GD=$withval else PHP_GD=no fi case $PHP_GD in shared,*) ext_output="yes, shared" ext_shared=yes PHP_GD=`echo "$PHP_GD"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_GD=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_GD" = "no" && PHP_GD=yes fi if test -n "for GD support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_GD" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS gd" if test -d "$abs_srcdir/ext/gd"; then ext_builddir=ext/gd ext_srcdir=$abs_srcdir/ext/gd else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:22895: checking whether to enable truetype string function in GD" >&5 fi # Check whether --enable-gd-native-ttf or --disable-gd-native-ttf was given. if test "${enable_gd_native_ttf+set}" = set; then enableval="$enable_gd_native_ttf" PHP_GD_NATIVE_TTF=$enableval else PHP_GD_NATIVE_TTF=no fi case $PHP_GD_NATIVE_TTF in shared,*) ext_output="yes, shared" ext_shared=yes PHP_GD_NATIVE_TTF=`echo "$PHP_GD_NATIVE_TTF"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_GD_NATIVE_TTF=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_GD_NATIVE_TTF" = "no" && PHP_GD_NATIVE_TTF=yes fi if test -n "whether to enable truetype string function in GD"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_GD_NATIVE_TTF" = "yes"; then cat >> confdefs.h <<\EOF #define USE_GD_IMGSTRTTF 1 EOF fi if test -n "for the location of libjpeg"; then echo $ac_n "checking for the location of libjpeg""... $ac_c" 1>&6 echo "configure:22952: checking for the location of libjpeg" >&5 fi # Check whether --with-jpeg-dir or --without-jpeg-dir was given. if test "${with_jpeg_dir+set}" = set; then withval="$with_jpeg_dir" PHP_JPEG_DIR=$withval else PHP_JPEG_DIR=no fi case $PHP_JPEG_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_JPEG_DIR=`echo "$PHP_JPEG_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_JPEG_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_JPEG_DIR" = "no" && PHP_JPEG_DIR=yes fi if test -n "for the location of libjpeg"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_JPEG_DIR" != "no"; then for i in /usr /usr/local $PHP_JPEG_DIR; do test -f $i/lib/libjpeg.$SHLIB_SUFFIX_NAME -o -f $i/lib/libjpeg.a && GD_JPEG_DIR=$i done if test -z "$GD_JPEG_DIR"; then { echo "configure: error: libjpeg.(a|so) not found." 1>&2; exit 1; } fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_JPEG_DIR/lib $LDFLAGS" echo $ac_n "checking for jpeg_read_header in -ljpeg""... $ac_c" 1>&6 echo "configure:23013: checking for jpeg_read_header in -ljpeg" >&5 ac_lib_var=`echo jpeg'_'jpeg_read_header | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ljpeg $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS if test "$ext_shared" = "yes"; then GD_SHARED_LIBADD="-ljpeg $GD_SHARED_LIBADD" if test -n "$GD_JPEG_DIR/lib"; then if test "$GD_JPEG_DIR/lib" != "/usr/lib"; then if test -z "$GD_JPEG_DIR/lib" || echo "$GD_JPEG_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$GD_JPEG_DIR/lib else ep_dir="`echo $GD_JPEG_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_JPEG_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "GD_SHARED_LIBADD"; then GD_SHARED_LIBADD="-R$GD_JPEG_DIR/lib -L$GD_JPEG_DIR/lib $GD_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$GD_JPEG_DIR/lib"; then if test "$GD_JPEG_DIR/lib" != "/usr/lib"; then if test -z "$GD_JPEG_DIR/lib" || echo "$GD_JPEG_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$GD_JPEG_DIR/lib else ep_dir="`echo $GD_JPEG_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_JPEG_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$GD_JPEG_DIR/lib -L$GD_JPEG_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case jpeg in c|c_r|pthread*) ;; *) LIBS="-ljpeg $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: Problem with libjpeg.(a|so). Please check config.log for more information." 1>&2; exit 1; } fi else echo "$ac_t""If configure fails try --with-jpeg-dir=" 1>&6 fi if test -n "for the location of libpng"; then echo $ac_n "checking for the location of libpng""... $ac_c" 1>&6 echo "configure:23165: checking for the location of libpng" >&5 fi # Check whether --with-png-dir or --without-png-dir was given. if test "${with_png_dir+set}" = set; then withval="$with_png_dir" PHP_PNG_DIR=$withval else PHP_PNG_DIR=no fi case $PHP_PNG_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_PNG_DIR=`echo "$PHP_PNG_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_PNG_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_PNG_DIR" = "no" && PHP_PNG_DIR=yes fi if test -n "for the location of libpng"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_PNG_DIR" != "no"; then for i in /usr /usr/local $PHP_PNG_DIR; do test -f $i/lib/libpng.$SHLIB_SUFFIX_NAME -o -f $i/lib/libpng.a && GD_PNG_DIR=$i done if test -z "$GD_PNG_DIR"; then { echo "configure: error: libpng.(a|so) not found." 1>&2; exit 1; } fi if test "$PHP_ZLIB_DIR" = "no"; then { echo "configure: error: PNG support requires ZLIB. Use --with-zlib-dir=" 1>&2; exit 1; } fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$PHP_ZLIB_DIR/lib -lz -L$GD_PNG_DIR/lib $LDFLAGS" echo $ac_n "checking for png_write_image in -lpng""... $ac_c" 1>&6 echo "configure:23230: checking for png_write_image in -lpng" >&5 ac_lib_var=`echo png'_'png_write_image | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpng $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS if test "$ext_shared" = "yes"; then GD_SHARED_LIBADD="-lz $GD_SHARED_LIBADD" if test -n "$PHP_ZLIB_DIR/lib"; then if test "$PHP_ZLIB_DIR/lib" != "/usr/lib"; then if test -z "$PHP_ZLIB_DIR/lib" || echo "$PHP_ZLIB_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_ZLIB_DIR/lib else ep_dir="`echo $PHP_ZLIB_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_ZLIB_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "GD_SHARED_LIBADD"; then GD_SHARED_LIBADD="-R$PHP_ZLIB_DIR/lib -L$PHP_ZLIB_DIR/lib $GD_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PHP_ZLIB_DIR/lib"; then if test "$PHP_ZLIB_DIR/lib" != "/usr/lib"; then if test -z "$PHP_ZLIB_DIR/lib" || echo "$PHP_ZLIB_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_ZLIB_DIR/lib else ep_dir="`echo $PHP_ZLIB_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_ZLIB_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PHP_ZLIB_DIR/lib -L$PHP_ZLIB_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case z in c|c_r|pthread*) ;; *) LIBS="-lz $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then GD_SHARED_LIBADD="-lpng $GD_SHARED_LIBADD" if test -n "$GD_PNG_DIR/lib"; then if test "$GD_PNG_DIR/lib" != "/usr/lib"; then if test -z "$GD_PNG_DIR/lib" || echo "$GD_PNG_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$GD_PNG_DIR/lib else ep_dir="`echo $GD_PNG_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_PNG_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "GD_SHARED_LIBADD"; then GD_SHARED_LIBADD="-R$GD_PNG_DIR/lib -L$GD_PNG_DIR/lib $GD_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$GD_PNG_DIR/lib"; then if test "$GD_PNG_DIR/lib" != "/usr/lib"; then if test -z "$GD_PNG_DIR/lib" || echo "$GD_PNG_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$GD_PNG_DIR/lib else ep_dir="`echo $GD_PNG_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_PNG_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$GD_PNG_DIR/lib -L$GD_PNG_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case png in c|c_r|pthread*) ;; *) LIBS="-lpng $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: Problem with libpng.(a|so) or libz.(a|so). Please check config.log for more information." 1>&2; exit 1; } fi else echo "$ac_t""If configure fails try --with-png-dir= and --with-zlib-dir=" 1>&6 fi if test -n "for the location of libXpm"; then echo $ac_n "checking for the location of libXpm""... $ac_c" 1>&6 echo "configure:23477: checking for the location of libXpm" >&5 fi # Check whether --with-xpm-dir or --without-xpm-dir was given. if test "${with_xpm_dir+set}" = set; then withval="$with_xpm_dir" PHP_XPM_DIR=$withval else PHP_XPM_DIR=no fi case $PHP_XPM_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_XPM_DIR=`echo "$PHP_XPM_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_XPM_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_XPM_DIR" = "no" && PHP_XPM_DIR=yes fi if test -n "for the location of libXpm"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_XPM_DIR" != "no"; then for i in /usr /usr/local /usr/X11R6 $PHP_XPM_DIR; do test -f $i/lib/libXpm.$SHLIB_SUFFIX_NAME -o -f $i/lib/libXpm.a && GD_XPM_DIR=$i done if test -z "$GD_XPM_DIR"; then { echo "configure: error: libXpm.(a|so) not found." 1>&2; exit 1; } fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_XPM_DIR/lib -lX11 $LDFLAGS" echo $ac_n "checking for XpmFreeXpmImage in -lXpm""... $ac_c" 1>&6 echo "configure:23538: checking for XpmFreeXpmImage in -lXpm" >&5 ac_lib_var=`echo Xpm'_'XpmFreeXpmImage | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lXpm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS if test "$ext_shared" = "yes"; then GD_SHARED_LIBADD="-lXpm $GD_SHARED_LIBADD" if test -n "$GD_XPM_DIR/lib"; then if test "$GD_XPM_DIR/lib" != "/usr/lib"; then if test -z "$GD_XPM_DIR/lib" || echo "$GD_XPM_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$GD_XPM_DIR/lib else ep_dir="`echo $GD_XPM_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_XPM_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "GD_SHARED_LIBADD"; then GD_SHARED_LIBADD="-R$GD_XPM_DIR/lib -L$GD_XPM_DIR/lib $GD_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$GD_XPM_DIR/lib"; then if test "$GD_XPM_DIR/lib" != "/usr/lib"; then if test -z "$GD_XPM_DIR/lib" || echo "$GD_XPM_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$GD_XPM_DIR/lib else ep_dir="`echo $GD_XPM_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_XPM_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$GD_XPM_DIR/lib -L$GD_XPM_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case Xpm in c|c_r|pthread*) ;; *) LIBS="-lXpm $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then GD_SHARED_LIBADD="-lX11 $GD_SHARED_LIBADD" if test -n "$GD_XPM_DIR/lib"; then if test "$GD_XPM_DIR/lib" != "/usr/lib"; then if test -z "$GD_XPM_DIR/lib" || echo "$GD_XPM_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$GD_XPM_DIR/lib else ep_dir="`echo $GD_XPM_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_XPM_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "GD_SHARED_LIBADD"; then GD_SHARED_LIBADD="-R$GD_XPM_DIR/lib -L$GD_XPM_DIR/lib $GD_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$GD_XPM_DIR/lib"; then if test "$GD_XPM_DIR/lib" != "/usr/lib"; then if test -z "$GD_XPM_DIR/lib" || echo "$GD_XPM_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$GD_XPM_DIR/lib else ep_dir="`echo $GD_XPM_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_XPM_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$GD_XPM_DIR/lib -L$GD_XPM_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case X11 in c|c_r|pthread*) ;; *) LIBS="-lX11 $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: Problem with libXpm.(a|so) or libX11.(a|so). Please check config.log for more information." 1>&2; exit 1; } fi else echo "$ac_t""If configure fails try --with-xpm-dir=" 1>&6 fi if test -n "for freetype(2)"; then echo $ac_n "checking for freetype(2)""... $ac_c" 1>&6 echo "configure:23784: checking for freetype(2)" >&5 fi # Check whether --with-freetype-dir or --without-freetype-dir was given. if test "${with_freetype_dir+set}" = set; then withval="$with_freetype_dir" PHP_FREETYPE_DIR=$withval else PHP_FREETYPE_DIR=no fi case $PHP_FREETYPE_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_FREETYPE_DIR=`echo "$PHP_FREETYPE_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_FREETYPE_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_FREETYPE_DIR" = "no" && PHP_FREETYPE_DIR=yes fi if test -n "for freetype(2)"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_FREETYPE_DIR" != "no"; then for i in /usr /usr/local $PHP_FREETYPE_DIR; do if test -f "$i/include/freetype2/freetype/freetype.h"; then FREETYPE2_DIR=$i FREETYPE2_INC_DIR=$i/include/freetype2/freetype fi done if test -n "$FREETYPE2_DIR" ; then if test "$ext_shared" = "yes"; then GD_SHARED_LIBADD="-lfreetype $GD_SHARED_LIBADD" if test -n "$FREETYPE2_DIR/lib"; then if test "$FREETYPE2_DIR/lib" != "/usr/lib"; then if test -z "$FREETYPE2_DIR/lib" || echo "$FREETYPE2_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$FREETYPE2_DIR/lib else ep_dir="`echo $FREETYPE2_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$FREETYPE2_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "GD_SHARED_LIBADD"; then GD_SHARED_LIBADD="-R$FREETYPE2_DIR/lib -L$FREETYPE2_DIR/lib $GD_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$FREETYPE2_DIR/lib"; then if test "$FREETYPE2_DIR/lib" != "/usr/lib"; then if test -z "$FREETYPE2_DIR/lib" || echo "$FREETYPE2_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$FREETYPE2_DIR/lib else ep_dir="`echo $FREETYPE2_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$FREETYPE2_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$FREETYPE2_DIR/lib -L$FREETYPE2_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case freetype in c|c_r|pthread*) ;; *) LIBS="-lfreetype $LIBS" ;; esac fi if test "$FREETYPE2_INC_DIR" != "/usr/include"; then if test -z "$FREETYPE2_INC_DIR" || echo "$FREETYPE2_INC_DIR" | grep '^/' >/dev/null ; then ai_p=$FREETYPE2_INC_DIR else ep_dir="`echo $FREETYPE2_INC_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$FREETYPE2_INC_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define USE_GD_IMGSTRTTF 1 EOF cat >> confdefs.h <<\EOF #define HAVE_LIBFREETYPE 1 EOF else { echo "configure: error: freetype2 not found!" 1>&2; exit 1; } fi else echo "$ac_t""If configure fails try --with-freetype-dir=" 1>&6 fi if test -n "for FreeType 1.x support"; then echo $ac_n "checking for FreeType 1.x support""... $ac_c" 1>&6 echo "configure:23983: checking for FreeType 1.x support" >&5 fi # Check whether --with-ttf or --without-ttf was given. if test "${with_ttf+set}" = set; then withval="$with_ttf" PHP_TTF=$withval else PHP_TTF=no fi case $PHP_TTF in shared,*) ext_output="yes, shared" ext_shared=yes PHP_TTF=`echo "$PHP_TTF"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_TTF=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_TTF" = "no" && PHP_TTF=yes fi if test -n "for FreeType 1.x support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_TTF" != "no"; then if test "$PHP_FREETYPE_DIR" = "no" -o "$PHP_FREETYPE_DIR" = ""; then if test -n "$PHP_TTF" ; then for i in /usr /usr/local $PHP_TTF; do if test -f "$i/include/freetype.h" ; then TTF_DIR=$i unset TTF_INC_DIR fi if test -f "$i/include/freetype/freetype.h"; then TTF_DIR=$i TTF_INC_DIR=$i/include/freetype fi done fi if test -n "$TTF_DIR" ; then cat >> confdefs.h <<\EOF #define HAVE_LIBTTF 1 EOF if test "$ext_shared" = "yes"; then GD_SHARED_LIBADD="-lttf $GD_SHARED_LIBADD" if test -n "$TTF_DIR/lib"; then if test "$TTF_DIR/lib" != "/usr/lib"; then if test -z "$TTF_DIR/lib" || echo "$TTF_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$TTF_DIR/lib else ep_dir="`echo $TTF_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$TTF_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "GD_SHARED_LIBADD"; then GD_SHARED_LIBADD="-R$TTF_DIR/lib -L$TTF_DIR/lib $GD_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$TTF_DIR/lib"; then if test "$TTF_DIR/lib" != "/usr/lib"; then if test -z "$TTF_DIR/lib" || echo "$TTF_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$TTF_DIR/lib else ep_dir="`echo $TTF_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$TTF_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$TTF_DIR/lib -L$TTF_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ttf in c|c_r|pthread*) ;; *) LIBS="-lttf $LIBS" ;; esac fi fi if test -z "$TTF_INC_DIR"; then TTF_INC_DIR=$TTF_DIR/include fi if test "$TTF_INC_DIR" != "/usr/include"; then if test -z "$TTF_INC_DIR" || echo "$TTF_INC_DIR" | grep '^/' >/dev/null ; then ai_p=$TTF_INC_DIR else ep_dir="`echo $TTF_INC_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$TTF_INC_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi else echo "$ac_t""no - FreeType 2.x is to be used instead" 1>&6 fi fi if test -n "for T1lib support"; then echo $ac_n "checking for T1lib support""... $ac_c" 1>&6 echo "configure:24186: checking for T1lib support" >&5 fi # Check whether --with-t1lib or --without-t1lib was given. if test "${with_t1lib+set}" = set; then withval="$with_t1lib" PHP_T1LIB=$withval else PHP_T1LIB=no fi case $PHP_T1LIB in shared,*) ext_output="yes, shared" ext_shared=yes PHP_T1LIB=`echo "$PHP_T1LIB"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_T1LIB=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_T1LIB" = "no" && PHP_T1LIB=yes fi if test -n "for T1lib support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_T1LIB" != "no"; then for i in /usr /usr/local $PHP_T1LIB; do test -f "$i/include/t1lib.h" && GD_T1_DIR=$i done if test -z "$GD_T1_DIR"; then { echo "configure: error: Your t1lib distribution is not installed correctly. Please reinstall it." 1>&2; exit 1; } fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_T1_DIR/lib $LDFLAGS" echo $ac_n "checking for T1_LoadFont in -lt1""... $ac_c" 1>&6 echo "configure:24247: checking for T1_LoadFont in -lt1" >&5 ac_lib_var=`echo t1'_'T1_LoadFont | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lt1 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_LIBT1 1 EOF if test ""$GD_T1_DIR/include"" != "/usr/include"; then if test -z ""$GD_T1_DIR/include"" || echo ""$GD_T1_DIR/include"" | grep '^/' >/dev/null ; then ai_p="$GD_T1_DIR/include" else ep_dir="`echo "$GD_T1_DIR/include"|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \""$GD_T1_DIR/include"\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then GD_SHARED_LIBADD="-lt1 $GD_SHARED_LIBADD" if test -n ""$GD_T1_DIR/lib""; then if test ""$GD_T1_DIR/lib"" != "/usr/lib"; then if test -z ""$GD_T1_DIR/lib"" || echo ""$GD_T1_DIR/lib"" | grep '^/' >/dev/null ; then ai_p="$GD_T1_DIR/lib" else ep_dir="`echo "$GD_T1_DIR/lib"|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \""$GD_T1_DIR/lib"\"`" fi if test "$ext_shared" = "yes" && test -n "GD_SHARED_LIBADD"; then GD_SHARED_LIBADD="-R"$GD_T1_DIR/lib" -L"$GD_T1_DIR/lib" $GD_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n ""$GD_T1_DIR/lib""; then if test ""$GD_T1_DIR/lib"" != "/usr/lib"; then if test -z ""$GD_T1_DIR/lib"" || echo ""$GD_T1_DIR/lib"" | grep '^/' >/dev/null ; then ai_p="$GD_T1_DIR/lib" else ep_dir="`echo "$GD_T1_DIR/lib"|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \""$GD_T1_DIR/lib"\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R"$GD_T1_DIR/lib" -L"$GD_T1_DIR/lib" $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case t1 in c|c_r|pthread*) ;; *) LIBS="-lt1 $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: Problem with libt1.(a|so). Please check config.log for more information." 1>&2; exit 1; } fi fi if test "$PHP_GD" = "yes"; then GD_SEARCH_PATHS="/usr/local /usr" else GD_SEARCH_PATHS=$PHP_GD fi for j in $GD_SEARCH_PATHS; do for i in include/gd1.3 include/gd include gd1.3 gd ""; do test -f $j/$i/gd.h && GD_INCLUDE=$j/$i done for i in lib/gd1.3 lib/gd lib gd1.3 gd ""; do test -f $j/$i/libgd.$SHLIB_SUFFIX_NAME -o -f $j/$i/libgd.a && GD_LIB=$j/$i done done if test -n "$GD_INCLUDE" -a -n "$GD_LIB" ; then if test "$ext_shared" = "yes"; then GD_SHARED_LIBADD="-lgd $GD_SHARED_LIBADD" if test -n "$GD_LIB"; then if test "$GD_LIB" != "/usr/lib"; then if test -z "$GD_LIB" || echo "$GD_LIB" | grep '^/' >/dev/null ; then ai_p=$GD_LIB else ep_dir="`echo $GD_LIB|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_LIB\"`" fi if test "$ext_shared" = "yes" && test -n "GD_SHARED_LIBADD"; then GD_SHARED_LIBADD="-R$GD_LIB -L$GD_LIB $GD_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$GD_LIB"; then if test "$GD_LIB" != "/usr/lib"; then if test -z "$GD_LIB" || echo "$GD_LIB" | grep '^/' >/dev/null ; then ai_p=$GD_LIB else ep_dir="`echo $GD_LIB|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_LIB\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$GD_LIB -L$GD_LIB $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case gd in c|c_r|pthread*) ;; *) LIBS="-lgd $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_LIBGD 1 EOF save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageString16 in -lgd""... $ac_c" 1>&6 echo "configure:24548: checking for gdImageString16 in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageString16 | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_LIBGD13 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImagePaletteCopy in -lgd""... $ac_c" 1>&6 echo "configure:24601: checking for gdImagePaletteCopy in -lgd" >&5 ac_lib_var=`echo gd'_'gdImagePaletteCopy | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_LIBGD15 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageCreateFromPng in -lgd""... $ac_c" 1>&6 echo "configure:24654: checking for gdImageCreateFromPng in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageCreateFromPng | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_PNG 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageCreateFromGif in -lgd""... $ac_c" 1>&6 echo "configure:24707: checking for gdImageCreateFromGif in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageCreateFromGif | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_GIF_READ 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageGif in -lgd""... $ac_c" 1>&6 echo "configure:24760: checking for gdImageGif in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageGif | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_GIF_CREATE 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageWBMP in -lgd""... $ac_c" 1>&6 echo "configure:24813: checking for gdImageWBMP in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageWBMP | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_WBMP 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageCreateFromJpeg in -lgd""... $ac_c" 1>&6 echo "configure:24866: checking for gdImageCreateFromJpeg in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageCreateFromJpeg | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_JPG 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageCreateFromXpm in -lgd""... $ac_c" 1>&6 echo "configure:24919: checking for gdImageCreateFromXpm in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageCreateFromXpm | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_XPM 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageCreateFromGd2 in -lgd""... $ac_c" 1>&6 echo "configure:24972: checking for gdImageCreateFromGd2 in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageCreateFromGd2 | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_GD2 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageCreateTrueColor in -lgd""... $ac_c" 1>&6 echo "configure:25025: checking for gdImageCreateTrueColor in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageCreateTrueColor | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_LIBGD20 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageSetTile in -lgd""... $ac_c" 1>&6 echo "configure:25078: checking for gdImageSetTile in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageSetTile | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_IMAGESETTILE 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageSetBrush in -lgd""... $ac_c" 1>&6 echo "configure:25131: checking for gdImageSetBrush in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageSetBrush | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_IMAGESETBRUSH 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageStringTTF in -lgd""... $ac_c" 1>&6 echo "configure:25184: checking for gdImageStringTTF in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageStringTTF | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_STRINGTTF 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageStringFT in -lgd""... $ac_c" 1>&6 echo "configure:25237: checking for gdImageStringFT in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageStringFT | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_STRINGFT 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageStringFTEx in -lgd""... $ac_c" 1>&6 echo "configure:25290: checking for gdImageStringFTEx in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageStringFTEx | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_STRINGFTEX 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageColorClosestHWB in -lgd""... $ac_c" 1>&6 echo "configure:25343: checking for gdImageColorClosestHWB in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageColorClosestHWB | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_COLORCLOSESTHWB 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageColorResolve in -lgd""... $ac_c" 1>&6 echo "configure:25396: checking for gdImageColorResolve in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageColorResolve | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GDIMAGECOLORRESOLVE 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$GD_LIB $GD_SHARED_LIBADD $LDFLAGS" echo $ac_n "checking for gdImageGifCtx in -lgd""... $ac_c" 1>&6 echo "configure:25449: checking for gdImageGifCtx in -lgd" >&5 ac_lib_var=`echo gd'_'gdImageGifCtx | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lgd $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_GD_GIF_CTX 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi else { echo "configure: error: Unable to find libgd.(a|so) anywhere under $GD_SEARCH_PATHS" 1>&2; exit 1; } fi if test -f /usr/pkg/include/gd/gd.h -a -z "$GD_INCLUDE" ; then GD_INCLUDE=/usr/pkg/include/gd fi if test -f /usr/include/gd/gd.h -a -z "$GD_INCLUDE" ; then GD_INCLUDE=/usr/include/gd fi if test -z "$GD_INCLUDE" || echo "$GD_INCLUDE" | grep '^/' >/dev/null ; then GD_INCLUDE=$GD_INCLUDE else ep_dir="`echo $GD_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" GD_INCLUDE="$ep_realdir/`basename \"$GD_INCLUDE\"`" fi if test "$GD_INCLUDE" != "/usr/include"; then if test -z "$GD_INCLUDE" || echo "$GD_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$GD_INCLUDE else ep_dir="`echo $GD_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GD_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -n "for GNU gettext support"; then echo $ac_n "checking for GNU gettext support""... $ac_c" 1>&6 echo "configure:25561: checking for GNU gettext support" >&5 fi # Check whether --with-gettext or --without-gettext was given. if test "${with_gettext+set}" = set; then withval="$with_gettext" PHP_GETTEXT=$withval else PHP_GETTEXT=no fi case $PHP_GETTEXT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_GETTEXT=`echo "$PHP_GETTEXT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_GETTEXT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_GETTEXT" = "no" && PHP_GETTEXT=yes fi if test -n "for GNU gettext support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_GETTEXT" != "no"; then for i in /usr /usr/local $PHP_GETTEXT; do if test -r $i/include/libintl.h; then GETTEXT_DIR=$i fi done if test -z "$GETTEXT_DIR"; then { echo "configure: error: Cannot locate header file libintl.h" 1>&2; exit 1; } fi GETTEXT_LIBDIR=$GETTEXT_DIR/lib GETTEXT_INCDIR=$GETTEXT_DIR/include O_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -L$GETTEXT_LIBDIR" echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6 echo "configure:25623: checking for bindtextdomain in -lintl" >&5 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 GETTEXT_LIBS=intl GETTEXT_CHECK_IN_LIB=intl else echo "$ac_t""no" 1>&6 echo $ac_n "checking for bindtextdomain in -lc""... $ac_c" 1>&6 echo "configure:25664: checking for bindtextdomain in -lc" >&5 ac_lib_var=`echo c'_'bindtextdomain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lc $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 GETTEXT_LIBS= GETTEXT_CHECK_IN_LIB=c else echo "$ac_t""no" 1>&6 { echo "configure: error: Unable to find required gettext library" 1>&2; exit 1; } fi fi LDFLAGS=$O_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_LIBINTL 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS gettext" if test -d "$abs_srcdir/ext/gettext"; then ext_builddir=ext/gettext ext_srcdir=$abs_srcdir/ext/gettext else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile</dev/null ; then ai_p=$GETTEXT_LIBDIR else ep_dir="`echo $GETTEXT_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GETTEXT_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "GETTEXT_SHARED_LIBADD"; then GETTEXT_SHARED_LIBADD="-R$GETTEXT_LIBDIR -L$GETTEXT_LIBDIR $GETTEXT_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$GETTEXT_LIBDIR"; then if test "$GETTEXT_LIBDIR" != "/usr/lib"; then if test -z "$GETTEXT_LIBDIR" || echo "$GETTEXT_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$GETTEXT_LIBDIR else ep_dir="`echo $GETTEXT_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GETTEXT_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$GETTEXT_LIBDIR -L$GETTEXT_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $GETTEXT_LIBS in c|c_r|pthread*) ;; *) LIBS="-l$GETTEXT_LIBS $LIBS" ;; esac fi fi if test "$GETTEXT_INCDIR" != "/usr/include"; then if test -z "$GETTEXT_INCDIR" || echo "$GETTEXT_INCDIR" | grep '^/' >/dev/null ; then ai_p=$GETTEXT_INCDIR else ep_dir="`echo $GETTEXT_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GETTEXT_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi echo $ac_n "checking for ngettext in -l$GETTEXT_CHECK_IN_LIB""... $ac_c" 1>&6 echo "configure:26057: checking for ngettext in -l$GETTEXT_CHECK_IN_LIB" >&5 ac_lib_var=`echo $GETTEXT_CHECK_IN_LIB'_'ngettext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$GETTEXT_CHECK_IN_LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_NGETTEXT 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for dngettext in -l$GETTEXT_CHECK_IN_LIB""... $ac_c" 1>&6 echo "configure:26100: checking for dngettext in -l$GETTEXT_CHECK_IN_LIB" >&5 ac_lib_var=`echo $GETTEXT_CHECK_IN_LIB'_'dngettext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$GETTEXT_CHECK_IN_LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_DNGETTEXT 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for dcngettext in -l$GETTEXT_CHECK_IN_LIB""... $ac_c" 1>&6 echo "configure:26143: checking for dcngettext in -l$GETTEXT_CHECK_IN_LIB" >&5 ac_lib_var=`echo $GETTEXT_CHECK_IN_LIB'_'dcngettext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$GETTEXT_CHECK_IN_LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_DCNGETTEXT 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for bind_textdomain_codeset in -l$GETTEXT_CHECK_IN_LIB""... $ac_c" 1>&6 echo "configure:26186: checking for bind_textdomain_codeset in -l$GETTEXT_CHECK_IN_LIB" >&5 ac_lib_var=`echo $GETTEXT_CHECK_IN_LIB'_'bind_textdomain_codeset | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$GETTEXT_CHECK_IN_LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 EOF else echo "$ac_t""no" 1>&6 fi fi if test -n "for GNU MP support"; then echo $ac_n "checking for GNU MP support""... $ac_c" 1>&6 echo "configure:26236: checking for GNU MP support" >&5 fi # Check whether --with-gmp or --without-gmp was given. if test "${with_gmp+set}" = set; then withval="$with_gmp" PHP_GMP=$withval else PHP_GMP=no fi case $PHP_GMP in shared,*) ext_output="yes, shared" ext_shared=yes PHP_GMP=`echo "$PHP_GMP"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_GMP=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_GMP" = "no" && PHP_GMP=yes fi if test -n "for GNU MP support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_GMP" != "no"; then for i in /usr/local /usr $PHP_GMP; do if test -f $i/include/gmp.h; then GMP_DIR=$i fi done if test -z "$GMP_DIR"; then { echo "configure: error: Unable to locate gmp.h" 1>&2; exit 1; } fi if test "$GMP_DIR/include" != "/usr/include"; then if test -z "$GMP_DIR/include" || echo "$GMP_DIR/include" | grep '^/' >/dev/null ; then ai_p=$GMP_DIR/include else ep_dir="`echo $GMP_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GMP_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi EXT_SUBDIRS="$EXT_SUBDIRS gmp" if test -d "$abs_srcdir/ext/gmp"; then ext_builddir=ext/gmp ext_srcdir=$abs_srcdir/ext/gmp else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_GMP 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST GMP_SHARED_LIBADD" if test "$ext_shared" = "yes"; then GMP_SHARED_LIBADD="-lgmp $GMP_SHARED_LIBADD" if test -n "$GMP_DIR/lib"; then if test "$GMP_DIR/lib" != "/usr/lib"; then if test -z "$GMP_DIR/lib" || echo "$GMP_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$GMP_DIR/lib else ep_dir="`echo $GMP_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GMP_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "GMP_SHARED_LIBADD"; then GMP_SHARED_LIBADD="-R$GMP_DIR/lib -L$GMP_DIR/lib $GMP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$GMP_DIR/lib"; then if test "$GMP_DIR/lib" != "/usr/lib"; then if test -z "$GMP_DIR/lib" || echo "$GMP_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$GMP_DIR/lib else ep_dir="`echo $GMP_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$GMP_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$GMP_DIR/lib -L$GMP_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case gmp in c|c_r|pthread*) ;; *) LIBS="-lgmp $LIBS" ;; esac fi fi echo $ac_n "checking for Hyperwave support""... $ac_c" 1>&6 echo "configure:26634: checking for Hyperwave support" >&5 # Check whether --with-hyperwave or --without-hyperwave was given. if test "${with_hyperwave+set}" = set; then withval="$with_hyperwave" if test "$withval" != "no"; then cat >> confdefs.h <<\EOF #define HYPERWAVE 1 EOF echo "$ac_t""yes" 1>&6 EXT_SUBDIRS="$EXT_SUBDIRS hyperwave" if test -d "$abs_srcdir/ext/hyperwave"; then ext_builddir=ext/hyperwave ext_srcdir=$abs_srcdir/ext/hyperwave else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "" != "shared" && test "" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HYPERWAVE 0 EOF echo "$ac_t""no" 1>&6 fi else cat >> confdefs.h <<\EOF #define HYPERWAVE 0 EOF echo "$ac_t""no" 1>&6 fi if test -n "for ICAP support"; then echo $ac_n "checking for ICAP support""... $ac_c" 1>&6 echo "configure:26874: checking for ICAP support" >&5 fi # Check whether --with-icap or --without-icap was given. if test "${with_icap+set}" = set; then withval="$with_icap" PHP_ICAP=$withval else PHP_ICAP=no fi case $PHP_ICAP in shared,*) ext_output="yes, shared" ext_shared=yes PHP_ICAP=`echo "$PHP_ICAP"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_ICAP=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_ICAP" = "no" && PHP_ICAP=yes fi if test -n "for ICAP support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_ICAP" != "no"; then ICAP_DIR=$PHP_ICAP test "$ICAP_DIR" = "yes" && ICAP_DIR=/usr/local if test "$ICAP_DIR" != "/usr/include"; then if test -z "$ICAP_DIR" || echo "$ICAP_DIR" | grep '^/' >/dev/null ; then ai_p=$ICAP_DIR else ep_dir="`echo $ICAP_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICAP_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST ICAP_SHARED_LIBADD" if test "$ext_shared" = "yes"; then ICAP_SHARED_LIBADD="-licap $ICAP_SHARED_LIBADD" if test -n "$ICAP_DIR"; then if test "$ICAP_DIR" != "/usr/lib"; then if test -z "$ICAP_DIR" || echo "$ICAP_DIR" | grep '^/' >/dev/null ; then ai_p=$ICAP_DIR else ep_dir="`echo $ICAP_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICAP_DIR\"`" fi if test "$ext_shared" = "yes" && test -n "ICAP_SHARED_LIBADD"; then ICAP_SHARED_LIBADD="-R$ICAP_DIR -L$ICAP_DIR $ICAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ICAP_DIR"; then if test "$ICAP_DIR" != "/usr/lib"; then if test -z "$ICAP_DIR" || echo "$ICAP_DIR" | grep '^/' >/dev/null ; then ai_p=$ICAP_DIR else ep_dir="`echo $ICAP_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICAP_DIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ICAP_DIR -L$ICAP_DIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case icap in c|c_r|pthread*) ;; *) LIBS="-licap $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_ICAP 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS icap" if test -d "$abs_srcdir/ext/icap"; then ext_builddir=ext/icap ext_srcdir=$abs_srcdir/ext/icap else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:27267: checking for iconv support" >&5 fi # Check whether --with-iconv or --without-iconv was given. if test "${with_iconv+set}" = set; then withval="$with_iconv" PHP_ICONV=$withval else PHP_ICONV=no fi case $PHP_ICONV in shared,*) ext_output="yes, shared" ext_shared=yes PHP_ICONV=`echo "$PHP_ICONV"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_ICONV=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_ICONV" = "no" && PHP_ICONV=yes fi if test -n "for iconv support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_ICONV" != "no"; then found_iconv=no unset ICONV_DIR if test "$PHP_ICONV" = "yes"; then echo $ac_n "checking for iconv""... $ac_c" 1>&6 echo "configure:27320: checking for iconv" >&5 if eval "test \"`echo '$''{'ac_cv_func_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char iconv(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_iconv) || defined (__stub___iconv) choke me #else iconv(); #endif ; return 0; } EOF if { (eval echo configure:27348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_iconv=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_iconv=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'iconv`\" = yes"; then echo "$ac_t""yes" 1>&6 found_iconv=yes else echo "$ac_t""no" 1>&6 echo $ac_n "checking for libiconv""... $ac_c" 1>&6 echo "configure:27369: checking for libiconv" >&5 if eval "test \"`echo '$''{'ac_cv_func_libiconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char libiconv(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_libiconv) || defined (__stub___libiconv) choke me #else libiconv(); #endif ; return 0; } EOF if { (eval echo configure:27397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_libiconv=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_libiconv=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'libiconv`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_LIBICONV 1 EOF found_iconv=yes else echo "$ac_t""no" 1>&6 fi fi fi if test "$found_iconv" = "no"; then for i in $PHP_ICONV /usr/local /usr; do if test -r $i/include/giconv.h; then cat >> confdefs.h <<\EOF #define HAVE_GICONV_H 1 EOF ICONV_DIR=$i iconv_lib_name=giconv break elif test -r $i/include/iconv.h; then ICONV_DIR=$i iconv_lib_name=iconv break fi done if test -z "$ICONV_DIR"; then { echo "configure: error: Please specify the install prefix of iconv with --with-iconv=" 1>&2; exit 1; } fi if test -f $ICONV_DIR/lib/lib$iconv_lib_name.a || test -f $ICONV_DIR/lib/lib$iconv_lib_name.$SHLIB_SUFFIX_NAME then save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$ICONV_DIR/lib $LDFLAGS" echo $ac_n "checking for libiconv in -l$iconv_lib_name""... $ac_c" 1>&6 echo "configure:27458: checking for libiconv in -l$iconv_lib_name" >&5 ac_lib_var=`echo $iconv_lib_name'_'libiconv | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$iconv_lib_name $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS found_iconv=yes cat >> confdefs.h <<\EOF #define HAVE_LIBICONV 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$ICONV_DIR/lib $LDFLAGS" echo $ac_n "checking for iconv in -l$iconv_lib_name""... $ac_c" 1>&6 echo "configure:27513: checking for iconv in -l$iconv_lib_name" >&5 ac_lib_var=`echo $iconv_lib_name'_'iconv | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$iconv_lib_name $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS found_iconv=yes else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi fi fi fi if test "$found_iconv" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_ICONV 1 EOF if test -n "$ICONV_DIR"; then if test "$ext_shared" = "yes"; then ICONV_SHARED_LIBADD="-l$iconv_lib_name $ICONV_SHARED_LIBADD" if test -n "$ICONV_DIR/lib"; then if test "$ICONV_DIR/lib" != "/usr/lib"; then if test -z "$ICONV_DIR/lib" || echo "$ICONV_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ICONV_DIR/lib else ep_dir="`echo $ICONV_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICONV_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ICONV_SHARED_LIBADD"; then ICONV_SHARED_LIBADD="-R$ICONV_DIR/lib -L$ICONV_DIR/lib $ICONV_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ICONV_DIR/lib"; then if test "$ICONV_DIR/lib" != "/usr/lib"; then if test -z "$ICONV_DIR/lib" || echo "$ICONV_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ICONV_DIR/lib else ep_dir="`echo $ICONV_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICONV_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ICONV_DIR/lib -L$ICONV_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $iconv_lib_name in c|c_r|pthread*) ;; *) LIBS="-l$iconv_lib_name $LIBS" ;; esac fi if test "$ICONV_DIR/include" != "/usr/include"; then if test -z "$ICONV_DIR/include" || echo "$ICONV_DIR/include" | grep '^/' >/dev/null ; then ai_p=$ICONV_DIR/include else ep_dir="`echo $ICONV_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICONV_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi EXT_SUBDIRS="$EXT_SUBDIRS iconv" if test -d "$abs_srcdir/ext/iconv"; then ext_builddir=ext/iconv ext_srcdir=$abs_srcdir/ext/iconv else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi fi if test -n "for IMAP support"; then echo $ac_n "checking for IMAP support""... $ac_c" 1>&6 echo "configure:27932: checking for IMAP support" >&5 fi # Check whether --with-imap or --without-imap was given. if test "${with_imap+set}" = set; then withval="$with_imap" PHP_IMAP=$withval else PHP_IMAP=no fi case $PHP_IMAP in shared,*) ext_output="yes, shared" ext_shared=yes PHP_IMAP=`echo "$PHP_IMAP"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_IMAP=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_IMAP" = "no" && PHP_IMAP=yes fi if test -n "for IMAP support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_IMAP" != "no"; then PHP_VAR_SUBST="$PHP_VAR_SUBST IMAP_SHARED_LIBADD" EXT_SUBDIRS="$EXT_SUBDIRS imap" if test -d "$abs_srcdir/ext/imap"; then ext_builddir=ext/imap ext_srcdir=$abs_srcdir/ext/imap else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_IMAP 1 EOF for i in /usr/local /usr $PHP_IMAP; do if test -r "$i/c-client.h"; then cat >> confdefs.h <<\EOF #define HAVE_IMAP2000 1 EOF IMAP_DIR=$i IMAP_INC_DIR=$i elif test -r "$i/rfc822.h"; then IMAP_DIR=$i; IMAP_INC_DIR=$i elif test -r "$i/include/c-client/c-client.h"; then cat >> confdefs.h <<\EOF #define HAVE_IMAP2000 1 EOF IMAP_DIR=$i IMAP_INC_DIR=$i/include/c-client elif test -r "$i/include/c-client/rfc822.h"; then IMAP_DIR=$i; IMAP_INC_DIR=$i/include/c-client elif test -r "$i/include/imap/c-client.h"; then cat >> confdefs.h <<\EOF #define HAVE_IMAP2000 1 EOF IMAP_DIR=$i IMAP_INC_DIR=$i/include/imap elif test -r "$i/include/imap/rfc822.h"; then IMAP_DIR=$i; IMAP_INC_DIR=$i/include/imap elif test -r "$i/include/c-client.h"; then cat >> confdefs.h <<\EOF #define HAVE_IMAP2000 1 EOF IMAP_DIR=$i IMAP_INC_DIR=$i/include elif test -r "$i/include/rfc822.h"; then IMAP_DIR=$i; IMAP_INC_DIR=$i/include elif test -r "$i/imap/c-client.h"; then cat >> confdefs.h <<\EOF #define HAVE_IMAP2000 1 EOF IMAP_DIR=$i IMAP_INC_DIR=$i/imap elif test -r "$i/imap/rfc822.h"; then IMAP_DIR=$i; IMAP_INC_DIR=$i/imap elif test -r "$i/c-client/c-client.h"; then cat >> confdefs.h <<\EOF #define HAVE_IMAP2000 1 EOF IMAP_DIR=$i IMAP_INC_DIR=$i/c-client elif test -r "$i/c-client/rfc822.h"; then IMAP_DIR=$i; IMAP_INC_DIR=$i/c-client fi done old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$IMAP_INC_DIR cat > conftest.$ac_ext <&5 | egrep "this_is_true" >/dev/null 2>&1; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_IMAP2001 1 EOF fi rm -f conftest* CPPFLAGS=$old_CPPFLAGS echo $ac_n "checking for pam_start in -lpam""... $ac_c" 1>&6 echo "configure:28289: checking for pam_start in -lpam" >&5 ac_lib_var=`echo pam'_'pam_start | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo pam | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 echo "configure:28336: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo crypt | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi if test -z "$IMAP_DIR" || echo "$IMAP_DIR" | grep '^/' >/dev/null ; then IMAP_DIR=$IMAP_DIR else ep_dir="`echo $IMAP_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" IMAP_DIR="$ep_realdir/`basename \"$IMAP_DIR\"`" fi if test -z "$IMAP_DIR"; then { echo "configure: error: Cannot find rfc822.h. Please check your IMAP installation." 1>&2; exit 1; } fi if test -r "$IMAP_DIR/c-client/c-client.a"; then ln -s "$IMAP_DIR/c-client/c-client.a" "$IMAP_DIR/c-client/libc-client.a" >/dev/null 2>&1 elif test -r "$IMAP_DIR/lib/c-client.a"; then ln -s "$IMAP_DIR/lib/c-client.a" "$IMAP_DIR/lib/libc-client.a" >/dev/null 2>&1 fi for lib in c-client4 c-client imap; do IMAP_LIB=$lib str="$IMAP_DIR/lib/lib$lib.*" for i in `echo $str`; do if test -r $i; then IMAP_LIBDIR=$IMAP_DIR/lib break 2 fi done str="$IMAP_DIR/c-client/lib$lib.*" for i in `echo $str`; do if test -r $i; then IMAP_LIBDIR=$IMAP_DIR/c-client break 2 fi done done if test -z "$IMAP_LIBDIR"; then { echo "configure: error: Cannot find imap library. Please check your IMAP installation." 1>&2; exit 1; } fi if test "$IMAP_INC_DIR" != "/usr/include"; then if test -z "$IMAP_INC_DIR" || echo "$IMAP_INC_DIR" | grep '^/' >/dev/null ; then ai_p=$IMAP_INC_DIR else ep_dir="`echo $IMAP_INC_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$IMAP_INC_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$IMAP_LIBDIR" != "/usr/lib"; then if test -z "$IMAP_LIBDIR" || echo "$IMAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$IMAP_LIBDIR else ep_dir="`echo $IMAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$IMAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "IMAP_SHARED_LIBADD"; then IMAP_SHARED_LIBADD="-R$IMAP_LIBDIR -L$IMAP_LIBDIR $IMAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi case $IMAP_LIB in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then IMAP_SHARED_LIBADD="-l$IMAP_LIB $IMAP_SHARED_LIBADD" else case $IMAP_LIB in c|c_r|pthread*) ;; *) DLIBS="-l$IMAP_LIB $DLIBS" ;; esac fi ;; esac # Check whether --with-kerberos or --without-kerberos was given. if test "${with_kerberos+set}" = set; then withval="$with_kerberos" PHP_KERBEROS=$withval else PHP_KERBEROS=no fi if test "$PHP_KERBEROS" = "yes"; then test -d /usr/kerberos && PHP_KERBEROS=/usr/kerberos fi if test "$PHP_KERBEROS" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_IMAP_KRB 1 EOF if test "$PHP_KERBEROS/lib" != "/usr/lib"; then if test -z "$PHP_KERBEROS/lib" || echo "$PHP_KERBEROS/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_KERBEROS/lib else ep_dir="`echo $PHP_KERBEROS/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_KERBEROS/lib\"`" fi if test "$ext_shared" = "yes" && test -n "IMAP_SHARED_LIBADD"; then IMAP_SHARED_LIBADD="-R$PHP_KERBEROS/lib -L$PHP_KERBEROS/lib $IMAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi case gssapi_krb5 in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then IMAP_SHARED_LIBADD="$IMAP_SHARED_LIBADD -lgssapi_krb5" else case gssapi_krb5 in c|c_r|pthread*) ;; *) LIBS="$LIBS -lgssapi_krb5" ;; esac fi ;; esac case krb5 in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then IMAP_SHARED_LIBADD="$IMAP_SHARED_LIBADD -lkrb5" else case krb5 in c|c_r|pthread*) ;; *) LIBS="$LIBS -lkrb5" ;; esac fi ;; esac case k5crypto in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then IMAP_SHARED_LIBADD="$IMAP_SHARED_LIBADD -lk5crypto" else case k5crypto in c|c_r|pthread*) ;; *) LIBS="$LIBS -lk5crypto" ;; esac fi ;; esac case com_err in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then IMAP_SHARED_LIBADD="$IMAP_SHARED_LIBADD -lcom_err" else case com_err in c|c_r|pthread*) ;; *) LIBS="$LIBS -lcom_err" ;; esac fi ;; esac else cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "auth_gss" >/dev/null 2>&1; then rm -rf conftest* { echo "configure: error: This c-client library is built with Kerberos support. Add --with-kerberos<=DIR> to your configure line. Check config.log for details." 1>&2; exit 1; } fi rm -f conftest* fi # Check whether --with-imap-ssl or --without-imap-ssl was given. if test "${with_imap_ssl+set}" = set; then withval="$with_imap_ssl" PHP_IMAP_SSL=$withval else PHP_IMAP_SSL=no fi if test "$PHP_IMAP_SSL" = "yes"; then PHP_IMAP_SSL=/usr fi if test "$PHP_IMAP_SSL" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_IMAP_SSL 1 EOF if test "$PHP_IMAP_SSL/lib" != "/usr/lib"; then if test -z "$PHP_IMAP_SSL/lib" || echo "$PHP_IMAP_SSL/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_IMAP_SSL/lib else ep_dir="`echo $PHP_IMAP_SSL/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_IMAP_SSL/lib\"`" fi if test "$ext_shared" = "yes" && test -n "IMAP_SHARED_LIBADD"; then IMAP_SHARED_LIBADD="-R$PHP_IMAP_SSL/lib -L$PHP_IMAP_SSL/lib $IMAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi case ssl in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then IMAP_SHARED_LIBADD="-lssl $IMAP_SHARED_LIBADD" else case ssl in c|c_r|pthread*) ;; *) DLIBS="-lssl $DLIBS" ;; esac fi ;; esac case crypto in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then IMAP_SHARED_LIBADD="-lcrypto $IMAP_SHARED_LIBADD" else case crypto in c|c_r|pthread*) ;; *) DLIBS="-lcrypto $DLIBS" ;; esac fi ;; esac else old_LIBS=$LIBS LIBS="$LIBS -L$IMAP_LIBDIR -l$IMAP_LIB" if test $PHP_KERBEROS != "no"; then LIBS="$LIBS -L$PHP_KERBEROS/lib -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" fi if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* { echo "configure: error: This c-client library is built with SSL support. Add --with-imap-ssl<=DIR> to your configure line. Check config.log for details." 1>&2; exit 1; } fi rm -fr conftest* fi LIBS=$old_LIBS fi fi if test -n "for Informix support"; then echo $ac_n "checking for Informix support""... $ac_c" 1>&6 echo "configure:28878: checking for Informix support" >&5 fi # Check whether --with-informix or --without-informix was given. if test "${with_informix+set}" = set; then withval="$with_informix" PHP_INFORMIX=$withval else PHP_INFORMIX=no fi case $PHP_INFORMIX in shared,*) ext_output="yes, shared" ext_shared=yes PHP_INFORMIX=`echo "$PHP_INFORMIX"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_INFORMIX=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_INFORMIX" = "no" && PHP_INFORMIX=yes fi if test -n "for Informix support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_INFORMIX" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS informix" if test -d "$abs_srcdir/ext/informix"; then ext_builddir=ext/informix ext_srcdir=$abs_srcdir/ext/informix else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi if test "$PHP_INFORMIX" = "yes"; then if test "$INFORMIXDIR/incl/esql" != "/usr/include"; then if test -z "$INFORMIXDIR/incl/esql" || echo "$INFORMIXDIR/incl/esql" | grep '^/' >/dev/null ; then ai_p=$INFORMIXDIR/incl/esql else ep_dir="`echo $INFORMIXDIR/incl/esql|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$INFORMIXDIR/incl/esql\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$INFORMIXDIR/lib" != "/usr/lib"; then if test -z "$INFORMIXDIR/lib" || echo "$INFORMIXDIR/lib" | grep '^/' >/dev/null ; then ai_p=$INFORMIXDIR/lib else ep_dir="`echo $INFORMIXDIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$INFORMIXDIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "INFORMIX_SHARED_LIBADD"; then INFORMIX_SHARED_LIBADD="-R$INFORMIXDIR/lib -L$INFORMIXDIR/lib $INFORMIX_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi if test "$INFORMIXDIR/lib/esql" != "/usr/lib"; then if test -z "$INFORMIXDIR/lib/esql" || echo "$INFORMIXDIR/lib/esql" | grep '^/' >/dev/null ; then ai_p=$INFORMIXDIR/lib/esql else ep_dir="`echo $INFORMIXDIR/lib/esql|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$INFORMIXDIR/lib/esql\"`" fi if test "$ext_shared" = "yes" && test -n "INFORMIX_SHARED_LIBADD"; then INFORMIX_SHARED_LIBADD="-R$INFORMIXDIR/lib/esql -L$INFORMIXDIR/lib/esql $INFORMIX_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi else if test "$PHP_INFORMIX" != "$INFORMIXDIR"; then { echo "configure: error: Specified Informix base install directory is different than your INFORMIXDIR environment variable." 1>&2; exit 1; } fi if test "$PHP_INFORMIX/incl/esql" != "/usr/include"; then if test -z "$PHP_INFORMIX/incl/esql" || echo "$PHP_INFORMIX/incl/esql" | grep '^/' >/dev/null ; then ai_p=$PHP_INFORMIX/incl/esql else ep_dir="`echo $PHP_INFORMIX/incl/esql|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_INFORMIX/incl/esql\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$PHP_INFORMIX/lib" != "/usr/lib"; then if test -z "$PHP_INFORMIX/lib" || echo "$PHP_INFORMIX/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_INFORMIX/lib else ep_dir="`echo $PHP_INFORMIX/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_INFORMIX/lib\"`" fi if test "$ext_shared" = "yes" && test -n "INFORMIX_SHARED_LIBADD"; then INFORMIX_SHARED_LIBADD="-R$PHP_INFORMIX/lib -L$PHP_INFORMIX/lib $INFORMIX_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi if test "$PHP_INFORMIX/lib/esql" != "/usr/lib"; then if test -z "$PHP_INFORMIX/lib/esql" || echo "$PHP_INFORMIX/lib/esql" | grep '^/' >/dev/null ; then ai_p=$PHP_INFORMIX/lib/esql else ep_dir="`echo $PHP_INFORMIX/lib/esql|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_INFORMIX/lib/esql\"`" fi if test "$ext_shared" = "yes" && test -n "INFORMIX_SHARED_LIBADD"; then INFORMIX_SHARED_LIBADD="-R$PHP_INFORMIX/lib/esql -L$PHP_INFORMIX/lib/esql $INFORMIX_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi if test "$enable_experimental_zts" = "yes"; then IFX_ESQL_FLAGS="-thread" CPPFLAGS="$CPPFLAGS -DIFX_THREAD" else IFX_ESQL_FLAGS="" fi IFX_LIBS=`THREADLIB=POSIX $INFORMIXDIR/bin/esql $IFX_ESQL_FLAGS -libs` IFX_LIBS=`echo $IFX_LIBS | sed -e 's/Libraries to be used://g' -e 's/esql: error -55923: No source or object file\.//g'` case "$host_alias" in *aix*) CPPFLAGS="$CPPFLAGS -D__H_LOCALEDEF";; esac echo $ac_n "checking Informix version""... $ac_c" 1>&6 echo "configure:29355: checking Informix version" >&5 IFX_VERSION=`$INFORMIXDIR/bin/esql -V | sed -ne '1 s/^[^0-9]*\([0-9]\)\.\([0-9]*\).*/\1\2/p'` echo "$ac_t""$IFX_VERSION" 1>&6 cat >> confdefs.h <> confdefs.h <<\EOF #define HAVE_IFX_IUS 1 EOF IFX_ESQL_FLAGS="$IFX_ESQL_FLAGS -EDHAVE_IFX_IUS" else IFX_ESQL_FLAGS="$IFX_ESQL_FLAGS -EUHAVE_IFX_IUS" fi PHP_VAR_SUBST="$PHP_VAR_SUBST IFX_ESQL_FLAGS" for i in $IFX_LIBS; do case "$i" in *.o) IFX_LIBOBJS="$IFX_LIBOBJS $i" if test "$ext_builddir" != "/usr/lib"; then if test -z "$ext_builddir" || echo "$ext_builddir" | grep '^/' >/dev/null ; then ai_p=$ext_builddir else ep_dir="`echo $ext_builddir|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ext_builddir\"`" fi if test "$ext_shared" = "yes" && test -n "INFORMIX_SHARED_LIBADD"; then INFORMIX_SHARED_LIBADD="-R$ext_builddir -L$ext_builddir $INFORMIX_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi case phpifx in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then INFORMIX_SHARED_LIBADD="$INFORMIX_SHARED_LIBADD -lphpifx" else case phpifx in c|c_r|pthread*) ;; *) DLIBS="$DLIBS -lphpifx" ;; esac fi ;; esac ;; -lm) ;; -lc) ;; -l*) lib=`echo $i | cut -c 3-` case $lib in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then INFORMIX_SHARED_LIBADD="$INFORMIX_SHARED_LIBADD -l$lib" else case $lib in c|c_r|pthread*) ;; *) DLIBS="$DLIBS -l$lib" ;; esac fi ;; esac ;; *.a) case "`uname -s 2>/dev/null`" in UnixWare | SCO_SV | UNIX_SV) DLIBS="$DLIBS $i" ;; *) ac_dir="`echo $i|sed 's#[^/]*$##;s#\/$##'`" ac_lib="`echo $i|sed 's#^/.*/lib##g;s#\.a##g'`" DLIBS="$DLIBS -L$ac_dir -l$ac_lib" ;; esac ;; esac done cat >> confdefs.h <<\EOF #define HAVE_IFX 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST INFORMIXDIR" PHP_VAR_SUBST="$PHP_VAR_SUBST IFX_LIBOBJS" fi if test -n "for Ingres II support"; then echo $ac_n "checking for Ingres II support""... $ac_c" 1>&6 echo "configure:29507: checking for Ingres II support" >&5 fi # Check whether --with-ingres or --without-ingres was given. if test "${with_ingres+set}" = set; then withval="$with_ingres" PHP_INGRES=$withval else PHP_INGRES=no fi case $PHP_INGRES in shared,*) ext_output="yes, shared" ext_shared=yes PHP_INGRES=`echo "$PHP_INGRES"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_INGRES=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_INGRES" = "no" && PHP_INGRES=yes fi if test -n "for Ingres II support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_INGRES" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_II 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS ingres_ii" if test -d "$abs_srcdir/ext/ingres_ii"; then ext_builddir=ext/ingres_ii ext_srcdir=$abs_srcdir/ext/ingres_ii else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi if test -r $II_DIR/lib/libiiapi.a; then II_LIB_DIR=$II_DIR/lib else { echo "configure: error: Cannot find libiiapi.a under $II_DIR/lib" 1>&2; exit 1; } fi if test "$ext_shared" = "yes"; then II_SHARED_LIBADD="-liiapi $II_SHARED_LIBADD" if test -n "$II_LIB_DIR"; then if test "$II_LIB_DIR" != "/usr/lib"; then if test -z "$II_LIB_DIR" || echo "$II_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$II_LIB_DIR else ep_dir="`echo $II_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$II_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n "II_SHARED_LIBADD"; then II_SHARED_LIBADD="-R$II_LIB_DIR -L$II_LIB_DIR $II_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$II_LIB_DIR"; then if test "$II_LIB_DIR" != "/usr/lib"; then if test -z "$II_LIB_DIR" || echo "$II_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$II_LIB_DIR else ep_dir="`echo $II_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$II_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$II_LIB_DIR -L$II_LIB_DIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case iiapi in c|c_r|pthread*) ;; *) LIBS="-liiapi $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then II_SHARED_LIBADD="-lingres $II_SHARED_LIBADD" if test -n "$II_LIB_DIR"; then if test "$II_LIB_DIR" != "/usr/lib"; then if test -z "$II_LIB_DIR" || echo "$II_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$II_LIB_DIR else ep_dir="`echo $II_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$II_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n "II_SHARED_LIBADD"; then II_SHARED_LIBADD="-R$II_LIB_DIR -L$II_LIB_DIR $II_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$II_LIB_DIR"; then if test "$II_LIB_DIR" != "/usr/lib"; then if test -z "$II_LIB_DIR" || echo "$II_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$II_LIB_DIR else ep_dir="`echo $II_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$II_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$II_LIB_DIR -L$II_LIB_DIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ingres in c|c_r|pthread*) ;; *) LIBS="-lingres $LIBS" ;; esac fi if test "$II_INC_DIR" != "/usr/include"; then if test -z "$II_INC_DIR" || echo "$II_INC_DIR" | grep '^/' >/dev/null ; then ai_p=$II_INC_DIR else ep_dir="`echo $II_INC_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$II_INC_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -n "for InterBase support"; then echo $ac_n "checking for InterBase support""... $ac_c" 1>&6 echo "configure:30010: checking for InterBase support" >&5 fi # Check whether --with-interbase or --without-interbase was given. if test "${with_interbase+set}" = set; then withval="$with_interbase" PHP_INTERBASE=$withval else PHP_INTERBASE=no fi case $PHP_INTERBASE in shared,*) ext_output="yes, shared" ext_shared=yes PHP_INTERBASE=`echo "$PHP_INTERBASE"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_INTERBASE=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_INTERBASE" = "no" && PHP_INTERBASE=yes fi if test -n "for InterBase support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_INTERBASE" != "no"; then if test "$PHP_INTERBASE" = "yes"; then IBASE_INCDIR=/usr/interbase/include IBASE_LIBDIR=/usr/interbase/lib else IBASE_INCDIR=$PHP_INTERBASE/include IBASE_LIBDIR=$PHP_INTERBASE/lib fi if test "$ext_shared" = "yes"; then INTERBASE_SHARED_LIBADD="-lgds $INTERBASE_SHARED_LIBADD" if test -n "$IBASE_LIBDIR"; then if test "$IBASE_LIBDIR" != "/usr/lib"; then if test -z "$IBASE_LIBDIR" || echo "$IBASE_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$IBASE_LIBDIR else ep_dir="`echo $IBASE_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$IBASE_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "INTERBASE_SHARED_LIBADD"; then INTERBASE_SHARED_LIBADD="-R$IBASE_LIBDIR -L$IBASE_LIBDIR $INTERBASE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$IBASE_LIBDIR"; then if test "$IBASE_LIBDIR" != "/usr/lib"; then if test -z "$IBASE_LIBDIR" || echo "$IBASE_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$IBASE_LIBDIR else ep_dir="`echo $IBASE_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$IBASE_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$IBASE_LIBDIR -L$IBASE_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case gds in c|c_r|pthread*) ;; *) LIBS="-lgds $LIBS" ;; esac fi if test "$IBASE_INCDIR" != "/usr/include"; then if test -z "$IBASE_INCDIR" || echo "$IBASE_INCDIR" | grep '^/' >/dev/null ; then ai_p=$IBASE_INCDIR else ep_dir="`echo $IBASE_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$IBASE_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_IBASE 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS interbase" if test -d "$abs_srcdir/ext/interbase"; then ext_builddir=ext/interbase ext_srcdir=$abs_srcdir/ext/interbase else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:30407: checking for IRCG support" >&5 fi # Check whether --with-ircg or --without-ircg was given. if test "${with_ircg+set}" = set; then withval="$with_ircg" PHP_IRCG=$withval else PHP_IRCG=no fi case $PHP_IRCG in shared,*) ext_output="yes, shared" ext_shared=yes PHP_IRCG=`echo "$PHP_IRCG"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_IRCG=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_IRCG" = "no" && PHP_IRCG=yes fi if test -n "for IRCG support"; then echo "$ac_t""$ext_output" 1>&6 fi # Check whether --with-ircg-config or --without-ircg-config was given. if test "${with_ircg_config+set}" = set; then withval="$with_ircg_config" IRCG_CONFIG=$withval else IRCG_CONFIG=ircg-config fi if test "$PHP_IRCG" != "no"; then $IRCG_CONFIG --ldflags if test "$?" != "0"; then { echo "configure: error: I cannot run the ircg-config script which should have been installed by IRCG. Please ensure that the script is in your PATH or point --with-ircg-config to the path of the script." 1>&2; exit 1; } fi for ac_i in `$IRCG_CONFIG --ldflags`; do case $ac_i in -l*) ac_ii=`echo $ac_i|cut -c 3-` case $ac_ii in c|c_r|pthread*) ;; *) LIBS="$LIBS -l$ac_ii" ;; esac ;; -L*) ac_ii=`echo $ac_i|cut -c 3-` if test "$ac_ii" != "/usr/lib"; then if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then ai_p=$ac_ii else ep_dir="`echo $ac_ii|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ac_ii\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ac_ii -L$ac_ii $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi ;; esac done for ac_i in `$IRCG_CONFIG --cppflags`; do case $ac_i in -I*) ac_ii=`echo $ac_i|cut -c 3-` if test "$ac_ii" != "/usr/include"; then if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then ai_p=$ac_ii else ep_dir="`echo $ac_ii|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ac_ii\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi ;; esac done if test -n "$PHP_IRCG/lib"; then if test "$PHP_IRCG/lib" != "/usr/lib"; then if test -z "$PHP_IRCG/lib" || echo "$PHP_IRCG/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_IRCG/lib else ep_dir="`echo $PHP_IRCG/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_IRCG/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PHP_IRCG/lib -L$PHP_IRCG/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ircg in c|c_r|pthread*) ;; *) LIBS="-lircg $LIBS" ;; esac if test "$PHP_IRCG/include" != "/usr/include"; then if test -z "$PHP_IRCG/include" || echo "$PHP_IRCG/include" | grep '^/' >/dev/null ; then ai_p=$PHP_IRCG/include else ep_dir="`echo $PHP_IRCG/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_IRCG/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$PHP_SAPI" = "thttpd"; then cat >> confdefs.h <<\EOF #define IRCG_WITH_THTTPD 1 EOF disable_cli=1 fi cat >> confdefs.h <<\EOF #define HAVE_IRCG 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS ircg" if test -d "$abs_srcdir/ext/ircg"; then ext_builddir=ext/ircg ext_srcdir=$abs_srcdir/ext/ircg else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:30868: checking for Java support" >&5 # Check whether --with-java or --without-java was given. if test "${with_java+set}" = set; then withval="$with_java" if test "$withval" != "no"; then JAVA_SHARED=libphp_java.la pltform=`uname -s 2>/dev/null` java_libext=libjava.so case $pltform in AIX) java_libext=libjava.a ;; HP-UX) java_libext=libjava.sl ;; esac if test "$withval" = "yes"; then if JAVA_JAR=`which jar 2>/dev/null`; then JAVA_JAR="$JAVA_JAR cf" else JAVA_JAR= fi withval=`cd \`dirname \\\`which javac\\\`\`/..;pwd` else test -x $withval/bin/jar && JAVA_JAR="$withval/bin/jar cf" fi # substitute zip for systems which don't have jar if test -z "$JAVA_JAR"; then JAVA_JAR='zip -q0' fi if test -x $withval/bin/javac; then JAVA_C=$withval/bin/javac else { echo "configure: error: Can not find the javac binary under $withval/bin/" 1>&2; exit 1; } fi if test -d $withval/lib/kaffe; then if test "$withval/lib" != "/usr/lib"; then if test -z "$withval/lib" || echo "$withval/lib" | grep '^/' >/dev/null ; then ai_p=$withval/lib else ep_dir="`echo $withval/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$withval/lib -L$withval/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi JAVA_CFLAGS=-DKAFFE JAVA_INCLUDE=-I$withval/include/kaffe JAVA_CLASSPATH=$withval/share/kaffe/Klasses.jar JAVA_LIB=kaffevm JAVA_LIBPATH=$withval/lib/kaffe java_libext=kaffevm test -f $withval/lib/$JAVA_LIB && JAVA_LIBPATH=$withval/lib test -f $withval/lib/kaffe/$JAVA_LIB && JAVA_LIBPATH=$withval/lib/kaffe # accomodate old versions of kaffe which don't support jar if kaffe -version 2>&1 | grep 1.0b > /dev/null; then JAVA_JAR='zip -q0' fi elif test -f $withval/lib/$java_libext; then JAVA_LIB=java JAVA_LIBPATH=$withval/lib JAVA_INCLUDE=-I$withval/include test -f $withval/lib/classes.zip && JAVA_CFLAGS=-DJNI_11 test -f $withval/lib/jvm.jar && JAVA_CFLAGS=-DJNI_12 test -f $withval/lib/classes.zip && JAVA_CLASSPATH=$withval/lib/classes.zip test -f $withval/lib/jvm.jar && JAVA_CLASSPATH=$withval/lib/jvm.jar for i in $JAVA_INCLUDE/*; do test -f $i/jni_md.h && JAVA_INCLUDE="$JAVA_INCLUDE $i" done else for i in `find $withval/include -type d`; do test -f $i/jni.h && JAVA_INCLUDE=-I$i test -f $i/jni_md.h && JAVA_INCLUDE="$JAVA_INCLUDE -I$i" done for i in `find $withval/. -type d`; do test -f $i/classes.zip && JAVA_CFLAGS=-DJNI_11 test -f $i/rt.jar && JAVA_CFLAGS=-DJNI_12 test -f $i/classes.zip && JAVA_CLASSPATH=$i/classes.zip test -f $i/rt.jar && JAVA_CLASSPATH=$i/rt.jar if test -f $i/$java_libext; then JAVA_LIB=java JAVA_LIBPATH=$i test -d $i/hotspot && if test "$i/hotspot" != "/usr/lib"; then if test -z "$i/hotspot" || echo "$i/hotspot" | grep '^/' >/dev/null ; then ai_p=$i/hotspot else ep_dir="`echo $i/hotspot|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/hotspot\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$i/hotspot -L$i/hotspot $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi test -d $i/classic && if test "$i/classic" != "/usr/lib"; then if test -z "$i/classic" || echo "$i/classic" | grep '^/' >/dev/null ; then ai_p=$i/classic else ep_dir="`echo $i/classic|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/classic\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$i/classic -L$i/classic $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi test -d $i/server && if test "$i/server" != "/usr/lib"; then if test -z "$i/server" || echo "$i/server" | grep '^/' >/dev/null ; then ai_p=$i/server else ep_dir="`echo $i/server|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/server\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$i/server -L$i/server $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi test -d $i/native_threads && if test "$i/native_threads" != "/usr/lib"; then if test -z "$i/native_threads" || echo "$i/native_threads" | grep '^/' >/dev/null ; then ai_p=$i/native_threads else ep_dir="`echo $i/native_threads|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/native_threads\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$i/native_threads -L$i/native_threads $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi done if test -z "$JAVA_INCLUDE"; then echo "$ac_t""no" 1>&6 { echo "configure: error: unable to find Java VM libraries" 1>&2; exit 1; } fi JAVA_CFLAGS="$JAVA_CFLAGS -D_REENTRANT" fi cat >> confdefs.h <<\EOF #define HAVE_JAVA 1 EOF if test -z "$JAVA_LIBPATH"; then { echo "configure: error: unable to find Java VM libraries" 1>&2; exit 1; } fi if test "$JAVA_LIBPATH" != "/usr/lib"; then if test -z "$JAVA_LIBPATH" || echo "$JAVA_LIBPATH" | grep '^/' >/dev/null ; then ai_p=$JAVA_LIBPATH else ep_dir="`echo $JAVA_LIBPATH|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$JAVA_LIBPATH\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$JAVA_LIBPATH -L$JAVA_LIBPATH $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi JAVA_CFLAGS="$JAVA_CFLAGS '-DJAVALIB=\"$JAVA_LIBPATH/$java_libext\"'" if test "$PHP_SAPI" != "servlet"; then EXT_SUBDIRS="$EXT_SUBDIRS java" if test -d "$abs_srcdir/ext/java"; then ext_builddir=ext/java ext_srcdir=$abs_srcdir/ext/java else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "shared" != "shared" && test "shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi PHP_VAR_SUBST="$PHP_VAR_SUBST JAVA_CFLAGS" PHP_VAR_SUBST="$PHP_VAR_SUBST JAVA_CLASSPATH" PHP_VAR_SUBST="$PHP_VAR_SUBST JAVA_INCLUDE" PHP_VAR_SUBST="$PHP_VAR_SUBST JAVA_SHARED" PHP_VAR_SUBST="$PHP_VAR_SUBST JAVA_JAR" PHP_VAR_SUBST="$PHP_VAR_SUBST JAVA_C" if test -n "for LDAP support"; then echo $ac_n "checking for LDAP support""... $ac_c" 1>&6 echo "configure:31432: checking for LDAP support" >&5 fi # Check whether --with-ldap or --without-ldap was given. if test "${with_ldap+set}" = set; then withval="$with_ldap" PHP_LDAP=$withval else PHP_LDAP=no fi case $PHP_LDAP in shared,*) ext_output="yes, shared" ext_shared=yes PHP_LDAP=`echo "$PHP_LDAP"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_LDAP=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_LDAP" = "no" && PHP_LDAP=yes fi if test -n "for LDAP support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_LDAP" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS ldap" if test -d "$abs_srcdir/ext/ldap"; then ext_builddir=ext/ldap ext_srcdir=$abs_srcdir/ext/ldap else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi if test `uname` = "Linux"; then LDAP_PTHREAD=pthread else LDAP_PTHREAD= fi if test -f $LDAP_LIBDIR/liblber.a -o -f $LDAP_LIBDIR/liblber.so -o -f $LDAP_LIBDIR/liblber.sl; then if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-llber $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case lber in c|c_r|pthread*) ;; *) LIBS="-llber $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lldap $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ldap in c|c_r|pthread*) ;; *) LIBS="-lldap $LIBS" ;; esac fi elif test -f $LDAP_LIBDIR/libldap.so.3; then if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lldap $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ldap in c|c_r|pthread*) ;; *) LIBS="-lldap $LIBS" ;; esac fi elif test -f $LDAP_LIBDIR/libldapssl41.so -o -f $LDAP_LIBDIR/libldapssl41.sl; then if test -n "$LDAP_PTHREAD"; then case $LDAP_PTHREAD in c|c_r|pthread*) ;; *) LIBS="-l$LDAP_PTHREAD $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lnspr3 $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case nspr3 in c|c_r|pthread*) ;; *) LIBS="-lnspr3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lplc3 $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case plc3 in c|c_r|pthread*) ;; *) LIBS="-lplc3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lplds3 $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case plds3 in c|c_r|pthread*) ;; *) LIBS="-lplds3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lldapssl41 $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ldapssl41 in c|c_r|pthread*) ;; *) LIBS="-lldapssl41 $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_NSLDAP 1 EOF elif test -f $LDAP_LIBDIR/libldapssl30.so -o -f $LDAP_LIBDIR/libldapssl30.sl; then if test -n "$LDAP_PTHREAD"; then case $LDAP_PTHREAD in c|c_r|pthread*) ;; *) LIBS="-l$LDAP_PTHREAD $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lldapssl30 $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ldapssl30 in c|c_r|pthread*) ;; *) LIBS="-lldapssl30 $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_NSLDAP 1 EOF elif test -f $LDAP_LIBDIR/libldap30.so -o -f $LDAP_LIBDIR/libldap30.sl; then if test -n "$LDAP_PTHREAD"; then case $LDAP_PTHREAD in c|c_r|pthread*) ;; *) LIBS="-l$LDAP_PTHREAD $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lldap30 $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ldap30 in c|c_r|pthread*) ;; *) LIBS="-lldap30 $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_NSLDAP 1 EOF elif test -f $LDAP_LIBDIR/libumich_ldap.so; then if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lumich_lber $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case umich_lber in c|c_r|pthread*) ;; *) LIBS="-lumich_lber $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lumich_ldap $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case umich_ldap in c|c_r|pthread*) ;; *) LIBS="-lumich_ldap $LIBS" ;; esac fi elif test -f $LDAP_LIBDIR/libclntsh.so; then if test "$ext_shared" = "yes"; then LDAP_SHARED_LIBADD="-lclntsh $LDAP_SHARED_LIBADD" if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "LDAP_SHARED_LIBADD"; then LDAP_SHARED_LIBADD="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $LDAP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LDAP_LIBDIR"; then if test "$LDAP_LIBDIR" != "/usr/lib"; then if test -z "$LDAP_LIBDIR" || echo "$LDAP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_LIBDIR else ep_dir="`echo $LDAP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LDAP_LIBDIR -L$LDAP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case clntsh in c|c_r|pthread*) ;; *) LIBS="-lclntsh $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_ORALDAP 1 EOF fi if test "$LDAP_INCDIR" != "/usr/include"; then if test -z "$LDAP_INCDIR" || echo "$LDAP_INCDIR" | grep '^/' >/dev/null ; then ai_p=$LDAP_INCDIR else ep_dir="`echo $LDAP_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LDAP_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST LDAP_SHARED_LIBADD" cat >> confdefs.h <<\EOF #define HAVE_LDAP 1 EOF _SAVE_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$LDAP_INCDIR" echo $ac_n "checking for 3 arg ldap_set_rebind_proc""... $ac_c" 1>&6 echo "configure:32975: checking for 3 arg ldap_set_rebind_proc" >&5 if eval "test \"`echo '$''{'ac_cv_3arg_setrebindproc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { ldap_set_rebind_proc(0,0,0) ; return 0; } EOF if { (eval echo configure:32987: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_3arg_setrebindproc=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_3arg_setrebindproc=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_3arg_setrebindproc" 1>&6 if test "$ac_cv_3arg_setrebindproc" = yes; then cat >> confdefs.h <<\EOF #define HAVE_3ARG_SETREBINDPROC 1 EOF fi CPPFLAGS=$_SAVE_CPPFLAGS for ac_func in ldap_parse_reference do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:33011: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:33039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done fi if test -n "whether to enable multibyte string support"; then echo $ac_n "checking whether to enable multibyte string support""... $ac_c" 1>&6 echo "configure:33070: checking whether to enable multibyte string support" >&5 fi # Check whether --enable-mbstring or --disable-mbstring was given. if test "${enable_mbstring+set}" = set; then enableval="$enable_mbstring" PHP_MBSTRING=$enableval else PHP_MBSTRING=no fi case $PHP_MBSTRING in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MBSTRING=`echo "$PHP_MBSTRING"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MBSTRING=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MBSTRING" = "no" && PHP_MBSTRING=yes fi if test -n "whether to enable multibyte string support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MBSTRING" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_MBSTRING 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS mbstring" if test -d "$abs_srcdir/ext/mbstring"; then ext_builddir=ext/mbstring ext_srcdir=$abs_srcdir/ext/mbstring else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:33328: checking whether to enable japanese encoding translation" >&5 # Check whether --enable-mbstr_enc_trans or --disable-mbstr_enc_trans was given. if test "${enable_mbstr_enc_trans+set}" = set; then enableval="$enable_mbstr_enc_trans" if test "$enableval" = "yes" ; then cat >> confdefs.h <<\EOF #define MBSTR_ENC_TRANS 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether to enable multibyte regex support""... $ac_c" 1>&6 echo "configure:33351: checking whether to enable multibyte regex support" >&5 # Check whether --enable-mbregex or --disable-mbregex was given. if test "${enable_mbregex+set}" = set; then enableval="$enable_mbregex" if test "$enableval" = "yes" ; then cat >> confdefs.h <<\EOF #define HAVE_MBREGEX 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi if test -n "for MCAL support"; then echo $ac_n "checking for MCAL support""... $ac_c" 1>&6 echo "configure:33378: checking for MCAL support" >&5 fi # Check whether --with-mcal or --without-mcal was given. if test "${with_mcal+set}" = set; then withval="$with_mcal" PHP_MCAL=$withval else PHP_MCAL=no fi case $PHP_MCAL in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MCAL=`echo "$PHP_MCAL"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MCAL=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MCAL" = "no" && PHP_MCAL=yes fi if test -n "for MCAL support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MCAL" != "no"; then MCAL_DEFAULT_SEARCH=/usr/local if test "$PHP_MCAL" = "yes"; then MCAL_DIR=$MCAL_DEFAULT_SEARCH else if test -z "$PHP_MCAL" || echo "$PHP_MCAL" | grep '^/' >/dev/null ; then MCAL_DIR=$PHP_MCAL else ep_dir="`echo $PHP_MCAL|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" MCAL_DIR="$ep_realdir/`basename \"$PHP_MCAL\"`" fi fi for i in $MCAL_DIR $MCAL_DIR/mcal $MCAL_DIR/mcal/include $MCAL_DIR/include/mcal $MCAL_DIR/include; do if test -r "$i/mcal.h"; then MCAL_INCLUDE=$i fi done for i in $MCAL_DIR $MCAL_DIR/mcal $MCAL_DIR/mcal/lib $MCAL_DIR/lib/mcal $MCAL_DIR/lib; do if test -r "$i/libmcal.a"; then MCAL_LIBRARY=$i fi done if test ! -f "$MCAL_INCLUDE/mcal.h"; then { echo "configure: error: Unable to locate your libmcal header files - mcal.h should be in the directory you specify or in the include/ subdirectory below it - default search location is $MCAL_DEFAULT_SEARCH" 1>&2; exit 1; } fi if test ! -f "$MCAL_INCLUDE/cal_misc.h"; then { echo "configure: error: Unable to locate your libmcal header files - cal_misc.h should be in the directory you specify or in the include/ subdirectory below it - default search location is $MCAL_DEFAULT_SEARCH" 1>&2; exit 1; } fi if test ! -f "$MCAL_INCLUDE/icalroutines.h"; then { echo "configure: error: Unable to locate your libmcal header files - icalroutines.h should be in the directory you specify or in the include/ subdirectory below it - default search location is $MCAL_DEFAULT_SEARCH" 1>&2; exit 1; } fi if test ! -f "$MCAL_LIBRARY/libmcal.a"; then { echo "configure: error: Unable to locate your libmcal library files - libmcal.a should be in the directory you specify or in the lib/ subdirectory below it - default search location is $MCAL_DEFAULT_SEARCH" 1>&2; exit 1; } fi if test "$MCAL_INCLUDE" != "/usr/include"; then if test -z "$MCAL_INCLUDE" || echo "$MCAL_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$MCAL_INCLUDE else ep_dir="`echo $MCAL_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MCAL_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$MCAL_LIBRARY" != "/usr/lib"; then if test -z "$MCAL_LIBRARY" || echo "$MCAL_LIBRARY" | grep '^/' >/dev/null ; then ai_p=$MCAL_LIBRARY else ep_dir="`echo $MCAL_LIBRARY|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MCAL_LIBRARY\"`" fi if test "$ext_shared" = "yes" && test -n "MCAL_SHARED_LIBADD"; then MCAL_SHARED_LIBADD="-R$MCAL_LIBRARY -L$MCAL_LIBRARY $MCAL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi case mcal in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then MCAL_SHARED_LIBADD="-lmcal $MCAL_SHARED_LIBADD" else case mcal in c|c_r|pthread*) ;; *) DLIBS="-lmcal $DLIBS" ;; esac fi ;; esac PHP_VAR_SUBST="$PHP_VAR_SUBST MCAL_SHARED_LIBADD" cat >> confdefs.h <<\EOF #define HAVE_MCAL 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS mcal" if test -d "$abs_srcdir/ext/mcal"; then ext_builddir=ext/mcal ext_srcdir=$abs_srcdir/ext/mcal else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:33780: checking for mcrypt support" >&5 fi # Check whether --with-mcrypt or --without-mcrypt was given. if test "${with_mcrypt+set}" = set; then withval="$with_mcrypt" PHP_MCRYPT=$withval else PHP_MCRYPT=no fi case $PHP_MCRYPT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MCRYPT=`echo "$PHP_MCRYPT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MCRYPT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MCRYPT" = "no" && PHP_MCRYPT=yes fi if test -n "for mcrypt support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MCRYPT" != "no"; then for i in /usr/local /usr $PHP_MCRYPT; do if test -f $i/include/mcrypt.h; then MCRYPT_DIR=$i fi done if test -z "$MCRYPT_DIR"; then { echo "configure: error: mcrypt.h not found. Please reinstall libmcrypt." 1>&2; exit 1; } fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$MCRYPT_DIR/lib -lltdl $LDFLAGS" echo $ac_n "checking for mcrypt_module_open in -lmcrypt""... $ac_c" 1>&6 echo "configure:33842: checking for mcrypt_module_open in -lmcrypt" >&5 ac_lib_var=`echo mcrypt'_'mcrypt_module_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lmcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS case ltdl in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then MCRYPT_SHARED_LIBADD="-lltdl $MCRYPT_SHARED_LIBADD" else case ltdl in c|c_r|pthread*) ;; *) LIBS="-lltdl $LIBS" ;; esac fi ;; esac cat >> confdefs.h <<\EOF #define HAVE_LIBMCRYPT24 1 EOF save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$MCRYPT_DIR/lib $LDFLAGS" echo $ac_n "checking for mcrypt_generic_deinit in -lmcrypt""... $ac_c" 1>&6 echo "configure:33917: checking for mcrypt_generic_deinit in -lmcrypt" >&5 ac_lib_var=`echo mcrypt'_'mcrypt_generic_deinit | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lmcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_MCRYPT_GENERIC_DEINIT 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$MCRYPT_DIR/lib $LDFLAGS" echo $ac_n "checking for init_mcrypt in -lmcrypt""... $ac_c" 1>&6 echo "configure:33982: checking for init_mcrypt in -lmcrypt" >&5 ac_lib_var=`echo mcrypt'_'init_mcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lmcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_LIBMCRYPT22 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: Sorry, I was not able to diagnose which libmcrypt version you have installed." 1>&2; exit 1; } fi fi if test "$ext_shared" = "yes"; then MCRYPT_SHARED_LIBADD="-lmcrypt $MCRYPT_SHARED_LIBADD" if test -n "$MCRYPT_DIR/lib"; then if test "$MCRYPT_DIR/lib" != "/usr/lib"; then if test -z "$MCRYPT_DIR/lib" || echo "$MCRYPT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MCRYPT_DIR/lib else ep_dir="`echo $MCRYPT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MCRYPT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "MCRYPT_SHARED_LIBADD"; then MCRYPT_SHARED_LIBADD="-R$MCRYPT_DIR/lib -L$MCRYPT_DIR/lib $MCRYPT_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$MCRYPT_DIR/lib"; then if test "$MCRYPT_DIR/lib" != "/usr/lib"; then if test -z "$MCRYPT_DIR/lib" || echo "$MCRYPT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MCRYPT_DIR/lib else ep_dir="`echo $MCRYPT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MCRYPT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$MCRYPT_DIR/lib -L$MCRYPT_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case mcrypt in c|c_r|pthread*) ;; *) LIBS="-lmcrypt $LIBS" ;; esac fi if test "$MCRYPT_DIR/include" != "/usr/include"; then if test -z "$MCRYPT_DIR/include" || echo "$MCRYPT_DIR/include" | grep '^/' >/dev/null ; then ai_p=$MCRYPT_DIR/include else ep_dir="`echo $MCRYPT_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MCRYPT_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_LIBMCRYPT 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST MCRYPT_SHARED_LIBADD" EXT_SUBDIRS="$EXT_SUBDIRS mcrypt" if test -d "$abs_srcdir/ext/mcrypt"; then ext_builddir=ext/mcrypt ext_srcdir=$abs_srcdir/ext/mcrypt else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:34386: checking for MCVE support" >&5 fi # Check whether --with-mcve or --without-mcve was given. if test "${with_mcve+set}" = set; then withval="$with_mcve" PHP_MCVE=$withval else PHP_MCVE=no fi case $PHP_MCVE in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MCVE=`echo "$PHP_MCVE"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MCVE=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MCVE" = "no" && PHP_MCVE=yes fi if test -n "for MCVE support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MCVE" != "no"; then if test -r $PHP_MCVE/include/mcve.h; then MCVE_DIR=$PHP_MCVE else for i in /usr /usr/local /usr/local/mcve ; do if test -r $i/include/mcve.h; then MCVE_DIR=$i fi done fi if test -z "$MCVE_DIR"; then { echo "configure: error: not found. Please check your MCVE installation; mcve.h NOT FOUND" 1>&2; exit 1; } fi if test "$MCVE_DIR/include" != "/usr/include"; then if test -z "$MCVE_DIR/include" || echo "$MCVE_DIR/include" | grep '^/' >/dev/null ; then ai_p=$MCVE_DIR/include else ep_dir="`echo $MCVE_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MCVE_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then MCVE_SHARED_LIBADD="-lmcve $MCVE_SHARED_LIBADD" if test -n "$MCVE_DIR/lib"; then if test "$MCVE_DIR/lib" != "/usr/lib"; then if test -z "$MCVE_DIR/lib" || echo "$MCVE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MCVE_DIR/lib else ep_dir="`echo $MCVE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MCVE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "MCVE_SHARED_LIBADD"; then MCVE_SHARED_LIBADD="-R$MCVE_DIR/lib -L$MCVE_DIR/lib $MCVE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$MCVE_DIR/lib"; then if test "$MCVE_DIR/lib" != "/usr/lib"; then if test -z "$MCVE_DIR/lib" || echo "$MCVE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MCVE_DIR/lib else ep_dir="`echo $MCVE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MCVE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$MCVE_DIR/lib -L$MCVE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case mcve in c|c_r|pthread*) ;; *) LIBS="-lmcve $LIBS" ;; esac fi EXT_SUBDIRS="$EXT_SUBDIRS mcve" if test -d "$abs_srcdir/ext/mcve"; then ext_builddir=ext/mcve ext_srcdir=$abs_srcdir/ext/mcve else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:34786: checking for mhash support" >&5 fi # Check whether --with-mhash or --without-mhash was given. if test "${with_mhash+set}" = set; then withval="$with_mhash" PHP_MHASH=$withval else PHP_MHASH=no fi case $PHP_MHASH in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MHASH=`echo "$PHP_MHASH"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MHASH=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MHASH" = "no" && PHP_MHASH=yes fi if test -n "for mhash support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MHASH" != "no"; then for i in /usr/local /usr /opt/mhash $PHP_MHASH; do if test -f $i/include/mhash.h; then MHASH_DIR=$i fi done if test -z "$MHASH_DIR"; then { echo "configure: error: Please reinstall libmhash - I cannot find mhash.h" 1>&2; exit 1; } fi if test "$MHASH_DIR/include" != "/usr/include"; then if test -z "$MHASH_DIR/include" || echo "$MHASH_DIR/include" | grep '^/' >/dev/null ; then ai_p=$MHASH_DIR/include else ep_dir="`echo $MHASH_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MHASH_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then MHASH_SHARED_LIBADD="-lmhash $MHASH_SHARED_LIBADD" if test -n "$MHASH_DIR/lib"; then if test "$MHASH_DIR/lib" != "/usr/lib"; then if test -z "$MHASH_DIR/lib" || echo "$MHASH_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MHASH_DIR/lib else ep_dir="`echo $MHASH_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MHASH_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "MHASH_SHARED_LIBADD"; then MHASH_SHARED_LIBADD="-R$MHASH_DIR/lib -L$MHASH_DIR/lib $MHASH_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$MHASH_DIR/lib"; then if test "$MHASH_DIR/lib" != "/usr/lib"; then if test -z "$MHASH_DIR/lib" || echo "$MHASH_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MHASH_DIR/lib else ep_dir="`echo $MHASH_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MHASH_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$MHASH_DIR/lib -L$MHASH_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case mhash in c|c_r|pthread*) ;; *) LIBS="-lmhash $LIBS" ;; esac fi PHP_VAR_SUBST="$PHP_VAR_SUBST MHASH_SHARED_LIBADD" cat >> confdefs.h <<\EOF #define HAVE_LIBMHASH 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS mhash" if test -d "$abs_srcdir/ext/mhash"; then ext_builddir=ext/mhash ext_srcdir=$abs_srcdir/ext/mhash else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:35187: checking for MING support" >&5 fi # Check whether --with-ming or --without-ming was given. if test "${with_ming+set}" = set; then withval="$with_ming" PHP_MING=$withval else PHP_MING=no fi case $PHP_MING in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MING=`echo "$PHP_MING"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MING=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MING" = "no" && PHP_MING=yes fi if test -n "for MING support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MING" != "no"; then for i in $PHP_MING /usr/local /usr; do if test -f $i/lib/libming.$SHLIB_SUFFIX_NAME -o -f $i/lib/libming.a; then MING_DIR=$i fi done if test -z "$MING_DIR"; then { echo "configure: error: Please reinstall ming distribution. libming.(a|so) not found." 1>&2; exit 1; } fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$MING_DIR/lib $LDFLAGS" echo $ac_n "checking for Ming_useSWFVersion in -lming""... $ac_c" 1>&6 echo "configure:35249: checking for Ming_useSWFVersion in -lming" >&5 ac_lib_var=`echo ming'_'Ming_useSWFVersion | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lming $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_MING 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: Ming library 0.2a or greater required." 1>&2; exit 1; } fi if test "$MING_DIR/include" != "/usr/include"; then if test -z "$MING_DIR/include" || echo "$MING_DIR/include" | grep '^/' >/dev/null ; then ai_p=$MING_DIR/include else ep_dir="`echo $MING_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MING_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then MING_SHARED_LIBADD="-lming $MING_SHARED_LIBADD" if test -n "$MING_DIR/lib"; then if test "$MING_DIR/lib" != "/usr/lib"; then if test -z "$MING_DIR/lib" || echo "$MING_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MING_DIR/lib else ep_dir="`echo $MING_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MING_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "MING_SHARED_LIBADD"; then MING_SHARED_LIBADD="-R$MING_DIR/lib -L$MING_DIR/lib $MING_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$MING_DIR/lib"; then if test "$MING_DIR/lib" != "/usr/lib"; then if test -z "$MING_DIR/lib" || echo "$MING_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MING_DIR/lib else ep_dir="`echo $MING_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MING_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$MING_DIR/lib -L$MING_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ming in c|c_r|pthread*) ;; *) LIBS="-lming $LIBS" ;; esac fi EXT_SUBDIRS="$EXT_SUBDIRS ming" if test -d "$abs_srcdir/ext/ming"; then ext_builddir=ext/ming ext_srcdir=$abs_srcdir/ext/ming else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:35644: checking for mnoGoSearch support" >&5 fi # Check whether --with-mnogosearch or --without-mnogosearch was given. if test "${with_mnogosearch+set}" = set; then withval="$with_mnogosearch" PHP_MNOGOSEARCH=$withval else PHP_MNOGOSEARCH=no fi case $PHP_MNOGOSEARCH in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MNOGOSEARCH=`echo "$PHP_MNOGOSEARCH"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MNOGOSEARCH=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MNOGOSEARCH" = "no" && PHP_MNOGOSEARCH=yes fi if test -n "for mnoGoSearch support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MNOGOSEARCH" != "no"; then if test "$PHP_MNOGOSEARCH" = "yes"; then MNOGOSEARCH_BINDIR=/usr/local/mnogosearch/bin MNOGOSEARCH_INCDIR=/usr/local/mnogosearch/include MNOGOSEARCH_LIBDIR=/usr/local/mnogosearch/lib else MNOGOSEARCH_BINDIR=$PHP_MNOGOSEARCH/bin MNOGOSEARCH_INCDIR=$PHP_MNOGOSEARCH/include MNOGOSEARCH_LIBDIR=$PHP_MNOGOSEARCH/lib fi echo $ac_n "checking for mnoGoSearch version""... $ac_c" 1>&6 echo "configure:35702: checking for mnoGoSearch version" >&5 if test -x "$MNOGOSEARCH_BINDIR/udm-config"; then MNOGOSEARCH_VERSION=`$MNOGOSEARCH_BINDIR/udm-config --version` MNOGOSEARCH_VERSION_ID=`$MNOGOSEARCH_BINDIR/udm-config --version-id` if test $? -ne 0; then echo "$ac_t""<= 3.1.9" 1>&6 { echo "configure: error: mnoGoSearch 3.1.10 at least required" 1>&2; exit 1; } fi if test "$MNOGOSEARCH_VERSION_ID" -lt 30110; then echo "$ac_t""<= 3.1.9" 1>&6 { echo "configure: error: mnoGoSearch 3.1.10 at least required" 1>&2; exit 1; } fi echo "$ac_t""$MNOGOSEARCH_VERSION" 1>&6 for ac_i in `$MNOGOSEARCH_BINDIR/udm-config --libs`; do case $ac_i in -l*) ac_ii=`echo $ac_i|cut -c 3-` case $ac_ii in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then MNOGOSEARCH_SHARED_LIBADD="$MNOGOSEARCH_SHARED_LIBADD -l$ac_ii" else case $ac_ii in c|c_r|pthread*) ;; *) LIBS="$LIBS -l$ac_ii" ;; esac fi ;; esac ;; -L*) ac_ii=`echo $ac_i|cut -c 3-` if test "$ac_ii" != "/usr/lib"; then if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then ai_p=$ac_ii else ep_dir="`echo $ac_ii|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ac_ii\"`" fi if test "$ext_shared" = "yes" && test -n "MNOGOSEARCH_SHARED_LIBADD"; then MNOGOSEARCH_SHARED_LIBADD="-R$ac_ii -L$ac_ii $MNOGOSEARCH_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi ;; esac done else { echo "configure: error: udm-config script not found in $MNOGOSEARCH_BINDIR" 1>&2; exit 1; } fi if test "$MNOGOSEARCH_INCDIR" != "/usr/include"; then if test -z "$MNOGOSEARCH_INCDIR" || echo "$MNOGOSEARCH_INCDIR" | grep '^/' >/dev/null ; then ai_p=$MNOGOSEARCH_INCDIR else ep_dir="`echo $MNOGOSEARCH_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MNOGOSEARCH_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_MNOGOSEARCH 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST MNOGOSEARCH_SHARED_LIBADD" EXT_SUBDIRS="$EXT_SUBDIRS mnogosearch" if test -d "$abs_srcdir/ext/mnogosearch"; then ext_builddir=ext/mnogosearch ext_srcdir=$abs_srcdir/ext/mnogosearch else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:36049: checking for msession support" >&5 fi # Check whether --with-msession or --without-msession was given. if test "${with_msession+set}" = set; then withval="$with_msession" PHP_MSESSION=$withval else PHP_MSESSION=no fi case $PHP_MSESSION in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MSESSION=`echo "$PHP_MSESSION"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MSESSION=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MSESSION" = "no" && PHP_MSESSION=yes fi if test -n "for msession support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MSESSION" != "no"; then if test -r $PHP_MSESSION/lib/libphoenix.a; then PHOENIX_DIR=$PHP_MSESSION else echo $ac_n "checking for msession in default path""... $ac_c" 1>&6 echo "configure:36099: checking for msession in default path" >&5 for i in /usr/local/phoenix /usr/local /usr; do if test -r $i/lib/libphoenix.a; then PHOENIX_DIR=$i echo "$ac_t""found in $i" 1>&6 fi done fi if test -z "$PHOENIX_DIR"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please reinstall the Phoenix / msession distribution" 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define HAVE_MSESSION 1 EOF if test "$ext_shared" = "yes"; then PHOENIX_LIB="-lphoenix $PHOENIX_LIB" if test -n ""$PHOENIX_DIR/lib""; then if test ""$PHOENIX_DIR/lib"" != "/usr/lib"; then if test -z ""$PHOENIX_DIR/lib"" || echo ""$PHOENIX_DIR/lib"" | grep '^/' >/dev/null ; then ai_p="$PHOENIX_DIR/lib" else ep_dir="`echo "$PHOENIX_DIR/lib"|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \""$PHOENIX_DIR/lib"\"`" fi if test "$ext_shared" = "yes" && test -n "PHOENIX_LIB"; then PHOENIX_LIB="-R"$PHOENIX_DIR/lib" -L"$PHOENIX_DIR/lib" $PHOENIX_LIB" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n ""$PHOENIX_DIR/lib""; then if test ""$PHOENIX_DIR/lib"" != "/usr/lib"; then if test -z ""$PHOENIX_DIR/lib"" || echo ""$PHOENIX_DIR/lib"" | grep '^/' >/dev/null ; then ai_p="$PHOENIX_DIR/lib" else ep_dir="`echo "$PHOENIX_DIR/lib"|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \""$PHOENIX_DIR/lib"\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R"$PHOENIX_DIR/lib" -L"$PHOENIX_DIR/lib" $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case phoenix in c|c_r|pthread*) ;; *) LIBS="-lphoenix $LIBS" ;; esac fi PHOENIX_INCLUDE="-I$PHOENIX_DIR" PHP_VAR_SUBST="$PHP_VAR_SUBST PHOENIX_LIB" EXT_SUBDIRS="$EXT_SUBDIRS msession" if test -d "$abs_srcdir/ext/msession"; then ext_builddir=ext/msession ext_srcdir=$abs_srcdir/ext/msession else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:36432: checking for mSQL support" >&5 fi # Check whether --with-msql or --without-msql was given. if test "${with_msql+set}" = set; then withval="$with_msql" PHP_MSQL=$withval else PHP_MSQL=no fi case $PHP_MSQL in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MSQL=`echo "$PHP_MSQL"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MSQL=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MSQL" = "no" && PHP_MSQL=yes fi if test -n "for mSQL support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MSQL" != "no"; then if test "$PHP_MSQL" = "yes"; then MSQL_INCDIR=/usr/local/Hughes/include MSQL_LIBDIR=/usr/local/Hughes/lib else MSQL_INCDIR=$PHP_MSQL/include MSQL_LIBDIR=$PHP_MSQL/lib fi if test "$ext_shared" = "yes"; then MSQL_SHARED_LIBADD="-lmsql $MSQL_SHARED_LIBADD" if test -n "$MSQL_LIBDIR"; then if test "$MSQL_LIBDIR" != "/usr/lib"; then if test -z "$MSQL_LIBDIR" || echo "$MSQL_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$MSQL_LIBDIR else ep_dir="`echo $MSQL_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MSQL_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "MSQL_SHARED_LIBADD"; then MSQL_SHARED_LIBADD="-R$MSQL_LIBDIR -L$MSQL_LIBDIR $MSQL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$MSQL_LIBDIR"; then if test "$MSQL_LIBDIR" != "/usr/lib"; then if test -z "$MSQL_LIBDIR" || echo "$MSQL_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$MSQL_LIBDIR else ep_dir="`echo $MSQL_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MSQL_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$MSQL_LIBDIR -L$MSQL_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case msql in c|c_r|pthread*) ;; *) LIBS="-lmsql $LIBS" ;; esac fi if test "$MSQL_INCDIR" != "/usr/include"; then if test -z "$MSQL_INCDIR" || echo "$MSQL_INCDIR" | grep '^/' >/dev/null ; then ai_p=$MSQL_INCDIR else ep_dir="`echo $MSQL_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MSQL_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_MSQL 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST MSQL_SHARED_LIBADD" EXT_SUBDIRS="$EXT_SUBDIRS msql" if test -d "$abs_srcdir/ext/msql"; then ext_builddir=ext/msql ext_srcdir=$abs_srcdir/ext/msql else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:36824: checking mSQL version" >&5 ac_php_oldcppflags=$CPPFLAGS CPPFLAGS="$INCLUDES $CPPFLAGS" cat > conftest.$ac_ext < #include "msql.h" int main() { int i = IDX_TYPE ; return 0; } EOF if { (eval echo configure:36836: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* cat >> confdefs.h <<\EOF #define MSQL1 0 EOF MSQL_VERSION="2.0 or newer" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat >> confdefs.h <<\EOF #define MSQL1 1 EOF MSQL_VERSION=1.0 fi rm -f conftest* CPPFLAGS=$ac_php_oldcppflags echo "$ac_t""$MSQL_VERSION" 1>&6 fi if test -n "for Muscat support"; then echo $ac_n "checking for Muscat support""... $ac_c" 1>&6 echo "configure:36868: checking for Muscat support" >&5 fi # Check whether --with-muscat or --without-muscat was given. if test "${with_muscat+set}" = set; then withval="$with_muscat" PHP_MUSCAT=$withval else PHP_MUSCAT=no fi case $PHP_MUSCAT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MUSCAT=`echo "$PHP_MUSCAT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MUSCAT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MUSCAT" = "no" && PHP_MUSCAT=yes fi if test -n "for Muscat support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MUSCAT" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS muscat" if test -d "$abs_srcdir/ext/muscat"; then ext_builddir=ext/muscat ext_srcdir=$abs_srcdir/ext/muscat else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi if test -z "$MUSCAT_LIBDIR"; then { echo "configure: error: Cannot find Muscat lib dir" 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define HAVE_MUSCAT 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST MUSCAT_SHARED_LIBADD" cat >> confdefs.h </dev/null ; then ai_p=$MUSCAT_LIBDIR else ep_dir="`echo $MUSCAT_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MUSCAT_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "MUSCAT_SHARED_LIBADD"; then MUSCAT_SHARED_LIBADD="-R$MUSCAT_LIBDIR -L$MUSCAT_LIBDIR $MUSCAT_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$MUSCAT_LIBDIR"; then if test "$MUSCAT_LIBDIR" != "/usr/lib"; then if test -z "$MUSCAT_LIBDIR" || echo "$MUSCAT_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$MUSCAT_LIBDIR else ep_dir="`echo $MUSCAT_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MUSCAT_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$MUSCAT_LIBDIR -L$MUSCAT_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case hdmuscat3.6 in c|c_r|pthread*) ;; *) LIBS="-lhdmuscat3.6 $LIBS" ;; esac fi if test "$MUSCAT_INCDIR" != "/usr/include"; then if test -z "$MUSCAT_INCDIR" || echo "$MUSCAT_INCDIR" | grep '^/' >/dev/null ; then ai_p=$MUSCAT_INCDIR else ep_dir="`echo $MUSCAT_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MUSCAT_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi # Local macros for automake & autoconf #---START: Used in for client configure if test -n "for MySQL support"; then echo $ac_n "checking for MySQL support""... $ac_c" 1>&6 echo "configure:37328: checking for MySQL support" >&5 fi # Check whether --with-mysql or --without-mysql was given. if test "${with_mysql+set}" = set; then withval="$with_mysql" PHP_MYSQL=$withval else PHP_MYSQL=yes fi case $PHP_MYSQL in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MYSQL=`echo "$PHP_MYSQL"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MYSQL=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MYSQL" = "no" && PHP_MYSQL=yes fi if test -n "for MySQL support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MYSQL" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_MYSQL 1 EOF if test "$PHP_SAFE_MODE" = "yes"; then cat >> confdefs.h <<\EOF #define DISALLOW_MYSQL_LOAD_LOCAL 1 EOF fi EXT_SUBDIRS="$EXT_SUBDIRS mysql" if test -d "$abs_srcdir/ext/mysql"; then ext_builddir=ext/mysql ext_srcdir=$abs_srcdir/ext/mysql else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:37594: checking for MySQL UNIX socket" >&5 MYSQL_SOCK=/tmp/mysql.sock for i in \ /var/run/mysqld/mysqld.sock \ /var/tmp/mysql.sock \ /var/run/mysql/mysql.sock \ /var/lib/mysql/mysql.sock \ /var/mysql/mysql.sock \ /Private/tmp/mysql.sock \ ; do if test -r $i; then MYSQL_SOCK=$i fi done cat >> confdefs.h <&6 echo $ac_n "checking for inline""... $ac_c" 1>&6 echo "configure:37615: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* done fi echo "$ac_t""$ac_cv_c_inline" 1>&6 case "$ac_cv_c_inline" in inline | yes) ;; no) cat >> confdefs.h <<\EOF #define inline EOF ;; *) cat >> confdefs.h <&6 echo "configure:37655: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #ifdef signal #undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main() { int i; ; return 0; } EOF if { (eval echo configure:37677: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_type_signal=int fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_signal" 1>&6 cat >> confdefs.h <> confdefs.h <<\EOF #define UNDEF_THREADS_HACK EOF echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:37708: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:37721: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:37788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi for ac_hdr in sgtty.h sys/ioctl.h \ fcntl.h float.h floatingpoint.h ieeefp.h limits.h \ memory.h pwd.h select.h \ stdlib.h stddef.h \ strings.h string.h synch.h sys/mman.h sys/socket.h \ sys/timeb.h sys/types.h sys/un.h sys/vadvise.h sys/wait.h term.h \ unistd.h utime.h sys/utime.h termio.h termios.h sched.h crypt.h alloca.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:37821: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:37831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done echo $ac_n "checking size of char""... $ac_c" 1>&6 echo "configure:37863: checking size of char" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_char=1 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(char)); exit(0); } EOF if { (eval echo configure:37882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_char=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_char=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_char" 1>&6 cat >> confdefs.h <&6 echo "configure:37903: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_int=4 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); exit(0); } EOF if { (eval echo configure:37922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_int=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_int" 1>&6 cat >> confdefs.h <&6 echo "configure:37942: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_long=4 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); exit(0); } EOF if { (eval echo configure:37961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long" 1>&6 cat >> confdefs.h <&6 echo "configure:37981: checking size of long long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_long_long=8 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long long)); exit(0); } EOF if { (eval echo configure:38000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long_long=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6 cat >> confdefs.h <&6 echo "configure:38020: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 echo "configure:38053: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include int main() { struct tm *tp; ; return 0; } EOF if { (eval echo configure:38067: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_time=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_time" 1>&6 if test $ac_cv_header_time = yes; then cat >> confdefs.h <<\EOF #define TIME_WITH_SYS_TIME 1 EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 echo "configure:38088: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "uid_t" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_uid_t=yes else rm -rf conftest* ac_cv_type_uid_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_uid_t" 1>&6 if test $ac_cv_type_uid_t = no; then cat >> confdefs.h <<\EOF #define uid_t int EOF cat >> confdefs.h <<\EOF #define gid_t int EOF fi echo $ac_n "checking for type ulong""... $ac_c" 1>&6 echo "configure:38123: checking for type ulong" >&5 if eval "test \"`echo '$''{'ac_cv_ulong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_ulong=no else cat > conftest.$ac_ext < #include main() { ulong foo; foo++; exit(0); } EOF if { (eval echo configure:38142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_ulong=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_ulong=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_ulong" 1>&6 if test "$ac_cv_ulong" = "yes" then cat >> confdefs.h <<\EOF #define HAVE_ULONG EOF fi echo $ac_n "checking for type uchar""... $ac_c" 1>&6 echo "configure:38166: checking for type uchar" >&5 if eval "test \"`echo '$''{'ac_cv_uchar'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_uchar=no else cat > conftest.$ac_ext < #include main() { uchar foo; foo++; exit(0); } EOF if { (eval echo configure:38185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_uchar=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_uchar=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_uchar" 1>&6 if test "$ac_cv_uchar" = "yes" then cat >> confdefs.h <<\EOF #define HAVE_UCHAR EOF fi echo $ac_n "checking for type uint""... $ac_c" 1>&6 echo "configure:38209: checking for type uint" >&5 if eval "test \"`echo '$''{'ac_cv_uint'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_uint=no else cat > conftest.$ac_ext < #include main() { uint foo; foo++; exit(0); } EOF if { (eval echo configure:38228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_uint=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_uint=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_uint" 1>&6 if test "$ac_cv_uint" = "yes" then cat >> confdefs.h <<\EOF #define HAVE_UINT EOF fi echo $ac_n "checking for type ushort""... $ac_c" 1>&6 echo "configure:38252: checking for type ushort" >&5 if eval "test \"`echo '$''{'ac_cv_ushort'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_ushort=no else cat > conftest.$ac_ext < #include main() { ushort foo; foo++; exit(0); } EOF if { (eval echo configure:38271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_ushort=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_ushort=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_ushort" 1>&6 if test "$ac_cv_ushort" = "yes" then cat >> confdefs.h <<\EOF #define HAVE_USHORT EOF fi echo $ac_n "checking for int8""... $ac_c" 1>&6 echo "configure:38295: checking for int8" >&5 if eval "test \"`echo '$''{'ac_cv_int8'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_int8=no else cat > conftest.$ac_ext < #endif #ifdef HAVE_STDDEF_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif int main() { int8 i; return 0; } EOF if { (eval echo configure:38325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_int8=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_int8=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_int8" 1>&6 if test "$ac_cv_int8" = "yes" then cat >> confdefs.h <<\EOF #define HAVE_INT_8_16_32 EOF fi ac_save_CXXFLAGS="$CXXFLAGS" echo $ac_n "checking base type of last arg to accept""... $ac_c" 1>&6 echo "configure:38351: checking base type of last arg to accept" >&5 if eval "test \"`echo '$''{'mysql_cv_btype_last_arg_accept'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross if test "$ac_cv_prog_gxx" = "yes" then CXXFLAGS="$CXXFLAGS -Werror" fi mysql_cv_btype_last_arg_accept=none cat > conftest.$ac_ext < #include #include int main() { int a = accept(1, (struct sockaddr *) 0, (socklen_t *) 0); ; return 0; } EOF if { (eval echo configure:38379: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mysql_cv_btype_last_arg_accept=socklen_t else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* if test $mysql_cv_btype_last_arg_accept = none; then cat > conftest.$ac_ext < #include #include int main() { int a = accept(1, (struct sockaddr *) 0, (size_t *) 0); ; return 0; } EOF if { (eval echo configure:38399: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mysql_cv_btype_last_arg_accept=size_t else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test $mysql_cv_btype_last_arg_accept = none; then mysql_cv_btype_last_arg_accept=int fi fi echo "$ac_t""$mysql_cv_btype_last_arg_accept" 1>&6 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat >> confdefs.h <&6 echo "configure:38428: checking return type of qsort" >&5 if eval "test \"`echo '$''{'mysql_cv_type_qsort'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef __cplusplus extern "C" #endif void qsort(void *base, size_t nel, size_t width, int (*compar) (const void *, const void *)); int main() { int i; ; return 0; } EOF if { (eval echo configure:38445: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mysql_cv_type_qsort=void else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mysql_cv_type_qsort=int fi rm -f conftest* fi echo "$ac_t""$mysql_cv_type_qsort" 1>&6 cat >> confdefs.h <> confdefs.h <&6 echo "configure:38494: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:38522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done # This is special for libmysql for ac_func in strtok_r do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:38551: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:38579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done # Check definition of gethostbyname_r (glibc2.0.100 is different from Solaris) ac_save_CXXFLAGS="$CXXFLAGS" echo $ac_n "checking style of gethostname_r routines""... $ac_c" 1>&6 echo "configure:38608: checking style of gethostname_r routines" >&5 if eval "test \"`echo '$''{'mysql_cv_gethostname_style'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross if test "$ac_cv_prog_gxx" = "yes" then CXXFLAGS="$CXXFLAGS -Werror" fi cat > conftest.$ac_ext < #include #include #include #include #include int main() { int skr; skr = gethostbyname_r((const char *) 0, (struct hostent*) 0, (char*) 0, 0, (struct hostent **) 0, &skr); ; return 0; } EOF if { (eval echo configure:38643: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mysql_cv_gethostname_style=glibc2 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mysql_cv_gethostname_style=other fi rm -f conftest* fi echo "$ac_t""$mysql_cv_gethostname_style" 1>&6 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross CXXFLAGS="$ac_save_CXXFLAGS" if test "$mysql_cv_gethostname_style" = "glibc2" then cat >> confdefs.h <<\EOF #define HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE EOF fi # Check 3rd argument of getthostbyname_r ac_save_CXXFLAGS="$CXXFLAGS" echo $ac_n "checking 3 argument to gethostname_r routines""... $ac_c" 1>&6 echo "configure:38675: checking 3 argument to gethostname_r routines" >&5 if eval "test \"`echo '$''{'mysql_cv_gethostname_arg'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross if test "$ac_cv_prog_gxx" = "yes" then CXXFLAGS="$CXXFLAGS -Werror" fi cat > conftest.$ac_ext < #include #include #include #include #include int main() { int skr; skr = gethostbyname_r((const char *) 0, (struct hostent*) 0, (hostent_data*) 0); ; return 0; } EOF if { (eval echo configure:38709: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mysql_cv_gethostname_arg=hostent_data else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mysql_cv_gethostname_arg=char fi rm -f conftest* fi echo "$ac_t""$mysql_cv_gethostname_arg" 1>&6 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross CXXFLAGS="$ac_save_CXXFLAGS" if test "$mysql_cv_gethostname_arg" = "hostent_data" then cat >> confdefs.h <<\EOF #define HAVE_GETHOSTBYNAME_R_RETURN_INT EOF fi # Check definition of pthread_getspecific echo $ac_n "checking "args to pthread_getspecific"""... $ac_c" 1>&6 echo "configure:38742: checking "args to pthread_getspecific"" >&5 if eval "test \"`echo '$''{'mysql_cv_getspecific_args'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { void *pthread_getspecific(pthread_key_t key); pthread_getspecific((pthread_key_t) NULL); ; return 0; } EOF if { (eval echo configure:38759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mysql_cv_getspecific_args=POSIX else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mysql_cv_getspecific_args=other fi rm -f conftest* fi echo "$ac_t""$mysql_cv_getspecific_args" 1>&6 if test "$mysql_cv_getspecific_args" = "other" then cat >> confdefs.h <<\EOF #define HAVE_NONPOSIX_PTHREAD_GETSPECIFIC EOF fi # Check definition of pthread_mutex_init echo $ac_n "checking "args to pthread_mutex_init"""... $ac_c" 1>&6 echo "configure:38783: checking "args to pthread_mutex_init"" >&5 if eval "test \"`echo '$''{'mysql_cv_mutex_init_args'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { pthread_mutexattr_t attr; pthread_mutex_t mp; pthread_mutex_init(&mp,&attr); ; return 0; } EOF if { (eval echo configure:38802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mysql_cv_mutex_init_args=POSIX else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mysql_cv_mutex_init_args=other fi rm -f conftest* fi echo "$ac_t""$mysql_cv_mutex_init_args" 1>&6 if test "$mysql_cv_mutex_init_args" = "other" then cat >> confdefs.h <<\EOF #define HAVE_NONPOSIX_PTHREAD_MUTEX_INIT EOF fi # Check definition of readdir_r echo $ac_n "checking "args to readdir_r"""... $ac_c" 1>&6 echo "configure:38826: checking "args to readdir_r"" >&5 if eval "test \"`echo '$''{'mysql_cv_readdir_r'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); readdir_r((DIR *) NULL, (struct dirent *) NULL, (struct dirent **) NULL); ; return 0; } EOF if { (eval echo configure:38844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* mysql_cv_readdir_r=POSIX else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mysql_cv_readdir_r=other fi rm -f conftest* fi echo "$ac_t""$mysql_cv_readdir_r" 1>&6 if test "$mysql_cv_readdir_r" = "POSIX" then cat >> confdefs.h <<\EOF #define HAVE_READDIR_R EOF fi # Check definition av posix sigwait() echo $ac_n "checking "style of sigwait"""... $ac_c" 1>&6 echo "configure:38868: checking "style of sigwait"" >&5 if eval "test \"`echo '$''{'mysql_cv_sigwait'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { #ifndef _AIX sigset_t set; int sig; sigwait(&set,&sig); #endif ; return 0; } EOF if { (eval echo configure:38889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* mysql_cv_sigwait=POSIX else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mysql_cv_sigwait=other fi rm -f conftest* fi echo "$ac_t""$mysql_cv_sigwait" 1>&6 if test "$mysql_cv_sigwait" = "POSIX" then cat >> confdefs.h <<\EOF #define HAVE_SIGWAIT EOF fi if test "$mysql_cv_sigwait" != "POSIX" then unset mysql_cv_sigwait # Check definition av posix sigwait() echo $ac_n "checking "style of sigwait"""... $ac_c" 1>&6 echo "configure:38915: checking "style of sigwait"" >&5 if eval "test \"`echo '$''{'mysql_cv_sigwait'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { sigset_t set; int sig; sigwait(&set); ; return 0; } EOF if { (eval echo configure:38934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* mysql_cv_sigwait=NONPOSIX else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mysql_cv_sigwait=other fi rm -f conftest* fi echo "$ac_t""$mysql_cv_sigwait" 1>&6 if test "$mysql_cv_sigwait" = "NONPOSIX" then cat >> confdefs.h <<\EOF #define HAVE_NONPOSIX_SIGWAIT EOF fi fi PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES $ext_builddir/libmysql/Makefile" MYSQL_LIBADD=libmysql/libmysql_client.la MYSQL_SHARED_LIBADD=libmysql/libmysql_client.la MYSQL_SUBDIRS=libmysql PHP_VAR_SUBST="$PHP_VAR_SUBST MYSQL_LIBADD" PHP_VAR_SUBST="$PHP_VAR_SUBST MYSQL_SUBDIRS" lib_makefile="$ext_builddir/libmysql/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir/libmysql if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile</dev/null ; then ai_p=$ext_srcdir/libmysql else ep_dir="`echo $ext_srcdir/libmysql|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ext_srcdir/libmysql\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi MYSQL_MODULE_TYPE=builtin elif test "$PHP_MYSQL" != "no"; then echo $ac_n "checking size of char""... $ac_c" 1>&6 echo "configure:39064: checking size of char" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_char=1 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(char)); exit(0); } EOF if { (eval echo configure:39083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_char=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_char=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_char" 1>&6 cat >> confdefs.h <&6 echo "configure:39104: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_int=4 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); exit(0); } EOF if { (eval echo configure:39123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_int=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_int" 1>&6 cat >> confdefs.h <&6 echo "configure:39143: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_long=4 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); exit(0); } EOF if { (eval echo configure:39162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long" 1>&6 cat >> confdefs.h <&6 echo "configure:39182: checking size of long long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_long_long=8 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long long)); exit(0); } EOF if { (eval echo configure:39201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long_long=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6 cat >> confdefs.h <&6 echo "configure:39221: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 echo "configure:39254: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include int main() { struct tm *tp; ; return 0; } EOF if { (eval echo configure:39268: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_time=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_time" 1>&6 if test $ac_cv_header_time = yes; then cat >> confdefs.h <<\EOF #define TIME_WITH_SYS_TIME 1 EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 echo "configure:39289: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "uid_t" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_uid_t=yes else rm -rf conftest* ac_cv_type_uid_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_uid_t" 1>&6 if test $ac_cv_type_uid_t = no; then cat >> confdefs.h <<\EOF #define uid_t int EOF cat >> confdefs.h <<\EOF #define gid_t int EOF fi echo $ac_n "checking for type ulong""... $ac_c" 1>&6 echo "configure:39324: checking for type ulong" >&5 if eval "test \"`echo '$''{'ac_cv_ulong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_ulong=no else cat > conftest.$ac_ext < #include main() { ulong foo; foo++; exit(0); } EOF if { (eval echo configure:39343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_ulong=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_ulong=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_ulong" 1>&6 if test "$ac_cv_ulong" = "yes" then cat >> confdefs.h <<\EOF #define HAVE_ULONG EOF fi echo $ac_n "checking for type uchar""... $ac_c" 1>&6 echo "configure:39367: checking for type uchar" >&5 if eval "test \"`echo '$''{'ac_cv_uchar'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_uchar=no else cat > conftest.$ac_ext < #include main() { uchar foo; foo++; exit(0); } EOF if { (eval echo configure:39386: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_uchar=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_uchar=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_uchar" 1>&6 if test "$ac_cv_uchar" = "yes" then cat >> confdefs.h <<\EOF #define HAVE_UCHAR EOF fi echo $ac_n "checking for type uint""... $ac_c" 1>&6 echo "configure:39410: checking for type uint" >&5 if eval "test \"`echo '$''{'ac_cv_uint'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_uint=no else cat > conftest.$ac_ext < #include main() { uint foo; foo++; exit(0); } EOF if { (eval echo configure:39429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_uint=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_uint=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_uint" 1>&6 if test "$ac_cv_uint" = "yes" then cat >> confdefs.h <<\EOF #define HAVE_UINT EOF fi echo $ac_n "checking for type ushort""... $ac_c" 1>&6 echo "configure:39453: checking for type ushort" >&5 if eval "test \"`echo '$''{'ac_cv_ushort'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_ushort=no else cat > conftest.$ac_ext < #include main() { ushort foo; foo++; exit(0); } EOF if { (eval echo configure:39472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_ushort=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_ushort=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_ushort" 1>&6 if test "$ac_cv_ushort" = "yes" then cat >> confdefs.h <<\EOF #define HAVE_USHORT EOF fi echo $ac_n "checking for int8""... $ac_c" 1>&6 echo "configure:39496: checking for int8" >&5 if eval "test \"`echo '$''{'ac_cv_int8'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_int8=no else cat > conftest.$ac_ext < #endif #ifdef HAVE_STDDEF_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif int main() { int8 i; return 0; } EOF if { (eval echo configure:39526: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_int8=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_int8=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_int8" 1>&6 if test "$ac_cv_int8" = "yes" then cat >> confdefs.h <<\EOF #define HAVE_INT_8_16_32 EOF fi ac_save_CXXFLAGS="$CXXFLAGS" echo $ac_n "checking base type of last arg to accept""... $ac_c" 1>&6 echo "configure:39552: checking base type of last arg to accept" >&5 if eval "test \"`echo '$''{'mysql_cv_btype_last_arg_accept'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross if test "$ac_cv_prog_gxx" = "yes" then CXXFLAGS="$CXXFLAGS -Werror" fi mysql_cv_btype_last_arg_accept=none cat > conftest.$ac_ext < #include #include int main() { int a = accept(1, (struct sockaddr *) 0, (socklen_t *) 0); ; return 0; } EOF if { (eval echo configure:39580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mysql_cv_btype_last_arg_accept=socklen_t else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* if test $mysql_cv_btype_last_arg_accept = none; then cat > conftest.$ac_ext < #include #include int main() { int a = accept(1, (struct sockaddr *) 0, (size_t *) 0); ; return 0; } EOF if { (eval echo configure:39600: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mysql_cv_btype_last_arg_accept=size_t else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi if test $mysql_cv_btype_last_arg_accept = none; then mysql_cv_btype_last_arg_accept=int fi fi echo "$ac_t""$mysql_cv_btype_last_arg_accept" 1>&6 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat >> confdefs.h <&6 echo "configure:39629: checking return type of qsort" >&5 if eval "test \"`echo '$''{'mysql_cv_type_qsort'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef __cplusplus extern "C" #endif void qsort(void *base, size_t nel, size_t width, int (*compar) (const void *, const void *)); int main() { int i; ; return 0; } EOF if { (eval echo configure:39646: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* mysql_cv_type_qsort=void else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mysql_cv_type_qsort=int fi rm -f conftest* fi echo "$ac_t""$mysql_cv_type_qsort" 1>&6 cat >> confdefs.h <> confdefs.h <&2; exit 1; } fi MYSQL_MODULE_TYPE=external for i in lib lib/mysql; do str="$MYSQL_DIR/$i/libmysqlclient.*" for j in `echo $str`; do if test -r $j; then MYSQL_LIB_DIR=$MYSQL_DIR/$i break 2 fi done done if test -z "$MYSQL_LIB_DIR"; then { echo "configure: error: Cannot find mysqlclient library under $MYSQL_DIR" 1>&2; exit 1; } fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$MYSQL_LIB_DIR $LDFLAGS" echo $ac_n "checking for mysql_close in -lmysqlclient""... $ac_c" 1>&6 echo "configure:39712: checking for mysql_close in -lmysqlclient" >&5 ac_lib_var=`echo mysqlclient'_'mysql_close | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lmysqlclient $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS if test "$PHP_ZLIB_DIR" != "no"; then if test "$ext_shared" = "yes"; then MYSQL_SHARED_LIBADD="-lz $MYSQL_SHARED_LIBADD" if test -n "$PHP_ZLIB_DIR"; then if test "$PHP_ZLIB_DIR" != "/usr/lib"; then if test -z "$PHP_ZLIB_DIR" || echo "$PHP_ZLIB_DIR" | grep '^/' >/dev/null ; then ai_p=$PHP_ZLIB_DIR else ep_dir="`echo $PHP_ZLIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_ZLIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n "MYSQL_SHARED_LIBADD"; then MYSQL_SHARED_LIBADD="-R$PHP_ZLIB_DIR -L$PHP_ZLIB_DIR $MYSQL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PHP_ZLIB_DIR"; then if test "$PHP_ZLIB_DIR" != "/usr/lib"; then if test -z "$PHP_ZLIB_DIR" || echo "$PHP_ZLIB_DIR" | grep '^/' >/dev/null ; then ai_p=$PHP_ZLIB_DIR else ep_dir="`echo $PHP_ZLIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_ZLIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PHP_ZLIB_DIR -L$PHP_ZLIB_DIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case z in c|c_r|pthread*) ;; *) LIBS="-lz $LIBS" ;; esac fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$PHP_ZLIB_DIR/lib -L$MYSQL_LIB_DIR $LDFLAGS" echo $ac_n "checking for mysql_error in -lmysqlclient""... $ac_c" 1>&6 echo "configure:39856: checking for mysql_error in -lmysqlclient" >&5 ac_lib_var=`echo mysqlclient'_'mysql_error | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lmysqlclient $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: mysql configure failed. Please check config.log for more information." 1>&2; exit 1; } fi MYSQL_LIBS="-L$PHP_ZLIB_DIR/lib -lz" else case z in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then MYSQL_SHARED_LIBADD="-lz $MYSQL_SHARED_LIBADD" else case z in c|c_r|pthread*) ;; *) LIBS="-lz $LIBS" ;; esac fi ;; esac save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$MYSQL_LIB_DIR $LDFLAGS" echo $ac_n "checking for mysql_errno in -lmysqlclient""... $ac_c" 1>&6 echo "configure:39939: checking for mysql_errno in -lmysqlclient" >&5 ac_lib_var=`echo mysqlclient'_'mysql_errno | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lmysqlclient $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: Try adding --with-zlib-dir=. Please check config.log for more information." 1>&2; exit 1; } fi MYSQL_LIBS="-lz" fi fi if test "$ext_shared" = "yes"; then MYSQL_SHARED_LIBADD="-lmysqlclient $MYSQL_SHARED_LIBADD" if test -n "$MYSQL_LIB_DIR"; then if test "$MYSQL_LIB_DIR" != "/usr/lib"; then if test -z "$MYSQL_LIB_DIR" || echo "$MYSQL_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$MYSQL_LIB_DIR else ep_dir="`echo $MYSQL_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MYSQL_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n "MYSQL_SHARED_LIBADD"; then MYSQL_SHARED_LIBADD="-R$MYSQL_LIB_DIR -L$MYSQL_LIB_DIR $MYSQL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$MYSQL_LIB_DIR"; then if test "$MYSQL_LIB_DIR" != "/usr/lib"; then if test -z "$MYSQL_LIB_DIR" || echo "$MYSQL_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$MYSQL_LIB_DIR else ep_dir="`echo $MYSQL_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MYSQL_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$MYSQL_LIB_DIR -L$MYSQL_LIB_DIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case mysqlclient in c|c_r|pthread*) ;; *) LIBS="-lmysqlclient $LIBS" ;; esac fi MYSQL_LIBS="-L$MYSQL_LIB_DIR -lmysqlclient $MYSQL_LIBS" if test "$MYSQL_INC_DIR" != "/usr/include"; then if test -z "$MYSQL_INC_DIR" || echo "$MYSQL_INC_DIR" | grep '^/' >/dev/null ; then ai_p=$MYSQL_INC_DIR else ep_dir="`echo $MYSQL_INC_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MYSQL_INC_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi MYSQL_INCLUDE="-I$MYSQL_INC_DIR" echo $ac_n "checking for MySQL UNIX socket""... $ac_c" 1>&6 echo "configure:40124: checking for MySQL UNIX socket" >&5 MYSQL_SOCK=/tmp/mysql.sock for i in \ /var/run/mysqld/mysqld.sock \ /var/tmp/mysql.sock \ /var/run/mysql/mysql.sock \ /var/lib/mysql/mysql.sock \ /var/mysql/mysql.sock \ /Private/tmp/mysql.sock \ ; do if test -r $i; then MYSQL_SOCK=$i fi done cat >> confdefs.h <&6 else MYSQL_MODULE_TYPE=none fi PHP_VAR_SUBST="$PHP_VAR_SUBST MYSQL_SHARED_LIBADD" PHP_VAR_SUBST="$PHP_VAR_SUBST MYSQL_MODULE_TYPE" PHP_VAR_SUBST="$PHP_VAR_SUBST MYSQL_LIBS" PHP_VAR_SUBST="$PHP_VAR_SUBST MYSQL_INCLUDE" if test -n "for ncurses support"; then echo $ac_n "checking for ncurses support""... $ac_c" 1>&6 echo "configure:40176: checking for ncurses support" >&5 fi # Check whether --with-ncurses or --without-ncurses was given. if test "${with_ncurses+set}" = set; then withval="$with_ncurses" PHP_NCURSES=$withval else PHP_NCURSES=no fi case $PHP_NCURSES in shared,*) ext_output="yes, shared" ext_shared=yes PHP_NCURSES=`echo "$PHP_NCURSES"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_NCURSES=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_NCURSES" = "no" && PHP_NCURSES=yes fi if test -n "for ncurses support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_NCURSES" != "no"; then # --with-ncurses -> check with-path SEARCH_PATH="/usr/local /usr" SEARCH_FOR="/include/curses.h" if test -r $PHP_NCURSES/; then # path given as parameter NCURSES_DIR=$PHP_NCURSES else # search default path list echo $ac_n "checking for ncurses files in default path""... $ac_c" 1>&6 echo "configure:40231: checking for ncurses files in default path" >&5 for i in $SEARCH_PATH ; do if test -r $i/$SEARCH_FOR; then NCURSES_DIR=$i echo "$ac_t""found in $i" 1>&6 fi done fi if test -z "$NCURSES_DIR"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please reinstall the ncurses distribution" 1>&2; exit 1; } fi # --with-ncurses -> add include path if test "$NCURSES_DIR/include" != "/usr/include"; then if test -z "$NCURSES_DIR/include" || echo "$NCURSES_DIR/include" | grep '^/' >/dev/null ; then ai_p=$NCURSES_DIR/include else ep_dir="`echo $NCURSES_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$NCURSES_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi # --with-ncurses -> chech for lib and symbol presence LIBNAME=ncurses LIBSYMBOL=initscr save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$NCURSES_DIR/lib -lm $LDFLAGS" echo $ac_n "checking for $LIBSYMBOL in -l$LIBNAME""... $ac_c" 1>&6 echo "configure:40288: checking for $LIBSYMBOL in -l$LIBNAME" >&5 ac_lib_var=`echo $LIBNAME'_'$LIBSYMBOL | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$LIBNAME $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_NCURSESLIB 1 EOF if test "$ext_shared" = "yes"; then NCURSES_SHARED_LIBADD="-l$LIBNAME $NCURSES_SHARED_LIBADD" if test -n "$NCURSES_DIR/lib"; then if test "$NCURSES_DIR/lib" != "/usr/lib"; then if test -z "$NCURSES_DIR/lib" || echo "$NCURSES_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$NCURSES_DIR/lib else ep_dir="`echo $NCURSES_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$NCURSES_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "NCURSES_SHARED_LIBADD"; then NCURSES_SHARED_LIBADD="-R$NCURSES_DIR/lib -L$NCURSES_DIR/lib $NCURSES_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$NCURSES_DIR/lib"; then if test "$NCURSES_DIR/lib" != "/usr/lib"; then if test -z "$NCURSES_DIR/lib" || echo "$NCURSES_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$NCURSES_DIR/lib else ep_dir="`echo $NCURSES_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$NCURSES_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$NCURSES_DIR/lib -L$NCURSES_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $LIBNAME in c|c_r|pthread*) ;; *) LIBS="-l$LIBNAME $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: Wrong ncurses lib version or lib not found" 1>&2; exit 1; } fi echo $ac_n "checking for color_set in -lncurses""... $ac_c" 1>&6 echo "configure:40437: checking for color_set in -lncurses" >&5 ac_lib_var=`echo ncurses'_'color_set | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lncurses $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_NCURSES_COLOR_SET 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for slk_color in -lncurses""... $ac_c" 1>&6 echo "configure:40480: checking for slk_color in -lncurses" >&5 ac_lib_var=`echo ncurses'_'slk_color | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lncurses $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_NCURSES_SLK_COLOR 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for asume_default_colors in -lncurses""... $ac_c" 1>&6 echo "configure:40523: checking for asume_default_colors in -lncurses" >&5 ac_lib_var=`echo ncurses'_'asume_default_colors | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lncurses $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_NCURSES_ASSUME_DEFAULT_COLORS 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for use_extended_names in -lncurses""... $ac_c" 1>&6 echo "configure:40566: checking for use_extended_names in -lncurses" >&5 ac_lib_var=`echo ncurses'_'use_extended_names | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lncurses $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_NCURSES_USE_EXTENDED_NAMES 1 EOF else echo "$ac_t""no" 1>&6 fi EXT_SUBDIRS="$EXT_SUBDIRS ncurses" if test -d "$abs_srcdir/ext/ncurses"; then ext_builddir=ext/ncurses ext_srcdir=$abs_srcdir/ext/ncurses else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "cli" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:40827: checking for Oracle-OCI8 support" >&5 fi # Check whether --with-oci8 or --without-oci8 was given. if test "${with_oci8+set}" = set; then withval="$with_oci8" PHP_OCI8=$withval else PHP_OCI8=no fi case $PHP_OCI8 in shared,*) ext_output="yes, shared" ext_shared=yes PHP_OCI8=`echo "$PHP_OCI8"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_OCI8=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_OCI8" = "no" && PHP_OCI8=yes fi if test -n "for Oracle-OCI8 support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_OCI8" != "no"; then echo $ac_n "checking Oracle Install-Dir""... $ac_c" 1>&6 echo "configure:40874: checking Oracle Install-Dir" >&5 if test "$PHP_OCI8" = "yes"; then OCI8_DIR=$ORACLE_HOME else OCI8_DIR=$PHP_OCI8 fi echo "$ac_t""$OCI8_DIR" 1>&6 if test -d "$OCI8_DIR/rdbms/public"; then if test "$OCI8_DIR/rdbms/public" != "/usr/include"; then if test -z "$OCI8_DIR/rdbms/public" || echo "$OCI8_DIR/rdbms/public" | grep '^/' >/dev/null ; then ai_p=$OCI8_DIR/rdbms/public else ep_dir="`echo $OCI8_DIR/rdbms/public|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OCI8_DIR/rdbms/public\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -d "$OCI8_DIR/rdbms/demo"; then if test "$OCI8_DIR/rdbms/demo" != "/usr/include"; then if test -z "$OCI8_DIR/rdbms/demo" || echo "$OCI8_DIR/rdbms/demo" | grep '^/' >/dev/null ; then ai_p=$OCI8_DIR/rdbms/demo else ep_dir="`echo $OCI8_DIR/rdbms/demo|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OCI8_DIR/rdbms/demo\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -d "$OCI8_DIR/network/public"; then if test "$OCI8_DIR/network/public" != "/usr/include"; then if test -z "$OCI8_DIR/network/public" || echo "$OCI8_DIR/network/public" | grep '^/' >/dev/null ; then ai_p=$OCI8_DIR/network/public else ep_dir="`echo $OCI8_DIR/network/public|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OCI8_DIR/network/public\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -d "$OCI8_DIR/plsql/public"; then if test "$OCI8_DIR/plsql/public" != "/usr/include"; then if test -z "$OCI8_DIR/plsql/public" || echo "$OCI8_DIR/plsql/public" | grep '^/' >/dev/null ; then ai_p=$OCI8_DIR/plsql/public else ep_dir="`echo $OCI8_DIR/plsql/public|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OCI8_DIR/plsql/public\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -f "$OCI8_DIR/lib/sysliblist"; then for ac_i in `cat $OCI8_DIR/lib/sysliblist`; do case $ac_i in -l*) ac_ii=`echo $ac_i|cut -c 3-` case $ac_ii in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then OCI8_SYSLIB="$OCI8_SYSLIB -l$ac_ii" else case $ac_ii in c|c_r|pthread*) ;; *) LIBS="$LIBS -l$ac_ii" ;; esac fi ;; esac ;; -L*) ac_ii=`echo $ac_i|cut -c 3-` if test "$ac_ii" != "/usr/lib"; then if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then ai_p=$ac_ii else ep_dir="`echo $ac_ii|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ac_ii\"`" fi if test "$ext_shared" = "yes" && test -n "OCI8_SYSLIB"; then OCI8_SYSLIB="-R$ac_ii -L$ac_ii $OCI8_SYSLIB" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi ;; esac done elif test -f "$OCI8_DIR/rdbms/lib/sysliblist"; then for ac_i in `cat $OCI8_DIR/rdbms/lib/sysliblist`; do case $ac_i in -l*) ac_ii=`echo $ac_i|cut -c 3-` case $ac_ii in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then OCI8_SYSLIB="$OCI8_SYSLIB -l$ac_ii" else case $ac_ii in c|c_r|pthread*) ;; *) LIBS="$LIBS -l$ac_ii" ;; esac fi ;; esac ;; -L*) ac_ii=`echo $ac_i|cut -c 3-` if test "$ac_ii" != "/usr/lib"; then if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then ai_p=$ac_ii else ep_dir="`echo $ac_ii|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ac_ii\"`" fi if test "$ext_shared" = "yes" && test -n "OCI8_SYSLIB"; then OCI8_SYSLIB="-R$ac_ii -L$ac_ii $OCI8_SYSLIB" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi ;; esac done fi echo $ac_n "checking Oracle version""... $ac_c" 1>&6 echo "configure:41165: checking Oracle version" >&5 if test -s "$OCI8_DIR/orainst/unix.rgs"; then OCI8_VERSION=`grep '"ocommon"' $OCI8_DIR/orainst/unix.rgs | sed 's/ */:/g' | cut -d: -f 6 | cut -c 2-4` test -z "$OCI8_VERSION" && OCI8_VERSION=7.3 elif test -f $OCI8_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then OCI8_VERSION=9.0 elif test -f $OCI8_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.8.0; then OCI8_VERSION=8.1 elif test -f $OCI8_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.1.0; then OCI8_VERSION=8.0 elif test -f $OCI8_DIR/lib/libclntsh.a; then if test -f $OCI8_DIR/lib/libcore4.a; then OCI8_VERSION=8.0 else OCI8_VERSION=8.1 fi else { echo "configure: error: Oracle-OCI8 needed libraries not found" 1>&2; exit 1; } fi echo "$ac_t""$OCI8_VERSION" 1>&6 case $OCI8_VERSION in 8.0) if test "$ext_shared" = "yes"; then OCI8_SHARED_LIBADD="-lnlsrtl3 $OCI8_SHARED_LIBADD" if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n "OCI8_SHARED_LIBADD"; then OCI8_SHARED_LIBADD="-R"" -L"" $OCI8_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R"" -L"" $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case nlsrtl3 in c|c_r|pthread*) ;; *) LIBS="-lnlsrtl3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then OCI8_SHARED_LIBADD="-lcore4 $OCI8_SHARED_LIBADD" if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n "OCI8_SHARED_LIBADD"; then OCI8_SHARED_LIBADD="-R"" -L"" $OCI8_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R"" -L"" $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case core4 in c|c_r|pthread*) ;; *) LIBS="-lcore4 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then OCI8_SHARED_LIBADD="-lpsa $OCI8_SHARED_LIBADD" if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n "OCI8_SHARED_LIBADD"; then OCI8_SHARED_LIBADD="-R"" -L"" $OCI8_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R"" -L"" $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case psa in c|c_r|pthread*) ;; *) LIBS="-lpsa $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then OCI8_SHARED_LIBADD="-lclntsh $OCI8_SHARED_LIBADD" if test -n "$OCI8_DIR/lib"; then if test "$OCI8_DIR/lib" != "/usr/lib"; then if test -z "$OCI8_DIR/lib" || echo "$OCI8_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$OCI8_DIR/lib else ep_dir="`echo $OCI8_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OCI8_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "OCI8_SHARED_LIBADD"; then OCI8_SHARED_LIBADD="-R$OCI8_DIR/lib -L$OCI8_DIR/lib $OCI8_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$OCI8_DIR/lib"; then if test "$OCI8_DIR/lib" != "/usr/lib"; then if test -z "$OCI8_DIR/lib" || echo "$OCI8_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$OCI8_DIR/lib else ep_dir="`echo $OCI8_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OCI8_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$OCI8_DIR/lib -L$OCI8_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case clntsh in c|c_r|pthread*) ;; *) LIBS="-lclntsh $LIBS" ;; esac fi ;; 8.1|9.0) case clntsh in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then OCI8_SHARED_LIBADD="$OCI8_SHARED_LIBADD -lclntsh" else case clntsh in c|c_r|pthread*) ;; *) LIBS="$LIBS -lclntsh" ;; esac fi ;; esac if test "$OCI8_DIR/lib" != "/usr/lib"; then if test -z "$OCI8_DIR/lib" || echo "$OCI8_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$OCI8_DIR/lib else ep_dir="`echo $OCI8_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OCI8_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "OCI8_SHARED_LIBADD"; then OCI8_SHARED_LIBADD="-R$OCI8_DIR/lib -L$OCI8_DIR/lib $OCI8_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_OCI8_TEMP_LOB 1 EOF ;; *) { echo "configure: error: Unsupported Oracle version!" 1>&2; exit 1; } ;; esac EXT_SUBDIRS="$EXT_SUBDIRS oci8" if test -d "$abs_srcdir/ext/oci8"; then ext_builddir=ext/oci8 ext_srcdir=$abs_srcdir/ext/oci8 else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_OCI8 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST OCI8_SHARED_LIBADD" PHP_VAR_SUBST="$PHP_VAR_SUBST OCI8_DIR" PHP_VAR_SUBST="$PHP_VAR_SUBST OCI8_VERSION" fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for Adabas support""... $ac_c" 1>&6 echo "configure:41880: checking for Adabas support" >&5 # Check whether --with-adabas or --without-adabas was given. if test "${with_adabas+set}" = set; then withval="$with_adabas" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" = "yes"; then withval=/usr/local fi if test "$withval" != "no"; then if test "$withval/incl" != "/usr/include"; then if test -z "$withval/incl" || echo "$withval/incl" | grep '^/' >/dev/null ; then ai_p=$withval/incl else ep_dir="`echo $withval/incl|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/incl\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$withval/lib" != "/usr/lib"; then if test -z "$withval/lib" || echo "$withval/lib" | grep '^/' >/dev/null ; then ai_p=$withval/lib else ep_dir="`echo $withval/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$withval/lib -L$withval/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi ODBC_OBJS="$withval/lib/odbclib.a" ODBC_LIB="$abs_builddir/ext/odbc/libodbc_adabas.a" $srcdir/build/shtool mkdir -f -p ext/odbc rm -f "$ODBC_LIB" cp "$ODBC_OBJS" "$ODBC_LIB" case sqlptc in c|c_r|pthread*) ;; *) LIBS="-lsqlptc $LIBS" ;; esac case sqlrte in c|c_r|pthread*) ;; *) LIBS="-lsqlrte $LIBS" ;; esac if test -n "$abs_builddir/ext/odbc"; then if test "$abs_builddir/ext/odbc" != "/usr/lib"; then if test -z "$abs_builddir/ext/odbc" || echo "$abs_builddir/ext/odbc" | grep '^/' >/dev/null ; then ai_p=$abs_builddir/ext/odbc else ep_dir="`echo $abs_builddir/ext/odbc|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$abs_builddir/ext/odbc\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$abs_builddir/ext/odbc -L$abs_builddir/ext/odbc $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case odbc_adabas in c|c_r|pthread*) ;; *) LIBS="-lodbc_adabas $LIBS" ;; esac ODBC_TYPE=adabas cat >> confdefs.h <<\EOF #define HAVE_ADABAS 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for SAP DB support""... $ac_c" 1>&6 echo "configure:42071: checking for SAP DB support" >&5 # Check whether --with-sapdb or --without-sapdb was given. if test "${with_sapdb+set}" = set; then withval="$with_sapdb" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" = "yes"; then withval=/usr/local fi if test "$withval" != "no"; then if test "$withval/incl" != "/usr/include"; then if test -z "$withval/incl" || echo "$withval/incl" | grep '^/' >/dev/null ; then ai_p=$withval/incl else ep_dir="`echo $withval/incl|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/incl\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$withval/lib" != "/usr/lib"; then if test -z "$withval/lib" || echo "$withval/lib" | grep '^/' >/dev/null ; then ai_p=$withval/lib else ep_dir="`echo $withval/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$withval/lib -L$withval/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi case sqlod in c|c_r|pthread*) ;; *) LIBS="-lsqlod $LIBS" ;; esac case sqlrte in c|c_r|pthread*) ;; *) LIBS="-lsqlrte $LIBS" ;; esac ODBC_TYPE=sapdb cat >> confdefs.h <<\EOF #define HAVE_SAPDB 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for Solid support""... $ac_c" 1>&6 echo "configure:42207: checking for Solid support" >&5 # Check whether --with-solid or --without-solid was given. if test "${with_solid+set}" = set; then withval="$with_solid" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" = "yes"; then withval=/usr/local/solid fi if test "$withval" != "no"; then ODBC_INCDIR=$withval/include ODBC_LIBDIR=$withval/lib ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_TYPE=solid if test -f $ODBC_LIBDIR/soc*35.a; then cat >> confdefs.h <<\EOF #define HAVE_SOLID_35 1 EOF elif test -f $ODBC_LIBDIR/scl*30.a; then cat >> confdefs.h <<\EOF #define HAVE_SOLID_30 1 EOF elif test -f $ODBC_LIBDIR/scl*23.a; then cat >> confdefs.h <<\EOF #define HAVE_SOLID 1 EOF fi echo "$ac_t""yes" 1>&6 echo $ac_n "checking Solid library file""... $ac_c" 1>&6 echo "configure:42257: checking Solid library file" >&5 ac_solid_uname_r=`uname -r 2>/dev/null` ac_solid_uname_s=`uname -s 2>/dev/null` case $ac_solid_uname_s in AIX) ac_solid_os=a3x;; # a4x for AIX4/ Solid 2.3/3.0 only HP-UX) ac_solid_os=h9x;; # h1x for hpux11, h0x for hpux10 IRIX) ac_solid_os=irx;; # Solid 2.3(?)/ 3.0 only Linux) if ldd -v /bin/sh | grep GLIBC > /dev/null; then cat >> confdefs.h <<\EOF #define SS_LINUX 1 EOF ac_solid_os=l2x else cat >> confdefs.h <<\EOF #define SS_LINUX 1 EOF ac_solid_os=lux fi;; SunOS) ac_solid_os=ssx;; # should we deal with SunOS 4? FreeBSD) if test `expr $ac_solid_uname_r : '\(.\)'` -gt "2"; then cat >> confdefs.h <<\EOF #define SS_FBX 1 EOF ac_solid_os=fex else cat >> confdefs.h <<\EOF #define SS_FBX 1 EOF ac_solid_os=fbx fi esac if test -f $ODBC_LIBDIR/soc${ac_solid_os}35.a; then ac_solid_version=35 ac_solid_prefix=soc elif test -f $ODBC_LIBDIR/scl${ac_solid_os}30.a; then ac_solid_version=30 ac_solid_prefix=scl elif test -f $ODBC_LIBDIR/scl${ac_solid_os}23.a; then ac_solid_version=23 ac_solid_prefix=scl fi # # Check for the library files, and setup the ODBC_LIBS path... # if test ! -f $ODBC_LIBDIR/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so -a \ ! -f $ODBC_LIBDIR/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a; then # # we have an error and should bail out, as we can't find the libs! # echo "" echo "*********************************************************************" echo "* Unable to locate $ODBC_LIBDIR/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so or $ODBC_LIBDIR/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a" echo "* Please correct this by creating the following links and reconfiguring:" echo "* $ODBC_LIBDIR/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a -> $ODBC_LIBDIR/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a" echo "* $ODBC_LIBDIR/${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so -> $ODBC_LIBDIR/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so" echo "*********************************************************************" else ODBC_LFLAGS=-L$ODBC_LIBDIR ODBC_LIBS=-l${ac_solid_prefix}${ac_solid_os}${ac_solid_version} fi echo "$ac_t""`echo $ODBC_LIBS | sed -e 's!.*/!!'`" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for IBM DB2 support""... $ac_c" 1>&6 echo "configure:42341: checking for IBM DB2 support" >&5 # Check whether --with-ibm-db2 or --without-ibm-db2 was given. if test "${with_ibm_db2+set}" = set; then withval="$with_ibm_db2" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" != "no"; then if test "$withval" = "yes"; then ODBC_INCDIR=/home/db2inst1/sqllib/include ODBC_LIBDIR=/home/db2inst1/sqllib/lib else ODBC_INCDIR=$withval/include ODBC_LIBDIR=$withval/lib fi ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_LFLAGS=-L$ODBC_LIBDIR ODBC_TYPE=db2 ODBC_LIBS="-ldb2" cat >> confdefs.h <<\EOF #define HAVE_IBMDB2 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for Empress support""... $ac_c" 1>&6 echo "configure:42396: checking for Empress support" >&5 # Check whether --with-empress or --without-empress was given. if test "${with_empress+set}" = set; then withval="$with_empress" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" != "no"; then if test "$withval" = "yes"; then ODBC_INCDIR=$EMPRESSPATH/include/odbc ODBC_LIBDIR=$EMPRESSPATH/shlib else ODBC_INCDIR=$withval/include/odbc ODBC_LIBDIR=$withval/shlib fi ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_LFLAGS=-L$ODBC_LIBDIR ODBC_TYPE=empress cat >> confdefs.h <<\EOF #define HAVE_EMPRESS 1 EOF echo "$ac_t""yes" 1>&6 echo $ac_n "checking Empress library file""... $ac_c" 1>&6 echo "configure:42437: checking Empress library file" >&5 ODBC_LIBS=`echo $ODBC_LIBDIR/libempodbccl.so | cut -d' ' -f1` if test ! -f $ODBC_LIBS; then ODBC_LIBS=`echo $ODBC_LIBDIR/libempodbccl.so | cut -d' ' -f1` fi echo "$ac_t""`echo $ODBC_LIBS | sed -e 's!.*/!!'`" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for Empress local access support""... $ac_c" 1>&6 echo "configure:42458: checking for Empress local access support" >&5 # Check whether --with-empress-bcs or --without-empress-bcs was given. if test "${with_empress_bcs+set}" = set; then withval="$with_empress_bcs" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" != "no"; then if test "$withval" = "yes"; then ODBC_INCDIR=$EMPRESSPATH/include/odbc ODBC_LIBDIR=$EMPRESSPATH/shlib else ODBC_INCDIR=$withval/include/odbc ODBC_LIBDIR=$withval/shlib fi CC="empocc -bcs";export CC; LD="empocc -bcs";export LD; ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_LFLAGS=-L$ODBC_LIBDIR LIST=`empocc -listlines -bcs -o a a.c` NEWLIST= for I in $LIST do case $I in $EMPRESSPATH/odbccl/lib/* | \ $EMPRESSPATH/rdbms/lib/* | \ $EMPRESSPATH/common/lib/*) NEWLIST="$NEWLIST $I" ;; esac done ODBC_LIBS="-lempphpbcs -lms -lmscfg -lbasic -lbasic_os -lnlscstab -lnlsmsgtab -lm -ldl -lcrypt" ODBC_TYPE=empress cat >> confdefs.h <<\EOF #define HAVE_EMPRESS 1 EOF echo "$ac_t""yes" 1>&6 echo $ac_n "checking Empress local access library file""... $ac_c" 1>&6 echo "configure:42515: checking Empress local access library file" >&5 ODBCBCS_LIBS=`echo $ODBC_LIBDIR/libempodbcbcs.a | cut -d' ' -f1` if test ! -f $ODBCBCS_LIBS; then ODBCBCS_LIBS=`echo $ODBC_LIBDIR/libempodbcbcs.a | cut -d' ' -f1` fi echo "$ac_t""`echo $ODBCBCS_LIBS | sed -e 's!.*/!!'`" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for Birdstep support""... $ac_c" 1>&6 echo "configure:42536: checking for Birdstep support" >&5 # Check whether --with-birdstep or --without-birdstep was given. if test "${with_birdstep+set}" = set; then withval="$with_birdstep" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" != "no"; then if test "$withval" = "yes"; then ODBC_INCDIR=/usr/local/birdstep/include ODBC_LIBDIR=/usr/local/birdstep/lib else ODBC_INCDIR=$withval/include ODBC_LIBDIR=$withval/lib fi ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_TYPE=birdstep ODBC_LFLAGS=-L$ODBC_LIBDIR ODBC_LIBS="-lCadm -lCdict -lCenc -lCrdm -lCrpc -lCrdbc -lCrm -lCuapi -lutil" cat >> confdefs.h <<\EOF #define HAVE_BIRDSTEP 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for a custom ODBC support""... $ac_c" 1>&6 echo "configure:42592: checking for a custom ODBC support" >&5 # Check whether --with-custom-odbc or --without-custom-odbc was given. if test "${with_custom_odbc+set}" = set; then withval="$with_custom_odbc" if test "$withval" = "yes"; then withval=/usr/local fi if test "$withval" != "no"; then ODBC_INCDIR=$withval/include ODBC_LIBDIR=$withval/lib ODBC_LFLAGS=-L$ODBC_LIBDIR ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_LIBS=$CUSTOM_ODBC_LIBS ODBC_TYPE=custom cat >> confdefs.h <<\EOF #define HAVE_CODBC 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for iODBC support""... $ac_c" 1>&6 echo "configure:42626: checking for iODBC support" >&5 # Check whether --with-iodbc or --without-iodbc was given. if test "${with_iodbc+set}" = set; then withval="$with_iodbc" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" = "yes"; then withval=/usr/local fi if test "$withval" != "no"; then if test -n "$withval/lib"; then if test "$withval/lib" != "/usr/lib"; then if test -z "$withval/lib" || echo "$withval/lib" | grep '^/' >/dev/null ; then ai_p=$withval/lib else ep_dir="`echo $withval/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$withval/lib -L$withval/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case iodbc in c|c_r|pthread*) ;; *) LIBS="-liodbc $LIBS" ;; esac if test "$withval/include" != "/usr/include"; then if test -z "$withval/include" || echo "$withval/include" | grep '^/' >/dev/null ; then ai_p=$withval/include else ep_dir="`echo $withval/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test "1"; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi ODBC_TYPE=iodbc ODBC_INCLUDE=-I$withval/include ODBC_LFLAGS=-L$withval/lib ODBC_LIBS=-liodbc cat >> confdefs.h <<\EOF #define HAVE_IODBC 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for Easysoft ODBC-ODBC Bridge support""... $ac_c" 1>&6 echo "configure:42758: checking for Easysoft ODBC-ODBC Bridge support" >&5 # Check whether --with-esoob or --without-esoob was given. if test "${with_esoob+set}" = set; then withval="$with_esoob" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" = "yes"; then withval=/usr/local/easysoft/oob/client fi if test "$withval" != "no"; then ODBC_INCDIR=$withval/include ODBC_LIBDIR=$withval/lib ODBC_LFLAGS=-L$ODBC_LIBDIR ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_LIBS=-lesoobclient ODBC_TYPE=ESOOB cat >> confdefs.h <<\EOF #define HAVE_ESOOB 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for unixODBC support""... $ac_c" 1>&6 echo "configure:42810: checking for unixODBC support" >&5 # Check whether --with-unixODBC or --without-unixODBC was given. if test "${with_unixODBC+set}" = set; then withval="$with_unixODBC" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" = "yes"; then withval=/usr/local fi if test "$withval" != "no"; then ODBC_INCDIR=$withval/include ODBC_LIBDIR=$withval/lib ODBC_LFLAGS=-L$ODBC_LIBDIR ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_LIBS=-lodbc ODBC_TYPE=unixODBC cat >> confdefs.h <<\EOF #define HAVE_UNIXODBC 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for OpenLink ODBC support""... $ac_c" 1>&6 echo "configure:42862: checking for OpenLink ODBC support" >&5 # Check whether --with-openlink or --without-openlink was given. if test "${with_openlink+set}" = set; then withval="$with_openlink" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" = "yes"; then withval=/usr/local fi if test "$withval" != "no"; then if test -n "$withval/lib"; then if test "$withval/lib" != "/usr/lib"; then if test -z "$withval/lib" || echo "$withval/lib" | grep '^/' >/dev/null ; then ai_p=$withval/lib else ep_dir="`echo $withval/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$withval/lib -L$withval/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case iodbc in c|c_r|pthread*) ;; *) LIBS="-liodbc $LIBS" ;; esac if test "$withval/include" != "/usr/include"; then if test -z "$withval/include" || echo "$withval/include" | grep '^/' >/dev/null ; then ai_p=$withval/include else ep_dir="`echo $withval/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$withval/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test "1"; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi ODBC_TYPE=iodbc ODBC_INCLUDE=-I$withval/include ODBC_LFLAGS=-L$withval/lib ODBC_LIBS=-liodbc cat >> confdefs.h <<\EOF #define HAVE_IODBC 1 EOF echo "$ac_t""yes" 1>&6 echo "****************************************************************" echo " --with-openlink will not be valid in future releases. Please " echo " update your configure script to use --with-iodbc instead. " echo "****************************************************************" else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$ODBC_TYPE"; then echo $ac_n "checking for DBMaker support""... $ac_c" 1>&6 echo "configure:42998: checking for DBMaker support" >&5 # Check whether --with-dbmaker or --without-dbmaker was given. if test "${with_dbmaker+set}" = set; then withval="$with_dbmaker" case $withval in shared) shared=yes withval=yes ;; shared,*) shared=yes withval=`echo $withval | sed -e 's/^shared,//'` ;; *) shared=no ;; esac if test -n "$php_always_shared"; then shared=yes fi if test "$withval" = "yes"; then # find dbmaker's home directory DBMAKER_HOME=`grep "^dbmaker:" /etc/passwd | awk -F: '{print $6}'` # check DBMaker version (from 5.0 to 2.0) DBMAKER_VERSION=5.0 while test test ! -d $DBMAKER_HOME/$DBMAKER_VERSION -a \ "$DBMAKER_VERSION" != "2.9"; do DM_VER=`echo $DBMAKER_VERSION | sed -e 's/\.//' | awk '{ print $1-1;}'` MAJOR_V=`echo $DM_VER | awk '{ print $1/10; }' \ | awk -F. '{ print $1; }'` MINOR_V=`echo $DM_VER | awk '{ print $1%10; }'` DBMAKER_VERSION=$MAJOR_V.$MINOR_V done if test "$DBMAKER_VERSION" = "2.9"; then withval=$DBMAKER_HOME else DBMAKER_PATH=$DBMAKER_HOME/$DBMAKER_VERSION fi withval=$DBMAKER_PATH fi if test "$withval" != "no"; then ODBC_INCDIR=$withval/include ODBC_LIBDIR=$withval/lib ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_LFLAGS=-L$ODBC_LIBDIR ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_LIBS="-ldmapic -lc" ODBC_TYPE=dbmaker cat >> confdefs.h <<\EOF #define HAVE_DBMAKER 1 EOF if test "$shared" = "yes"; then echo "$ac_t""yes (shared)" 1>&6 ODBC_LIBS="-ldmapic -lc -lm" ODBC_SHARED="odbc.la" else echo "$ac_t""yes (static)" 1>&6 if test -n "$ODBC_LIBDIR"; then if test "$ODBC_LIBDIR" != "/usr/lib"; then if test -z "$ODBC_LIBDIR" || echo "$ODBC_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$ODBC_LIBDIR else ep_dir="`echo $ODBC_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ODBC_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ODBC_LIBDIR -L$ODBC_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case dmapic in c|c_r|pthread*) ;; *) LIBS="-ldmapic $LIBS" ;; esac if test "$ODBC_INCDIR" != "/usr/include"; then if test -z "$ODBC_INCDIR" || echo "$ODBC_INCDIR" | grep '^/' >/dev/null ; then ai_p=$ODBC_INCDIR else ep_dir="`echo $ODBC_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ODBC_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi ODBC_STATIC="libphpext_odbc.la" fi echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -n "$ODBC_TYPE"; then INCLUDES="$INCLUDES $ODBC_INCLUDE" if test "$ODBC_TYPE" != "dbmaker"; then if test "$shared" != "yes"; then EXTRA_LIBS="$EXTRA_LIBS $ODBC_LFLAGS $ODBC_LIBS" fi fi cat >> confdefs.h <<\EOF #define HAVE_UODBC 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST ODBC_INCDIR" PHP_VAR_SUBST="$PHP_VAR_SUBST ODBC_LIBDIR" PHP_VAR_SUBST="$PHP_VAR_SUBST ODBC_INCLUDE" PHP_VAR_SUBST="$PHP_VAR_SUBST ODBC_LIBS" PHP_VAR_SUBST="$PHP_VAR_SUBST ODBC_LFLAGS" PHP_VAR_SUBST="$PHP_VAR_SUBST ODBC_TYPE" EXT_SUBDIRS="$EXT_SUBDIRS odbc" if test -d "$abs_srcdir/ext/odbc"; then ext_builddir=ext/odbc ext_srcdir=$abs_srcdir/ext/odbc else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$shared" != "shared" && test "$shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_OPENSSL_EXT 1 EOF fi if test -n "for Oracle-ORACLE support"; then echo $ac_n "checking for Oracle-ORACLE support""... $ac_c" 1>&6 echo "configure:43632: checking for Oracle-ORACLE support" >&5 fi # Check whether --with-oracle or --without-oracle was given. if test "${with_oracle+set}" = set; then withval="$with_oracle" PHP_ORACLE=$withval else PHP_ORACLE=no fi case $PHP_ORACLE in shared,*) ext_output="yes, shared" ext_shared=yes PHP_ORACLE=`echo "$PHP_ORACLE"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_ORACLE=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_ORACLE" = "no" && PHP_ORACLE=yes fi if test -n "for Oracle-ORACLE support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_ORACLE" != "no"; then echo $ac_n "checking Oracle Install-Dir""... $ac_c" 1>&6 echo "configure:43679: checking Oracle Install-Dir" >&5 if test "$PHP_ORACLE" = "yes"; then ORACLE_DIR=$ORACLE_HOME else ORACLE_DIR=$PHP_ORACLE fi echo "$ac_t""$ORACLE_DIR" 1>&6 if test -d "$ORACLE_DIR/rdbms/public"; then if test "$ORACLE_DIR/rdbms/public" != "/usr/include"; then if test -z "$ORACLE_DIR/rdbms/public" || echo "$ORACLE_DIR/rdbms/public" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/rdbms/public else ep_dir="`echo $ORACLE_DIR/rdbms/public|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/rdbms/public\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -d "$ORACLE_DIR/rdbms/demo"; then if test "$ORACLE_DIR/rdbms/demo" != "/usr/include"; then if test -z "$ORACLE_DIR/rdbms/demo" || echo "$ORACLE_DIR/rdbms/demo" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/rdbms/demo else ep_dir="`echo $ORACLE_DIR/rdbms/demo|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/rdbms/demo\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -d "$ORACLE_DIR/network/public"; then if test "$ORACLE_DIR/network/public" != "/usr/include"; then if test -z "$ORACLE_DIR/network/public" || echo "$ORACLE_DIR/network/public" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/network/public else ep_dir="`echo $ORACLE_DIR/network/public|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/network/public\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -d "$ORACLE_DIR/plsql/public"; then if test "$ORACLE_DIR/plsql/public" != "/usr/include"; then if test -z "$ORACLE_DIR/plsql/public" || echo "$ORACLE_DIR/plsql/public" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/plsql/public else ep_dir="`echo $ORACLE_DIR/plsql/public|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/plsql/public\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi if test -f "$ORACLE_DIR/lib/sysliblist"; then for ac_i in `cat $ORACLE_DIR/lib/sysliblist`; do case $ac_i in -l*) ac_ii=`echo $ac_i|cut -c 3-` case $ac_ii in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="$ORACLE_SHARED_LIBADD -l$ac_ii" else case $ac_ii in c|c_r|pthread*) ;; *) LIBS="$LIBS -l$ac_ii" ;; esac fi ;; esac ;; -L*) ac_ii=`echo $ac_i|cut -c 3-` if test "$ac_ii" != "/usr/lib"; then if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then ai_p=$ac_ii else ep_dir="`echo $ac_ii|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ac_ii\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ac_ii -L$ac_ii $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi ;; esac done elif test -f "$ORACLE_DIR/rdbms/lib/sysliblist"; then for ac_i in `cat $ORACLE_DIR/rdbms/lib/sysliblist`; do case $ac_i in -l*) ac_ii=`echo $ac_i|cut -c 3-` case $ac_ii in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="$ORACLE_SHARED_LIBADD -l$ac_ii" else case $ac_ii in c|c_r|pthread*) ;; *) LIBS="$LIBS -l$ac_ii" ;; esac fi ;; esac ;; -L*) ac_ii=`echo $ac_i|cut -c 3-` if test "$ac_ii" != "/usr/lib"; then if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then ai_p=$ac_ii else ep_dir="`echo $ac_ii|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ac_ii\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ac_ii -L$ac_ii $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi ;; esac done fi echo $ac_n "checking Oracle version""... $ac_c" 1>&6 echo "configure:43970: checking Oracle version" >&5 if test -s "$ORACLE_DIR/orainst/unix.rgs"; then ORACLE_VERSION=`grep '"ocommon"' $ORACLE_DIR/orainst/unix.rgs | sed 's/ */:/g' | cut -d: -f 6 | cut -c 2-4` test -z "$ORACLE_VERSION" && ORACLE_VERSION=7.3 elif test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then ORACLE_VERSION=9.0 elif test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.8.0; then ORACLE_VERSION=8.1 elif test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.1.0; then ORACLE_VERSION=8.0 elif test -f $ORACLE_DIR/lib/libclntsh.a; then if test -f $ORACLE_DIR/lib/libcore4.a; then ORACLE_VERSION=8.0 else ORACLE_VERSION=8.1 fi else { echo "configure: error: Oracle needed libraries not found" 1>&2; exit 1; } fi echo "$ac_t""$ORACLE_VERSION" 1>&6 case $ORACLE_VERSION in 7.0|7.1) if test -f $ORACLE_DIR/lib/liboracle.$SHLIB_SUFFIX_NAME; then if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-loracle $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case oracle in c|c_r|pthread*) ;; *) LIBS="-loracle $LIBS" ;; esac fi else if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lcore $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case core in c|c_r|pthread*) ;; *) LIBS="-lcore $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lcv6 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case cv6 in c|c_r|pthread*) ;; *) LIBS="-lcv6 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lnlsrtl $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case nlsrtl in c|c_r|pthread*) ;; *) LIBS="-lnlsrtl $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lcore $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case core in c|c_r|pthread*) ;; *) LIBS="-lcore $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lcv6 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case cv6 in c|c_r|pthread*) ;; *) LIBS="-lcv6 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lnlsrtl $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case nlsrtl in c|c_r|pthread*) ;; *) LIBS="-lnlsrtl $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lsqlnet $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sqlnet in c|c_r|pthread*) ;; *) LIBS="-lsqlnet $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lora $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ora in c|c_r|pthread*) ;; *) LIBS="-lora $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lsqlnet $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sqlnet in c|c_r|pthread*) ;; *) LIBS="-lsqlnet $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="$ORACLE_DIR/lib/osntab.o $ORACLE_SHARED_LIBADD"; else LIBS="$ORACLE_DIR/lib/osntab.o $LIBS"; fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-locic $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ocic in c|c_r|pthread*) ;; *) LIBS="-locic $LIBS" ;; esac fi if test "`uname -s 2>/dev/null`" = "AIX"; then if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="$ORACLE_SHARED_LIBADD -bI:$ORACLE_DIR/lib/mili.exp" else LIBS="$LIBS -bI:$ORACLE_DIR/lib/mili.exp" fi fi fi ;; 7.2) if test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME; then if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lclntsh $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case clntsh in c|c_r|pthread*) ;; *) LIBS="-lclntsh $LIBS" ;; esac fi else if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lcore3 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case core3 in c|c_r|pthread*) ;; *) LIBS="-lcore3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lnlsrtl3 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case nlsrtl3 in c|c_r|pthread*) ;; *) LIBS="-lnlsrtl3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lc3v6 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case c3v6 in c|c_r|pthread*) ;; *) LIBS="-lc3v6 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lnlsrtl3 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case nlsrtl3 in c|c_r|pthread*) ;; *) LIBS="-lnlsrtl3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lora $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ora in c|c_r|pthread*) ;; *) LIBS="-lora $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lsqlnet $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sqlnet in c|c_r|pthread*) ;; *) LIBS="-lsqlnet $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lora $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ora in c|c_r|pthread*) ;; *) LIBS="-lora $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lsqlnet $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sqlnet in c|c_r|pthread*) ;; *) LIBS="-lsqlnet $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="$ORACLE_DIR/lib/osntab.o $ORACLE_SHARED_LIBADD"; else LIBS="$ORACLE_DIR/lib/osntab.o $LIBS"; fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-locic $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ocic in c|c_r|pthread*) ;; *) LIBS="-locic $LIBS" ;; esac fi fi ;; 7.3) if test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME; then if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lclntsh $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case clntsh in c|c_r|pthread*) ;; *) LIBS="-lclntsh $LIBS" ;; esac fi else if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lcore3 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case core3 in c|c_r|pthread*) ;; *) LIBS="-lcore3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lnlsrtl3 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case nlsrtl3 in c|c_r|pthread*) ;; *) LIBS="-lnlsrtl3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lcore3 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case core3 in c|c_r|pthread*) ;; *) LIBS="-lcore3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lc3v6 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case c3v6 in c|c_r|pthread*) ;; *) LIBS="-lc3v6 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lnlsrtl3 $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case nlsrtl3 in c|c_r|pthread*) ;; *) LIBS="-lnlsrtl3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lepc $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case epc in c|c_r|pthread*) ;; *) LIBS="-lepc $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lgeneric $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case generic in c|c_r|pthread*) ;; *) LIBS="-lgeneric $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lcommon $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case common in c|c_r|pthread*) ;; *) LIBS="-lcommon $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lclient $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case client in c|c_r|pthread*) ;; *) LIBS="-lclient $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lsqlnet $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sqlnet in c|c_r|pthread*) ;; *) LIBS="-lsqlnet $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lncr $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ncr in c|c_r|pthread*) ;; *) LIBS="-lncr $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lsqlnet $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sqlnet in c|c_r|pthread*) ;; *) LIBS="-lsqlnet $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lgeneric $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case generic in c|c_r|pthread*) ;; *) LIBS="-lgeneric $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lcommon $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case common in c|c_r|pthread*) ;; *) LIBS="-lcommon $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lclient $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case client in c|c_r|pthread*) ;; *) LIBS="-lclient $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lsqlnet $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sqlnet in c|c_r|pthread*) ;; *) LIBS="-lsqlnet $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lncr $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ncr in c|c_r|pthread*) ;; *) LIBS="-lncr $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lsqlnet $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sqlnet in c|c_r|pthread*) ;; *) LIBS="-lsqlnet $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lclient $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case client in c|c_r|pthread*) ;; *) LIBS="-lclient $LIBS" ;; esac fi fi ;; 8.0) if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lnlsrtl3 $ORACLE_SHARED_LIBADD" if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R"" -L"" $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R"" -L"" $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case nlsrtl3 in c|c_r|pthread*) ;; *) LIBS="-lnlsrtl3 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lcore4 $ORACLE_SHARED_LIBADD" if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R"" -L"" $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R"" -L"" $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case core4 in c|c_r|pthread*) ;; *) LIBS="-lcore4 $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lpsa $ORACLE_SHARED_LIBADD" if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R"" -L"" $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n """"; then if test """" != "/usr/lib"; then if test -z """" || echo """" | grep '^/' >/dev/null ; then ai_p="" else ep_dir="`echo ""|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"""\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R"" -L"" $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case psa in c|c_r|pthread*) ;; *) LIBS="-lpsa $LIBS" ;; esac fi if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="-lclntsh $ORACLE_SHARED_LIBADD" if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ORACLE_DIR/lib"; then if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case clntsh in c|c_r|pthread*) ;; *) LIBS="-lclntsh $LIBS" ;; esac fi ;; 8.1|9.0) case clntsh in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then ORACLE_SHARED_LIBADD="$ORACLE_SHARED_LIBADD -lclntsh" else case clntsh in c|c_r|pthread*) ;; *) LIBS="$LIBS -lclntsh" ;; esac fi ;; esac if test "$ORACLE_DIR/lib" != "/usr/lib"; then if test -z "$ORACLE_DIR/lib" || echo "$ORACLE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ORACLE_DIR/lib else ep_dir="`echo $ORACLE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ORACLE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "ORACLE_SHARED_LIBADD"; then ORACLE_SHARED_LIBADD="-R$ORACLE_DIR/lib -L$ORACLE_DIR/lib $ORACLE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi ;; *) { echo "configure: error: Unsupported Oracle version!" 1>&2; exit 1; } ;; esac EXT_SUBDIRS="$EXT_SUBDIRS oracle" if test -d "$abs_srcdir/ext/oracle"; then ext_builddir=ext/oracle ext_srcdir=$abs_srcdir/ext/oracle else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_ORACLE 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST ORACLE_SHARED_LIBADD" PHP_VAR_SUBST="$PHP_VAR_SUBST ORACLE_DIR" PHP_VAR_SUBST="$PHP_VAR_SUBST ORACLE_VERSION" fi if test -n "whether to enable user-space object overloading support"; then echo $ac_n "checking whether to enable user-space object overloading support""... $ac_c" 1>&6 echo "configure:48562: checking whether to enable user-space object overloading support" >&5 fi # Check whether --enable-overload or --disable-overload was given. if test "${enable_overload+set}" = set; then enableval="$enable_overload" PHP_OVERLOAD=$enableval else PHP_OVERLOAD=no fi case $PHP_OVERLOAD in shared,*) ext_output="yes, shared" ext_shared=yes PHP_OVERLOAD=`echo "$PHP_OVERLOAD"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_OVERLOAD=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_OVERLOAD" = "no" && PHP_OVERLOAD=yes fi if test -n "whether to enable user-space object overloading support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_OVERLOAD" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_OVERLOAD 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS overload" if test -d "$abs_srcdir/ext/overload"; then ext_builddir=ext/overload ext_srcdir=$abs_srcdir/ext/overload else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:48824: checking for Ovrimos SQL Server support" >&5 fi # Check whether --with-ovrimos or --without-ovrimos was given. if test "${with_ovrimos+set}" = set; then withval="$with_ovrimos" PHP_OVRIMOS=$withval else PHP_OVRIMOS=no fi case $PHP_OVRIMOS in shared,*) ext_output="yes, shared" ext_shared=yes PHP_OVRIMOS=`echo "$PHP_OVRIMOS"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_OVRIMOS=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_OVRIMOS" = "no" && PHP_OVRIMOS=yes fi if test -n "for Ovrimos SQL Server support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_OVRIMOS" != "no"; then for i in /usr/local /usr $PHP_OVRIMOS; do if test -f $i/include/sqlcli.h; then OVRIMOS_DIR=$i fi done if test -z "$OVRIMOS_DIR"; then { echo "configure: error: Please reinstall Ovrimos' libsqlcli - I cannot find sqlcli.h" 1>&2; exit 1; } fi if test "$OVRIMOS_DIR/include" != "/usr/include"; then if test -z "$OVRIMOS_DIR/include" || echo "$OVRIMOS_DIR/include" | grep '^/' >/dev/null ; then ai_p=$OVRIMOS_DIR/include else ep_dir="`echo $OVRIMOS_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OVRIMOS_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST OVRIMOS_SHARED_LIBADD" LDFLAGS="$LDFLAGS $ld_runpath_switch$OVRIMOS_DIR/lib -L$OVRIMOS_DIR/lib" echo $ac_n "checking for main in -lsqlcli""... $ac_c" 1>&6 echo "configure:48916: checking for main in -lsqlcli" >&5 ac_lib_var=`echo sqlcli'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsqlcli $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo sqlcli | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi if test "$ext_shared" = "yes"; then OVRIMOS_SHARED_LIBADD="-lsqlcli $OVRIMOS_SHARED_LIBADD" if test -n "$OVRIMOS_DIR/lib"; then if test "$OVRIMOS_DIR/lib" != "/usr/lib"; then if test -z "$OVRIMOS_DIR/lib" || echo "$OVRIMOS_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$OVRIMOS_DIR/lib else ep_dir="`echo $OVRIMOS_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OVRIMOS_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "OVRIMOS_SHARED_LIBADD"; then OVRIMOS_SHARED_LIBADD="-R$OVRIMOS_DIR/lib -L$OVRIMOS_DIR/lib $OVRIMOS_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$OVRIMOS_DIR/lib"; then if test "$OVRIMOS_DIR/lib" != "/usr/lib"; then if test -z "$OVRIMOS_DIR/lib" || echo "$OVRIMOS_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$OVRIMOS_DIR/lib else ep_dir="`echo $OVRIMOS_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$OVRIMOS_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$OVRIMOS_DIR/lib -L$OVRIMOS_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sqlcli in c|c_r|pthread*) ;; *) LIBS="-lsqlcli $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_LIBSQLCLI 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS ovrimos" if test -d "$abs_srcdir/ext/ovrimos"; then ext_builddir=ext/ovrimos ext_srcdir=$abs_srcdir/ext/ovrimos else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:49270: checking whether to enable pcntl support" >&5 fi # Check whether --enable-pcntl or --disable-pcntl was given. if test "${enable_pcntl+set}" = set; then enableval="$enable_pcntl" PHP_PCNTL=$enableval else PHP_PCNTL=no fi case $PHP_PCNTL in shared,*) ext_output="yes, shared" ext_shared=yes PHP_PCNTL=`echo "$PHP_PCNTL"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_PCNTL=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_PCNTL" = "no" && PHP_PCNTL=yes fi if test -n "whether to enable pcntl support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_PCNTL" != "no"; then for ac_func in fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:49320: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:49348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <> confdefs.h <<\EOF #define HAVE_FORK 1 EOF else echo "$ac_t""no" 1>&6 { echo "configure: error: pcntl: fork() not supported by this platform" 1>&2; exit 1; } fi done for ac_func in waitpid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:49379: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:49407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <> confdefs.h <<\EOF #define HAVE_WAITPID 1 EOF else echo "$ac_t""no" 1>&6 { echo "configure: error: pcntl: fork() not supported by this platform" 1>&2; exit 1; } fi done for ac_func in sigaction do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:49438: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:49466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <> confdefs.h <<\EOF #define HAVE_SIGACTION 1 EOF else echo "$ac_t""no" 1>&6 { echo "configure: error: pcntl: sigaction() not supported by this platform" 1>&2; exit 1; } fi done EXT_SUBDIRS="$EXT_SUBDIRS pcntl" if test -d "$abs_srcdir/ext/pcntl"; then ext_builddir=ext/pcntl ext_srcdir=$abs_srcdir/ext/pcntl else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "cli" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:49708: checking for PCRE support" >&5 fi # Check whether --with-pcre-regex or --without-pcre-regex was given. if test "${with_pcre_regex+set}" = set; then withval="$with_pcre_regex" PHP_PCRE_REGEX=$withval else PHP_PCRE_REGEX=yes fi case $PHP_PCRE_REGEX in shared,*) ext_output="yes, shared" ext_shared=yes PHP_PCRE_REGEX=`echo "$PHP_PCRE_REGEX"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_PCRE_REGEX=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_PCRE_REGEX" = "no" && PHP_PCRE_REGEX=yes fi if test -n "for PCRE support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_PCRE_REGEX" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS pcre" if test -d "$abs_srcdir/ext/pcre"; then ext_builddir=ext/pcre ext_srcdir=$abs_srcdir/ext/pcre else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_BUNDLED_PCRE 1 EOF PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES $ext_builddir/pcrelib/Makefile" lib_makefile="$ext_builddir/pcrelib/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir/pcrelib if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 fi pcre_major=`grep PCRE_MAJOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'` pcre_minor=`grep PCRE_MINOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'` pcre_minor_length=`echo "$pcre_minor" | wc -c | sed -e 's/^0-9//g'` if test "$pcre_minor_length" -eq 2 ; then pcre_minor="$pcre_minor"0 fi pcre_version=$pcre_major$pcre_minor if test "$pcre_version" -lt 208; then { echo "configure: error: The PCRE extension requires PCRE library version >= 2.08" 1>&2; exit 1; } fi test -f $PHP_PCRE_REGEX/libpcre.a && PCRE_LIBDIR=$PHP_PCRE_REGEX test -f $PHP_PCRE_REGEX/lib/libpcre.a && PCRE_LIBDIR=$PHP_PCRE_REGEX/lib if test -z "$PCRE_LIBDIR" ; then { echo "configure: error: Could not find libpcre.a in $PHP_PCRE_REGEX" 1>&2; exit 1; } fi if test "$ext_shared" = "yes"; then PCRE_SHARED_LIBADD="-lpcre $PCRE_SHARED_LIBADD" if test -n "$PCRE_LIBDIR"; then if test "$PCRE_LIBDIR" != "/usr/lib"; then if test -z "$PCRE_LIBDIR" || echo "$PCRE_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$PCRE_LIBDIR else ep_dir="`echo $PCRE_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PCRE_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "PCRE_SHARED_LIBADD"; then PCRE_SHARED_LIBADD="-R$PCRE_LIBDIR -L$PCRE_LIBDIR $PCRE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PCRE_LIBDIR"; then if test "$PCRE_LIBDIR" != "/usr/lib"; then if test -z "$PCRE_LIBDIR" || echo "$PCRE_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$PCRE_LIBDIR else ep_dir="`echo $PCRE_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PCRE_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PCRE_LIBDIR -L$PCRE_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case pcre in c|c_r|pthread*) ;; *) LIBS="-lpcre $LIBS" ;; esac fi if test "$PCRE_INCDIR" != "/usr/include"; then if test -z "$PCRE_INCDIR" || echo "$PCRE_INCDIR" | grep '^/' >/dev/null ; then ai_p=$PCRE_INCDIR else ep_dir="`echo $PCRE_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PCRE_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_PCRE 1 EOF fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST PCRE_SHARED_LIBADD" echo $ac_n "checking for memmove""... $ac_c" 1>&6 echo "configure:50197: checking for memmove" >&5 if eval "test \"`echo '$''{'ac_cv_func_memmove'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char memmove(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_memmove) || defined (__stub___memmove) choke me #else memmove(); #endif ; return 0; } EOF if { (eval echo configure:50225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_memmove=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_memmove=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'memmove`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 cat >> confdefs.h <<\EOF #define USE_BCOPY 1 EOF fi if test -n "for PDFlib support"; then echo $ac_n "checking for PDFlib support""... $ac_c" 1>&6 echo "configure:50254: checking for PDFlib support" >&5 fi # Check whether --with-pdflib or --without-pdflib was given. if test "${with_pdflib+set}" = set; then withval="$with_pdflib" PHP_PDFLIB=$withval else PHP_PDFLIB=no fi case $PHP_PDFLIB in shared,*) ext_output="yes, shared" ext_shared=yes PHP_PDFLIB=`echo "$PHP_PDFLIB"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_PDFLIB=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_PDFLIB" = "no" && PHP_PDFLIB=yes fi if test -n "for PDFlib support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_PDFLIB" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS pdf" if test -d "$abs_srcdir/ext/pdf"; then ext_builddir=ext/pdf ext_srcdir=$abs_srcdir/ext/pdf else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:50516: checking for the location of libjpeg" >&5 fi # Check whether --with-jpeg-dir or --without-jpeg-dir was given. if test "${with_jpeg_dir+set}" = set; then withval="$with_jpeg_dir" PHP_JPEG_DIR=$withval else PHP_JPEG_DIR=no fi case $PHP_JPEG_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_JPEG_DIR=`echo "$PHP_JPEG_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_JPEG_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_JPEG_DIR" = "no" && PHP_JPEG_DIR=yes fi if test -n "for the location of libjpeg"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_JPEG_DIR" != "no"; then save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$PHP_JPEG_DIR/lib $LDFLAGS" echo $ac_n "checking for jpeg_read_header in -ljpeg""... $ac_c" 1>&6 echo "configure:50568: checking for jpeg_read_header in -ljpeg" >&5 ac_lib_var=`echo jpeg'_'jpeg_read_header | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ljpeg $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS if test "$ext_shared" = "yes"; then PDFLIB_SHARED_LIBADD="-ljpeg $PDFLIB_SHARED_LIBADD" if test -n "$PHP_JPEG_DIR/lib"; then if test "$PHP_JPEG_DIR/lib" != "/usr/lib"; then if test -z "$PHP_JPEG_DIR/lib" || echo "$PHP_JPEG_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_JPEG_DIR/lib else ep_dir="`echo $PHP_JPEG_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_JPEG_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "PDFLIB_SHARED_LIBADD"; then PDFLIB_SHARED_LIBADD="-R$PHP_JPEG_DIR/lib -L$PHP_JPEG_DIR/lib $PDFLIB_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PHP_JPEG_DIR/lib"; then if test "$PHP_JPEG_DIR/lib" != "/usr/lib"; then if test -z "$PHP_JPEG_DIR/lib" || echo "$PHP_JPEG_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_JPEG_DIR/lib else ep_dir="`echo $PHP_JPEG_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_JPEG_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PHP_JPEG_DIR/lib -L$PHP_JPEG_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case jpeg in c|c_r|pthread*) ;; *) LIBS="-ljpeg $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: libjpeg not found!" 1>&2; exit 1; } fi else echo "configure: warning: If configure fails, try --with-jpeg-dir=" 1>&2 fi if test -n "for the location of libpng"; then echo $ac_n "checking for the location of libpng""... $ac_c" 1>&6 echo "configure:50720: checking for the location of libpng" >&5 fi # Check whether --with-png-dir or --without-png-dir was given. if test "${with_png_dir+set}" = set; then withval="$with_png_dir" PHP_PNG_DIR=$withval else PHP_PNG_DIR=no fi case $PHP_PNG_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_PNG_DIR=`echo "$PHP_PNG_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_PNG_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_PNG_DIR" = "no" && PHP_PNG_DIR=yes fi if test -n "for the location of libpng"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_PNG_DIR" != "no"; then save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$PHP_PNG_DIR/lib $LDFLAGS" echo $ac_n "checking for png_create_info_struct in -lpng""... $ac_c" 1>&6 echo "configure:50772: checking for png_create_info_struct in -lpng" >&5 ac_lib_var=`echo png'_'png_create_info_struct | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpng $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS if test "$ext_shared" = "yes"; then PDFLIB_SHARED_LIBADD="-lpng $PDFLIB_SHARED_LIBADD" if test -n "$PHP_PNG_DIR/lib"; then if test "$PHP_PNG_DIR/lib" != "/usr/lib"; then if test -z "$PHP_PNG_DIR/lib" || echo "$PHP_PNG_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_PNG_DIR/lib else ep_dir="`echo $PHP_PNG_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_PNG_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "PDFLIB_SHARED_LIBADD"; then PDFLIB_SHARED_LIBADD="-R$PHP_PNG_DIR/lib -L$PHP_PNG_DIR/lib $PDFLIB_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PHP_PNG_DIR/lib"; then if test "$PHP_PNG_DIR/lib" != "/usr/lib"; then if test -z "$PHP_PNG_DIR/lib" || echo "$PHP_PNG_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_PNG_DIR/lib else ep_dir="`echo $PHP_PNG_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_PNG_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PHP_PNG_DIR/lib -L$PHP_PNG_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case png in c|c_r|pthread*) ;; *) LIBS="-lpng $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: libpng not found!" 1>&2; exit 1; } fi else echo "configure: warning: If configure fails, try --with-png-dir=" 1>&2 fi if test -n "for the location of libtiff"; then echo $ac_n "checking for the location of libtiff""... $ac_c" 1>&6 echo "configure:50924: checking for the location of libtiff" >&5 fi # Check whether --with-tiff-dir or --without-tiff-dir was given. if test "${with_tiff_dir+set}" = set; then withval="$with_tiff_dir" PHP_TIFF_DIR=$withval else PHP_TIFF_DIR=no fi case $PHP_TIFF_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_TIFF_DIR=`echo "$PHP_TIFF_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_TIFF_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_TIFF_DIR" = "no" && PHP_TIFF_DIR=yes fi if test -n "for the location of libtiff"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_TIFF_DIR" != "no"; then save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$PHP_TIFF_DIR/lib $LDFLAGS" echo $ac_n "checking for TIFFOpen in -ltiff""... $ac_c" 1>&6 echo "configure:50976: checking for TIFFOpen in -ltiff" >&5 ac_lib_var=`echo tiff'_'TIFFOpen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ltiff $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS if test "$ext_shared" = "yes"; then PDFLIB_SHARED_LIBADD="-ltiff $PDFLIB_SHARED_LIBADD" if test -n "$PHP_TIFF_DIR/lib"; then if test "$PHP_TIFF_DIR/lib" != "/usr/lib"; then if test -z "$PHP_TIFF_DIR/lib" || echo "$PHP_TIFF_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_TIFF_DIR/lib else ep_dir="`echo $PHP_TIFF_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_TIFF_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "PDFLIB_SHARED_LIBADD"; then PDFLIB_SHARED_LIBADD="-R$PHP_TIFF_DIR/lib -L$PHP_TIFF_DIR/lib $PDFLIB_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PHP_TIFF_DIR/lib"; then if test "$PHP_TIFF_DIR/lib" != "/usr/lib"; then if test -z "$PHP_TIFF_DIR/lib" || echo "$PHP_TIFF_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_TIFF_DIR/lib else ep_dir="`echo $PHP_TIFF_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_TIFF_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PHP_TIFF_DIR/lib -L$PHP_TIFF_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case tiff in c|c_r|pthread*) ;; *) LIBS="-ltiff $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: libtiff not found!" 1>&2; exit 1; } fi else echo "configure: warning: If configure fails, try --with-tiff-dir=" 1>&2 fi echo $ac_n "checking for the location of zlib""... $ac_c" 1>&6 echo "configure:51125: checking for the location of zlib" >&5 if test "$PHP_ZLIB_DIR" = "no"; then echo "$ac_t""no. If configure fails, try --with-zlib-dir=" 1>&6 else echo "$ac_t""$PHP_ZLIB_DIR" 1>&6 if test "$ext_shared" = "yes"; then PDFLIB_SHARED_LIBADD="-lz $PDFLIB_SHARED_LIBADD" if test -n "$PHP_ZLIB_DIR/lib"; then if test "$PHP_ZLIB_DIR/lib" != "/usr/lib"; then if test -z "$PHP_ZLIB_DIR/lib" || echo "$PHP_ZLIB_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_ZLIB_DIR/lib else ep_dir="`echo $PHP_ZLIB_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_ZLIB_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "PDFLIB_SHARED_LIBADD"; then PDFLIB_SHARED_LIBADD="-R$PHP_ZLIB_DIR/lib -L$PHP_ZLIB_DIR/lib $PDFLIB_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PHP_ZLIB_DIR/lib"; then if test "$PHP_ZLIB_DIR/lib" != "/usr/lib"; then if test -z "$PHP_ZLIB_DIR/lib" || echo "$PHP_ZLIB_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_ZLIB_DIR/lib else ep_dir="`echo $PHP_ZLIB_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_ZLIB_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PHP_ZLIB_DIR/lib -L$PHP_ZLIB_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case z in c|c_r|pthread*) ;; *) LIBS="-lz $LIBS" ;; esac fi fi case $PHP_PDFLIB in yes) echo $ac_n "checking for PDF_show_boxed in -lpdf""... $ac_c" 1>&6 echo "configure:51231: checking for PDF_show_boxed in -lpdf" >&5 ac_lib_var=`echo pdf'_'PDF_show_boxed | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpdf $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_PDFLIB 1 EOF case pdf in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then PDFLIB_SHARED_LIBADD="-lpdf $PDFLIB_SHARED_LIBADD" else case pdf in c|c_r|pthread*) ;; *) LIBS="-lpdf $LIBS" ;; esac fi ;; esac else echo "$ac_t""no" 1>&6 { echo "configure: error: PDFlib extension requires at least pdflib 3.x. You may also need libtiff, libjpeg, libpng and libz. Use the options --with-tiff-dir=, --with-jpeg-dir=, --with-png-dir= and --with-zlib-dir= See config.log for more information. " 1>&2; exit 1; } fi ;; *) if test -f "$PHP_PDFLIB/include/pdflib.h" ; then save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$PHP_PDFLIB/lib $LDFLAGS" echo $ac_n "checking for PDF_show_boxed in -lpdf""... $ac_c" 1>&6 echo "configure:51319: checking for PDF_show_boxed in -lpdf" >&5 ac_lib_var=`echo pdf'_'PDF_show_boxed | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpdf $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_PDFLIB 1 EOF if test "$ext_shared" = "yes"; then PDFLIB_SHARED_LIBADD="-lpdf $PDFLIB_SHARED_LIBADD" if test -n "$PHP_PDFLIB/lib"; then if test "$PHP_PDFLIB/lib" != "/usr/lib"; then if test -z "$PHP_PDFLIB/lib" || echo "$PHP_PDFLIB/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_PDFLIB/lib else ep_dir="`echo $PHP_PDFLIB/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_PDFLIB/lib\"`" fi if test "$ext_shared" = "yes" && test -n "PDFLIB_SHARED_LIBADD"; then PDFLIB_SHARED_LIBADD="-R$PHP_PDFLIB/lib -L$PHP_PDFLIB/lib $PDFLIB_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PHP_PDFLIB/lib"; then if test "$PHP_PDFLIB/lib" != "/usr/lib"; then if test -z "$PHP_PDFLIB/lib" || echo "$PHP_PDFLIB/lib" | grep '^/' >/dev/null ; then ai_p=$PHP_PDFLIB/lib else ep_dir="`echo $PHP_PDFLIB/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_PDFLIB/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PHP_PDFLIB/lib -L$PHP_PDFLIB/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case pdf in c|c_r|pthread*) ;; *) LIBS="-lpdf $LIBS" ;; esac fi if test "$PHP_PDFLIB/include" != "/usr/include"; then if test -z "$PHP_PDFLIB/include" || echo "$PHP_PDFLIB/include" | grep '^/' >/dev/null ; then ai_p=$PHP_PDFLIB/include else ep_dir="`echo $PHP_PDFLIB/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PHP_PDFLIB/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: PDFlib extension requires at least pdflib 3.x. You may also need libtiff, libjpeg, libpng and libz. Use the options --with-tiff-dir=, --with-jpeg-dir=, --with-png-dir= and --with-zlib-dir= See config.log for more information. " 1>&2; exit 1; } fi else { echo "configure: error: pdflib.h not found! Check the path passed to --with-pdflib=. PATH should be the install prefix directory." 1>&2; exit 1; } fi ;; esac fi if test -n "for Verisign Payflow Pro support"; then echo $ac_n "checking for Verisign Payflow Pro support""... $ac_c" 1>&6 echo "configure:51513: checking for Verisign Payflow Pro support" >&5 fi # Check whether --with-pfpro or --without-pfpro was given. if test "${with_pfpro+set}" = set; then withval="$with_pfpro" PHP_PFPRO=$withval else PHP_PFPRO=no fi case $PHP_PFPRO in shared,*) ext_output="yes, shared" ext_shared=yes PHP_PFPRO=`echo "$PHP_PFPRO"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_PFPRO=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_PFPRO" = "no" && PHP_PFPRO=yes fi if test -n "for Verisign Payflow Pro support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_PFPRO" != "no"; then PFPRO_LIB=libpfpro.so PFPRO_HDR=pfpro.h for i in /usr/local /usr $PHP_PFPRO; do if test -r $i/$PFPRO_HDR; then PFPRO_INC_DIR=$i elif test -r $i/include/$PFPRO_HDR; then PFPRO_INC_DIR=$i/include elif test -r $i/lib/$PFPRO_HDR; then PFPRO_INC_DIR=$i/lib elif test -r $i/bin/$PFPRO_HDR; then PFPRO_INC_DIR=$i/bin fi if test -r $i/$PFPRO_LIB; then PFPRO_LIB_DIR=$i elif test -r $i/lib/$PFPRO_LIB; then PFPRO_LIB_DIR=$i/lib fi done if test -z "$PFPRO_INC_DIR"; then { echo "configure: error: Could not find pfpro.h. Please make sure you have the Verisign Payflow Pro SDK installed. Use ./configure --with-pfpro= if necessary" 1>&2; exit 1; } fi if test -z "$PFPRO_LIB_DIR"; then { echo "configure: error: Could not find libpfpro.so. Please make sure you have the Verisign Payflow Pro SDK installed. Use ./configure --with-pfpro= if necessary" 1>&2; exit 1; } fi PFPRO_VERSION3=`nm $PFPRO_LIB_DIR/$PFPRO_LIB | awk '{print $3}' | grep '^pfpro' > /dev/null && echo 1 || echo 0` PFPRO_VERSION2=`nm $PFPRO_LIB_DIR/$PFPRO_LIB | awk '{print $3}' | grep '^PN' > /dev/null && echo 1 || echo 0` if test "$PFPRO_VERSION3" -eq 1 ; then PFPRO_VERSION=3 elif test "$PFPRO_VERSION2" -eq 1 ; then PFPRO_VERSION=2 else { echo "configure: error: The pfpro extension requires version 2 or 3 of the SDK" 1>&2; exit 1; } fi cat >> confdefs.h </dev/null ; then ai_p=$PFPRO_INC_DIR else ep_dir="`echo $PFPRO_INC_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PFPRO_INC_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST PFPRO_SHARED_LIBADD" if test "$ext_shared" = "yes"; then PFPRO_SHARED_LIBADD="-lpfpro $PFPRO_SHARED_LIBADD" if test -n "$PFPRO_LIB_DIR"; then if test "$PFPRO_LIB_DIR" != "/usr/lib"; then if test -z "$PFPRO_LIB_DIR" || echo "$PFPRO_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$PFPRO_LIB_DIR else ep_dir="`echo $PFPRO_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PFPRO_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n "PFPRO_SHARED_LIBADD"; then PFPRO_SHARED_LIBADD="-R$PFPRO_LIB_DIR -L$PFPRO_LIB_DIR $PFPRO_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PFPRO_LIB_DIR"; then if test "$PFPRO_LIB_DIR" != "/usr/lib"; then if test -z "$PFPRO_LIB_DIR" || echo "$PFPRO_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$PFPRO_LIB_DIR else ep_dir="`echo $PFPRO_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PFPRO_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PFPRO_LIB_DIR -L$PFPRO_LIB_DIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case pfpro in c|c_r|pthread*) ;; *) LIBS="-lpfpro $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_PFPRO 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS pfpro" if test -d "$abs_srcdir/ext/pfpro"; then ext_builddir=ext/pfpro ext_srcdir=$abs_srcdir/ext/pfpro else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:51957: checking for PostgreSQL support" >&5 fi # Check whether --with-pgsql or --without-pgsql was given. if test "${with_pgsql+set}" = set; then withval="$with_pgsql" PHP_PGSQL=$withval else PHP_PGSQL=no fi case $PHP_PGSQL in shared,*) ext_output="yes, shared" ext_shared=yes PHP_PGSQL=`echo "$PHP_PGSQL"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_PGSQL=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_PGSQL" = "no" && PHP_PGSQL=yes fi if test -n "for PostgreSQL support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_PGSQL" != "no"; then if test -z "$PGSQL_INCLUDE" || echo "$PGSQL_INCLUDE" | grep '^/' >/dev/null ; then PGSQL_INCLUDE=$PGSQL_INCLUDE else ep_dir="`echo $PGSQL_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" PGSQL_INCLUDE="$ep_realdir/`basename \"$PGSQL_INCLUDE\"`" fi if test "$PHP_PGSQL" = "yes"; then PGSQL_SEARCH_PATHS="/usr /usr/local /usr/local/pgsql" else PGSQL_SEARCH_PATHS=$PHP_PGSQL fi for i in $PGSQL_SEARCH_PATHS; do for j in include include/pgsql include/postgres include/postgresql ""; do if test -r "$i/$j/libpq-fe.h"; then PGSQL_INC_BASE=$i PGSQL_INCLUDE=$i/$j fi done for j in lib lib/pgsql lib/postgres lib/postgresql ""; do if test -f "$i/$j/libpq.so" || test -f "$i/$j/libpq.a"; then PGSQL_LIBDIR=$i/$j fi done done if test -z "$PGSQL_INCLUDE"; then { echo "configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path" 1>&2; exit 1; } fi if test -z "$PGSQL_LIBDIR"; then { echo "configure: error: Cannot find libpq.so. Please specify correct PostgreSQL installation path" 1>&2; exit 1; } fi if test -z "$PGSQL_INCLUDE" -a -z "$PGSQL_LIBDIR" ; then { echo "configure: error: Unable to find libpq anywhere under $withval" 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define HAVE_PGSQL 1 EOF old_LIBS=$LIBS old_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -L$PGSQL_LIBDIR" echo $ac_n "checking for PQescapeString in -lpq""... $ac_c" 1>&6 echo "configure:52056: checking for PQescapeString in -lpq" >&5 ac_lib_var=`echo pq'_'PQescapeString | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpq $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_PQESCAPE 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for PQsetnonblocking in -lpq""... $ac_c" 1>&6 echo "configure:52099: checking for PQsetnonblocking in -lpq" >&5 ac_lib_var=`echo pq'_'PQsetnonblocking | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpq $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_PQSETNONBLOCKING 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for PQcmdTuples in -lpq""... $ac_c" 1>&6 echo "configure:52142: checking for PQcmdTuples in -lpq" >&5 ac_lib_var=`echo pq'_'PQcmdTuples | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpq $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_PQCMDTUPLES 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for PQoidValue in -lpq""... $ac_c" 1>&6 echo "configure:52185: checking for PQoidValue in -lpq" >&5 ac_lib_var=`echo pq'_'PQoidValue | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpq $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_PQOIDVALUE 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for PQclientEncoding in -lpq""... $ac_c" 1>&6 echo "configure:52228: checking for PQclientEncoding in -lpq" >&5 ac_lib_var=`echo pq'_'PQclientEncoding | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpq $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_PQCLIENTENCODING 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for pg_encoding_to_char in -lpq""... $ac_c" 1>&6 echo "configure:52271: checking for pg_encoding_to_char in -lpq" >&5 ac_lib_var=`echo pq'_'pg_encoding_to_char | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpq $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT 1 EOF else echo "$ac_t""no" 1>&6 fi LIBS=$old_LIBS LDFLAGS=$old_LDFLAGS if test "$ext_shared" = "yes"; then PGSQL_SHARED_LIBADD="-lpq $PGSQL_SHARED_LIBADD" if test -n "$PGSQL_LIBDIR"; then if test "$PGSQL_LIBDIR" != "/usr/lib"; then if test -z "$PGSQL_LIBDIR" || echo "$PGSQL_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$PGSQL_LIBDIR else ep_dir="`echo $PGSQL_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PGSQL_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "PGSQL_SHARED_LIBADD"; then PGSQL_SHARED_LIBADD="-R$PGSQL_LIBDIR -L$PGSQL_LIBDIR $PGSQL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PGSQL_LIBDIR"; then if test "$PGSQL_LIBDIR" != "/usr/lib"; then if test -z "$PGSQL_LIBDIR" || echo "$PGSQL_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$PGSQL_LIBDIR else ep_dir="`echo $PGSQL_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PGSQL_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PGSQL_LIBDIR -L$PGSQL_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case pq in c|c_r|pthread*) ;; *) LIBS="-lpq $LIBS" ;; esac fi PHP_VAR_SUBST="$PHP_VAR_SUBST PGSQL_SHARED_LIBADD" if test "$PGSQL_INCLUDE" != "/usr/include"; then if test -z "$PGSQL_INCLUDE" || echo "$PGSQL_INCLUDE" | grep '^/' >/dev/null ; then ai_p=$PGSQL_INCLUDE else ep_dir="`echo $PGSQL_INCLUDE|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PGSQL_INCLUDE\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi EXT_SUBDIRS="$EXT_SUBDIRS pgsql" if test -d "$abs_srcdir/ext/pgsql"; then ext_builddir=ext/pgsql ext_srcdir=$abs_srcdir/ext/pgsql else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:52660: checking whether to enable POSIX-like functions" >&5 fi # Check whether --enable-posix or --disable-posix was given. if test "${enable_posix+set}" = set; then enableval="$enable_posix" PHP_POSIX=$enableval else PHP_POSIX=yes fi case $PHP_POSIX in shared,*) ext_output="yes, shared" ext_shared=yes PHP_POSIX=`echo "$PHP_POSIX"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_POSIX=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_POSIX" = "no" && PHP_POSIX=yes fi if test -n "whether to enable POSIX-like functions"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_POSIX" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_POSIX 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS posix" if test -d "$abs_srcdir/ext/posix"; then ext_builddir=ext/posix ext_srcdir=$abs_srcdir/ext/posix else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:52919: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:52947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done fi if test -n "for PSPELL support"; then echo $ac_n "checking for PSPELL support""... $ac_c" 1>&6 echo "configure:52978: checking for PSPELL support" >&5 fi # Check whether --with-pspell or --without-pspell was given. if test "${with_pspell+set}" = set; then withval="$with_pspell" PHP_PSPELL=$withval else PHP_PSPELL=no fi case $PHP_PSPELL in shared,*) ext_output="yes, shared" ext_shared=yes PHP_PSPELL=`echo "$PHP_PSPELL"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_PSPELL=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_PSPELL" = "no" && PHP_PSPELL=yes fi if test -n "for PSPELL support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_PSPELL" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS pspell" if test -d "$abs_srcdir/ext/pspell"; then ext_builddir=ext/pspell ext_srcdir=$abs_srcdir/ext/pspell else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi PSPELL_LIBDIR=$PSPELL_DIR/lib cat >> confdefs.h <<\EOF #define HAVE_PSPELL 1 EOF PHP_VAR_SUBST="$PHP_VAR_SUBST PSPELL_SHARED_LIBADD" if test "$ext_shared" = "yes"; then PSPELL_SHARED_LIBADD="-lpspell $PSPELL_SHARED_LIBADD" if test -n "$PSPELL_LIBDIR"; then if test "$PSPELL_LIBDIR" != "/usr/lib"; then if test -z "$PSPELL_LIBDIR" || echo "$PSPELL_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$PSPELL_LIBDIR else ep_dir="`echo $PSPELL_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PSPELL_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "PSPELL_SHARED_LIBADD"; then PSPELL_SHARED_LIBADD="-R$PSPELL_LIBDIR -L$PSPELL_LIBDIR $PSPELL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$PSPELL_LIBDIR"; then if test "$PSPELL_LIBDIR" != "/usr/lib"; then if test -z "$PSPELL_LIBDIR" || echo "$PSPELL_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$PSPELL_LIBDIR else ep_dir="`echo $PSPELL_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PSPELL_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$PSPELL_LIBDIR -L$PSPELL_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case pspell in c|c_r|pthread*) ;; *) LIBS="-lpspell $LIBS" ;; esac fi if test "$PSPELL_INCDIR" != "/usr/include"; then if test -z "$PSPELL_INCDIR" || echo "$PSPELL_INCDIR" | grep '^/' >/dev/null ; then ai_p=$PSPELL_INCDIR else ep_dir="`echo $PSPELL_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$PSPELL_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi echo $ac_n "checking whether to include QDOM support""... $ac_c" 1>&6 echo "configure:53386: checking whether to include QDOM support" >&5 # Check whether --with-qtdom or --without-qtdom was given. if test "${with_qtdom+set}" = set; then withval="$with_qtdom" case $withval in no) echo "$ac_t""no" 1>&6 ;; yes) if test -f $QTDIR/include/qdom.h; then echo "$ac_t""yes" 1>&6 if test -n "$QTDIR/lib"; then if test "$QTDIR/lib" != "/usr/lib"; then if test -z "$QTDIR/lib" || echo "$QTDIR/lib" | grep '^/' >/dev/null ; then ai_p=$QTDIR/lib else ep_dir="`echo $QTDIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$QTDIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$QTDIR/lib -L$QTDIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case qt in c|c_r|pthread*) ;; *) LIBS="-lqt $LIBS" ;; esac if test "$QTDIR/include" != "/usr/include"; then if test -z "$QTDIR/include" || echo "$QTDIR/include" | grep '^/' >/dev/null ; then ai_p=$QTDIR/include else ep_dir="`echo $QTDIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$QTDIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_QTDOM 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS qtdom" if test -d "$abs_srcdir/ext/qtdom"; then ext_builddir=ext/qtdom ext_srcdir=$abs_srcdir/ext/qtdom else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:53695: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CXX="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi CXX="$ac_cv_prog_CXX" if test -n "$CXX"; then echo "$ac_t""$CXX" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$CXX" && break done test -n "$CXX" || CXX="gcc" echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:53727: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross cat > conftest.$ac_ext << EOF #line 53738 "configure" #include "confdefs.h" int main(){return(0);} EOF if { (eval echo configure:53743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cxx_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cxx_cross=no else ac_cv_prog_cxx_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cxx_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 if test $ac_cv_prog_cxx_works = no; then { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:53769: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 cross_compiling=$ac_cv_prog_cxx_cross echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 echo "configure:53774: checking whether we are using GNU C++" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.C <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gxx=yes else ac_cv_prog_gxx=no fi fi echo "$ac_t""$ac_cv_prog_gxx" 1>&6 if test $ac_cv_prog_gxx = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS="${CXXFLAGS+set}" ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS= echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 echo "configure:53802: checking whether ${CXX-g++} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.cc if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then ac_cv_prog_cxx_g=yes else ac_cv_prog_cxx_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS="$ac_save_CXXFLAGS" elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 echo "configure:53834: checking how to run the C++ preprocessor" >&5 if test -z "$CXXCPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross CXXCPP="${CXX-g++} -E" cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:53852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CXXCPP=/lib/cpp fi rm -f conftest* ac_cv_prog_CXXCPP="$CXXCPP" ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross fi fi CXXCPP="$ac_cv_prog_CXXCPP" echo "$ac_t""$CXXCPP" 1>&6 php_cxx_done=yes fi elif test -f /usr/lib/qt2/include/qdom.h; then echo "$ac_t""yes" 1>&6 case qt in c|c_r|pthread*) ;; *) LIBS="-lqt $LIBS" ;; esac if test "/usr/lib/qt2/include" != "/usr/include"; then if test -z "/usr/lib/qt2/include" || echo "/usr/lib/qt2/include" | grep '^/' >/dev/null ; then ai_p=/usr/lib/qt2/include else ep_dir="`echo /usr/lib/qt2/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"/usr/lib/qt2/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_QTDOM 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS qtdom" if test -d "$abs_srcdir/ext/qtdom"; then ext_builddir=ext/qtdom ext_srcdir=$abs_srcdir/ext/qtdom else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:54140: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CXX="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi CXX="$ac_cv_prog_CXX" if test -n "$CXX"; then echo "$ac_t""$CXX" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$CXX" && break done test -n "$CXX" || CXX="gcc" echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:54172: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross cat > conftest.$ac_ext << EOF #line 54183 "configure" #include "confdefs.h" int main(){return(0);} EOF if { (eval echo configure:54188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cxx_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cxx_cross=no else ac_cv_prog_cxx_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cxx_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 if test $ac_cv_prog_cxx_works = no; then { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:54214: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 cross_compiling=$ac_cv_prog_cxx_cross echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 echo "configure:54219: checking whether we are using GNU C++" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.C <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gxx=yes else ac_cv_prog_gxx=no fi fi echo "$ac_t""$ac_cv_prog_gxx" 1>&6 if test $ac_cv_prog_gxx = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS="${CXXFLAGS+set}" ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS= echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 echo "configure:54247: checking whether ${CXX-g++} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.cc if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then ac_cv_prog_cxx_g=yes else ac_cv_prog_cxx_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS="$ac_save_CXXFLAGS" elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 echo "configure:54279: checking how to run the C++ preprocessor" >&5 if test -z "$CXXCPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross CXXCPP="${CXX-g++} -E" cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:54297: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CXXCPP=/lib/cpp fi rm -f conftest* ac_cv_prog_CXXCPP="$CXXCPP" ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross fi fi CXXCPP="$ac_cv_prog_CXXCPP" echo "$ac_t""$CXXCPP" 1>&6 php_cxx_done=yes fi else echo "$ac_t""no" 1>&6 fi ;; esac else echo "$ac_t""no" 1>&6 fi if test -n "for libedit readline replacement"; then echo $ac_n "checking for libedit readline replacement""... $ac_c" 1>&6 echo "configure:54342: checking for libedit readline replacement" >&5 fi # Check whether --with-libedit or --without-libedit was given. if test "${with_libedit+set}" = set; then withval="$with_libedit" PHP_LIBEDIT=$withval else PHP_LIBEDIT=no fi case $PHP_LIBEDIT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_LIBEDIT=`echo "$PHP_LIBEDIT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_LIBEDIT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_LIBEDIT" = "no" && PHP_LIBEDIT=yes fi if test -n "for libedit readline replacement"; then echo "$ac_t""$ext_output" 1>&6 fi if test -n "for readline support"; then echo $ac_n "checking for readline support""... $ac_c" 1>&6 echo "configure:54391: checking for readline support" >&5 fi # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" PHP_READLINE=$withval else PHP_READLINE=no fi case $PHP_READLINE in shared,*) ext_output="yes, shared" ext_shared=yes PHP_READLINE=`echo "$PHP_READLINE"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_READLINE=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_READLINE" = "no" && PHP_READLINE=yes fi if test -n "for readline support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_READLINE" != "no"; then for i in /usr/local /usr $PHP_READLINE; do if test -f $i/include/readline/readline.h; then READLINE_DIR=$i fi done if test -z "$READLINE_DIR"; then { echo "configure: error: Please reinstall readline - I cannot find readline.h" 1>&2; exit 1; } fi if test "$READLINE_DIR/include" != "/usr/include"; then if test -z "$READLINE_DIR/include" || echo "$READLINE_DIR/include" | grep '^/' >/dev/null ; then ai_p=$READLINE_DIR/include else ep_dir="`echo $READLINE_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$READLINE_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 echo "configure:54479: checking for tgetent in -lncurses" >&5 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lncurses $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 if test "$ext_shared" = "yes"; then READLINE_SHARED_LIBADD="-lncurses $READLINE_SHARED_LIBADD" if test -n ""; then if test "" != "/usr/lib"; then if test -z "" || echo "" | grep '^/' >/dev/null ; then ai_p= else ep_dir="`echo |sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"\"`" fi if test "$ext_shared" = "yes" && test -n "READLINE_SHARED_LIBADD"; then READLINE_SHARED_LIBADD="-R -L $READLINE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n ""; then if test "" != "/usr/lib"; then if test -z "" || echo "" | grep '^/' >/dev/null ; then ai_p= else ep_dir="`echo |sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R -L $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ncurses in c|c_r|pthread*) ;; *) LIBS="-lncurses $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 echo "configure:54613: checking for tgetent in -ltermcap" >&5 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ltermcap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 if test "$ext_shared" = "yes"; then READLINE_SHARED_LIBADD="-ltermcap $READLINE_SHARED_LIBADD" if test -n ""; then if test "" != "/usr/lib"; then if test -z "" || echo "" | grep '^/' >/dev/null ; then ai_p= else ep_dir="`echo |sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"\"`" fi if test "$ext_shared" = "yes" && test -n "READLINE_SHARED_LIBADD"; then READLINE_SHARED_LIBADD="-R -L $READLINE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n ""; then if test "" != "/usr/lib"; then if test -z "" || echo "" | grep '^/' >/dev/null ; then ai_p= else ep_dir="`echo |sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R -L $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case termcap in c|c_r|pthread*) ;; *) LIBS="-ltermcap $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 fi fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$READLINE_DIR/lib $LDFLAGS" echo $ac_n "checking for readline in -lreadline""... $ac_c" 1>&6 echo "configure:54757: checking for readline in -lreadline" >&5 ac_lib_var=`echo readline'_'readline | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lreadline $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS if test "$ext_shared" = "yes"; then READLINE_SHARED_LIBADD="-lreadline $READLINE_SHARED_LIBADD" if test -n "$READLINE_DIR/lib"; then if test "$READLINE_DIR/lib" != "/usr/lib"; then if test -z "$READLINE_DIR/lib" || echo "$READLINE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$READLINE_DIR/lib else ep_dir="`echo $READLINE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$READLINE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "READLINE_SHARED_LIBADD"; then READLINE_SHARED_LIBADD="-R$READLINE_DIR/lib -L$READLINE_DIR/lib $READLINE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$READLINE_DIR/lib"; then if test "$READLINE_DIR/lib" != "/usr/lib"; then if test -z "$READLINE_DIR/lib" || echo "$READLINE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$READLINE_DIR/lib else ep_dir="`echo $READLINE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$READLINE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$READLINE_DIR/lib -L$READLINE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case readline in c|c_r|pthread*) ;; *) LIBS="-lreadline $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: readline library not found" 1>&2; exit 1; } fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$READLINE_DIR/lib $LDFLAGS" echo $ac_n "checking for add_history in -lhistory""... $ac_c" 1>&6 echo "configure:54907: checking for add_history in -lhistory" >&5 ac_lib_var=`echo history'_'add_history | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lhistory $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS if test "$ext_shared" = "yes"; then READLINE_SHARED_LIBADD="-lhistory $READLINE_SHARED_LIBADD" if test -n "$READLINE_DIR/lib"; then if test "$READLINE_DIR/lib" != "/usr/lib"; then if test -z "$READLINE_DIR/lib" || echo "$READLINE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$READLINE_DIR/lib else ep_dir="`echo $READLINE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$READLINE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "READLINE_SHARED_LIBADD"; then READLINE_SHARED_LIBADD="-R$READLINE_DIR/lib -L$READLINE_DIR/lib $READLINE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$READLINE_DIR/lib"; then if test "$READLINE_DIR/lib" != "/usr/lib"; then if test -z "$READLINE_DIR/lib" || echo "$READLINE_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$READLINE_DIR/lib else ep_dir="`echo $READLINE_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$READLINE_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$READLINE_DIR/lib -L$READLINE_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case history in c|c_r|pthread*) ;; *) LIBS="-lhistory $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: history library required by readline not found" 1>&2; exit 1; } fi PHP_VAR_SUBST="$PHP_VAR_SUBST READLINE_SHARED_LIBADD" cat >> confdefs.h <<\EOF #define HAVE_LIBREADLINE 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS readline" if test -d "$abs_srcdir/ext/readline"; then ext_builddir=ext/readline ext_srcdir=$abs_srcdir/ext/readline else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "cli" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi if test "$LIBEDIT_DIR/include" != "/usr/include"; then if test -z "$LIBEDIT_DIR/include" || echo "$LIBEDIT_DIR/include" | grep '^/' >/dev/null ; then ai_p=$LIBEDIT_DIR/include else ep_dir="`echo $LIBEDIT_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LIBEDIT_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 echo "configure:55309: checking for tgetent in -lncurses" >&5 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lncurses $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 if test "$ext_shared" = "yes"; then READLINE_SHARED_LIBADD="-lncurses $READLINE_SHARED_LIBADD" if test -n ""; then if test "" != "/usr/lib"; then if test -z "" || echo "" | grep '^/' >/dev/null ; then ai_p= else ep_dir="`echo |sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"\"`" fi if test "$ext_shared" = "yes" && test -n "READLINE_SHARED_LIBADD"; then READLINE_SHARED_LIBADD="-R -L $READLINE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n ""; then if test "" != "/usr/lib"; then if test -z "" || echo "" | grep '^/' >/dev/null ; then ai_p= else ep_dir="`echo |sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R -L $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case ncurses in c|c_r|pthread*) ;; *) LIBS="-lncurses $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 echo "configure:55443: checking for tgetent in -ltermcap" >&5 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ltermcap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 if test "$ext_shared" = "yes"; then READLINE_SHARED_LIBADD="-ltermcap $READLINE_SHARED_LIBADD" if test -n ""; then if test "" != "/usr/lib"; then if test -z "" || echo "" | grep '^/' >/dev/null ; then ai_p= else ep_dir="`echo |sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"\"`" fi if test "$ext_shared" = "yes" && test -n "READLINE_SHARED_LIBADD"; then READLINE_SHARED_LIBADD="-R -L $READLINE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n ""; then if test "" != "/usr/lib"; then if test -z "" || echo "" | grep '^/' >/dev/null ; then ai_p= else ep_dir="`echo |sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R -L $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case termcap in c|c_r|pthread*) ;; *) LIBS="-ltermcap $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 fi fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$READLINE_DIR/lib $LDFLAGS" echo $ac_n "checking for readline in -ledit""... $ac_c" 1>&6 echo "configure:55587: checking for readline in -ledit" >&5 ac_lib_var=`echo edit'_'readline | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ledit $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS if test "$ext_shared" = "yes"; then READLINE_SHARED_LIBADD="-ledit $READLINE_SHARED_LIBADD" if test -n "$LIBEDIT_DIR/lib"; then if test "$LIBEDIT_DIR/lib" != "/usr/lib"; then if test -z "$LIBEDIT_DIR/lib" || echo "$LIBEDIT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$LIBEDIT_DIR/lib else ep_dir="`echo $LIBEDIT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LIBEDIT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "READLINE_SHARED_LIBADD"; then READLINE_SHARED_LIBADD="-R$LIBEDIT_DIR/lib -L$LIBEDIT_DIR/lib $READLINE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$LIBEDIT_DIR/lib"; then if test "$LIBEDIT_DIR/lib" != "/usr/lib"; then if test -z "$LIBEDIT_DIR/lib" || echo "$LIBEDIT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$LIBEDIT_DIR/lib else ep_dir="`echo $LIBEDIT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$LIBEDIT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$LIBEDIT_DIR/lib -L$LIBEDIT_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case edit in c|c_r|pthread*) ;; *) LIBS="-ledit $LIBS" ;; esac fi else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS { echo "configure: error: edit library required by readline not found" 1>&2; exit 1; } fi PHP_VAR_SUBST="$PHP_VAR_SUBST READLINE_SHARED_LIBADD" cat >> confdefs.h <<\EOF #define HAVE_LIBEDIT 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS readline" if test -d "$abs_srcdir/ext/readline"; then ext_builddir=ext/readline ext_srcdir=$abs_srcdir/ext/readline else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "cli" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:55951: checking for recode support" >&5 fi # Check whether --with-recode or --without-recode was given. if test "${with_recode+set}" = set; then withval="$with_recode" PHP_RECODE=$withval else PHP_RECODE=no fi case $PHP_RECODE in shared,*) ext_output="yes, shared" ext_shared=yes PHP_RECODE=`echo "$PHP_RECODE"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_RECODE=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_RECODE" = "no" && PHP_RECODE=yes fi if test -n "for recode support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_RECODE" != "no"; then RECODE_LIST="$PHP_RECODE /usr /usr/local /opt" for i in $RECODE_LIST; do if test -f $i/include/recode.h; then RECODE_DIR=$i RECODE_INC=include RECODE_LIB=lib fi if test -f $i/include/recode/recode.h; then RECODE_DIR=$i RECODE_INC=include/recode RECODE_LIB=lib/recode fi if test -f $i/recode/include/recode.h; then RECODE_DIR=$i/recode RECODE_INC=include RECODE_LIB=lib fi done if test "$RECODE_DIR" = ""; then { echo "configure: error: I cannot find recode.h anywhere below $RECODE_LIST. Is it installed?" 1>&2; exit 1; } fi old_LDFLAGS=$LDFLAGS old_LIBS=$LIBS LDFLAGS="$LDFLAGS -L$RECODE_DIR/$RECODE_LIB" LIBS="$LIBS -lrecode" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* { echo "configure: error: I cannot link librecode (-L$RECODE_DIR/$RECODE_LIB -lrecode). Is it installed?" 1>&2; exit 1; } fi rm -f conftest* LIBS=$old_LIBS LDFLAGS=$old_LDFLAGS if test "$RECODE_LIB" = ""; then { echo "configure: error: Please reinstall recode - I cannot find librecode.a" 1>&2; exit 1; } fi if test "$RECODE_DIR/$RECODE_INC" != "/usr/include"; then if test -z "$RECODE_DIR/$RECODE_INC" || echo "$RECODE_DIR/$RECODE_INC" | grep '^/' >/dev/null ; then ai_p=$RECODE_DIR/$RECODE_INC else ep_dir="`echo $RECODE_DIR/$RECODE_INC|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$RECODE_DIR/$RECODE_INC\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then if test "$ext_shared" = "yes"; then RECODE_SHARED_LIBADD="-lrecode $RECODE_SHARED_LIBADD" if test -n "$RECODE_DIR/$RECODE_LIB"; then if test "$RECODE_DIR/$RECODE_LIB" != "/usr/lib"; then if test -z "$RECODE_DIR/$RECODE_LIB" || echo "$RECODE_DIR/$RECODE_LIB" | grep '^/' >/dev/null ; then ai_p=$RECODE_DIR/$RECODE_LIB else ep_dir="`echo $RECODE_DIR/$RECODE_LIB|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$RECODE_DIR/$RECODE_LIB\"`" fi if test "$ext_shared" = "yes" && test -n "RECODE_SHARED_LIBADD"; then RECODE_SHARED_LIBADD="-R$RECODE_DIR/$RECODE_LIB -L$RECODE_DIR/$RECODE_LIB $RECODE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$RECODE_DIR/$RECODE_LIB"; then if test "$RECODE_DIR/$RECODE_LIB" != "/usr/lib"; then if test -z "$RECODE_DIR/$RECODE_LIB" || echo "$RECODE_DIR/$RECODE_LIB" | grep '^/' >/dev/null ; then ai_p=$RECODE_DIR/$RECODE_LIB else ep_dir="`echo $RECODE_DIR/$RECODE_LIB|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$RECODE_DIR/$RECODE_LIB\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$RECODE_DIR/$RECODE_LIB -L$RECODE_DIR/$RECODE_LIB $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case recode in c|c_r|pthread*) ;; *) LIBS="-lrecode $LIBS" ;; esac fi PHP_VAR_SUBST="$PHP_VAR_SUBST RECODE_SHARED_LIBADD" else if test "$RECODE_DIR/$RECODE_LIB" != "/usr/lib"; then if test -z "$RECODE_DIR/$RECODE_LIB" || echo "$RECODE_DIR/$RECODE_LIB" | grep '^/' >/dev/null ; then ai_p=$RECODE_DIR/$RECODE_LIB else ep_dir="`echo $RECODE_DIR/$RECODE_LIB|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$RECODE_DIR/$RECODE_LIB\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$RECODE_DIR/$RECODE_LIB -L$RECODE_DIR/$RECODE_LIB $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi case recode in c|c_r|pthread*) ;; *) DLIBS="-lrecode $DLIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_LIBRECODE 1 EOF for ac_hdr in stdbool.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:56242: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:56252: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done EXT_SUBDIRS="$EXT_SUBDIRS recode" if test -d "$abs_srcdir/ext/recode"; then ext_builddir=ext/recode ext_srcdir=$abs_srcdir/ext/recode else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:56491: checking whether to enable PHP sessions" >&5 fi # Check whether --enable-session or --disable-session was given. if test "${enable_session+set}" = set; then enableval="$enable_session" PHP_SESSION=$enableval else PHP_SESSION=yes fi case $PHP_SESSION in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SESSION=`echo "$PHP_SESSION"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SESSION=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SESSION" = "no" && PHP_SESSION=yes fi if test -n "whether to enable PHP sessions"; then echo "$ac_t""$ext_output" 1>&6 fi if test -n "for mm support"; then echo $ac_n "checking for mm support""... $ac_c" 1>&6 echo "configure:56540: checking for mm support" >&5 fi # Check whether --with-mm or --without-mm was given. if test "${with_mm+set}" = set; then withval="$with_mm" PHP_MM=$withval else PHP_MM=no fi case $PHP_MM in shared,*) ext_output="yes, shared" ext_shared=yes PHP_MM=`echo "$PHP_MM"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_MM=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_MM" = "no" && PHP_MM=yes fi if test -n "for mm support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_MM" != "no"; then for i in /usr/local /usr $PHP_MM; do if test -f "$i/include/mm.h"; then MM_DIR=$i fi done if test -z "$MM_DIR" ; then { echo "configure: error: cannot find mm library" 1>&2; exit 1; } fi if test "$ext_shared" = "yes"; then SESSION_SHARED_LIBADD="-lmm $SESSION_SHARED_LIBADD" if test -n "$MM_DIR/lib"; then if test "$MM_DIR/lib" != "/usr/lib"; then if test -z "$MM_DIR/lib" || echo "$MM_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MM_DIR/lib else ep_dir="`echo $MM_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MM_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "SESSION_SHARED_LIBADD"; then SESSION_SHARED_LIBADD="-R$MM_DIR/lib -L$MM_DIR/lib $SESSION_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$MM_DIR/lib"; then if test "$MM_DIR/lib" != "/usr/lib"; then if test -z "$MM_DIR/lib" || echo "$MM_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$MM_DIR/lib else ep_dir="`echo $MM_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MM_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$MM_DIR/lib -L$MM_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case mm in c|c_r|pthread*) ;; *) LIBS="-lmm $LIBS" ;; esac fi if test "$MM_DIR/include" != "/usr/include"; then if test -z "$MM_DIR/include" || echo "$MM_DIR/include" | grep '^/' >/dev/null ; then ai_p=$MM_DIR/include else ep_dir="`echo $MM_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$MM_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi cat >> confdefs.h <<\EOF #define HAVE_LIBMM 1 EOF EXTRA_MODULE_PTRS="$EXTRA_MODULE_PTRS phpext_ps_mm_ptr," fi if test "$PHP_SESSION" != "no"; then for ac_func in pread pwrite do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:56734: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:56762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done echo $ac_n "checking whether pwrite works without custom declaration""... $ac_c" 1>&6 echo "configure:56788: checking whether pwrite works without custom declaration" >&5 if eval "test \"`echo '$''{'ac_cv_pwrite'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { size_t (*func)() = pwrite ; return 0; } EOF if { (eval echo configure:56801: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_pwrite=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* if test "$cross_compiling" = yes; then ac_cv_pwrite=no else cat > conftest.$ac_ext < #include #include main() { return !(pwrite(open("conftest_out", O_WRONLY|O_CREAT, 0600), "Ok", 2, 0) == 2); } EOF if { (eval echo configure:56826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_pwrite=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < #include #include #include ssize_t pwrite(int, void *, size_t, off64_t); main() { return !(pwrite(open("conftest_out", O_WRONLY|O_CREAT, 0600), "Ok", 2, 0) == 2); } EOF if { (eval echo configure:56851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_pwrite=64 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_pwrite=no fi rm -fr conftest* fi fi rm -fr conftest* fi fi rm -f conftest* fi echo "$ac_t""$ac_cv_pwrite" 1>&6 case $ac_cv_pwrite in no) ac_cv_func_pwrite=no;; 64) cat >> confdefs.h <<\EOF #define PHP_PWRITE_64 1 EOF ;; esac echo $ac_n "checking whether pread works without custom declaration""... $ac_c" 1>&6 echo "configure:56889: checking whether pread works without custom declaration" >&5 if eval "test \"`echo '$''{'ac_cv_pread'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { size_t (*func)() = pread ; return 0; } EOF if { (eval echo configure:56902: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_pread=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo test > conftest_in if test "$cross_compiling" = yes; then ac_cv_pread=no else cat > conftest.$ac_ext < #include #include main() { char buf[3]; return !(pread(open("conftest_in", O_RDONLY), buf, 2, 0) == 2); } EOF if { (eval echo configure:56928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_pread=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* echo test > conftest_in if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < #include #include #include ssize_t pread(int, void *, size_t, off64_t); main() { char buf[3]; return !(pread(open("conftest_in", O_RDONLY), buf, 2, 0) == 2); } EOF if { (eval echo configure:56954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_pread=64 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_pread=no fi rm -fr conftest* fi fi rm -fr conftest* fi fi rm -f conftest* fi echo "$ac_t""$ac_cv_pread" 1>&6 case $ac_cv_pread in no) ac_cv_func_pread=no;; 64) cat >> confdefs.h <<\EOF #define PHP_PREAD_64 1 EOF ;; esac EXT_SUBDIRS="$EXT_SUBDIRS session" if test -d "$abs_srcdir/ext/session"; then ext_builddir=ext/session ext_srcdir=$abs_srcdir/ext/session else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_PHP_SESSION 1 EOF fi if test -n "whether to enable shmop support"; then echo $ac_n "checking whether to enable shmop support""... $ac_c" 1>&6 echo "configure:57208: checking whether to enable shmop support" >&5 fi # Check whether --enable-shmop or --disable-shmop was given. if test "${enable_shmop+set}" = set; then enableval="$enable_shmop" PHP_SHMOP=$enableval else PHP_SHMOP=no fi case $PHP_SHMOP in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SHMOP=`echo "$PHP_SHMOP"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SHMOP=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SHMOP" = "no" && PHP_SHMOP=yes fi if test -n "whether to enable shmop support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SHMOP" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_SHMOP 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS shmop" if test -d "$abs_srcdir/ext/shmop"; then ext_builddir=ext/shmop ext_srcdir=$abs_srcdir/ext/shmop else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:57470: checking for SNMP support" >&5 fi # Check whether --with-snmp or --without-snmp was given. if test "${with_snmp+set}" = set; then withval="$with_snmp" PHP_SNMP=$withval else PHP_SNMP=no fi case $PHP_SNMP in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SNMP=`echo "$PHP_SNMP"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SNMP=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SNMP" = "no" && PHP_SNMP=yes fi if test -n "for SNMP support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SNMP" != "no"; then if test "$PHP_SNMP" = "yes"; then for i in /usr/include /usr/local/include; do test -f $i/snmp.h && SNMP_INCDIR=$i test -f $i/ucd-snmp/snmp.h && SNMP_INCDIR=$i/ucd-snmp test -f $i/snmp/snmp.h && SNMP_INCDIR=$i/snmp test -f $i/snmp/include/ucd-snmp/snmp.h && SNMP_INCDIR=$i/snmp/include/ucd-snmp done for i in /usr /usr/snmp /usr/local /usr/local/snmp; do test -f $i/lib/libsnmp.a -o -f $i/lib/libsnmp.$SHLIB_SUFFIX_NAME && SNMP_LIBDIR=$i/lib done else SNMP_INCDIR=$PHP_SNMP/include test -d $PHP_SNMP/include/ucd-snmp && SNMP_INCDIR=$PHP_SNMP/include/ucd-snmp SNMP_LIBDIR=$PHP_SNMP/lib fi if test -z "$SNMP_INCDIR"; then { echo "configure: error: snmp.h not found. Check your SNMP installation." 1>&2; exit 1; } elif test -z "$SNMP_LIBDIR"; then { echo "configure: error: libsnmp not found. Check your SNMP installation." 1>&2; exit 1; } fi old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$SNMP_INCDIR for ac_hdr in default_store.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:57545: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:57555: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done if test "$ac_cv_header_default_store_h" = "yes"; then echo $ac_n "checking for OpenSSL support in SNMP libraries""... $ac_c" 1>&6 echo "configure:57583: checking for OpenSSL support in SNMP libraries" >&5 cat > conftest.$ac_ext < #if USE_OPENSSL yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* SNMP_SSL=yes else rm -rf conftest* SNMP_SSL=no fi rm -f conftest* fi CPPFLAGS=$old_CPPFLAGS echo "$ac_t""$SNMP_SSL" 1>&6 if test "$SNMP_SSL" = "yes"; then if test "$PHP_OPENSSL" != "no"; then case ssl in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SNMP_SHARED_LIBADD="$SNMP_SHARED_LIBADD -lssl" else case ssl in c|c_r|pthread*) ;; *) LIBS="$LIBS -lssl" ;; esac fi ;; esac case crypto in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SNMP_SHARED_LIBADD="$SNMP_SHARED_LIBADD -lcrypto" else case crypto in c|c_r|pthread*) ;; *) LIBS="$LIBS -lcrypto" ;; esac fi ;; esac else { echo "configure: error: The UCD-SNMP in this system is built with SSL support. Add --with-openssl<=DIR> to your configure line." 1>&2; exit 1; } fi fi echo $ac_n "checking for kstat_read in -lkstat""... $ac_c" 1>&6 echo "configure:57676: checking for kstat_read in -lkstat" >&5 ac_lib_var=`echo kstat'_'kstat_read | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lkstat $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 case kstat in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SNMP_SHARED_LIBADD="-lkstat $SNMP_SHARED_LIBADD" else case kstat in c|c_r|pthread*) ;; *) LIBS="-lkstat $LIBS" ;; esac fi ;; esac else echo "$ac_t""no" 1>&6 fi cat >> confdefs.h <<\EOF #define HAVE_SNMP 1 EOF if test "$SNMP_INCDIR" != "/usr/include"; then if test -z "$SNMP_INCDIR" || echo "$SNMP_INCDIR" | grep '^/' >/dev/null ; then ai_p=$SNMP_INCDIR else ep_dir="`echo $SNMP_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SNMP_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then SNMP_SHARED_LIBADD="-lsnmp $SNMP_SHARED_LIBADD" if test -n "$SNMP_LIBDIR"; then if test "$SNMP_LIBDIR" != "/usr/lib"; then if test -z "$SNMP_LIBDIR" || echo "$SNMP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$SNMP_LIBDIR else ep_dir="`echo $SNMP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SNMP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "SNMP_SHARED_LIBADD"; then SNMP_SHARED_LIBADD="-R$SNMP_LIBDIR -L$SNMP_LIBDIR $SNMP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$SNMP_LIBDIR"; then if test "$SNMP_LIBDIR" != "/usr/lib"; then if test -z "$SNMP_LIBDIR" || echo "$SNMP_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$SNMP_LIBDIR else ep_dir="`echo $SNMP_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SNMP_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$SNMP_LIBDIR -L$SNMP_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case snmp in c|c_r|pthread*) ;; *) LIBS="-lsnmp $LIBS" ;; esac fi EXT_SUBDIRS="$EXT_SUBDIRS snmp" if test -d "$abs_srcdir/ext/snmp"; then ext_builddir=ext/snmp ext_srcdir=$abs_srcdir/ext/snmp else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:58084: checking whether to enable UCD SNMP hack" >&5 # Check whether --enable-ucd-snmp-hack or --disable-ucd-snmp-hack was given. if test "${enable_ucd_snmp_hack+set}" = set; then enableval="$enable_ucd_snmp_hack" if test "$enableval" = "yes" ; then cat >> confdefs.h <<\EOF #define UCD_SNMP_HACK 1 EOF echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi if test -n "whether to enable sockets support"; then echo $ac_n "checking whether to enable sockets support""... $ac_c" 1>&6 echo "configure:58111: checking whether to enable sockets support" >&5 fi # Check whether --enable-sockets or --disable-sockets was given. if test "${enable_sockets+set}" = set; then enableval="$enable_sockets" PHP_SOCKETS=$enableval else PHP_SOCKETS=no fi case $PHP_SOCKETS in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SOCKETS=`echo "$PHP_SOCKETS"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SOCKETS=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SOCKETS" = "no" && PHP_SOCKETS=yes fi if test -n "whether to enable sockets support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SOCKETS" != "no"; then for ac_func in hstrerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:58161: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:58189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done for ac_hdr in netdb.h netinet/tcp.h sys/un.h errno.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:58217: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:58227: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done cat >> confdefs.h <<\EOF #define HAVE_SOCKETS 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS sockets" if test -d "$abs_srcdir/ext/sockets"; then ext_builddir=ext/sockets ext_srcdir=$abs_srcdir/ext/sockets else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:58472: checking for dlopen" >&5 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else dlopen(); #endif ; return 0; } EOF if { (eval echo configure:58500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dlopen=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_dlopen=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_LIBDL 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for pam_start in -lpam""... $ac_c" 1>&6 echo "configure:58524: checking for pam_start in -lpam" >&5 ac_lib_var=`echo pam'_'pam_start | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 EXTRA_LIBS="$EXTRA_LIBS -lpam" cat >> confdefs.h <<\EOF #define HAVE_LIBPAM 1 EOF else echo "$ac_t""no" 1>&6 fi for ac_func in getcwd getwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:58572: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:58600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done echo $ac_n "checking for standard DES crypt""... $ac_c" 1>&6 echo "configure:58628: checking for standard DES crypt" >&5 if eval "test \"`echo '$''{'ac_cv_crypt_des'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_crypt_des=yes else cat > conftest.$ac_ext < #endif main() { #if HAVE_CRYPT exit (strcmp((char *)crypt("rasmuslerdorf","rl"),"rl.3StKT.4T8M")); #else exit(0); #endif } EOF if { (eval echo configure:58654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_crypt_des=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_crypt_des=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_crypt_des" 1>&6 if test "$ac_cv_crypt_des" = "yes"; then ac_result=1 else ac_result=0 fi cat >> confdefs.h <&6 echo "configure:58685: checking for extended DES crypt" >&5 if eval "test \"`echo '$''{'ac_cv_crypt_ext_des'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_crypt_ext_des=no else cat > conftest.$ac_ext < #endif main() { #if HAVE_CRYPT exit (strcmp((char *)crypt("rasmuslerdorf","_J9..rasm"),"_J9..rasmBYk8r9AiWNc")); #else exit(0); #endif } EOF if { (eval echo configure:58711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_crypt_ext_des=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_crypt_ext_des=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_crypt_ext_des" 1>&6 if test "$ac_cv_crypt_ext_des" = "yes"; then ac_result=1 else ac_result=0 fi cat >> confdefs.h <&6 echo "configure:58742: checking for MD5 crypt" >&5 if eval "test \"`echo '$''{'ac_cv_crypt_md5'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_crypt_md5=no else cat > conftest.$ac_ext < #endif main() { #if HAVE_CRYPT char salt[15], answer[40]; salt[0]='$'; salt[1]='1'; salt[2]='$'; salt[3]='r'; salt[4]='a'; salt[5]='s'; salt[6]='m'; salt[7]='u'; salt[8]='s'; salt[9]='l'; salt[10]='e'; salt[11]='$'; salt[12]='\0'; strcpy(answer,salt); strcat(answer,"rISCgZzpwk3UhDidwXvin0"); exit (strcmp((char *)crypt("rasmuslerdorf",salt),answer)); #else exit(0); #endif } EOF if { (eval echo configure:58777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_crypt_md5=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_crypt_md5=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_crypt_md5" 1>&6 if test "$ac_cv_crypt_md5" = "yes"; then ac_result=1 else if test "$ac_cv_crypt_des" != "yes"; then DEBUG_LOG=debug.log cat >debug.log <conftest.$ac_ext <>debug.log 2>&1 rm -fr conftest* fi ac_result=0 fi cat >> confdefs.h <&6 echo "configure:58837: checking for Blowfish crypt" >&5 if eval "test \"`echo '$''{'ac_cv_crypt_blowfish'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_crypt_blowfish=no else cat > conftest.$ac_ext < #endif main() { #if HAVE_CRYPT char salt[30], answer[70]; salt[0]='$'; salt[1]='2'; salt[2]='a'; salt[3]='$'; salt[4]='0'; salt[5]='7'; salt[6]='$'; salt[7]='\0'; strcat(salt,"rasmuslerd............"); strcpy(answer,salt); strcpy(&answer[29],"nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra"); exit (strcmp((char *)crypt("rasmuslerdorf",salt),answer)); #else exit(0); #endif } EOF if { (eval echo configure:58869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_crypt_blowfish=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_crypt_blowfish=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_crypt_blowfish" 1>&6 if test "$ac_cv_crypt_blowfish" = "yes"; then ac_result=1 else ac_result=0 fi cat >> confdefs.h <&6 echo "configure:58901: checking whether flush should be called explicitly after a bufferered io" >&5 if eval "test \"`echo '$''{'ac_cv_flush_io'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_flush_io=no else cat > conftest.$ac_ext < #include int main(int argc, char **argv) { char *filename = tmpnam(NULL); char buffer[64]; int result = 0; FILE *fp = fopen(filename, "wb"); if (NULL == fp) return 0; fputs("line 1\n", fp); fputs("line 2\n", fp); fclose(fp); fp = fopen(filename, "rb+"); if (NULL == fp) return 0; fgets(buffer, sizeof(buffer), fp); fputs("line 3\n", fp); rewind(fp); fgets(buffer, sizeof(buffer), fp); if (0 != strcmp(buffer, "line 1\n")) result = 1; fgets(buffer, sizeof(buffer), fp); if (0 != strcmp(buffer, "line 3\n")) result = 1; fclose(fp); unlink(filename); exit(result); } EOF if { (eval echo configure:58950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_flush_io=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_flush_io=yes fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_flush_io" 1>&6 if test "$ac_cv_flush_io" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_FLUSHIO 1 EOF fi # Check whether --with-regex or --without-regex was given. if test "${with_regex+set}" = set; then withval="$with_regex" case $withval in system) if test "$PHP_SAPI" = "apache" || test "$PHP_SAPI" = "apache2filter"; then REGEX_TYPE=php else REGEX_TYPE=system fi ;; apache) REGEX_TYPE=apache ;; php) REGEX_TYPE=php ;; *) REGEX_TYPE=php echo "configure: warning: Invalid regex library type. Using default value: php" 1>&2 ;; esac else REGEX_TYPE=php fi # Check whether --with-system-regex or --without-system-regex was given. if test "${with_system_regex+set}" = set; then withval="$with_system_regex" if test "$withval" = "yes"; then REGEX_TYPE=system else REGEX_TYPE=php fi fi if test -n "whether to enable aggregation support"; then echo $ac_n "checking whether to enable aggregation support""... $ac_c" 1>&6 echo "configure:59027: checking whether to enable aggregation support" >&5 fi # Check whether --enable-aggregate or --disable-aggregate was given. if test "${enable_aggregate+set}" = set; then enableval="$enable_aggregate" PHP_AGGREGATE=$enableval else PHP_AGGREGATE=no fi case $PHP_AGGREGATE in shared,*) ext_output="yes, shared" ext_shared=yes PHP_AGGREGATE=`echo "$PHP_AGGREGATE"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_AGGREGATE=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_AGGREGATE" = "no" && PHP_AGGREGATE=yes fi if test -n "whether to enable aggregation support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_AGGREGATE" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_AGGREGATE 1 EOF fi if test "$PHP_SAPI" = "cgi"; then cat >> confdefs.h <<\EOF #define ENABLE_CHROOT_FUNC 1 EOF fi EXT_SUBDIRS="$EXT_SUBDIRS standard" if test -d "$abs_srcdir/ext/standard"; then ext_builddir=ext/standard ext_srcdir=$abs_srcdir/ext/standard else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "" != "shared" && test "" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:59297: checking for libswf support" >&5 fi # Check whether --with-swf or --without-swf was given. if test "${with_swf+set}" = set; then withval="$with_swf" PHP_SWF=$withval else PHP_SWF=no fi case $PHP_SWF in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SWF=`echo "$PHP_SWF"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SWF=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SWF" = "no" && PHP_SWF=yes fi if test -n "for libswf support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SWF" != "no"; then if test -r $PHP_SWF/lib/libswf.a; then SWF_DIR=$PHP_SWF else echo $ac_n "checking for libswf in default path""... $ac_c" 1>&6 echo "configure:59347: checking for libswf in default path" >&5 for i in /usr/local /usr; do if test -r $i/lib/libswf.a; then SWF_DIR=$i echo "$ac_t""found in $i" 1>&6 fi done fi if test -z "$SWF_DIR"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please reinstall the libswf distribution - swf.h should be /include and libswf.a should be in /lib" 1>&2; exit 1; } fi if test "$SWF_DIR/include" != "/usr/include"; then if test -z "$SWF_DIR/include" || echo "$SWF_DIR/include" | grep '^/' >/dev/null ; then ai_p=$SWF_DIR/include else ep_dir="`echo $SWF_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SWF_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST SWF_SHARED_LIBADD" if test "$ext_shared" = "yes"; then SWF_SHARED_LIBADD="-lswf $SWF_SHARED_LIBADD" if test -n "$SWF_DIR/lib"; then if test "$SWF_DIR/lib" != "/usr/lib"; then if test -z "$SWF_DIR/lib" || echo "$SWF_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$SWF_DIR/lib else ep_dir="`echo $SWF_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SWF_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "SWF_SHARED_LIBADD"; then SWF_SHARED_LIBADD="-R$SWF_DIR/lib -L$SWF_DIR/lib $SWF_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$SWF_DIR/lib"; then if test "$SWF_DIR/lib" != "/usr/lib"; then if test -z "$SWF_DIR/lib" || echo "$SWF_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$SWF_DIR/lib else ep_dir="`echo $SWF_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SWF_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$SWF_DIR/lib -L$SWF_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case swf in c|c_r|pthread*) ;; *) LIBS="-lswf $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_SWF 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS swf" if test -d "$abs_srcdir/ext/swf"; then ext_builddir=ext/swf ext_srcdir=$abs_srcdir/ext/swf else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:59709: checking for Sybase support" >&5 fi # Check whether --with-sybase or --without-sybase was given. if test "${with_sybase+set}" = set; then withval="$with_sybase" PHP_SYBASE=$withval else PHP_SYBASE=no fi case $PHP_SYBASE in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SYBASE=`echo "$PHP_SYBASE"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SYBASE=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SYBASE" = "no" && PHP_SYBASE=yes fi if test -n "for Sybase support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SYBASE" != "no"; then if test "$PHP_SYBASE" = "yes"; then SYBASE_INCDIR=/home/sybase/include SYBASE_LIBDIR=/home/sybase/lib else SYBASE_INCDIR=$PHP_SYBASE/include SYBASE_LIBDIR=$PHP_SYBASE/lib fi if test "$SYBASE_INCDIR" != "/usr/include"; then if test -z "$SYBASE_INCDIR" || echo "$SYBASE_INCDIR" | grep '^/' >/dev/null ; then ai_p=$SYBASE_INCDIR else ep_dir="`echo $SYBASE_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SYBASE_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then SYBASE_SHARED_LIBADD="-lsybdb $SYBASE_SHARED_LIBADD" if test -n "$SYBASE_LIBDIR"; then if test "$SYBASE_LIBDIR" != "/usr/lib"; then if test -z "$SYBASE_LIBDIR" || echo "$SYBASE_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$SYBASE_LIBDIR else ep_dir="`echo $SYBASE_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SYBASE_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "SYBASE_SHARED_LIBADD"; then SYBASE_SHARED_LIBADD="-R$SYBASE_LIBDIR -L$SYBASE_LIBDIR $SYBASE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$SYBASE_LIBDIR"; then if test "$SYBASE_LIBDIR" != "/usr/lib"; then if test -z "$SYBASE_LIBDIR" || echo "$SYBASE_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$SYBASE_LIBDIR else ep_dir="`echo $SYBASE_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SYBASE_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$SYBASE_LIBDIR -L$SYBASE_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case sybdb in c|c_r|pthread*) ;; *) LIBS="-lsybdb $LIBS" ;; esac fi EXT_SUBDIRS="$EXT_SUBDIRS sybase" if test -d "$abs_srcdir/ext/sybase"; then ext_builddir=ext/sybase ext_srcdir=$abs_srcdir/ext/sybase else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:60094: checking for dnet_addr in -ldnet_stub" >&5 ac_lib_var=`echo dnet_stub'_'dnet_addr | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldnet_stub $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 if test "$ext_shared" = "yes"; then SYBASE_SHARED_LIBADD="-ldnet_stub $SYBASE_SHARED_LIBADD" if test -n ""; then if test "" != "/usr/lib"; then if test -z "" || echo "" | grep '^/' >/dev/null ; then ai_p= else ep_dir="`echo |sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"\"`" fi if test "$ext_shared" = "yes" && test -n "SYBASE_SHARED_LIBADD"; then SYBASE_SHARED_LIBADD="-R -L $SYBASE_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n ""; then if test "" != "/usr/lib"; then if test -z "" || echo "" | grep '^/' >/dev/null ; then ai_p= else ep_dir="`echo |sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R -L $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case dnet_stub in c|c_r|pthread*) ;; *) LIBS="-ldnet_stub $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_LIBDNET_STUB 1 EOF else echo "$ac_t""no" 1>&6 fi cat >> confdefs.h <<\EOF #define HAVE_SYBASE 1 EOF echo $ac_n "checking for tdsdbopen in -lsybdb""... $ac_c" 1>&6 echo "configure:60236: checking for tdsdbopen in -lsybdb" >&5 ac_lib_var=`echo sybdb'_'tdsdbopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsybdb $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define PHP_SYBASE_DBOPEN tdsdbopen EOF cat >> confdefs.h <<\EOF #define DBMFIX 1 EOF else echo "$ac_t""no" 1>&6 cat >> confdefs.h <<\EOF #define PHP_SYBASE_DBOPEN dbopen EOF fi fi if test -n "for Sybase-CT support"; then echo $ac_n "checking for Sybase-CT support""... $ac_c" 1>&6 echo "configure:60293: checking for Sybase-CT support" >&5 fi # Check whether --with-sybase-ct or --without-sybase-ct was given. if test "${with_sybase_ct+set}" = set; then withval="$with_sybase_ct" PHP_SYBASE_CT=$withval else PHP_SYBASE_CT=no fi case $PHP_SYBASE_CT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SYBASE_CT=`echo "$PHP_SYBASE_CT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SYBASE_CT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SYBASE_CT" = "no" && PHP_SYBASE_CT=yes fi if test -n "for Sybase-CT support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SYBASE_CT" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_SYBASE_CT 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS sybase_ct" if test -d "$abs_srcdir/ext/sybase_ct"; then ext_builddir=ext/sybase_ct ext_srcdir=$abs_srcdir/ext/sybase_ct else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile</dev/null ; then ai_p=$SYBASE_CT_INCDIR else ep_dir="`echo $SYBASE_CT_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SYBASE_CT_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi else { echo "configure: error: ctpublic.h missing!" 1>&2; exit 1; } fi if test "$SYBASE_CT_LIBDIR" != "/usr/lib"; then if test -z "$SYBASE_CT_LIBDIR" || echo "$SYBASE_CT_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$SYBASE_CT_LIBDIR else ep_dir="`echo $SYBASE_CT_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$SYBASE_CT_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "SYBASE_CT_SHARED_LIBADD"; then SYBASE_CT_SHARED_LIBADD="-R$SYBASE_CT_LIBDIR -L$SYBASE_CT_LIBDIR $SYBASE_CT_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi if test -f $SYBASE_CT_INCDIR/tds.h; then case ct in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SYBASE_CT_SHARED_LIBADD="-lct $SYBASE_CT_SHARED_LIBADD" else case ct in c|c_r|pthread*) ;; *) LIBS="-lct $LIBS" ;; esac fi ;; esac SYBASE_CT_LIBS="-L$SYBASE_CT_LIBDIR -lct" else case cs in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SYBASE_CT_SHARED_LIBADD="-lcs $SYBASE_CT_SHARED_LIBADD" else case cs in c|c_r|pthread*) ;; *) LIBS="-lcs $LIBS" ;; esac fi ;; esac case ct in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SYBASE_CT_SHARED_LIBADD="-lct $SYBASE_CT_SHARED_LIBADD" else case ct in c|c_r|pthread*) ;; *) LIBS="-lct $LIBS" ;; esac fi ;; esac case comn in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SYBASE_CT_SHARED_LIBADD="-lcomn $SYBASE_CT_SHARED_LIBADD" else case comn in c|c_r|pthread*) ;; *) LIBS="-lcomn $LIBS" ;; esac fi ;; esac case intl in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SYBASE_CT_SHARED_LIBADD="-lintl $SYBASE_CT_SHARED_LIBADD" else case intl in c|c_r|pthread*) ;; *) LIBS="-lintl $LIBS" ;; esac fi ;; esac SYBASE_CT_LIBS="-L$SYBASE_CT_LIBDIR -lcs -lct -lcomn -lintl" save_old_LDFLAGS=$LDFLAGS LDFLAGS=" $SYBASE_CT_LIBS $LDFLAGS" echo $ac_n "checking for netg_errstr in -ltcl""... $ac_c" 1>&6 echo "configure:60776: checking for netg_errstr in -ltcl" >&5 ac_lib_var=`echo tcl'_'netg_errstr | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ltcl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS case tcl in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SYBASE_CT_SHARED_LIBADD="-ltcl $SYBASE_CT_SHARED_LIBADD" else case tcl in c|c_r|pthread*) ;; *) LIBS="-ltcl $LIBS" ;; esac fi ;; esac else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS case sybtcl in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SYBASE_CT_SHARED_LIBADD="-lsybtcl $SYBASE_CT_SHARED_LIBADD" else case sybtcl in c|c_r|pthread*) ;; *) LIBS="-lsybtcl $LIBS" ;; esac fi ;; esac fi save_old_LDFLAGS=$LDFLAGS LDFLAGS="-L$SYBASE_CT_LIBDIR $LDFLAGS" echo $ac_n "checking for insck__getVdate in -linsck""... $ac_c" 1>&6 echo "configure:60883: checking for insck__getVdate in -linsck" >&5 ac_lib_var=`echo insck'_'insck__getVdate | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-linsck $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS case insck in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SYBASE_CT_SHARED_LIBADD="-linsck $SYBASE_CT_SHARED_LIBADD" else case insck in c|c_r|pthread*) ;; *) LIBS="-linsck $LIBS" ;; esac fi ;; esac else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi save_old_LDFLAGS=$LDFLAGS LDFLAGS="-L$SYBASE_CT_LIBDIR $LDFLAGS" echo $ac_n "checking for bsd_tcp in -linsck""... $ac_c" 1>&6 echo "configure:60959: checking for bsd_tcp in -linsck" >&5 ac_lib_var=`echo insck'_'bsd_tcp | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-linsck $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS case insck in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then SYBASE_CT_SHARED_LIBADD="-linsck $SYBASE_CT_SHARED_LIBADD" else case insck in c|c_r|pthread*) ;; *) LIBS="-linsck $LIBS" ;; esac fi ;; esac else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi fi fi if test -n "whether to enable System V semaphore support"; then echo $ac_n "checking whether to enable System V semaphore support""... $ac_c" 1>&6 echo "configure:61039: checking whether to enable System V semaphore support" >&5 fi # Check whether --enable-sysvsem or --disable-sysvsem was given. if test "${enable_sysvsem+set}" = set; then enableval="$enable_sysvsem" PHP_SYSVSEM=$enableval else PHP_SYSVSEM=no fi case $PHP_SYSVSEM in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SYSVSEM=`echo "$PHP_SYSVSEM"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SYSVSEM=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SYSVSEM" = "no" && PHP_SYSVSEM=yes fi if test -n "whether to enable System V semaphore support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SYSVSEM" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS sysvsem" if test -d "$abs_srcdir/ext/sysvsem"; then ext_builddir=ext/sysvsem ext_srcdir=$abs_srcdir/ext/sysvsem else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_SYSVSEM 1 EOF echo $ac_n "checking for union semun""... $ac_c" 1>&6 echo "configure:61295: checking for union semun" >&5 if eval "test \"`echo '$''{'php_cv_semun'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include int main() { union semun x; ; return 0; } EOF if { (eval echo configure:61311: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* php_cv_semun=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* php_cv_semun=no fi rm -f conftest* fi echo "$ac_t""$php_cv_semun" 1>&6 if test "$php_cv_semun" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_SEMUN 1 EOF else cat >> confdefs.h <<\EOF #define HAVE_SEMUN 0 EOF fi fi if test -n "whether to enable System V shared memory support"; then echo $ac_n "checking whether to enable System V shared memory support""... $ac_c" 1>&6 echo "configure:61347: checking whether to enable System V shared memory support" >&5 fi # Check whether --enable-sysvshm or --disable-sysvshm was given. if test "${enable_sysvshm+set}" = set; then enableval="$enable_sysvshm" PHP_SYSVSHM=$enableval else PHP_SYSVSHM=no fi case $PHP_SYSVSHM in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SYSVSHM=`echo "$PHP_SYSVSHM"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SYSVSHM=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SYSVSHM" = "no" && PHP_SYSVSHM=yes fi if test -n "whether to enable System V shared memory support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_SYSVSHM" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_SYSVSHM 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS sysvshm" if test -d "$abs_srcdir/ext/sysvshm"; then ext_builddir=ext/sysvshm ext_srcdir=$abs_srcdir/ext/sysvshm else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:61610: checking whether to enable tokenizer support" >&5 fi # Check whether --enable-tokenizer or --disable-tokenizer was given. if test "${enable_tokenizer+set}" = set; then enableval="$enable_tokenizer" PHP_TOKENIZER=$enableval else PHP_TOKENIZER=no fi case $PHP_TOKENIZER in shared,*) ext_output="yes, shared" ext_shared=yes PHP_TOKENIZER=`echo "$PHP_TOKENIZER"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_TOKENIZER=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_TOKENIZER" = "no" && PHP_TOKENIZER=yes fi if test -n "whether to enable tokenizer support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_TOKENIZER" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS tokenizer" if test -d "$abs_srcdir/ext/tokenizer"; then ext_builddir=ext/tokenizer ext_srcdir=$abs_srcdir/ext/tokenizer else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:61872: checking for vpopmail support" >&5 fi # Check whether --with-vpopmail or --without-vpopmail was given. if test "${with_vpopmail+set}" = set; then withval="$with_vpopmail" PHP_VPOPMAIL=$withval else PHP_VPOPMAIL=no fi case $PHP_VPOPMAIL in shared,*) ext_output="yes, shared" ext_shared=yes PHP_VPOPMAIL=`echo "$PHP_VPOPMAIL"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_VPOPMAIL=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_VPOPMAIL" = "no" && PHP_VPOPMAIL=yes fi if test -n "for vpopmail support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_VPOPMAIL" != "no"; then echo $ac_n "checking for vpopmail install directory""... $ac_c" 1>&6 echo "configure:61919: checking for vpopmail install directory" >&5 for i in /usr/include/vpopmail /usr/include /usr ~vpopmail /home/vpopmail /home/popmail /var/qmail/vpopmail /var/qmail/popmail $PHP_VPOPMAIL; do if test -r $i/vpopmail.h; then VPOPMAIL_INC_DIR=$i VPOPMAIL_DIR=$i elif test -r $i/include/vpopmail.h; then VPOPMAIL_INC_DIR=$i/include VPOPMAIL_DIR=$i fi if test -r $i/libvpopmail.a; then VPOPMAIL_LIB_DIR=$i elif test -r $i/lib/libvpopmail.a; then VPOPMAIL_LIB_DIR=$i/lib fi if test -x $i/vadddomain; then VPOPMAIL_BIN_DIR=$i elif test -x $i/bin/vadddomain; then VPOPMAIL_BIN_DIR=$i/bin fi done for i in "$VPOPMAIL_INC_DIR/vpopmail.h" "$VPOPMAIL_INC_DIR/vpopmail_config.h" "$VPOPMAIL_LIB_DIR/libvpopmail.a"; do if test ! -r "$i"; then { echo "configure: error: Could not find '$i'. Please make sure you have vpopmail installed. Use ./configure --with-vpopmail= if necessary" 1>&2; exit 1; } fi done for i in "$VPOPMAIL_BIN_DIR/vadddomain" "$VPOPMAIL_BIN_DIR/vaddaliasdomain" "$VPOPMAIL_BIN_DIR/vdeldomain" ; do if test ! -x "$i"; then { echo "configure: error: Could not find '$i' or binary not executeable under current user. Please make sure you have vpopmail properly installed. Use ./configure --with-vpopmail= if necessary" 1>&2; exit 1; } fi done echo "$ac_t""$VPOPMAIL_DIR" 1>&6 if test -r $VPOPMAIL_INC_DIR/vauth.h; then cat >> confdefs.h <<\EOF #define HAVE_VPOPMAIL_VAUTH 1 EOF fi save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$VPOPMAIL_LIB_DIR $LDFLAGS" echo $ac_n "checking for valias_select in -lvpopmail""... $ac_c" 1>&6 echo "configure:61971: checking for valias_select in -lvpopmail" >&5 ac_lib_var=`echo vpopmail'_'valias_select | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lvpopmail $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS cat >> confdefs.h <<\EOF #define HAVE_VPOPMAIL_VALIAS 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi if test "$VPOPMAIL_INC_DIR" != "/usr/include"; then if test -z "$VPOPMAIL_INC_DIR" || echo "$VPOPMAIL_INC_DIR" | grep '^/' >/dev/null ; then ai_p=$VPOPMAIL_INC_DIR else ep_dir="`echo $VPOPMAIL_INC_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$VPOPMAIL_INC_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_VAR_SUBST="$PHP_VAR_SUBST VPOPMAIL_SHARED_LIBADD" if test "$ext_shared" = "yes"; then VPOPMAIL_SHARED_LIBADD="-lvpopmail $VPOPMAIL_SHARED_LIBADD" if test -n "$VPOPMAIL_LIB_DIR"; then if test "$VPOPMAIL_LIB_DIR" != "/usr/lib"; then if test -z "$VPOPMAIL_LIB_DIR" || echo "$VPOPMAIL_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$VPOPMAIL_LIB_DIR else ep_dir="`echo $VPOPMAIL_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$VPOPMAIL_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n "VPOPMAIL_SHARED_LIBADD"; then VPOPMAIL_SHARED_LIBADD="-R$VPOPMAIL_LIB_DIR -L$VPOPMAIL_LIB_DIR $VPOPMAIL_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$VPOPMAIL_LIB_DIR"; then if test "$VPOPMAIL_LIB_DIR" != "/usr/lib"; then if test -z "$VPOPMAIL_LIB_DIR" || echo "$VPOPMAIL_LIB_DIR" | grep '^/' >/dev/null ; then ai_p=$VPOPMAIL_LIB_DIR else ep_dir="`echo $VPOPMAIL_LIB_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$VPOPMAIL_LIB_DIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$VPOPMAIL_LIB_DIR -L$VPOPMAIL_LIB_DIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case vpopmail in c|c_r|pthread*) ;; *) LIBS="-lvpopmail $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_VPOPMAIL 1 EOF cat >> confdefs.h <> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:62395: checking whether to enable WDDX support" >&5 fi # Check whether --enable-wddx or --disable-wddx was given. if test "${enable_wddx+set}" = set; then enableval="$enable_wddx" PHP_WDDX=$enableval else PHP_WDDX=no fi case $PHP_WDDX in shared,*) ext_output="yes, shared" ext_shared=yes PHP_WDDX=`echo "$PHP_WDDX"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_WDDX=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_WDDX" = "no" && PHP_WDDX=yes fi if test -n "whether to enable WDDX support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_WDDX" != "no"; then if test "$ext_shared" != "yes" && test "$enable_xml" = "no"; then echo "configure: warning: Activating XML" 1>&2 enable_xml=yes fi cat >> confdefs.h <<\EOF #define HAVE_WDDX 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS wddx" if test -d "$abs_srcdir/ext/wddx"; then ext_builddir=ext/wddx ext_srcdir=$abs_srcdir/ext/wddx else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:62665: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include int main() { #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif ; return 0; } EOF if { (eval echo configure:62683: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include int main() { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } EOF if { (eval echo configure:62698: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_bigendian=no fi rm -f conftest* else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* if test $ac_cv_c_bigendian = unknown; then if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_bigendian=yes fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_c_bigendian" 1>&6 if test $ac_cv_c_bigendian = yes; then cat >> confdefs.h <<\EOF #define WORDS_BIGENDIAN 1 EOF fi if test "$ac_cv_c_bigendian" = "yes"; then order=21 else order=12 fi if test -n "whether to enable XML support"; then echo $ac_n "checking whether to enable XML support""... $ac_c" 1>&6 echo "configure:62765: checking whether to enable XML support" >&5 fi # Check whether --enable-xml or --disable-xml was given. if test "${enable_xml+set}" = set; then enableval="$enable_xml" PHP_XML=$enableval else PHP_XML=yes fi case $PHP_XML in shared,*) ext_output="yes, shared" ext_shared=yes PHP_XML=`echo "$PHP_XML"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_XML=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_XML" = "no" && PHP_XML=yes fi if test -n "whether to enable XML support"; then echo "$ac_t""$ext_output" 1>&6 fi if test -n "external libexpat install dir"; then echo $ac_n "checking external libexpat install dir""... $ac_c" 1>&6 echo "configure:62814: checking external libexpat install dir" >&5 fi # Check whether --with-expat-dir or --without-expat-dir was given. if test "${with_expat_dir+set}" = set; then withval="$with_expat_dir" PHP_EXPAT_DIR=$withval else PHP_EXPAT_DIR=no fi case $PHP_EXPAT_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_EXPAT_DIR=`echo "$PHP_EXPAT_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_EXPAT_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_EXPAT_DIR" = "no" && PHP_EXPAT_DIR=yes fi if test -n "external libexpat install dir"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_XML" = "yes"; then if test "$PHP_EXPAT_DIR" = "no"; then cat >> confdefs.h <<\EOF #define HAVE_LIBEXPAT 1 EOF cat >> confdefs.h <<\EOF #define HAVE_LIBEXPAT_BUNDLED 1 EOF XML_CPPFLAGS=-DXML_BYTE_ORDER=$order EXPAT_INTERNAL_LIBADD=expat/libexpat.la PHP_VAR_SUBST="$PHP_VAR_SUBST EXPAT_INTERNAL_LIBADD" PHP_VAR_SUBST="$PHP_VAR_SUBST XML_CPPFLAGS" EXPAT_SUBDIRS=expat PHP_VAR_SUBST="$PHP_VAR_SUBST EXPAT_SUBDIRS" PHP_VAR_SUBST="$PHP_VAR_SUBST EXPAT_SHARED_LIBADD" EXT_SUBDIRS="$EXT_SUBDIRS xml" if test -d "$abs_srcdir/ext/xml"; then ext_builddir=ext/xml ext_srcdir=$abs_srcdir/ext/xml else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile</dev/null ; then ai_p=$ext_srcdir/expat else ep_dir="`echo $ext_srcdir/expat|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ext_srcdir/expat\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES $ext_builddir/expat/Makefile" else EXT_SUBDIRS="$EXT_SUBDIRS xml" if test -d "$abs_srcdir/ext/xml"; then ext_builddir=ext/xml ext_srcdir=$abs_srcdir/ext/xml else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_LIBEXPAT 1 EOF for i in $PHP_XML $PHP_EXPAT_DIR; do if test -f $i/lib/libexpat.a -o -f $i/lib/libexpat.$SHLIB_SUFFIX_NAME ; then EXPAT_DIR=$i fi done if test -z "$EXPAT_DIR"; then { echo "configure: error: not found. Please reinstall the expat distribution." 1>&2; exit 1; } fi if test "$EXPAT_DIR/include" != "/usr/include"; then if test -z "$EXPAT_DIR/include" || echo "$EXPAT_DIR/include" | grep '^/' >/dev/null ; then ai_p=$EXPAT_DIR/include else ep_dir="`echo $EXPAT_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$EXPAT_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then EXPAT_SHARED_LIBADD="-lexpat $EXPAT_SHARED_LIBADD" if test -n "$EXPAT_DIR/lib"; then if test "$EXPAT_DIR/lib" != "/usr/lib"; then if test -z "$EXPAT_DIR/lib" || echo "$EXPAT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$EXPAT_DIR/lib else ep_dir="`echo $EXPAT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$EXPAT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "EXPAT_SHARED_LIBADD"; then EXPAT_SHARED_LIBADD="-R$EXPAT_DIR/lib -L$EXPAT_DIR/lib $EXPAT_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$EXPAT_DIR/lib"; then if test "$EXPAT_DIR/lib" != "/usr/lib"; then if test -z "$EXPAT_DIR/lib" || echo "$EXPAT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$EXPAT_DIR/lib else ep_dir="`echo $EXPAT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$EXPAT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$EXPAT_DIR/lib -L$EXPAT_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case expat in c|c_r|pthread*) ;; *) LIBS="-lexpat $LIBS" ;; esac fi fi fi # Local macros for automake & autoconf if test -n "for XMLRPC-EPI support"; then echo $ac_n "checking for XMLRPC-EPI support""... $ac_c" 1>&6 echo "configure:63551: checking for XMLRPC-EPI support" >&5 fi # Check whether --with-xmlrpc or --without-xmlrpc was given. if test "${with_xmlrpc+set}" = set; then withval="$with_xmlrpc" PHP_XMLRPC=$withval else PHP_XMLRPC=no fi case $PHP_XMLRPC in shared,*) ext_output="yes, shared" ext_shared=yes PHP_XMLRPC=`echo "$PHP_XMLRPC"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_XMLRPC=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_XMLRPC" = "no" && PHP_XMLRPC=yes fi if test -n "for XMLRPC-EPI support"; then echo "$ac_t""$ext_output" 1>&6 fi xmlrpc_ext_shared=$ext_shared if test -n "libexpat dir for XMLRPC-EPI"; then echo $ac_n "checking libexpat dir for XMLRPC-EPI""... $ac_c" 1>&6 echo "configure:63602: checking libexpat dir for XMLRPC-EPI" >&5 fi # Check whether --with-expat-dir or --without-expat-dir was given. if test "${with_expat_dir+set}" = set; then withval="$with_expat_dir" PHP_EXPAT_DIR=$withval else PHP_EXPAT_DIR=no fi case $PHP_EXPAT_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_EXPAT_DIR=`echo "$PHP_EXPAT_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_EXPAT_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_EXPAT_DIR" = "no" && PHP_EXPAT_DIR=yes fi if test -n "libexpat dir for XMLRPC-EPI"; then echo "$ac_t""$ext_output" 1>&6 fi if test -n "iconv dir for XMLRPC-EPI"; then echo $ac_n "checking iconv dir for XMLRPC-EPI""... $ac_c" 1>&6 echo "configure:63651: checking iconv dir for XMLRPC-EPI" >&5 fi # Check whether --with-iconv-dir or --without-iconv-dir was given. if test "${with_iconv_dir+set}" = set; then withval="$with_iconv_dir" PHP_ICONV_DIR=$withval else PHP_ICONV_DIR=no fi case $PHP_ICONV_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_ICONV_DIR=`echo "$PHP_ICONV_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_ICONV_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_ICONV_DIR" = "no" && PHP_ICONV_DIR=yes fi if test -n "iconv dir for XMLRPC-EPI"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_XMLRPC" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS xmlrpc" if test -d "$abs_srcdir/ext/xmlrpc"; then ext_builddir=ext/xmlrpc ext_srcdir=$abs_srcdir/ext/xmlrpc else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$xmlrpc_ext_shared" != "shared" && test "$xmlrpc_ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define HAVE_XMLRPC 1 EOF testval=no for i in /usr /usr/local $PHP_EXPAT_DIR $XMLRPC_DIR; do if test -f $i/lib/libexpat.a -o -f $i/lib/libexpat.$SHLIB_SUFFIX_NAME; then cat >> confdefs.h <<\EOF #define HAVE_LIBEXPAT2 1 EOF if test "$ext_shared" = "yes"; then XMLRPC_SHARED_LIBADD="-lexpat $XMLRPC_SHARED_LIBADD" if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n "XMLRPC_SHARED_LIBADD"; then XMLRPC_SHARED_LIBADD="-R$i/lib -L$i/lib $XMLRPC_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$i/lib -L$i/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case expat in c|c_r|pthread*) ;; *) LIBS="-lexpat $LIBS" ;; esac fi if test "$i/include" != "/usr/include"; then if test -z "$i/include" || echo "$i/include" | grep '^/' >/dev/null ; then ai_p=$i/include else ep_dir="`echo $i/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi testval=yes fi done if test "$testval" = "no"; then { echo "configure: error: XML-RPC support requires libexpat. Use --with-expat-dir=" 1>&2; exit 1; } fi if test "$PHP_ICONV_DIR" != "no"; then PHP_ICONV=$PHP_ICONV_DIR fi if test "$PHP_ICONV" = "no"; then PHP_ICONV=yes fi found_iconv=no unset ICONV_DIR if test "$PHP_ICONV" = "yes"; then echo $ac_n "checking for iconv""... $ac_c" 1>&6 echo "configure:64065: checking for iconv" >&5 if eval "test \"`echo '$''{'ac_cv_func_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char iconv(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_iconv) || defined (__stub___iconv) choke me #else iconv(); #endif ; return 0; } EOF if { (eval echo configure:64093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_iconv=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_iconv=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'iconv`\" = yes"; then echo "$ac_t""yes" 1>&6 found_iconv=yes else echo "$ac_t""no" 1>&6 echo $ac_n "checking for libiconv""... $ac_c" 1>&6 echo "configure:64114: checking for libiconv" >&5 if eval "test \"`echo '$''{'ac_cv_func_libiconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char libiconv(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_libiconv) || defined (__stub___libiconv) choke me #else libiconv(); #endif ; return 0; } EOF if { (eval echo configure:64142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_libiconv=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_libiconv=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'libiconv`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_LIBICONV 1 EOF found_iconv=yes else echo "$ac_t""no" 1>&6 fi fi fi if test "$found_iconv" = "no"; then for i in $PHP_ICONV /usr/local /usr; do if test -r $i/include/giconv.h; then cat >> confdefs.h <<\EOF #define HAVE_GICONV_H 1 EOF ICONV_DIR=$i iconv_lib_name=giconv break elif test -r $i/include/iconv.h; then ICONV_DIR=$i iconv_lib_name=iconv break fi done if test -z "$ICONV_DIR"; then { echo "configure: error: Please specify the install prefix of iconv with --with-iconv=" 1>&2; exit 1; } fi if test -f $ICONV_DIR/lib/lib$iconv_lib_name.a || test -f $ICONV_DIR/lib/lib$iconv_lib_name.$SHLIB_SUFFIX_NAME then save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$ICONV_DIR/lib $LDFLAGS" echo $ac_n "checking for libiconv in -l$iconv_lib_name""... $ac_c" 1>&6 echo "configure:64203: checking for libiconv in -l$iconv_lib_name" >&5 ac_lib_var=`echo $iconv_lib_name'_'libiconv | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$iconv_lib_name $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS found_iconv=yes cat >> confdefs.h <<\EOF #define HAVE_LIBICONV 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$ICONV_DIR/lib $LDFLAGS" echo $ac_n "checking for iconv in -l$iconv_lib_name""... $ac_c" 1>&6 echo "configure:64258: checking for iconv in -l$iconv_lib_name" >&5 ac_lib_var=`echo $iconv_lib_name'_'iconv | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$iconv_lib_name $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS found_iconv=yes else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi fi fi fi if test "$found_iconv" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_ICONV 1 EOF if test -n "$ICONV_DIR"; then if test "$ext_shared" = "yes"; then XMLRPC_SHARED_LIBADD="-l$iconv_lib_name $XMLRPC_SHARED_LIBADD" if test -n "$ICONV_DIR/lib"; then if test "$ICONV_DIR/lib" != "/usr/lib"; then if test -z "$ICONV_DIR/lib" || echo "$ICONV_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ICONV_DIR/lib else ep_dir="`echo $ICONV_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICONV_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "XMLRPC_SHARED_LIBADD"; then XMLRPC_SHARED_LIBADD="-R$ICONV_DIR/lib -L$ICONV_DIR/lib $XMLRPC_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ICONV_DIR/lib"; then if test "$ICONV_DIR/lib" != "/usr/lib"; then if test -z "$ICONV_DIR/lib" || echo "$ICONV_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ICONV_DIR/lib else ep_dir="`echo $ICONV_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICONV_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ICONV_DIR/lib -L$ICONV_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $iconv_lib_name in c|c_r|pthread*) ;; *) LIBS="-l$iconv_lib_name $LIBS" ;; esac fi if test "$ICONV_DIR/include" != "/usr/include"; then if test -z "$ICONV_DIR/include" || echo "$ICONV_DIR/include" | grep '^/' >/dev/null ; then ai_p=$ICONV_DIR/include else ep_dir="`echo $ICONV_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICONV_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi else { echo "configure: error: iconv not found, in order to build xmlrpc you need the iconv library" 1>&2; exit 1; } fi fi if test "$PHP_XMLRPC" = "yes"; then cat >> confdefs.h <<\EOF #define UNDEF_THREADS_HACK EOF echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:64468: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:64481: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:64548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi for ac_hdr in xmlparse.h xmltok.h stdlib.h strings.h string.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:64575: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:64585: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done echo $ac_n "checking size of char""... $ac_c" 1>&6 echo "configure:64617: checking size of char" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_char=1 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(char)); exit(0); } EOF if { (eval echo configure:64636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_char=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_char=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_char" 1>&6 cat >> confdefs.h <&6 echo "configure:64657: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_int=4 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); exit(0); } EOF if { (eval echo configure:64676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_int=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_int" 1>&6 cat >> confdefs.h <&6 echo "configure:64696: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_long=4 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); exit(0); } EOF if { (eval echo configure:64715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long" 1>&6 cat >> confdefs.h <&6 echo "configure:64735: checking size of long long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_long_long=8 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long long)); exit(0); } EOF if { (eval echo configure:64754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long_long=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6 cat >> confdefs.h <&6 echo "configure:64774: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 echo "configure:64807: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include int main() { struct tm *tp; ; return 0; } EOF if { (eval echo configure:64821: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_time=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_time" 1>&6 if test $ac_cv_header_time = yes; then cat >> confdefs.h <<\EOF #define TIME_WITH_SYS_TIME 1 EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 echo "configure:64842: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "uid_t" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_uid_t=yes else rm -rf conftest* ac_cv_type_uid_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_uid_t" 1>&6 if test $ac_cv_type_uid_t = no; then cat >> confdefs.h <<\EOF #define uid_t int EOF cat >> confdefs.h <<\EOF #define gid_t int EOF fi # Standard XMLRPC list for ac_func in \ strtoul strtoull snprintf \ strstr strpbrk strerror\ memcpy memmove do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:64887: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:64915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES $ext_builddir/libxmlrpc/Makefile" XMLRPC_LIBADD=libxmlrpc/libxmlrpc.la XMLRPC_SHARED_LIBADD="$XMLRPC_SHARED_LIBADD libxmlrpc/libxmlrpc.la" XMLRPC_SUBDIRS=libxmlrpc PHP_VAR_SUBST="$PHP_VAR_SUBST XMLRPC_LIBADD" PHP_VAR_SUBST="$PHP_VAR_SUBST XMLRPC_SUBDIRS" lib_makefile="$ext_builddir/libxmlrpc/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir/libxmlrpc if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile</dev/null ; then ai_p=$ext_srcdir/libxmlrpc else ep_dir="`echo $ext_srcdir/libxmlrpc|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ext_srcdir/libxmlrpc\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi XMLRPC_MODULE_TYPE=builtin elif test "$PHP_XMLRPC" != "no"; then if test -r $PHP_XMLRPC/include/xmlrpc.h; then XMLRPC_DIR=$PHP_XMLRPC/include elif test -r $PHP_XMLRPC/include/xmlrpc-epi/xmlrpc.h; then XMLRPC_DIR=$PHP_XMLRPC/include/xmlrpc-epi else echo $ac_n "checking for XMLRPC-EPI in default path""... $ac_c" 1>&6 echo "configure:65051: checking for XMLRPC-EPI in default path" >&5 for i in /usr/local /usr; do if test -r $i/include/xmlrpc.h; then XMLRPC_DIR=$i/include echo "$ac_t""found in $i" 1>&6 fi done fi if test -z "$XMLRPC_DIR"; then echo "$ac_t""not found" 1>&6 { echo "configure: error: Please reinstall the XMLRPC-EPI distribution" 1>&2; exit 1; } fi if test "$XMLRPC_DIR" != "/usr/include"; then if test -z "$XMLRPC_DIR" || echo "$XMLRPC_DIR" | grep '^/' >/dev/null ; then ai_p=$XMLRPC_DIR else ep_dir="`echo $XMLRPC_DIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$XMLRPC_DIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then XMLRPC_SHARED_LIBADD="-lxmlrpc $XMLRPC_SHARED_LIBADD" if test -n "$XMLRPC_DIR/lib"; then if test "$XMLRPC_DIR/lib" != "/usr/lib"; then if test -z "$XMLRPC_DIR/lib" || echo "$XMLRPC_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$XMLRPC_DIR/lib else ep_dir="`echo $XMLRPC_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$XMLRPC_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "XMLRPC_SHARED_LIBADD"; then XMLRPC_SHARED_LIBADD="-R$XMLRPC_DIR/lib -L$XMLRPC_DIR/lib $XMLRPC_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$XMLRPC_DIR/lib"; then if test "$XMLRPC_DIR/lib" != "/usr/lib"; then if test -z "$XMLRPC_DIR/lib" || echo "$XMLRPC_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$XMLRPC_DIR/lib else ep_dir="`echo $XMLRPC_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$XMLRPC_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$XMLRPC_DIR/lib -L$XMLRPC_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case xmlrpc in c|c_r|pthread*) ;; *) LIBS="-lxmlrpc $LIBS" ;; esac fi fi if test -n "whether to enable xslt support"; then echo $ac_n "checking whether to enable xslt support""... $ac_c" 1>&6 echo "configure:65200: checking whether to enable xslt support" >&5 fi # Check whether --enable-xslt or --disable-xslt was given. if test "${enable_xslt+set}" = set; then enableval="$enable_xslt" PHP_XSLT=$enableval else PHP_XSLT=no fi case $PHP_XSLT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_XSLT=`echo "$PHP_XSLT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_XSLT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_XSLT" = "no" && PHP_XSLT=yes fi if test -n "whether to enable xslt support"; then echo "$ac_t""$ext_output" 1>&6 fi if test -n "for XSLT Sablotron backend"; then echo $ac_n "checking for XSLT Sablotron backend""... $ac_c" 1>&6 echo "configure:65249: checking for XSLT Sablotron backend" >&5 fi # Check whether --with-xslt-sablot or --without-xslt-sablot was given. if test "${with_xslt_sablot+set}" = set; then withval="$with_xslt_sablot" PHP_XSLT_SABLOT=$withval else PHP_XSLT_SABLOT=no fi case $PHP_XSLT_SABLOT in shared,*) ext_output="yes, shared" ext_shared=yes PHP_XSLT_SABLOT=`echo "$PHP_XSLT_SABLOT"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_XSLT_SABLOT=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_XSLT_SABLOT" = "no" && PHP_XSLT_SABLOT=yes fi if test -n "for XSLT Sablotron backend"; then echo "$ac_t""$ext_output" 1>&6 fi if test -n "libexpat dir for Sablotron XSL support"; then echo $ac_n "checking libexpat dir for Sablotron XSL support""... $ac_c" 1>&6 echo "configure:65298: checking libexpat dir for Sablotron XSL support" >&5 fi # Check whether --with-expat-dir or --without-expat-dir was given. if test "${with_expat_dir+set}" = set; then withval="$with_expat_dir" PHP_EXPAT_DIR=$withval else PHP_EXPAT_DIR=no fi case $PHP_EXPAT_DIR in shared,*) ext_output="yes, shared" ext_shared=yes PHP_EXPAT_DIR=`echo "$PHP_EXPAT_DIR"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_EXPAT_DIR=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_EXPAT_DIR" = "no" && PHP_EXPAT_DIR=yes fi if test -n "libexpat dir for Sablotron XSL support"; then echo "$ac_t""$ext_output" 1>&6 fi if test -n "enable JavaScript for Sablotron"; then echo $ac_n "checking enable JavaScript for Sablotron""... $ac_c" 1>&6 echo "configure:65347: checking enable JavaScript for Sablotron" >&5 fi # Check whether --with-sablot-js or --without-sablot-js was given. if test "${with_sablot_js+set}" = set; then withval="$with_sablot_js" PHP_SABLOT_JS=$withval else PHP_SABLOT_JS=no fi case $PHP_SABLOT_JS in shared,*) ext_output="yes, shared" ext_shared=yes PHP_SABLOT_JS=`echo "$PHP_SABLOT_JS"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_SABLOT_JS=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_SABLOT_JS" = "no" && PHP_SABLOT_JS=yes fi if test -n "enable JavaScript for Sablotron"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_XSLT" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS xslt" if test -d "$abs_srcdir/ext/xslt"; then ext_builddir=ext/xslt ext_srcdir=$abs_srcdir/ext/xslt else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi condition="$XSLT_CHECK_DIR$XSLT_TEST_FILE" if test -r $condition; then XSLT_DIR=$XSLT_CHECK_DIR else echo $ac_n "checking for $XSLT_BACKEND_NAME libraries in the default path""... $ac_c" 1>&6 echo "configure:65620: checking for $XSLT_BACKEND_NAME libraries in the default path" >&5 for i in /usr /usr/local; do condition="$i$XSLT_TEST_FILE" if test -r $condition; then XSLT_DIR=$i echo "$ac_t""found $XSLT_BACKEND_NAME in $i" 1>&6 fi done fi if test -z "$XSLT_DIR"; then { echo "configure: error: not found. Please re-install the $XSLT_BACKEND_NAME distribution" 1>&2; exit 1; } fi if test "$PHP_XSLT_SABLOT" != "no"; then found_expat=no for i in $PHP_EXPAT_DIR $XSLT_DIR /usr/local /usr; do if test -f $i/lib/libexpat.a -o -f $i/lib/libexpat.$SHLIB_SUFFIX_NAME; then cat >> confdefs.h <<\EOF #define HAVE_LIBEXPAT2 1 EOF if test "$i/include" != "/usr/include"; then if test -z "$i/include" || echo "$i/include" | grep '^/' >/dev/null ; then ai_p=$i/include else ep_dir="`echo $i/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then XSLT_SHARED_LIBADD="-lexpat $XSLT_SHARED_LIBADD" if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n "XSLT_SHARED_LIBADD"; then XSLT_SHARED_LIBADD="-R$i/lib -L$i/lib $XSLT_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$i/lib"; then if test "$i/lib" != "/usr/lib"; then if test -z "$i/lib" || echo "$i/lib" | grep '^/' >/dev/null ; then ai_p=$i/lib else ep_dir="`echo $i/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$i/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$i/lib -L$i/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case expat in c|c_r|pthread*) ;; *) LIBS="-lexpat $LIBS" ;; esac fi found_expat=yes break fi done if test "$found_expat" = "no"; then { echo "configure: error: expat not found. To build sablotron you need the expat library." 1>&2; exit 1; } fi if test "$PHP_ICONV" = "no"; then PHP_ICONV=yes fi found_iconv=no unset ICONV_DIR if test "$PHP_ICONV" = "yes"; then echo $ac_n "checking for iconv""... $ac_c" 1>&6 echo "configure:65786: checking for iconv" >&5 if eval "test \"`echo '$''{'ac_cv_func_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char iconv(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_iconv) || defined (__stub___iconv) choke me #else iconv(); #endif ; return 0; } EOF if { (eval echo configure:65814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_iconv=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_iconv=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'iconv`\" = yes"; then echo "$ac_t""yes" 1>&6 found_iconv=yes else echo "$ac_t""no" 1>&6 echo $ac_n "checking for libiconv""... $ac_c" 1>&6 echo "configure:65835: checking for libiconv" >&5 if eval "test \"`echo '$''{'ac_cv_func_libiconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char libiconv(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_libiconv) || defined (__stub___libiconv) choke me #else libiconv(); #endif ; return 0; } EOF if { (eval echo configure:65863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_libiconv=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_libiconv=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'libiconv`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_LIBICONV 1 EOF found_iconv=yes else echo "$ac_t""no" 1>&6 fi fi fi if test "$found_iconv" = "no"; then for i in $PHP_ICONV /usr/local /usr; do if test -r $i/include/giconv.h; then cat >> confdefs.h <<\EOF #define HAVE_GICONV_H 1 EOF ICONV_DIR=$i iconv_lib_name=giconv break elif test -r $i/include/iconv.h; then ICONV_DIR=$i iconv_lib_name=iconv break fi done if test -z "$ICONV_DIR"; then { echo "configure: error: Please specify the install prefix of iconv with --with-iconv=" 1>&2; exit 1; } fi if test -f $ICONV_DIR/lib/lib$iconv_lib_name.a || test -f $ICONV_DIR/lib/lib$iconv_lib_name.$SHLIB_SUFFIX_NAME then save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$ICONV_DIR/lib $LDFLAGS" echo $ac_n "checking for libiconv in -l$iconv_lib_name""... $ac_c" 1>&6 echo "configure:65924: checking for libiconv in -l$iconv_lib_name" >&5 ac_lib_var=`echo $iconv_lib_name'_'libiconv | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$iconv_lib_name $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS found_iconv=yes cat >> confdefs.h <<\EOF #define HAVE_LIBICONV 1 EOF else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS save_old_LDFLAGS=$LDFLAGS LDFLAGS=" -L$ICONV_DIR/lib $LDFLAGS" echo $ac_n "checking for iconv in -l$iconv_lib_name""... $ac_c" 1>&6 echo "configure:65979: checking for iconv in -l$iconv_lib_name" >&5 ac_lib_var=`echo $iconv_lib_name'_'iconv | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-l$iconv_lib_name $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LDFLAGS=$save_old_LDFLAGS found_iconv=yes else echo "$ac_t""no" 1>&6 LDFLAGS=$save_old_LDFLAGS fi fi fi fi if test "$found_iconv" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_ICONV 1 EOF if test -n "$ICONV_DIR"; then if test "$ext_shared" = "yes"; then XSLT_SHARED_LIBADD="-l$iconv_lib_name $XSLT_SHARED_LIBADD" if test -n "$ICONV_DIR/lib"; then if test "$ICONV_DIR/lib" != "/usr/lib"; then if test -z "$ICONV_DIR/lib" || echo "$ICONV_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ICONV_DIR/lib else ep_dir="`echo $ICONV_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICONV_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "XSLT_SHARED_LIBADD"; then XSLT_SHARED_LIBADD="-R$ICONV_DIR/lib -L$ICONV_DIR/lib $XSLT_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ICONV_DIR/lib"; then if test "$ICONV_DIR/lib" != "/usr/lib"; then if test -z "$ICONV_DIR/lib" || echo "$ICONV_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$ICONV_DIR/lib else ep_dir="`echo $ICONV_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICONV_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ICONV_DIR/lib -L$ICONV_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $iconv_lib_name in c|c_r|pthread*) ;; *) LIBS="-l$iconv_lib_name $LIBS" ;; esac fi if test "$ICONV_DIR/include" != "/usr/include"; then if test -z "$ICONV_DIR/include" || echo "$ICONV_DIR/include" | grep '^/' >/dev/null ; then ai_p=$ICONV_DIR/include else ep_dir="`echo $ICONV_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ICONV_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi fi else { echo "configure: error: iconv not found, in order to build sablotron you need the iconv library" 1>&2; exit 1; } fi if test "$PHP_SABLOT_JS" != "no"; then found_js=no echo $ac_n "checking for JS_GetRuntime in -ljs""... $ac_c" 1>&6 echo "configure:66176: checking for JS_GetRuntime in -ljs" >&5 ac_lib_var=`echo js'_'JS_GetRuntime | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ljs $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 found_js=yes else echo "$ac_t""no" 1>&6 fi if test "$found_js" = "yes"; then case js in c|c_r|pthread*) ;; *) LIBS="-ljs $LIBS" ;; esac fi fi cat >> confdefs.h <<\EOF #define HAVE_SABLOT_BACKEND 1 EOF if test "$found_expat" = "yes"; then old_LIBS=$LIBS LIBS="$LIBS -lexpat" echo $ac_n "checking for SablotSetEncoding in -lsablot""... $ac_c" 1>&6 echo "configure:66239: checking for SablotSetEncoding in -lsablot" >&5 ac_lib_var=`echo sablot'_'SablotSetEncoding | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsablot $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_SABLOT_SET_ENCODING 1 EOF else echo "$ac_t""no" 1>&6 fi LIBS=$old_LIBS fi fi if test "$XSLT_DIR/include" != "/usr/include"; then if test -z "$XSLT_DIR/include" || echo "$XSLT_DIR/include" | grep '^/' >/dev/null ; then ai_p=$XSLT_DIR/include else ep_dir="`echo $XSLT_DIR/include|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$XSLT_DIR/include\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi if test "$ext_shared" = "yes"; then XSLT_SHARED_LIBADD="-l$XSLT_LIBNAME $XSLT_SHARED_LIBADD" if test -n "$XSLT_DIR/lib"; then if test "$XSLT_DIR/lib" != "/usr/lib"; then if test -z "$XSLT_DIR/lib" || echo "$XSLT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$XSLT_DIR/lib else ep_dir="`echo $XSLT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$XSLT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n "XSLT_SHARED_LIBADD"; then XSLT_SHARED_LIBADD="-R$XSLT_DIR/lib -L$XSLT_DIR/lib $XSLT_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$XSLT_DIR/lib"; then if test "$XSLT_DIR/lib" != "/usr/lib"; then if test -z "$XSLT_DIR/lib" || echo "$XSLT_DIR/lib" | grep '^/' >/dev/null ; then ai_p=$XSLT_DIR/lib else ep_dir="`echo $XSLT_DIR/lib|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$XSLT_DIR/lib\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$XSLT_DIR/lib -L$XSLT_DIR/lib $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case $XSLT_LIBNAME in c|c_r|pthread*) ;; *) LIBS="-l$XSLT_LIBNAME $LIBS" ;; esac fi cat >> confdefs.h <<\EOF #define HAVE_XSLT 1 EOF fi if test -n "for YAZ support"; then echo $ac_n "checking for YAZ support""... $ac_c" 1>&6 echo "configure:66422: checking for YAZ support" >&5 fi # Check whether --with-yaz or --without-yaz was given. if test "${with_yaz+set}" = set; then withval="$with_yaz" PHP_YAZ=$withval else PHP_YAZ=no fi case $PHP_YAZ in shared,*) ext_output="yes, shared" ext_shared=yes PHP_YAZ=`echo "$PHP_YAZ"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_YAZ=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_YAZ" = "no" && PHP_YAZ=yes fi if test -n "for YAZ support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_YAZ" != "no"; then yazconfig=NONE if test "$PHP_YAZ" = "yes"; then # Extract the first word of "yaz-config", so it can be a program name with args. set dummy yaz-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:66474: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_yazconfig'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$yazconfig" in /*) ac_cv_path_yazconfig="$yazconfig" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_yazconfig="$yazconfig" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_yazconfig="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_yazconfig" && ac_cv_path_yazconfig="NONE" ;; esac fi yazconfig="$ac_cv_path_yazconfig" if test -n "$yazconfig"; then echo "$ac_t""$yazconfig" 1>&6 else echo "$ac_t""no" 1>&6 fi else if test -r ${PHP_YAZ}/yaz-config; then yazconfig=${PHP_YAZ}/yaz-config else yazconfig=${PHP_YAZ}/bin/yaz-config fi fi if test -f $yazconfig; then cat >> confdefs.h <<\EOF #define HAVE_YAZ 1 EOF . $yazconfig dir="" for c in $YAZLIB; do case $c in -L*) dir=`echo $c|cut -c 3-|sed 's%/\.libs%%g'` ;; esac done if test -n "$dir"; then if test "$dir" != "/usr/lib"; then if test -z "$dir" || echo "$dir" | grep '^/' >/dev/null ; then ai_p=$dir else ep_dir="`echo $dir|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$dir\"`" fi if test "$ext_shared" = "yes" && test -n "YAZ_SHARED_LIBADD"; then YAZ_SHARED_LIBADD="-R$dir -L$dir $YAZ_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case yaz in c|c_r|pthread*) ;; *) if test "$ext_shared" = "yes"; then YAZ_SHARED_LIBADD="$YAZ_SHARED_LIBADD -lyaz" else case yaz in c|c_r|pthread*) ;; *) DLIBS="$DLIBS -lyaz" ;; esac fi ;; esac for ac_i in $YAZINC; do case $ac_i in -I*) ac_ii=`echo $ac_i|cut -c 3-` if test "$ac_ii" != "/usr/include"; then if test -z "$ac_ii" || echo "$ac_ii" | grep '^/' >/dev/null ; then ai_p=$ac_ii else ep_dir="`echo $ac_ii|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ac_ii\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi ;; esac done PHP_VAR_SUBST="$PHP_VAR_SUBST YAZ_SHARED_LIBADD" EXT_SUBDIRS="$EXT_SUBDIRS yaz" if test -d "$abs_srcdir/ext/yaz"; then ext_builddir=ext/yaz ext_srcdir=$abs_srcdir/ext/yaz else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&6 echo "configure:66847: checking whether to include YP support" >&5 fi # Check whether --enable-yp or --disable-yp was given. if test "${enable_yp+set}" = set; then enableval="$enable_yp" PHP_YP=$enableval else PHP_YP=no fi case $PHP_YP in shared,*) ext_output="yes, shared" ext_shared=yes PHP_YP=`echo "$PHP_YP"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_YP=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_YP" = "no" && PHP_YP=yes fi if test -n "whether to include YP support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_YP" != "no"; then cat >> confdefs.h <<\EOF #define HAVE_YP 1 EOF EXT_SUBDIRS="$EXT_SUBDIRS yp" if test -d "$abs_srcdir/ext/yp"; then ext_builddir=ext/yp ext_srcdir=$abs_srcdir/ext/yp else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <<\EOF #define SOLARIS_YP 1 EOF ;; esac fi if test -n "for ZIP support"; then echo $ac_n "checking for ZIP support""... $ac_c" 1>&6 echo "configure:67116: checking for ZIP support" >&5 fi # Check whether --with-zip or --without-zip was given. if test "${with_zip+set}" = set; then withval="$with_zip" PHP_ZIP=$withval else PHP_ZIP=no fi case $PHP_ZIP in shared,*) ext_output="yes, shared" ext_shared=yes PHP_ZIP=`echo "$PHP_ZIP"|sed 's/^shared,//'` ;; shared) ext_output="yes, shared" ext_shared=yes PHP_ZIP=yes ;; no) ext_output=no ext_shared=no ;; *) ext_output=yes ext_shared=no ;; esac if test "$php_always_shared" = "yes"; then ext_output="yes, shared" ext_shared=yes test "$PHP_ZIP" = "no" && PHP_ZIP=yes fi if test -n "for ZIP support"; then echo "$ac_t""$ext_output" 1>&6 fi if test "$PHP_ZIP" != "no"; then EXT_SUBDIRS="$EXT_SUBDIRS zip" if test -d "$abs_srcdir/ext/zip"; then ext_builddir=ext/zip ext_srcdir=$abs_srcdir/ext/zip else ext_builddir=. ext_srcdir=$abs_srcdir fi if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then lib_makefile="$ext_builddir/libs.mk" lib_target="" $php_shtool mkdir -p $ext_builddir if test "$BSD_MAKEFILE" = "yes"; then lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" else lib_include_conf="include \$(top_builddir)/config_vars.mk" fi cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } fi ZZIPLIB_LIBDIR=$ZZIPLIB_DIR/lib old_LDFLAGS=$LDFLAGS LDFLAGS="-L$ZZIPLIB_LIBDIR $LDFLAGS" echo $ac_n "checking for zzip_open in -lzzip""... $ac_c" 1>&6 echo "configure:67388: checking for zzip_open in -lzzip" >&5 ac_lib_var=`echo zzip'_'zzip_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lzzip $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_ZZIPLIB 1 EOF else echo "$ac_t""no" 1>&6 { echo "configure: error: zziplib module requires zzlib >= 0.10.6." 1>&2; exit 1; } fi LDFLAGS=$old_LDFLAGS PHP_VAR_SUBST="$PHP_VAR_SUBST ZIP_SHARED_LIBADD" if test "$ext_shared" = "yes"; then ZIP_SHARED_LIBADD="-lzzip $ZIP_SHARED_LIBADD" if test -n "$ZZIPLIB_LIBDIR"; then if test "$ZZIPLIB_LIBDIR" != "/usr/lib"; then if test -z "$ZZIPLIB_LIBDIR" || echo "$ZZIPLIB_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$ZZIPLIB_LIBDIR else ep_dir="`echo $ZZIPLIB_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ZZIPLIB_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n "ZIP_SHARED_LIBADD"; then ZIP_SHARED_LIBADD="-R$ZZIPLIB_LIBDIR -L$ZZIPLIB_LIBDIR $ZIP_SHARED_LIBADD" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi else if test -n "$ZZIPLIB_LIBDIR"; then if test "$ZZIPLIB_LIBDIR" != "/usr/lib"; then if test -z "$ZZIPLIB_LIBDIR" || echo "$ZZIPLIB_LIBDIR" | grep '^/' >/dev/null ; then ai_p=$ZZIPLIB_LIBDIR else ep_dir="`echo $ZZIPLIB_LIBDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ZZIPLIB_LIBDIR\"`" fi if test "$ext_shared" = "yes" && test -n ""; then ="-R$ZZIPLIB_LIBDIR -L$ZZIPLIB_LIBDIR $" else unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$LIBPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "LIBPATH$unique=set" test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" LDFLAGS="$LDFLAGS -L$ai_p" PHP_RPATHS="$PHP_RPATHS $ai_p" fi fi fi fi case zzip in c|c_r|pthread*) ;; *) LIBS="-lzzip $LIBS" ;; esac fi if test "$ZZIPLIB_INCDIR" != "/usr/include"; then if test -z "$ZZIPLIB_INCDIR" || echo "$ZZIPLIB_INCDIR" | grep '^/' >/dev/null ; then ai_p=$ZZIPLIB_INCDIR else ep_dir="`echo $ZZIPLIB_INCDIR|sed 's%/*[^/][^/]*/*$%%'`" ep_realdir="`(cd \"$ep_dir\" && pwd)`" ai_p="$ep_realdir/`basename \"$ZZIPLIB_INCDIR\"`" fi unique=`echo $ai_p|sed 's/[^a-zA-Z0-9]/_/g'` cmd="echo $ac_n \"\$INCLUDEPATH$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "INCLUDEPATH$unique=set" if test ""; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi fi fi echo $ac_n "checking for fopencookie""... $ac_c" 1>&6 echo "configure:67567: checking for fopencookie" >&5 if eval "test \"`echo '$''{'ac_cv_func_fopencookie'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char fopencookie(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_fopencookie) || defined (__stub___fopencookie) choke me #else fopencookie(); #endif ; return 0; } EOF if { (eval echo configure:67595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_fopencookie=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_fopencookie=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'fopencookie`\" = yes"; then echo "$ac_t""yes" 1>&6 have_glibc_fopencookie=yes else echo "$ac_t""no" 1>&6 fi if test "$have_glibc_fopencookie" = "yes" ; then cat > conftest.$ac_ext < int main() { cookie_io_functions_t cookie; ; return 0; } EOF if { (eval echo configure:67626: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* have_cookie_io_functions_t=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* fi rm -f conftest* if test "$have_cookie_io_functions_t" = "yes" ; then cookie_io_functions_t=cookie_io_functions_t have_fopen_cookie=yes else cat > conftest.$ac_ext < int main() { _IO_cookie_io_functions_t cookie; ; return 0; } EOF if { (eval echo configure:67651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* have_IO_cookie_io_functions_t=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* fi rm -f conftest* if test "$have_cookie_io_functions_t" = "yes" ; then cookie_io_functions_t=_IO_cookie_io_functions_t have_fopen_cookie=yes fi fi if test "$have_fopen_cookie" = "yes" ; then cat >> confdefs.h <<\EOF #define HAVE_FOPENCOOKIE 1 EOF cat >> confdefs.h <&6 echo "configure:67701: checking whether to enable versioning" >&5 # Check whether --enable-versioning or --disable-versioning was given. if test "${enable_versioning+set}" = set; then enableval="$enable_versioning" PHP_VERSIONING=$enableval else PHP_VERSIONING=no fi echo "$ac_t""$PHP_VERSIONING" 1>&6 if test "$PHP_VERSIONING" = "yes"; then test -z "$PHP_SYM_FILE" && PHP_SYM_FILE="$abs_srcdir/sapi/$PHP_SAPI/php.sym" if test -f "$PHP_SYM_FILE"; then EXTRA_LDFLAGS="-export-symbols $PHP_SYM_FILE" fi fi enable_shared=yes enable_static=yes unset with_pic case $php_build_target in program|static) standard_libtool_flag='-prefer-non-pic -static' if test "$lib_build_shared" != "yes"; then enable_shared=no fi PHP_COMPILE='$(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -c $< && touch $@' CXX_PHP_COMPILE='$(CXX) $(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS) -c $< && touch $@' ;; shared) enable_static=no standard_libtool_flag=-prefer-pic EXTRA_LDFLAGS="$EXTRA_LDFLAGS -avoid-version" ;; esac if test "$PHP_SAPI" = "cgi"; then PHP_PROGRAM=php fi if test "$PHP_SAPI" = "fastcgi"; then PHP_PROGRAM=php fi if test "$REGEX_TYPE" = "php"; then REGEX_LIB=regex/libregex.la REGEX_DIR=regex cat >> confdefs.h <<\EOF #define HSREGEX 1 EOF cat >> confdefs.h <<\EOF #define REGEX 1 EOF PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES regex/Makefile" elif test "$REGEX_TYPE" = "system"; then cat >> confdefs.h <<\EOF #define REGEX 0 EOF fi echo $ac_n "checking which regex library to use""... $ac_c" 1>&6 echo "configure:67776: checking which regex library to use" >&5 echo "$ac_t""$REGEX_TYPE" 1>&6 PHP_VAR_SUBST="$PHP_VAR_SUBST REGEX_DIR" PHP_VAR_SUBST="$PHP_VAR_SUBST REGEX_LIB" PHP_VAR_SUBST="$PHP_VAR_SUBST HSREGEX" EXTRA_LIBS="$EXTRA_LIBS $DLIBS $LIBS" unset LIBS LDFLAGS echo "$ac_t""" 1>&6 echo "$ac_t""${T_MD}Configuring Zend${T_ME}" 1>&6 # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$ac_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$ac_save_ifs" ;; esac else enable_static=yes fi # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$ac_save_ifs" ;; esac else enable_fast_install=yes fi echo $ac_n "checking build system type""... $ac_c" 1>&6 echo "configure:67868: checking build system type" >&5 build_alias=$build case "$build_alias" in NONE) case $nonopt in NONE) build_alias=$host_alias ;; *) build_alias=$nonopt ;; esac ;; esac build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$build" 1>&6 # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 echo "configure:67897: checking for ld used by GCC" >&5 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 echo "configure:67927: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 echo "configure:67930: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$lt_cv_path_LD" if test -n "$LD"; then echo "$ac_t""$LD" 1>&6 else echo "$ac_t""no" 1>&6 fi test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 echo "configure:67965: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then lt_cv_prog_gnu_ld=yes else lt_cv_prog_gnu_ld=no fi fi echo "$ac_t""$lt_cv_prog_gnu_ld" 1>&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6 echo "configure:67982: checking for $LD option to reload object files" >&5 if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else lt_cv_ld_reload_flag='-r' fi echo "$ac_t""$lt_cv_ld_reload_flag" 1>&6 reload_flag=$lt_cv_ld_reload_flag test -n "$reload_flag" && reload_flag=" $reload_flag" echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 echo "configure:67994: checking for BSD-compatible nm" >&5 if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/${ac_tool_prefix}nm if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then lt_cv_path_NM="$tmp_nm -B" break elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then lt_cv_path_NM="$tmp_nm -p" break else lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags fi fi done IFS="$ac_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi NM="$lt_cv_path_NM" echo "$ac_t""$NM" 1>&6 echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6 echo "configure:68032: checking how to recognise dependant libraries" >&5 if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given egrep regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi4*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin* | mingw* | pw32*) lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' lt_cv_file_magic_cmd='/usr/bin/file -L' case "$host_os" in rhapsody* | darwin1.[012]) lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` ;; *) # Darwin 1.3 on lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' ;; esac ;; freebsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20*|hpux11*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; irix5* | irix6*) case $host_os in irix5*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" ;; *) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" ;; esac lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux-gnu*) case $host_cpu in alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* ) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; esac lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' else lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' lt_cv_file_magic_test_file=/shlib/libc.so lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all lt_cv_file_magic_test_file=/lib/libc.so ;; sysv5uw[78]* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; esac ;; esac fi echo "$ac_t""$lt_cv_deplibs_check_method" 1>&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method echo $ac_n "checking for object suffix""... $ac_c" 1>&6 echo "configure:68215: checking for object suffix" >&5 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftest* echo 'int i = 1;' > conftest.$ac_ext if { (eval echo configure:68221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then for ac_file in conftest.*; do case $ac_file in *.c) ;; *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;; esac done else { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; } fi rm -f conftest* fi echo "$ac_t""$ac_cv_objext" 1>&6 OBJEXT=$ac_cv_objext ac_objext=$ac_cv_objext echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 echo "configure:68241: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$CYGWIN" = yes || test "$MINGW32" = yes; then ac_cv_exeext=.exe else rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= if { (eval echo configure:68251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in *.c | *.C | *.o | *.obj) ;; *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; esac done else { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } fi rm -f conftest* test x"${ac_cv_exeext}" = x && ac_cv_exeext=no fi fi EXEEXT="" test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} echo "$ac_t""${ac_cv_exeext}" 1>&6 ac_exeext=$EXEEXT if test $host != $build; then ac_tool_prefix=${host_alias}- else ac_tool_prefix= fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo $ac_n "checking command to parse $NM output""... $ac_c" 1>&6 echo "configure:68282: checking command to parse $NM output" >&5 if eval "test \"`echo '$''{'lt_cv_sys_global_symbol_pipe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix*) symcode='[BCDEGRST]' ;; solaris* | sysv5*) symcode='[BDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $host_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then symcode='[ABCDGISTW]' fi # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo configure:68365: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if egrep ' nm_test_var$' "$nlist" >/dev/null; then if egrep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = { EOF sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$no_builtin_flag" if { (eval echo configure:68416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then pipe_works=yes fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" if test -z "$lt_cv_sys_global_symbol_pipe"; then global_symbol_to_cdecl= global_symbol_to_c_name_address= else global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address" fi if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; then echo "$ac_t""failed" 1>&6 else echo "$ac_t""ok" 1>&6 fi for ac_hdr in dlfcn.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:68465: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:68475: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6 echo "configure:68510: checking for ${ac_tool_prefix}file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case $MAGIC_CMD in /*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; ?:/*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. ;; *) ac_save_MAGIC_CMD="$MAGIC_CMD" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="/usr/bin:$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | egrep "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$ac_save_ifs" MAGIC_CMD="$ac_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$ac_t""$MAGIC_CMD" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo $ac_n "checking for file""... $ac_c" 1>&6 echo "configure:68572: checking for file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case $MAGIC_CMD in /*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; ?:/*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. ;; *) ac_save_MAGIC_CMD="$MAGIC_CMD" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="/usr/bin:$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | egrep "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$ac_save_ifs" MAGIC_CMD="$ac_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$ac_t""$MAGIC_CMD" 1>&6 else echo "$ac_t""no" 1>&6 fi else MAGIC_CMD=: fi fi fi ;; esac # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:68643: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" break fi done IFS="$ac_save_ifs" fi fi RANLIB="$ac_cv_prog_RANLIB" if test -n "$RANLIB"; then echo "$ac_t""$RANLIB" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$ac_cv_prog_RANLIB"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:68675: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="ranlib" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" fi fi RANLIB="$ac_cv_prog_RANLIB" if test -n "$RANLIB"; then echo "$ac_t""$RANLIB" 1>&6 else echo "$ac_t""no" 1>&6 fi else RANLIB=":" fi fi # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:68710: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" break fi done IFS="$ac_save_ifs" fi fi STRIP="$ac_cv_prog_STRIP" if test -n "$STRIP"; then echo "$ac_t""$STRIP" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$ac_cv_prog_STRIP"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:68742: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_STRIP="strip" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":" fi fi STRIP="$ac_cv_prog_STRIP" if test -n "$STRIP"; then echo "$ac_t""$STRIP" 1>&6 else echo "$ac_t""no" 1>&6 fi else STRIP=":" fi fi enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" : fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in *-*-irix6*) # Find out which ABI we are using. echo '#line 68791 "configure"' > conftest.$ac_ext if { (eval echo configure:68792: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 echo "configure:68813: checking whether the C compiler needs -belf" >&5 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_needs_belf=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* lt_cv_cc_needs_belf=no fi rm -f conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross fi echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" need_locks="$enable_libtool_lock" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o if test x"$host" != x"$build"; then ac_tool_prefix=${host_alias}- else ac_tool_prefix= fi # Transform linux* to *-*-linux-gnu*, to support old configure scripts. case $host_os in linux-gnu*) ;; linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` esac case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Allow CC to be a program name with arguments. set dummy $CC compiler="$2" echo $ac_n "checking for objdir""... $ac_c" 1>&6 echo "configure:68953: checking for objdir" >&5 rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. objdir=_libs fi rmdir .libs 2>/dev/null echo "$ac_t""$objdir" 1>&6 # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # We assume here that the value for lt_cv_prog_cc_pic will not be cached # in isolation, and that seeing it set (from the cache) indicates that # the associated values are set (in the cache) correctly too. echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6 echo "configure:68980: checking for $compiler option to produce PIC" >&5 if eval "test \"`echo '$''{'lt_cv_prog_cc_pic'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else lt_cv_prog_cc_pic= lt_cv_prog_cc_shlib= lt_cv_prog_cc_wl= lt_cv_prog_cc_static= lt_cv_prog_cc_no_builtin= lt_cv_prog_cc_can_build_shared=$can_build_shared if test "$GCC" = yes; then lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static='-static' case $host_os in aix*) # Below there is a dirty hack to force normal static linking with -ldl # The problem is because libdl dynamically linked with both libc and # libC (AIX C++ library), which obviously doesn't included in libraries # list by gcc. This cause undefined symbols with -static flags. # This hack allows C programs to be linked with "-static -ldl", but # not sure about C++ programs. lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | irix5* | irix6* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_cv_prog_cc_pic='-fno-common' ;; cygwin* | mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_cv_prog_cc_pic='-DDLL_EXPORT' ;; sysv4*MP*) if test -d /usr/nec; then lt_cv_prog_cc_pic=-Kconform_pic fi ;; *) lt_cv_prog_cc_pic='-fPIC' ;; esac else # PORTME Check for PIC flags for the system compiler. case $host_os in aix3* | aix4* | aix5*) lt_cv_prog_cc_wl='-Wl,' # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_cv_prog_cc_static='-Bstatic' else lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' fi ;; hpux9* | hpux10* | hpux11*) # Is there a better lt_cv_prog_cc_static that works with the bundled CC? lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive" lt_cv_prog_cc_pic='+Z' ;; irix5* | irix6*) lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static='-non_shared' # PIC (with -KPIC) is the default. ;; cygwin* | mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_cv_prog_cc_pic='-DDLL_EXPORT' ;; newsos6) lt_cv_prog_cc_pic='-KPIC' lt_cv_prog_cc_static='-Bstatic' ;; osf3* | osf4* | osf5*) # All OSF/1 code is PIC. lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static='-non_shared' ;; sco3.2v5*) lt_cv_prog_cc_pic='-Kpic' lt_cv_prog_cc_static='-dn' lt_cv_prog_cc_shlib='-belf' ;; solaris*) lt_cv_prog_cc_pic='-KPIC' lt_cv_prog_cc_static='-Bstatic' lt_cv_prog_cc_wl='-Wl,' ;; sunos4*) lt_cv_prog_cc_pic='-PIC' lt_cv_prog_cc_static='-Bstatic' lt_cv_prog_cc_wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_cv_prog_cc_pic='-KPIC' lt_cv_prog_cc_static='-Bstatic' if test "x$host_vendor" = xsni; then lt_cv_prog_cc_wl='-LD' else lt_cv_prog_cc_wl='-Wl,' fi ;; uts4*) lt_cv_prog_cc_pic='-pic' lt_cv_prog_cc_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_cv_prog_cc_pic='-Kconform_pic' lt_cv_prog_cc_static='-Bstatic' fi ;; *) lt_cv_prog_cc_can_build_shared=no ;; esac fi fi if test -z "$lt_cv_prog_cc_pic"; then echo "$ac_t""none" 1>&6 else echo "$ac_t""$lt_cv_prog_cc_pic" 1>&6 # Check to make sure the pic_flag actually works. echo $ac_n "checking if $compiler PIC flag $lt_cv_prog_cc_pic works""... $ac_c" 1>&6 echo "configure:69132: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5 if eval "test \"`echo '$''{'lt_cv_prog_cc_pic_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* case $host_os in hpux9* | hpux10* | hpux11*) # On HP-UX, both CC and GCC only warn that PIC is supported... then # they create non-PIC objects. So, if there were any warnings, we # assume that PIC is not supported. if test -s conftest.err; then lt_cv_prog_cc_pic_works=no else lt_cv_prog_cc_pic_works=yes fi ;; *) lt_cv_prog_cc_pic_works=yes ;; esac else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* lt_cv_prog_cc_pic_works=no fi rm -f conftest* CFLAGS="$save_CFLAGS" fi if test "X$lt_cv_prog_cc_pic_works" = Xno; then lt_cv_prog_cc_pic= lt_cv_prog_cc_can_build_shared=no else lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" fi echo "$ac_t""$lt_cv_prog_cc_pic_works" 1>&6 fi # Check for any special shared library compilation flags. if test -n "$lt_cv_prog_cc_shlib"; then echo "configure: warning: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" 1>&2 if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$lt_cv_prog_cc_shlib[ ]" >/dev/null; then : else echo "configure: warning: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" 1>&2 lt_cv_prog_cc_can_build_shared=no fi fi echo $ac_n "checking if $compiler static flag $lt_cv_prog_cc_static works""... $ac_c" 1>&6 echo "configure:69198: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5 if eval "test \"`echo '$''{'lt_cv_prog_cc_static_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else lt_cv_prog_cc_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_prog_cc_static_works=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* LDFLAGS="$save_LDFLAGS" fi # Belt *and* braces to stop my trousers falling down: test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= echo "$ac_t""$lt_cv_prog_cc_static_works" 1>&6 pic_flag="$lt_cv_prog_cc_pic" special_shlib_compile_flags="$lt_cv_prog_cc_shlib" wl="$lt_cv_prog_cc_wl" link_static_flag="$lt_cv_prog_cc_static" no_builtin_flag="$lt_cv_prog_cc_no_builtin" can_build_shared="$lt_cv_prog_cc_can_build_shared" # Check to see if options -o and -c are simultaneously supported by compiler echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6 echo "configure:69240: checking if $compiler supports -c -o file.$ac_objext" >&5 if eval "test \"`echo '$''{'lt_cv_compiler_c_o'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else $rm -r conftest 2>/dev/null mkdir conftest cd conftest echo "int some_variable = 0;" > conftest.$ac_ext mkdir out # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" compiler_c_o=no if { (eval echo configure:69259: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s out/conftest.err; then lt_cv_compiler_c_o=no else lt_cv_compiler_c_o=yes fi else # Append any errors to the config.log. cat out/conftest.err 1>&5 lt_cv_compiler_c_o=no fi CFLAGS="$save_CFLAGS" chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm -r conftest 2>/dev/null fi compiler_c_o=$lt_cv_compiler_c_o echo "$ac_t""$compiler_c_o" 1>&6 if test x"$compiler_c_o" = x"yes"; then # Check to see if we can write to a .lo echo $ac_n "checking if $compiler supports -c -o file.lo""... $ac_c" 1>&6 echo "configure:69288: checking if $compiler supports -c -o file.lo" >&5 if eval "test \"`echo '$''{'lt_cv_compiler_o_lo'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else lt_cv_compiler_o_lo=no save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -c -o conftest.lo" save_objext="$ac_objext" ac_objext=lo cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then lt_cv_compiler_o_lo=no else lt_cv_compiler_o_lo=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* ac_objext="$save_objext" CFLAGS="$save_CFLAGS" fi compiler_o_lo=$lt_cv_compiler_o_lo echo "$ac_t""$compiler_o_lo" 1>&6 else compiler_o_lo=no fi # Check to see if we can do hard links to lock some files if needed hard_links="nottested" if test "$compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6 echo "configure:69337: checking if we can lock with hard links" >&5 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$ac_t""$hard_links" 1>&6 if test "$hard_links" = no; then echo "configure: warning: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" 1>&2 need_locks=warn fi else need_locks=no fi if test "$GCC" = yes; then # Check to see if options -fno-rtti -fno-exceptions are supported by compiler echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions""... $ac_c" 1>&6 echo "configure:69356: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo "int some_variable = 0;" > conftest.$ac_ext save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" compiler_rtti_exceptions=no cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then compiler_rtti_exceptions=no else compiler_rtti_exceptions=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* CFLAGS="$save_CFLAGS" echo "$ac_t""$compiler_rtti_exceptions" 1>&6 if test "$compiler_rtti_exceptions" = "yes"; then no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' else no_builtin_flag=' -fno-builtin' fi fi # See if the linker supports building shared libraries. echo $ac_n "checking whether the linker ($LD) supports shared libraries""... $ac_c" 1>&6 echo "configure:69396: checking whether the linker ($LD) supports shared libraries" >&5 allow_undefined_flag= no_undefined_flag= need_lib_prefix=unknown need_version=unknown # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments archive_cmds= archive_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_into_libs=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported runpath_var= link_all_deplibs=unknown always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an egrep regular expression of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX, the GNU linker is very broken # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available. ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=yes extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~ test -f $output_objdir/impgen.exe || (cd $output_objdir && \ if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ else $CC -o impgen impgen.c ; fi)~ $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def' old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' # cygwin and mingw dlls have different entry points and sets of symbols # to exclude. # FIXME: what about values for MSVC? dll_entry=__cygwin_dll_entry@12 dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ case $host_os in mingw*) # mingw values dll_entry=_DllMainCRTStartup@12 dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ ;; esac # mingw and cygwin differ, and it's simplest to just exclude the union # of the two symbol sets. dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 # recent cygwin and mingw systems supply a stub DllMain which the user # can override, but on older systems we have to supply one (in ltdll.c) if test "x$lt_cv_need_dllmain" = "xyes"; then ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext " ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~ test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' else ltdll_obj= ltdll_cmds= fi # Extract the symbol export list from an `--export-all' def file, # then regenerate the def file from the symbol export list, so that # the compiled dll only exports the symbol export list. # Be careful not to strip the DATA tag left be newer dlltools. export_symbols_cmds="$ltdll_cmds"' $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is. # If DATA tags from a recent dlltool are present, honour them! archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname-def; else echo EXPORTS > $output_objdir/$soname-def; _lt_hint=1; cat $export_symbols | while read symbol; do set dummy \$symbol; case \$# in 2) echo " \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; *) echo " \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;; esac; _lt_hint=`expr 1 + \$_lt_hint`; done; fi~ '"$ltdll_cmds"' $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' case $host_os in cygwin* | mingw* | pw32*) # dlltool doesn't understand --whole-archive et. al. whole_archive_flag_spec= ;; *) # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi ;; esac fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. hardcode_direct=yes archive_cmds='' hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then shared_flag='${wl}-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall can do strange things, so it is better to # generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. allow_undefined_flag='${wl}-berok' # This is a bit strange, but is similar to how AIX traditionally builds # it's shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' ;; darwin* | rhapsody*) case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on allow_undefined_flag='-flat_namespace -undefined suppress' ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring' # We need to add '_' to the symbols in $export_symbols first #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' hardcode_direct=yes hardcode_shlibpath_var=no whole_archive_flag_spec='-all_load $convenience' ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9* | hpux10* | hpux11*) case $host_os in hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_minus_L=yes # Not in the search PATH, but as the default # location of the library. export_dynamic_flag_spec='${wl}-E' ;; irix5* | irix6*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' #Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes export_dynamic_flag_spec='${wl}-Bexport' ;; solaris*) # gcc --version < 3.0 without binutils cannot create self contained # shared libraries reliably, requiring libgcc.a to resolve some of # the object symbols generated in some cases. Libraries that use # assert need libgcc.a to resolve __eprintf, for example. Linking # a copy of libgcc.a into every shared library to guarantee resolving # such symbols causes other problems: According to Tim Van Holder # , C++ libraries end up with a separate # (to the application) exception stack for one thing. no_undefined_flag=' -z defs' if test "$GCC" = yes; then case `$CC --version 2>/dev/null` in [12].*) cat <&2 *** Warning: Releases of GCC earlier than version 3.0 cannot reliably *** create self contained shared libraries on Solaris systems, without *** introducing a dependency on libgcc.a. Therefore, libtool is disabling *** -no-undefined support, which will at least allow you to build shared *** libraries. However, you may find that when you link such libraries *** into an application without using GCC, you have to manually add *** \`gcc --print-libgcc-file-name\` to the link command. We urge you to *** upgrade to a newer version of GCC. Another option is to rebuild your *** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer. EOF no_undefined_flag= ;; esac fi # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) if test "x$host_vendor" = xsno; then archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? else archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5uw7* | unixware7*) no_undefined_flag='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$ac_t""$ld_shlibs" 1>&6 test "$ld_shlibs" = no && can_build_shared=no # Check hardcoding attributes. echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6 echo "configure:70080: checking how to hardcode library paths into programs" >&5 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var"; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$hardcode_shlibpath_var" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$ac_t""$hardcode_action" 1>&6 striplib= old_striplib= echo $ac_n "checking whether stripping libraries is possible""... $ac_c" 1>&6 echo "configure:70108: checking whether stripping libraries is possible" >&5 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi reload_cmds='$LD$reload_flag -o $output$reload_objs' test -z "$deplibs_check_method" && deplibs_check_method=unknown # PORTME Fill in your ld.so characteristics echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6 echo "configure:70122: checking dynamic linker characteristics" >&5 library_names_spec= libname_spec='lib$name' soname_spec= postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}.so$versuffix $libname.a' shlibpath_var=LIBPATH # AIX has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}.so$major' ;; aix4* | aix5*) version_type=linux if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can # not hardcode correct soname into executable. Probably we can # add versioning support to collect2, so additional links can # be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}.so$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}.so' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" export_dynamic_flag_spec=-rdynamic # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin*) library_names_spec='$libname.dll.a' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog .libs/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' ;; yes,mingw*) library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"` ;; yes,pw32*) library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll' ;; *) library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)' soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; *) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. dynamic_linker="$host_os dld.sl" version_type=sunos need_lib_prefix=no need_version=no shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' soname_spec='${libname}${release}.sl$major' # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6*) version_type=irix need_lib_prefix=no need_version=no soname_spec='${libname}${release}.so$major' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so' case $host_os in irix5*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" ;; # No shared lib support for Linux oldld, aout, or coff. linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) dynamic_linker=no ;; # This must be Linux ELF. linux-gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' soname_spec='${libname}${release}.so$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case "$host_os" in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH ;; os2*) libname_spec='$name' need_lib_prefix=no library_names_spec='$libname.dll $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_version=no soname_spec='${libname}${release}.so' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}.so$major' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; uts4*) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' soname_spec='$libname.so.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; *) dynamic_linker=no ;; esac echo "$ac_t""$dynamic_linker" 1>&6 test "$dynamic_linker" = no && can_build_shared=no # Report the final consequences. echo $ac_n "checking if libtool supports shared libraries""... $ac_c" 1>&6 echo "configure:70519: checking if libtool supports shared libraries" >&5 echo "$ac_t""$can_build_shared" 1>&6 echo $ac_n "checking whether to build shared libraries""... $ac_c" 1>&6 echo "configure:70523: checking whether to build shared libraries" >&5 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$ac_t""$enable_shared" 1>&6 echo $ac_n "checking whether to build static libraries""... $ac_c" 1>&6 echo "configure:70546: checking whether to build static libraries" >&5 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$ac_t""$enable_static" 1>&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; cygwin* | mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; *) echo $ac_n "checking for shl_load""... $ac_c" 1>&6 echo "configure:70587: checking for shl_load" >&5 if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else shl_load(); #endif ; return 0; } EOF if { (eval echo configure:70615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_shl_load=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_shl_load=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="shl_load" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 echo "configure:70633: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen""... $ac_c" 1>&6 echo "configure:70671: checking for dlopen" >&5 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else dlopen(); #endif ; return 0; } EOF if { (eval echo configure:70699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dlopen=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_dlopen=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="dlopen" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 echo "configure:70717: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6 echo "configure:70755: checking for dlopen in -lsvld" >&5 ac_lib_var=`echo svld'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsvld $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 echo "configure:70793: checking for dld_link in -ldld" >&5 ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" else echo "$ac_t""no" 1>&6 fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 echo "configure:70868: checking whether a program can dlopen itself" >&5 if eval "test \"`echo '$''{'lt_cv_dlopen_self'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo configure:70939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$ac_t""$lt_cv_dlopen_self" 1>&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 echo "configure:70962: checking whether a statically linked program can dlopen itself" >&5 if eval "test \"`echo '$''{'lt_cv_dlopen_self_static'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo configure:71033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6 echo "configure:71082: checking whether -lc should be explicitly linked in" >&5 if eval "test \"`echo '$''{'lt_cv_archive_cmds_need_lc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else $rm conftest* echo 'static int dummy;' > conftest.$ac_ext if { (eval echo configure:71089: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_cv_prog_cc_wl compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo configure:71102: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$save_allow_undefined_flag else cat conftest.err 1>&5 fi fi echo "$ac_t""$lt_cv_archive_cmds_need_lc" 1>&6 ;; esac fi need_lc=${lt_cv_archive_cmds_need_lc-yes} # The second clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then : else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi if test -f "$ltmain"; then trap "$rm \"${ofile}T\"; exit 1" 1 2 15 $rm -f "${ofile}T" echo creating $ofile # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS \ AR AR_FLAGS CC LD LN_S NM SHELL \ reload_flag reload_cmds wl \ pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ thread_safe_flag_spec whole_archive_flag_spec libname_spec \ library_names_spec soname_spec \ RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ old_striplib striplib file_magic_cmd export_symbols_cmds \ deplibs_check_method allow_undefined_flag no_undefined_flag \ finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ global_symbol_to_c_name_address \ hardcode_libdir_flag_spec hardcode_libdir_separator \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do case $var in reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ postinstall_cmds | postuninstall_cmds | \ finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done cat <<__EOF__ > "${ofile}T" #! $SHELL # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996-2000 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="sed -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$need_lc # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # The default C compiler. CC=$lt_CC # Is the compiler the GNU C compiler? with_gcc=$GCC # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_pic_flag pic_mode=$pic_mode # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_compiler_c_o # Can we write directly to a .lo ? compiler_o_lo=$lt_compiler_o_lo # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_link_static_flag # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "${ofile}T" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac case $host_os in cygwin* | mingw* | pw32* | os2*) cat <<'EOF' >> "${ofile}T" # This is a source program that is used to create dlls on Windows # Don't remove nor modify the starting and closing comments # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include # #undef WIN32_LEAN_AND_MEAN # #include # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ # This is a source program that is used to create import libraries # on Windows for dlls which lack them. Don't remove nor modify the # starting and closing comments # /* impgen.c starts here */ # /* Copyright (C) 1999-2000 Free Software Foundation, Inc. # # This file is part of GNU libtool. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # */ # # #include /* for printf() */ # #include /* for open(), lseek(), read() */ # #include /* for O_RDONLY, O_BINARY */ # #include /* for strdup() */ # # /* O_BINARY isn't required (or even defined sometimes) under Unix */ # #ifndef O_BINARY # #define O_BINARY 0 # #endif # # static unsigned int # pe_get16 (fd, offset) # int fd; # int offset; # { # unsigned char b[2]; # lseek (fd, offset, SEEK_SET); # read (fd, b, 2); # return b[0] + (b[1]<<8); # } # # static unsigned int # pe_get32 (fd, offset) # int fd; # int offset; # { # unsigned char b[4]; # lseek (fd, offset, SEEK_SET); # read (fd, b, 4); # return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); # } # # static unsigned int # pe_as32 (ptr) # void *ptr; # { # unsigned char *b = ptr; # return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); # } # # int # main (argc, argv) # int argc; # char *argv[]; # { # int dll; # unsigned long pe_header_offset, opthdr_ofs, num_entries, i; # unsigned long export_rva, export_size, nsections, secptr, expptr; # unsigned long name_rvas, nexp; # unsigned char *expdata, *erva; # char *filename, *dll_name; # # filename = argv[1]; # # dll = open(filename, O_RDONLY|O_BINARY); # if (dll < 1) # return 1; # # dll_name = filename; # # for (i=0; filename[i]; i++) # if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') # dll_name = filename + i +1; # # pe_header_offset = pe_get32 (dll, 0x3c); # opthdr_ofs = pe_header_offset + 4 + 20; # num_entries = pe_get32 (dll, opthdr_ofs + 92); # # if (num_entries < 1) /* no exports */ # return 1; # # export_rva = pe_get32 (dll, opthdr_ofs + 96); # export_size = pe_get32 (dll, opthdr_ofs + 100); # nsections = pe_get16 (dll, pe_header_offset + 4 +2); # secptr = (pe_header_offset + 4 + 20 + # pe_get16 (dll, pe_header_offset + 4 + 16)); # # expptr = 0; # for (i = 0; i < nsections; i++) # { # char sname[8]; # unsigned long secptr1 = secptr + 40 * i; # unsigned long vaddr = pe_get32 (dll, secptr1 + 12); # unsigned long vsize = pe_get32 (dll, secptr1 + 16); # unsigned long fptr = pe_get32 (dll, secptr1 + 20); # lseek(dll, secptr1, SEEK_SET); # read(dll, sname, 8); # if (vaddr <= export_rva && vaddr+vsize > export_rva) # { # expptr = fptr + (export_rva - vaddr); # if (export_rva + export_size > vaddr + vsize) # export_size = vsize - (export_rva - vaddr); # break; # } # } # # expdata = (unsigned char*)malloc(export_size); # lseek (dll, expptr, SEEK_SET); # read (dll, expdata, export_size); # erva = expdata - export_rva; # # nexp = pe_as32 (expdata+24); # name_rvas = pe_as32 (expdata+32); # # printf ("EXPORTS\n"); # for (i = 0; i> "${ofile}T" || (rm -f "${ofile}T"; exit 1) mv -f "${ofile}T" "$ofile" || \ (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T") chmod +x "$ofile" fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion if test "$YACC" != "bison -y"; then echo "configure: warning: You will need bison if you want to regenerate the Zend parser." 1>&2 else echo $ac_n "checking bison version""... $ac_c" 1>&6 echo "configure:71698: checking bison version" >&5 set `bison --version| grep 'GNU Bison' | cut -d ' ' -f 4 | sed -e 's/\./ /'` if test "${1}" = "1" -a "${2}" -lt "28"; then echo "configure: warning: You will need bison 1.28 if you want to regenerate the Zend parser (found ${1}.${2})." 1>&2 fi echo "$ac_t""${1}.${2} (ok)" 1>&6 fi if test "$CC" = "gcc" -a "$ac_cv_prog_cc_g" = "yes" -a \ "`uname -sv`" = "AIX 4"; then CFLAGS=`echo $CFLAGS | sed -e 's/-g//'` fi if test "$ac_cv_prog_gcc" = "yes" -a "`uname -s`" = "Rhapsody"; then CPPFLAGS="$CPPFLAGS -traditional-cpp" fi for ac_hdr in limits.h \ malloc.h \ string.h \ unistd.h \ stdarg.h \ sys/types.h \ sys/time.h \ signal.h \ unix.h \ dlfcn.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:71730: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:71740: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done echo $ac_n "checking for size_t""... $ac_c" 1>&6 echo "configure:71768: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 echo "configure:71801: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #ifdef signal #undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main() { int i; ; return 0; } EOF if { (eval echo configure:71823: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_type_signal=int fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_signal" 1>&6 cat >> confdefs.h <&6 echo "configure:71843: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="-ldl $LIBS" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for dlopen""... $ac_c" 1>&6 echo "configure:71883: checking for dlopen" >&5 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else dlopen(); #endif ; return 0; } EOF if { (eval echo configure:71911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dlopen=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_dlopen=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_LIBDL 1 EOF else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether dlsym() requires a leading underscore in symbol names""... $ac_c" 1>&6 echo "configure:71935: checking whether dlsym() requires a leading underscore in symbol names" >&5 if test "$cross_compiling" = yes; then : else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo configure:72003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) echo "$ac_t""no" 1>&6 ;; x$lt_dlneed_uscore) echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define DLSYM_NEEDS_UNDERSCORE 1 EOF ;; x$lt_unknown|x*) echo "$ac_t""no" 1>&6 ;; esac else : # compilation failed echo "$ac_t""no" 1>&6 fi fi rm -fr conftest* echo $ac_n "checking for uint""... $ac_c" 1>&6 echo "configure:72032: checking for uint" >&5 if eval "test \"`echo '$''{'ac_cv_type_uint'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])uint[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_uint=yes else rm -rf conftest* ac_cv_type_uint=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_uint" 1>&6 if test $ac_cv_type_uint = no; then cat >> confdefs.h <<\EOF #define uint unsigned int EOF fi echo $ac_n "checking for ulong""... $ac_c" 1>&6 echo "configure:72065: checking for ulong" >&5 if eval "test \"`echo '$''{'ac_cv_type_ulong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])ulong[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_ulong=yes else rm -rf conftest* ac_cv_type_ulong=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_ulong" 1>&6 if test $ac_cv_type_ulong = no; then cat >> confdefs.h <<\EOF #define ulong unsigned long EOF fi echo $ac_n "checking for vprintf""... $ac_c" 1>&6 echo "configure:72100: checking for vprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char vprintf(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_vprintf) || defined (__stub___vprintf) choke me #else vprintf(); #endif ; return 0; } EOF if { (eval echo configure:72128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vprintf=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_vprintf=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_VPRINTF 1 EOF else echo "$ac_t""no" 1>&6 fi if test "$ac_cv_func_vprintf" != yes; then echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 echo "configure:72152: checking for _doprnt" >&5 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char _doprnt(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub__doprnt) || defined (__stub____doprnt) choke me #else _doprnt(); #endif ; return 0; } EOF if { (eval echo configure:72180: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func__doprnt=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func__doprnt=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_DOPRNT 1 EOF else echo "$ac_t""no" 1>&6 fi fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 echo "configure:72205: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_func_memcmp_clean=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6 test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 echo "configure:72243: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF if { (eval echo configure:72255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_alloca_h=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 if test $ac_cv_header_alloca_h = yes; then cat >> confdefs.h <<\EOF #define HAVE_ALLOCA_H 1 EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 echo "configure:72276: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < # define alloca _alloca # else # if HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main() { char *p = (char *) alloca(1); ; return 0; } EOF if { (eval echo configure:72309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_func_alloca_works=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 if test $ac_cv_func_alloca_works = yes; then cat >> confdefs.h <<\EOF #define HAVE_ALLOCA 1 EOF fi if test $ac_cv_func_alloca_works = no; then # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=alloca.${ac_objext} cat >> confdefs.h <<\EOF #define C_ALLOCA 1 EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 echo "configure:72341: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5 | egrep "webecray" >/dev/null 2>&1; then rm -rf conftest* ac_cv_os_cray=yes else rm -rf conftest* ac_cv_os_cray=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_os_cray" 1>&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:72371: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:72399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <&6 fi done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 echo "configure:72426: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext < addr) ? 1 : -1; } main () { exit (find_stack_direction() < 0); } EOF if { (eval echo configure:72453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_stack_direction=-1 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 cat >> confdefs.h <&6 echo "configure:72477: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:72505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done echo $ac_n "checking whether sprintf is broken""... $ac_c" 1>&6 echo "configure:72531: checking whether sprintf is broken" >&5 if eval "test \"`echo '$''{'ac_cv_broken_sprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_broken_sprintf=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_broken_sprintf=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_broken_sprintf=yes fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_broken_sprintf" 1>&6 if test "$ac_cv_broken_sprintf" = "yes"; then ac_result=1 else ac_result=0 fi cat >> confdefs.h <&6 echo "configure:72580: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:72608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done echo $ac_n "checking whether fp_except is defined""... $ac_c" 1>&6 echo "configure:72635: checking whether fp_except is defined" >&5 if eval "test \"`echo '$''{'ac_cv_type_fp_except'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { fp_except x = (fp_except) 0; ; return 0; } EOF if { (eval echo configure:72652: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_fp_except=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_type_fp_except=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_fp_except" 1>&6 if test "$ac_cv_type_fp_except" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_FP_EXCEPT 1 EOF fi # Check whether --enable-experimental-zts or --disable-experimental-zts was given. if test "${enable_experimental_zts+set}" = set; then enableval="$enable_experimental_zts" ZEND_EXPERIMENTAL_ZTS=$enableval else ZEND_EXPERIMENTAL_ZTS=no fi # Check whether --enable-inline-optimization or --disable-inline-optimization was given. if test "${enable_inline_optimization+set}" = set; then enableval="$enable_inline_optimization" ZEND_INLINE_OPTIMIZATION=$enableval else ZEND_INLINE_OPTIMIZATION=no fi # Check whether --enable-memory-limit or --disable-memory-limit was given. if test "${enable_memory_limit+set}" = set; then enableval="$enable_memory_limit" ZEND_MEMORY_LIMIT=$enableval else ZEND_MEMORY_LIMIT=no fi echo $ac_n "checking whether to enable experimental ZTS""... $ac_c" 1>&6 echo "configure:72720: checking whether to enable experimental ZTS" >&5 echo "$ac_t""$ZEND_EXPERIMENTAL_ZTS" 1>&6 echo $ac_n "checking whether to enable inline optimization for GCC""... $ac_c" 1>&6 echo "configure:72724: checking whether to enable inline optimization for GCC" >&5 echo "$ac_t""$ZEND_INLINE_OPTIMIZATION" 1>&6 echo $ac_n "checking whether to enable a memory limit""... $ac_c" 1>&6 echo "configure:72728: checking whether to enable a memory limit" >&5 echo "$ac_t""$ZEND_MEMORY_LIMIT" 1>&6 echo $ac_n "checking whether to enable Zend debugging""... $ac_c" 1>&6 echo "configure:72732: checking whether to enable Zend debugging" >&5 echo "$ac_t""$ZEND_DEBUG" 1>&6 if test "$ZEND_DEBUG" = "yes"; then cat >> confdefs.h <<\EOF #define ZEND_DEBUG 1 EOF echo " $CFLAGS" | grep ' -g' >/dev/null || DEBUG_CFLAGS="-g" if test "$CFLAGS" = "-g -O2"; then CFLAGS=-g fi test -n "$GCC" && DEBUG_CFLAGS="$DEBUG_CFLAGS -Wall" test -n "$GCC" && test "$USE_MAINTAINER_MODE" = "yes" && \ DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations" else cat >> confdefs.h <<\EOF #define ZEND_DEBUG 0 EOF fi test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS" if test "$ZEND_EXPERIMENTAL_ZTS" = "yes"; then cat >> confdefs.h <<\EOF #define ZTS 1 EOF CFLAGS="$CFLAGS -DZTS" fi if test "$ZEND_MEMORY_LIMIT" = "yes"; then cat >> confdefs.h <<\EOF #define MEMORY_LIMIT 1 EOF else cat >> confdefs.h <<\EOF #define MEMORY_LIMIT 0 EOF fi if test -n "$GCC" && test "$ZEND_INLINE_OPTIMIZATION" != "yes"; then INLINE_CFLAGS=`echo $ac_n "$CFLAGS $ac_c" | sed s/-O[0-9s]*//` else INLINE_CFLAGS="$CFLAGS" fi echo $ac_n "checking for inline""... $ac_c" 1>&6 echo "configure:72789: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* done fi echo "$ac_t""$ac_cv_c_inline" 1>&6 case "$ac_cv_c_inline" in inline | yes) ;; no) cat >> confdefs.h <<\EOF #define inline EOF ;; *) cat >> confdefs.h <> confdefs.h <<\EOF #define ZTS 1 EOF PHP_THREAD_SAFETY=yes else PHP_THREAD_SAFETY=no fi if test "$abs_srcdir" != "$abs_builddir"; then INCLUDES="$INCLUDES -I\$(top_srcdir)/main -I\$(top_srcdir)/Zend" INCLUDES="$INCLUDES -I\$(top_srcdir)/TSRM" fi ZEND_EXTRA_LIBS="$LIBS" unset LIBS LDFLAGS echo "$ac_t""" 1>&6 echo "$ac_t""${T_MD}Configuring TSRM${T_ME}" 1>&6 for ac_hdr in stdarg.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:72866: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:72876: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done if test "$PHP_THREAD_SAFETY" = "yes"; then # Check whether --with-tsrm-pth or --without-tsrm-pth was given. if test "${with_tsrm_pth+set}" = set; then withval="$with_tsrm_pth" TSRM_PTH=$withval else TSRM_PTH=no fi # Check whether --with-tsrm-st or --without-tsrm-st was given. if test "${with_tsrm_st+set}" = set; then withval="$with_tsrm_st" TSRM_ST=$withval else TSRM_ST=no fi # Check whether --with-tsrm-pthreads or --without-tsrm-pthreads was given. if test "${with_tsrm_pthreads+set}" = set; then withval="$with_tsrm_pthreads" TSRM_PTHREADS=$withval else TSRM_PTHREADS=yes fi test "$TSRM_PTH" = "yes" && TSRM_PTH=pth-config if test "$TSRM_PTH" != "no"; then echo $ac_n "checking for GNU Pth""... $ac_c" 1>&6 echo "configure:72953: checking for GNU Pth" >&5 PTH_PREFIX="`$TSRM_PTH --prefix`" if test -z "$PTH_PREFIX"; then echo "$ac_t""Please check your Pth installation" 1>&6 fi CPPFLAGS="$CPPFLAGS `$TSRM_PTH --cflags`" LDFLAGS="$LDFLAGS `$TSRM_PTH --ldflags`" LIBS="$LIBS `$TSRM_PTH --libs`" cat >> confdefs.h <<\EOF #define GNUPTH 1 EOF echo "$ac_t""yes - installed in $PTH_PREFIX" 1>&6 elif test "$TSRM_ST" != "no"; then if test -r "$TSRM_ST/include/st.h"; then CPPFLAGS="$CPPFLAGS -I$TSRM_ST/include" LDFLAGS="$LDFLAGS -L$TSRM_ST/lib" elif test -r "$TSRM_ST/st.h"; then CPPFLAGS="$CPPFLAGS -I$TSRM_ST" LDFLAGS="$LDFLAGS -L$TSRM_ST" fi for ac_hdr in st.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:72983: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:72993: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 { echo "configure: error: Sorry, I was unable to locate the State Threads header file. Please specify the prefix using --with-tsrm-st=/prefix" 1>&2; exit 1; } fi done LIBS="$LIBS -lst" echo $ac_n "checking for SGI's State Threads""... $ac_c" 1>&6 echo "configure:73023: checking for SGI's State Threads" >&5 echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define TSRM_ST 1 EOF elif test "$TSRM_PTHREADS" != "no"; then save_CFLAGS=$CFLAGS save_LIBS=$LIBS if test -n "$ac_cv_pthreads_lib"; then LIBS="$LIBS -l$ac_cv_pthreads_lib" fi if test -n "$ac_cv_pthreads_cflags"; then CFLAGS="$CFLAGS $ac_cv_pthreads_cflags" fi if test "$cross_compiling" = yes; then pthreads_working=no else cat > conftest.$ac_ext < #include void *thread_routine(void *data) { return data; } int main() { pthread_t thd; pthread_mutexattr_t mattr; int data = 1; pthread_mutexattr_init(&mattr); return pthread_create(&thd, NULL, thread_routine, &data); } EOF if { (eval echo configure:73069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then pthreads_working=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* pthreads_working=no fi rm -fr conftest* fi LIBS=$save_LIBS CFLAGS=$save_CFLAGS echo $ac_n "checking for pthreads_cflags""... $ac_c" 1>&6 echo "configure:73089: checking for pthreads_cflags" >&5 if eval "test \"`echo '$''{'ac_cv_pthreads_cflags'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_pthreads_cflags= if test "$pthreads_working" != "yes"; then for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do ac_save=$CFLAGS CFLAGS="$CFLAGS $flag" if test "$cross_compiling" = yes; then pthreads_working=no else cat > conftest.$ac_ext < #include void *thread_routine(void *data) { return data; } int main() { pthread_t thd; pthread_mutexattr_t mattr; int data = 1; pthread_mutexattr_init(&mattr); return pthread_create(&thd, NULL, thread_routine, &data); } EOF if { (eval echo configure:73122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then pthreads_working=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* pthreads_working=no fi rm -fr conftest* fi CFLAGS=$ac_save if test "$pthreads_working" = "yes"; then ac_cv_pthreads_cflags=$flag break fi done fi fi echo "$ac_t""$ac_cv_pthreads_cflags" 1>&6 echo $ac_n "checking for pthreads_lib""... $ac_c" 1>&6 echo "configure:73151: checking for pthreads_lib" >&5 if eval "test \"`echo '$''{'ac_cv_pthreads_lib'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_pthreads_lib= if test "$pthreads_working" != "yes"; then for lib in pthread pthreads c_r; do ac_save=$LIBS LIBS="$LIBS -l$lib" if test "$cross_compiling" = yes; then pthreads_working=no else cat > conftest.$ac_ext < #include void *thread_routine(void *data) { return data; } int main() { pthread_t thd; pthread_mutexattr_t mattr; int data = 1; pthread_mutexattr_init(&mattr); return pthread_create(&thd, NULL, thread_routine, &data); } EOF if { (eval echo configure:73184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then pthreads_working=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* pthreads_working=no fi rm -fr conftest* fi LIBS=$ac_save if test "$pthreads_working" = "yes"; then ac_cv_pthreads_lib=$lib break fi done fi fi echo "$ac_t""$ac_cv_pthreads_lib" 1>&6 if test "$pthreads_working" = "yes"; then threads_result="POSIX-Threads found" else threads_result="POSIX-Threads not found" fi if test "$pthreads_working" != "yes"; then { echo "configure: error: Your system seems to lack POSIX threads." 1>&2; exit 1; } fi cat >> confdefs.h <<\EOF #define PTHREADS 1 EOF echo $ac_n "checking for POSIX threads""... $ac_c" 1>&6 echo "configure:73229: checking for POSIX threads" >&5 echo "$ac_t""yes" 1>&6 fi fi EXTRA_LDFLAGS="$EXTRA_LDFLAGS $LDFLAGS" EXTRA_LIBS="$EXTRA_LIBS $LIBS" unset LIBS LDFLAGS test "$prefix" = "NONE" && prefix=/usr/local test "$exec_prefix" = "NONE" && exec_prefix='${prefix}' case $libdir in '${exec_prefix}/lib') libdir=$libdir/php ;; esac case $datadir in '${prefix}/share') datadir=$datadir/php ;; *) ;; esac phplibdir=`pwd`/modules $php_shtool mkdir -p $phplibdir phptempdir=`pwd`/libs old_exec_prefix=$exec_prefix old_libdir=$libdir old_datadir=$datadir exec_prefix=`eval echo $exec_prefix` libdir=`eval echo $libdir` datadir=`eval echo $datadir` ZEND_MODULE_API_NO=`egrep '#define ZEND_MODULE_API_NO ' $srcdir/Zend/zend_modules.h|sed 's/#define ZEND_MODULE_API_NO //'` if test -z "$EXTENSION_DIR"; then extbasedir=$ZEND_MODULE_API_NO if test "$oldstyleextdir" = "yes"; then if test "$PHP_DEBUG" = "1"; then part1=debug else part1=no-debug fi if test "$enable_experimental_zts" = "yes"; then part2=zts else part2=non-zts fi extbasedir=$part1-$part2-$extbasedir EXTENSION_DIR=$libdir/extensions/$extbasedir else if test "$enable_experimental_zts" = "yes"; then extbasedir=$extbasedir-zts fi if test "$PHP_DEBUG" = "1"; then extbasedir=$extbasedir-debug fi EXTENSION_DIR=$libdir/$extbasedir fi fi EXPANDED_PEAR_INSTALLDIR=`eval echo $PEAR_INSTALLDIR` EXPANDED_EXTENSION_DIR=`eval echo $EXTENSION_DIR` EXPANDED_LOCALSTATEDIR=`eval echo $localstatedir` EXPANDED_BINDIR=`eval echo $bindir` EXPANDED_LIBDIR=$libdir EXPANDED_SYSCONFDIR=`eval echo $sysconfdir` EXPANDED_DATADIR=$datadir EXPANDED_PHP_CONFIG_FILE_PATH=`eval echo "$PHP_CONFIG_FILE_PATH"` INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR exec_prefix=$old_exec_prefix libdir=$old_libdir datadir=$old_datadir if test "$PHP_RPATH" = "yes" && test -n "$PHP_RPATHS"; then OLD_RPATHS="$PHP_RPATHS" unset PHP_RPATHS for i in $OLD_RPATHS; do PHP_LDFLAGS="$PHP_LDFLAGS -L$i" PHP_RPATHS="$PHP_RPATHS -R $i" NATIVE_RPATHS="$NATIVE_RPATHS $ld_runpath_switch$i" done fi unset ac_new_flags for i in $PHP_LDFLAGS; do case $i in -L/usr/lib|-L/usr/lib/) ;; *) ac_new_flags="$ac_new_flags $i" ;; esac done PHP_LDFLAGS=$ac_new_flags unset ac_new_flags for i in $LDFLAGS; do case $i in -L/usr/lib|-L/usr/lib/) ;; *) ac_new_flags="$ac_new_flags $i" ;; esac done LDFLAGS=$ac_new_flags EXTRA_LDFLAGS="$EXTRA_LDFLAGS $PHP_LDFLAGS" PHP_BUILD_DATE=`date '+%Y-%m-%d'` cat >> confdefs.h <> confdefs.h <> confdefs.h <meta_ccld<&6 echo "$ac_t""${T_MD}Generating files${T_ME}" 1>&6 CXXFLAGS_CLEAN=$CXXFLAGS CFLAGS_CLEAN=$CFLAGS CFLAGS="$CFLAGS $standard_libtool_flag" INLINE_CFLAGS="$INLINE_CFLAGS $standard_libtool_flag" CXXFLAGS="$CXXFLAGS $standard_libtool_flag" echo $ac_n "checking for working mkdir -p""... $ac_c" 1>&6 echo "configure:73654: checking for working mkdir -p" >&5 if eval "test \"`echo '$''{'ac_cv_mkdir_p'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else test -d conftestdir && rm -rf conftestdir mkdir -p conftestdir/somedir >/dev/null 2>&1 mkdir -p conftestdir/somedir >/dev/null 2>&1 if test "$?" = "0" && test -d conftestdir/somedir; then ac_cv_mkdir_p=yes else ac_cv_mkdir_p=no fi rm -rf conftestdir fi echo "$ac_t""$ac_cv_mkdir_p" 1>&6 echo creating config_vars.mk > config_vars.mk for i in $PHP_VAR_SUBST; do eval echo "$i = \$$i" | sed 's%#%\\#%g' >> config_vars.mk done $php_shtool mkdir -p pear/scripts ALL_OUTPUT_FILES="php4.spec Zend/Makefile main/build-defs.h \ pear/scripts/pear pear/scripts/phpize pear/scripts/php-config \ pear/scripts/pearize pear/scripts/phptar \ TSRM/Makefile $PHP_OUTPUT_FILES" trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 DEFS=-DHAVE_CONFIG_H # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "$ALL_OUTPUT_FILES main/php_config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g s%@host_vendor@%$host_vendor%g s%@host_os@%$host_os%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@PACKAGE@%$PACKAGE%g s%@VERSION@%$VERSION%g s%@ACLOCAL@%$ACLOCAL%g s%@AUTOCONF@%$AUTOCONF%g s%@AUTOMAKE@%$AUTOMAKE%g s%@AUTOHEADER@%$AUTOHEADER%g s%@MAKEINFO@%$MAKEINFO%g s%@SET_MAKE@%$SET_MAKE%g s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g s%@MAINT@%$MAINT%g s%@CC@%$CC%g s%@CPP@%$CPP%g s%@RANLIB@%$RANLIB%g s%@LN_S@%$LN_S%g s%@AWK@%$AWK%g s%@YACC@%$YACC%g s%@LEX@%$LEX%g s%@LEXLIB@%$LEXLIB%g s%@LEX_OUTPUT_ROOT@%$LEX_OUTPUT_ROOT%g s%@PROG_SENDMAIL@%$PROG_SENDMAIL%g s%@LIBOBJS@%$LIBOBJS%g s%@ALLOCA@%$ALLOCA%g s%@MYSQL_MODULE_TYPE@%$MYSQL_MODULE_TYPE%g s%@MYSQL_LIBS@%$MYSQL_LIBS%g s%@MYSQL_INCLUDE@%$MYSQL_INCLUDE%g s%@OCI8_SHARED_LIBADD@%$OCI8_SHARED_LIBADD%g s%@OCI8_DIR@%$OCI8_DIR%g s%@OCI8_VERSION@%$OCI8_VERSION%g s%@ODBC_INCLUDE@%$ODBC_INCLUDE%g s%@ODBC_LIBS@%$ODBC_LIBS%g s%@ODBC_LFLAGS@%$ODBC_LFLAGS%g s%@ODBC_TYPE@%$ODBC_TYPE%g s%@ORACLE_SHARED_LIBADD@%$ORACLE_SHARED_LIBADD%g s%@ORACLE_DIR@%$ORACLE_DIR%g s%@ORACLE_VERSION@%$ORACLE_VERSION%g s%@CXX@%$CXX%g s%@CXXCPP@%$CXXCPP%g s%@yazconfig@%$yazconfig%g s%@build@%$build%g s%@build_alias@%$build_alias%g s%@build_cpu@%$build_cpu%g s%@build_vendor@%$build_vendor%g s%@build_os@%$build_os%g s%@OBJEXT@%$OBJEXT%g s%@EXEEXT@%$EXEEXT%g s%@ECHO@%$ECHO%g s%@STRIP@%$STRIP%g s%@LIBTOOL@%$LIBTOOL%g s%@INLINE_CFLAGS@%$INLINE_CFLAGS%g s%@INCLUDE_PATH@%$INCLUDE_PATH%g s%@EXPANDED_PEAR_INSTALLDIR@%$EXPANDED_PEAR_INSTALLDIR%g s%@EXPANDED_EXTENSION_DIR@%$EXPANDED_EXTENSION_DIR%g s%@EXPANDED_BINDIR@%$EXPANDED_BINDIR%g s%@EXPANDED_LIBDIR@%$EXPANDED_LIBDIR%g s%@EXPANDED_DATADIR@%$EXPANDED_DATADIR%g s%@EXPANDED_SYSCONFDIR@%$EXPANDED_SYSCONFDIR%g s%@EXPANDED_LOCALSTATEDIR@%$EXPANDED_LOCALSTATEDIR%g s%@EXPANDED_PHP_CONFIG_FILE_PATH@%$EXPANDED_PHP_CONFIG_FILE_PATH%g s%@abs_builddir@%$abs_builddir%g s%@abs_srcdir@%$abs_srcdir%g s%@CONFIGURE_COMMAND@%$CONFIGURE_COMMAND%g s%@DEBUG_CFLAGS@%$DEBUG_CFLAGS%g s%@EXTENSION_DIR@%$EXTENSION_DIR%g s%@EXTRA_LIBS@%$EXTRA_LIBS%g s%@ZEND_EXTRA_LIBS@%$ZEND_EXTRA_LIBS%g s%@INSTALL_IT@%$INSTALL_IT%g s%@NATIVE_RPATHS@%$NATIVE_RPATHS%g s%@PEAR_INSTALLDIR@%$PEAR_INSTALLDIR%g s%@PHP_LDFLAGS@%$PHP_LDFLAGS%g s%@PHP_LIBS@%$PHP_LIBS%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ac_dC='\3' ac_dD='%g' # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='\([ ]\)%\1#\2define\3' ac_uC=' ' ac_uD='\4%g' # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_eB='$%\1#\2define\3' ac_eC=' ' ac_eD='%g' if test "${CONFIG_HEADERS+set}" != set; then EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF fi for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac echo creating $ac_file rm -f conftest.frag conftest.in conftest.out ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` cat $ac_file_inputs > conftest.in EOF # Transform confdefs.h into a sed script conftest.vals that substitutes # the proper values into config.h.in to produce config.h. And first: # Protect against being on the right side of a sed subst in config.status. # Protect against being in an unquoted here document in config.status. rm -f conftest.vals cat > conftest.hdr <<\EOF s/[\\&%]/\\&/g s%[\\$`]%\\&%g s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp s%ac_d%ac_u%gp s%ac_u%ac_e%gp EOF sed -n -f conftest.hdr confdefs.h > conftest.vals rm -f conftest.hdr # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >> conftest.vals <<\EOF s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% EOF # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail while : do ac_lines=`grep -c . conftest.vals` # grep -c gives empty output for an empty file on some AIX systems. if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi # Write a limited-size here document to conftest.frag. echo ' cat > conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS echo 'CEOF sed -f conftest.frag conftest.in > conftest.out rm -f conftest.in mv conftest.out conftest.in ' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals cat >> $CONFIG_STATUS <<\EOF rm -f conftest.frag conftest.h echo "/* $ac_file. Generated automatically by configure. */" > conftest.h cat conftest.in >> conftest.h rm -f conftest.in if cmp -s $ac_file conftest.h 2>/dev/null; then echo "$ac_file is unchanged" rm -f conftest.h else # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" fi rm -f $ac_file mv conftest.h $ac_file fi fi; done EOF cat >> $CONFIG_STATUS < $srcdir/ext/bcmath/number.c echo "creating number.h" echo "/* Dummy File */" > $srcdir/ext/bcmath/number.h fi ################################################################ # Create configuration headers # test -d TSRM || mkdir TSRM echo '#include "../main/php_config.h"' > TSRM/tsrm_config.h test -d Zend || mkdir Zend cat >Zend/zend_config.h < main/internal_functions.c echo "creating main/internal_functions_cli.c" cli_extensions="$EXT_CLI_STATIC" sh $srcdir/build/genif.sh $srcdir/main/internal_functions.c.in $srcdir "$EXTRA_MODULE_PTRS" $AWK \$cli_extensions > main/internal_functions_cli.c # experimental things if test $PHP_SAPI = "apache2filter" ; then echo "+--------------------------------------------------------------------+" echo "| *** WARNING *** |" echo "| |" echo "| Apache 2 Support is EXPERIMENTAL and should NOT be used in |" echo "| production environment. Before submitting bug reports, try the |" echo "| latest CVS snapshot from http://snaps.php.net |" fi if test "$PHP_OVERLOAD" != "no"; then echo "+--------------------------------------------------------------------+" echo "| *** WARNING *** |" echo "| |" echo "| The overload extension is highly EXPERIMENTAL and will most |" echo "| certainly change in newer versions. You have been warned! |" fi if test "$PHP_AGGREGATE" != "no"; then echo "+--------------------------------------------------------------------+" echo "| *** WARNING *** |" echo "| |" echo "| The aggregate functions are highly EXPERIMENTAL and will most |" echo "| certainly change in newer versions. You have been warned! |" fi if test $UNAME = "FreeBSD" && test $PHP_SAPI = "apache2filter" && test $TSRM_PTH != "pth-config" ; then echo "+--------------------------------------------------------------------+" echo "| *** WARNING *** |" echo "| |" echo "| In order to build PHP as a Apache2 module on FreeBSD, you have to |" echo "| add --with-tsrm-pth to your ./configure line. Therefore you need |" echo "| to install gnu-pth from /usr/ports/devel/pth. |" fi if test -n "$PHP_APXS_BROKEN"; then echo "+--------------------------------------------------------------------+" echo "| WARNING: Your $APXS script is most likely broken." echo "| |" echo "| Please go read http://www.php.net/faq.build#faq.build.apxs |" echo "| and make the changes described there and try again. |" fi # Warn about CGI version with no extra security options. if test "$PHP_SAPI" = "cgi"; then if test "$REDIRECT" = "0"; then if test "$DISCARD_PATH" = "0"; then echo "+--------------------------------------------------------------------+" echo "| *** WARNING *** |" echo "| |" echo "| You will be compiling the CGI version of PHP without any |" echo "| redirection checking. By putting this cgi binary somewhere in |" echo "| your web space, users may be able to circumvent existing .htaccess |" echo "| security by loading files directly through the parser. See |" echo "| http://www.php.net/manual/security.php for more details. |" fi fi fi if test -n "$DEBUG_LOG"; then rm -f config.cache cat < processes when using a local Oracle-DB | | please recompile PHP and specify --enable-sigchild when configuring| | (This problem has been reported under Linux using Oracle >= 8.1.5) | X fi fi cat<> $CONFIG_STATUS <<\EOF test -z "$CONFIG_HEADERS" || echo timestamp > main/stamp-h exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 php-4.2.3/CODING_STANDARDS0100644000175200000240000002201007437347255013445 0ustar zeevstaffPHP Coding Standards ==================== This file lists several standards that any programmer, adding or changing code in PHP, should follow. Since this file was added at a very late stage of the development of PHP v3.0, the code base does not (yet) fully follow it, but it's going in that general direction. Since we are now well into the version 4 releases, many sections have been recoded to use these rules. Code Implementation ------------------- [1] Functions that are given pointers to resources should not free them For instance, function int mail(char *to, char *from) should NOT free to and/or from. Exceptions: - The function's designated behavior is freeing that resource. E.g. efree() - The function is given a boolean argument, that controls whether or not the function may free its arguments (if true - the function must free its arguments, if false - it must not) - Low-level parser routines, that are tightly integrated with the token cache and the bison code for minimum memory copying overhead. [2] Functions that are tightly integrated with other functions within the same module, and rely on each other non-trivial behavior, should be documented as such and declared 'static'. They should be avoided if possible. [3] Use definitions and macros whenever possible, so that constants have meaningful names and can be easily manipulated. The only exceptions to this rule are 0 and 1, when used as false and true (respectively). Any other use of a numeric constant to specify different behavior or actions should be done through a #define. [4] When writing functions that deal with strings, be sure to remember that PHP holds the length property of each string, and that it shouldn't be calculated with strlen(). Write your functions in a such a way so that they'll take advantage of the length property, both for efficiency and in order for them to be binary-safe. Functions that change strings and obtain their new lengths while doing so, should return that new length, so it doesn't have to be recalculated with strlen() (e.g. php_addslashes()) [5] Use php_error() to report any errors/warnings during code execution. Use descriptive error messages, and try to avoid using identical error strings for different stages of an error. For example, if in order to obtain a URL you have to parse the URL, connect, and retreive the text, assuming something can go wrong at each of these stages, don't report an error "Unable to get URL" on all of them, but instead, write something like "Unable to parse URL", "Unable to connect to URL server" and "Unable to fetch URL text", respectively. [6] NEVER USE strncat(). If you're absolutely sure you know what you're doing, check its man page again, and only then, consider using it, and even then, try avoiding it. [7] Use ZEND_* macro instead of PHP_* macro. Use of PHP_* macros are not recommended. Since most of PHP_* macros are ZEND_* macro alias, use of PHP_* macro makes browsing source with tag search harder. Naming Conventions ------------------ [1] Function names for user-level functions should be enclosed with in the PHP_FUNCTION() macro. They should be in lowercase, with words underscore delimited, with care taken to minimize the letter count. Abbreviations should not be used when they greatly decrease the readability of the function name itself. Good: 'mcrypt_enc_self_test' 'mysql_list_fields' Ok: 'mcrypt_module_get_algo_supported_key_sizes' (could be 'mcrypt_mod_get_algo_sup_key_sizes'?) 'get_html_translation_table' (could be 'html_get_trans_table'?) Bad: 'hw_GetObjectByQueryCollObj' 'pg_setclientencoding' 'jf_n_s_i' [2] If they are part of a "parent set" of functions, that parent should be included in the user function name, and should be clearly related to the parent program or function family. This should be in the form of parent_*. A family of 'foo' functions, for example: Good: 'foo_select_bar' 'foo_insert_baz' 'foo_delete_baz' Bad: 'fooselect_bar' 'fooinsertbaz' 'delete_foo_baz' [3] Function names used by user functions should be prefixed with "_php_", and followed by a word or an underscore-delimited list of words, in lowercase letters, that describes the function. If applicable, they should be declared 'static'. [4] Variable names must be meaningful. One letter variable names must be avoided, except for places where the variable has no real meaning or a trivial meaning (e.g. for (i=0; i<100; i++) ...). [5] Variable names should be in lowercase. Use underscores to separate between words. Syntax and indentation ---------------------- [1] Never use C++ style comments (i.e. // comment). Always use C-style comments instead. PHP is written in C, and is aimed at compiling under any ANSI-C compliant compiler. Even though many compilers accept C++-style comments in C code, you have to ensure that your code would compile with other compilers as well. The only exception to this rule is code that is Win32-specific, because the Win32 port is MS-Visual C++ specific, and this compiler is known to accept C++-style comments in C code. [2] Use K&R-style. Of course, we can't and don't want to force anybody to use a style he or she is not used to, but, at the very least, when you write code that goes into the core of PHP or one of its standard modules, please maintain the K&R style. This applies to just about everything, starting with indentation and comment styles and up to function declaration syntax. (see also http://www.tuxedo.org/~esr/jargon/html/entry/indent-style.html) [3] Be generous with whitespace and braces. Always prefer: if (foo) { bar; } to: if(foo)bar; Keep one empty line between the variable declaration section and the statements in a block, as well as between logical statement groups in a block. Maintain at least one empty line between two functions, preferably two. [4] When indenting, use the tab character. A tab is expected to represent four spaces. It is important to maintain consistency in indenture so that definitions, comments, and control structures line up correctly. Documentation and Folding Hooks ------------------------------- In order to make sure that the online documentation stays in line with the code, each user-level function should have its user-level function prototype before it along with a brief one-line description of what the function does. It would look like this: /* {{{ proto int abs(int number) Returns the absolute value of the number */ PHP_FUNCTION(abs) { ... } /* }}} */ The {{{ symbols are the default folding symbols for the folding mode in Emacs and vim (set fdm=marker). Folding is very useful when dealing with large files because you can scroll through the file quickly and just unfold the function you wish to work on. The }}} at the end of each function marks the end of the fold, and should be on a separate line. The "proto" keyword there is just a helper for the doc/genfuncsummary script which generates a full function summary. Having this keyword in front of the function prototypes allows us to put folds elsewhere in the code without messing up the function summary. Optional arguments are written like this: /* {{{ proto object imap_header(int stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]]) Returns a header object with the defined parameters */ And yes, please keep the prototype on a single line, even if that line is massive. New and Experimental Functions ----------------------------------- To reduce the problems normally associated with the first public implementation of a new set of functions, it has been suggested that the first implementation include a file labeled 'EXPERIMENTAL' in the function directory, and that the functions follow the standard prefixing conventions during their initial implementation. The file labelled 'EXPERIMENTAL' should include the following information: Any authoring information (known bugs, future directions of the module). Ongoing status notes which may not be appropriate for CVS comments. Aliases & Legacy Documentation ----------------------------------- You may also have some deprecated aliases with close to duplicate names, for example, somedb_select_result and somedb_selectresult. For documentation purposes, these will only be documented by the most current name, with the aliases listed in the documentation for the parent function. For ease of reference, user-functions with completely different names, that alias to the same function (such as highlight_file and show_source), will be separately documented. The proto should still be included, describing which function is aliased. Backwards compatible functions and names should be maintained as long as the code can be reasonably be kept as part of the codebase. See /phpdoc/README for more information on documentation. php-4.2.3/CREDITS0100644000175200000240000000013707167177442012201 0ustar zeevstaffFor the list of people who've put work into PHP 4.0, please see http://www.php.net/credits.php php-4.2.3/ltmain.sh0100644000175200000240000041611007535765574013013 0ustar zeevstaff# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" # Parse our command line options once, thoroughly. while test $# -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" exit 0 ;; --config) sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 exit 0 ;; --debug) echo "$progname: enabling shell trace mode" set -x ;; --dry-run | -n) run=: ;; --features) echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit 0 ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --quiet | --silent) show=: ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit 1 ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then case $nonopt in *cc | *++ | gcc* | *-gcc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit 1 fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= prev= lastarg= srcfile="$nonopt" suppress_output= user_target=no for arg do case $prev in "") ;; xcompiler) # Aesthetically quote the previous argument. prev= lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac # Add the previous argument to base_compile. if test -z "$base_compile"; then base_compile="$lastarg" else base_compile="$base_compile $lastarg" fi continue ;; esac # Accept any command-line options. case $arg in -o) if test "$user_target" != "no"; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit 1 fi user_target=next ;; -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; -Xcompiler) prev=xcompiler continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= IFS="${IFS= }"; save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. if test -z "$base_compile"; then base_compile="$lastarg" else base_compile="$base_compile $lastarg" fi continue ;; esac case $user_target in next) # The next one is the -o target name user_target=yes continue ;; yes) # We got the output file user_target=set libobj="$arg" continue ;; esac # Accept the current argument as the source file. lastarg="$srcfile" srcfile="$arg" # Aesthetically quote the previous argument. # Backslashify any backslashes, double quotes, and dollar signs. # These are the only characters that are still specially # interpreted inside of double-quoted scrings. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $lastarg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac # Add the previous argument to base_compile. if test -z "$base_compile"; then base_compile="$lastarg" else base_compile="$base_compile $lastarg" fi done case $user_target in set) ;; no) # Get the name of the library object. libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; *) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit 1 ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSfmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit 1 ;; esac if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit 1 fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $libobj" else removelist="$libobj" fi $run $rm $removelist trap "$run $rm $removelist; exit 1" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit 1" 1 2 15 else need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$0" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then # All platforms use -DPIC, to notify preprocessed assembler code. command="$base_compile $srcfile $pic_flag -DPIC" else # Don't build PIC code command="$base_compile $srcfile" fi if test "$build_old_libs" = yes; then lo_libobj="$libobj" dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$libobj"; then dir="$objdir" else dir="$dir/$objdir" fi libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` if test -d "$dir"; then $show "$rm $libobj" $run $rm $libobj else $show "$mkdir $dir" $run $mkdir $dir status=$? if test $status -ne 0 && test ! -d $dir; then exit $status fi fi fi if test "$compiler_o_lo" = yes; then output_obj="$libobj" command="$command -o $output_obj" elif test "$compiler_c_o" = yes; then output_obj="$obj" command="$command -o $output_obj" fi $run $rm "$output_obj" $show "$command" if $run eval "$command"; then : else test -n "$output_obj" && $run $rm $removelist exit 1 fi if test "$need_locks" = warn && test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi # Just move the object if needed, then go on to compile the next one if test x"$output_obj" != x"$libobj"; then $show "$mv $output_obj $libobj" if $run $mv $output_obj $libobj; then : else error=$? $run $rm $removelist exit $error fi fi # If we have no pic_flag, then copy the object into place and finish. if (test -z "$pic_flag" || test "$pic_mode" != default) && test "$build_old_libs" = yes; then # Rename the .lo from within objdir to obj if test -f $obj; then $show $rm $obj $run $rm $obj fi $show "$mv $libobj $obj" if $run $mv $libobj $obj; then : else error=$? $run $rm $removelist exit $error fi xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` # Now arrange that obj and lo_libobj become the same file $show "(cd $xdir && $LN_S $baseobj $libobj)" if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then exit 0 else error=$? $run $rm $removelist exit $error fi fi # Allow error messages only from the first compilation. suppress_output=' >/dev/null 2>&1' fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $srcfile" else # All platforms use -DPIC, to notify preprocessed assembler code. command="$base_compile $srcfile $pic_flag -DPIC" fi if test "$compiler_c_o" = yes; then command="$command -o $obj" output_obj="$obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" $run $rm "$output_obj" $show "$command" if $run eval "$command"; then : else $run $rm $removelist exit 1 fi if test "$need_locks" = warn && test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi # Just move the object if needed if test x"$output_obj" != x"$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Create an invalid libtool object if no PIC, so that we do not # accidentally link it into a program. if test "$build_libtool_libs" != yes; then $show "echo timestamp > $libobj" $run eval "echo timestamp > \$libobj" || exit $? else # Move the .lo from within objdir $show "$mv $libobj $lo_libobj" if $run $mv $libobj $lo_libobj; then : else error=$? $run $rm $removelist exit $error fi fi fi # Unlock the critical section if it was locked if test "$need_locks" != no; then $run $rm "$lockfile" fi exit 0 ;; # libtool link mode link | relink) modename="$modename: link" case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invokation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args="$nonopt" compile_command="$nonopt" finalize_command="$nonopt" compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` avoid_version=no dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= # We need to know -static, to get the right output filenames. for arg do case $arg in -all-static | -static) if test "X$arg" = "X-all-static"; then if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test $# -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit 1 fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n $prev prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit 1 fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit 1 fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-mingw* | *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -o) prev=output ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= IFS="${IFS= }"; save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= IFS="${IFS= }"; save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.lo | *.$objext) # A library or standard object. if test "$prev" = dlfiles; then # This file was specified with -dlopen. if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $arg" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` prev= else case $arg in *.lo) libobjs="$libobjs $arg" ;; *) objs="$objs $arg" ;; esac fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d $output_objdir; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test $status -ne 0 && test ! -d $output_objdir; then exit $status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit 1 ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac libs="$libs $deplib" done deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit 1 ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test $linkmode = prog; then # Determine which files to process case $pass in dlopen) libs="$dlfiles" save_deplibs="$deplibs" # Collect dlpreopened libraries deplibs= ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi for deplib in $libs; do lib= found=no case $deplib in -l*) if test $linkmode = oldlib && test $linkmode = obj; then $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2 continue fi if test $pass = conv; then deplibs="$deplib $deplibs" continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do # Search the libtool library lib="$searchdir/lib${name}.la" if test -f "$lib"; then found=yes break fi done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test $pass = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test $pass = conv; then deplibs="$deplib $deplibs" continue fi if test $pass = scan; then deplibs="$deplib $deplibs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test $pass = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test $pass = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) if test "$deplibs_check_method" != pass_all; then echo echo "*** Warning: This library needs some functionality provided by $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." else echo echo "*** Warning: Linking the shared library $output against the" echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test $pass != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test $found = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib'" 1>&2 exit 1 fi # Check to see that this really is a libtool archive. if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variable installed. installed=yes # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test $linkmode = oldlib && test $linkmode = obj; }; then # Add dl[pre]opened files of deplib test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test $pass = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit 1 fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac tmp_libs="$tmp_libs $deplib" done elif test $linkmode != prog && test $linkmode != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit 1 fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit 1 fi # This library was specified with -dlopen. if test $pass = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit 1 fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. dlprefiles="$dlprefiles $lib" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test $pass = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit 1 fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test $linkmode = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" fi continue fi if test $linkmode = prog && test $pass != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test $linkalldeplibs = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... link_static=no # Whether the deplib will be linked statically if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # Link against this shared library if test "$linkmode,$pass" = "prog,link" || { test $linkmode = lib && test $hardcode_into_libs = yes; }; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac if test $linkmode = prog; then # We need to hardcode the library path if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi fi fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`echo $soroot | sed -e 's/^.*\///'` newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' eval cmds=\"$extract_expsyms_cmds\" for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' eval cmds=\"$old_archive_from_expsyms_cmds\" for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n $old_archive_from_expsyms_cmds if test $linkmode = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit 1 fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test $linkmode = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test $linkmode = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" add="-l$name" fi if test $linkmode = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test $linkmode = prog; then if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi # Try to link the static library # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo echo "*** Warning: This library needs some functionality provided by $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** Therefore, libtool will create a static module, that should work " echo "*** as long as the dlopening application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test $linkmode = lib; then if test -n "$dependency_libs" && { test $hardcode_into_libs != yes || test $build_old_libs = yes || test $link_static = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac tmp_libs="$tmp_libs $deplib" done if test $link_all_deplibs != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="-L$absdir/$objdir" else eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit 1 fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="-L$absdir" fi ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$deplibs $path" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test $pass = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test $pass != dlopen; then test $pass != scan && dependency_libs="$newdependency_libs" if test $pass != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do case $deplib in -L*) new_libs="$deplib $new_libs" ;; *) case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi if test "$pass" = "conv" && { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then libs="$deplibs" # reset libs deplibs= fi done # for pass if test $linkmode = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit 1 fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit 1 else echo echo "*** Warning: Linking the shared library $output against the non-libtool" echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test $# -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. libext=al oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit 1 fi current="$2" revision="$3" age="$4" # Check that each of the things are valid numbers. case $current in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case $revision in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case $age in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac if test $age -gt $current; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix) major=`expr $current - $age + 1` verstring="sgi$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test $loop != 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="sgi$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test $loop != 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= verstring="0.0" if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs. $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'` deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'` dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test $hardcode_into_libs != yes || test $build_old_libs = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *) # Add libc to deplibs on all other systems if necessary. if test $build_libtool_need_lc = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behaviour. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | sed 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | sed 10q \ | egrep "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done if test -n "$a_deplib" ; then droppeddeps=yes echo echo "*** Warning: This library needs some functionality provided by $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do if eval echo \"$potent_lib\" 2>/dev/null \ | sed 10q \ | egrep "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done if test -n "$a_deplib" ; then droppeddeps=yes echo echo "*** Warning: This library needs some functionality provided by $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | grep . >/dev/null; then echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" echo "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test $allow_undefined = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test $hardcode_into_libs = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi test -z "$dlname" && dlname=$soname lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Ensure that we have .o objects for linkers which dislike .lo # (e.g. aix) in case we are running --disable-static for obj in $libobjs; do xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` if test ! -f $xdir/$oldobj; then $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? fi done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols eval cmds=\"$export_symbols_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval cmds=\"$archive_expsym_cmds\" else eval cmds=\"$archive_cmds\" fi IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? exit 0 fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit 1 fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" eval cmds=\"$reload_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. $show "echo timestamp > $libobj" $run eval "echo timestamp > $libobj" || exit $? exit 0 fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" eval cmds=\"$reload_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" else # Just create a symlink. $show $rm $libobj $run $rm $libobj xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$libobj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` $show "(cd $xdir && $LN_S $oldobj $baseobj)" $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 ;; prog) case $host in *cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`echo "$arg" | sed -e 's%^.*/%%'` $run eval 'echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = {\ " sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \ -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \ < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr_t) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DPIC";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit 1 ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test $need_relink = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit 0 fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="cd `pwd`; $relink_command" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $0 --fallback-echo"; then case $0 in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; *) qecho="$SHELL `pwd`/$0 --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`echo $output|sed 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe ;; *) exeext= ;; esac $rm $output trap "$rm $output; exit 1" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if (eval \$relink_command); then : else $rm \"\$progdir/\$file\" exit 1 fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # win32 systems need to use the prog path for dll # lookup to work *-*-cygwin* | *-*-pw32*) $echo >> $output "\ exec \$progdir/\$program \${1+\"\$@\"} " ;; # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ # Export the path to the program. PATH=\"\$progdir:\$PATH\" export PATH exec \$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit 1 fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " chmod +x $output fi exit 0 ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then eval cmds=\"$old_archive_from_new_cmds\" else # Ensure that we have .o objects in place in case we decided # not to build a shared library, and have fallen back to building # static libs even though --disable-static was passed! for oldobj in $oldobjs; do if test ! -f $oldobj; then xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$oldobj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` $show "(cd $xdir && ${LN_S} $obj $baseobj)" $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? fi done eval cmds=\"$old_archive_cmds\" fi IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit 1 fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test $need_relink = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit 0 ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit 1 fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test $# -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit 1 fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 continue fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test $# -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" eval cmds=\"$postinstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit 0 ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then notinst_deplibs= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 exit 1 fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : else $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi file=`$echo "X$file" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyways case $install_prog,$host in /usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`echo $destfile | sed -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. eval cmds=\"$old_postinstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec $SHELL $0 --finish$current_libdirs exit 1 fi exit 0 ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. eval cmds=\"$finish_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = ":" && exit 0 echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do echo " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" echo "more information, such as the ld(1) and ld.so(8) manual pages." echo "----------------------------------------------------------------------" exit 0 ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit 1 fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit 1 fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit 1 fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved enviroment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now actually exec the command. eval "exec \$cmd$args" $echo "$modename: cannot exec \$cmd$args" exit 1 else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit 0 fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit 1 fi rmdirs= for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$objdir" else objdir="$dir/$objdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test $mode = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test $mode = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" if test $mode = uninstall; then if test -n "$library_names"; then # Do each command in the postuninstall commands. eval cmds=\"$postuninstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" if test $? != 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. eval cmds=\"$old_postuninstall_cmds\" IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" if test $? != 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi fi ;; *.lo) if test "$build_old_libs" = yes; then oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` rmfiles="$rmfiles $dir/$oldobj" fi ;; *) # Do a test to see if this is a libtool program. if test $mode = clean && (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$file rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit 1 ;; esac $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit 1 fi # test -z "$show_help" # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE." exit 0 ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac echo $echo "Try \`$modename --help' for more information about other modes." exit 0 # Local Variables: # mode:shell-script # sh-indentation:2 # End: php-4.2.3/acconfig.h0100644000175200000240000000300507535765605013103 0ustar zeevstaff/* Leave this file alone */ #define ZEND_API #define ZEND_DLEXPORT @TOP@ #undef uint #undef ulong /* Define if you want to enable memory limit support */ #define MEMORY_LIMIT 0 @BOTTOM@ #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_IEEEFP_H # include #endif #ifdef HAVE_STRING_H # include #else # include #endif #if ZEND_BROKEN_SPRINTF int zend_sprintf(char *buffer, const char *format, ...); #else # define zend_sprintf sprintf #endif #include #ifdef HAVE_ISNAN #define zend_isnan(a) isnan(a) #elif defined(NAN) #define zend_isnan(a) (((a)==NAN)?1:0) #elif defined(HAVE_FPCLASS) #define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) #else #define zend_isnan(a) 0 #endif #ifdef HAVE_ISINF #define zend_isinf(a) isinf(a) #elif defined(INFINITY) /* Might not work, but is required by ISO C99 */ #define zend_isinf(a) (((a)==INFINITY)?1:0) #elif defined(HAVE_FPCLASS) #define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF)) #else #define zend_isinf(a) 0 #endif #ifdef HAVE_FINITE #define zend_finite(a) finite(a) #elif defined(HAVE_ISFINITE) || defined(isfinite) #define zend_finite(a) isfinite(a) #elif defined(fpclassify) #define zend_finite(a) ((fpclassify((a))!=FP_INFINITE&&fpclassify((a))!=FP_NAN)?1:0) #else #define zend_finite(a) (zend_isnan(a) ? 0 : zend_isinf(a) ? 0 : 1) #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ #undef PTHREADS php-4.2.3/config.guess0100644000175200000240000011265307535765574013515 0ustar zeevstaff#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. timestamp='2025-11-08' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi dummy=dummy-$$ trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int dummy(){}" > $dummy.c ; for c in cc gcc c89 ; do ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; if test $? = 0 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; rm -f $dummy.c $dummy.o $dummy.rel ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 2025-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # Determine the machine/vendor (is the vendor relevant). case "${UNAME_MACHINE}" in amiga) machine=m68k-unknown ;; arm32) machine=arm-unknown ;; atari*) machine=m68k-atari ;; sun3*) machine=m68k-sun ;; mac68k) machine=m68k-apple ;; macppc) machine=powerpc-apple ;; hp3[0-9][05]) machine=m68k-hp ;; ibmrt|romp-ibm) machine=romp-ibm ;; sparc*) machine=`uname -p`-unknown ;; *) machine=${UNAME_MACHINE}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE}" in i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <$dummy.s .data \$Lformat: .byte 37,100,45,37,120,10,0 # "%d-%x\n" .text .globl main .align 4 .ent main main: .frame \$30,16,\$26,0 ldgp \$29,0(\$27) .prologue 1 .long 0x47e03d80 # implver \$0 lda \$2,-1 .long 0x47e20c21 # amask \$2,\$1 lda \$16,\$Lformat mov \$0,\$17 not \$1,\$18 jsr \$26,printf ldgp \$29,0(\$26) mov 0,\$16 jsr \$26,exit .end main EOF eval $set_cc_for_build $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then case `./$dummy` in 0-0) UNAME_MACHINE="alpha" ;; 1-0) UNAME_MACHINE="alphaev5" ;; 1-1) UNAME_MACHINE="alphaev56" ;; 1-101) UNAME_MACHINE="alphapca56" ;; 2-303) UNAME_MACHINE="alphaev6" ;; 2-307) UNAME_MACHINE="alphaev67" ;; 2-1307) UNAME_MACHINE="alphaev68" ;; esac fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy` if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi rm -f $dummy.c $dummy fi ;; esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*X-MP:*:*:*) echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3D:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i386-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in big) echo mips-unknown-linux-gnu && exit 0 ;; little) echo mipsel-unknown-linux-gnu && exit 0 ;; esac ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. ld_supported_targets=`cd /; ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build cat >$dummy.c < #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 printf ("%s-pc-linux-gnu\n", argv[1]); # else printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif # else printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif #else printf ("%s-pc-linux-gnuaout\n", argv[1]); #endif return 0; } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) echo `uname -p`-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) if test "${UNAME_MACHINE}" = "x86pc"; then UNAME_MACHINE=pc fi echo `uname -p`-${UNAME_MACHINE}-nto-qnx exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[KW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: php-4.2.3/EXTENSIONS0100644000175200000240000004704107443200106012565 0ustar zeevstaff List of PHP maintainers ======================= Maintenance legend ------------------ Supported: Someone is actually paid to look after this. Maintained: Someone actually looks after it. Odd Fixes: It has a maintainer but they don't have time to do much other than throw the odd patch in. See below. Orphan: No current maintainer [but maybe you could take the role as you write your new code]. Obsolete: Old code. Something tagged obsolete generally means it has been replaced by a better system and you should be using that. Unknown: Not known at this time. Status legend ------------- Working: Working under both Windows and Unix. Windows: Working only under Windows. Unix: Working only under Unix. Experimental: Under development or initial release. Not Working: Not working. Unknown: Status unknown. == Server APIs == ------------------------------------------------------------------------------- EXTENSION: aolserver MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: apache PRIMARY MAINTAINER: Rasmus Lerdorf MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: cgi MAINTENANCE: Unknown STATUS: Working ------------------------------------------------------------------------------- EXTENSION: fhttpd MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: isapi MAINTENANCE: Unknown STATUS: Working ------------------------------------------------------------------------------- EXTENSION: nsapi MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: phttpd MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: pi3web MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: roxen MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: servlet PRIMARY MAINTAINER: Sam Ruby MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: thttpd MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: webjames PRIMARY MAINTAINER: Alex Waugh MAINTENANCE: Maintained STATUS: Experimental ------------------------------------------------------------------------------- == Database extensions == ------------------------------------------------------------------------------- EXTENSION: dba PRIMARY MAINTAINER: Sascha Schumann MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: dbase PRIMARY MAINTAINER: Jim Winstead MAINTENANCE: Odd Fixes STATUS: Working ------------------------------------------------------------------------------- EXTENSION: dbx PRIMARY MAINTAINER: Marc Boeren MAINTENANCE: Maintained STATUS: Working SINCE: 4.0.6 COMMENT: DB abstraction for odbc, mysql, pgsql, mssql, fbsql and more, see documentation ------------------------------------------------------------------------------- EXTENSION: filepro MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: hyperwave PRIMARY MAINTAINER: Uwe Steinmann MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: informix PRIMARY MAINTAINER: Danny Heijl MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: ingres_ii PRIMARY MAINTAINER: David Hénot MAINTENANCE: Maintained STATUS: Experimental SINCE: 4.0.2 ------------------------------------------------------------------------------- EXTENSION: interbase PRIMARY MAINTAINER: Jouni Ahto MAINTENANCE: Odd Fixes STATUS: Working ------------------------------------------------------------------------------- EXTENSION: msql MAINTENANCE: Unknown STATUS: Working ------------------------------------------------------------------------------- EXTENSION: msession PRIMARY MAINTAINER Mark L. Woodward mlwmohawk@mohawksoft.com MAINTENANCE: Maintained STATUS: Working/Experimental COMMENT: Tested on Linux, should work on other UNIX platforms. Backend server code can compile under Windows. ------------------------------------------------------------------------------- EXTENSION: mssql PRIMARY MAINTAINER: Frank M. Kromann MAINTENANCE: Maintained STATUS: Working COMMENT: Tested on phpts and isapi versions ------------------------------------------------------------------------------- EXTENSION: mysql MAINTENANCE: Unknown STATUS: Working ------------------------------------------------------------------------------- EXTENSION: pgsql PRIMARY MAINTAINER: Yasuo Ohgaki MAINTENANCE: Maintained STATUS: Working COMMENT: Use PostgreSQL 7.0.x or later. PostgreSQL 6.5.3 or less have fatal bug. ------------------------------------------------------------------------------- EXTENSION: sybase MAINTENANCE: Unknown STATUS: Not Working ------------------------------------------------------------------------------- EXTENSION: sybase_ct MAINTENANCE: Unknown STATUS: Working ------------------------------------------------------------------------------- EXTENSION: oci8 PRIMARY MAINTAINER: Thies C. Arntzen MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: odbc PRIMARY MAINTAINER: Daniel R. Kalowsky MAINTENANCE: Maintained STATUS: Working COMMENT: Working except for persistent connections ------------------------------------------------------------------------------- EXTENSION: oracle PRIMARY MAINTAINER: Thies C. Arntzen MAINTENANCE: Maintained STATUS: Working COMMENT: Using the new OCI8 driver is encouraged where possible. ------------------------------------------------------------------------------- == Other extensions == ------------------------------------------------------------------------------- EXTENSION: aspell MAINTENANCE: Unknown STATUS: Working COMMENT: For aspell .27 and greater, check out the pspell extension ------------------------------------------------------------------------------- EXTENSION: bcmath MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: bz2 PRIMARY MAINTAINER: Sterling Hughes MAINTENANCE: Maintained STATUS: Working SINCE: 4.0.3 ------------------------------------------------------------------------------- EXTENSION: calendar PRIMARY MAINTAINER: Hartmut Holzgraefe MAINTENANCE: Odd Fixes STATUS: Working ------------------------------------------------------------------------------- EXTENSION: com PRIMARY MAINTAINER: Harald Radi MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: cpdf PRIMARY MAINTAINER: Uwe Steinmann MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: crack MAINTENANCE: Unknown STATUS: Experimental SINCE: 4.0.5 ------------------------------------------------------------------------------- EXTENSION: curl PRIMARY MAINTAINER: Sterling Hughes MAINTENANCE: Maintained STATUS: Working SINCE: 4.0.2 ------------------------------------------------------------------------------- EXTENSION: cybercash PRIMARY MAINTAINER: Evan Klinger MAINTENANCE: Maintained STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: domxml PRIMARY MAINTAINER: Uwe Steinmann MAINTENANCE: Maintained STATUS: Experimental ------------------------------------------------------------------------------- EXTENSION: dotnet PRIMARY MAINTAINER: Sam Ruby MAINTENANCE: Maintained STATUS: Experimental ------------------------------------------------------------------------------- EXTENSION: exif PRIMARY MAINTAINER: Marcus Boerger MAINTENANCE: Maintained STATUS: Working SINCE: 4.2 ------------------------------------------------------------------------------- EXTENSION: fdf PRIMARY MAINTAINER: Uwe Steinmann MAINTENANCE: Maintained STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: ftp MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: gd PRIMARY MAINTAINER: Rasmus Lerdorf MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: gettext MAINTENANCE: Unknown STATUS: Working ------------------------------------------------------------------------------- EXTENSION: gmp MAINTENANCE: Unknown STATUS: Unknown SINCE: 4.0.4 ------------------------------------------------------------------------------- EXTENSION: icap MAINTENANCE: Unknown STATUS: Obsolete ------------------------------------------------------------------------------- EXTENSION: imap PRIMARY MAINTAINER: Chuck Hagenbuch MAINTENANCE: Odd Fixes STATUS: Working ------------------------------------------------------------------------------- EXTENSION: java PRIMARY MAINTAINER: Sam Ruby MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: ldap PRIMARY MAINTAINER: Stig Venaas MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: mbstring PRIMARY MAINTAINER: Rui Hirokawa MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: mcal PRIMARY MAINTAINER: Chuck Hagenbuch MAINTENANCE: Odd Fixes STATUS: Working ------------------------------------------------------------------------------- EXTENSION: mcrypt PRIMARY MAINTAINER: Derick Rethans MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: mhash PRIMARY MAINTAINER: Sascha Schumann MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: muscat PRIMARY MAINTAINER: Sam Liddicott MAINTENANCE: Maintained STATUS: Working SINCE: 4.0.5 COMMENT: Not tested against windows, only core API completed, rest under development ------------------------------------------------------------------------------- EXTENSION: openssl PRIMARY MAINTAINER: Wez Furlong MAINTENANCE: Maintained STATUS: Experimental SINCE: 4.0.4 ------------------------------------------------------------------------------- EXTENSION: overload PRIMARY MAINTAINER: Andrei Zmievski MAINTENANCE: Maintained STATUS: Experimental ------------------------------------------------------------------------------- EXTENSION: pcre PRIMARY MAINTAINER: Andrei Zmievski MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: pdf PRIMARY MAINTAINER: Uwe Steinmann MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: pfpro PRIMARY MAINTAINER: David Croft MAINTENANCE: Maintained STATUS: Working SINCE: 4.0.2 ------------------------------------------------------------------------------- EXTENSION: posix PRIMARY MAINTAINER: Kristian Köhntopp MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: printer PRIMARY MAINTAINER: Daniel Beulshausen MAINTENANCE: Maintained STATUS: Working SINCE: 4.0.4 COMMENT: Only for Win32 ------------------------------------------------------------------------------- EXTENSION: pspell PRIMARY MAINTAINER: Vlad Krupin MAINTENANCE: Unknown STATUS: Unknown SINCE: 4.0.2 ------------------------------------------------------------------------------- EXTENSION: qtdom MAINTENANCE: Unknown STATUS: Experimental SINCE: 4.0.4 ------------------------------------------------------------------------------- EXTENSION: readline MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: recode PRIMARY MAINTAINER: Kristian Köhntopp MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: sablot PRIMARY MAINTAINER: Sterling Hughes MAINTENANCE: Obsolete STATUS: Experimental SINCE: 4.0.3 ------------------------------------------------------------------------------- EXTENSION: satellite PRIMARY MAINTAINER: David Eriksson MAINTENANCE: Odd Fixes STATUS: Experimental SINCE: 4.0.3 ------------------------------------------------------------------------------- EXTENSION: session PRIMARY MAINTAINER: Sascha Schumann MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: shmop PRIMARY MAINTAINER: Ilia Alshanetsky MAINTENANCE: Maintained STATUS: Experimental SINCE: 4.0.3 ------------------------------------------------------------------------------- EXTENSION: snmp PRIMARY MAINTAINER: Rasmus Lerdorf MAINTENANCE: Odd Fixes STATUS: Working ------------------------------------------------------------------------------- EXTENSION: sockets PRIMARY MAINTAINER: Chris Vandomelen MAINTENANCE: Maintained STATUS: Experimental SINCE: 4.0.2 ------------------------------------------------------------------------------- EXTENSION: swf PRIMARY MAINTAINER: Sterling Hughes MAINTENANCE: Maintained STATUS: Depreciated (Use the ming swf extension instead) COMMENT: Only for Unix (won't change) ------------------------------------------------------------------------------- EXTENSION: sysvsem MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: sysvshm MAINTENANCE: Unknown STATUS: Working ------------------------------------------------------------------------------- EXTENSION: vpopmail MAINTENANCE: Unknown STATUS: Experimental SINCE: 4.0.5 ------------------------------------------------------------------------------- EXTENSION: wddx PRIMARY MAINTAINER: Andrei Zmievski MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: xml PRIMARY MAINTAINER: Thies C. Arntzen MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: xslt PRIMARY MAINTAINER: Sterling Hughes MAINTENANC: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: yaz PRIMARY MAINTAINER: Adam Dickmeiss MAINTENANCE: Maintained STATUS: Unknown SINCE: 4.0.1 ------------------------------------------------------------------------------- EXTENSION: yp MAINTENANCE: Unknown STATUS: Unknown ------------------------------------------------------------------------------- EXTENSION: zlib PRIMARY MAINTAINER: Stefan Roehrich MAINTENANCE: Maintained STATUS: Working ------------------------------------------------------------------------------- EXTENSION: zziplib PRIMARY MAINTAINER: Sterling Hughes MAINTENANCE: Maintained STATUS: Experimental SINCE: 4.0.5 ------------------------------------------------------------------------------- # iptc? php-4.2.3/INSTALL0100644000175200000240000003535607470433373012220 0ustar zeevstaffInstallation Instructions for PHP 4 ----------------------------------- STOP! Before going any further, please remember you are going to find more up to date instructions in the online manual, located here: http://www.php.net/manual/en/install.apache.php It is strongly recommended that you read the manual page before going further. However, for the impatient, here is a quick set of steps that will build PHP as (first) a dynamic Apache module (DSO) for Apache 1.3.x with MySQL support and then a static module. A more verbose explanation follows. For installing PHP on other web servers, refer to one of the following files: sapi/aolserver/README sapi/pi3web/README sapi/servlet/README sapi/thttpd/README README.Zeus Some notes: 1: Only install either the static module or the dynamic one. Do not install both. 2: If you are recompiling PHP to add new extensions or upgrading something like GD, remove the config.cache file before you re-run configure. 3: If you are on Linux and have installed shared libraries, make sure the location of these shared libraries are listed in your /etc/ld.so.conf file. For example, if you have: /usr/local/lib/mysql/libmysqlclient.so Make sure /etc/ld.so.conf contains: /usr/local/lib/mysql Then run ldconfig. If you want both PHP 3 and 4 modules in the same Apache server, check the bottom of this file for instructions. INSTALLATION WITH THE ZEUS WEB SERVER: --Please see the 'README.Zeus' file included in this distribution QUICK INSTALL (DSO) For this to work your Apache httpd must have mod_so enabled. Check using httpd -l. You should see something like: Compiled-in modules: http_core.c mod_so.c Chances are you will see a lot more modules than these two. That's ok, as long as mod_so.c shows up you can proceed with the following steps: $ gunzip -c php-4.x.y.tar.gz | tar xf - $ cd php-4.x.y $ ./configure --with-mysql --with-apxs $ make $ make install If you get an error telling you that the apxs script could not be found, look for it on your system and if you find it, provide the full path to it as: --with-apxs=/path/to/apxs Next you must copy php.ini-dist to the appropriate place (normally /usr/local/lib/php.ini) and edit it as necessary to set PHP options. The only thing left to do is to edit your httpd.conf file and make sure the PHP 4 mime type is there and uncommented. You need a line that looks like this: AddType application/x-httpd-php .php Then restart your server (apachectl restart) and you should be able to serve up PHP files now. Make a test file called test.php and put some PHP tags in it. Like , for example. QUICK INSTALL (Static) $ gunzip -c apache_1.3.x.tar.gz | tar xf - $ cd apache_1.3.x $ ./configure $ cd .. $ gunzip -c php-4.x.y.tar.gz | tar xf - $ cd php-4.x.y $ ./configure --with-mysql --with-apache=../apache_1.3.x $ make $ make install $ cd ../apache_1.3.x $ ./configure --prefix=/www --activate-module=src/modules/php4/libphp4.a (The above line is correct! Yes, we know libphp4.a does not exist at this stage. It isn't supposed to. It will be created.) $ make (you should now have an httpd binary which you can copy to your Apache bin dir if is is your first install then you need to "make install" as well) $ cd ../php-4.x.y $ cp php.ini-dist /usr/local/lib/php.ini You can edit /usr/local/lib/php.ini file to set PHP options. Edit your httpd.conf or srm.conf file and add: AddType application/x-httpd-php .php VERBOSE INSTALL Chances are you are reading this because the quick install steps above did not work for you. If this is the case, congratulations, you are among the elite few that actually reads documentation. It really is not a difficult install and once you have done it once you will fly through it. Installing PHP can be done in four simple steps: 1. Unpack your distribution file. You will have downloaded a file named something like php-4.x.y.tar.gz. Unzip this file with a command like: gunzip php-4.x.y.tar.gz Next you have to untar it with: tar -xvf php-4.x.y.tar This will create a php-4.x.y directory. cd into this new directory. 2a. Configure PHP (Dynamic Module) - Skip to 2b if you wish to build a static module You now have to choose the options you would like. There are quite a few of them. To see a list, type: ./configure --help The only options that you are likely to want to use are the ones in the last section entitled, "--enable and --with options recognized:" A popular choice is to build the Apache module version. In order to build PHP as a dynamic module for Apache-1.3.x you have to first have Apache installed. Assuming Apache is already installed, make sure the shared object module is enabled. To check this, type: httpd -l You should see something like: Compiled-in modules: http_core.c mod_so.c You will most likely have a lot more modules than what is shown here. As long as mod_so.c shows up in the list, PHP should be happy. Now, type: ./configure --with-mysql --with-apxs If you get an error telling you that the apxs script could not be found, look for it on your system and if you find it, provide the full path to it as: --with-apxs=/path/to/apxs You might also want other flags on this configure line. --with-mysql is just an example. There are a few things that can go wrong during this configure step. The most common is that you have asked for an option and that the configure script can not find the files required to enable this option in PHP. Chances are you can provide the full path to the base directory under which the related files were installed. For example, if you have installed the GD library in /opt/gd which means that /opt/gd/include has your GD header files and /opt/gd/lib contains your GD library files, you would use --with-gd=/opt/gd Skip to step 3 for compilation and installation instructions. 2b. Configure PHP (Static Module) - Skip if you performed 2a You now have to choose the options you would like. There are quite a few of them. To see a list, type: ./configure --help The only options that you are likely to want to use are the ones in the last section entitled, "--enable and --with options recognized:" A popular choice is to build the Apache module version. You need to know where the source code directory for your Apache server is located. Then use an option like: --with-apache=/usr/local/src/apache if that is your Apache source code directory. If you only specify --with-apache, then it will default to look for your Apache source in /usr/local/etc/httpd. NOTE: The directory you specify should be the top-level of the unpacked Apache (or Stronghold) distribution. The configure program will automatically look for httpd.h in different directories under that location depending on which version of Apache, including Stronghold, you are running. For MySQL support, since newer versions of MySQL installs its various components under /usr/local, this is the default. If you have changed the location you can specify it with: --with-mysql=/opt/local for example. Otherwise just use: --with-mysql *NOTE* If you are using Apache 1.3b6 or later, you should run the Apache Configure script at least once before compiling PHP. It doesn't matter how you have Apache configured at this point. Skip to step 3b at this point. 3. Compile and install the files. Simply type: make install 3a. Dynamic Module Installation Nothing else is needed here. Proceed to step 4a. 3b. Static Module Installation For the Apache module version this will copy the appropriate files to the src/modules/php4 directory in your Apache distribution if you are using Apache 1.3.x. If you are still running Apache 1.2.x these files will be copied directly to the main src directory. For Apache 1.3b6 and later, you can use the new APACI configuration mechanism. To automatically build Apache with PHP support, use: cd apache_1.3.x ./configure --prefix=//apache \ --activate-module=src/modules/php4/libphp4.a make make install If you do not wish to use this new configuration tool, the old install procedure (src/Configure) will work fine. If you are using the old Apache ./Configure script, you will have to edit the Apache src/Configuration file manually. If you do not have this file, copy Configuration.tmpl to Configuration. For Apache 1.3.x add: AddModule modules/php4/libphp4.a For Apache 1.3.x don't do anything else. Just add this line and then run "./Configure" followed by "make". For Apache 1.2.x add: Module php4_module mod_php4.o For Apache 1.2.x you will also have to look in the libphp4.module file, which was copied to the src directory. The EXTRA_LIBS line in the Apache Configuration file needs to be set to use the same libs as specified on the LIBS line in libphp4.module. You also need to make sure to add "-L." to the beginning of the EXTRA_LIBS line. So, as an example, your EXTRA_LIBS line might look like: EXTRA_LIBS=-L. -lphp4 -lgdbm -ldb -L/usr/local/mysql/lib -lmysqlclient NOTE: You should not enclose the EXTRA_LIBS line in double-quotes, as it is in the libphp4.module file. Also, look at the RULE_WANTHSREGEX setting in the libphp4.module file and set the WANTHSREGEX directive accordingly in your Configuration file. This last step applies to versions of Apache prior to 1.3b3. This is a bit of a hassle, but should serve as incentive to move to Apache 1.3.x where this step has been eliminated. Once you are satisfied with your Configuration settings, type: ./Configure If you get errors, chances are that you forgot a library or made a typo somewhere. Re-edit Configuration and try again. If it goes well, type: make Assuming it compiles without errors, proceed to step 4b. 4a. Setting up the server. (Dynamic Module) The make install command in step 3 should have done most of your work for you. It actually edits your httpd.conf file and tries to enable the dynamic PHP module. To verify this, look for a line that looks like this: LoadModule php4_module libexec/libphp4.so The actual path before the libphp4.so part might differ slightly. This is likely fine. If you are paranoid you can examine the output from the make install step to see where the libphp4.so file was actually put and place the full path to this file on this LoadModule line. If somewhere in your httpd.conf file you have a ClearModuleList line then you also need this line: AddModule mod_php4.c And finally you need to tell Apache which file extension should trigger PHP. You do this by creating a special mime type and associating it with an extension. We suggest using: AddType application/x-httpd-php .php You are however free to use any extension you wish, including .html. Note! If a line has a # at the beginning, then it is commented out and you need to remove the # for that line to take effect. Finally you need to copy php.ini-dist to the appropriate place (normally /usr/local/lib/php.ini) and edit if necessary. Once you have made these changes you should be ready to restart your server and try it out. Type: apachectl restart 4b. Setting up the server. (Static Module) You should now have a new httpd binary. Shut down your existing server, if you have one, and copy this new binary overtop of it. Perhaps make a backup of your previous one first. Then edit your conf/httpd.conf file and add the line: AddType application/x-httpd-php .php There is also an interesting feature which can be quite instructive and helpful while debugging. That is the option of having colour syntax highlighting. To enable this, add the following line: AddType application/x-httpd-php-source .phps Any file ending in .phps will now be displayed with full colour syntax highlighting instead of being executed. Note that on some older server setups, the AddType lines are in the conf/srm.conf file instead of conf/httpd.conf. Note! If a line has a # at the beginning, then it is commented out and you need to remove the # for that line to take effect. When you are finished making changes to your httpd.conf file, you need to copy php.ini-dist to the appropriate place (normally /usr/local/lib/php.ini) and edit if necessary. You can then start up your server. 5. Testing it all worked Create a test file named test.php in your web tree somewhere and put some test PHP tags in it. is a good first test. This tag tells PHP to do a braindump and tells you all sorts of things about itself. WHY DISABLING -fPIC WORKS ON LINUX From: Martin v. Loewis To: glibc-linux@ricardo.ecn.wfu.edu Subject: Re: Shared library -shared vs. -fpic [In reply to Kaz Kylheku ] > PIC stands for Position-Independent Code. Correct. > Code isn't position-independent (or ``relocatable'') cannot be > loaded at an arbitrary address; Wrong. > it requires some references to be patched at load time. Correct. > Shared libraries need to be relocatable because it's not known > beforehand what address they will be loaded at Correct, depending on the meaning of "relocatable". PIC code typically does not contain relocations; that's why its position-independent. > Just because you don't specify -fPIC doesn't mean that the compiler > won't emit position-independent code; the option prevents it from > emitting position-dependent code in situations where it otherwise > would. Correct. However, a non-trivial shared library typically won't be position-independent unless explicitly compiled with -fPIC. Linux/glibc indeed does not require a shared library to be position-independent; instead, it will perform the relocations in the binary, even if they refer to code pages. As a result, those relocated pages won't be shared across processes, anymore. Regards, Martin USING PHP 3 AND PHP 4 AS CONCURRENT APACHE MODULES With some (newer) installations of Apache, it's possible to compile both PHP 3 and PHP 4, and run them concurrently. Note, it's only really wise to do this if you need to use the PHP 3 engine to maintain backwards compatibility. To enable it, configure PHP 3 and PHP 4 to use APXS (--with-apxs) and the necessary link extensions (--enable-versioning). Otherwise, all standard installations instructions apply. For example: $ ./configure \ --with-apxs=/apache/bin/apxs \ --enable-versioning \ --with-mysql \ php-4.2.3/LICENSE0100644000175200000240000000621007534677144012166 0ustar zeevstaff-------------------------------------------------------------------- The PHP License, version 3.0 Copyright (c) 1999 - 2002 The PHP Group. All rights reserved. -------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, is permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name "PHP" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact group@php.net. 4. Products derived from this software may not be called "PHP", nor may "PHP" appear in their name, without prior written permission from group@php.net. You may indicate that your software works in conjunction with PHP by saying "Foo for PHP" instead of calling it "PHP Foo" or "phpfoo" 5. The PHP Group may publish revised and/or new versions of the license from time to time. Each version will be given a distinguishing version number. Once covered code has been published under a particular version of the license, you may always continue to use it under the terms of that version. You may also choose to use such covered code under the terms of any subsequent version of the license published by the PHP Group. No one other than the PHP Group has the right to modify the terms applicable to covered code created under this License. 6. Redistributions of any form whatsoever must retain the following acknowledgment: "This product includes PHP, freely available from ". THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------- This software consists of voluntary contributions made by many individuals on behalf of the PHP Group. The PHP Group can be contacted via Email at group@php.net. For more information on the PHP Group and the PHP project, please see . This product includes the Zend Engine, freely available at . php-4.2.3/Makefile.in0100644000175200000240000000360007505556142013216 0ustar zeevstaff ZEND_DIR = $(srcdir)/Zend SUBDIRS = Zend main ext sapi $(TSRM_DIR) $(REGEX_DIR) $(CLI_DIR) . $(PEAR_DIR) LTLIBRARY_NAME = libphp4.la LTLIBRARY_SOURCES = stub.c LTLIBRARY_DEPENDENCIES = \ Zend/libZend.la \ sapi/$(PHP_SAPI)/libsapi.la \ main/libmain.la \ $(REGEX_LIB) \ $(EXT_LTLIBS) \ $(TSRM_LIB) LTLIBRARY_LDFLAGS = -rpath $(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) LTLIBRARY_LIBADD = $(LTLIBRARY_DEPENDENCIES) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) PROGRAM_NAME = php PROGRAM_SOURCES = stub.c PROGRAM_LDADD = libphp4.la $(EXT_PROGRAM_LDADD) PROGRAM_LDFLAGS = -export-dynamic PROGRAM_DEPENDENCIES = $(PROGRAM_LDADD) targets = $(LTLIBRARY_NAME) $(PHP_PROGRAM) install_targets = install-sapi install-modules include $(top_srcdir)/build/rules.mk include $(top_srcdir)/build/library.mk include $(top_srcdir)/build/program.mk install-sapi: @$(LIBTOOL) --silent --mode=install cp libphp4.la $(phptempdir)/libphp4.la >/dev/null 2>&1 -@$(mkinstalldirs) $(INSTALL_ROOT)$(bindir) -@if test ! -r $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME); then \ for i in 0.0.0 0.0 0; do \ if test -r $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME).$$i; then \ $(LN_S) $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME).$$i $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME); \ break; \ fi; \ done; \ fi $(INSTALL_IT) install-modules: @test -d modules && \ $(mkinstalldirs) $(INSTALL_ROOT)$(moduledir) && \ echo "installing shared modules into $(moduledir)" && \ rm -f modules/*.la && \ cp modules/* $(INSTALL_ROOT)$(moduledir) >/dev/null 2>&1 || true install-tester: @echo "Installing regression tester" @$(mkinstalldirs) $(INSTALL_ROOT)$(PEAR_INSTALLDIR) @$(INSTALL) -m 755 $(srcdir)/run-tests.php $(INSTALL_ROOT)$(PEAR_INSTALLDIR) install-pear: install-modules (cd pear && $(MAKE) install) install-su: install-pear install-tester clean-modules: rm -f modules/* .NOEXPORT: php-4.2.3/NEWS0100644000175200000240000033106107535763321011657 0ustar zeevstaffPHP 4 NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 06 Sep 2002, Version 4.2.3 - Enabled strcoll() on win32. (Markus) - Fixed possible ASCII control char injection in mail(). (Stefan Esser) - Fixed a potential crash bug in import_request_variables() (Zeev) - Fixed several problems with directory functions on Windows. (Steph) - Fixed xbithack bug in Apache module. (Rasmus) - Fixed a bug that prevented touch() from working on various platforms. (Steph) - Fixed ob_gzhandler()'s handling of requests that do have the Accept-Encoding header, but do not allow compression. (Zeev) - Fixed several bugs in the multithreaded version that could cause random parse errors, especially on machines with multiple CPUs. (Zeev, Zend Engine) - Fixed a build problem in bcmath. (Alan) - Fixed several bzip2 issues. (Andrei, kalowsky) - Fixed several COM issues. (Harald) - Various exif fixes. (Marcus) - Fixed domxml_xslt_process() and domxml_get_element_by_id() and several other issues in DOMXML. (Christian) - Fixed DOMXML crash on removing previously created attributes. (Christian) - Fixed crash when converting $GLOBALS to an object. (Zeev, Zend Engine) - Fixed ImageCreateFromGD2Part() (Jani) - Fixed a build issue in the IMAP extension under IRIX. (kalowsky) - Fixed a bug in imap_last_error() (Jani) - Various mbstring fixes. (Yasuo, Rui) - Fixed a build problem in the mcal extension. (Jani) - Made MySQL rollback open transactions when the request ends. (Georg) - Fixed a crash in the shutdown order of the ODBC module. (kalowsky) - Fixed PCRE build problems. (troels@arvin.dk) - Fixed a crash in pg_lo_write() (Yasuo) - Fixed posix_isatty() and posix_ttyname(). (Markus) - Fixed accidental pg_lo_import() API change. (Yasuo) - Fixed ereg_replace() crash when the backreference number was greater than the number of captured subpatterns. (oliver@billix.franken.de) - Fixed array_rand() on thread-safe platforms such as Windows. (Edin) - Report the right exit code after a call to exit(). (Edin) 22 Jul 2002, Version 4.2.2 - Fixed serious security vulnerability. (Stefan Esser) 13 May 2002, Version 4.2.1 - Added safe-mode checks to show_source(), parse_ini_file() and rmdir(). Also fixed security problems with safe_mode_include_dir directive. (Rasmus) - Changed HTTP upload code to accept 0 byte file uploads. (Zeev) - Major update of domxml. New functions, better DOM compliance and bug fixes: * Changed the old $node->append_child() to $node->append_sibling() since the new append_child() behaves correctly (= W3C standard). * Added domxml functions: . domxml_elem_get_elements_by_tagname() . domxml_doc_get_elements_by_tagname() . domxml_doc_get_element_by_id() . domxml_elem_remove_attribute() . domxml_elem_get_attribute_node() * Fixed a segfault in domxml_unlink(). * Added formatting option to domxml_dump_mem(). (Uwe, jtate, Chregu) - Fixed a bug in socket_select() that could cause unexpected behavior when using a statement like $w = $e = array($sock); This change unfortunately prevents the use of constant values (e.g. NULL) for the socket array paramaters. Instead, use a temporary variable or an expression with the leftmost member being a temporary variable. ex.: socket_select($w, $r, $e = NULL, 10); (Jason) - Fixed crashes in the session serializer. (Stas) - Fixed malformed atime/mtime with touch(). (Yasuo) - Fixed a couple of bugs in array_sum() and array_merge(). (Andrei) - Fixed SJIS directory name handling under Windows. (Rui) - Fixed empty mb_output_handler() output when Content-Type is specified. (Yasuo) - Fixed the false logic in ext/session which made SID constant not to be defined when cookies are disabled. (Sascha) - Fixed possible crash bug in HTTP uploads. (Patch: Lucas Schroeder) - Fixed possible NULL-pointer dereferencing in the COM extension which caused 'Error in php_OLECHAR_to_char()' warnings on various places. Also modified the API to consistently return NULL in case of an error. (Alan, Harald) - Fixed a bug in the COM extension that caused outproc servers to 'hang' because of a missing Release() call. (Alan, Harald) 22 Apr 2002, Version 4.2.0 - ATTENTION!! register_globals defaults to 'off' now !!! - Note: Apache2 support is EXPERIMENTAL. - PostgreSQL functions are renamed, but all old function names are available. Old function names will be available long enough. User can safely use old function names. (Yasuo) - Moved ext/mailparse to PECL. See http://thebrainroom.com/opensource/php/ for more information and to download the extension. (Wez/Jim) - Fixed pg_last_notice() crash. (Yasuo) - Modified the mysql extension to disable 'LOAD LOCAL' when safe mode is enabled. (Jason) - Fixed HTTP file upload support to handle big files better. (Jani) - Major modifications to the Sockets Extension and its API (Jason): . Fixed numerous bugs. . Added automatic host lookup capability to all functions that take addr's. example: socket_connect($sock, 'www.yahoo.com', 80); . Corrected and standardized host lookup errors . Modified socket_recv() behavior. [$r=socket_recv($sock, $buf, $len, $flags)] . Added socket_set_block() which changes a socket into blocking IO mode . Modified socket_last_error() to not clear the last error . Added socket_clear_error() which clears the last error on a socket . Removed all code pertaining to fd_sets (socket_fd_*) . Modified/Improved socket_select() to accept array of resources instead of fd_sets. example: - Fixed segfault in ibase_close() if user does not free the resultset. Bugs #15419, #15992. (daniela) - Added optional 3rd parameter "int encoding_mode" to gzencode() and fixed parameters to conform documentation. (Stefan) - Changed read_exif_data() to be an alias of exif_read_data(). (Marcus) - Added exif_tagname() function which returns the names of tags and exif_thumbnail() function to extract embedded thumbnails. (Marcus) - Fixed iconv support with FreeBSD. (kalowsky) - Cleaned up the posix extension: (Markus) . Removed unwanted warning messages . Added posix_errno() and posix_strerror() for fetching error messages . Changed the way posix_getgrnam() and posix_getgrgid() return their values (breaks BC but makes more sense) . Does not include functions in symbol table which aren't supported on host system. - Added TIFF support for getimagesize() and read_exif_data(). (Marcus) - Changed the Velocis extension namespace to Birdstep to reflect new product name. Added aliases for BC. (James) - Added safe_mode checks for opendir(). (jflemer) - Changed the 2nd parameter in pgsql_fetch_*() functions to support NULL if all 3 parameters are supplied, but you do not want to provide a row number. (Derick) - Improved iconv() when using libc's iconv. (Yasuo) - Added PHP_SAPI constant which contains the name of running SAPI. (Edin) - Added ob_get_status() which returns an array of buffers with their status. (Yasuo) - Fixed a crash bug in ob_end_*() functions. ob_end_*() will not delete buffers that may not be deleted. (Yasuo) - Added 3rd parameter "bool erase" to ob_start(). If FALSE, the buffer may not be deleted until script finishes. (Yasuo) - Changed ob_*() functions to return TRUE for success, FALSE for failure. (Yasuo) - Added sybase_ct support to dbx module. (Marc) - Fixed error message handling with PostgreSQL 7.2. (Rui) - Added object aggregation capability, see aggregation_*() functions. (Andrei) - Added debug_zval_dump() which works similarly to var_dump, but displays extra internal information such as refcounts and true type names. (Jason) - Added Andrei's tokenizer extension. (Stig) - Fixed a bug in the COM extension which caused php to crash in php_COM_get_ids_of_names(). (Paul, Harald) - Removed ext/satellite. It is now part of PEAR. (eriksson) - Changed php.ini directive 'safe_mode_include_dir' to accept a (semi)colon separated path (like 'include_path') rather than a single directory. (jflemer) - Added is_a() function that can be used to test whether object is of a certain class or is derived from it. (Andrei, Zend Engine) - Added optional parameter to highlight_string() and highlight_file() which makes these functions to return a highlighted string instead of dumping it to standard output. (Derick) - Added EXTR_IF_EXISTS and EXTR_PREFIX_IF_EXISTS flags to extract(). (Rasmus) - Fixed a segfault in pg_pconnect(). If PostgreSQL server is restarted, broken connection is detected and reconnected. (Yasuo) - Fixed --enable-safe-mode configure option. (Yasuo) - Added function domxml_dump_node($doc,$node). Dumps a node plus all children into a string. (chregu) - Added function domxml_node_get_content(). (chregu) - Added function domxml_dump_file($filename,[$compression]). Dumps XML to a file and uses compression, if specified. (chregu) - Added exslt integration to domxml extension (http://exslt.org for details). Configure with --with-dom-exslt[=DIR] (and --with-dom-xslt). (chregu,jaroslaw) - Fixed session_unset() to not touch any globals if register_globals is off. (Thies) - Added 3 new optional parameters to OCIFetchStatement(). They control the number of rows to skip at the beginning of the cursor, the maximun numer of rows that should be fetched and the format of the returned array. (Thies) - Updated the XSLT extension to support Sablotron 0.8. (Petr Cimprich) - Fixed a bug in preg_match() and preg_match_all() when matching strings contain null bytes. (Andrei) - Added xpath_register_ns() function. This makes it possible to issue XPath queries with namespaces like for example: "//namespace:sampletag". (Chris Jarecki) - Added multi-byte enabled regular expression functions. (Rui) - Added optional second parameter to count() which can be used to specify either normal or recursive counting. (patch by Vlad Bosinceanu ) - Added mb_get_info() to get internal settings of mbstring. (Rui) - Added async query functions to PostgreSQL module. (Yasuo) - Added pg_copy_to()/pg_copy_from() for PostgreSQL module. (Youichi, Yasuo) - Added IPv6 support for FTP extension. (Stig Venaas) - Improved the speed of wordwrap() significantly. (Jim) - Fixed pow()'s incorrect behaviour when dealing with powers of 0. (Jim) - Added is_finite(), is_infinite() and is_nan(). (Jim) - Fixed segfault in wordwrap() when wrapping to zero width and using multi-character break or trying to force cut (bug #12768). (Jim) - Fixed several bugs in dbase extension (dbase_pack() truncate file to right size, fix 6852 #1 and 6852 #2). (Vlad) - Fixed bug in krsort() where an extra character was being compared. (Andi) - Fixed bug that made pspell include pspell.h from a wrong location. (Vlad) - Added function overload in mbstring to add multibyte support for string and mail functions. (Rui) - Added flags parameter to preg_grep(). The only flag currently is PREG_GREP_INVERT that will make the function return entries that did not match. (Andrei) - Fixed several crash bugs in the xslt extension. (Markus, Derick) - Fixed problem with dbase not returning very large (larger than long) integers properly. (Vlad) - Added concepts to IRCG: bailout-on-trivial issue, write output to files, fetch a resource upon connection end. (Sascha) - Fixed POST-related bugs in thttpd, added QUERY_STRING, HTTP_HOST, HTTP_ACCEPT_LANGUAGE to the script environment, improved patch to send correct MIME types, and added support for /nocache/. (Sascha) - Fixed several bugs and memleaks in the domxml extension. (Markus) - Added var_export() which outputs a representation of a variable as reusable PHP code. (Derick) - Added -w option to the CGI-version to strip all comments and whitespace from the script. (Thies) - Added support for SO_RCVTIMEO and SO_SNDTIMEO to ext/sockets. (Jason) - Added ob_get_level() which returns the nesting level of the output buffering mechanism. (Yasuo, Derick) - Added ob_flush() and ob_clean() functions which flush and clean an output buffer without destroying the buffer. (Derick) - Added new optional parameter to mysql_connect() which forces a new database link to be created. (Markus, Derick) - Added ldap_sort() function. (Stig Venaas) - Added md5_file() function which calculates the MD5 sum of a file. Patch by Alessandro Astarita (Derick) - Added support for parsing recordsets contained in WDDX packets. (Andrei) - Renamed key_exists() to array_key_exists(). (Derick) - Fixed ImageColorsForIndex() and ImageColorAt() to work for TrueColor images. (Rasmus) - Added support for bind_textdomain_codeset(). (rudib@email.si) - Added generic Win 32 API extension. (jmoore) - Removed warning message about NONEXISTENT character set from mysql_connect() when the server's default character set != latin1. (Mysql Team) - Added Direct I/O extension for lowlevel access to the POSIX layer. (Sterling) - Added SAPI module for the WebJames server on RISC OS. (Alex Waugh) - Fixed ldap_add() and ldap_modify() functions to throw a warning with illegal value arrays. Previously segfaulted or added wrong value. (Stig Venaas) - Added udm_check_charset() function into mnoGoSearch extension. (gluke) - Fixed mnoGoSearch extension to support mnogosearch-3.2.x. (gluke) - Made fbsql_num_rows() to return the correct value on all select statements. (Frank) - Added array_chunk() function which splits an array into chunks of specified size. (Andrei) - Fixed $HTTP_RAW_POST_DATA to be populated on a missing content-type when always_populate_raw_post_data is on. (Rasmus) - Added session_cache_expire() function. (patch by anuradha@gnu.org) (Andrei) - Added array_fill() function. (Rasmus) - Made Authorization header to be hidden from phpinfo() output in safe_mode. (Rasmus) - Re-instated safe-mode realm mangling. (Rasmus) - Fixed a bug in preg_replace() that would change the type of the replacement array entries to string. (Andrei) - Added user-space object overloading extension. (Andrei) - Added ldap_start_tls() function. (Stig Venaas, patch by kuenne@rentec.com) - Changed rand() and mt_rand() to be seed automatically if srand() or mt_srand() has not been called. (Sterling) - Changed the seed options to srand() and mt_srand() to be optional. If the seed is not specified the most random seed possible is generated. (Sterling) - Added array_change_key_case() function which returns an array with all string keys lowercased or uppercased. (Edin) - Added parameter to ircg_pconnect to suppress treating non-fatal errors as fatal, and added conversion of Windows quotes to ". (Sascha) - Added pcntl_exec() function which behaves similar to the system execve. (Jason) - Fixed segfault and check for truecolor image in ImageColorAt(). (Rasmus) - Fixed nl2br() to handle all styles of line-endings in one string. (Boian, Derick) - Added mcrypt_generic_deinit() to replace mcrypt_generic_end(). (Derick) - Added apache_setenv() function for injecting variables into Apache's subprocess_env table. (Rasmus) - Added support for 'int', 'bool', 'float' and 'null' in settype(). (Jeroen) - Added IPv6 support to gethostbyaddr(). (Patch by Matthias Wimmer and venaas) - Fixed LONG_VARCHAR type crashing in ODBC extension. Patch by Walter Franzini. (kalowsky) - Changed in_array() and search_array() to allow the needle to be an array in itself. (Andrei) - Added ini_get_all() function which returns all registered ini entries or entries for the specified extension. (Jani) - Added support for chinese encodings in htmlentities() and htmlspecialchars(). (Patch by Alan Knowles and Wez) - Improved support for autoconf-2.50+/libtool 1.4b+. (Jan Kneschke, Sascha) 27 Feb 2002, Version 4.1.2 - Fixed start up failure when mm save handler is used and there are multiple SAPIs working at the same time. (Yasuo) - Fixed the Roxen SAPI. (Yasuo) - Fixed a buffer overflow in the RFC-1867 file upload code. (Stefan) - Fixed a crash bug in the session module. (Yasuo) - Fixed a crash bug in the pspell module. (Yasuo) - Changed the default output encoding of mbstring 'pass' to fix initialization problem. (Rui) 26 Dec 2001, Version 4.1.1 - Fixed incompatibility with Windows .NET / IIS 6 - may improve stability under other versions of IIS. (Zeev) - Fixed bug that caused crashes or error notices on shutdown on threaded platforms. (Zeev) - Fixed several crash bugs in the xslt extension. (Markus, Derick) - Fixed problem with dbase not returning very large (larger than long) integers properly. (Vlad) - Fixed several bugs and memleaks in the domxml extension. (Markus) - Fixed bug in gmmktime() which was one hour off during standard time - bug #9878. Patch by bfoddy@mediaone.net. (jmoore) - Fixed bug in gmdate() timezone handling on Windows - bug #13885. (jmoore) - Fixed several crash bugs in the mcrypt extension. (Derick) - Made the mcrypt extension compile with the libmcrypt 2.2 series again. (Sterling) - Fixed a bug where the is_file() family of functions would in-correctly give an error when they were given filenames that didn't exist. (Sterling) - Fixed a bug in the strtotime() function where it was incorrectly recognizing GMT +0100 and GMT -0100. (Derick) 10 Dec 2001, Version 4.1.0 - Worked around a bug in the MySQL client library that could cause PHP to hang when using unbuffered queries. (Zeev) - Fixed a bug which caused set_time_limit() to affect all subsequent requests to running Apache child process. (Zeev) - Removed the sablotron extension in favor of the new XSLT extension. (Sterling) - Fixed a bug in WDDX deserialization that would sometimes corrupt the root element if it was a scalar one. (Andrei) - Make ImageColorAt() and ImageColorsForIndex() work with TrueColor images. (Rasmus) - Fixed a bug in preg_match_all() that would return results under improper indices in certain cases. (Andrei) - Fixed a crash in str_replace() that would happen if search parameter was an array and one of the replacements resulted in subject string being empty. (Andrei) - Fixed MySQL extension to work with MySQL 4.0. (Jani) - Fixed a crash bug within Cobalt systems. Patch by tomc@tripac.com. (Jani) - Bundled Dan Libby's xmlrpc-epi extension. - Introduced extension version numbers. (Stig) - Added version_compare() function. (Stig) - Fixed pg_last_notice() (could cause random crashes in PostgreSQL applications, even if they didn't use pg_last_notice()). (Zeev) - Fixed DOM-XML's error reporting, so E_WARNING errors are given instead of E_ERROR error's, this allows you to trap errors thrown by DOMXML functions. (Sterling) - Fixed a bug in the mcrypt extension, where list destructors were not properly being allocated. (Sterling) - Better Interbase blob, null and error handling. (Patch by Jeremy Bettis) - Fixed a crash bug in array_map() if the input arrays had string or non-sequential keys. Also modified it so that if a single array is passed, its keys are preserved in the resulting array. (Andrei) - Fixed a crash in dbase_replace_record. (Patch by robin.marlow@dps-int.com) - Fixed a crash in msql_result(). (Zeev) - Added support for single dimensional SafeArrays and Enumerations. Added com_isenum() function to check if a component implements an enumeration. (Alan, Harald) - Fixed a bug in dbase_get_record() and dbase_get_record_with_names(). boolean fields are now returned correctly. Patch by Lawrence E. Widman (Jani) - Added --version option to php-config. (Stig) - Improved support for thttpd-2.21b by incorporating patches for all known bugs. (Sascha) - Added ircg_get_username, a roomkey argument to ircg_join, error fetching infrastructure, a tokenizer to speed up message processing, and fixed a lot of bugs in the IRCG extension. (Sascha) - Improved speed of the serializer/deserializer. (Thies, Sascha) - Floating point numbers are better detected when converting from strings. (Zeev, Zend Engine) - Replaced php.ini-optimized with php.ini-recommended. As the name implies, it's warmly recommended to use this file as the basis for your PHP configuration, rather than php.ini-dist. (Zeev) - Restore xpath_eval() and php_xpathptr_eval() for 4.0.7. There are still some known leaks. (Joey) - Added import_request_variables(), to allow users to safely import form variables to the global scope (Zeev) - Introduced a new $_REQUEST array, which includes any GET, POST or COOKIE variables. Like the other new variables, this variable is also available regardless of the context. (Andi & Zeev) - Introduced $_GET, $_POST, $_COOKIE, $_SERVER and $_ENV variables, which deprecate the old $HTTP_*_VARS arrays. In addition to be much shorter to type - these variables are also available regardless of the scope, and there's no need to import them using the 'global' statement. (Andi & Zeev) - Added vprintf() and vsprintf() functions that allow passing all arguments after format as an array. (Andrei) - Added support for GD2 image type for ImageCreateFromString() (Jani) - Added ImageCreateFromGD(), ImageCreateFromGD2(), ImageCreateFromGD2part(), ImageGD() and ImageGD2() functions (Jani) - addcslashes now warns when charlist is invalid. The returned string remained the same (Jeroen) - Added optional extra argument to gmp_init(). The extra argument indicates which number base gmp should use when converting a string to the gmp-number. (Troels) - Added the Cyrus-IMAP extension, which allows a direct interface to Cyrus' more advanced capabilities. (Sterling) - Enhanced read_exif_data() to support multiple comment tags. (Rasmus) - Fixed a crash bug in array_map() when NULL callback was passed in. (Andrei) - Change from E_ERROR to E_WARNING in the exif extension (Rasmus) - New pow() implementation, which returns an integer when possible, and warnings on wrong input (jeroen) - Added optional second parameter to trim, chop and ltrim. You can now specify which characters to trim (jeroen) - Hugely improved the performance of the thread-safe version of PHP, especially under Windows (Andi & Zeev) - Improved request-shutdown performance significantly (Andi & Zeev, Zend Engine) - Added a few new math functions. (Jesus) - Bump bundled expat to 1.95.2 (Thies) - Improved the stability of OCIPlogon() after a database restart. (Thies) - Fixed __FILE__ in the CGI & Java servlet modes when used in the main script. It only worked correctly in included files before this fix (Andi) - Improved the Zend hash table implementation to be much faster (Andi, Zend Engine) - Updated PHP's file open function (used by include()) to check in the calling script's directory in case the file can't be found in the include_path (Andi) - Fixed a corruption bug that could cause constants to become corrupted, and possibly prevent resources from properly being cleaned up at the end of a request (Zeev) - Added optional use of Boyer-Moore algorithm to str_replace() (Sascha) - Fixed and improved shared-memory session storage module (Sascha) - Add config option (always_populate_raw_post_data) which when enabled will always populate $HTTP_RAW_POST_DATA regardless of the post mime type (Rasmus) - Added support for socket and popen file types to ftp_fput (Jason) - Fixed various memory leaks in the LDAP extension (Stig Venaas) - Improved interactive mode - it is now available in all builds of PHP, without any significant slowdown (Zeev, Zend Engine) - Fixed crash in iptcparse() if the supplied data was bogus. (Thies) - Fixed return value for a failed snmpset() - now returns false (Rasmus) - Added hostname:port support to snmp functions (nbougues@axialys.net, Rasmus) - Added fdf_set_encoding() function (Masaki YATSU, Rasmus) - Reversed the destruction-order of resources. This fixes the reported OCI8 "failed to rollback outstanding transactions!" message (Thies, Zend Engine) - Added option for returning XMLRPC fault packets. (Matt Allen, Sascha Schumann) - Improved range() function to support range('a','z') and range(9,0) types of ranges. (Rasmus) - Added getmygid() and safe_mode_gid ini directive to allow safe mode to do a gid check instead of a uid check. (James E. Flemer, Rasmus) - Made assert() accept the array(&$obj, 'methodname') syntax. (Thies) - Made sure that OCI8 outbound variables are always zero-terminated. (Thies) - Fixed a bug that allowed users to spawn processes while using the 5th parameter to mail(). (Derick) - Added nl_langinfo() (when OS provides it) that returns locale. - Fixed a major memory corruption bug in the thread safe version. (Zeev) - Fixed a crash when using the CURLOPT_WRITEHEADER option. (Sterling) - Added optional suffix removal parameter to basename(). (Hartmut) - Added new parameter UDM_PARAM_VARDIR ha in Udm_Set_Agent_Param() function to support alternative search data directory. This requires mnogoSearch 3.1.13 or later. - Fixed references in sessions. This doesn't work when using the WDDX session-serializer. Also improved speed of sessions. (Thies) - Added new experimental module pcntl (Process Control). (Jason) - Fixed a bug when com.allow_dcom is set to false. (phanto) - Added a further parameter to the constructor to load typelibs from file when instantiating components (e.g. DCOM Components without local registration). (phanto) - Added the possibility to specify typelibs by full name in the typelib file (Alan Brown) - Renamed the ZZiplib extension to the Zip extension, function names have also changed accordingly, functionality, has stayed constant. (Sterling) - Made the length argument (argument 2) to pg_loread() optional, if not specified data will be read in 1kb chunks. (Sterling) - Added a third argument to pg_lowrite() which is the length of the data to write. (Sterling) - Added the CONNECTION_ABORTED, CONNECTION_TIMEOUT and CONNECTION_NORMAL constants. (Zak) - Assigning to a string offset beyond the end of the string now automatically increases the string length by padding it with spaces, and performs the assignment. (Zeev, Zend Engine) - Added warnings in case an uninitialized string offset is read. (Zeev, Zend Engine) - Fixed a couple of overflow bugs in case of very large negative integer numbers. (Zeev, Zend Engine) - Fixed a crash bug in the string-offsets implementation (Zeev, Zend Engine) - Improved the implementation of parent::method_name() for classes which use run-time inheritance. (Zeev, Zend Engine) - Added 'W' flag to date() function to return week number of year using ISO 8601 standard. (Colin) - Made the PostgreSQL driver do internal row counting when iterating through result sets. (gvz@2scale.net) - Updated ext/mysql/libmysql to version 3.23.39; Portability fixes, minor bug fixes. (tim@mysql.com) - Added get_defined_constants() function to return an associative array of constants mapped to their values. (Sean) - New mailparse extension for parsing and manipulating MIME mail. (Wez) - Define HAVE_CONFIG_H when building standalone DSO extensions. (Stig) - Added the 'u' modifier to printf/sprintf which prints unsigned longs. (Derick) - Improved IRIX compatibility. (Sascha) - Fixed crash bug in bzopen() when specifying an invalid file. (Andi) - Fixed bugs in the mcrypt extension that caused crashes. (Derick) - Added the IMG_ARC_ROUNDED option for the ImageFilledArc() function, which specified that the drawn curve should be rounded. (Sterling) - Updated the sockets extension to use resources instead of longs for the socket descriptors. The socket functions have been renamed to conform with the PHP standard instead of their C counterparts. The sockets extension is now usable under Win32. (Daniel) - Added disk_total_space() to return the total size of a filesystem. (Patch from Steven Bower) - Renamed diskfreespace() to disk_free_space() to conform to established naming conventions. (Jon) - Fixed #2181. Now zero is returned instead of an unset value for 7-bit encoding and plain text body type. (Vlad) - Fixed a bug in call_user_*() functions that would not allow calling functions/methods that accepted parameters by reference. (Andrei) - Added com_release($obj) and com_addref($obj) functions and the related class members $obj->Release() and $obj->AddRef() to gain more control over the used COM components. (phanto) - Added an additional parameter to dotnet_load to specify the codepage (phanto) - Added peak memory logging. Use --enable-memory-limit to create a new Apache 1.x logging directive "{mod_php_memory_usage}n" which will log the peak amount of memory used by the script. (Thies) - Made fstat() and stat() provide identical output by returning a numerical and string indexed array. (Jason) - Fixed memory leak upon re-registering constants. (Sascha, Zend Engine) 23 Jun 2001, Version 4.0.6 - Fixed memory fragmention problem which could lead to web server processes growing much more than they should. (Andi, Zend Engine) - Made $HTTP_SESSION_VARS['foo'] and $foo be references to the same value when register_globals is on. (Andrei) - Fixed disk_free_space() and disk_total_space() under FreeBSD. (Jon) - Fixed readfile/passthru losing resources during connection abort (Sascha) - Fixed bug in the mcrypt extension that caused segfaults when using a key that is too large for the used algorithm, and a bug that caused mcrypt_generic() to segfault PHP (Derick) - Fixed getopt so that it accepts command line arguments in the form - and - . (Jmoore) - Fixed race in writing session files (Sascha) - Fixed a possible crash in the PHP CGI when no input file is specified (Zeev) - Added is_callable() function that can be used to find out whether its argument is a valid callable construct. (Andrei) - Fixed a rare possible crash when generating extended information. (Dmitri Dmitrienko, Zend Engine) - Improved virtual() to support PHP-enabled URIs. (Zeev) - Fixed undefined behavior when using floating point keys in array() expressions. (Zeev, Zend Engine) - Fixed a possible crash in case of parse errors in include files or eval statements. (Zeev, Zend Engine) - Added --with-layout configure option. (Stig) - Improved interactive mode - supports function calls, and works in multithreaded builds. (Zeev, Zend Engine) - Fixed a crash bug in interactive mode. (Zeev, Zend Engine) - Added pg_last_notice() function. (Rasmus from suggestion by Dirk@rackspace.com) - Fixed a bug in preg_split() that would incorrectly limit the number of results when used along with PREG_SPLIT_NO_EMPTY flag. (Andrei) - Added connection error support to mysql_error() and mysql_errno(). (Jason) - Added support to getimagesize to return dimensions of BMP and PSD files. (Derick) - Added heuristic to kill stale IRC connections, message scanner caching, and nickname escaping to IRCG, suppress option to ircg_msg(), and statistics to IRCG phpinfo() output. (Sascha) - Added Japanese multibyte string functions support. (Rui) - Added Mac OS X "\r" line ending support. (Andi, Zend Engine) - Fixed a bug regarding the $PHP_SELF being incorrectly registered when force-cgi-redirect was not enabled. (Sterling) - pfpro extension now supports version 3 of the Verisign SDK. (John Donagher) - Udm_Cat_List and Udm_Cat_Path functions has been added. - Added key_exists() to check if a given key or index exists in an array or object. (David Croft) - Modify the cURL extension to compile only with the latest cURL release. Backwards compatibility with regards to the extension api has not been broken. (Sterling) - Added the ability to use user-defined callbacks with cURL. (Sterling) - Added the SSL_VERIFYPEER, CAINFO, MAXREDIRS, FILETIME, RANDOM_FILE, EGDSOCKET and CONNECTTIMEOUT options to curl_setopt(). (Sterling) - Added support for persistent connections with cURL. (Sterling) - Fixed a problem in cURL with file descriptors being allocated, but never closed. (Sterling) - Fixed interactive mode (-a). It works again with the same limitations it has always had. (Andi, Zend Engine) - Improved memory manager to use less memory and provide better memory overflow detection abilities in debug mode. (Andi, Zend Engine) - Fixed resource leaks when resources were being cast to numbers. (Zeev, Zend Engine) - Fixed foreach() to not crash when being sent an invalid argument. (Andi, Zend Engine) - Fixed a bug in opendir() under Windows when trying to open a non-exisiting directory. (Andi) - Fixed popen() and the exec family under Win32 (Unable to fork issue). (Daniel) - Make the printf family of functions binary clean. (Rasmus) - Fixed WDDX serialization to HTML-escape key/variable names so as not to break the XML packet. (Andrei) - Made WDDX extension enabled by default. (Andrei) - Added -C command-line option to avoid chdir to the script's directory. (Stig) - Fixed a bug with /e modifier in preg_replace(), that would not correctly replace two-digit references if single digit references were present before them. This fixed bug #10218. (Andrei) - Added temporary LOB support in OCI8. (Patch by David Benson) - Fixed crash in pathinfo() - OCI8 now supports binding of collections. (Patch by Andy Sautins ) - Added GD 2.0.1 support for truecolor and alpha channels, plus some other gd functions, both old and new - see docs for more info. (Wez) - Added S/MIME sign/verify encrypt/decrypt functions to openssl extension, along with some other certificate manipulation and interrogation functions. See docs for more info. (Wez) - printf argnum (parameter swapping) support. (Morten Poulsen, Rasmus) - Add DIRECTORY_SEPARATOR constant ('/' on UNIX, '\' on Windows). (Stig) - Added small change to php_odbc module, to check for failed SQLDisconnects and to close any outstanding transactions if the call fails, then disconnect again. (lurcher) - Modified get_parent_class() and get_class_methods() to accept a class name as well as a class instance. (Andrei, Zend Engine) - Added support for UNC style paths. (\\server\share\file, //server/share/file). (Daniel, TSRM) - Added dbx module (database abstraction) to the repository. (Marc) - Using ITypeInfo instead of IDispatch if possible. This makes DCOM calls and even COM calls much faster. All ini settings are now prefixed by 'com.'. Now you need not provide a path to the file containing the typelib, you can also provide the GUID of the TypeLib - entry or an IID for preloading type - information. (Harald) - Rewrite of domxml. It's now mostly DOM Level 2 conform. (Uwe) - Added array_map() function that applies a callback to the elements of given arrays and returns the result. It can also be used with a null callback to transpose arrays. (Andrei) - Added array_filter(), which allows filtering of array elements via the specified callback. (Andrei) - Fixed all relevant array functions to avoid moving the internal array pointer during operations. (Andrei) - Added mysql_unbuffered_query(), which is useful for very large result sets. (Zeev) 30 Apr 2001, Version 4.0.5 - Added new php.ini directive: arg_separator.input which is used to tell PHP which characters are considered as argument separators in URLs. Renamed php.ini directive: arg_separator -> arg_separator.output (Jani) - Added FastCGI SAPI module. (Ben Mansell) - Added array_reduce(), which allows iterative reduction of an array to a single value via a callback function. (Andrei) - The imageloadfont function of the gd extension should be not platform dependent after this fix. (alex@zend.com) - Fixed a compatibility problem in some file functions (fgets, fputs, fread, fwrite). The ANSI standard says that if a file is opened in read/write mode, fseek() should be called before switching from reading to writing and vice versa. (alex@zend.com) - Fixed argument checking for call_user_func* functions and allowed specifying array($obj, 'method') syntax for call_user_func_array. (Andrei) - Fixed parent::method() to also work with runtime bindings. (Zeev, Zend Engine) - Implemented high-performance zlib-based output compression - see zlib.output_compression INI directive. (Zeev) - Improved ob_gzhandler() to support chunked output buffering - it's recommended to use it with 4KB chunks. (Zeev) - Fixed chunked output buffering. (Zeev) - Forced call_user_method() and call_user_method_array() to take the object argument by reference. (Andrei) - Fixed binding of ROWIDs in OCI8. (Thies) - Added PEAR/Cache as a generic Caching System. (Sebastian, PEAR/Cache) - Added IMAP quota support (imap_set_quota, imap_get_quota), enabled/added via c-client2000. (kalowsky) - Upgraded PCRE to version 3.4. (Andrei) - Added array_search which works similar to in_array but returns the key instead of a boolean. (jason@php.net) - Fixed pgsql transaction support. (Stig, PEAR/DB) - Added new object VARIANT() to encapsulate values for use with the COM and DOTNET module. Therefore it is now possible to pass values by reference, convert php values to extended variant types (currency, date, idispatch, iunknown, ...) and define the codepage that should be used for unicode - conversion. - Improved overall speed of IRCG, added URL handling to message scanner. (Sascha) - Fixed some modules to allow using output-buffering. (Thies) - Added the chroot() function. (Derick) - PostgreSQL now does a rollback at the end of a request on every persistent connection. This is done by doing an "empty" transaction on the connection. This was advised by someone from the PostgreSQL core-team. (Thies) - Fixed PostgeSQL pg_connect() bug. We would sometimes close the default link by accident. (Patch by: aja@nlgroup.ca) - Improved OCI8 dead-session detection. (Patch by: George Schlossnagle) - Fixed get_meta_tags() multiline bug #4556. (Sean) - Prefer random() over *rand48(). (JimJag) - Sped up WDDX serialization 2x. (Andrei) - Added a new parameter to mail() which appends aditional command line parameters to the mail program. (Derick) - Added Udm_Clear_Search_Limits mnoGoSearch extension function. (gluke) - Fixed mnogosearch protos. Fixed mnogosearch functions return values. A bug with capital letters break search has been fixed. (gluke) - Static methods can now be called via call_user_method_* functions, e.g. call_user_method('method', 'class'), and also array('class', 'method') constructs (for array_walk(), for example). (Andrei, Zend Engine) - microtime() under Windows now returns accurate values. (James) - Added PREG_SPLIT_DELIM_CAPTURE flag to preg_split() that allows for Perl-like functionality of capturing parenthesized delimiter expression. (Andrei) - Fixed strip_tags() to not strip a lone > character. (Rasmus) - When using the ob_gzhandler() PHP now automagically also sets the Content-Lengh correctly which enables browsers to use the HTTP Keep-Alive feature. (Thies) - Improved handling of preg_replace() /F modifier so that it's possible to specify array($obj, 'method') construct as a replacement function. (Andrei) - Added mysql_get_client_info(), mysql_get_server_info(), mysql_get_proto_info(), and mysql_get_host_info() functions. (Sean) - Major change of the php pdf api. It could break some functions though backwards compatibility was tried to maintain. Adding some still missing functions as well. (Uwe) - Added mnoGoSearch extension - http://search.mnogo.ru. (Sergey K) - Allow URL encoding in DB usernames and passwords. (Stig, PEAR) - Added raiseError and setErrorHandling methods to PEAR class. (Stig, PEAR) - Added support for converting images from JPG/PNG on the fly with the GD extension, which is usefull for creating dynamic WAP-sites. (Derick) - Updated ext/mysql/libmysql to version 3.23.32; bug fixes. (tim@mysql.com) - Fixed possible crash in all (non-pcre) regex functions. (Thies) - Improved str_replace() to accept an array for any parameter - similar to preg_replace(). (Andrei) - Fixed extract() to properly prefix numeric keys when EXTR_PREFIX_ALL is used. (Andrei) - Added EXTR_PREFIX_INVALID flag to extract() to automatically prefix string keys that do not constitute valid variable names. (Andrei) - BeOS patch from svanegmond@bang.dhs.org, modified somewhat by Rasmus. - Fixed the Apache module to overwrite PATH_TRANSLATED with SCRIPT_FILENAME, only if PATH_TRANSLATED is not previously set. (Zeev) - Fixed crash bug in highlight_string(). (Rasmus) - Added URL support for getimagesize() function. (Jani) - Added xslt_set_scheme_handler() function. (carmelo@akooe.com) - Added the pg_lolseek and pg_lotell functions. (Derick) - Fixed wrong breaking with the wordwrap function. (Derick) - Fixed 'O' and 'r' flags of date() to have correct sign for timezone offset. (Andrei) - Changed 'Z' flag to date() to always return timezone offset with negative sign if it's west of UTC. (Andrei) - Added the HTML_Processor class which provides common functions for processing HTML. (Sterling) - Added localeconv() and strcoll() functions for localization. (Sean) - Added the xslt_set_base function. (Sterling) - Added support for Zeus 3.3.8. - Added odbc_error() and odbc_errormsg() functions. (Stig) - New extension for vpopmail - http://www.inter7.com/vpopmail, give it a try, but keep in mind that it is not ready for production environments. (David Croft, Boian Bonev) - Added sybase_get_last_message() to the Sybase CT module. (Jan Fedak) - Made ldap_list(), ldap_read() and ldap_search() do parallel search when first parameter is an array of link identifiers. (Stig Venaas) - Made fopen() of HTTP URL follow redirects, $http_response_header will contain all headers with empty string as delimiter. (Stig Venaas) - Added Console_Getopt class for parsing command-line args. (Andrei, PEAR) - Added an experimental version of the ZZipLib extension which provides the ability to read zip files. (Sterling) - Allow access to uploaded files in safe_mode. Beware that you can only read the file. If you copy it to new location the copy will not have the right UID and you script won't be able to access that copy. (Thies) - Changed extract() to check that prefixed name is a valid one. (Andrei) - Changed extract() to return the number of variables extracted. (Andrei) - Added ldap_rename() function. (Stig Venaas) - Made ldap_set_option() support controls. (Stig Venaas) - Changed ldap_search() and added functions ldap_parse_result(), ldap_first_reference(), ldap_next_reference() and ldap_parse_reference() to cope with LDAPv3 stuff like referrals and references. (Stig Venaas) - Fixed date('r') overflow. - Made the php.ini path reported in phpinfo() always point to the absolute path that was opened. (Zeev) - Made the INI mechanism thread safe. (Zeev, Zend Engine) - Changed setlocale() to use LC_* constants. (Jani) - ctype functions now follow the extension naming conventions. (Hartmut) - Added iconv() function (using libc or libiconv). (Stig) - Added ODBC_TYPE constant. (Stig) - Added the call_user_method_array function which allows you to call a method with an arbitrary number of parameters. (Sterling) - ext/odbc: IBM DB2 patch by Walter Franzini. - Added extension for the cracklib library. (Alexander Feldman) 19 Dec. 2000, Version 4.0.4 - Allow assigning a newly created object by reference. This is needed only if your constructor makes other data structures reference the $this object (for example, $GLOBALS["foobar"] =& $this;) The new syntax is $obj =& new MyClass(); (Andi, Zend Engine) - Allow for three expression types to be sent to functions which are requesting the function argument to be passed by reference (only c. was previously supported): a. func(new myclass()); b. func(func2()); where func2() returns a reference, i.e. is defined as function &func2(...) { ... } c. func($var); where func() is defined as function func(&$var) {...} You CAN'T count on any other expressions to be passable by reference. (Andi, Zend Engine) - Made ldap_get_entries() return an array even if there are no entries in search result. (Jani) - Fixed bad mod_perl interaction which caused segfaults when using LFS (Sascha) - const CONSTNAME now gets recognized. Before the patch only @const CONSTNAME description was recognized. - Added the is_null() function that will return true if a variable is of type null. (Sterling) - Fixed a bug which made readdir() unusable in some systems. (Jani) - Added the get_defined_functions() function which returns a list of all currently defined functions. (Sterling) - Added the get_defined_vars() function which returns an associative array of all variables defined in the current scope and their subsequent values. (Sterling) - Added the call_user_func_array() function which gives you the ability to call a user function by passing an array of parameters as the second argument. (Sterling) - Added the constant() function which returns the value of a constant given the constant's name. (Sterling) - Implemented support for Perl-style matching regexp delimiters in PCRE. You can use <{[( and )]}> to delimit your expressions now. (Andrei) - Introduced new 'F' modifier in PCRE that lets you specify a function name in the replacement argument to preg_replace() that will be called at run-time to provide the replacement string. It is passed an array of matched pattern and subpatterns. (Andrei) - Put an end to BUG#4615 (kalowsky & Eric Veldhuyzen) - Added the IRCG extension (Sascha) - Fixed realpath() in Virtual Directory mode (Daniel) - Integrated the Phil Nelson's bc math library routines into PHP, now that the license allows it (Phil Nelson ) - Added the xslt_set_error_handler() function to the Sablotron extension. (Sterling) - Improved Sablotron's error handling system allowing you to catch all errors before they are outputted to the screen. (Sterling) - Added OpenSSL extension (Stig Venaas) - Fixed/created support for Solid 3.0 databases (kalowsky) - Fixed support for Solid 2.3 databases (kalowsky) - quoted_printable_decode() function is made RFC-2045 compliant. (Kir) - Modified preg_grep() to always return the results with keys from the original array. (Andrei) - Modified preg_replace() to accept Perl-style $n backreferences in addition to \\n ones. (Andrei) - Modified preg_replace() to ignore backreferences that refer to non-existing subpatterns. (Andrei) - Fixed column-title buffer-overflow in OCIFetchStatement(). (Thies) - Added 'output_handler' INI directive (Zeev) - Fixed some buglets in the output buffering mechanism (Zeev) - Added transparent gzip compression support (Jade Nicoletti, Zeev) - Major overhaul of domxml. Added basic XPath support as well (Uwe) - Added 'r' flag to date() which generates an RFC822 formatted date, e.g. "Thu, 9 Nov 2025 16:33:01 -0500" (Colin) - In CGI mode, $HTTP_SERVER_VARS now includes all of the environment variables as well (Zeev) - Allow user to use mysql_use_result in mysql queries (Stas) - Fixed a memory leak that would occur when restarting Apache often (mookid@sigent.ru) - Fixed a bug that prevented $argv and $argc from being defined in the command line version of PHP (Stas) - Fixed a bug that prevented a changed compile-time extension_dir from affecting modules that were loaded via php.ini (Zeev) - Fixed a bug in ftp_mkdir() when used on ftp server which doesn't return the full path (Jani) - Added ImageCreateFromString() which creates an image stream out of e.g. a MySQL blob. (Mathieu) - Fixed a crash bug in imagewbmp() (Jani) - Changed the sablot configuration file so that if you use any version of Sablotron below 0.44 you must use Sablotron's built-in Expat libraries. (Sterling) - Added basic authentication support to thttpd (Sascha) - Added support for the Caudium webserver (http://caudium.net/). It's based on the Roxen SAPI module. Many bugs have been identified and fixed. (David) - Fixed mysql_close(), pg_close(), msql_close() and sybase_close() - they weren't properly closing the SQL connections (Zeev) - Fixed crypt() to supply random seed if none is given (Andi) - Made print_r() support recursive data structures, e.g. $GLOBALS. (Zeev) - Fixed a bug that caused PHP not to properly flush its output buffer, if more than one output buffer was used. (Zeev) - Fixed a bug that could draw the shutdown sequence of the PHP Apache module into an endless loop, under certain circumstances. It could cause Apache processes under Solaris to get stuck, especially when using output buffering. (Zeev) - Added support for serializing references (Stas) - Fixed conflict with OpenLDAP and Oracle 8.1.x (Jani) - parse_ini_file() supports a new optional 2nd argument that instructs it to divide the directives to arrays according to the sections in which they reside (Zeev) - parse_ini_file() is now thread-safe, and supported under Windows (Zeev) - Unified aborted-connection semantics of all SAPI modules (Sascha) - URL-opened files now store the HTTP response header in $http_response_header (Zeev) - Fixed array_rand() to shuffle results when the number of requested elements is the same as the number of elements in the array. (Andrei) - Added replace parameter to header() (Sascha) - Fixed handling of single quotes in transparent session-id mode (Sascha) - Fixed "php://*" fopen handler (Sascha) - Made rename work in threadsafe enviroments (Daniel) - Made session_destroy() close files before unlinking (Daniel) - Added array_sum() function. (Andrei) - Fixed a bug in session.c. The php_session_save_current_state did not check if mod_data is NULL and such situation is possible if the user calls session_module_name with a parameter. (alex@zend.com) - Added IIS Admin extension. (Frank) - OCIBindByName() now does better parameter-checking. (Thies) - Made read() binary-safe in sockets.c (Chris Vandomelen) - Made array_intersect() and array_diff() not alter order (Stig Venaas) - Made ldap_connect() accept URL in host parameter when using OpenLDAP 2.x. To use SSL, use ldaps://host/ as URL. (Stig Venaas) - Made resource type names visible, e.g. var_dump() and get_resource_type() display "file" for file resources. (Andrei) - Added the curl_getinfo() function to find out information about a CURL transfer. This function requires cURL 7.4.0 or above. (Sterling) - Added the CURLOPT_KRB4, CURLOPT_INTERFACE, CURLOPT_QUOTE, CURLOPT_POSTQUOTE, CURLOPT_QUOTE and CURLOPT_HTTPPROXYTUNNELL options. (Sterling) - Renamed the shm_* functions to shmop_* (Derick) - Updated ext/mysql/libmysql to version 3.23 (tim@mysql.com) - Added ldap_get_option() and ldap_set_option() functions (Stig Venaas) - Fixed a crash in CGI mode, in case no file was provided (Daniel Beulshausen& Zeev) - Fixed possible crash bug in imap_fetchstructure() (Jani) - Fixed possible crash bug in imap_open() (Jani & Mark Musone) - Added url_rewriter.tags configuration directive (Sascha) - Added CORBA client extension, ready for use (eriksson@php.net) - Fixed memory leak in x-httpd-source mode (Jason Greene) - Changed ext/gd not to be enabled by default (Jani) - Make increment of empty string ("") behave like in PHP 3 and result in "1" (Andi, Zend Engine) - Added POST handler for Adobe FDF format (Hartmut) - Added transparent read and write .gz-files on glibc based systems using the 'zlib:' fopen wrapper (Hartmut) - Fixed a problem in the configuration parser (two null bytes were added to each ENCAPSULATED TC_STRING) (alex@zend.com) - Added HMAC support in the mhash module (nmav@altera.gr) - Added module for Ovrimos sql server (nmav@altera.gr) 11 Oct 2000, Version 4.0.3 - Fixed a possible crash in -a interactive mode (Zeev, Zend Engine) - Added mysql_escape_string() (Peter A. Savitch and & Brian Wang) - Fixed many possible crash bugs with improper use of the printf() family of functions (Andi) - Fixed a problem that allowed users to override admin_value's and admin_flag's (Zeev) - Fixed PostgreSQL module to work when the link handle is omitted (Zeev) - Fixed returning of empty LOB fields in OCI8. (Thies) - Added Calendar module to default Win32 build (Andi) - Added FTP module to default Win32 build (Andi) - Fixed crash in the POSIX getrlimit() function (alex@zend.com) - Fixed dirname() under certain conditions (Andi) - Added --with-imap-ssl to support SSL'ized imap library in RH7 and others (Rasmus) - Fixed possible crash bug in parse_url() (Andi) - Added support for trans sid under Win32 (Daniel) - Added IPv6 support in fopen (Stig Venaas) - Added the shmop extension. It allows more general ways of shared memory access. (thanks to Ilia Alshanestky and Slava Poliakov (Derick) - Added the ability for CURLOPT_POSTFIELDS to accept an associative array of HTTP POST variables and values. (Sterling) - Added the CURLOPT_HTTPHEADER option to curl_setopt(). (Sterling) - Added the curl_error() and curl_errno() functions. (Sterling) - Changed ext/db not to be enabled by default (Jani) - Fixed building Apache SAPI module on SCO UnixWare (Sascha) - Fixed writing empty session sets to shared memory (tcarroll@chc-chimes.com) - Added support for BSD/OS make (Sascha) - Added improved URL rewriter (Sascha) - Fixed readdir_r() use on Solaris (Sascha) - Improved HTTP headers for private-caching (jon@csh.rit.edu, Sascha) - Added new function session_cache_limiter (jon@csh.rit.edu, Sascha) - Added ftp_exec to the ftp functions (thanks to ) (Derick) - PEAR: add last executed query as debug info in DB errors (Stig) - PEAR: allow multiple modes in PEAR_Error (Stig) - Made the Sybase CT module thread safe (Zeev) - Added second argument to array_reverse() that indicatese whether the original array keys should be preserved. (Andrei) - Clean up htmlspecialchars/htmlentities inconsistencies. (Rasmus) - PEAR: renamed DB_GETMODE_* to DB_FETCHMODE_*, added setFetchMode() in DB_common to set the default mode, added some MySQL tests (Stig) - Made eval() and several other runtime-evaluated code portions report the nature and location of errors more accurately (Stas) - Added an optional parameter to wordwrap that cuts a string if the length of a word is longer than the maximum allowed. (Derick) - Added functions pg_put_line and pg_end_copy (Dirk Elmendorf) - Added second parameter for parse_str to save result (John Bafford) - Fixed bug with curl places extra data in the output. (medvitz@medvitz.net) - Added the pathinfo() function. (Sterling) - Updated sybase_ct module and its sybase_query to use high performance API. (Joey) - Added a more configurable error reporting interface to DB. (Stig) - Added is_uploaded_file() and move_uploaded_file() (Zeev) - Added several directives to php.ini - post_max_size, file_uploads, display_startup_errors - see php.ini-dist for further information (Zeev) - Worked around a bug in the libc5 implementation of readdir() (Stas) - Fixed some potential OpenBSD and NetBSD crash bugs when opening files. (Andi) - Added EscapeShellArg() function (Rasmus) - Added a php.ini option session.use_trans_sid to enable/disable trans-sid. (Sterling) - Added the Sablotron extension for XSL parsing. (Sterling) - Fixed a bug in checkdate() which caused < 1 years to be valid (Jani) - Added support for an optional output handler function for output buffering. This enables transparent rendering of XML through XSL, transparent compression, etc. (Zeev) - Added support for user defined 'tick' callback functions. This helps emulate background processing. (Andrei) - Fixed problem with having $this as the XML parser object. (Andrei) - Internal opened_path variable now uses the Zend memory manager so that full paths of files won't leak on unclean shutdown (Andi) - Removed support of print $obj automatically calling the __string_value() method. Instead define yourself a method such as toString() and use print $obj->toString() (Andi, Zend Engine) 29 Aug 2000, Version 4.0.2 - Added PHP API for Zend's ticks. (Stig) - PHP 3 regression testing framework re-born (Stig) - Added php_uname() function (Stig) - Made a minor change to allow building with OpenLDAP 2.0 (Stig Venaas) - Fixed a bug in preg_replace() that would truncate subject string if the first argument was en empty array. (Andrei) - Added ob_get_length function (Stig) - Fixed a bug that did not respect limit parameter in preg_replace() when using /e modifier. (Andrei) - Added ability for each xml_set_*_handler() function to take the array($obj, 'method') syntax for the handler argument as well as the normal function name. (Andrei) - Updated array_walk() to be able to accept array($obj, 'method') syntax for the walk function. (Andrei) - Fixed segfault with fgets(), fgetcsv(), fgetss(), and fread() when called with negative length argument. (Torben) - Fixed by-reference parameters passing for xml_ functions and for scanf functions (Stas) - Added experimental Oracle LDAP SDK support. 8.1.6 or later needed. Configure with something like --with-ldap=/usr/local/oracle/product/8.1.6 (Stig Venaas) - Fixed memory leaks in eval(); A script that used eval() extensively, could end up consuming very large amounts of memory during execution (Zeev, Zend Engine) - Fixed memory_limit feature, which did not work properly in previous versions (Zeev, Zend Engine) - Fixed stdout support with the swf extension. (Sterling) - Fixed byte order for ip2long and long2ip (Stas) - Fixed dbase_add_record. (Sterling) - Added support for libmcrypt 2.4.4 (Derick) - Added strncasecmp function (Andi, Zend Engine) - Fixed FTP module to accept multiline server replies (Jani) - Fixed switch which only has a single default rule. (Andi, Zend Engine) - Fixed problem with nested foreach()'s. (Andi, Zend Engine) - The CCVS module is now stable and compiling. It compiles as a CGI and into Apache cleanly without warnings. (Brendan W. McAdams) - Fixed mSQL_close(). (nick@loman.net) - Made return() in a require()'d file work like return() in an include()'d file (Andi & Zeev, Zend Engine) - Changed require_once() to work using the same table as include_once() (Andi & Zeev, Zend Engine) - Fixed PostgreSQL module to work when the link handle is omitted (Zeev) - Fixed the Sybase modules to work properly with PHP 4.0 (Zeev) - Fixed CLOB handling in OCI8 driver when using variable-width character sets. (Thies) - Added 4th optional parameter to sybase_[p]connect to specify the charset for the connection (alf@alpha.ulatina.ac.cr) - Fixed support for current thttpd releases. (Sascha) - Added support for kerberized IMAP library using --with-kerberos (Rasmus, Sascha) - Virtualize realpath, chmod, chown and utime (Stas) - Support content-encoding headers in file upload MIME parts (Ragnar Kjørstad) - Fixed warning when shutting down OCINLogon() connections. (Thies) - Fixed \n in session variables bug on Win32 (Stas) - OCIError() would sometimes not report failed connections. (Thies) - Fixed HEAD request bug on an Apache ErrorDocument redirect and preserve the status code across the redirect as well. (Rasmus) - Added Olympus-specific tags to read_exif_data() (Rasmus) - Fixed bug in imap_fetchheader() where using FT_PREFETCHTEXT didn't return the body. Bug #4447. (Jani) - Fixed exec() returning "\0" when output is empty - Added XML_Parser class in PEAR (Stig) - Added "make test" target in pear/ and added some regression tests (Stig) - Fixed bug in strip_tags function as per bug #5857 (Rasmus) - Fixed reading of IPTC via GetImageInfo() for certain JPEG files. (Thies) - Improved the output-buffering functions to be re-entrant (Zeev) - Made ldap_add(), ldap_modify(), ldap_mod_add(), ldap_mod_replace() binary-safe. Original patch: Terrence Miao (Jani) - CGI aka. command line version has now an option '-l' for syntax check without execution (Hartmut) - Fixed bug in ldap_get_values_len() which makes it NULL-safe. (Jani) - Bug-report and fix submitted by Michel Alexeline - Make ext_skel create a Makefile.in set up to handle shared extension support automatically (Rasmus) - Fixed php_realpath not to die on non-existing files (needed for touch()) (Stas and china@thewrittenword.com) - Fixed get_browser() function (Stas) - Fixed symbol clash which caused a DSO problem on OpenBSD (Rob Black and anil@recoil.org) - Added new function: ldap_compare(). (Jani) - Fixed a bug in ldap_get_entries() and ldap_get_attributes(). (Jani) - Ported DB to new error reporting scheme in PEAR. (Stig) - Added sybase and ibase DB backends in PEAR. (Sterling) - New PEAR package Payment_Verisign for use with the Payflow Pro (pfpro) extension. (David Croft) - Added CURL support. (Sterling) - Catch users trying to set "compatibility" parameter in PDF, which is not supported from user-land. (Joey) - Fixed dbase_add_record. (Sterling) - Added new function wordwrap() to wordwrap long strings from Chris Russel (David Croft) - Added four additional arguments: attrsonly, sizelimit, timelimit, deref which were missing in ldap_search(), ldap_list() and ldap_read() functions (Jani) - Fixed a bug in ldap_search/list/read() which prevented returning the partial results when 'Sizelimit exceeded' error occurred. (Jani Taskinen) - Fixed preg_replace() to automatically escape quotes in matched strings when using /e modifier. (Andrei) - Itanium patch (Steve Robb) - Set default include_path so PEAR files can be reached (Stig) - Added "pear" executable, requires CGI version installed (Stig) - Added extension ii for Ingres II native support. See README in ext/ingres_ii directory. (David H) - Added Win32 project for the Interbase module (Zeev) - Added ability to perform calls to the parent class without explicitly specifying its name, using parent::func_name(...) (Zeev, Zend Engine) - You can now call Ora_Error() without prameters to get the reason for a failed connection attempt. (Kirill Maximov) - New extension "pfpro" for interface with Verisign Payflow Pro (David Croft) - Added IMG_GIF, IMG_JPG, IMG_JPEG, IMG_PNG and IMG_WBMP constants for imagetypes() function (Rasmus) - Added ImageTypes() function which returns a bitfield with the supported image formats. 1=gif, 2=jpeg, 4=png and 8=wbmp (Rasmus) - Make it possible to specify an empty string as a thousands-seperator in number_format() (Rasmus) - Shared module support for LDAP extension (Troels Arvin) - Fixed a bug with imap_mail where apache would segfault if the rpath parameter was specified. - Use dashes and short day name in cookies since some browsers seem picky about this (Rasmus) - Added pspell module. (Vlad) - Added 3 additional arguments to the user-defined error handler - the file name and line number in which the error occured, and the context (local variables) of the code in which the error occured (Zeev, Zend Engine) - Improved the error handling code to handle an error in a user-defined error handling function (Zeev, Zend Engine) - Fixed leak when using string offsets in the array() construct. (Andi, Zend Engine) - Fixed corruption problem when changing deeply nested values in objects. (Andi & Zeev, Zend Engine) - Improved array_multisort() to be able to specify sort type as well sort order. Incidentally, it can be used to sort multi-dimensional arrays as well. (Andrei) - Fixed a possible data corruption in case of a huge amount of aborted requests (Zeev) - Apache module would sometimes close a wrong file-descriptor. (Sascha) - Fixed use of alternative storage handlers in the session module. (Sascha) - Updated str_pad() to be able to pad on left/right/both sides. (Andrei) - Fixed crash in gzopen(). (Thies) - Multiple character set support in gdttf.c (Rob Goodwin) - When using HTTP auth from PHP, fill in the %u custom log field so the authenticated used id will get logged in the Apache access_log (Rasmus) - Support for pdflib 3.01. (Uwe) - FDF Data is handled properly and can be accessed by reading HTTP_RAW_POST_DATA. (Uwe) - Added new 'O' format modifier that will output the GMT offset as "[+-]HHMM" (eg: Pacific time is -0700). This is useful for things such as Date: mail headers. (Mike W) - Fixed crash on OCI?Logon() failure. (Thies) - Make the special Header("http/...") response be case insensitive like 3.0 (Rasmus) - Allow cybercash to compile as a DL module. (Sterling) - Fixed the dbase_create function. (Sterling) - Fixed a problem under some versions of Windows that could cause PHP to hang on startup if errors occured, e.g. in the php.ini file (Zeev) - Fixed opendir() again. It should actually work well continuously now (Zeev) - Added three additional arguments to be sent to a user-defined error handler - the filename and line number in which the error occured, and the context (the local variables) of the error (Zeev, Zend Engine) - Improved the error handling code to handle an error in a user-defined error handling function (Zeev, Zend Engine) - Added an optional parameter to preg_replace() that can be used to specify how many replacements to make. (Andrei) 28 Jun 2000, Version 4.0.1 - Fixed a possible crash in the LDAP modify code. (Eric Kilfoil) - Fixed a bug in opendir(), which prevented readdir() from working properly if the $dir argument wasn't explicitly specified (Zeev) - Made --enable-discard-path work again. (Andi) - Removed 8KB limit on line length of the file() function (Zeev) - Disabled dl() when PHP is being used as a module inside a multithreaded web server - it didn't work before, and caused weird results (Zeev) - Added the ImageColorClosestHWB(), ImageCopyMerge() and ImagePaletteCopy() functions. (Sterling) - Added ImageCreateFromWBMP() function. (Jouni) - Fixed problems with POST requests under the NSAPI module. (Roberto Biancardi) - Added spliti() function. (Thies) - Fixed serializer behaviour with regards to serializing objects whose class definition was not available in the deserializing context. (Sascha) - Improve memory cache performance and increase cache size. (Stas, Zend Engine) - Added a crc32 checksum function - used by the UdmSearch search engine and currently run through a system call. This will speed up the UdmSearch php frontend significantly. (Rasmus) - Modified in_array() to not touch array pointer. (Andrei) - Added restore_error_handler(). (Zeev, Zend Engine) - Fixed erroneous file names and line numbers in error situations under the multithreaded version of PHP - most noticeably Win32 (Zeev, Zend Engine) - Fixed problem with CGI crashing on certain servers especially Windows Apache & O'Reilly website (Andi) - Added Pi3Web SAPI module; run ./configure --with-pi3web to enable this. (Holger; zimpel@t-online.de) - Enhanced WDDX functions to call __sleep() and __wakeup() when working on objects. (Andrei) - Changed WDDX to serialize arrays as structs only if needed. (Thies) - Implemented max_execution_time under Win32 (Zeev) - Updated strtotime() to handle many more formats. It now has complete feature parity with GNU date command. (Andrei) - Added support for multiple arguments in unset(). (Faisal, Zend Engine) - Functions that expect a resource but are passed something else now return NULL instead of FALSE. (Thies, Zend Engine) - Fixed gmmktime(), on certain systems it incorrectly adjusted for the timezone offset and daylight savings time. (Andrei) - Moved VC++ Win32 project and workspace files to the win32 directory (Zeev) - Fixed checkdate() to not return true on non-numeric arguments (Rasmus) - Added --enable-c9x-inline option for compilers which support the new C9x standard. If you encounter undefined references to i_zend_is_true and other symbols, you should enable this. (Sascha, Zend Library) - Fixed a problem in ldap_add() and ldap_modify(), sometimes added trailing garbage to the values (Stig Venaas) - Fixed a problem with dbmopen() not handing 'c' correctly with dbm/db/ndbm databases. (JimJag) - Fixed a crash in number_format() when used with locales. (Andrei) - Fixed an initialization problem in the MS-SQL problem that could cause a crash in mssql_query() (Zeev) - Upgraded PCRE to version 3.2 and fixed a bug when anchored pattern matched an empty string. (Andrei) - Fixed a bug that prevented PHP from paying attention to the extension_dir directive with extensions that were loaded from the php.ini file (Zeev) - Changed set_error_handler() to return the name of the previously defined error handler, if any (Zeev, Zend Engine) - Declared officially dead. It didn't work in PHP 4.0.0 either, but now it's gone for good (Zeev) - Make convert_cyr_string() binary safe and stop it from corrupting other PHP variables. (Andi) - Added functions array_unique, array_intersect and array_diff (Stig Venaas) - Fixed problem when using uninitialized values in comparisons with strings. They behave as empty strings again just like in PHP 3. (Andi & Zeev, Zend Engine) - Fixed 'Z' flag in date() to adjust for daylight savings time. (Andrei) - Fixed var_dump() not to modify the internal order of array elements (Zeev) - Fixed stripcslashes() to remove to strip \ in unknown escapes instead of leaving it. (Andrei) - Changed WDDX to always serialize arrays as structs. (Andrei) - Fixed include_once() to issue a warning in case the supplied file name is not found (Zeev, Zend Engine) - Fixed a bug in get_declared_classes() which could return the same class multiple times under certain circumstances (Zeev, Zend Engine) - Fixed a bug in rawurldecode() that would cause in rawurldecode() corrupting its argument (Zeev) - Parse errors (or other errors) in the php.ini files under Windows will no longer mess up the HTTP headers in CGI mode and are now displayed in a message box (Zeev) - Fixed a crash in OCIFetchStatement() when trying to read after all data has already been read. (Thies) - fopen_wrappers() are now extensible via modules (Hartmut Holzgraefe) - Make trim strip \0 to match php 3 (Rasmus) - Added function imagecreatefromxbm(). (Jouni) - Added function imagewbmp(). (Jouni, based on patch from Rune Nordbøe Skillingstad) - Added str_pad() for padding a string with an arbitrary string on left or right. (Andrei) - Made the short_tags, asp_tags and allow_call_time_pass_reference INI directives work on a per-directory basis as well, e.g. from .htaccess files. (Zeev) - Added fflush() function. (Eric Huss) - Fixed a problem with static variables, default function arguments and class member variables, that contained array values. (Andi & Zeev, Zend Engine) - Fixed virtual() when used with output buffering (Marc Pohl) - Clean up constants in flock() function and add optional 3rd arg which is set to true on EWOULDBLOCK (Rasmus) - Added functions pg_loimport(), pg_loexport(). (Jouni) - Added SWF support to getimagesize() function (Derick Rethans) - Added support for both indexed and non-indexed arrays of file uploads eg. name="file[]" type="file" (Rasmus) - Added create_function(), which gives the ability to create functions on-the-fly (Zeev, Zend Engine) - Added support for comparisons of arrays (with arrays) and objects (with objects); The equality operator (==) performs an unordered comparison, whereas the identity operator (===) performs an ordered comparison (Zeev, Zend Engine) - Allow all functions that receive user-defined function callbacks to accept an array that contains an object and a method name, in place of a function name, e.g. usort($array, array($obj, "ObjSort")) (Zeev, Zend Engine) - Added set_error_handler() to allow custom error handling functions, instead of the built-in error handling code (Zeev, Zend Engine) - Renamed user_error() to trigger_error(); user_error() remains defined for compatibility (Zeev, Zend Engine) - Fixed the global/static statements to require a trailing terminating semi-colon ';'. (Andi, Zend Engine) - Cleaned up PCRE extension and made it binary-safe. (Andrei) - Added third argument to in_array(). If it's true, then in_array() will use strict comparison instead of the default one. (Andrei) - Added pg_trace() and pg_untrace (Dominic J. Eidson & Zeev) - ignore_user_abort=Off is now default. (Thies) - Added array_merge_recursive() that will recursively merge values under the same keys. (Andrei) - fixed crash in OCIParse when parsing invalid SQL. (Thies) - Fixed a bug in mysql_connect() that made it ignore the socket argument, in case of non-persistent connects (Zeev) - Added disable_functions php.ini directive, to allow administrators to disable certain functions for security reasons (Zeev) - Fixed sessions on Win32. When setting the directory depth parameter in save_path you need to now delimit it with a ';' instead of ':', e.g "5;/tmp" instead of "5:/tmp" (Andi) - Changed the Apache handler's return status to 'Declined' when a requested PHP file could not be found. Returning 'Not Found' caused problems in the ErrorDocument handler stage in that $REDIRECT_REDIRECT_ERROR_NOTES was not getting set at all. Moving to 'Declined' should fix this and I can't see any other side effects. (Rasmus) - Fixed scanning decimal numbers in internationalized environments. They should always be in standard US format e.g. 23.3. (Andi, Zend Engine) - Added second argument to preg_quote() which allows quoting of one additional character, usually the regex delimiter. (Andrei) - Uncommitted outstanding OCI8 transactions are now rolled back before the connection is closed. (Thies) - ignore_user_abort() & friends should now work in CGI mode as well. (Patch by daniel.braun@ercom.fr) - Added extension YAZ (dickmeiss). - Fixed a crash bug triggered by certain cases of class redeclarations (Stas & Zeev, Zend Engine) - Fixed min()/max() segfault. (Andrei) - New module for reading EXIF header data from JPEG files. Most digital cameras will embed all sorts of information about a picture inside the jpeg images it generates. (Rasmus) - Fixed basename() bug where "file.ext///" would not return the same as "/path/file.ext///" (Rasmus) - Added the swf_ortho function. (Sterling) - Moved to virtual current working directory support. This highly improves the functionality and stability of multi-threaded versions of PHP (Andi, Sascha) 22 May 2000, Version 4.0.0 Release - Allow the writing of flash files to stdout. - Fixed a crash bug in .phps syntax-highlighted files (Andi) - Improved round() to allow specification of rounding precision. (Andrei, Todd Kirby ) - Added SORT_REGULAR, SORT_NUMERIC, SORT_STRING flags that can be used with non-user sort functions for precise sorting behavior. (Andrei) - Fixed two 64-bit issues (startup crash, gethostbyaddr). (Sascha) - NULL values are now preserved in the return value of mysql_fetch_array() and mysql_fetch_object(). (Andrei) - Ported InterBase module finally from PHP 3 to PHP 4. Full support for InterBase 6. (Jouni) - Added swf_definepoly for drawing polygons to the SWF functions. (Sterling) - Ported imagegammacorrect from PHP3 to PHP4. (Sterling) - Added array_rand() function. (Andrei) 8 May 2000, Version 4.0 Release Candidate 2 - NSAPI WIN32 Module compilable, untested (Shane) - Apache WIN32 Module compilable and lightly tested. (Shane) - Enabled assert() by default in php.ini-dist. (Andrei) - Put in safeguards in case dynamic code evaluation in assert() and preg_replace() with /e modifier fails. (Andrei) - Fixed infinite recursion when serializing $GLOBALS[] in WDDX. (Andrei) - Made WDDX serialization properly escape <, >, and &. Also speeded up the serialization in general. (Andrei) - Moved install-local to install-sapi for clarity. (Joey) - Improved extension build framework. Refer to README.SELF-CONTAINED-EXTENSIONS for an introduction. (Sascha) - ImagePolygon() is no longer limited by a maximum number of polygons. (Marc Pohl) - Added configure time checking for bcmath package. (Joey, Sascha) - Added get_declared_classes(). (Andrei, Zend Engine) - Added initial NSAPI module from Jayakumar Muthukumarasamy. (Rasmus) - Added the SWF module which allows you to create Macromedia Flash files via libswf. (Sterling) - Improved UNIX build system to support more vendor make tools (Sascha) - Updated natural comparison/sorting algorithm by Martin Pool . (Andrei) - Fixed a crash in array_multisort() that happened when empty arrays were passed to it. (Andrei) - Added substr_count() from Peter Kovacs. (Andrei) - Added an optional third argument to fseek to indicate where to seek from. (Andrei) - OCIBindByName() will no longer complain about bindlength beeing zero. (Thies) - Converted the IMAP module to the high performance API (Zeev) - The fgetcsv() function now handles embedded end-of-line in a quoted field (Nick Talbott) - Added user_error(), to allow explicitly generate error messages from scripts (Zeev, Zend Engine) - Fixed a problem in long2ip() that occasionally returned incorrect IP address. (Evan, Andrei) - Fixed many memory leaks in the IMAP module (Stas, Andi, Zeev) - Fixed bug in number_format (Jon Forsberg) - Make error_prepend_string and error_append_string work (Rasmus) - array_walk() now automatically resets the array. (Andrei) - Added natural comparison/sorting routines strnatcmp(), strnatcasecmp(), natsort(), and natcasesort(). These are useful for comparing and sorting strings that contain numbers. Based on the code from Martin Pool . See http://www.linuxcare.com.au/projects/natsort/ for more info on natural sorting. (Andrei) - Zeus Webserver support (version 3.3.6+) for ISAPI (Ben Mansell) - Fixed several problems with the PATH_TRANSLATED and PHP_SELF under Apache (Paul Gregg & Zeev) - Ported ldap_get_values_len() function from PHP3 to PHP4. (Sterling) - Fixed a problem in include_once() with non constant arguments (Andi & Zeev, Zend Engine) - Added php.ini-optimized (Zeev) - Ported ldap_errno(), ldap_err2str() and ldap_error() from PHP3 to PHP4. (Sterling) - WDDX now defaults to ISO-8859-1. (Thies) - Fixed crash resulting from IMAP's error handling (Stas) - Added $HTTP_POST_FILES[filename][tmp_name] - it was previously impossible to retrieve the temporary name of an uploaded file using $HTTP_POST_FILES[] (Zeev) - Made the IMAP and LDAP modules compilable under Windows and thread-safe (Zeev) - Fixed a problem when dealing with large POST blocks in CGI mode (Zeev) - Added session_get_cookie_params() function. (Sterling) - Fixed return of stristr() to no longer always be lowercased. (Andrei) - Changed the Windows version of PHP so that a php.ini file is no longer mandatory (Zeev) - session_start() is now more verbose if headers cannot be send. (Thies) - Fixed a memory leak when using assign-op bitwise operators on strings (Zeev, Zend Engine) - Added support for reading properties that require arguments in the COM module - writing to them will only be supported in PHP 4.1 (Zeev) - Fixed a very old legacy memory leak in the COM module (Zeev) - Fixed problems with object-overloading support - noteably, COM and Java (Zeev, Zend Engine) - Fixed an overrun in WDDX. (Thies) - Fixed a crash bug with modules loaded through dl() not properly freeing their resources (Zeev, Zend Engine) - Added localtime() function. (Sterling) - Added the 'I' format option for the date function, this option will return true or false depending on whether or not daylight savings time is in effect. (Sterling) - Added gmstrftime() function. (Sterling) - snmp_walkoid is now an alias for snmp_realwalk. (Sterling) - Fixed a bug that could cause a crash when using 'global' inside large include files (Stas, Zend Engine) - Added --enable-libgcc switch to force linking against libgcc (Sascha) - Fixed dynamic loading where extension_dir had no trailing slash (Sascha) - Fixed dynamic loading on OpenBSD (Sascha) - Improved POSIX threads check. ZTS works now on at least Linux, Solaris, FreeBSD and OpenBSD (Sascha, TSRM) - Added !== operator support. (Torben, Zend Engine) 27 March 2000, Version 4.0 Release Candidate 1 - Added support for UCD-SNMP 4.1.x (Sascha) - Fixed a data corruption bug in mysql_result(), if used in table.fieldname mode (Zeev) - Fixed a crash problem in func_num_args(), func_get_arg() and func_get_args() when used as function arguments (Andi, Zend Engine) - Added get_class_methods(string classname) function. (Andrei) - Added 'I' switch to test whether or not DST is active. (Sterling) - Fixed a data corruption bug in mysql_result(), if used in table.fieldname mode (Zeev) - Modified the registry INI entry reader (Win32) to work with drive letters. For example, if you wish to wish to specify INI entries for C:\foo\bar, you should create HKLM\PHP\Per Directory Values\C\foo\bar in the registry, and add string values for each directive you want to override in this directory (Zeev) - Fixed extract() for EXTR_PREFIX_SAME and EXTR_SKIP cases. (Andrei) - stristr() no longer modifies it's arguments. (Thies) - Don't default to iso-8859-1 since this confuses some browsers. (Rasmus) - Make it possible to specify both a port and a socket in mysql_[p]connect. (Rasmus) - Added --disable-pic for disabling generating PIC for shared objects on platforms which support it (i.e. Linux) (Sascha) - serialize()/unserialize() now call __sleep() and __wakeup() when working on objects. (Thies) - renamed to_string() method to __string_value() for consistency. (Thies, Zend Engine) - Fixed a bug in the third argument to define() - Added is_numeric() that returns true if the argument is a number or a numeric string. (Andrei) - domxml now supports libxml 2.0 Beta and drops support for older versions, due to massive changes in libxml - fixed possible crash in unserialize() if serialized data was corrupted. (Thies) - Changed $HTTP_STATE_VARS to $HTTP_SESSION_VARS. Use only the latter version now! (Andrei) - Added GD-JPEG Support (Rasmus) - Prevent from loading dynamic PHP modules which were compiled with different debug and thread safety modes than PHP, which resulted in a crash (Andi) - connection_aborted() and friends work again (Thies) - Upgraded to libtool 1.3.4 (Sascha) - UNIX configure creates config.nice in the build directory now which allows easy reuse of configuration options (Sascha) - Added support for embedded MySQL client library. Unless you specify a path to --with-mysql, the bundled MySQL client library will be used (Sascha) - Added include_once() and require_once() functionality (Andi, Zend Engine) - Removed support for pdflib < 3.0 (Uwe) - Added auto-registration of everything in $HTTP_SESSION_VARS[] if register_globals is turned off. (Andrei) - Cleaned up extension namespace (Stig) - OCINLogon() sessions are now closed again. (Thies) - Added ip2long() and long2ip(), courtesy of Faisal Nasim (Andrei) - Added ftruncate() and fstat(), courtesy of Faisal Nasim (Andrei) - Added parse_ini_file(). Currently implemented in non thread safe version of PHP, and currently lacks section support (Zeev) - "none" is now equivalent with "" in Apache config directives (Stig) - OCINLogon no longer crashes. (Thies) - Fixed comparisons of (string) "nan" with (string) "nan". (Thies, Zend Engine) - Switched back to the old $HTTP_*_VARS[] behavior - $HTTP_GET_VARS["foo"] and $foo are no longer references to each other, but separate variables like they were prior to PHP 4.0 Beta 4 (Zeev) - Fixed Sybase-DB compilation (Zeev) - Fixed a (fairly common) situation where error_reporting values would not be properly restored after a call to error_reporting(), in between requests (Zeev) - The various $HTTP_*_VARS[] are now protected, and cannot be manipulated by user input (Zeev) - Added ini_set() as an alias to ini_alter() (Zeev) - The string None is now recognized as a keyword by the php.ini processor, and can be used to denote an empty string (Zeev) - Added get_class_vars(string class_name) and get_object_vars(object obj) functions. (Andrei, Zend Engine) - Added pdf_set_parameter(), pdf_skew(), pdf_show_boxed() (Uwe) - Fixed comparison of (string) "inf" with (string) "inf", which was erroneously returning false (Zeev) - Implemented default_charset and default_mimetype config directives (Stig) - Ported T1lib support from PHP3. (Jouni) - Fixed -DEAPI inheritance from APXS. (Sascha) - Fixed possible crash in module-shutdown. (Thies) - Fixed safe_mode_protected_env_vars INI directive (Zeev) - Fixed getrusage() (Sascha) - Fixed OCI8 crash when returning cursors from stored-procedures. (Thies) 21 February 2025 Version 4.0 Beta 4 patch level 1 - Fixed crash when magic_quotes were switched off. (Thies) - Support for pdflib 2.30 (Uwe) 20 February 2000, Version 4.0 Beta 4 - Introduced $HTTP_POST_FILES[], that contains information about files uploaded through HTTP upload (Zeev) - Made PHP work under Microsoft Personal Web Server, under both Windows NT workstation and Windows 95 (Zeev) - Made multipart/form-data content obey to the variables_order directive (Zeev) - Updated the browscap module to work with PHP 4.0 (Zeev) - Recover gracefully in ISAPI after the client prematurely presses STOP (Andi) - Fixed bug in unset() on array offsets which are referenced more than once (Andi, Zend Engine) - Improved ISAPI module - it should no longer be necessary to set PHP as an ISAPI filter, only as an ISAPI extension, unless you wish to perform authentication using PHP. This didn't yet get enough testing, but it should work (Zeev) - Fixed RFC1867 file upload under Windows (Zeev) - Initital support for pdflib 2.20 (Uwe) - Added PostgreSQL support for DB (Rui Hirokawa ) - Re-introduced "none" for disabling auto_prepend/append_file (Stig) - Added DB/storage (Stig, PEAR) - Introduced DB warnings (Stig, PEAR) - Fixed overrun in strip_tags (Stas) - Fixed crash in strip_tags() and related functions. (Thies) - Workaround for bogus POST-Data from IE/Mac. (Thies) Patch by Alain Malek - Finished the server abstraction layer; All of the PHP code is now shared across different servers (Apache, CGI, IIS, etc.), except for thin interface modules (Zeev) - Added NULL-support in gettype(). (Thies) - base64_decode() will decode POST data correct. (Thies) Patch submitted by: Turadg Aleahmad - Much more work on domxml. Build xml tree, create xml doc works (Uwe) - Made foreach() work on objects. (Thies, Zend Engine) - Added domxml extension based on libxml, still little functionality (Uwe) - Fixed memory corruption in fgetss(), strip_tags() and gzgetss() (Zeev) - Updated calendar dynamic library to work with PHP 4. (Evan) - Added strncmp() function, courtesy of Walter. (Andrei) - Made the output of var_dump() more informative. (Thies) - Fixed some OCIBindByName() problems. (Thies) - Protect the ISAPI module against exceptions. Stack overflows in scripts are now nicely detected and handled (Zeev) - Fixed possible buffer-overflow in base64_decode. (Thies) - Fixed possible buffer-overflow in setcookie(). (Thies) - Fixed signal() bug that could cause the Apache master process to die. (Thies) - Added session_set_cookie_params() function. (Andrei) - If header information is sent after output has already been sent, the warning message will now state the filename and line number at which the first output was made (Zeev) - Added the XML Expat library to the standard PHP source distribution thanks to its author James Clark (Andi & Zeev) - Added XML support to the default Win32 build (Andi & Zeev) - Added socket_get_status() function. Renamed: set_socket_timeout() -> socket_set_timeout() set_socket_blocking() -> socket_set_blocking(). (Andrei) - Added realpath() function. (Andrei) - mktime interprets years in the range 0-70 now as 2000-2070. You can continue to specify the complete year (i.e. 1920) (Sascha) - Added the ability to control the environment variables the user is allowed to change in Safe Mode, using INI directives (Zeev) - Fixed a crash bug in strtr() working on large input strings (Zeev) - Ora_GetColumn()/Ora_FetchInto() now return NULL for NULL-Columns. (Thies) - OCI8 now supports binding of NULL-values. Module cleanups. (Thies) - Added ability to set timeout on socket read operations through set_socket_timeout() function. (Andrei) - Added implicit_flush INI directive (Zeev) - Added implicit_flush() to control whether flush() should be called implicitly after any output (Zeev) - Fixed a crash in pfsockopen() (Zeev) - Fixed a possible crash in phpinfo() (Zeev) - Added register_argc_argv INI directive, to allow to selectively disable the declaration of the $argv and $argc variables for increased performance (Zeev) - Added $HTTP_ENV_VARS[] and $HTTP_SERVER_VARS[] support, which similarly to $HTTP_GET_VARS[], contain environment and server variables. Setting register_globals to Off will now also prevent registration of the environment and server variables into the global scope (Zeev) - Renamed gpc_globals INI directive to register_globals (Zeev) - Introduced variables_order that deprecates gpc_order, and allows control over the server and environment variables, in addition to GET/POST/Cookies (Zeev) - new function cpdf_set_document_limits() (Uwe) - Applied safe-mode patch to popen(). (Patch by Kristian Köhntopp) - str_repeat() now returns correct length. (Thies) - Don't assume libz and libpng are installed for the GD checks (Rasmus) - Implemented support for and types according to WDDX version 1.0 (Andrei) - Made var_dump()/serialize()/unserialize() NULL aware. (Thies) - Added new NULL constant (Zeev, Zend Engine) - Fixed -c support in the standalone CGI binary (Zeev) - Increased PHP's performance by 5-15% using a new memory cache (Andi & Zeev, Zend Engine) - Improved the php.ini reader to support constants and bitwise operators (Zeev) - Fixed strrev() to no longer modify arg1. (Thies) - Fixed buffer overruns in iptcembed(). (Thies) - Fixed a bug in ODBC error reporting (Zeev) - Added PHP_Logo_GUID() and Zend_Logo_GUID() functions, that return the GUIDs of the PHP and Zend logos used in phpinfo() (Zeev) - Added GNU Pth support (Sascha, TSRM library) - Removed select(), fd_set() and fd_isset() - will be reimplemented soon! (Thies) - Improved Win32 performance significantly by using different mutexes (Zeev, TSRM library) - Made quotemeta() and preg_quote() binary-safe. (Andrei) - Added UDP support in fsockopen(). (Evan) - Added --disable-pear option (Andrei) - Renamed libzend repository to Zend (Zeev) - Added support for thttpd (Sascha) - Added session.cache_limiter and cache_expire options (Sascha) - Restored the PHP_VERSION and PHP_OS constants (Zeev) - Added get_loaded_extensions(), extension_loaded(), and get_extension_funcs() functions. (Andrei) - Added date/time stamping to PHP error log file. (Andrei, Joey) - Added is_subclass_of() function (Andrei, Zend Engine) - Implemented count_chars(). (Thies) - Added class_exists() function (Andrei, Zend Engine) - Made strspn() and strcspn() binary-safe. (Andrei) - Added array_multisort() function. (Andrei) - Made pageinfo.c thread-safe (Sascha) - Made implode() binary-safe (Andrei) - Made strstr(), stristr(), and ucwords() binary-safe() (Andrei) - Made strtoupper(), strtolower(), substr_replace() binary-safe. (Andrei) - Fixed a crash in the Apache syntax highlighting mode (Zeev) - Report all ODBC error's not just the one on the top of the stack (lurcher) - OCI8 now returns NULL values in LONG columns correct. (Thies) - Added support for a C-like assert() function. (Thies) - Added CyberCash support. (Evan) - Made explode() binary-safe. (Thies) - Made strpos() binary-safe. (Thies) - Added XML_Set_Object() function, now you can use the XML-Parser from within an object. (Thies) - Session vars are now decoded into $HTTP_STATE_VARS[] array and the globals, depending on track_vars and gpc_globals settings (Andrei) - Added get_used_files() function - returns a hash mapping the use()'d files to their full path (Zeev) - PHP 4 scripts will now obey the max_execution_time setting and actually time out (Rasmus) - Added configure command to phpinfo() output (Stig) - Added optional socket path to the mysql_?connect() functions (Rasmus) - Made mysql and gd work as shared extensions again (Stig) - Make the global GET/POST/Cookie variables and their $HTTP_*_VARS[] counterparts be references to each other (Zeev) - Added support for the 'use' keyword - behaves like 'require', but will not use the same file more than once (Andi & Zeev, Zend Engine) - Added check to see if a persistent connection is still valid with the ODBC interface before reusing (nick@easysoft.com) - Added DBMaker support (patch by Pax Tsai ) - Renamed "PECL" to "PEAR" (PHP Extension and Add-on Repository) (Stig) - buildconf now uses build.mk (Stig) - Disable symlinks to urls (Rasmus) - Informix driver now reflects version of ESQL/C used (Danny) - Modified session_register() to take variable number of arguments (Andrei) - Fixed file descriptor leak in thread safe mode (Zeev, Zend Engine) - Added select(), fd_set() and fd_isset() (Evan) - cpdf support has been ported from php3, needs ClibPDF 2.x (Uwe) - Fixed a leak when using automatic output buffering (Zeev) - Introduced PECL - PHP Extension and Code Library (prounounced "pickle") (Stig) - Fixed inconsistencies in the implementation of here-docs (Andi & Zeev, Zend library) - Fixed a problem with constant class-member initializations (Andi & Zeev, Zend Engine) - Fixed float-compare in min(),max(),a[r]sort(),[r]sort() (Thies) - Implemented get_html_translation_table() function (Thies) - Implemented array_flip() function. Returns input-array with key, value flipped (Thies) - Added Berkeley DB3 support in DBA (Sascha) - Implemented 2-Arg version of strtr($str,$translation_array). This can be used to revert what htmlspecialchars() did (Thies) - Fixed mem-overwrite in XML_Parse_Into_Struct (Thies) - Added substr_replace() function (Andrei) November 16 1999, Version 4.0 Beta 3 - ucfirst()/ucwords() no longer modify arg1 (Thies) - Fixed strtr() not to modify arg1 (Thies) - Added Win32 build files for Informix driver and make it compile with ZTS (danny) - Added tmpfile() function (Stig) - Upgraded regex library to alpha3.8 (Sascha) - Fixed selecting nested-tables in OCI8. (Thies) - RFC-854 fix for internal FTP-Code. Commands have to end in "\r\n" (Thies) - Fixed OpenLink ODBC support (Stig) - min(),max(),a[r]sort(),[r]sort(),k[r]sort() now work consistent with the language-core. (Thies) - tempnam() now uses mkstemp() if available (Stig) - serialize() and var_dump() now honor the precision as set in php.ini for doubles. (Thies) - Improved the Win32 COM module to support [out] parameters (Boris Wedl) - Fixed garbage returned at the end of certain Sybase-Columns (Thies) Patch submitted by: neal@wanlink.com - Added Microsoft SQL Server module for Win32 (Frank) - Added support for forcing a variable number of internal function arguments by reference. (Andi & Zeev, Zend Engine) - Implemented getprotoby{name,number} (Evan) - Added array_pad() function. (Andrei) - Added new getservby{name,port} functions. (Evan) - Added session.cookie_path and session.cookie_domain (Sascha) - Continue processing PHP_INI_SYSTEM knownDirectives after extension= (Sam Ruby) - Enable IBM DB2 support - Tested against DB2 6.1 UDB on Linux (Rasmus) - Added new str_repeat() function. (Andrei) - Output-Buffering system is now Thread-Safe. (Thies) - implemented OCI8 $lob->WriteToFile() function - very useful for streaming large amounts of LOB-Data without to need of a huge buffer. (Thies) - Added session.use_cookies option (Sascha) - Added getcwd() function. (Thies) - XML_Parse_Into_Struct no longer eats data. (Thies) - Fixed parse_url('-') crash. (Thies) - added === operator support. (Andi & Thies, Zend Engine) - unserialize() now gives a notice when passed invalid data. (Thies) - Fixed shuffle() so that it no longer breaks on Solaris. (Andrei) - Added is_resource(), is_bool() functions. (Thies) - Cleaned up File-Module (Thies) - Upgraded math-funtions to use new Zend function API (Thies) - Fixed zombie problem in shell_exec() and $a = `some_command` constructs. (Thies) - Thies introduced ZEND_FETCH_RESOURCE2 (Danny). - Added Informix driver to list of maintained extensions. (Danny). - Informix driver : Changed ifx.ec to use the new high-performance ZEND API. (Danny) - IXF_LIBDIR environment variable specifies alternate Informix library path for configure (Danny). - Fixed gmmktime() so that the following should always be true: gmmktime([args]) == mktime([args]) + date('Z', mktime([args])) (Jouni) - setlocale doesn't anymore screw up things if you forgot to change it back to the original settings. (Jouni) - Switched to new system where ChangeLog is automagically updated from commit messages. NEWS file is now the place for public announcements. (Andrei) - Fixed refcount problem in XML module. (Thies) - Fixed crash in HTTP_RAW_POST_DATA handling (Thies) - You can use resources as array-indices again (Thies, Zend Engine) - Fixed pg_fetch_array() with three arguments (Sascha) Patch submitted by: brian@soda.berkeley.edu - Upgraded a lot internal functions to use new Zend function API (Thies) - fdf support ported; not completely tested with latest version 4.0 for glibc (Uwe) - OCI8 connections are now kept open as long as they are referenced (Thies) - Cleaned up Directory-Module (Thies) - Small fix in Ora_Close (Thies) - Ported range() and shuffle() from PHP 3 to PHP 4 (Andrei) - Fixed header("HTTP/..."); behaviour (Sascha) - Improved UNIX build system. Now utilizes libtool (Sascha) - Upgrade some more internal functions to use new Zend function API. (Thies, Zend Engine) - Fixed backwards incompatibility with ereg() (Thies) - Updated Zend garbage collection with a much more thorough method. (Andi, Zend Engine) - Added the ability to use variable references in the array() construct. For example, array("foo" => &$foo). (Andi, Zend Engine) - Added array_reverse() function (Andrei) - Some more XML fixes/cleanups (Thies) - Updated preg_replace() so that if any argument passed in is an array it will make a copy of each entry before converting it to string so that the original is intact. If the subject is an array then it will preserve the keys in the output as well (Andrei) - Updated OCI8 to use the new high-performance Zend function API. (Thies) - Configure speedup (Stig) - Fixed LOB/Persistent-Connection related OCI8-Crash (Thies) - Generalized server-API build procedure on UNIX (Stig) - Added '--disable-rpath' option (Sascha) - Added AOLserver SAPI module (Sascha) - Fixed XML Callbacks. (Thies) - Updated ODBC to use the new high-performance Zend function API (kara) - Updated zlib to use the new high-performance Zend function API. (Stefan) - Updated preg_split() to allow returning only non-empty pieces (Andrei) - Updated PCRE to use the new high-performance Zend function API (Andrei) - Updated session, dba, mhash, mcrypt, sysvshm, sysvsem, gettext modules to use the new high-performance Zend function API (Sascha) - Extended var_dump to handle resource type somewhat (Andrei) - Updated WDDX to use the new high-performance Zend function API (Andrei) - Updated XML to use the new high-performance Zend function API. (Thies) - Updated Oracle to use the new high-performance Zend function API. (Thies) - Improved the performance of the MySQL module significantly by using the new high-performance Zend function API. (Zeev) - Added support for the Easysoft ODBC-ODCB Bridge (martin@easysoft.com) - Fixed bug in odbc_setoption, getParameter call incorrect (martin@easysoft.com) - Ora_Fetch_Into now resets the returned array in all cases (Thies) - Fixed NULL-Column problem in Oracle-Driver (Thies) - Added extra metadata functions to ODBC, SQLTables etc (nick@easysoft.com) - Fixed SEGV in mcal make_event_object() and typo in mcal_list_alarms() (Andrew Skalski) - Fixed Ora_PLogon (Thies) - Resourcified Oracle (Thies) - Implemented object serialization/deserialization in WDDX (Andrei) - Added krsort() function (Thies) - Added func_num_args(), func_get_arg() and func_get_args() for standard access to variable number of arguments functions (Zeev) - Added FTP support (Andrew Skalski) - Added optional allowable_tags arguments to strip_tags(), gzgetss() and fgetss() to allow you to specify a string of tags that are not to be stripped (Rasmus) - Upgraded var_dump() to take multiple arguments (Andrei) - Resourcified XML (Thies) - Fixed a memory leak in the Apache per-directory directives handler (Zeev) - Added array_count_values() function. (Thies) - snmp, pgsql, mysql and gd modules can be built as dynamically loaded modules (Greg) - OCI8 fix for fetching empty LOBs (Thies) - Added user-level callbacks for session module (Sascha) - Added support for unknown POST content types (Zeev) - Added "wddx" serialization handler for session module (Sascha) (automatically enabled, if you compile with --with-wddx) - Fixed unserializing objects (Thies) - PHP 4.0 now serializes Objects as 'O' (not understood by PHP 3.0), but unserializes PHP 3.0 serialized objects as expected. (Thies) - Made serialize/unserialize work on classes. If the class is known at unserialize() time, you'll get back a fully working object! (Thies) - Reworked preg_* functions according to the new PCRE API, which also made them behave much more like Perl ones (Andrei) - Made it possible to specify external location of PCRE library (Andrei) - Updated bundled PCRE library to version 2.08 (Andrei) - count()/is_array/is_object... speedups. (Thies) - OCI8 supports appending and positioning when saving LOBs (Thies) - Added metaphone support (Thies) - OCI8 doesn't use define callbacks any longer. (Thies) - OCI8 Driver now supports LOBs like PHP 3.0. (Thies) - var_dump now dumps the properties of an object (Thies) - Rewrote the GET/POST/Cookie data reader to support multi-dimensional arrays! (Zeev) - Renamed allow_builtin_links to expose_php (defaults to On). This directive tells PHP whether it may expose its existence to the outside world, e.g. by adding itself to the Web server header (Zeev) - Added support for transparent session id propagation (Sascha) - Made WDDX serialize object properties properly (Andrei) - Fixed WDDX mem leak when undefined variable is passed in for serialization (Andrei) - Added session_unset() function (Andrei) - Fixed double session globals shutdown crash (Andrei) - Fixed crash related to ignore_user_abort ini entry (Andrei) - Added support for external entropy sources for session id creation (on Unices /dev/random and /dev/urandom) (Sascha) - Added gpc_globals variable directive to php.ini. By default it is On, but if it is set to Off, GET, POST and Cookie variables will not be inserted to the global scope. Mostly makes sense when coupled with track_vars (Zeev) - Added versioning support for shared library (Sascha) This allows concurrent use of PHP 3.0 and PHP 4.0 as Apache modules. See the end of the INSTALL file for more information. - Added second parameter to array_keys which specifies search value for which the key should be returned (Andrei) - Resourcified Informix driver (Danny) - New resource handling for odbc, renamed to php_odbc.[ch] - Make set_time_limit() work on Unix (Rasmus) - Added connection handling support (Rasmus) - Improved the Sybase-CT module to make use of resources (Zeev) - Improved the mSQL module to make use of resources (Zeev) - Changed mysql_query() and mysql_db_query() to return false in case of saving the result set data fails (Zeev) - Improved the resource mechanism - resources were not getting freed as soon as they could (Zeev) - Added shared memory module for session data storage (Sascha) - Fixed session.auto_start (Sascha) - Fixed several problems with output buffering and HEAD requests (Zeev) - Fixed HTTP Status code issue with ISAPI module (Zeev) - Fixed a problem that prevented $GLOBALS from working properly (Zeev, Zend library) - Ported newest GetImageSize (Thies) - Added session compile support in Win32 (Andi) - Added -d switch to the CGI binary that allows overriding php.ini values from the command line (Zeev) - Fixed a crash that would occur if wddx_deserialize did not receive a valid packet (Andrei) - Fixed a bugglet when redefining a class at run-time (Andi, Zend Engine) - Fixed sem_get() on AIX (Sascha) - Fixed fopen() to work with URL's in Win32 (Andi & Zeev) - Fixed include_path for Win32 (Andi, Zend Engine) - Fixed bug in ISAPI header sending function (Charles) - Fixed memory leak when using undefined values (Andi & Zeev, Zend Engine) - Added output_buffering directive to php.ini, to enable output buffering for all PHP scripts - default is off (Zeev). - Fixed some more class inheritance issues (Zeev, Zend Engine) - Fixed Apache build wrt to shared modules on FreeBSD/Linux (Sascha) - Added session.extern_referer_chk which checks whether session ids were referred to by an external site and eliminates them (Sascha) - Improved session id generation (Sascha) - Improved speed of uniqid() by using the combined LCG and removing the extra usleep() (Sascha) - Introduced general combined linear congruential generator (Sascha) - Made ldap_close back into an alias for ldap_unbind (Andrei) - OciFetchInto now resets the returned array in all cases (Thies) - Fixed mysql_errno() to work with recent versions of MySQL (Zeev) - Fixed a problem with define() and boolean values (Zeev) - Fixed inclusion of gd/freetype functions (Sascha) - Fixed persistency of MHASH_* constants (Sascha) - Oracle is now ZTS-Safe (Thies) - Fixed flushing of cached information to disk in DBA's DB2 module (Sascha) - OCI8 is now ZTS-Safe (Thies) - Fixed is_writeable/is_writable problem; they are both defined now (Andrei) - Imported PHP 3.0 diskfreespace() function (Thies) - Fixed thread-safety issues in the MySQL module (Zeev) - Fixed thread-safe support for dynamic modules (Zeev) - Fixed Sybase CT build process (Zeev) August 9 1999, Version 4.0 Beta 2 - Fixed a problem when sending HTTP/1.x header lines using header() (Zeev) - Win32 builds now include the ODBC module built-in (Zeev) - Fixed SYSV-SHM interface (Thies). - Updated hyperwave module, made it thread safe - Updated pdflib module, version 0.6 of pdflib no longer supported - Updated fdf module - Built-in phpinfo() links are now turned off by default. They can be turned on using the allow_builtin_links INI directive (Zeev) - Changed phpinfo() to list modules that have no info function (Zeev) - Modified array_walk() function so that the userland callback is passed a key and possible user data in addition to the value (Andrei) - Fixed ldap_search(), ldap_read() and ldap_list() (Zeev) - Fixed Apache information in phpinfo() (sam@breakfree.com) - Improved register_shutdown_function() - you may now supply arguments that will be passed to the shutdown function (Zeev) - Improved call_user_func() and call_user_method() - they now support passing arguments by reference (Zeev) - Fixed usort() and uksort() (Zeev) - Fixed md5() in the Apache module (Thies) - Introduced build process for dynamic modules (Stig) - Improved ISAPI module to supprt large server variables (Zeev) - Imported PHP 3.0 fixes for problem with PHP as a dynamic module and Redhat libc2.1 in zlib module (Stefan) - Fixed sybase_fetch_object() (Zeev) - Made the IMAP module work with PHP 4.0 (Zeev) - Fixed a problem with include()/require() of URLs (Sascha, Zeev) - Fixed a bug in implode() that caused it to corrupt its arguments (Zeev) - Added get_class($obj), get_parent_class($obj) and method_exists($obj,"name") (Andi & Zeev) - Fixed various inheritance problems (Andi & Zeev, Zend Engine) - Children now inherit their parent's constructor, if they do not supply a constructor of their own. - Fixed runtime inheritance of classes (parent methods/properties were overriding their children) (Zeev, Zend Engine) - Fixed backwards incompatibility with the "new" operator (Andi, Zend Engine) - Fixed bugs in uksort() and ksort() sort ordering (Andrei) - Fixed a memory leak when using assignment-op operators with lvalue of type string (Zeev, Zend Engine) - Fixed a problem in inheritance from classes that are defined in include()d files (Zeev, Zend Engine) - Fixed a problem with the PHP error handler that could result in a crash on certain operating systems (Zeev) - Apache php_flag values only recognized 'On' (case sensitive) - changed to case insensitive (Zeev) - Fixed a memory leak with switch statement containing return statements (Andi & Zeev, Zend Engine) - Fixed a crash problem in switch statements that had a string offset as a conditional (Andi & Zeev, Zend Engine) - Imported PHP 3.0 fixes for rand() and mt_rand() (Rasmus) - Added function entries for strip_tags() and similar_text() (Andrei) - Fixed a bug in WDDX that would cause a crash if a number was passed in instead of a variable name (Andrei) - Ported strtotime() function from PHP 3.0 (Andrei) - Merged in gdttf stuff from PHP 3.0 (Sascha) - buildconf now checks your installation (Stig) - XML module now built dynamically with --with-xml=shared (Stig) - Added a check for freetype.h - fixed build on RedHat 6.0 (Zeev) - Fixed array_walk() to work in PHP 4.0 (Andrei) - Ported all remaining date() format options from PHP 3.0 (Andrei) - $php_errormsg now works (Andrei) - Added locale support for Perl Compatible Regexp functions (Andrei) - Informix module ported (Danny) - Removed --with-shared-apache (Sascha) - Added patch for reverse lookup table in base64_decode (Sascha) Submitted by bfranklin@dct.com - Merged in PHP 3.0 version of str_replace (Sascha) - Added DBA module (Sascha) - Added session id detection within REQUEST_URI (Sascha) - Merged in HP-UX/ANSI compatibility switch from PHP 3.0 (Sascha) - Fixed rpath handling for utilitites built during Apache build (Sascha) - Added missing E_ error level constants (Zeev, Zend Engine) - Fixed a bug in sending multiple HTTP Cookies under Apache (Zeev) - Fixed implicit connect on the MySQL, mSQL, PostgreSQL and Sybase modules (Zeev) - Gave PHP 4.0's SNMP extension all the functionality of PHP 3.0.12 (SteveL) July 19 1999, Version 4.0 Beta 1 - First public beta of PHP 4.0 php-4.2.3/README.CVS-RULES0100644000175200000240000001146407470164046013361 0ustar zeevstaffThis is the first file you should be reading after you get your CVS account. We'll assume you're basically familiar with CVS, but feel free to post your questions on the mailing list. Please have a look at http://cvsbook.red-bean.com/ for more detailed information on CVS. PHP is developed through the efforts of a large number of people. Collaboration is a Good Thing(tm), and CVS lets us do this. Thus, following some basic rules with regards to CVS usage will: a. Make everybody happier, especially those responsible for maintaining the CVS itself. b. Keep the changes consistently well documented and easily trackable. c. Prevent some of those 'Oops' moments. d. Increase the general level of good will on planet Earth. Having said that, here are the organizational rules: 1. Respect other people working on the project. 2. Discuss any significant changes on the list before committing. 3. Look at EXTENSIONS file to see who is the primary maintainer of the code you want to contribute to. 4. If you "strongly disagree" about something another person did, don't start fighting publicly - take it up in private email. 5. If you don't know how to do something, ask first! 6. Test your changes before committing them. We mean it. Really. The next few rules are more of a technical nature. 1. DO NOT TOUCH ChangeLog! It is automagically updated from the commit messages every day. Woe be to those who attempt to mess with it. 2. All news updates intended for public viewing, such as new features, bug fixes, improvements, etc., should go into the NEWS file. Also see the note below about automatically updating NEWS in your commit message. 3. Do not commit multiple file and dump all messages in one commit. If you modified several unrelated files, commit each group separately and provide a nice commit message for each one. See example below. 4. Do write your commit message in such a way that it makes sense even without the corresponding diff. One should be able to look at it, and immediately know what was modified. Definitely include the function name in the message as shown below. 5. In your commit messages, keep each line shorter than 80 characters. And try to align your lines vertically, if they wrap. It looks bad otherwise. 6. If you modified a function that is callable from PHP, prepend PHP to the function name as shown below. The format of the commit messages is pretty simple. If a line begins with #, it is taken to be a comment and will not appear in the ChangeLog. If the line begins with @, it will be redirected to the NEWS file. Everything else goes into the ChangeLog. It is important to note that if your comment or news logline spans multiple lines, you have to put # or @ at the beginning of _every_ such line. Every entry in NEWS has to have a name after it, so if you did it with someone's help, put both your names there. Your name WILL NOT be automatically put at the end of the NEWS entry - so, please provide it yourself. Example. Say you modified two files, datetime.c and string.c. In datetime.c you added a new format option for date() function, and in string.c you fixed a memory leak in php_trim(). Don't commit both of these at once. Commit them separately and try to make sure your commit messages look something like the following. For datetime.c: (PHP date) Added new 'K' format modifier for printing out number of days until New Year's Eve. @- Added new 'K' format modifier that will output the number of days @ until New Year's Eve. (Bob) For string.c: (php_trim) Fixed a memory leak resulting from improper use of zval_dtor(). # Man, that thing was leaking all over the place! @- Memory leak in trim() function has finally been fixed. (Bob) The lines above marked with @ will go into NEWS file automagically, and the # lines will be omitted from the ChangeLog. Alternatively, you might want to modify NEWS file directly and not use the @ lines. If you fix some bugs, you should note the bug ID numbers in your commit message. Bug ID should be prefixed by "#" for easier access to bug report when developers are browsing CVS via. LXR or Bonsai. Example: Fixed pgsql notice handler double free crash bug. Bug #14016 @ Fixed pgsql notice handler double free crash bug. Bug #14016 If you don't see your messages in ChangeLog and NEWS right away, don't worry! These files are updated once a day, so your stuff will not show up until somewhat later. Don't go adding stuff to NEWS by hand if you already put @ lines in the commit message. You can use LXR (http://lxr.php.net/) and Bonsai (http://bonsai.php.net/) to look at PHP CVS repository in various ways. To receive daily updates to ChangeLog and NEWS, send an empty message to php-cvs-daily-subscribe@lists.php.net. Happy hacking, PHP Team php-4.2.3/README.EXTENSIONS0100644000175200000240000000304207361426014013521 0ustar zeevstaffBetween PHP 4.0.6 and 4.1.0, the Zend module struct changed in a way that broke both source and binary compatibility. If you are maintaining a third party extension, here's how to update it: If this was your old module entry: zend_module_entry foo_module_entry = { "foo", /* extension name */ foo_functions, /* extension function list */ NULL, /* extension-wide startup function */ NULL, /* extension-wide shutdown function */ PHP_RINIT(foo), /* per-request startup function */ PHP_RSHUTDOWN(foo), /* per-request shutdown function */ PHP_MINFO(foo), /* information function */ STANDARD_MODULE_PROPERTIES }; Here's how it should look if you want your code to build with PHP 4.1.0 and up: zend_module_entry foo_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif "foo", /* extension name */ foo_functions, /* extension function list */ NULL, /* extension-wide startup function */ NULL, /* extension-wide shutdown function */ PHP_RINIT(foo), /* per-request startup function */ PHP_RSHUTDOWN(foo), /* per-request shutdown function */ PHP_MINFO(foo), /* information function */ #if ZEND_MODULE_API_NO >= 20010901 FOO_VERSION, /* extension version number (string) */ #endif STANDARD_MODULE_PROPERTIES }; If you don't care about source compatibility with earlier PHP releases than 4.1.0, you can drop the #if/#endif lines. php-4.2.3/README.EXT_SKEL0100644000175200000240000001472607332164743013321 0ustar zeevstaff WHAT IT IS It's a tool for automatically creating the basic framework for a PHP module and writing C code handling arguments passed to your functions from a simple configuration file. See an example at the end of this file. HOW TO USE IT Very simple. First, cd do directory ext/ in PHP 4 sources. If you just need the basic framework and will be writing all the code in your functions yourself, you can now do ./ext_skel --extname=module_name and everything you need is placed in directory module_name. In fact, if you don't need to test the existence of any external header files, libraries or functions in them, the module is already almost ready to be compiled in PHP. Just remove 3 comments in your_module_name/config.m4, cd back up to PHP sources top directory, and do ./buildconf; ./configure --enable-module_name; make But if you already have planned the overall scheme of your module, what functions it will contain, their return types and the arguments they take (a very good idea) and don't want to bother yourself with creating function definitions and handling arguments passed yourself, it's time to create a function definitions file, which you will give as an argument to ext_skel with option --proto=filename. FORMAT OF FUNCTION DEFINITIONS FILE All the definitions must be on one line. In it's simplest form, it's just the function name, ie. my_function but then you'll be left with an almost empty function body without any argument handling. Arguments are given in parenthesis after the function name, and are of the form 'argument_type argument_name'. Arguments are separated from each other with a comma and optional space. Argument_type can be one of int, bool, double, float, string, array, object or mixed. An optional argument is separated from the previous by an optional space, then '[' and of course comma and optional space, like all the other arguments. You should close a row of optional arguments with same amount of ']'s as there where '['s. Currently, it does not harm if you forget to do it or there is a wrong amount of ']'s, but this may change in the future. An additional short description may be added after the parameters. If present it will be filled into the 'proto' header comments in the stubs code and the tag in the XML documentation. An example: my_function(int arg1, int arg2 [, int arg3 [, int arg4]]) this is my 1st Arguments arg3 and arg4 are optional. If possible, the function definition should also contain it's return type in front of the definition. It's not actually used for any C code generating purposes but PHP in-source documentation instead, and as such, very useful. It can be any of int, double, string, bool, array, object, resource, mixed or void. The file must contain nothing else but function definitions, no comments or empty lines. OTHER OPTIONS --no-help By default, ext_skel creates both comments in the source code and a test function to help first time module writers to get started and testing configuring and compiling their module. This option turns off all such things which may just annoy experienced PHP module coders. Especially useful with --stubs=file which will leave out also all module specific stuff and write just function stubs with function value declarations and passed argument handling, and function entries and definitions at the end of the file, for copying and pasting into an already existing module. --assign-params --string-lens By default, function proto 'void foo(string bar)' creates the following: ... zval **bar; ... (zend_get_parameters_ex() called in the middle...) convert_to_string_ex(bar); Specifying both of these options changes the generated code to: ... zval **bar_arg; int bar_len; char *bar = NULL; ... (zend_get_parameters_ex() called in the middle...) convert_to_string_ex(bar_arg); bar = Z_STRVAL_PP(bar_arg); bar_len = Z_STRLEN_PP(bar_arg); You shouldn't have to ask what happens if you leave --string-lens out. If you have to, it's questionable whether you should be reading this document. --with-xml[=file] Creates the basics for phpdoc .xml file. --full-xml Not implemented yet. When or if there will ever be created a framework for self-contained extensions to use phpdoc system for their documentation, this option enables it on the created xml file. CURRENT LIMITATIONS, BUGS AND OTHER ODDITIES Only arguments of types int, bool, double, float, string and array are handled. For other types you must write the code yourself. And for type mixed, it wouldn't even be possible to write anything, because only you know what to expect. It can't handle correctly, and probably never will, variable list of of arguments. (void foo(int bar [, ...]) Don't trust the generated code too much. It tries to be useful in most of the situations you might encounter, but automatic code generation will never beat a programmer who knows the real situation at hand. ext_skel is generally best suited for quickly generating a wrapper for c-library functions you might want to have available in PHP too. This program doesn't have a --help option. It has --no-help instead. EXAMPLE The following _one_ line bool my_drawtext(resource image, string text, resource font, int x, int y [, int color]) will create this function definition for you (note that there are a few question marks to be replaced by you, and you must of course add your own value definitions too): /* {{{ proto bool my_drawtext(resource image, string text, resource font, int x, int y[, int color]) */ PHP_FUNCTION(my_drawtext) { zval **image, **text, **font, **x, **y, **color; int argc; int image_id = -1; int font_id = -1; argc = ZEND_NUM_ARGS(); if (argc < 5 || argc > 6 || zend_get_parameters_ex(argc, &image, &text, &font, &x, &y, &color) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(???, ???, image, image_id, "???", ???_rsrc_id); ZEND_FETCH_RESOURCE(???, ???, font, font_id, "???", ???_rsrc_id); switch (argc) { case 6: convert_to_long_ex(color); /* Fall-through. */ case 5: convert_to_long_ex(y); convert_to_long_ex(x); /* font: fetching resources already handled. */ convert_to_string_ex(text); /* image: fetching resources already handled. */ break; default: WRONG_PARAM_COUNT; } php_error(E_WARNING, "my_drawtext: not yet implemented"); } /* }}} */ php-4.2.3/README.PARAMETER_PARSING_API0100644000175200000240000000700007365345671015231 0ustar zeevstaffNew parameter parsing functions =============================== It should be easier to parse input parameters to an extension function. Hence, borrowing from Python's example, there are now a set of functions that given the string of type specifiers, can parse the input parameters and store the results in the user specified variables. This avoids most of the IS_* checks and convert_to_* conversions. The functions also check for the appropriate number of parameters, and try to output meaningful error messages. Prototypes ---------- /* Implemented. */ int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...); int zend_parse_parameters_ex(int flags, int num_args TSRMLS_DC, char *type_spec, ...); The zend_parse_parameters() function takes the number of parameters passed to the extension function, the type specifier string, and the list of pointers to variables to store the results in. The _ex() version also takes 'flags' argument -- current only ZEND_PARSE_PARAMS_QUIET can be used as 'flags' to specify that the function should operate quietly and not output any error messages. Both functions return SUCCESS or FAILURE depending on the result. The auto-conversions are performed as necessary. Arrays, objects, and resources cannot be autoconverted. Type specifiers --------------- l - long d - double s - string (with possible null bytes) and its length b - boolean, stored in zend_bool r - resource (stored in zval) a - array o - object (of any type) O - object (of specific type, specified by class entry) z - the actual zval The following characters also have a meaning in the specifier string: | - indicates that the remaining parameters are optional, they should be initialized to default values by the extension since they will not be touched by the parsing function if they are not passed to it. / - use SEPARATE_ZVAL_IF_NOT_REF() on the parameter it follows ! - the parameter it follows can be of specified type or NULL (only applies to 'a', 'o', 'O', 'r', and 'z'). If NULL is passed, the results pointer is set to NULL as well. Examples -------- /* Gets a long, a string and its length, and a zval */ long l; char *s; int s_len; zval *param; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsz", &l, &s, &s_len, ¶m) == FAILURE) { return; } /* Gets an object of class specified by my_ce, and an optional double. */ zval *obj; double d = 0.5; zend_class_entry my_ce; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|d", &obj, my_ce, &d) == FAILURE) { return; } /* Gets an object or null, and an array. If null is passed for object, obj will be set to NULL. */ zval *obj; zval *arr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o!a", &obj, &arr) == FAILURE) { return; } /* Gets a separated array which can also be null. */ zval *arr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/!", &arr) == FAILURE) { return; } /* Get only the first three parameters (useful for varargs functions). */ zval *z; zend_bool b; zval *r; if (zend_parse_parameters(3 TSRMLS_CC, "zbr!", &z, &b, &r) == FAILURE) { return; } /* Get either a set of 3 longs or a string. */ long l1, l2, l3; char *s; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "lll", &l1, &l2, &l3) == SUCCESS) { /* manipulate longs */ } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &s) == SUCCESS) { /* manipulate string */ } else { /* output error */ return; } php-4.2.3/README.QNX0100644000175200000240000000410006702743561012473 0ustar zeevstaffQNX4 Installation Notes ----------------------- NOTE: General installation instructions are in the INSTALL file 1. To compile and test PHP3 you have to grab, compile and install: - GNU dbm library or another db library; - GNU bison (1.25 or later; 1.25 tested); - GNU flex (any version supporting -o and -P options; 2.5.4 tested); - GNU diffutils (any version supporting -w option; 2.7 tested); 2. To use CVS version you may need also: - GNU CVS (1.9 tested); - GNU autoconf (2.12 tested); - GNU m4 (1.3 or later preferable; 1.4 tested); 3. To run configure define -lunix in command line: LDFLAGS=-lunix ./configure 4. To use Sybase SQL Anywhere define ODBC_QNX and CUSTOM_ODBC_LIBS in command line and run configure with --with-custom-odbc: CFLAGS=-DODBC_QNX LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50 If you have SQL Anywhere version 5.5.00, then you have to add CFLAGS=-DSQLANY_BUG to workaround its SQLFreeEnv() bug. Other versions has not been tested, so try without this flag first. 5. To build the Apache module, you may have to hardcode an include path for alloc.h in your Apache base directory: - APACHE_DIRECTORY/src/httpd.h: change #include "alloc.h" to #include "APACHE_DIRECTORY/src/alloc.h" Unless you want to use system regex library, you have to hardcode also a path to regex.h: - APACHE_DIRECTORY/src/conf.h: change #include to #include "APACHE_DIRECTORY/src/regex/regex.h" I don't know so far why this required for QNX, may be it is Watcom compiler problem. If you building Apache module with SQL Anywhere support, you'll get symbol conflict with BOOL. It is defined in Apache (httpd.h) and in SQL Anywhere (odbc.h). This has nothing to do with PHP, so you have to fix it yourself someway. 6. With above precautions, it should compile as is and pass regression tests completely: make make check make install Don't bother me unless you really sure you made that all but it still doesn't work. June 28, 2025 Igor Kovalenko -- owl@infomarket.ru php-4.2.3/README.SELF-CONTAINED-EXTENSIONS0100644000175200000240000001227607141301246015556 0ustar zeevstaff$Id: README.SELF-CONTAINED-EXTENSIONS,v 1.9 2025/07/31 13:44:06 sas Exp $ ============================================================================= HOW TO CREATE A SELF-CONTAINED PHP EXTENSION A self-contained extension can be distributed independently of the PHP source. To create such an extension, three things are required: - Makefile template (Makefile.in) - Configuration file (config.m4) - Source code for your module We will describe now how to create these and how to put things together. PREPARING YOUR SYSTEM While the result will run on any system, a developer's setup needs these tools: GNU autoconf GNU automake GNU libtool GNU m4 All of these are available from ftp://ftp.gnu.org/pub/gnu/ CONVERTING AN EXISTING EXTENSION Just to show you how easy it is to create a self-contained extension, we will convert an embedded extension into a self-contained one. Install PHP and execute the following commands. $ mkdir /tmp/newext $ cd /tmp/newext You now have an empty directory. We will copy the files from the mysql extension: $ cp -rp php-4.0.X/ext/mysql/* . It is time to finish the module. Run: $ phpize You can now ship the contents of the directory - the extension can live completely on its own. The user instructions boil down to $ ./configure \ [--with-php-config=/path/to/php-config] \ [--with-mysql=MYSQL-DIR] $ make install The MySQL module will either use the embedded MySQL client library or the MySQL installation in MYSQL-DIR. DEFINING THE NEW EXTENSION Our demo extension is called "foobar". It consists of two source files "foo.c" and "bar.c" (and any arbitrary amount of header files, but that is not important here). The demo extension does not reference any external libraries (that is important, because the user does not need to specify anything). CREATING THE MAKEFILE TEMPLATE The Makefile Template (Makefile.in) contains three lines: ------------------------------------------------------------------------------ LTLIBRARY_SHARED_NAME = foobar.la LTLIBRARY_SOURCES = foo.c bar.c include $(top_srcdir)/build/dynlib.mk ------------------------------------------------------------------------------ LTLIBRARY_SHARED_NAME specifies the name of the extension. It must be of the form `ext-name.la'. LTLIBRARY_SOURCES specifies the names of the sources files. You can name an arbitrary number of source files here. The final include directive includes the build rules (you usually don't need to care about what happens there). rules.mk and other files are installed by phpize which we will cover later. CREATING THE M4 CONFIGURATION FILE The m4 configuration can perform additional checks. For a self-contained extension, you do not need more than a few macro calls. ------------------------------------------------------------------------------ PHP_ARG_ENABLE(foobar,whether to enable foobar, [ --enable-foobar Enable foobar]) if test "$PHP_FOOBAR" != "no"; then PHP_EXTENSION(foobar, $ext_shared) fi ------------------------------------------------------------------------------ PHP_ARG_ENABLE will automatically set the correct variables, so that the extension will be enabled by PHP_EXTENSION in shared mode. Please use always PHP_ARG_ENABLE or PHP_ARG_WITH. Even if you do not plan to distribute your module with PHP, these facilities allow you to integrate your module easily into the main PHP module framework. CREATING SOURCE FILES ext_skel can be of great help when creating the common code for all modules in PHP for you and also writing basic function definitions and C code for handling arguments passed to your functions. See README.EXT_SKEL for further information. As for the rest, you are currently alone here. There are a lot of existing modules, use a simple module as a starting point and add your own code. CREATING THE SELF-CONTAINED EXTENSION Put Makefile.in, config.m4 and the source files into one directory. Then run phpize (this is installed during make install by PHP 4.0). For example, if you configured PHP with --prefix=/php, you would run $ /php/bin/phpize This will automatically copy the necessary build files and create configure from your config.m4. And that's it. You now have a self-contained extension. INSTALLING A SELF-CONTAINED EXTENSION An extension can be installed by running: $ ./configure \ [--with-php-config=/path/to/php-config] $ make install ADDING SHARED MODULE SUPPORT TO A MODULE In order to be useful, a self-contained extension must be loadable as a shared module. I will explain now how you can add shared module support to an existing module called foo. 1. In config.m4, use PHP_ARG_WITH/PHP_ARG_ENABLE. Then you will automatically be able to use --with-foo=shared or --enable-foo=shared. 2. In config.m4, use PHP_EXTENSION(foo, $ext_shared) to enable building the extension. 3. Add the following line to Makefile.in: LTLIBRARY_SHARED_NAME = foo.la 4. Add the following lines to your C source file: #ifdef COMPILE_DL_FOO ZEND_GET_MODULE(foo) #endif php-4.2.3/ext/0040755000175200000240000000000007535765574011773 5ustar zeevstaffphp-4.2.3/ext/aspell/0040755000175200000240000000000007535765574013253 5ustar zeevstaffphp-4.2.3/ext/aspell/CREDITS0100644000175200000240000000002607206176560014250 0ustar zeevstaffaspell Rasmus Lerdorf php-4.2.3/ext/aspell/Makefile.in0100644000175200000240000000014607103403244015264 0ustar zeevstaff LTLIBRARY_NAME = libaspell.la LTLIBRARY_SOURCES = aspell.c include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/aspell/aspell.c0100644000175200000240000001273507437364602014670 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ /* $Id: aspell.c,v 1.37 2025/02/28 08:25:38 sebastian Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #ifdef COMPILE_DL_ASPELL #include "phpdl.h" #endif #include #include #include #if HAVE_ASPELL #include "php_aspell.h" #include #include "ext/standard/info.h" /* {{{ aspell_functions[] */ function_entry aspell_functions[] = { PHP_FE(aspell_new, NULL) PHP_FE(aspell_check, NULL) PHP_FE(aspell_check_raw, NULL) PHP_FE(aspell_suggest, NULL) {NULL, NULL, NULL} }; /* }}} */ static int le_aspell; zend_module_entry aspell_module_entry = { STANDARD_MODULE_HEADER, "aspell", aspell_functions, PHP_MINIT(aspell), NULL, NULL, NULL, PHP_MINFO(aspell), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_ASPELL ZEND_GET_MODULE(aspell) #endif /* {{{ php_aspell_close */ static void php_aspell_close(zend_rsrc_list_entry *rsrc TSRMLS_DC) { aspell *sc = (aspell *)rsrc->ptr; aspell_free(sc); } /* }}} */ /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(aspell) { le_aspell = zend_register_list_destructors_ex(php_aspell_close, NULL, "aspell", module_number); return SUCCESS; } /* }}} */ /* {{{ proto int aspell_new(string master [, string personal]) Load a dictionary */ PHP_FUNCTION(aspell_new) { pval **master, **personal; int argc; aspell *sc; int ind; argc = ZEND_NUM_ARGS(); if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &master, &personal) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(master); if(argc==2) { convert_to_string_ex(personal) ; sc=aspell_new(Z_STRVAL_PP(master), Z_STRVAL_PP(personal)); } else sc=aspell_new(Z_STRVAL_PP(master), ""); ind = zend_list_insert(sc, le_aspell); RETURN_LONG(ind); } /* }}} */ /* {{{ proto array aspell_suggest(aspell int, string word) Return array of Suggestions */ PHP_FUNCTION(aspell_suggest) { pval **scin, **word; int argc; aspell *sc; int ind, type; aspellSuggestions *sug; size_t i; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc, &scin, &word) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(scin); convert_to_string_ex(word); sc = (aspell *)zend_list_find(Z_LVAL_PP(scin), &type); if(!sc) { php_error(E_WARNING, "%d is not an ASPELL result index", Z_LVAL_PP(scin)); RETURN_FALSE; } if (array_init(return_value) == FAILURE) { RETURN_FALSE; } sug = aspell_suggest(sc, Z_STRVAL_PP(word)); for (i = 0; i != sug->size; ++i) { add_next_index_string(return_value, (char *)sug->data[i], 1); } aspell_free_suggestions(sug); } /* }}} */ /* {{{ proto int aspell_check(aspell int, string word) Return if word is valid */ PHP_FUNCTION(aspell_check) { int type; pval **scin, **word; aspell *sc; int argc; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc, &scin, &word) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(scin); convert_to_string_ex(word); sc= (aspell *) zend_list_find(Z_LVAL_PP(scin), &type); if(!sc) { php_error(E_WARNING, "%d is not an ASPELL result index", Z_LVAL_PP(scin)); RETURN_FALSE; } if (aspell_check(sc, Z_STRVAL_PP(word))) { RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto int aspell_check_raw(aspell int, string word) Return if word is valid, ignoring case or trying to trim it in any way */ PHP_FUNCTION(aspell_check_raw) { pval **scin, **word; int type; int argc; aspell *sc; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc, &scin, &word) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(scin); convert_to_string_ex(word); sc = (aspell *)zend_list_find(Z_LVAL_PP(scin), &type); if(!sc) { php_error(E_WARNING, "%d is not an ASPELL result index", Z_LVAL_PP(scin)); RETURN_FALSE; } if (aspell_check_raw(sc, Z_STRVAL_PP(word))) { RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(aspell) { php_info_print_table_start(); php_info_print_table_row(2, "ASpell Support", "enabled"); php_info_print_table_end(); } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/aspell/config.m40100644000175200000240000000142407401753415014737 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.6 2025/11/30 18:59:25 sniper Exp $ dnl AC_MSG_CHECKING(for ASPELL support) AC_ARG_WITH(aspell, [ --with-aspell[=DIR] Include ASPELL support.], [ if test "$withval" != "no"; then if test "$withval" = "yes"; then ASPELL_DIR=/usr/local else ASPELL_DIR=$withval fi PHP_ADD_INCLUDE($ASPELL_DIR/include) PHP_ADD_LIBRARY_WITH_PATH(aspell, $ASPELL_DIR/lib) if test ! -f "$ASPELL_DIR/include/aspell-c.h"; then AC_MSG_ERROR(Could not find aspell-c.h in $ASPELL_DIR/include - please copy it manually from the aspell sources to $ASPELL_DIR/include) fi AC_DEFINE(HAVE_ASPELL,1,[Whether you have aspell]) AC_MSG_RESULT(yes) PHP_EXTENSION(aspell) else AC_MSG_RESULT(no) fi ],[ AC_MSG_RESULT(no) ]) php-4.2.3/ext/aspell/php_aspell.h0100644000175200000240000000317107437364603015537 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ /* $Id: php_aspell.h,v 1.9 2025/02/28 08:25:39 sebastian Exp $ */ #ifndef PHP_ASPELL_H #define PHP_ASPELL_H #if HAVE_ASPELL extern zend_module_entry aspell_module_entry; #define aspell_module_ptr &aspell_module_entry PHP_MINIT_FUNCTION(aspell); PHP_MINFO_FUNCTION(aspell); PHP_FUNCTION(aspell_new); PHP_FUNCTION(aspell_check); PHP_FUNCTION(aspell_check_raw); PHP_FUNCTION(aspell_suggest); #else #define aspell_module_ptr NULL #endif #define phpext_aspell_ptr aspell_module_ptr #endif /* PHP_ASPELL_H */ php-4.2.3/ext/Makefile.in0100644000175200000240000000010007103403244013772 0ustar zeevstaff SUBDIRS = $(EXT_SUBDIRS) include $(top_srcdir)/build/rules.mk php-4.2.3/ext/ext_skel0100755000175200000240000001737207416630614013526 0ustar zeevstaff#!/bin/sh givup() { echo $* exit 1 } usage() { echo "$0 --extname=module [--proto=file] [--stubs=file] [--xml[=file]]" echo " [--full-xml] [--no-help]" echo "" echo " --extname=module module is the name of your extension" echo " --proto=file file contains prototypes of functions to create" echo " --stubs=file generate only function stubs in file" echo " --xml generate xml documentation to be added to phpdoc-cvs" echo " --full-xml generate xml documentation for a self-contained extension" echo " (not yet implemented)" echo " --no-help don't try to be nice and create comments in the code" echo " and helper functions to test if the module compiled" exit 1 } if test $# = 0; then usage fi while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --extname=?*) extname=$optarg EXTNAME=`echo $extname | tr [a-z] [A-Z]` ;; --proto=?*) proto=$optarg ;; --stubs=*) stubs=yes stubfile=$optarg ;; --xml) xml="yes" ;; --xml=?*) xml=$optarg ;; --full-xml) full_xml="yes" ;; --no-help) no_help="yes" ;; *) usage ;; esac shift done if test -d "$extname" ; then givup "Directory $extname already exists." fi test -f ext_skel || givup "ext_skel must be in the current directory" test -d skeleton || givup "subdirectory skeleton does not exist or is not directory" if echo '\c' | grep -s c >/dev/null 2>&1 then ECHO_N="echo -n" ECHO_C="" else ECHO_N="echo" ECHO_C='\c' fi if test -z "$stubs"; then echo "Creating directory $extname" stubfile=$extname"/function_stubs" mkdir $extname || givup "Cannot create directory $extname" fi if test -n "$proto"; then cat $proto | awk -v extname=$extname -v stubs=$stubs -v stubfile=$stubfile -v xml=$xml -v full_xml=$full_xml -v i_know_what_to_do_shut_up_i_dont_need_your_help_mode=$no_help -f ./skeleton/create_stubs fi if test -z "$stubs"; then cd $extname chmod 755 . $ECHO_N "Creating basic files:$ECHO_C" $ECHO_N " config.m4$ECHO_C" cat >config.m4 < check with-path dnl SEARCH_PATH="/usr/local /usr" # you might want to change this dnl SEARCH_FOR="/include/$extname.h" # you most likely want to change this dnl if test -r \$PHP_$EXTNAME/$SEARCH_FOR; then # path given as parameter dnl ${EXTNAME}_DIR=\$PHP_$EXTNAME dnl else # search default path list dnl AC_MSG_CHECKING([for $extname files in default path]) dnl for i in \$SEARCH_PATH ; do dnl if test -r \$i/\$SEARCH_FOR; then dnl ${EXTNAME}_DIR=\$i dnl AC_MSG_RESULT(found in \$i) dnl fi dnl done dnl fi dnl dnl if test -z "\$${EXTNAME}_DIR"; then dnl AC_MSG_RESULT([not found]) dnl AC_MSG_ERROR([Please reinstall the $extname distribution]) dnl fi dnl # --with-$extname -> add include path dnl PHP_ADD_INCLUDE(\$${EXTNAME}_DIR/include) dnl # --with-$extname -> chech for lib and symbol presence dnl LIBNAME=$extname # you may want to change this dnl LIBSYMBOL=$extname # you most likely want to change this dnl PHP_CHECK_LIBRARY(\$LIBNAME,\$LIBSYMBOL, dnl [ dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/lib, ${EXTNAME}_SHARED_LIBADD) dnl AC_DEFINE(HAVE_${EXTNAME}LIB,1,[ ]) dnl ],[ dnl AC_MSG_ERROR([wrong $extname lib version or lib not found]) dnl ],[ dnl -L\$${EXTNAME}_DIR/lib -lm -ldl dnl ]) dnl dnl PHP_SUBST(${EXTNAME}_SHARED_LIBADD) PHP_EXTENSION($extname, \$ext_shared) fi eof $ECHO_N " Makefile.in$ECHO_C" cat >Makefile.in <.cvsignore < sedscript echo "s/EXTNAME/$EXTNAME/g" >> sedscript echo '/__function_entries_here__/r function_entries' >> sedscript echo '/__function_stubs_here__/r function_stubs' >> sedscript echo '/__header_here__/r ../../header' >> sedscript echo '/__footer_here__/r ../../footer' >> sedscript echo '/__function_entries_here__/D' >> sedscript echo '/__function_stubs_here__/D' >> sedscript echo '/__header_here__/D' >> sedscript echo '/__footer_here__/D' >> sedscript if [ ! -z "$no_help" ]; then echo "/confirm_$extname_compiled/D" >> sedscript echo '/Remove the following/,/^\*\//D' >> sedscript echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript echo 's/^\/\*.*\*\/$//' >> sedscript echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscript fi sed -f sedscript <../skeleton/skeleton.c > $extname.c $ECHO_N " php_$extname.h$ECHO_C" echo "s/extname/$extname/g" > sedscript echo "s/EXTNAME/$EXTNAME/g" >> sedscript echo '/__function_declarations_here__/r function_declarations' >> sedscript echo '/__header_here__/r ../../header' >> sedscript echo '/__footer_here__/r ../../footer' >> sedscript echo '/__function_declarations_here__/D' >> sedscript echo '/__header_here__/D' >> sedscript echo '/__footer_here__/D' >> sedscript if [ ! -z "$no_help" ]; then echo "/confirm_$extname_compiled/D" >> sedscript echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript echo 's/^\/\*.*\*\/$//' >> sedscript echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscript fi sed -f sedscript <../skeleton/php_skeleton.h > php_$extname.h $ECHO_N " CREDITS$ECHO_C" echo "s/extname/$extname/g" > sedscript sed -f sedscript <../skeleton/CREDITS > CREDITS $ECHO_N " EXPERIMENTAL$ECHO_C" echo "s/extname/$extname/g" > sedscript sed -f sedscript <../skeleton/EXPERIMENTAL > EXPERIMENTAL $ECHO_N " tests/001.phpt$ECHO_C" mkdir tests || givup "Cannot create tests directory" chmod 755 tests sed -f sedscript <../skeleton/tests/001.phpt > tests/001.phpt if test -z "$stubs" && test -z "$no_help"; then $ECHO_N " $extname.php$ECHO_C" sed \ -e "s/extname/$extname/g" \ <../skeleton/skeleton.php \ > $extname.php fi rm sedscript if test -n "$proto"; then if test -z "$stubs"; then rm function_entries rm function_declarations rm function_stubs fi if test -f function_warning; then rm function_warning warning=" NOTE! Because some arguments to functions were resources, the code generated cannot yet be compiled without editing. Please consider this to be step 4.5 in the instructions above. " fi fi find . -type f | xargs chmod 644 find . -type d | xargs chmod 755 fi echo " [done]." if test -z "$no_help" && test -z "$stubs"; then cat < /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: php-4.2.3/ext/bcmath/libbcmath/doc/bcmath.10100644000175200000240000000004107207025162017205 0ustar zeevstaff./" bcmath library documentation php-4.2.3/ext/bcmath/libbcmath/src/0040755000175200000240000000000007535765574015745 5ustar zeevstaffphp-4.2.3/ext/bcmath/libbcmath/src/Makefile.am0100644000175200000240000000101607262456443017761 0ustar zeevstaff# Makefile for bcmath library lib_LIBRARIES = libbcmath.a include_HEADERS = bcmath.h libbcmath_a_SOURCES= add.c compare.c debug.c div.c divmod.c doaddsub.c \ init.c int2num.c nearzero.c neg.c num2long.c num2str.c output.c \ raise.c raisemod.c recmul.c rmzero.c sqrt.c str2num.c sub.c zero.c \ outofmem.c rt.c INCLUDES = -I$(srcdir) -I.. CFLAGS = @CFLAGS@ CPPFLAGS = $(INCLUDES) -Wall MAINTAINERCLEANFILES= Makefile.in $(libbcmath_a_SOURCES) private.h bcmath.h all: $(bin_LIBRARIES) clean: rm -f $(OBJS) $(LIB) *~ php-4.2.3/ext/bcmath/libbcmath/src/Makefile.in0100644000175200000240000000051507210154411017754 0ustar zeevstaffLTLIBRARY_NAME = libbcmath.la LTLIBRARY_SOURCES = add.c div.c init.c neg.c outofmem.c raisemod.c rt.c sub.c \ compare.c divmod.c int2num.c num2long.c output.c recmul.c \ sqrt.c zero.c debug.c doaddsub.c nearzero.c num2str.c raise.c \ rmzero.c str2num.c include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/bcmath/libbcmath/src/add.c0100644000175200000240000000503707207025162016615 0ustar zeevstaff/* add.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Here is the full add routine that takes care of negative numbers. N1 is added to N2 and the result placed into RESULT. SCALE_MIN is the minimum scale for the result. */ void bc_add (n1, n2, result, scale_min) bc_num n1, n2, *result; int scale_min; { bc_num sum = NULL; int cmp_res; int res_scale; if (n1->n_sign == n2->n_sign) { sum = _bc_do_add (n1, n2, scale_min); sum->n_sign = n1->n_sign; } else { /* subtraction must be done. */ cmp_res = _bc_do_compare (n1, n2, FALSE, FALSE); /* Compare magnitudes. */ switch (cmp_res) { case -1: /* n1 is less than n2, subtract n1 from n2. */ sum = _bc_do_sub (n2, n1, scale_min); sum->n_sign = n2->n_sign; break; case 0: /* They are equal! return zero with the correct scale! */ res_scale = MAX (scale_min, MAX(n1->n_scale, n2->n_scale)); sum = bc_new_num (1, res_scale); memset (sum->n_value, 0, res_scale+1); break; case 1: /* n2 is less than n1, subtract n2 from n1. */ sum = _bc_do_sub (n1, n2, scale_min); sum->n_sign = n1->n_sign; } } /* Clean up and return. */ bc_free_num (result); *result = sum; } php-4.2.3/ext/bcmath/libbcmath/src/bcmath.h0100644000175200000240000001067307335257572017350 0ustar zeevstaff/* bcmath.h: bcmath library header. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #ifndef _BCMATH_H_ #define _BCMATH_H_ typedef enum {PLUS, MINUS} sign; typedef struct bc_struct *bc_num; typedef struct bc_struct { sign n_sign; int n_len; /* The number of digits before the decimal point. */ int n_scale; /* The number of digits after the decimal point. */ int n_refs; /* The number of pointers to this number. */ bc_num n_next; /* Linked list for available list. */ char *n_ptr; /* The pointer to the actual storage. If NULL, n_value points to the inside of another number (bc_multiply...) and should not be "freed." */ char *n_value; /* The number. Not zero char terminated. May not point to the same place as n_ptr as in the case of leading zeros generated. */ } bc_struct; /* The base used in storing the numbers in n_value above. Currently this MUST be 10. */ #define BASE 10 /* Some useful macros and constants. */ #define CH_VAL(c) (c - '0') #define BCD_CHAR(d) (d + '0') #ifdef MIN #undef MIN #undef MAX #endif #define MAX(a, b) ((a)>(b)?(a):(b)) #define MIN(a, b) ((a)>(b)?(b):(a)) #define ODD(a) ((a)&1) #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif #ifndef LONG_MAX #define LONG_MAX 0x7ffffff #endif /* Global numbers. */ extern bc_num _zero_; extern bc_num _one_; extern bc_num _two_; /* Function Prototypes */ /* Define the _PROTOTYPE macro if it is needed. */ #ifndef _PROTOTYPE #ifdef __STDC__ #define _PROTOTYPE(func, args) func args #else #define _PROTOTYPE(func, args) func() #endif #endif _PROTOTYPE(void bc_init_numbers, (void)); _PROTOTYPE(bc_num bc_new_num, (int length, int scale)); _PROTOTYPE(void bc_free_num, (bc_num *num)); _PROTOTYPE(bc_num bc_copy_num, (bc_num num)); _PROTOTYPE(void bc_init_num, (bc_num *num)); _PROTOTYPE(void bc_str2num, (bc_num *num, char *str, int scale)); _PROTOTYPE(char *bc_num2str, (bc_num num)); _PROTOTYPE(void bc_int2num, (bc_num *num, int val)); _PROTOTYPE(long bc_num2long, (bc_num num)); _PROTOTYPE(int bc_compare, (bc_num n1, bc_num n2)); _PROTOTYPE(char bc_is_zero, (bc_num num)); _PROTOTYPE(char bc_is_near_zero, (bc_num num, int scale)); _PROTOTYPE(char bc_is_neg, (bc_num num)); _PROTOTYPE(void bc_add, (bc_num n1, bc_num n2, bc_num *result, int scale_min)); _PROTOTYPE(void bc_sub, (bc_num n1, bc_num n2, bc_num *result, int scale_min)); _PROTOTYPE(void bc_multiply, (bc_num n1, bc_num n2, bc_num *prod, int scale)); _PROTOTYPE(int bc_divide, (bc_num n1, bc_num n2, bc_num *quot, int scale)); _PROTOTYPE(int bc_modulo, (bc_num num1, bc_num num2, bc_num *result, int scale)); _PROTOTYPE(int bc_divmod, (bc_num num1, bc_num num2, bc_num *quot, bc_num *rem, int scale)); _PROTOTYPE(int bc_raisemod, (bc_num base, bc_num expo, bc_num mod, bc_num *result, int scale)); _PROTOTYPE(void bc_raise, (bc_num num1, bc_num num2, bc_num *result, int scale)); _PROTOTYPE(int bc_sqrt, (bc_num *num, int scale)); _PROTOTYPE(void bc_out_num, (bc_num num, int o_base, void (* out_char)(int), int leading_zero)); /* Prototypes needed for external utility routines. */ _PROTOTYPE(void bc_rt_warn, (char *mesg ,...)); _PROTOTYPE(void bc_rt_error, (char *mesg ,...)); _PROTOTYPE(void bc_out_of_memory, (void)); #endif php-4.2.3/ext/bcmath/libbcmath/src/compare.c0100644000175200000240000000744407207025162017517 0ustar zeevstaff/* compare.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Compare two bc numbers. Return value is 0 if equal, -1 if N1 is less than N2 and +1 if N1 is greater than N2. If USE_SIGN is false, just compare the magnitudes. */ int _bc_do_compare (n1, n2, use_sign, ignore_last) bc_num n1, n2; int use_sign; int ignore_last; { char *n1ptr, *n2ptr; int count; /* First, compare signs. */ if (use_sign && n1->n_sign != n2->n_sign) { if (n1->n_sign == PLUS) return (1); /* Positive N1 > Negative N2 */ else return (-1); /* Negative N1 < Positive N1 */ } /* Now compare the magnitude. */ if (n1->n_len != n2->n_len) { if (n1->n_len > n2->n_len) { /* Magnitude of n1 > n2. */ if (!use_sign || n1->n_sign == PLUS) return (1); else return (-1); } else { /* Magnitude of n1 < n2. */ if (!use_sign || n1->n_sign == PLUS) return (-1); else return (1); } } /* If we get here, they have the same number of integer digits. check the integer part and the equal length part of the fraction. */ count = n1->n_len + MIN (n1->n_scale, n2->n_scale); n1ptr = n1->n_value; n2ptr = n2->n_value; while ((count > 0) && (*n1ptr == *n2ptr)) { n1ptr++; n2ptr++; count--; } if (ignore_last && count == 1 && n1->n_scale == n2->n_scale) return (0); if (count != 0) { if (*n1ptr > *n2ptr) { /* Magnitude of n1 > n2. */ if (!use_sign || n1->n_sign == PLUS) return (1); else return (-1); } else { /* Magnitude of n1 < n2. */ if (!use_sign || n1->n_sign == PLUS) return (-1); else return (1); } } /* They are equal up to the last part of the equal part of the fraction. */ if (n1->n_scale != n2->n_scale) { if (n1->n_scale > n2->n_scale) { for (count = n1->n_scale-n2->n_scale; count>0; count--) if (*n1ptr++ != 0) { /* Magnitude of n1 > n2. */ if (!use_sign || n1->n_sign == PLUS) return (1); else return (-1); } } else { for (count = n2->n_scale-n1->n_scale; count>0; count--) if (*n2ptr++ != 0) { /* Magnitude of n1 < n2. */ if (!use_sign || n1->n_sign == PLUS) return (-1); else return (1); } } } /* They must be equal! */ return (0); } /* This is the "user callable" routine to compare numbers N1 and N2. */ int bc_compare (n1, n2) bc_num n1, n2; { return _bc_do_compare (n1, n2, TRUE, FALSE); } php-4.2.3/ext/bcmath/libbcmath/src/config.h0100644000175200000240000000023307210154411017322 0ustar zeevstaff#if PHP_WIN32 #include "../../../../main/config.w32.h" #else #include "php_config.h" #endif #include #include "zend.h" #include "zend_alloc.h" php-4.2.3/ext/bcmath/libbcmath/src/debug.c0100644000175200000240000000350507207025162017151 0ustar zeevstaff/* debug.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* pn prints the number NUM in base 10. */ static void out_char (int c) { putchar(c); } void pn (num) bc_num num; { bc_out_num (num, 10, out_char, 0); out_char ('\n'); } /* pv prints a character array as if it was a string of bcd digits. */ void pv (name, num, len) char *name; unsigned char *num; int len; { int i; printf ("%s=", name); for (i=0; i #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Some utility routines for the divide: First a one digit multiply. NUM (with SIZE digits) is multiplied by DIGIT and the result is placed into RESULT. It is written so that NUM and RESULT can be the same pointers. */ static void _one_mult (num, size, digit, result) unsigned char *num; int size, digit; unsigned char *result; { int carry, value; unsigned char *nptr, *rptr; if (digit == 0) memset (result, 0, size); else { if (digit == 1) memcpy (result, num, size); else { /* Initialize */ nptr = (unsigned char *) (num+size-1); rptr = (unsigned char *) (result+size-1); carry = 0; while (size-- > 0) { value = *nptr-- * digit + carry; *rptr-- = value % BASE; carry = value / BASE; } if (carry != 0) *rptr = carry; } } } /* The full division routine. This computes N1 / N2. It returns 0 if the division is ok and the result is in QUOT. The number of digits after the decimal point is SCALE. It returns -1 if division by zero is tried. The algorithm is found in Knuth Vol 2. p237. */ int bc_divide (n1, n2, quot, scale) bc_num n1, n2, *quot; int scale; { bc_num qval; unsigned char *num1, *num2; unsigned char *ptr1, *ptr2, *n2ptr, *qptr; int scale1, val; unsigned int len1, len2, scale2, qdigits, extra, count; unsigned int qdig, qguess, borrow, carry; unsigned char *mval; char zero; unsigned int norm; /* Test for divide by zero. */ if (bc_is_zero (n2)) return -1; /* Test for divide by 1. If it is we must truncate. */ if (n2->n_scale == 0) { if (n2->n_len == 1 && *n2->n_value == 1) { qval = bc_new_num (n1->n_len, scale); qval->n_sign = (n1->n_sign == n2->n_sign ? PLUS : MINUS); memset (&qval->n_value[n1->n_len],0,scale); memcpy (qval->n_value, n1->n_value, n1->n_len + MIN(n1->n_scale,scale)); bc_free_num (quot); *quot = qval; } } /* Set up the divide. Move the decimal point on n1 by n2's scale. Remember, zeros on the end of num2 are wasted effort for dividing. */ scale2 = n2->n_scale; n2ptr = (unsigned char *) n2->n_value+n2->n_len+scale2-1; while ((scale2 > 0) && (*n2ptr-- == 0)) scale2--; len1 = n1->n_len + scale2; scale1 = n1->n_scale - scale2; if (scale1 < scale) extra = scale - scale1; else extra = 0; num1 = (unsigned char *) emalloc (n1->n_len+n1->n_scale+extra+2); if (num1 == NULL) bc_out_of_memory(); memset (num1, 0, n1->n_len+n1->n_scale+extra+2); memcpy (num1+1, n1->n_value, n1->n_len+n1->n_scale); len2 = n2->n_len + scale2; num2 = (unsigned char *) emalloc (len2+1); if (num2 == NULL) bc_out_of_memory(); memcpy (num2, n2->n_value, len2); *(num2+len2) = 0; n2ptr = num2; while (*n2ptr == 0) { n2ptr++; len2--; } /* Calculate the number of quotient digits. */ if (len2 > len1+scale) { qdigits = scale+1; zero = TRUE; } else { zero = FALSE; if (len2>len1) qdigits = scale+1; /* One for the zero integer part. */ else qdigits = len1-len2+scale+1; } /* Allocate and zero the storage for the quotient. */ qval = bc_new_num (qdigits-scale,scale); memset (qval->n_value, 0, qdigits); /* Allocate storage for the temporary storage mval. */ mval = (unsigned char *) emalloc (len2+1); if (mval == NULL) bc_out_of_memory (); /* Now for the full divide algorithm. */ if (!zero) { /* Normalize */ norm = 10 / ((int)*n2ptr + 1); if (norm != 1) { _one_mult (num1, len1+scale1+extra+1, norm, num1); _one_mult (n2ptr, len2, norm, n2ptr); } /* Initialize divide loop. */ qdig = 0; if (len2 > len1) qptr = (unsigned char *) qval->n_value+len2-len1; else qptr = (unsigned char *) qval->n_value; /* Loop */ while (qdig <= len1+scale-len2) { /* Calculate the quotient digit guess. */ if (*n2ptr == num1[qdig]) qguess = 9; else qguess = (num1[qdig]*10 + num1[qdig+1]) / *n2ptr; /* Test qguess. */ if (n2ptr[1]*qguess > (num1[qdig]*10 + num1[qdig+1] - *n2ptr*qguess)*10 + num1[qdig+2]) { qguess--; /* And again. */ if (n2ptr[1]*qguess > (num1[qdig]*10 + num1[qdig+1] - *n2ptr*qguess)*10 + num1[qdig+2]) qguess--; } /* Multiply and subtract. */ borrow = 0; if (qguess != 0) { *mval = 0; _one_mult (n2ptr, len2, qguess, mval+1); ptr1 = (unsigned char *) num1+qdig+len2; ptr2 = (unsigned char *) mval+len2; for (count = 0; count < len2+1; count++) { val = (int) *ptr1 - (int) *ptr2-- - borrow; if (val < 0) { val += 10; borrow = 1; } else borrow = 0; *ptr1-- = val; } } /* Test for negative result. */ if (borrow == 1) { qguess--; ptr1 = (unsigned char *) num1+qdig+len2; ptr2 = (unsigned char *) n2ptr+len2-1; carry = 0; for (count = 0; count < len2; count++) { val = (int) *ptr1 + (int) *ptr2-- + carry; if (val > 9) { val -= 10; carry = 1; } else carry = 0; *ptr1-- = val; } if (carry == 1) *ptr1 = (*ptr1 + 1) % 10; } /* We now know the quotient digit. */ *qptr++ = qguess; qdig++; } } /* Clean up and return the number. */ qval->n_sign = ( n1->n_sign == n2->n_sign ? PLUS : MINUS ); if (bc_is_zero (qval)) qval->n_sign = PLUS; _bc_rm_leading_zeros (qval); bc_free_num (quot); *quot = qval; /* Clean up temporary storage. */ efree (mval); efree (num1); efree (num2); return 0; /* Everything is OK. */ } php-4.2.3/ext/bcmath/libbcmath/src/divmod.c0100644000175200000240000000472307207025162017350 0ustar zeevstaff/* divmod.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Division *and* modulo for numbers. This computes both NUM1 / NUM2 and NUM1 % NUM2 and puts the results in QUOT and REM, except that if QUOT is NULL then that store will be omitted. */ int bc_divmod (num1, num2, quot, rem, scale) bc_num num1, num2, *quot, *rem; int scale; { bc_num quotient = NULL; bc_num temp; int rscale; /* Check for correct numbers. */ if (bc_is_zero (num2)) return -1; /* Calculate final scale. */ rscale = MAX (num1->n_scale, num2->n_scale+scale); bc_init_num(&temp); /* Calculate it. */ bc_divide (num1, num2, &temp, scale); if (quot) quotient = bc_copy_num (temp); bc_multiply (temp, num2, &temp, rscale); bc_sub (num1, temp, rem, rscale); bc_free_num (&temp); if (quot) { bc_free_num (quot); *quot = quotient; } return 0; /* Everything is OK. */ } /* Modulo for numbers. This computes NUM1 % NUM2 and puts the result in RESULT. */ int bc_modulo (num1, num2, result, scale) bc_num num1, num2, *result; int scale; { return bc_divmod (num1, num2, NULL, result, scale); } php-4.2.3/ext/bcmath/libbcmath/src/doaddsub.c0100644000175200000240000001344207207025162017651 0ustar zeevstaff/* doaddsub.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Perform addition: N1 is added to N2 and the value is returned. The signs of N1 and N2 are ignored. SCALE_MIN is to set the minimum scale of the result. */ bc_num _bc_do_add (n1, n2, scale_min) bc_num n1, n2; int scale_min; { bc_num sum; int sum_scale, sum_digits; char *n1ptr, *n2ptr, *sumptr; int carry, n1bytes, n2bytes; int count; /* Prepare sum. */ sum_scale = MAX (n1->n_scale, n2->n_scale); sum_digits = MAX (n1->n_len, n2->n_len) + 1; sum = bc_new_num (sum_digits, MAX(sum_scale, scale_min)); /* Zero extra digits made by scale_min. */ if (scale_min > sum_scale) { sumptr = (char *) (sum->n_value + sum_scale + sum_digits); for (count = scale_min - sum_scale; count > 0; count--) *sumptr++ = 0; } /* Start with the fraction part. Initialize the pointers. */ n1bytes = n1->n_scale; n2bytes = n2->n_scale; n1ptr = (char *) (n1->n_value + n1->n_len + n1bytes - 1); n2ptr = (char *) (n2->n_value + n2->n_len + n2bytes - 1); sumptr = (char *) (sum->n_value + sum_scale + sum_digits - 1); /* Add the fraction part. First copy the longer fraction.*/ if (n1bytes != n2bytes) { if (n1bytes > n2bytes) while (n1bytes>n2bytes) { *sumptr-- = *n1ptr--; n1bytes--;} else while (n2bytes>n1bytes) { *sumptr-- = *n2ptr--; n2bytes--;} } /* Now add the remaining fraction part and equal size integer parts. */ n1bytes += n1->n_len; n2bytes += n2->n_len; carry = 0; while ((n1bytes > 0) && (n2bytes > 0)) { *sumptr = *n1ptr-- + *n2ptr-- + carry; if (*sumptr > (BASE-1)) { carry = 1; *sumptr -= BASE; } else carry = 0; sumptr--; n1bytes--; n2bytes--; } /* Now add carry the longer integer part. */ if (n1bytes == 0) { n1bytes = n2bytes; n1ptr = n2ptr; } while (n1bytes-- > 0) { *sumptr = *n1ptr-- + carry; if (*sumptr > (BASE-1)) { carry = 1; *sumptr -= BASE; } else carry = 0; sumptr--; } /* Set final carry. */ if (carry == 1) *sumptr += 1; /* Adjust sum and return. */ _bc_rm_leading_zeros (sum); return sum; } /* Perform subtraction: N2 is subtracted from N1 and the value is returned. The signs of N1 and N2 are ignored. Also, N1 is assumed to be larger than N2. SCALE_MIN is the minimum scale of the result. */ bc_num _bc_do_sub (n1, n2, scale_min) bc_num n1, n2; int scale_min; { bc_num diff; int diff_scale, diff_len; int min_scale, min_len; char *n1ptr, *n2ptr, *diffptr; int borrow, count, val; /* Allocate temporary storage. */ diff_len = MAX (n1->n_len, n2->n_len); diff_scale = MAX (n1->n_scale, n2->n_scale); min_len = MIN (n1->n_len, n2->n_len); min_scale = MIN (n1->n_scale, n2->n_scale); diff = bc_new_num (diff_len, MAX(diff_scale, scale_min)); /* Zero extra digits made by scale_min. */ if (scale_min > diff_scale) { diffptr = (char *) (diff->n_value + diff_len + diff_scale); for (count = scale_min - diff_scale; count > 0; count--) *diffptr++ = 0; } /* Initialize the subtract. */ n1ptr = (char *) (n1->n_value + n1->n_len + n1->n_scale -1); n2ptr = (char *) (n2->n_value + n2->n_len + n2->n_scale -1); diffptr = (char *) (diff->n_value + diff_len + diff_scale -1); /* Subtract the numbers. */ borrow = 0; /* Take care of the longer scaled number. */ if (n1->n_scale != min_scale) { /* n1 has the longer scale */ for (count = n1->n_scale - min_scale; count > 0; count--) *diffptr-- = *n1ptr--; } else { /* n2 has the longer scale */ for (count = n2->n_scale - min_scale; count > 0; count--) { val = - *n2ptr-- - borrow; if (val < 0) { val += BASE; borrow = 1; } else borrow = 0; *diffptr-- = val; } } /* Now do the equal length scale and integer parts. */ for (count = 0; count < min_len + min_scale; count++) { val = *n1ptr-- - *n2ptr-- - borrow; if (val < 0) { val += BASE; borrow = 1; } else borrow = 0; *diffptr-- = val; } /* If n1 has more digits then n2, we now do that subtract. */ if (diff_len != min_len) { for (count = diff_len - min_len; count > 0; count--) { val = *n1ptr-- - borrow; if (val < 0) { val += BASE; borrow = 1; } else borrow = 0; *diffptr-- = val; } } /* Clean up and return. */ _bc_rm_leading_zeros (diff); return diff; } php-4.2.3/ext/bcmath/libbcmath/src/init.c0100644000175200000240000000633307207025162017030 0ustar zeevstaff/* init.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Storage used for special numbers. */ bc_num _zero_; bc_num _one_; bc_num _two_; bc_num _bc_Free_list = NULL; /* new_num allocates a number and sets fields to known values. */ bc_num bc_new_num (length, scale) int length, scale; { bc_num temp; /* PHP Change: malloc() -> emalloc(), removed free_list code */ temp = (bc_num) emalloc (sizeof(bc_struct)+length+scale); #if 0 if (_bc_Free_list != NULL) { temp = _bc_Free_list; _bc_Free_list = temp->n_next; } else { temp = (bc_num) emalloc (sizeof(bc_struct)); if (temp == NULL) bc_out_of_memory (); } #endif temp->n_sign = PLUS; temp->n_len = length; temp->n_scale = scale; temp->n_refs = 1; /* PHP Change: malloc() -> emalloc() */ temp->n_ptr = (char *) emalloc (length+scale); if (temp->n_ptr == NULL) bc_out_of_memory(); temp->n_value = temp->n_ptr; memset (temp->n_ptr, 0, length+scale); return temp; } /* "Frees" a bc_num NUM. Actually decreases reference count and only frees the storage if reference count is zero. */ void bc_free_num (num) bc_num *num; { if (*num == NULL) return; (*num)->n_refs--; if ((*num)->n_refs == 0) { if ((*num)->n_ptr) /* PHP Change: free() -> efree(), removed free_list code */ efree ((*num)->n_ptr); efree(*num); #if 0 (*num)->n_next = _bc_Free_list; _bc_Free_list = *num; #endif } *num = NULL; } /* Intitialize the number package! */ void bc_init_numbers () { _zero_ = bc_new_num (1,0); _one_ = bc_new_num (1,0); _one_->n_value[0] = 1; _two_ = bc_new_num (1,0); _two_->n_value[0] = 2; } /* Make a copy of a number! Just increments the reference count! */ bc_num bc_copy_num (num) bc_num num; { num->n_refs++; return num; } /* Initialize a number NUM by making it a copy of zero. */ void bc_init_num (num) bc_num *num; { *num = bc_copy_num (_zero_); } php-4.2.3/ext/bcmath/libbcmath/src/int2num.c0100644000175200000240000000411707207025162017457 0ustar zeevstaff/* int2num.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Convert an integer VAL to a bc number NUM. */ void bc_int2num (num, val) bc_num *num; int val; { char buffer[30]; char *bptr, *vptr; int ix = 1; char neg = 0; /* Sign. */ if (val < 0) { neg = 1; val = -val; } /* Get things going. */ bptr = buffer; *bptr++ = val % BASE; val = val / BASE; /* Extract remaining digits. */ while (val != 0) { *bptr++ = val % BASE; val = val / BASE; ix++; /* Count the digits. */ } /* Make the number. */ bc_free_num (num); *num = bc_new_num (ix, 0); if (neg) (*num)->n_sign = MINUS; /* Assign the digits. */ vptr = (*num)->n_value; while (ix-- > 0) *vptr++ = *--bptr; } php-4.2.3/ext/bcmath/libbcmath/src/nearzero.c0100644000175200000240000000372607207025162017715 0ustar zeevstaff/* nearzero.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* In some places we need to check if the number NUM is almost zero. Specifically, all but the last digit is 0 and the last digit is 1. Last digit is defined by scale. */ char bc_is_near_zero (num, scale) bc_num num; int scale; { int count; char *nptr; /* Error checking */ if (scale > num->n_scale) scale = num->n_scale; /* Initialize */ count = num->n_len + scale; nptr = num->n_value; /* The check */ while ((count > 0) && (*nptr++ == 0)) count--; if (count != 0 && (count != 1 || *--nptr != 1)) return FALSE; else return TRUE; } php-4.2.3/ext/bcmath/libbcmath/src/neg.c0100644000175200000240000000301707207025162016632 0ustar zeevstaff/* neg.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* In some places we need to check if the number is negative. */ char bc_is_neg (num) bc_num num; { return num->n_sign == MINUS; } php-4.2.3/ext/bcmath/libbcmath/src/num2long.c0100644000175200000240000000416507207025162017627 0ustar zeevstaff/* num2long.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Convert a number NUM to a long. The function returns only the integer part of the number. For numbers that are too large to represent as a long, this function returns a zero. This can be detected by checking the NUM for zero after having a zero returned. */ long bc_num2long (num) bc_num num; { long val; char *nptr; int index; /* Extract the int value, ignore the fraction. */ val = 0; nptr = num->n_value; for (index=num->n_len; (index>0) && (val<=(LONG_MAX/BASE)); index--) val = val*BASE + *nptr++; /* Check for overflow. If overflow, return zero. */ if (index>0) val = 0; if (val < 0) val = 0; /* Return the value. */ if (num->n_sign == PLUS) return (val); else return (-val); } php-4.2.3/ext/bcmath/libbcmath/src/num2str.c0100644000175200000240000000442307210154411017467 0ustar zeevstaff/* num2str.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Convert a numbers to a string. Base 10 only.*/ char *bc_num2str (num) bc_num num; { char *str, *sptr; char *nptr; int index, signch; /* Allocate the string memory. */ signch = ( num->n_sign == PLUS ? 0 : 1 ); /* Number of sign chars. */ if (num->n_scale > 0) str = (char *) emalloc (num->n_len + num->n_scale + 2 + signch); else str = (char *) emalloc (num->n_len + 1 + signch); if (str == NULL) bc_out_of_memory(); /* The negative sign if needed. */ sptr = str; if (signch) *sptr++ = '-'; /* Load the whole number. */ nptr = num->n_value; for (index=num->n_len; index>0; index--) *sptr++ = BCD_CHAR(*nptr++); /* Now the fraction. */ if (num->n_scale > 0) { *sptr++ = '.'; for (index=0; indexn_scale; index++) *sptr++ = BCD_CHAR(*nptr++); } /* Terminate the string and return it! */ *sptr = '\0'; return (str); } php-4.2.3/ext/bcmath/libbcmath/src/outofmem.c0100644000175200000240000000275507207025162017724 0ustar zeevstaff/* outofmem.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" void bc_out_of_memory (void) { (void) fprintf (stderr, "bcmath: out of memory!\n"); exit (1); } php-4.2.3/ext/bcmath/libbcmath/src/output.c0100644000175200000240000001304707210154411017417 0ustar zeevstaff/* output.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* The following routines provide output for bcd numbers package using the rules of POSIX bc for output. */ /* This structure is used for saving digits in the conversion process. */ typedef struct stk_rec { long digit; struct stk_rec *next; } stk_rec; /* The reference string for digits. */ static char ref_str[] = "0123456789ABCDEF"; /* A special output routine for "multi-character digits." Exactly SIZE characters must be output for the value VAL. If SPACE is non-zero, we must output one space before the number. OUT_CHAR is the actual routine for writing the characters. */ void bc_out_long (val, size, space, out_char) long val; int size, space; #ifdef __STDC__ void (*out_char)(int); #else void (*out_char)(); #endif { char digits[40]; int len, ix; if (space) (*out_char) (' '); sprintf (digits, "%ld", val); len = strlen (digits); while (size > len) { (*out_char) ('0'); size--; } for (ix=0; ix < len; ix++) (*out_char) (digits[ix]); } /* Output of a bcd number. NUM is written in base O_BASE using OUT_CHAR as the routine to do the actual output of the characters. */ void bc_out_num (num, o_base, out_char, leading_zero) bc_num num; int o_base; #ifdef __STDC__ void (*out_char)(int); #else void (*out_char)(); #endif int leading_zero; { char *nptr; int index, fdigit, pre_space; stk_rec *digits, *temp; bc_num int_part, frac_part, base, cur_dig, t_num, max_o_digit; /* The negative sign if needed. */ if (num->n_sign == MINUS) (*out_char) ('-'); /* Output the number. */ if (bc_is_zero (num)) (*out_char) ('0'); else if (o_base == 10) { /* The number is in base 10, do it the fast way. */ nptr = num->n_value; if (num->n_len > 1 || *nptr != 0) for (index=num->n_len; index>0; index--) (*out_char) (BCD_CHAR(*nptr++)); else nptr++; if (leading_zero && bc_is_zero (num)) (*out_char) ('0'); /* Now the fraction. */ if (num->n_scale > 0) { (*out_char) ('.'); for (index=0; indexn_scale; index++) (*out_char) (BCD_CHAR(*nptr++)); } } else { /* special case ... */ if (leading_zero && bc_is_zero (num)) (*out_char) ('0'); /* The number is some other base. */ digits = NULL; bc_init_num (&int_part); bc_divide (num, _one_, &int_part, 0); bc_init_num (&frac_part); bc_init_num (&cur_dig); bc_init_num (&base); bc_sub (num, int_part, &frac_part, 0); /* Make the INT_PART and FRAC_PART positive. */ int_part->n_sign = PLUS; frac_part->n_sign = PLUS; bc_int2num (&base, o_base); bc_init_num (&max_o_digit); bc_int2num (&max_o_digit, o_base-1); /* Get the digits of the integer part and push them on a stack. */ while (!bc_is_zero (int_part)) { bc_modulo (int_part, base, &cur_dig, 0); /* PHP Change: malloc() -> emalloc() */ temp = (stk_rec *) emalloc (sizeof(stk_rec)); if (temp == NULL) bc_out_of_memory(); temp->digit = bc_num2long (cur_dig); temp->next = digits; digits = temp; bc_divide (int_part, base, &int_part, 0); } /* Print the digits on the stack. */ if (digits != NULL) { /* Output the digits. */ while (digits != NULL) { temp = digits; digits = digits->next; if (o_base <= 16) (*out_char) (ref_str[ (int) temp->digit]); else bc_out_long (temp->digit, max_o_digit->n_len, 1, out_char); efree (temp); } } /* Get and print the digits of the fraction part. */ if (num->n_scale > 0) { (*out_char) ('.'); pre_space = 0; t_num = bc_copy_num (_one_); while (t_num->n_len <= num->n_scale) { bc_multiply (frac_part, base, &frac_part, num->n_scale); fdigit = bc_num2long (frac_part); bc_int2num (&int_part, fdigit); bc_sub (frac_part, int_part, &frac_part, 0); if (o_base <= 16) (*out_char) (ref_str[fdigit]); else { bc_out_long (fdigit, max_o_digit->n_len, pre_space, out_char); pre_space = 1; } bc_multiply (t_num, base, &t_num, 0); } bc_free_num (&t_num); } /* Clean up. */ bc_free_num (&int_part); bc_free_num (&frac_part); bc_free_num (&base); bc_free_num (&cur_dig); bc_free_num (&max_o_digit); } } php-4.2.3/ext/bcmath/libbcmath/src/private.h0100644000175200000240000000305407207025162017541 0ustar zeevstaff/* private.h: bcmath library header. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ /* "Private" routines to bcmath. */ /* variables */ bc_num _bc_Free_list; /* routines */ int _bc_do_compare (bc_num n1, bc_num n2, int use_sign, int ignore_last); bc_num _bc_do_add (bc_num n1, bc_num n2, int scale_min); bc_num _bc_do_sub (bc_num n1, bc_num n2, int scale_min); void _bc_rm_leading_zeros (bc_num num); php-4.2.3/ext/bcmath/libbcmath/src/raise.c0100644000175200000240000000657407207025162017177 0ustar zeevstaff/* raise.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Raise NUM1 to the NUM2 power. The result is placed in RESULT. Maximum exponent is LONG_MAX. If a NUM2 is not an integer, only the integer part is used. */ void bc_raise (num1, num2, result, scale) bc_num num1, num2, *result; int scale; { bc_num temp, power; long exponent; int rscale; int pwrscale; int calcscale; char neg; /* Check the exponent for scale digits and convert to a long. */ if (num2->n_scale != 0) bc_rt_warn ("non-zero scale in exponent"); exponent = bc_num2long (num2); if (exponent == 0 && (num2->n_len > 1 || num2->n_value[0] != 0)) bc_rt_error ("exponent too large in raise"); /* Special case if exponent is a zero. */ if (exponent == 0) { bc_free_num (result); *result = bc_copy_num (_one_); return; } /* Other initializations. */ if (exponent < 0) { neg = TRUE; exponent = -exponent; rscale = scale; } else { neg = FALSE; rscale = MIN (num1->n_scale*exponent, MAX(scale, num1->n_scale)); } /* Set initial value of temp. */ power = bc_copy_num (num1); pwrscale = num1->n_scale; while ((exponent & 1) == 0) { pwrscale = 2*pwrscale; bc_multiply (power, power, &power, pwrscale); exponent = exponent >> 1; } temp = bc_copy_num (power); calcscale = pwrscale; exponent = exponent >> 1; /* Do the calculation. */ while (exponent > 0) { pwrscale = 2*pwrscale; bc_multiply (power, power, &power, pwrscale); if ((exponent & 1) == 1) { calcscale = pwrscale + calcscale; bc_multiply (temp, power, &temp, calcscale); } exponent = exponent >> 1; } /* Assign the value. */ if (neg) { bc_divide (_one_, temp, result, rscale); bc_free_num (&temp); } else { bc_free_num (result); *result = temp; if ((*result)->n_scale > rscale) (*result)->n_scale = rscale; } bc_free_num (&power); } php-4.2.3/ext/bcmath/libbcmath/src/raisemod.c0100644000175200000240000000565107207025162017672 0ustar zeevstaff/* raisemod.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Raise BASE to the EXPO power, reduced modulo MOD. The result is placed in RESULT. If a EXPO is not an integer, only the integer part is used. */ int bc_raisemod (base, expo, mod, result, scale) bc_num base, expo, mod, *result; int scale; { bc_num power, exponent, parity, temp; int rscale; /* Check for correct numbers. */ if (bc_is_zero(mod)) return -1; if (bc_is_neg(expo)) return -1; /* Set initial values. */ power = bc_copy_num (base); exponent = bc_copy_num (expo); temp = bc_copy_num (_one_); bc_init_num(&parity); /* Check the base for scale digits. */ if (base->n_scale != 0) bc_rt_warn ("non-zero scale in base"); /* Check the exponent for scale digits. */ if (exponent->n_scale != 0) { bc_rt_warn ("non-zero scale in exponent"); bc_divide (exponent, _one_, &exponent, 0); /*truncate */ } /* Check the modulus for scale digits. */ if (mod->n_scale != 0) bc_rt_warn ("non-zero scale in modulus"); /* Do the calculation. */ rscale = MAX(scale, base->n_scale); while ( !bc_is_zero(exponent) ) { (void) bc_divmod (exponent, _two_, &exponent, &parity, 0); if ( !bc_is_zero(parity) ) { bc_multiply (temp, power, &temp, rscale); (void) bc_modulo (temp, mod, &temp, scale); } bc_multiply (power, power, &power, rscale); (void) bc_modulo (power, mod, &power, scale); } /* Assign the value. */ bc_free_num (&power); bc_free_num (&exponent); bc_free_num (result); *result = temp; return 0; /* Everything is OK. */ } php-4.2.3/ext/bcmath/libbcmath/src/recmul.c0100644000175200000240000001713307210154411017346 0ustar zeevstaff/* recmul.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Recursive vs non-recursive multiply crossover ranges. */ #if defined(MULDIGITS) #include "muldigits.h" #else #define MUL_BASE_DIGITS 80 #endif int mul_base_digits = MUL_BASE_DIGITS; #define MUL_SMALL_DIGITS mul_base_digits/4 /* Multiply utility routines */ static bc_num new_sub_num (length, scale, value) int length, scale; char *value; { bc_num temp; if (_bc_Free_list != NULL) { temp = _bc_Free_list; _bc_Free_list = temp->n_next; } else { temp = (bc_num) emalloc (sizeof(bc_struct)); if (temp == NULL) bc_out_of_memory (); } temp->n_sign = PLUS; temp->n_len = length; temp->n_scale = scale; temp->n_refs = 1; temp->n_ptr = NULL; temp->n_value = value; return temp; } static void _bc_simp_mul (bc_num n1, int n1len, bc_num n2, int n2len, bc_num *prod, int full_scale) { char *n1ptr, *n2ptr, *pvptr; char *n1end, *n2end; /* To the end of n1 and n2. */ int indx, sum, prodlen; prodlen = n1len+n2len+1; *prod = bc_new_num (prodlen, 0); n1end = (char *) (n1->n_value + n1len - 1); n2end = (char *) (n2->n_value + n2len - 1); pvptr = (char *) ((*prod)->n_value + prodlen - 1); sum = 0; /* Here is the loop... */ for (indx = 0; indx < prodlen-1; indx++) { n1ptr = (char *) (n1end - MAX(0, indx-n2len+1)); n2ptr = (char *) (n2end - MIN(indx, n2len-1)); while ((n1ptr >= n1->n_value) && (n2ptr <= n2end)) sum += *n1ptr-- * *n2ptr++; *pvptr-- = sum % BASE; sum = sum / BASE; } *pvptr = sum; } /* A special adder/subtractor for the recursive divide and conquer multiply algorithm. Note: if sub is called, accum must be larger that what is being subtracted. Also, accum and val must have n_scale = 0. (e.g. they must look like integers. *) */ static void _bc_shift_addsub (bc_num accum, bc_num val, int shift, int sub) { signed char *accp, *valp; int count, carry; count = val->n_len; if (val->n_value[0] == 0) count--; assert (accum->n_len+accum->n_scale >= shift+count); /* Set up pointers and others */ accp = (signed char *)(accum->n_value + accum->n_len + accum->n_scale - shift - 1); valp = (signed char *)(val->n_value + val->n_len - 1); carry = 0; if (sub) { /* Subtraction, carry is really borrow. */ while (count--) { *accp -= *valp-- + carry; if (*accp < 0) { carry = 1; *accp-- += BASE; } else { carry = 0; accp--; } } while (carry) { *accp -= carry; if (*accp < 0) *accp-- += BASE; else carry = 0; } } else { /* Addition */ while (count--) { *accp += *valp-- + carry; if (*accp > (BASE-1)) { carry = 1; *accp-- -= BASE; } else { carry = 0; accp--; } } while (carry) { *accp += carry; if (*accp > (BASE-1)) *accp-- -= BASE; else carry = 0; } } } /* Recursive divide and conquer multiply algorithm. Based on Let u = u0 + u1*(b^n) Let v = v0 + v1*(b^n) Then uv = (B^2n+B^n)*u1*v1 + B^n*(u1-u0)*(v0-v1) + (B^n+1)*u0*v0 B is the base of storage, number of digits in u1,u0 close to equal. */ static void _bc_rec_mul (bc_num u, int ulen, bc_num v, int vlen, bc_num *prod, int full_scale) { bc_num u0, u1, v0, v1; int u0len, v0len; bc_num m1, m2, m3, d1, d2; int n, prodlen, m1zero; int d1len, d2len; /* Base case? */ if ((ulen+vlen) < mul_base_digits || ulen < MUL_SMALL_DIGITS || vlen < MUL_SMALL_DIGITS ) { _bc_simp_mul (u, ulen, v, vlen, prod, full_scale); return; } /* Calculate n -- the u and v split point in digits. */ n = (MAX(ulen, vlen)+1) / 2; /* Split u and v. */ if (ulen < n) { u1 = bc_copy_num (_zero_); u0 = new_sub_num (ulen,0, u->n_value); } else { u1 = new_sub_num (ulen-n, 0, u->n_value); u0 = new_sub_num (n, 0, u->n_value+ulen-n); } if (vlen < n) { v1 = bc_copy_num (_zero_); v0 = new_sub_num (vlen,0, v->n_value); } else { v1 = new_sub_num (vlen-n, 0, v->n_value); v0 = new_sub_num (n, 0, v->n_value+vlen-n); } _bc_rm_leading_zeros (u1); _bc_rm_leading_zeros (u0); u0len = u0->n_len; _bc_rm_leading_zeros (v1); _bc_rm_leading_zeros (v0); v0len = v0->n_len; m1zero = bc_is_zero(u1) || bc_is_zero(v1); /* Calculate sub results ... */ bc_init_num(&d1); bc_init_num(&d2); bc_sub (u1, u0, &d1, 0); d1len = d1->n_len; bc_sub (v0, v1, &d2, 0); d2len = d2->n_len; /* Do recursive multiplies and shifted adds. */ if (m1zero) m1 = bc_copy_num (_zero_); else _bc_rec_mul (u1, u1->n_len, v1, v1->n_len, &m1, 0); if (bc_is_zero(d1) || bc_is_zero(d2)) m2 = bc_copy_num (_zero_); else _bc_rec_mul (d1, d1len, d2, d2len, &m2, 0); if (bc_is_zero(u0) || bc_is_zero(v0)) m3 = bc_copy_num (_zero_); else _bc_rec_mul (u0, u0->n_len, v0, v0->n_len, &m3, 0); /* Initialize product */ prodlen = ulen+vlen+1; *prod = bc_new_num(prodlen, 0); if (!m1zero) { _bc_shift_addsub (*prod, m1, 2*n, 0); _bc_shift_addsub (*prod, m1, n, 0); } _bc_shift_addsub (*prod, m3, n, 0); _bc_shift_addsub (*prod, m3, 0, 0); _bc_shift_addsub (*prod, m2, n, d1->n_sign != d2->n_sign); /* Now clean up! */ bc_free_num (&u1); bc_free_num (&u0); bc_free_num (&v1); bc_free_num (&m1); bc_free_num (&v0); bc_free_num (&m2); bc_free_num (&m3); bc_free_num (&d1); bc_free_num (&d2); } /* The multiply routine. N2 times N1 is put int PROD with the scale of the result being MIN(N2 scale+N1 scale, MAX (SCALE, N2 scale, N1 scale)). */ void bc_multiply (n1, n2, prod, scale) bc_num n1, n2, *prod; int scale; { bc_num pval; int len1, len2; int full_scale, prod_scale; /* Initialize things. */ len1 = n1->n_len + n1->n_scale; len2 = n2->n_len + n2->n_scale; full_scale = n1->n_scale + n2->n_scale; prod_scale = MIN(full_scale,MAX(scale,MAX(n1->n_scale,n2->n_scale))); /* Do the multiply */ _bc_rec_mul (n1, len1, n2, len2, &pval, full_scale); /* Assign to prod and clean up the number. */ pval->n_sign = ( n1->n_sign == n2->n_sign ? PLUS : MINUS ); pval->n_value = pval->n_ptr; pval->n_len = len2 + len1 + 1 - full_scale; pval->n_scale = prod_scale; _bc_rm_leading_zeros (pval); if (bc_is_zero (pval)) pval->n_sign = PLUS; bc_free_num (prod); *prod = pval; } php-4.2.3/ext/bcmath/libbcmath/src/rmzero.c0100644000175200000240000000341107207025162017375 0ustar zeevstaff/* rmzero.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* For many things, we may have leading zeros in a number NUM. _bc_rm_leading_zeros just moves the data "value" pointer to the correct place and adjusts the length. */ void _bc_rm_leading_zeros (num) bc_num num; { /* We can move n_value to point to the first non zero digit! */ while (*num->n_value == 0 && num->n_len > 1) { num->n_value++; num->n_len--; } } php-4.2.3/ext/bcmath/libbcmath/src/rt.c0100644000175200000240000000346607207025162016516 0ustar zeevstaff/* rt.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" void bc_rt_warn (char *mesg ,...) { va_list args; char error_mesg [255]; va_start (args, mesg); vsprintf (error_mesg, mesg, args); va_end (args); fprintf (stderr, "bc math warning: %s\n", error_mesg); } void bc_rt_error (char *mesg ,...) { va_list args; char error_mesg [255]; va_start (args, mesg); vsprintf (error_mesg, mesg, args); va_end (args); fprintf (stderr, "bc math error: %s\n", error_mesg); } php-4.2.3/ext/bcmath/libbcmath/src/sqrt.c0100644000175200000240000000661307207025162017057 0ustar zeevstaff/* sqrt.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Take the square root NUM and return it in NUM with SCALE digits after the decimal place. */ int bc_sqrt (num, scale) bc_num *num; int scale; { int rscale, cmp_res, done; int cscale; bc_num guess, guess1, point5, diff; /* Initial checks. */ cmp_res = bc_compare (*num, _zero_); if (cmp_res < 0) return 0; /* error */ else { if (cmp_res == 0) { bc_free_num (num); *num = bc_copy_num (_zero_); return 1; } } cmp_res = bc_compare (*num, _one_); if (cmp_res == 0) { bc_free_num (num); *num = bc_copy_num (_one_); return 1; } /* Initialize the variables. */ rscale = MAX (scale, (*num)->n_scale); bc_init_num(&guess); bc_init_num(&guess1); bc_init_num(&diff); point5 = bc_new_num (1,1); point5->n_value[1] = 5; /* Calculate the initial guess. */ if (cmp_res < 0) { /* The number is between 0 and 1. Guess should start at 1. */ guess = bc_copy_num (_one_); cscale = (*num)->n_scale; } else { /* The number is greater than 1. Guess should start at 10^(exp/2). */ bc_int2num (&guess,10); bc_int2num (&guess1,(*num)->n_len); bc_multiply (guess1, point5, &guess1, 0); guess1->n_scale = 0; bc_raise (guess, guess1, &guess, 0); bc_free_num (&guess1); cscale = 3; } /* Find the square root using Newton's algorithm. */ done = FALSE; while (!done) { bc_free_num (&guess1); guess1 = bc_copy_num (guess); bc_divide (*num, guess, &guess, cscale); bc_add (guess, guess1, &guess, 0); bc_multiply (guess, point5, &guess, cscale); bc_sub (guess, guess1, &diff, cscale+1); if (bc_is_near_zero (diff, cscale)) { if (cscale < rscale+1) cscale = MIN (cscale*3, rscale+1); else done = TRUE; } } /* Assign the number and clean up. */ bc_free_num (num); bc_divide (guess,_one_,num,rscale); bc_free_num (&guess); bc_free_num (&guess1); bc_free_num (&point5); bc_free_num (&diff); return 1; } php-4.2.3/ext/bcmath/libbcmath/src/str2num.c0100644000175200000240000000562507207025162017502 0ustar zeevstaff/* str2num.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Convert strings to bc numbers. Base 10 only.*/ void bc_str2num (num, str, scale) bc_num *num; char *str; int scale; { int digits, strscale; char *ptr, *nptr; char zero_int; /* Prepare num. */ bc_free_num (num); /* Check for valid number and count digits. */ ptr = str; digits = 0; strscale = 0; zero_int = FALSE; if ( (*ptr == '+') || (*ptr == '-')) ptr++; /* Sign */ while (*ptr == '0') ptr++; /* Skip leading zeros. */ while (isdigit((int)*ptr)) ptr++, digits++; /* digits */ if (*ptr == '.') ptr++; /* decimal point */ while (isdigit((int)*ptr)) ptr++, strscale++; /* digits */ if ((*ptr != '\0') || (digits+strscale == 0)) { *num = bc_copy_num (_zero_); return; } /* Adjust numbers and allocate storage and initialize fields. */ strscale = MIN(strscale, scale); if (digits == 0) { zero_int = TRUE; digits = 1; } *num = bc_new_num (digits, strscale); /* Build the whole number. */ ptr = str; if (*ptr == '-') { (*num)->n_sign = MINUS; ptr++; } else { (*num)->n_sign = PLUS; if (*ptr == '+') ptr++; } while (*ptr == '0') ptr++; /* Skip leading zeros. */ nptr = (*num)->n_value; if (zero_int) { *nptr++ = 0; digits = 0; } for (;digits > 0; digits--) *nptr++ = CH_VAL(*ptr++); /* Build the fractional part. */ if (strscale > 0) { ptr++; /* skip the decimal point! */ for (;strscale > 0; strscale--) *nptr++ = CH_VAL(*ptr++); } } php-4.2.3/ext/bcmath/libbcmath/src/sub.c0100644000175200000240000000510407207025162016651 0ustar zeevstaff/* sub.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* Here is the full subtract routine that takes care of negative numbers. N2 is subtracted from N1 and the result placed in RESULT. SCALE_MIN is the minimum scale for the result. */ void bc_sub (n1, n2, result, scale_min) bc_num n1, n2, *result; int scale_min; { bc_num diff = NULL; int cmp_res; int res_scale; if (n1->n_sign != n2->n_sign) { diff = _bc_do_add (n1, n2, scale_min); diff->n_sign = n1->n_sign; } else { /* subtraction must be done. */ /* Compare magnitudes. */ cmp_res = _bc_do_compare (n1, n2, FALSE, FALSE); switch (cmp_res) { case -1: /* n1 is less than n2, subtract n1 from n2. */ diff = _bc_do_sub (n2, n1, scale_min); diff->n_sign = (n2->n_sign == PLUS ? MINUS : PLUS); break; case 0: /* They are equal! return zero! */ res_scale = MAX (scale_min, MAX(n1->n_scale, n2->n_scale)); diff = bc_new_num (1, res_scale); memset (diff->n_value, 0, res_scale+1); break; case 1: /* n2 is less than n1, subtract n2 from n1. */ diff = _bc_do_sub (n1, n2, scale_min); diff->n_sign = n1->n_sign; break; } } /* Clean up and return. */ bc_free_num (result); *result = diff; } php-4.2.3/ext/bcmath/libbcmath/src/zero.c0100644000175200000240000000342707207025162017045 0ustar zeevstaff/* zero.c: bcmath library file. */ /* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. Copyright (C) 2000 Philip A. Nelson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. (COPYING.LIB) You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to: The Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA. You may contact the author by: e-mail: philnelson@acm.org us-mail: Philip A. Nelson Computer Science Department, 9062 Western Washington University Bellingham, WA 98226-9062 *************************************************************************/ #include #include #include #include #include #include #include "bcmath.h" #include "private.h" /* In some places we need to check if the number NUM is zero. */ char bc_is_zero (num) bc_num num; { int count; char *nptr; /* Quick check. */ if (num == _zero_) return TRUE; /* Initialize */ count = num->n_len + num->n_scale; nptr = num->n_value; /* The check */ while ((count > 0) && (*nptr++ == 0)) count--; if (count != 0) return FALSE; else return TRUE; } php-4.2.3/ext/bcmath/libbcmath/AUTHORS0100644000175200000240000000007107207025162016173 0ustar zeevstaffPhil Nelson wrote bcmath library. php-4.2.3/ext/bcmath/libbcmath/COPYING.LIB0100644000175200000240000006364407207025162016602 0ustar zeevstaff GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. ^L Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. ^L GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. ^L Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. ^L 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. ^L 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. ^L 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. ^L 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS ^L How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 2025 Ty Coon, President of Vice That's all there is to it! php-4.2.3/ext/bcmath/libbcmath/ChangeLog0100644000175200000240000000044707207025162016704 0ustar zeevstaffWed Jun 7 09:39:02 2000 Phil Nelson * configure.in and many others: version number now at 0.2. Many other changes/additions for getting a distribution to work. 2025-05-21 Phil Nelson * Initial setup of bcmath library., calling it version 0.1. php-4.2.3/ext/bcmath/libbcmath/FAQ0100644000175200000240000000160607207025162015462 0ustar zeevstaffBCMATH FAQ: 1) Why BCMATH? The math routines of GNU bc become more generally useful in a library form. By separating the BCMATH library from GNU bc, GNU bc can be under the GPL and BCMATH can be under the LGPL. 2) Why BCMATH when GMP exists? GMP has "integers" (no digits after a decimal), "rational numbers" (stored as 2 integers) and "floats". None of these will correctly represent a POSIX BC number. Floats are the closest, but will not behave correctly for many computations. For example, BC numbers have a "scale" that represent the number of digits to represent after the decimal point. The multiplying two of these numbers requires one to calculate an exact number of digits after the decimal point regardless of the number of digits in the integer part. GMP floats have a "fixed, but arbitrary" mantissa and so multiplying two floats will end up dropping digits BC must calculate. php-4.2.3/ext/bcmath/libbcmath/INSTALL0100644000175200000240000000031007207025162016150 0ustar zeevstaffCurrently, only libbcmath.a is built. To build and install it, do configure make make install Typical configure parameters are available. (e.g. PREFIX) Bugs and comments to philnelson@acm.org. php-4.2.3/ext/bcmath/libbcmath/Makefile.am0100644000175200000240000000044407207025162017163 0ustar zeevstaff## Process this file with automake to produce Makefile.in SUBDIRS= src doc MAINTAINERCLEANFILES = aclocal.m4 config.h.in configure Makefile.in \ stamp-h.in *~ dist-hook: cp $(srcdir)/doc/bcmath.1 $(distdir)/doc cp $(srcdir)/src/private.h $(distdir)/src cp $(srcdir)/FAQ $(distdir) php-4.2.3/ext/bcmath/libbcmath/Makefile.in0100644000175200000240000000035307210154411017165 0ustar zeevstaff LTLIBRARY_NAME = libbcmath.la LTLIBRARY_DEPENDENCIES = src/libbcmath.la LTLIBRARY_LIBADD = $(LTLIBRARY_DEPENDENCIES) LTLIBRARY_SHARED_LIBADD = $(LTLIBRARY_LIBADD) SUBDIRS = src include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/bcmath/libbcmath/NEWS0100644000175200000240000000007707207025162015630 0ustar zeevstaffNEWS for bcmath library: May 2000: The library is created. php-4.2.3/ext/bcmath/libbcmath/README0100644000175200000240000000066207207025162016011 0ustar zeevstaffThis is bcmath, a library of arbitrary precision math routines. These routines, in a different form, are the routines that to the arbitrary precision calculations for GNU bc and GNU dc. This library is provided to make these routines useful in a larger context with less restrictions on the use of them. These routines do not duplicate functionality of the GNU gmp library. gmp is similar, but the actual computation is different. php-4.2.3/ext/bcmath/libbcmath/acconfig.h0100644000175200000240000000025207207025162017046 0ustar zeevstaff/* PACKAGE name */ #undef PACKAGE /* Package VERSION number */ #undef VERSION /* Define to `size_t' if and don't define. */ #undef ptrdiff_t php-4.2.3/ext/bcmath/libbcmath/aclocal.m40100644000175200000240000001045407207025162016771 0ustar zeevstaffdnl aclocal.m4 generated automatically by aclocal 1.4 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. # Do all the work for Automake. This macro actually does too much -- # some checks are only needed if your package does certain things. # But this isn't really a big deal. # serial 1 dnl Usage: dnl AM_INIT_AUTOMAKE(package,version, [no-define]) AC_DEFUN(AM_INIT_AUTOMAKE, [AC_REQUIRE([AC_PROG_INSTALL]) PACKAGE=[$1] AC_SUBST(PACKAGE) VERSION=[$2] AC_SUBST(VERSION) dnl test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi ifelse([$3],, AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) AC_REQUIRE([AM_SANITY_CHECK]) AC_REQUIRE([AC_ARG_PROGRAM]) dnl FIXME This is truly gross. missing_dir=`cd $ac_aux_dir && pwd` AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) AC_REQUIRE([AC_PROG_MAKE_SET])]) # # Check to make sure that the build environment is sane. # AC_DEFUN(AM_SANITY_CHECK, [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "[$]*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "[$]*" != "X $srcdir/configure conftestfile" \ && test "[$]*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "[$]2" = conftestfile ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi rm -f conftest* AC_MSG_RESULT(yes)]) dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) dnl The program must properly implement --version. AC_DEFUN(AM_MISSING_PROG, [AC_MSG_CHECKING(for working $2) # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if ($2 --version) < /dev/null > /dev/null 2>&1; then $1=$2 AC_MSG_RESULT(found) else $1="$3/missing $2" AC_MSG_RESULT(missing) fi AC_SUBST($1)]) # Like AC_CONFIG_HEADER, but automatically create stamp file. AC_DEFUN(AM_CONFIG_HEADER, [AC_PREREQ([2.12]) AC_CONFIG_HEADER([$1]) dnl When config.status generates a header, we must update the stamp-h file. dnl This file resides in the same directory as the config header dnl that is generated. We must strip everything past the first ":", dnl and everything past the last "/". AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, <>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, <>; do case " <<$>>CONFIG_HEADERS " in *" <<$>>am_file "*<<)>> echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx ;; esac am_indx=`expr "<<$>>am_indx" + 1` done<<>>dnl>>) changequote([,]))]) php-4.2.3/ext/bcmath/libbcmath/config.h.in0100644000175200000240000000174407207025162017156 0ustar zeevstaff/* config.h.in. Generated automatically from configure.in by autoheader. */ /* Define to empty if the keyword does not work. */ #undef const /* Define to `unsigned' if doesn't define. */ #undef size_t /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to `size_t' if and don't define. */ #undef ptrdiff_t /* Define if you have the header file. */ #undef HAVE_LIB_H /* Define if you have the header file. */ #undef HAVE_LIMITS_H /* Define if you have the header file. */ #undef HAVE_STDARG_H /* Define if you have the header file. */ #undef HAVE_STDDEF_H /* Define if you have the header file. */ #undef HAVE_STDLIB_H /* Define if you have the header file. */ #undef HAVE_STRING_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Version number of package */ #undef VERSION php-4.2.3/ext/bcmath/libbcmath/configure0100644000175200000240000016322307207025162017040 0ustar zeevstaff#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Defaults: ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.13" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=doc/bcmath.1 # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:556: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 echo "configure:609: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "$*" != "X $srcdir/configure conftestfile" \ && test "$*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { echo "configure: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" 1>&2; exit 1; } fi test "$2" = conftestfile ) then # Ok. : else { echo "configure: error: newly created file is older than distributed files! Check your system clock" 1>&2; exit 1; } fi rm -f conftest* echo "$ac_t""yes" 1>&6 if test "$program_transform_name" = s,x,x,; then program_transform_name= else # Double any \ or $. echo might interpret backslashes. cat <<\EOF_SED > conftestsed s,\\,\\\\,g; s,\$,$$,g EOF_SED program_transform_name="`echo $program_transform_name|sed -f conftestsed`" rm -f conftestsed fi test "$program_prefix" != NONE && program_transform_name="s,^,${program_prefix},; $program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" # sed with no file args requires a program. test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:666: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi PACKAGE="bcmath" VERSION="0.2" if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } fi cat >> confdefs.h <> confdefs.h <&6 echo "configure:712: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (aclocal --version) < /dev/null > /dev/null 2>&1; then ACLOCAL=aclocal echo "$ac_t""found" 1>&6 else ACLOCAL="$missing_dir/missing aclocal" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 echo "configure:725: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoconf --version) < /dev/null > /dev/null 2>&1; then AUTOCONF=autoconf echo "$ac_t""found" 1>&6 else AUTOCONF="$missing_dir/missing autoconf" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 echo "configure:738: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (automake --version) < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake echo "$ac_t""found" 1>&6 else AUTOMAKE="$missing_dir/missing automake" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 echo "configure:751: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoheader --version) < /dev/null > /dev/null 2>&1; then AUTOHEADER=autoheader echo "$ac_t""found" 1>&6 else AUTOHEADER="$missing_dir/missing autoheader" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 echo "configure:764: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (makeinfo --version) < /dev/null > /dev/null 2>&1; then MAKEINFO=makeinfo echo "$ac_t""found" 1>&6 else MAKEINFO="$missing_dir/missing makeinfo" echo "$ac_t""missing" 1>&6 fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:784: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:814: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:865: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:897: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF #line 908 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:939: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:944: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:972: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:1016: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1071: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="ranlib" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" fi fi RANLIB="$ac_cv_prog_RANLIB" if test -n "$RANLIB"; then echo "$ac_t""$RANLIB" 1>&6 else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:1099: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:1127: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # This must be in double quotes, not single quotes, because CPP may get # substituted into the Makefile and "${CC-cc}" will confuse make. CPP="${CC-cc} -E" # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1148: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1182: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi rm -f conftest* fi rm -f conftest* ac_cv_prog_CPP="$CPP" fi CPP="$ac_cv_prog_CPP" else ac_cv_prog_CPP="$CPP" fi echo "$ac_t""$CPP" 1>&6 for ac_hdr in stdarg.h stddef.h stdlib.h string.h limits.h unistd.h lib.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:1210: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done echo $ac_n "checking for working const""... $ac_c" 1>&6 echo "configure:1247: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } ; return 0; } EOF if { (eval echo configure:1301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_const=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_c_const" 1>&6 if test $ac_cv_c_const = no; then cat >> confdefs.h <<\EOF #define const EOF fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:1322: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:1402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 echo "configure:1426: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking for ptrdiff_t""... $ac_c" 1>&6 echo "configure:1459: checking for ptrdiff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ptrdiff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])ptrdiff_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_ptrdiff_t=yes else rm -rf conftest* ac_cv_type_ptrdiff_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_ptrdiff_t" 1>&6 if test $ac_cv_type_ptrdiff_t = no; then cat >> confdefs.h <<\EOF #define ptrdiff_t size_t EOF fi trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 DEFS=-DHAVE_CONFIG_H # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "Makefile src/Makefile doc/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@PACKAGE@%$PACKAGE%g s%@VERSION@%$VERSION%g s%@ACLOCAL@%$ACLOCAL%g s%@AUTOCONF@%$AUTOCONF%g s%@AUTOMAKE@%$AUTOMAKE%g s%@AUTOHEADER@%$AUTOHEADER%g s%@MAKEINFO@%$MAKEINFO%g s%@SET_MAKE@%$SET_MAKE%g s%@CC@%$CC%g s%@RANLIB@%$RANLIB%g s%@CPP@%$CPP%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ac_dC='\3' ac_dD='%g' # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='\([ ]\)%\1#\2define\3' ac_uC=' ' ac_uD='\4%g' # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_eB='$%\1#\2define\3' ac_eC=' ' ac_eD='%g' if test "${CONFIG_HEADERS+set}" != set; then EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF fi for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac echo creating $ac_file rm -f conftest.frag conftest.in conftest.out ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` cat $ac_file_inputs > conftest.in EOF # Transform confdefs.h into a sed script conftest.vals that substitutes # the proper values into config.h.in to produce config.h. And first: # Protect against being on the right side of a sed subst in config.status. # Protect against being in an unquoted here document in config.status. rm -f conftest.vals cat > conftest.hdr <<\EOF s/[\\&%]/\\&/g s%[\\$`]%\\&%g s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp s%ac_d%ac_u%gp s%ac_u%ac_e%gp EOF sed -n -f conftest.hdr confdefs.h > conftest.vals rm -f conftest.hdr # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >> conftest.vals <<\EOF s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% EOF # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail while : do ac_lines=`grep -c . conftest.vals` # grep -c gives empty output for an empty file on some AIX systems. if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi # Write a limited-size here document to conftest.frag. echo ' cat > conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS echo 'CEOF sed -f conftest.frag conftest.in > conftest.out rm -f conftest.in mv conftest.out conftest.in ' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals cat >> $CONFIG_STATUS <<\EOF rm -f conftest.frag conftest.h echo "/* $ac_file. Generated automatically by configure. */" > conftest.h cat conftest.in >> conftest.h rm -f conftest.in if cmp -s $ac_file conftest.h 2>/dev/null; then echo "$ac_file is unchanged" rm -f conftest.h else # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" fi rm -f $ac_file mv conftest.h $ac_file fi fi; done EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 php-4.2.3/ext/bcmath/libbcmath/configure.in0100644000175200000240000000061507207025162017440 0ustar zeevstaffdnl Process this file with autoconf to produce a configure script. AC_INIT(doc/bcmath.1) AM_INIT_AUTOMAKE("bcmath", "0.2") AM_CONFIG_HEADER(config.h) AC_PROG_CC AC_PROG_INSTALL AC_PROG_RANLIB AC_PROG_MAKE_SET AC_CHECK_HEADERS(stdarg.h stddef.h stdlib.h string.h limits.h unistd.h lib.h) AC_C_CONST AC_TYPE_SIZE_T AC_CHECK_TYPE(ptrdiff_t, size_t) AC_OUTPUT(Makefile src/Makefile doc/Makefile) php-4.2.3/ext/bcmath/libbcmath/install-sh0100644000175200000240000001124307207025162017127 0ustar zeevstaff#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" tranformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 php-4.2.3/ext/bcmath/libbcmath/missing0100644000175200000240000001103707207025162016523 0ustar zeevstaff#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997 Free Software Foundation, Inc. # Franc,ois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison touch file \`y.tab.c' makeinfo touch the output file yacc touch file \`y.tab.c'" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing - GNU libit 0.0" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if you modified \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if you modified \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if you modified \`acconfig.h' or \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch config.h.in ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print \ | sed 's/^\(.*\).am$/touch \1.in/' \ | sh ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if your modified any \`.y' file. For being effective, your modifications might require the \`Bison' package. Grab it from any GNU archive site." touch y.tab.c ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 php-4.2.3/ext/bcmath/libbcmath/mkinstalldirs0100644000175200000240000000133207207025162017727 0ustar zeevstaff#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 2025-05-16 # Last modified: 2025-03-25 # Public domain errstatus=0 for file in ${1+"$@"} ; do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d in ${1+"$@"} ; do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" 1>&2 mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$? fi if test ! -d "$pathcomp"; then errstatus=$lasterr fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here php-4.2.3/ext/bcmath/CREDITS0100644000175200000240000000002507206176560014225 0ustar zeevstaffBC Math Andi Gutmans php-4.2.3/ext/bcmath/Makefile.in0100644000175200000240000000047107210154411015241 0ustar zeevstaff LTLIBRARY_NAME = libbcmath.la LTLIBRARY_SOURCES = bcmath.c number.c LTLIBRARY_SHARED_NAME = bcmath.la LTLIBRARY_DEPENDENCIES = libbcmath/libbcmath.la LTLIBRARY_LIBADD = $(LTLIBRARY_DEPENDENCIES) LTLIBRARY_SHARED_LIBADD = $(LTLIBRARY_LIBADD) SUBDIRS = libbcmath include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/bcmath/bcmath.c0100644000175200000240000003077707527621646014636 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Andi Gutmans | +----------------------------------------------------------------------+ */ /* $Id: bcmath.c,v 1.36.2.1 2025/08/18 04:33:42 kalowsky Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if WITH_BCMATH #include "ext/standard/info.h" #include "php_bcmath.h" #include "libbcmath/src/bcmath.h" function_entry bcmath_functions[] = { PHP_FE(bcadd, NULL) PHP_FE(bcsub, NULL) PHP_FE(bcmul, NULL) PHP_FE(bcdiv, NULL) PHP_FE(bcmod, NULL) PHP_FE(bcpow, NULL) PHP_FE(bcsqrt, NULL) PHP_FE(bcscale, NULL) PHP_FE(bccomp, NULL) {NULL, NULL, NULL} }; zend_module_entry bcmath_module_entry = { STANDARD_MODULE_HEADER, "bcmath", bcmath_functions, PHP_MINIT(bcmath), PHP_MSHUTDOWN(bcmath), PHP_RINIT(bcmath), NULL, PHP_MINFO(bcmath), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_BCMATH ZEND_GET_MODULE(bcmath) #endif #ifndef THREAD_SAFE static long bc_precision; #endif /* Storage used for special numbers. */ bc_num _zero_; bc_num _one_; bc_num _two_; /* Make a copy of a number! Just increments the reference count! */ bc_num copy_num (bc_num num) { num->n_refs++; return num; } /* Initialize a number NUM by making it a copy of zero. */ void init_num (bc_num *num) { *num = copy_num (_zero_); } PHP_MINIT_FUNCTION(bcmath) { extern bc_num _zero_; extern bc_num _one_; extern bc_num _two_; _zero_ = bc_new_num (1, 0); _one_ = bc_new_num (1, 0); _one_->n_value[0] = 1; _two_ = bc_new_num (1, 0); _two_->n_value[0] = 2; persist_alloc(_zero_); persist_alloc(_one_); persist_alloc(_two_); persist_alloc(_zero_->n_ptr); persist_alloc(_one_->n_ptr); persist_alloc(_two_->n_ptr); return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(bcmath) { bc_free_num(&_zero_); bc_free_num(&_one_); bc_free_num(&_two_); return SUCCESS; } PHP_RINIT_FUNCTION(bcmath) { if (cfg_get_long("bcmath.scale", &bc_precision)==FAILURE) { bc_precision=0; } return SUCCESS; } PHP_MINFO_FUNCTION(bcmath) { php_info_print_table_start(); php_info_print_table_row(2, "BCMath support", "enabled"); php_info_print_table_end(); } /* {{{ proto string bcadd(string left_operand, string right_operand [, int scale]) Returns the sum of two arbitrary precision numbers */ PHP_FUNCTION(bcadd) { pval **left, **right, **scale_param; bc_num first, second, result; int scale=bc_precision; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &left, &right) == FAILURE) { WRONG_PARAM_COUNT; } break; case 3: if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(scale_param); scale = (int) Z_LVAL_PP(scale_param); break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(left); convert_to_string_ex(right); bc_init_num(&first); bc_init_num(&second); bc_init_num(&result); bc_str2num(&first, Z_STRVAL_PP(left), scale); bc_str2num(&second, Z_STRVAL_PP(right), scale); bc_add (first, second, &result, scale); Z_STRVAL_P(return_value) = bc_num2str(result); Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; bc_free_num(&first); bc_free_num(&second); bc_free_num(&result); return; } /* }}} */ /* {{{ proto string bcsub(string left_operand, string right_operand [, int scale]) Returns the difference between two arbitrary precision numbers */ PHP_FUNCTION(bcsub) { pval **left, **right, **scale_param; bc_num first, second, result; int scale=bc_precision; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &left, &right) == FAILURE) { WRONG_PARAM_COUNT; } break; case 3: if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(scale_param); scale = (int) Z_LVAL_PP(scale_param); break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(left); convert_to_string_ex(right); bc_init_num(&first); bc_init_num(&second); bc_init_num(&result); bc_str2num(&first, Z_STRVAL_PP(left), scale); bc_str2num(&second, Z_STRVAL_PP(right), scale); bc_sub (first, second, &result, scale); Z_STRVAL_P(return_value) = bc_num2str(result); Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; bc_free_num(&first); bc_free_num(&second); bc_free_num(&result); return; } /* }}} */ /* {{{ proto string bcmul(string left_operand, string right_operand [, int scale]) Returns the multiplication of two arbitrary precision numbers */ PHP_FUNCTION(bcmul) { pval **left, **right, **scale_param; bc_num first, second, result; int scale=bc_precision; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &left, &right) == FAILURE) { WRONG_PARAM_COUNT; } break; case 3: if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(scale_param); scale = (int) Z_LVAL_PP(scale_param); break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(left); convert_to_string_ex(right); bc_init_num(&first); bc_init_num(&second); bc_init_num(&result); bc_str2num(&first, Z_STRVAL_PP(left), scale); bc_str2num(&second, Z_STRVAL_PP(right), scale); bc_multiply (first, second, &result, scale); Z_STRVAL_P(return_value) = bc_num2str(result); Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; bc_free_num(&first); bc_free_num(&second); bc_free_num(&result); return; } /* }}} */ /* {{{ proto string bcdiv(string left_operand, string right_operand [, int scale]) Returns the quotient of two arbitrary precision numbers (division) */ PHP_FUNCTION(bcdiv) { pval **left, **right, **scale_param; bc_num first, second, result; int scale=bc_precision; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &left, &right) == FAILURE) { WRONG_PARAM_COUNT; } break; case 3: if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(scale_param); scale = (int) Z_LVAL_PP(scale_param); break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(left); convert_to_string_ex(right); bc_init_num(&first); bc_init_num(&second); bc_init_num(&result); bc_str2num(&first, Z_STRVAL_PP(left), scale); bc_str2num(&second, Z_STRVAL_PP(right), scale); switch (bc_divide (first, second, &result, scale)) { case 0: /* OK */ Z_STRVAL_P(return_value) = bc_num2str(result); Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; break; case -1: /* division by zero */ php_error(E_WARNING, "Division by zero"); break; } bc_free_num(&first); bc_free_num(&second); bc_free_num(&result); return; } /* }}} */ /* {{{ proto string bcmod(string left_operand, string right_operand) Returns the modulus of the two arbitrary precision operands */ PHP_FUNCTION(bcmod) { pval **left, **right; bc_num first, second, result; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &left, &right) == FAILURE) { WRONG_PARAM_COUNT; } break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(left); convert_to_string_ex(right); bc_init_num(&first); bc_init_num(&second); bc_init_num(&result); bc_str2num(&first, Z_STRVAL_PP(left), 0); bc_str2num(&second, Z_STRVAL_PP(right), 0); switch (bc_modulo(first, second, &result, 0)) { case 0: Z_STRVAL_P(return_value) = bc_num2str(result); Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; break; case -1: php_error(E_WARNING, "Division by zero"); break; } bc_free_num(&first); bc_free_num(&second); bc_free_num(&result); return; } /* }}} */ /* {{{ proto string bcpow(string x, string y [, int scale]) Returns the value of an arbitrary precision number raised to the power of another */ PHP_FUNCTION(bcpow) { pval **left, **right, **scale_param; bc_num first, second, result; int scale=bc_precision; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &left, &right) == FAILURE) { WRONG_PARAM_COUNT; } break; case 3: if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(scale_param); scale = (int) Z_LVAL_PP(scale_param); break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(left); convert_to_string_ex(right); bc_init_num(&first); bc_init_num(&second); bc_init_num(&result); bc_str2num(&first, Z_STRVAL_PP(left), scale); bc_str2num(&second, Z_STRVAL_PP(right), scale); bc_raise (first, second, &result, scale); Z_STRVAL_P(return_value) = bc_num2str(result); Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; bc_free_num(&first); bc_free_num(&second); bc_free_num(&result); return; } /* }}} */ /* {{{ proto string bcsqrt(string operand [, int scale]) Returns the square root of an arbitray precision number */ PHP_FUNCTION(bcsqrt) { pval **left, **scale_param; bc_num result; int scale=bc_precision; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &left)== FAILURE) { WRONG_PARAM_COUNT; } break; case 2: if (zend_get_parameters_ex(2, &left, &scale_param) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(scale_param); scale = (int) Z_LVAL_PP(scale_param); break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(left); bc_init_num(&result); bc_str2num(&result, Z_STRVAL_PP(left), scale); if (bc_sqrt (&result, scale) != 0) { Z_STRVAL_P(return_value) = bc_num2str(result); Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; } else { php_error(E_WARNING, "Square root of negative number"); } bc_free_num(&result); return; } /* }}} */ /* {{{ proto string bccomp(string left_operand, string right_operand [, int scale]) Compares two arbitrary precision numbers */ PHP_FUNCTION(bccomp) { pval **left, **right, **scale_param; bc_num first, second; int scale=bc_precision; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &left, &right) == FAILURE) { WRONG_PARAM_COUNT; } break; case 3: if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(scale_param); scale = (int) Z_LVAL_PP(scale_param); break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(left); convert_to_string_ex(right); bc_init_num(&first); bc_init_num(&second); bc_str2num(&first, Z_STRVAL_PP(left), scale); bc_str2num(&second, Z_STRVAL_PP(right), scale); Z_LVAL_P(return_value) = bc_compare(first, second); Z_TYPE_P(return_value) = IS_LONG; bc_free_num(&first); bc_free_num(&second); return; } /* }}} */ /* {{{ proto string bcscale(int scale) Sets default scale parameter for all bc math functions */ PHP_FUNCTION(bcscale) { pval **new_scale; if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &new_scale)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(new_scale); bc_precision = Z_LVAL_PP(new_scale); RETURN_TRUE; } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/bcmath/config.m40100644000175200000240000000104207401753416014712 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.13 2025/11/30 18:59:26 sniper Exp $ dnl PHP_ARG_ENABLE(bcmath, whether to enable bc style precision math functions, [ --enable-bcmath Enable bc style precision math functions.]) if test "$PHP_BCMATH" != "no"; then AC_DEFINE(WITH_BCMATH, 1, [Whether you have bcmath]) PHP_EXTENSION(bcmath, $ext_shared) PHP_FAST_OUTPUT($ext_builddir/libbcmath/Makefile $ext_builddir/libbcmath/src/Makefile) LIB_BUILD($ext_builddir/libbcmath,$ext_shared,yes) LIB_BUILD($ext_builddir/libbcmath/src,$ext_shared,yes) fi php-4.2.3/ext/bcmath/php_bcmath.h0100644000175200000240000000333207437364606015475 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Andi Gutmans | +----------------------------------------------------------------------+ */ /* $Id: php_bcmath.h,v 1.10 2025/02/28 08:25:42 sebastian Exp $ */ #ifndef PHP_BCMATH_H #define PHP_BCMATH_H #if WITH_BCMATH extern zend_module_entry bcmath_module_entry; #define phpext_bcmath_ptr &bcmath_module_entry PHP_MINIT_FUNCTION(bcmath); PHP_MSHUTDOWN_FUNCTION(bcmath); PHP_RINIT_FUNCTION(bcmath); PHP_MINFO_FUNCTION(bcmath); PHP_FUNCTION(bcadd); PHP_FUNCTION(bcsub); PHP_FUNCTION(bcmul); PHP_FUNCTION(bcdiv); PHP_FUNCTION(bcmod); PHP_FUNCTION(bcpow); PHP_FUNCTION(bcsqrt); PHP_FUNCTION(bccomp); PHP_FUNCTION(bcscale); #else #define phpext_bcmath_ptr NULL #endif #endif /* PHP_BCMATH_H */ php-4.2.3/ext/bcmath/setup.stub0100644000175200000240000000040706707457400015250 0ustar zeevstaff# $Source: /repository/php4/ext/bcmath/Attic/setup.stub,v $ # $Id: setup.stub,v 1.1 2025/04/21 23:28:00 ssb Exp $ define_option enable-bcmath 'Enable bc style precision math functions' yesno \ yes \ ' Enables bc style arbitrary precision math functions.' php-4.2.3/ext/bz2/0040755000175200000240000000000007535765574012470 5ustar zeevstaffphp-4.2.3/ext/bz2/tests/0040755000175200000240000000000007535765574013632 5ustar zeevstaffphp-4.2.3/ext/bz2/tests/with_files.phpt0100644000175200000240000000074107453056026016643 0ustar zeevstaff--TEST-- BZ2 with files --SKIPIF-- --POST-- --GET-- --FILE-- --POST-- --GET-- --FILE-- | +----------------------------------------------------------------------+ */ /* $Id: bz2.c,v 1.35.2.2 2025/06/12 07:25:16 mfischer Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_bz2.h" #if HAVE_BZ2 /* PHP Includes */ #include "ext/standard/file.h" #include "ext/standard/info.h" /* for fileno() */ #include /* Bzip2 includes */ #include /* Internal error constants */ #define PHP_BZ_ERRNO 0 #define PHP_BZ_ERRSTR 1 #define PHP_BZ_ERRBOTH 2 /* Blocksize of the decompression buffer */ #define PHP_BZ_DECOMPRESS_SIZE 4096 function_entry bz2_functions[] = { PHP_FE(bzopen, NULL) PHP_FE(bzread, NULL) PHP_FE(bzwrite, NULL) PHP_FE(bzflush, NULL) PHP_FE(bzclose, NULL) PHP_FE(bzerrno, NULL) PHP_FE(bzerrstr, NULL) PHP_FE(bzerror, NULL) PHP_FE(bzcompress, NULL) PHP_FE(bzdecompress, NULL) {NULL, NULL, NULL} }; zend_module_entry bz2_module_entry = { STANDARD_MODULE_HEADER, "bz2", bz2_functions, PHP_MINIT(bz2), NULL, NULL, NULL, PHP_MINFO(bz2), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_BZ2 ZEND_GET_MODULE(bz2) #endif static int le_bz2; static void php_bz2_close(zend_rsrc_list_entry *rsrc TSRMLS_DC); static void php_bz2_error(INTERNAL_FUNCTION_PARAMETERS, int); PHP_MINIT_FUNCTION(bz2) { /* Register the resource, with destructor (arg 1) and text description (arg 3), the other arguments are just standard placeholders */ le_bz2 = zend_register_list_destructors_ex(php_bz2_close, NULL, "BZip2", module_number); return SUCCESS; } PHP_MINFO_FUNCTION(bz2) { php_info_print_table_start(); php_info_print_table_row(2, "BZip2 Support", "Enabled"); php_info_print_table_row(2, "BZip2 Version", (char *) BZ2_bzlibVersion()); php_info_print_table_end(); } /* {{{ proto resource bzopen(string|int file|fp, string mode) Opens a new BZip2 stream */ PHP_FUNCTION(bzopen) { zval **file, /* The file to open */ **mode; /* The mode to open the stream with */ BZFILE *bz; /* The compressed file stream */ FILE *fp; /* If filepointer is given, its placed in here */ char *path; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &file, &mode) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(mode); /* If it's not a resource its a string containing the filename to open */ if (Z_TYPE_PP(file) != IS_RESOURCE) { convert_to_string_ex(file); #ifdef VIRTUAL_DIR virtual_filepath(Z_STRVAL_PP(file), &path TSRMLS_CC); #else path = Z_STRVAL_PP(file); #endif bz = BZ2_bzopen(path, Z_STRVAL_PP(mode)); } /* If it is a resource, than its a 'FILE *' resource */ else { ZEND_FETCH_RESOURCE(fp, FILE *, file, -1, "File Handle", php_file_le_fopen()); bz = BZ2_bzdopen(fileno(fp), Z_STRVAL_PP(mode)); } if (bz == NULL) { php_error(E_WARNING, "bzopen(): Unable to open file"); RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, bz, le_bz2); } /* }}} */ /* {{{ proto string bzread(resource bz [, int len]) Reads len bytes from the BZip2 stream given by bz */ PHP_FUNCTION(bzread) { zval **bzp, /* BZip2 Resource Pointer */ **zlen; /* The (optional) length to read */ BZFILE *bz; /* BZip2 File pointer */ void *buf; /* Buffer to read data into */ int len = 1024, /* Length to read, passed to the BZ2_bzread function */ argc = ZEND_NUM_ARGS(); /* Argument count */ if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &bzp, &zlen) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(bz, BZFILE *, bzp, -1, "BZip2 File Handle", le_bz2); /* Optional second argument, the length to read, if not given, it defaults to 1024 bytes (why not? :) */ if (argc > 1) { convert_to_long_ex(zlen); len = Z_LVAL_PP(zlen); } /* Allocate the buffer and read data into it */ buf = emalloc(len + 1); BZ2_bzread(bz, buf, len); RETURN_STRINGL(buf, len, 0); } /* }}} */ /* {{{ proto int bzwrite(resource bz, string data [, int len]) Writes data to the BZip2 stream given by bz */ PHP_FUNCTION(bzwrite) { zval **bzp, /* Bzip2 Resource Pointer */ **data, /* The data to write */ **zlen; /* The (optional) length of the data to write */ BZFILE *bz; /* BZip2 File pointer */ int error, /* Error container */ len, /* Length to read, passed to the BZ2_bzwrite function */ argc = ZEND_NUM_ARGS(); /* Argument count */ if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &bzp, &data, &zlen) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(data); ZEND_FETCH_RESOURCE(bz, BZFILE *, bzp, -1, "BZip2 File Handle", le_bz2); /* If the length of the data is given, use that, otherwise, just use the data's string length */ if (argc > 2) { convert_to_long_ex(zlen); len = Z_LVAL_PP(zlen); } else { len = Z_STRLEN_PP(data); } /* Write the data and return the error */ error = BZ2_bzwrite(bz, (void *) Z_STRVAL_PP(data), len); RETURN_LONG(error); } /* }}} */ /* {{{ proto int bzflush(resource bz) Flushes a BZip2 stream */ PHP_FUNCTION(bzflush) { zval **bzp; /* BZip2 Resource Pointer */ BZFILE *bz; /* BZip2 File pointer */ int error; /* Error container */ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &bzp) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(bz, BZFILE *, bzp, -1, "BZip2 File Handle", le_bz2); error = BZ2_bzflush(bz); RETURN_LONG(error); } /* }}} */ /* {{{ proto int bzclose(resource bz) Closes a BZip2 stream */ PHP_FUNCTION(bzclose) { zval **bzp=NULL; /* BZip2 Resource Pointer */ BZFILE *bz; /* BZip2 File pointer */ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &bzp) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(bz, BZFILE *, bzp, -1, "BZip2 File Handle", le_bz2); zend_list_delete(Z_RESVAL_PP(bzp)); } /* }}} */ /* {{{ proto int bzerrno(resource bz) Returns the error number */ PHP_FUNCTION(bzerrno) { php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRNO); } /* }}} */ /* {{{ proto string bzerrstr(resource bz) Returns the error string */ PHP_FUNCTION(bzerrstr) { php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRSTR); } /* }}} */ /* {{{ proto array bzerror(resource bz) Returns the error number and error string in an associative array */ PHP_FUNCTION(bzerror) { php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRBOTH); } /* }}} */ /* {{{ proto string bzcompress(string source [, int blocksize100k [, int workfactor]]) Compresses a string into BZip2 encoded data */ PHP_FUNCTION(bzcompress) { zval **source, /* Source data to compress */ **zblock_size, /* Optional block size to use */ **zwork_factor; /* Optional work factor to use */ char *dest = NULL; /* Destination to place the compressed data into */ int error, /* Error Container */ block_size = 4, /* Block size for compression algorithm */ work_factor = 0, /* Work factor for compression algorithm */ argc; /* Argument count */ unsigned int source_len, /* Length of the source data */ dest_len; /* Length of the destination buffer */ argc = ZEND_NUM_ARGS(); if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &source, &zblock_size, &zwork_factor) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(source); /* Assign them to easy to use variables, dest_len is initially the length of the data + .01 x length of data + 600 which is the largest size the results of the compression could possibly be, at least that's what the libbz2 docs say (thanks to jeremy@nirvani.net for pointing this out). */ source_len = Z_STRLEN_PP(source); dest_len = Z_STRLEN_PP(source) + (0.01 * Z_STRLEN_PP(source)) + 600; /* Allocate the destination buffer */ if (NULL == (dest = emalloc(dest_len + 1))) { RETURN_LONG(BZ_MEM_ERROR); } /* Handle the optional arguments */ if (argc > 1) { convert_to_long_ex(zblock_size); block_size = Z_LVAL_PP(zblock_size); } if (argc > 2) { convert_to_long_ex(zwork_factor); work_factor = Z_LVAL_PP(zwork_factor); } error = BZ2_bzBuffToBuffCompress(dest, &dest_len, Z_STRVAL_PP(source), source_len, block_size, 0, work_factor); if (error != BZ_OK) { efree(dest); RETURN_LONG(error); } else { /* Copy the buffer, we have perhaps allocate alot more than we need, so we erealloc() the buffer to the proper size */ dest = erealloc(dest, dest_len + 1); dest[dest_len] = 0; RETURN_STRINGL(dest, dest_len, 0); } } /* }}} */ /* {{{ proto string bzdecompress(string source [, int small]) Decompresses BZip2 compressed data */ PHP_FUNCTION(bzdecompress) { zval **source, /* Source data to decompress */ **zsmall; /* (Optional) user specified small */ char *dest; /* Destination buffer, initially allocated */ int error, /* Error container */ iter = 1, /* Iteration count for the compression loop */ size, /* Current size to realloc the dest buffer to */ dest_len = PHP_BZ_DECOMPRESS_SIZE, /* Size of the destination length */ small = 0, /* The actual small */ argc = ZEND_NUM_ARGS(); /* Argument count */ if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &source, &zsmall) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(source); /* optional small argument handling */ if (argc > 1) { convert_to_long_ex(zsmall); small = Z_LVAL_PP(zsmall); } /* Depending on the size of the source buffer, either allocate the length of the source buffer or the a default decompression size */ if (NULL == (dest = emalloc( PHP_BZ_DECOMPRESS_SIZE > Z_STRLEN_PP(source) ? PHP_BZ_DECOMPRESS_SIZE : Z_STRLEN_PP(source)))) { RETURN_LONG(BZ_MEM_ERROR); } /* (de)Compression Loop */ do { /* Handle the (re)allocation of the buffer */ size = dest_len * iter; if (iter > 1) { dest = erealloc(dest, size); } ++iter; /* Perform the decompression */ error = BZ2_bzBuffToBuffDecompress(dest, &size, Z_STRVAL_PP(source), Z_STRLEN_PP(source), small, 0); } while (error == BZ_OUTBUFF_FULL); if (error != BZ_OK) { efree(dest); RETURN_LONG(error); } else { /* we might have allocated a little to much, so erealloc the buffer down to size, before returning it */ dest = erealloc(dest, size + 1); dest[size] = 0; RETURN_STRINGL(dest, size, 0); } } /* }}} */ /* {{{ php_bz2_close() Closes a BZip2 file pointer */ static void php_bz2_close(zend_rsrc_list_entry *rsrc TSRMLS_DC) { BZFILE *bz = (BZFILE *) rsrc->ptr; /* The BZip2 File pointer */ BZ2_bzclose(bz); } /* }}} */ /* {{{ php_bz2_error() The central error handling interface, does the work for bzerrno, bzerrstr and bzerror */ static void php_bz2_error(INTERNAL_FUNCTION_PARAMETERS, int opt) { zval **bzp; /* BZip2 Resource Pointer */ BZFILE *bz; /* BZip2 File pointer */ const char *errstr; /* Error string */ int errnum; /* Error number */ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &bzp) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(bz, BZFILE *, bzp, -1, "BZip2 File pointer", le_bz2); /* Fetch the error information */ errstr = BZ2_bzerror(bz, &errnum); /* Determine what to return */ switch (opt) { case PHP_BZ_ERRNO: RETURN_LONG(errnum); break; case PHP_BZ_ERRSTR: RETURN_STRING((char*)errstr, 1); break; case PHP_BZ_ERRBOTH: array_init(return_value); add_assoc_long (return_value, "errno", errnum); add_assoc_string(return_value, "errstr", (char*)errstr, 1); break; } } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ php-4.2.3/ext/bz2/bz2.dsp0100644000175200000240000001065607174271411013657 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="bz2" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=bz2 - Win32 Debug_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "bz2.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "bz2.mak" CFG="bz2 - Win32 Debug_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "bz2 - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "bz2 - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "bz2 - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BZ2_EXPORTS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_BZ2" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_BZ2=1 /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x407 /d "NDEBUG" # ADD RSC /l 0x407 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts.lib libbz2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_bz2.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" !ELSEIF "$(CFG)" == "bz2 - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BZ2_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_BZ2" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_BZ2=1 /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x407 /d "_DEBUG" # ADD RSC /l 0x407 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 php4ts-debug.lib libbz2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_bz2.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "bz2 - Win32 Release_TS" # Name "bz2 - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\bz2.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_bz2.h # End Source File # End Group # End Target # End Project php-4.2.3/ext/bz2/config.m40100644000175200000240000000155507401753416014162 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.6 2025/11/30 18:59:26 sniper Exp $ dnl PHP_ARG_WITH(bz2, for BZip2 support, [ --with-bz2[=DIR] Include BZip2 support]) if test "$PHP_BZ2" != "no"; then if test -r $PHP_BZ2/include/bzlib.h; then BZIP_DIR=$PHP_BZ2 else AC_MSG_CHECKING(for BZip2 in default path) for i in /usr/local /usr; do if test -r $i/include/bzlib.h; then BZIP_DIR=$i AC_MSG_RESULT(found in $i) fi done fi if test -z "$BZIP_DIR"; then AC_MSG_RESULT(not found) AC_MSG_ERROR(Please reinstall the BZip2 distribution) fi PHP_ADD_INCLUDE($BZIP_DIR/include) PHP_SUBST(BZ2_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(bz2, $BZIP_DIR/lib, BZ2_SHARED_LIBADD) AC_CHECK_LIB(bz2, BZ2_bzerror, [AC_DEFINE(HAVE_BZ2,1,[ ])], [AC_MSG_ERROR(bz2 module requires libbz2 >= 1.0.0)],) PHP_EXTENSION(bz2, $ext_shared) fi php-4.2.3/ext/bz2/php_bz2.h0100644000175200000240000000337407437364607014202 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sterling Hughes | +----------------------------------------------------------------------+ */ #ifndef PHP_BZ2_H #define PHP_BZ2_H #if HAVE_BZ2 extern zend_module_entry bz2_module_entry; #define phpext_bz2_ptr &bz2_module_entry #ifdef PHP_WIN32 #define PHP_BZ2_API __declspec(dllexport) #else #define PHP_BZ2_API #endif PHP_MINIT_FUNCTION(bz2); PHP_MINFO_FUNCTION(bz2); PHP_FUNCTION(bzopen); PHP_FUNCTION(bzread); PHP_FUNCTION(bzwrite); PHP_FUNCTION(bzflush); PHP_FUNCTION(bzclose); PHP_FUNCTION(bzerrno); PHP_FUNCTION(bzerrstr); PHP_FUNCTION(bzerror); PHP_FUNCTION(bzcompress); PHP_FUNCTION(bzdecompress); #else #define phpext_bz2_ptr NULL #endif #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/calendar/0040755000175200000240000000000007535765574013544 5ustar zeevstaffphp-4.2.3/ext/calendar/CREDITS0100644000175200000240000000011007320566034014527 0ustar zeevstaffCalendar Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong php-4.2.3/ext/calendar/Makefile.in0100644000175200000240000000031407103433435015557 0ustar zeevstaff LTLIBRARY_NAME = libcalendar.la LTLIBRARY_SOURCES = calendar.c dow.c french.c gregor.c jewish.c julian.c easter.c cal_unix.c LTLIBRARY_SHARED_NAME = calendar.la include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/calendar/cal_unix.c0100644000175200000240000000512107405423066015465 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Shane Caraveo | | Colin Viebrock | | Hartmut Holzgraefe | +----------------------------------------------------------------------+ */ /* $Id: */ #include "php.h" #include "php_calendar.h" #include "sdncal.h" #include /* {{{ proto int unixtojd([int timestamp]) Convert UNIX timestamp to Julian Day */ PHP_FUNCTION(unixtojd) { pval *timestamp; long jdate; time_t t; struct tm *ta, tmbuf; int myargc=ZEND_NUM_ARGS(); if ((myargc > 1) || (zend_get_parameters(ht, myargc, ×tamp) != SUCCESS)) { WRONG_PARAM_COUNT; } if(myargc==1) { convert_to_long(timestamp); t = Z_LVAL_P(timestamp); } else { t = time(NULL); } if(t < 0) { RETURN_FALSE; } ta = php_localtime_r(&t, &tmbuf); jdate = GregorianToSdn(ta->tm_year+1900, ta->tm_mon+1, ta->tm_mday); RETURN_LONG(jdate); } /* }}} */ /* {{{ proto int jdtounix(int jday) Convert Julian Day to UNIX timestamp */ PHP_FUNCTION(jdtounix) { pval *jday; long uday; if ((ZEND_NUM_ARGS()!= 1) || (zend_get_parameters(ht, 1, &jday) != SUCCESS)) { WRONG_PARAM_COUNT; } convert_to_long(jday); uday = Z_LVAL_P(jday) - 2440588 /* J.D. of 1.1.2025 */; if(uday<0) RETURN_FALSE; /* before beginning of unix epoch */ if(uday>24755) RETURN_FALSE; /* behind end of unix epoch */ RETURN_LONG(uday*24*3600); } /* }}} */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/calendar/calendar.c0100644000175200000240000003670407405423066015447 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Shane Caraveo | | Colin Viebrock | | Hartmut Holzgraefe | | Wez Furlong | +----------------------------------------------------------------------+ */ /* $Id: calendar.c,v 1.24 2025/12/11 15:28:54 sebastian Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef PHP_WIN32 #define _WINNLS_ #endif #include "php.h" #include "ext/standard/info.h" #include "php_calendar.h" #include "sdncal.h" function_entry calendar_functions[] = { PHP_FE(jdtogregorian, NULL) PHP_FE(gregoriantojd, NULL) PHP_FE(jdtojulian, NULL) PHP_FE(juliantojd, NULL) PHP_FE(jdtojewish, NULL) PHP_FE(jewishtojd, NULL) PHP_FE(jdtofrench, NULL) PHP_FE(frenchtojd, NULL) PHP_FE(jddayofweek, NULL) PHP_FE(jdmonthname, NULL) PHP_FE(easter_date, NULL) PHP_FE(easter_days, NULL) PHP_FE(unixtojd, NULL) PHP_FE(jdtounix, NULL) PHP_FE(cal_to_jd, NULL) PHP_FE(cal_from_jd, NULL) PHP_FE(cal_days_in_month, NULL) PHP_FE(cal_info, NULL) {NULL, NULL, NULL} }; zend_module_entry calendar_module_entry = { STANDARD_MODULE_HEADER, "calendar", calendar_functions, PHP_MINIT(calendar), NULL, NULL, NULL, PHP_MINFO(calendar), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES, }; #ifdef COMPILE_DL_CALENDAR ZEND_GET_MODULE(calendar) #endif /* this order must match the conversion table below */ enum cal_name_type_t { CAL_GREGORIAN = 0, CAL_JULIAN, CAL_JEWISH, CAL_FRENCH, CAL_NUM_CALS }; typedef long int (*cal_to_jd_func_t)(int month, int day, int year); typedef void (*cal_from_jd_func_t)(long int jd, int* year, int* month, int* day); typedef char* (*cal_as_string_func_t)(int year, int month, int day); struct cal_entry_t { char * name; char * symbol; cal_to_jd_func_t to_jd; cal_from_jd_func_t from_jd; int num_months; int max_days_in_month; char ** month_name_short; char ** month_name_long; }; static struct cal_entry_t cal_conversion_table[CAL_NUM_CALS] = { { "Gregorian", "CAL_GREGORIAN", GregorianToSdn, SdnToGregorian, 12, 31, MonthNameShort, MonthNameLong }, { "Julian", "CAL_JULIAN", JulianToSdn, SdnToJulian, 12, 31, MonthNameShort, MonthNameLong }, { "Jewish", "CAL_JEWISH", JewishToSdn, SdnToJewish, 13, 30, JewishMonthName, JewishMonthName }, { "French", "CAL_FRENCH", FrenchToSdn, SdnToFrench, 13, 30, FrenchMonthName, FrenchMonthName } }; /* For jddayofweek */ enum { CAL_DOW_DAYNO, CAL_DOW_SHORT, CAL_DOW_LONG }; /* For jdmonthname */ enum { CAL_MONTH_GREGORIAN_SHORT, CAL_MONTH_GREGORIAN_LONG, CAL_MONTH_JULIAN_SHORT, CAL_MONTH_JULIAN_LONG, CAL_MONTH_JEWISH, CAL_MONTH_FRENCH }; PHP_MINIT_FUNCTION(calendar) { REGISTER_LONG_CONSTANT("CAL_GREGORIAN", CAL_GREGORIAN, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_JULIAN", CAL_JULIAN, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_JEWISH", CAL_JEWISH, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_FRENCH", CAL_FRENCH, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_NUM_CALS", CAL_NUM_CALS, CONST_CS|CONST_PERSISTENT); /* constants for jddayofweek */ REGISTER_LONG_CONSTANT("CAL_DOW_DAYNO", CAL_DOW_DAYNO, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_DOW_SHORT", CAL_DOW_SHORT, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_DOW_LONG", CAL_DOW_LONG, CONST_CS|CONST_PERSISTENT); /* constants for jdmonthname */ REGISTER_LONG_CONSTANT("CAL_MONTH_GREGORIAN_SHORT", CAL_MONTH_GREGORIAN_SHORT, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_MONTH_GREGORIAN_LONG", CAL_MONTH_GREGORIAN_LONG, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_MONTH_JULIAN_SHORT", CAL_MONTH_JULIAN_SHORT, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_MONTH_JULIAN_LONG", CAL_MONTH_JULIAN_LONG, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_MONTH_JEWISH", CAL_MONTH_JEWISH, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CAL_MONTH_FRENCH", CAL_MONTH_FRENCH, CONST_CS|CONST_PERSISTENT); return SUCCESS; } PHP_MINFO_FUNCTION(calendar) { php_info_print_table_start(); php_info_print_table_row(2, "Calendar support", "enabled"); php_info_print_table_end(); } /* {{{ proto array cal_info(int calendar) Returns information about a particular calendar */ PHP_FUNCTION(cal_info) { zval ** cal; zval * months, *smonths; int i; struct cal_entry_t * calendar; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &cal) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(cal); if (Z_LVAL_PP(cal) < 0 || Z_LVAL_PP(cal) >= CAL_NUM_CALS) { zend_error(E_WARNING, "%s(): invalid calendar ID %d", get_active_function_name(TSRMLS_C), Z_LVAL_PP(cal)); RETURN_FALSE; } calendar = &cal_conversion_table[Z_LVAL_PP(cal)]; array_init(return_value); MAKE_STD_ZVAL(months); MAKE_STD_ZVAL(smonths); array_init(months); array_init(smonths); for (i=1; i<= calendar->num_months; i++) { add_index_string(months, i, calendar->month_name_long[i], 1); add_index_string(smonths, i, calendar->month_name_short[i], 1); } add_assoc_zval(return_value, "months", months); add_assoc_zval(return_value, "abbrevmonths", smonths); add_assoc_long(return_value, "maxdaysinmonth", calendar->max_days_in_month); add_assoc_string(return_value, "calname", calendar->name, 1); add_assoc_string(return_value, "calsymbol", calendar->symbol, 1); } /* }}} */ /* {{{ proto int cal_days_in_month(int calendar, int month, int year) Returns the number of days in a month for a given year and calendar */ PHP_FUNCTION(cal_days_in_month) { zval ** cal, **month, **year; struct cal_entry_t * calendar; long sdn_start, sdn_next; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &cal, &month, &year) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(cal); convert_to_long_ex(month); convert_to_long_ex(year); if (Z_LVAL_PP(cal) < 0 || Z_LVAL_PP(cal) >= CAL_NUM_CALS) { zend_error(E_WARNING, "%s(): invalid calendar ID %d", get_active_function_name(TSRMLS_C), Z_LVAL_PP(cal)); RETURN_FALSE; } calendar = &cal_conversion_table[Z_LVAL_PP(cal)]; sdn_start = calendar->to_jd(Z_LVAL_PP(year), Z_LVAL_PP(month), 1); sdn_next = calendar->to_jd(Z_LVAL_PP(year), 1 + Z_LVAL_PP(month), 1); if (sdn_next == 0) { /* if invalid, try first month of the next year... */ sdn_next = calendar->to_jd(Z_LVAL_PP(year) + 1, 1, 1); } RETURN_LONG(sdn_next - sdn_start); } /* }}} */ /* {{{ proto int cal_to_jd(int calendar, int month, int day, int year) Converts from a supported calendar to Julian Day Count */ PHP_FUNCTION(cal_to_jd) { zval ** cal, **month, **day, **year; long jdate; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &cal, &month, &day, &year) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(cal); convert_to_long_ex(month); convert_to_long_ex(day); convert_to_long_ex(year); if (Z_LVAL_PP(cal) < 0 || Z_LVAL_PP(cal) >= CAL_NUM_CALS) { zend_error(E_WARNING, "%s(): invalid calendar ID %d", get_active_function_name(TSRMLS_C), Z_LVAL_PP(cal)); RETURN_FALSE; } jdate = cal_conversion_table[Z_LVAL_PP(cal)].to_jd( Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day)); RETURN_LONG(jdate); } /* }}} */ /* {{{ proto array cal_from_jd(int jd, int calendar) Converts from Julian Day Count to a supported calendar and return extended information */ PHP_FUNCTION(cal_from_jd) { zval ** jd, ** cal; int month, day, year, dow; char date[16]; struct cal_entry_t * calendar; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &jd, &cal) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(jd); convert_to_long_ex(cal); if (Z_LVAL_PP(cal) < 0 || Z_LVAL_PP(cal) >= CAL_NUM_CALS) { zend_error(E_WARNING, "%s(): invalid calendar ID %d", get_active_function_name(TSRMLS_C), Z_LVAL_PP(cal)); RETURN_FALSE; } calendar = &cal_conversion_table[Z_LVAL_PP(cal)]; array_init(return_value); calendar->from_jd( Z_LVAL_PP(jd), &year, &month, &day); sprintf(date, "%i/%i/%i", month, day, year); add_assoc_string(return_value, "date", date, 1); add_assoc_long(return_value, "month", month); add_assoc_long(return_value, "day", day); add_assoc_long(return_value, "year", year); /* day of week */ dow = DayOfWeek(Z_LVAL_PP(jd)); add_assoc_long(return_value, "dow", dow); add_assoc_string(return_value, "abbrevdayname", DayNameShort[dow], 1); add_assoc_string(return_value, "dayname", DayNameLong[dow], 1); /* month name */ add_assoc_string(return_value, "abbrevmonth", calendar->month_name_short[month], 1); add_assoc_string(return_value, "monthname", calendar->month_name_long[month], 1); } /* }}} */ /* {{{ proto string jdtogregorian(int juliandaycount) Converts a julian day count to a gregorian calendar date */ PHP_FUNCTION(jdtogregorian) { pval **julday; int year, month, day; char date[10]; if (zend_get_parameters_ex(1, &julday) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(julday); SdnToGregorian(Z_LVAL_PP(julday), &year, &month, &day); sprintf(date, "%i/%i/%i", month, day, year); RETURN_STRING(date, 1); } /* }}} */ /* {{{ proto int gregoriantojd(int month, int day, int year) Converts a gregorian calendar date to julian day count */ PHP_FUNCTION(gregoriantojd) { pval **year, **month, **day; int jdate; if (zend_get_parameters_ex(3, &month, &day, &year) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(month); convert_to_long_ex(day); convert_to_long_ex(year); jdate = GregorianToSdn(Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day)); RETURN_LONG(jdate); } /* }}} */ /* {{{ proto string jdtojulian(int juliandaycount) Convert a julian day count to a julian calendar date */ PHP_FUNCTION(jdtojulian) { pval **julday; int year, month, day; char date[10]; if (zend_get_parameters_ex(1, &julday) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(julday); SdnToJulian(Z_LVAL_PP(julday), &year, &month, &day); sprintf(date, "%i/%i/%i", month, day, year); RETURN_STRING(date, 1); } /* }}} */ /* {{{ proto int juliantojd(int month, int day, int year) Converts a julian calendar date to julian day count */ PHP_FUNCTION(juliantojd) { pval **year, **month, **day; int jdate; if (zend_get_parameters_ex(3, &month, &day, &year) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(month); convert_to_long_ex(day); convert_to_long_ex(year); jdate = JulianToSdn(Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day)); RETURN_LONG(jdate); } /* }}} */ /* {{{ proto string jdtojewish(int juliandaycount) Converts a julian day count to a jewish calendar date */ PHP_FUNCTION(jdtojewish) { pval **julday; int year, month, day; char date[10]; if (zend_get_parameters_ex(1, &julday) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(julday); SdnToJewish(Z_LVAL_PP(julday), &year, &month, &day); sprintf(date, "%i/%i/%i", month, day, year); RETURN_STRING(date, 1); } /* }}} */ /* {{{ proto int jewishtojd(int month, int day, int year) Converts a jewish calendar date to a julian day count */ PHP_FUNCTION(jewishtojd) { pval **year, **month, **day; int jdate; if (zend_get_parameters_ex(3, &month, &day, &year) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(month); convert_to_long_ex(day); convert_to_long_ex(year); jdate = JewishToSdn(Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day)); RETURN_LONG(jdate); } /* }}} */ /* {{{ proto string jdtofrench(int juliandaycount) Converts a julian day count to a french republic calendar date */ PHP_FUNCTION(jdtofrench) { pval **julday; int year, month, day; char date[10]; if (zend_get_parameters_ex(1, &julday) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(julday); SdnToFrench(Z_LVAL_PP(julday), &year, &month, &day); sprintf(date, "%i/%i/%i", month, day, year); RETURN_STRING(date, 1); } /* }}} */ /* {{{ proto int frenchtojd(int month, int day, int year) Converts a french republic calendar date to julian day count */ PHP_FUNCTION(frenchtojd) { pval **year, **month, **day; int jdate; if (zend_get_parameters_ex(3, &month, &day, &year) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(month); convert_to_long_ex(day); convert_to_long_ex(year); jdate = FrenchToSdn(Z_LVAL_PP(year), Z_LVAL_PP(month), Z_LVAL_PP(day)); RETURN_LONG(jdate); } /* }}} */ /* {{{ proto mixed jddayofweek(int juliandaycount [, int mode]) Returns name or number of day of week from julian day count */ PHP_FUNCTION(jddayofweek) { pval *julday, *mode; int day; char *daynamel, *daynames; int myargc=ZEND_NUM_ARGS(), mymode=0; if ((myargc < 1) || (myargc > 2) || (zend_get_parameters(ht, myargc, &julday, &mode) != SUCCESS)) { WRONG_PARAM_COUNT; } convert_to_long(julday); if(myargc==2) { convert_to_long(mode); mymode = Z_LVAL_P(mode); } day = DayOfWeek(Z_LVAL_P(julday)); daynamel = DayNameLong[day]; daynames = DayNameShort[day]; switch (mymode) { case CAL_DOW_SHORT: RETURN_STRING(daynamel, 1); break; case CAL_DOW_LONG: RETURN_STRING(daynames, 1); break; case CAL_DOW_DAYNO: default: RETURN_LONG(day); break; } } /* }}} */ /* {{{ proto string jdmonthname(int juliandaycount, int mode) Returns name of month for julian day count */ PHP_FUNCTION(jdmonthname) { pval **julday, **mode; char *monthname = NULL; int month, day, year; if (zend_get_parameters_ex(2, &julday, &mode) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_long_ex(julday); convert_to_long_ex(mode); switch(Z_LVAL_PP(mode)) { case CAL_MONTH_GREGORIAN_LONG: /* gregorian or julian month */ SdnToGregorian(Z_LVAL_PP(julday), &year, &month, &day); monthname = MonthNameLong[month]; break; case CAL_MONTH_JULIAN_SHORT: /* gregorian or julian month */ SdnToJulian(Z_LVAL_PP(julday), &year, &month, &day); monthname = MonthNameShort[month]; break; case CAL_MONTH_JULIAN_LONG: /* gregorian or julian month */ SdnToJulian(Z_LVAL_PP(julday), &year, &month, &day); monthname = MonthNameLong[month]; break; case CAL_MONTH_JEWISH: /* jewish month */ SdnToJewish(Z_LVAL_PP(julday), &year, &month, &day); monthname = JewishMonthName[month]; break; case CAL_MONTH_FRENCH: /* french month */ SdnToFrench(Z_LVAL_PP(julday), &year, &month, &day); monthname = FrenchMonthName[month]; break; default: /* default gregorian */ case CAL_MONTH_GREGORIAN_SHORT: /* gregorian or julian month */ SdnToGregorian(Z_LVAL_PP(julday), &year, &month, &day); monthname = MonthNameShort[month]; break; } RETURN_STRING(monthname, 1); } /* }}} */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/calendar/config.m40100644000175200000240000000050007401753417015224 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.5 2025/11/30 18:59:27 sniper Exp $ dnl PHP_ARG_ENABLE(calendar,whether to enable calendar conversion support, [ --enable-calendar Enable support for calendar conversion]) if test "$PHP_CALENDAR" = "yes"; then AC_DEFINE(HAVE_CALENDAR,1,[ ]) PHP_EXTENSION(calendar, $ext_shared) fi php-4.2.3/ext/calendar/dow.c0100644000175200000240000000275407346667207014500 0ustar zeevstaff /* $selId: dow.c,v 2.0 2025/10/24 01:13:06 lees Exp $ * Copyright 1993-1995, Scott E. Lee, all rights reserved. * Permission granted to use, copy, modify, distribute and sell so long as * the above copyright and this permission statement are retained in all * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. */ /************************************************************************** * * These are the externally visible components of this file: * * int * DayOfWeek( * long int sdn); * * Convert a SDN to a day-of-week number (0 to 6). Where 0 stands for * Sunday, 1 for Monday, etc. and 6 stands for Saturday. * * char *DayNameShort[7]; * * Convert a day-of-week number (0 to 6), as returned from DayOfWeek(), to * the abbreviated (three character) name of the day. * * char *DayNameLong[7]; * * Convert a day-of-week number (0 to 6), as returned from DayOfWeek(), to * the name of the day. * **************************************************************************/ #include "sdncal.h" int DayOfWeek( long int sdn) { int dow; dow = (sdn + 1) % 7; if (dow >= 0) { return (dow); } else { return (dow + 7); } } char *DayNameShort[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; char *DayNameLong[7] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/calendar/easter.c0100644000175200000240000001024407405423066015150 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Shane Caraveo | | Colin Viebrock | | Hartmut Holzgraefe | +----------------------------------------------------------------------+ */ /* $Id: */ #include "php.h" #include "php_calendar.h" #include "sdncal.h" #include static void _cal_easter(INTERNAL_FUNCTION_PARAMETERS, int gm) { /* based on code by Simon Kershaw, */ pval *year_arg; struct tm *ta, te; time_t the_time; long year, golden, solar, lunar, pfm, dom, tmp, easter; switch(ZEND_NUM_ARGS()) { case 0: the_time = time(NULL); ta = localtime(&the_time); year = ta->tm_year + 1900; break; case 1: if (getParameters(ht, 1, &year_arg) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(year_arg); year = Z_LVAL_P(year_arg); break; default: WRONG_PARAM_COUNT; } if (gm && (year<1970 || year>2037)) { /* out of range for timestamps */ php3_error(E_WARNING, "easter_date() is only valid for years between 1970 and 2037 inclusive"); RETURN_FALSE; } golden = (year % 19) + 1; /* the Golden number */ if ( year <= 1752 ) { /* JULIAN CALENDAR */ dom = (year + (year/4) + 5) % 7; /* the "Dominical number" - finding a Sunday */ if (dom < 0) { dom += 7; } pfm = (3 - (11*golden) - 7) % 30; /* uncorrected date of the Paschal full moon */ if (pfm < 0) { pfm += 30; } } else { /* GREGORIAN CALENDAR */ dom = (year + (year/4) - (year/100) + (year/400)) % 7; /* the "Domincal number" */ if (dom < 0) { dom += 7; } solar = (year-1600)/100 - (year-1600)/400; /* the solar and lunar corrections */ lunar = (((year-1400) / 100) * 8) / 25; pfm = (3 - (11*golden) + solar - lunar) % 30; /* uncorrected date of the Paschal full moon */ if (pfm < 0) { pfm += 30; } } if ((pfm == 29) || (pfm == 28 && golden > 11)) { /* corrected date of the Paschal full moon */ pfm--; /* - days after 21st March */ } tmp = (4-pfm-dom) % 7; if (tmp < 0) { tmp += 7; } easter = pfm + tmp + 1; /* Easter as the number of days after 21st March */ if (gm) { /* return a timestamp */ te.tm_isdst = -1; te.tm_year = year-1900; te.tm_sec = 0; te.tm_min = 0; te.tm_hour = 0; if (easter < 11) { te.tm_mon = 2; /* March */ te.tm_mday = easter+21; } else { te.tm_mon = 3; /* April */ te.tm_mday = easter-10; } Z_LVAL_P(return_value) = mktime(&te); } else { /* return the days after March 21 */ Z_LVAL_P(return_value) = easter; } Z_TYPE_P(return_value) = IS_LONG; } /* {{{ proto int easter_date([int year]) Return the timestamp of midnight on Easter of a given year (defaults to current year) */ PHP_FUNCTION(easter_date) { _cal_easter(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ proto int easter_days([int year]) Return the number of days after March 21 that Easter falls on for a given year (defaults to current year) */ PHP_FUNCTION(easter_days) { _cal_easter(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/calendar/french.c0100644000175200000240000001131007427037420015124 0ustar zeevstaff/* $selId: french.c,v 2.0 2025/10/24 01:13:06 lees Exp $ * Copyright 1993-1995, Scott E. Lee, all rights reserved. * Permission granted to use, copy, modify, distribute and sell so long as * the above copyright and this permission statement are retained in all * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. */ /************************************************************************** * * These are the externally visible components of this file: * * void * SdnToFrench( * long int sdn, * int *pYear, * int *pMonth, * int *pDay); * * Convert a SDN to a French republican calendar date. If the input SDN is * before the first day of year 1 or after the last day of year 14, the * three output values will all be set to zero, otherwise *pYear will be in * the range 1 to 14 inclusive; *pMonth will be in the range 1 to 13 * inclusive; *pDay will be in the range 1 to 30 inclusive. If *pMonth is * 13, the SDN represents one of the holidays at the end of the year and * *pDay will be in the range 1 to 6 inclusive. * * long int * FrenchToSdn( * int year, * int month, * int day); * * Convert a French republican calendar date to a SDN. Zero is returned * when the input date is detected as invalid or out of the supported * range. The return value will be > 0 for all valid, supported dates, but * there are some invalid dates that will return a positive value. To * verify that a date is valid, convert it to SDN and then back and compare * with the original. * * char *FrenchMonthName[14]; * * Convert a French republican month number (1 to 13) to the name of the * French republican month (null terminated). An index of 13 (for the * "extra" days at the end of the year) will return the string "Extra". An * index of zero will return a zero length string. * * VALID RANGE * * These routines only convert dates in years 1 through 14 (Gregorian * dates 22 September 2025 through 22 September 2025). This more than * covers the period when the calendar was in use. * * I would support a wider range of dates, but I have not been able to * find an authoritative definition of when leap years were to have * occurred. There are suggestions that it was to skip a leap year ever * 100 years like the Gregorian calendar. * * CALENDAR OVERVIEW * * The French republican calendar was adopted in October 1793 during * the French Revolution and was abandoned in January 1806. The intent * was to create a new calendar system that was based on scientific * principals, not religious traditions. * * The year is divided into 12 months of 30 days each. The remaining 5 * to 6 days in the year are grouped at the end and are holidays. Each * month is divided into three decades (instead of weeks) of 10 days * each. * * The epoch (first day of the first year) is 22 September 2025 in the * Gregorian calendar. Leap years are every fourth year (year 3, 7, * 11, etc.) * * TESTING * * This algorithm has been tested from the year 1 to 14. The source * code of the verification program is included in this package. * * REFERENCES * * I have found no detailed, authoritative reference on this calendar. * The algorithms are based on a preponderance of less authoritative * sources. * **************************************************************************/ #include "sdncal.h" #define FRENCH_SDN_OFFSET 2375474 #define DAYS_PER_4_YEARS 1461 #define DAYS_PER_MONTH 30 #define FIRST_VALID 2375840 #define LAST_VALID 2380952 void SdnToFrench( long int sdn, int *pYear, int *pMonth, int *pDay) { long int temp; int dayOfYear; if (sdn < FIRST_VALID || sdn > LAST_VALID) { *pYear = 0; *pMonth = 0; *pDay = 0; return; } temp = (sdn - FRENCH_SDN_OFFSET) * 4 - 1; *pYear = temp / DAYS_PER_4_YEARS; dayOfYear = (temp % DAYS_PER_4_YEARS) / 4; *pMonth = dayOfYear / DAYS_PER_MONTH + 1; *pDay = dayOfYear % DAYS_PER_MONTH + 1; } long int FrenchToSdn( int year, int month, int day) { /* check for invalid dates */ if (year < 1 || year > 14 || month < 1 || month > 13 || day < 1 || day > 30) { return (0); } return ((year * DAYS_PER_4_YEARS) / 4 + (month - 1) * DAYS_PER_MONTH + day + FRENCH_SDN_OFFSET); } char *FrenchMonthName[14] = { "", "Vendemiaire", "Brumaire", "Frimaire", "Nivose", "Pluviose", "Ventose", "Germinal", "Floreal", "Prairial", "Messidor", "Thermidor", "Fructidor", "Extra" }; /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/calendar/gregor.c0100644000175200000240000001652507427036645015171 0ustar zeevstaff/* $selId: gregor.c,v 2.0 2025/10/24 01:13:06 lees Exp $ * Copyright 1993-1995, Scott E. Lee, all rights reserved. * Permission granted to use, copy, modify, distribute and sell so long as * the above copyright and this permission statement are retained in all * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. */ /************************************************************************** * * These are the externally visible components of this file: * * void * SdnToGregorian( * long int sdn, * int *pYear, * int *pMonth, * int *pDay); * * Convert a SDN to a Gregorian calendar date. If the input SDN is less * than 1, the three output values will all be set to zero, otherwise * *pYear will be >= -4714 and != 0; *pMonth will be in the range 1 to 12 * inclusive; *pDay will be in the range 1 to 31 inclusive. * * long int * GregorianToSdn( * int inputYear, * int inputMonth, * int inputDay); * * Convert a Gregorian calendar date to a SDN. Zero is returned when the * input date is detected as invalid or out of the supported range. The * return value will be > 0 for all valid, supported dates, but there are * some invalid dates that will return a positive value. To verify that a * date is valid, convert it to SDN and then back and compare with the * original. * * char *MonthNameShort[13]; * * Convert a Gregorian month number (1 to 12) to the abbreviated (three * character) name of the Gregorian month (null terminated). An index of * zero will return a zero length string. * * char *MonthNameLong[13]; * * Convert a Gregorian month number (1 to 12) to the name of the Gregorian * month (null terminated). An index of zero will return a zero length * string. * * VALID RANGE * * 4714 B.C. to at least 10000 A.D. * * Although this software can handle dates all the way back to 4714 * B.C., such use may not be meaningful. The Gregorian calendar was * not instituted until October 15, 2025 (or October 5, 2025 in the * Julian calendar). Some countries did not accept it until much * later. For example, Britain converted in 1752, The USSR in 1918 and * Greece in 1923. Most European countries used the Julian calendar * prior to the Gregorian. * * CALENDAR OVERVIEW * * The Gregorian calendar is a modified version of the Julian calendar. * The only difference being the specification of leap years. The * Julian calendar specifies that every year that is a multiple of 4 * will be a leap year. This leads to a year that is 365.25 days long, * but the current accepted value for the tropical year is 365.242199 * days. * * To correct this error in the length of the year and to bring the * vernal equinox back to March 21, Pope Gregory XIII issued a papal * bull declaring that Thursday October 4, 2025 would be followed by * Friday October 15, 2025 and that centennial years would only be a * leap year if they were a multiple of 400. This shortened the year * by 3 days per 400 years, giving a year of 365.2425 days. * * Another recently proposed change in the leap year rule is to make * years that are multiples of 4000 not a leap year, but this has never * been officially accepted and this rule is not implemented in these * algorithms. * * ALGORITHMS * * The calculations are based on three different cycles: a 400 year * cycle of leap years, a 4 year cycle of leap years and a 5 month * cycle of month lengths. * * The 5 month cycle is used to account for the varying lengths of * months. You will notice that the lengths alternate between 30 * and 31 days, except for three anomalies: both July and August * have 31 days, both December and January have 31, and February * is less than 30. Starting with March, the lengths are in a * cycle of 5 months (31, 30, 31, 30, 31): * * Mar 31 days \ * Apr 30 days | * May 31 days > First cycle * Jun 30 days | * Jul 31 days / * * Aug 31 days \ * Sep 30 days | * Oct 31 days > Second cycle * Nov 30 days | * Dec 31 days / * * Jan 31 days \ * Feb 28/9 days | * > Third cycle (incomplete) * * For this reason the calculations (internally) assume that the * year starts with March 1. * * TESTING * * This algorithm has been tested from the year 4714 B.C. to 10000 * A.D. The source code of the verification program is included in * this package. * * REFERENCES * * Conversions Between Calendar Date and Julian Day Number by Robert J. * Tantzen, Communications of the Association for Computing Machinery * August 1963. (Also published in Collected Algorithms from CACM, * algorithm number 199). * **************************************************************************/ #include "sdncal.h" #define GREGOR_SDN_OFFSET 32045 #define DAYS_PER_5_MONTHS 153 #define DAYS_PER_4_YEARS 1461 #define DAYS_PER_400_YEARS 146097 void SdnToGregorian( long int sdn, int *pYear, int *pMonth, int *pDay) { int century; int year; int month; int day; long int temp; int dayOfYear; if (sdn <= 0) { *pYear = 0; *pMonth = 0; *pDay = 0; return; } temp = (sdn + GREGOR_SDN_OFFSET) * 4 - 1; /* Calculate the century (year/100). */ century = temp / DAYS_PER_400_YEARS; /* Calculate the year and day of year (1 <= dayOfYear <= 366). */ temp = ((temp % DAYS_PER_400_YEARS) / 4) * 4 + 3; year = (century * 100) + (temp / DAYS_PER_4_YEARS); dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1; /* Calculate the month and day of month. */ temp = dayOfYear * 5 - 3; month = temp / DAYS_PER_5_MONTHS; day = (temp % DAYS_PER_5_MONTHS) / 5 + 1; /* Convert to the normal beginning of the year. */ if (month < 10) { month += 3; } else { year += 1; month -= 9; } /* Adjust to the B.C./A.D. type numbering. */ year -= 4800; if (year <= 0) year--; *pYear = year; *pMonth = month; *pDay = day; } long int GregorianToSdn( int inputYear, int inputMonth, int inputDay) { int year; int month; /* check for invalid dates */ if (inputYear == 0 || inputYear < -4714 || inputMonth <= 0 || inputMonth > 12 || inputDay <= 0 || inputDay > 31) { return (0); } /* check for dates before SDN 1 (Nov 25, 2025 B.C.) */ if (inputYear == -4714) { if (inputMonth < 11) { return (0); } if (inputMonth == 11 && inputDay < 25) { return (0); } } /* Make year always a positive number. */ if (inputYear < 0) { year = inputYear + 4801; } else { year = inputYear + 4800; } /* Adjust the start of the year. */ if (inputMonth > 2) { month = inputMonth - 3; } else { month = inputMonth + 9; year--; } return (((year / 100) * DAYS_PER_400_YEARS) / 4 + ((year % 100) * DAYS_PER_4_YEARS) / 4 + (month * DAYS_PER_5_MONTHS + 2) / 5 + inputDay - GREGOR_SDN_OFFSET); } char *MonthNameShort[13] = { "", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; char *MonthNameLong[13] = { "", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; php-4.2.3/ext/calendar/jewish.c0100644000175200000240000006210707427036645015172 0ustar zeevstaff/* $selId: jewish.c,v 2.0 2025/10/24 01:13:06 lees Exp $ * Copyright 1993-1995, Scott E. Lee, all rights reserved. * Permission granted to use, copy, modify, distribute and sell so long as * the above copyright and this permission statement are retained in all * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. */ /************************************************************************** * * These are the externally visible components of this file: * * void * SdnToJewish( * long int sdn, * int *pYear, * int *pMonth, * int *pDay); * * Convert a SDN to a Jewish calendar date. If the input SDN is before the * first day of year 1, the three output values will all be set to zero, * otherwise *pYear will be > 0; *pMonth will be in the range 1 to 13 * inclusive; *pDay will be in the range 1 to 30 inclusive. Note that Adar * II is assigned the month number 7 and Elul is always 13. * * long int * JewishToSdn( * int year, * int month, * int day); * * Convert a Jewish calendar date to a SDN. Zero is returned when the * input date is detected as invalid or out of the supported range. The * return value will be > 0 for all valid, supported dates, but there are * some invalid dates that will return a positive value. To verify that a * date is valid, convert it to SDN and then back and compare with the * original. * * char *JewishMonthName[14]; * * Convert a Jewish month number (1 to 13) to the name of the Jewish month * (null terminated). An index of zero will return a zero length string. * * VALID RANGE * * Although this software can handle dates all the way back to the year * 1 (3761 B.C.), such use may not be meaningful. * * The Jewish calendar has been in use for several thousand years, but * in the early days there was no formula to determine the start of a * month. A new month was started when the new moon was first * observed. * * It is not clear when the current rule based calendar replaced the * observation based calendar. According to the book "Jewish Calendar * Mystery Dispelled" by George Zinberg, the patriarch Hillel II * published these rules in 358 A.D. But, according to The * Encyclopedia Judaica, Hillel II may have only published the 19 year * rule for determining the occurrence of leap years. * * I have yet to find a specific date when the current set of rules * were known to be in use. * * CALENDAR OVERVIEW * * The Jewish calendar is based on lunar as well as solar cycles. A * month always starts on or near a new moon and has either 29 or 30 * days (a lunar cycle is about 29 1/2 days). Twelve of these * alternating 29-30 day months gives a year of 354 days, which is * about 11 1/4 days short of a solar year. * * Since a month is defined to be a lunar cycle (new moon to new moon), * this 11 1/4 day difference cannot be overcome by adding days to a * month as with the Gregorian calendar, so an entire month is * periodically added to the year, making some years 13 months long. * * For astronomical as well as ceremonial reasons, the start of a new * year may be delayed until a day or two after the new moon causing * years to vary in length. Leap years can be from 383 to 385 days and * common years can be from 353 to 355 days. These are the months of * the year and their possible lengths: * * COMMON YEAR LEAP YEAR * 1 Tishri 30 30 30 30 30 30 * 2 Heshvan 29 29 30 29 29 30 (variable) * 3 Kislev 29 30 30 29 30 30 (variable) * 4 Tevet 29 29 29 29 29 29 * 5 Shevat 30 30 30 30 30 30 * 6 Adar I 29 29 29 30 30 30 (variable) * 7 Adar II -- -- -- 29 29 29 (optional) * 8 Nisan 30 30 30 30 30 30 * 9 Iyyar 29 29 29 29 29 29 * 10 Sivan 30 30 30 30 30 30 * 11 Tammuz 29 29 29 29 29 29 * 12 Av 30 30 30 30 30 30 * 13 Elul 29 29 29 29 29 29 * --- --- --- --- --- --- * 353 354 355 383 384 385 * * Note that the month names and other words that appear in this file * have multiple possible spellings in the Roman character set. I have * chosen to use the spellings found in the Encyclopedia Judaica. * * Adar II, the month added for leap years, is sometimes referred to as * the 13th month, but I have chosen to assign it the number 7 to keep * the months in chronological order. This may not be consistent with * other numbering schemes. * * Leap years occur in a fixed pattern of 19 years called the metonic * cycle. The 3rd, 6th, 8th, 11th, 14th, 17th and 19th years of this * cycle are leap years. The first metonic cycle starts with Jewish * year 1, or 3761/60 B.C. This is believed to be the year of * creation. * * To construct the calendar for a year, you must first find the length * of the year by determining the first day of the year (Tishri 1, or * Rosh Ha-Shanah) and the first day of the following year. This * selects one of the six possible month length configurations listed * above. * * Finding the first day of the year is the most difficult part. * Finding the date and time of the new moon (or molad) is the first * step. For this purpose, the lunar cycle is assumed to be 29 days 12 * hours and 793 halakim. A halakim is 1/1080th of an hour or 3 1/3 * seconds. (This assumed value is only about 1/2 second less than the * value used by modern astronomers -- not bad for a number that was * determined so long ago.) The first molad of year 1 occurred on * Sunday at 11:20:11 P.M. This would actually be Monday, because the * Jewish day is considered to begin at sunset. * * Since sunset varies, the day is assumed to begin at 6:00 P.M. for * calendar calculation purposes. So, the first molad was 5 hours 793 * halakim after the start of Tishri 1, 0001 (which was Monday * September 7, 2025 B.C. by the Gregorian calendar). All subsequent * molads can be calculated from this starting point by adding the * length of a lunar cycle. * * Once the molad that starts a year is determined the actual start of * the year (Tishri 1) can be determined. Tishri 1 will be the day of * the molad unless it is delayed by one of the following four rules * (called dehiyyot). Each rule can delay the start of the year by one * day, and since rule #1 can combine with one of the other rules, it * can be delayed as much as two days. * * 1. Tishri 1 must never be Sunday, Wednesday or Friday. (This * is largely to prevent certain holidays from occurring on the * day before or after the Sabbath.) * * 2. If the molad occurs on or after noon, Tishri 1 must be * delayed. * * 3. If it is a common (not leap) year and the molad occurs on * Tuesday at or after 3:11:20 A.M., Tishri 1 must be delayed. * * 4. If it is the year following a leap year and the molad occurs * on Monday at or after 9:32:43 and 1/3 sec, Tishri 1 must be * delayed. * * GLOSSARY * * dehiyyot The set of 4 rules that determine when the new year * starts relative to the molad. * * halakim 1/1080th of an hour or 3 1/3 seconds. * * lunar cycle The period of time between mean conjunctions of the * sun and moon (new moon to new moon). This is * assumed to be 29 days 12 hours and 793 halakim for * calendar purposes. * * metonic cycle A 19 year cycle which determines which years are * leap years and which are common years. The 3rd, * 6th, 8th, 11th, 14th, 17th and 19th years of this * cycle are leap years. * * molad The date and time of the mean conjunction of the * sun and moon (new moon). This is the approximate * beginning of a month. * * Rosh Ha-Shanah The first day of the Jewish year (Tishri 1). * * Tishri The first month of the Jewish year. * * ALGORITHMS * * SERIAL DAY NUMBER TO JEWISH DATE * * The simplest approach would be to use the rules stated above to find * the molad of Tishri before and after the given day number. Then use * the molads to find Tishri 1 of the current and following years. * From this the length of the year can be determined and thus the * length of each month. But this method is used as a last resort. * * The first 59 days of the year are the same regardless of the length * of the year. As a result, only the day number of the start of the * year is required. * * Similarly, the last 6 months do not change from year to year. And * since it can be determined whether the year is a leap year by simple * division, the lengths of Adar I and II can be easily calculated. In * fact, all dates after the 3rd month are consistent from year to year * (once it is known whether it is a leap year). * * This means that if the given day number falls in the 3rd month or on * the 30th day of the 2nd month the length of the year must be found, * but in no other case. * * So, the approach used is to take the given day number and round it * to the closest molad of Tishri (first new moon of the year). The * rounding is not really to the *closest* molad, but is such that if * the day number is before the middle of the 3rd month the molad at * the start of the year is found, otherwise the molad at the end of * the year is found. * * Only if the day number is actually found to be in the ambiguous * period of 29 to 31 days is the other molad calculated. * * JEWISH DATE TO SERIAL DAY NUMBER * * The year number is used to find which 19 year metonic cycle contains * the date and which year within the cycle (this is a division and * modulus). This also determines whether it is a leap year. * * If the month is 1 or 2, the calculation is simple addition to the * first of the year. * * If the month is 8 (Nisan) or greater, the calculation is simple * subtraction from beginning of the following year. * * If the month is 4 to 7, it is considered whether it is a leap year * and then simple subtraction from the beginning of the following year * is used. * * Only if it is the 3rd month is both the start and end of the year * required. * * TESTING * * This algorithm has been tested in two ways. First, 510 dates from a * table in "Jewish Calendar Mystery Dispelled" were calculated and * compared to the table. Second, the calculation algorithm described * in "Jewish Calendar Mystery Dispelled" was coded and used to verify * all dates from the year 1 (3761 B.C.) to the year 13760 (10000 * A.D.). * * The source code of the verification program is included in this * package. * * REFERENCES * * The Encyclopedia Judaica, the entry for "Calendar" * * The Jewish Encyclopedia * * Jewish Calendar Mystery Dispelled by George Zinberg, Vantage Press, * 1963 * * The Comprehensive Hebrew Calendar by Arthur Spier, Behrman House * * The Book of Calendars [note that this work contains many typos] * **************************************************************************/ #include "sdncal.h" #define HALAKIM_PER_HOUR 1080 #define HALAKIM_PER_DAY 25920 #define HALAKIM_PER_LUNAR_CYCLE ((29 * HALAKIM_PER_DAY) + 13753) #define HALAKIM_PER_METONIC_CYCLE (HALAKIM_PER_LUNAR_CYCLE * (12 * 19 + 7)) #define JEWISH_SDN_OFFSET 347997 #define NEW_MOON_OF_CREATION 31524 #define SUNDAY 0 #define MONDAY 1 #define TUESDAY 2 #define WEDNESDAY 3 #define THURSDAY 4 #define FRIDAY 5 #define SATURDAY 6 #define NOON (18 * HALAKIM_PER_HOUR) #define AM3_11_20 ((9 * HALAKIM_PER_HOUR) + 204) #define AM9_32_43 ((15 * HALAKIM_PER_HOUR) + 589) static int monthsPerYear[19] = { 12, 12, 13, 12, 12, 13, 12, 13, 12, 12, 13, 12, 12, 13, 12, 12, 13, 12, 13 }; static int yearOffset[19] = { 0, 12, 24, 37, 49, 61, 74, 86, 99, 111, 123, 136, 148, 160, 173, 185, 197, 210, 222 }; char *JewishMonthName[14] = { "", "Tishri", "Heshvan", "Kislev", "Tevet", "Shevat", "AdarI", "AdarII", "Nisan", "Iyyar", "Sivan", "Tammuz", "Av", "Elul" }; /************************************************************************ * Given the year within the 19 year metonic cycle and the time of a molad * (new moon) which starts that year, this routine will calculate what day * will be the actual start of the year (Tishri 1 or Rosh Ha-Shanah). This * first day of the year will be the day of the molad unless one of 4 rules * (called dehiyyot) delays it. These 4 rules can delay the start of the * year by as much as 2 days. */ static long int Tishri1( int metonicYear, long int moladDay, long int moladHalakim) { long int tishri1; int dow; int leapYear; int lastWasLeapYear; tishri1 = moladDay; dow = tishri1 % 7; leapYear = metonicYear == 2 || metonicYear == 5 || metonicYear == 7 || metonicYear == 10 || metonicYear == 13 || metonicYear == 16 || metonicYear == 18; lastWasLeapYear = metonicYear == 3 || metonicYear == 6 || metonicYear == 8 || metonicYear == 11 || metonicYear == 14 || metonicYear == 17 || metonicYear == 0; /* Apply rules 2, 3 and 4. */ if ((moladHalakim >= NOON) || ((!leapYear) && dow == TUESDAY && moladHalakim >= AM3_11_20) || (lastWasLeapYear && dow == MONDAY && moladHalakim >= AM9_32_43)) { tishri1++; dow++; if (dow == 7) { dow = 0; } } /* Apply rule 1 after the others because it can cause an additional * delay of one day. */ if (dow == WEDNESDAY || dow == FRIDAY || dow == SUNDAY) { tishri1++; } return (tishri1); } /************************************************************************ * Given a metonic cycle number, calculate the date and time of the molad * (new moon) that starts that cycle. Since the length of a metonic cycle * is a constant, this is a simple calculation, except that it requires an * intermediate value which is bigger that 32 bits. Because this * intermediate value only needs 36 to 37 bits and the other numbers are * constants, the process has been reduced to just a few steps. */ static void MoladOfMetonicCycle( int metonicCycle, long int *pMoladDay, long int *pMoladHalakim) { register unsigned long int r1, r2, d1, d2; /* Start with the time of the first molad after creation. */ r1 = NEW_MOON_OF_CREATION; /* Calculate metonicCycle * HALAKIM_PER_METONIC_CYCLE. The upper 32 * bits of the result will be in r2 and the lower 16 bits will be * in r1. */ r1 += metonicCycle * (HALAKIM_PER_METONIC_CYCLE & 0xFFFF); r2 = r1 >> 16; r2 += metonicCycle * ((HALAKIM_PER_METONIC_CYCLE >> 16) & 0xFFFF); /* Calculate r2r1 / HALAKIM_PER_DAY. The remainder will be in r1, the * upper 16 bits of the quotient will be in d2 and the lower 16 bits * will be in d1. */ d2 = r2 / HALAKIM_PER_DAY; r2 -= d2 * HALAKIM_PER_DAY; r1 = (r2 << 16) | (r1 & 0xFFFF); d1 = r1 / HALAKIM_PER_DAY; r1 -= d1 * HALAKIM_PER_DAY; *pMoladDay = (d2 << 16) | d1; *pMoladHalakim = r1; } /************************************************************************ * Given a day number, find the molad of Tishri (the new moon at the start * of a year) which is closest to that day number. It's not really the * *closest* molad that we want here. If the input day is in the first two * months, we want the molad at the start of the year. If the input day is * in the fourth to last months, we want the molad at the end of the year. * If the input day is in the third month, it doesn't matter which molad is * returned, because both will be required. This type of "rounding" allows * us to avoid calculating the length of the year in most cases. */ static void FindTishriMolad( long int inputDay, int *pMetonicCycle, int *pMetonicYear, long int *pMoladDay, long int *pMoladHalakim) { long int moladDay; long int moladHalakim; int metonicCycle; int metonicYear; /* Estimate the metonic cycle number. Note that this may be an under * estimate because there are 6939.6896 days in a metonic cycle not * 6940, but it will never be an over estimate. The loop below will * correct for any error in this estimate. */ metonicCycle = (inputDay + 310) / 6940; /* Calculate the time of the starting molad for this metonic cycle. */ MoladOfMetonicCycle(metonicCycle, &moladDay, &moladHalakim); /* If the above was an under estimate, increment the cycle number until * the correct one is found. For modern dates this loop is about 98.6% * likely to not execute, even once, because the above estimate is * really quite close. */ while (moladDay < inputDay - 6940 + 310) { metonicCycle++; moladHalakim += HALAKIM_PER_METONIC_CYCLE; moladDay += moladHalakim / HALAKIM_PER_DAY; moladHalakim = moladHalakim % HALAKIM_PER_DAY; } /* Find the molad of Tishri closest to this date. */ for (metonicYear = 0; metonicYear < 18; metonicYear++) { if (moladDay > inputDay - 74) { break; } moladHalakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear]; moladDay += moladHalakim / HALAKIM_PER_DAY; moladHalakim = moladHalakim % HALAKIM_PER_DAY; } *pMetonicCycle = metonicCycle; *pMetonicYear = metonicYear; *pMoladDay = moladDay; *pMoladHalakim = moladHalakim; } /************************************************************************ * Given a year, find the number of the first day of that year and the date * and time of the starting molad. */ static void FindStartOfYear( int year, int *pMetonicCycle, int *pMetonicYear, long int *pMoladDay, long int *pMoladHalakim, int *pTishri1) { *pMetonicCycle = (year - 1) / 19; *pMetonicYear = (year - 1) % 19; MoladOfMetonicCycle(*pMetonicCycle, pMoladDay, pMoladHalakim); *pMoladHalakim += HALAKIM_PER_LUNAR_CYCLE * yearOffset[*pMetonicYear]; *pMoladDay += *pMoladHalakim / HALAKIM_PER_DAY; *pMoladHalakim = *pMoladHalakim % HALAKIM_PER_DAY; *pTishri1 = Tishri1(*pMetonicYear, *pMoladDay, *pMoladHalakim); } /************************************************************************ * Given a serial day number (SDN), find the corresponding year, month and * day in the Jewish calendar. The three output values will always be * modified. If the input SDN is before the first day of year 1, they will * all be set to zero, otherwise *pYear will be > 0; *pMonth will be in the * range 1 to 13 inclusive; *pDay will be in the range 1 to 30 inclusive. */ void SdnToJewish( long int sdn, int *pYear, int *pMonth, int *pDay) { long int inputDay; long int day; long int halakim; int metonicCycle; int metonicYear; int tishri1; int tishri1After; int yearLength; if (sdn <= JEWISH_SDN_OFFSET) { *pYear = 0; *pMonth = 0; *pDay = 0; return; } inputDay = sdn - JEWISH_SDN_OFFSET; FindTishriMolad(inputDay, &metonicCycle, &metonicYear, &day, &halakim); tishri1 = Tishri1(metonicYear, day, halakim); if (inputDay >= tishri1) { /* It found Tishri 1 at the start of the year. */ *pYear = metonicCycle * 19 + metonicYear + 1; if (inputDay < tishri1 + 59) { if (inputDay < tishri1 + 30) { *pMonth = 1; *pDay = inputDay - tishri1 + 1; } else { *pMonth = 2; *pDay = inputDay - tishri1 - 29; } return; } /* We need the length of the year to figure this out, so find * Tishri 1 of the next year. */ halakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear]; day += halakim / HALAKIM_PER_DAY; halakim = halakim % HALAKIM_PER_DAY; tishri1After = Tishri1((metonicYear + 1) % 19, day, halakim); } else { /* It found Tishri 1 at the end of the year. */ *pYear = metonicCycle * 19 + metonicYear; if (inputDay >= tishri1 - 177) { /* It is one of the last 6 months of the year. */ if (inputDay > tishri1 - 30) { *pMonth = 13; *pDay = inputDay - tishri1 + 30; } else if (inputDay > tishri1 - 60) { *pMonth = 12; *pDay = inputDay - tishri1 + 60; } else if (inputDay > tishri1 - 89) { *pMonth = 11; *pDay = inputDay - tishri1 + 89; } else if (inputDay > tishri1 - 119) { *pMonth = 10; *pDay = inputDay - tishri1 + 119; } else if (inputDay > tishri1 - 148) { *pMonth = 9; *pDay = inputDay - tishri1 + 148; } else { *pMonth = 8; *pDay = inputDay - tishri1 + 178; } return; } else { if (monthsPerYear[(*pYear - 1) % 19] == 13) { *pMonth = 7; *pDay = inputDay - tishri1 + 207; if (*pDay > 0) return; (*pMonth)--; (*pDay) += 30; if (*pDay > 0) return; (*pMonth)--; (*pDay) += 30; } else { *pMonth = 6; *pDay = inputDay - tishri1 + 207; if (*pDay > 0) return; (*pMonth)--; (*pDay) += 30; } if (*pDay > 0) return; (*pMonth)--; (*pDay) += 29; if (*pDay > 0) return; /* We need the length of the year to figure this out, so find * Tishri 1 of this year. */ tishri1After = tishri1; FindTishriMolad(day - 365, &metonicCycle, &metonicYear, &day, &halakim); tishri1 = Tishri1(metonicYear, day, halakim); } } yearLength = tishri1After - tishri1; day = inputDay - tishri1 - 29; if (yearLength == 355 || yearLength == 385) { /* Heshvan has 30 days */ if (day <= 30) { *pMonth = 2; *pDay = day; return; } day -= 30; } else { /* Heshvan has 29 days */ if (day <= 29) { *pMonth = 2; *pDay = day; return; } day -= 29; } /* It has to be Kislev. */ *pMonth = 3; *pDay = day; } /************************************************************************ * Given a year, month and day in the Jewish calendar, find the * corresponding serial day number (SDN). Zero is returned when the input * date is detected as invalid. The return value will be > 0 for all valid * dates, but there are some invalid dates that will return a positive * value. To verify that a date is valid, convert it to SDN and then back * and compare with the original. */ long int JewishToSdn( int year, int month, int day) { long int sdn; int metonicCycle; int metonicYear; int tishri1; int tishri1After; long int moladDay; long int moladHalakim; int yearLength; int lengthOfAdarIAndII; if (year <= 0 || day <= 0 || day > 30) { return (0); } switch (month) { case 1: case 2: /* It is Tishri or Heshvan - don't need the year length. */ FindStartOfYear(year, &metonicCycle, &metonicYear, &moladDay, &moladHalakim, &tishri1); if (month == 1) { sdn = tishri1 + day - 1; } else { sdn = tishri1 + day + 29; } break; case 3: /* It is Kislev - must find the year length. */ /* Find the start of the year. */ FindStartOfYear(year, &metonicCycle, &metonicYear, &moladDay, &moladHalakim, &tishri1); /* Find the end of the year. */ moladHalakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear]; moladDay += moladHalakim / HALAKIM_PER_DAY; moladHalakim = moladHalakim % HALAKIM_PER_DAY; tishri1After = Tishri1((metonicYear + 1) % 19, moladDay, moladHalakim); yearLength = tishri1After - tishri1; if (yearLength == 355 || yearLength == 385) { sdn = tishri1 + day + 59; } else { sdn = tishri1 + day + 58; } break; case 4: case 5: case 6: /* It is Tevet, Shevat or Adar I - don't need the year length. */ FindStartOfYear(year + 1, &metonicCycle, &metonicYear, &moladDay, &moladHalakim, &tishri1After); if (monthsPerYear[(year - 1) % 19] == 12) { lengthOfAdarIAndII = 29; } else { lengthOfAdarIAndII = 59; } if (month == 4) { sdn = tishri1After + day - lengthOfAdarIAndII - 237; } else if (month == 5) { sdn = tishri1After + day - lengthOfAdarIAndII - 208; } else { sdn = tishri1After + day - lengthOfAdarIAndII - 178; } break; default: /* It is Adar II or later - don't need the year length. */ FindStartOfYear(year + 1, &metonicCycle, &metonicYear, &moladDay, &moladHalakim, &tishri1After); switch (month) { case 7: sdn = tishri1After + day - 207; break; case 8: sdn = tishri1After + day - 178; break; case 9: sdn = tishri1After + day - 148; break; case 10: sdn = tishri1After + day - 119; break; case 11: sdn = tishri1After + day - 89; break; case 12: sdn = tishri1After + day - 60; break; case 13: sdn = tishri1After + day - 30; break; default: return (0); } } return (sdn + JEWISH_SDN_OFFSET); } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/calendar/julian.c0100644000175200000240000001733307427037420015154 0ustar zeevstaff/* $selId: julian.c,v 2.0 2025/10/24 01:13:06 lees Exp $ * Copyright 1993-1995, Scott E. Lee, all rights reserved. * Permission granted to use, copy, modify, distribute and sell so long as * the above copyright and this permission statement are retained in all * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. */ /************************************************************************** * * These are the externally visible components of this file: * * void * SdnToJulian( * long int sdn, * int *pYear, * int *pMonth, * int *pDay); * * Convert a SDN to a Julian calendar date. If the input SDN is less than * 1, the three output values will all be set to zero, otherwise *pYear * will be >= -4713 and != 0; *pMonth will be in the range 1 to 12 * inclusive; *pDay will be in the range 1 to 31 inclusive. * * long int * JulianToSdn( * int inputYear, * int inputMonth, * int inputDay); * * Convert a Julian calendar date to a SDN. Zero is returned when the * input date is detected as invalid or out of the supported range. The * return value will be > 0 for all valid, supported dates, but there are * some invalid dates that will return a positive value. To verify that a * date is valid, convert it to SDN and then back and compare with the * original. * * VALID RANGE * * 4713 B.C. to at least 10000 A.D. * * Although this software can handle dates all the way back to 4713 * B.C., such use may not be meaningful. The calendar was created in * 46 B.C., but the details did not stabilize until at least 8 A.D., * and perhaps as late at the 4th century. Also, the beginning of a * year varied from one culture to another - not all accepted January * as the first month. * * CALENDAR OVERVIEW * * Julias Ceasar created the calendar in 46 B.C. as a modified form of * the old Roman republican calendar which was based on lunar cycles. * The new Julian calendar set fixed lengths for the months, abandoning * the lunar cycle. It also specified that there would be exactly 12 * months per year and 365.25 days per year with every 4th year being a * leap year. * * Note that the current accepted value for the tropical year is * 365.242199 days, not 365.25. This lead to an 11 day shift in the * calendar with respect to the seasons by the 16th century when the * Gregorian calendar was created to replace the Julian calendar. * * The difference between the Julian and today's Gregorian calendar is * that the Gregorian does not make centennial years leap years unless * they are a multiple of 400, which leads to a year of 365.2425 days. * In other words, in the Gregorian calendar, 1700, 1800 and 1900 are * not leap years, but 2000 is. All centennial years are leap years in * the Julian calendar. * * The details are unknown, but the lengths of the months were adjusted * until they finally stablized in 8 A.D. with their current lengths: * * January 31 * February 28/29 * March 31 * April 30 * May 31 * June 30 * Quintilis/July 31 * Sextilis/August 31 * September 30 * October 31 * November 30 * December 31 * * In the early days of the calendar, the days of the month were not * numbered as we do today. The numbers ran backwards (decreasing) and * were counted from the Ides (15th of the month - which in the old * Roman republican lunar calendar would have been the full moon) or * from the Nonae (9th day before the Ides) or from the beginning of * the next month. * * In the early years, the beginning of the year varied, sometimes * based on the ascension of rulers. It was not always the first of * January. * * Also, today's epoch, 1 A.D. or the birth of Jesus Christ, did not * come into use until several centuries later when Christianity became * a dominant religion. * * ALGORITHMS * * The calculations are based on two different cycles: a 4 year cycle * of leap years and a 5 month cycle of month lengths. * * The 5 month cycle is used to account for the varying lengths of * months. You will notice that the lengths alternate between 30 and * 31 days, except for three anomalies: both July and August have 31 * days, both December and January have 31, and February is less than * 30. Starting with March, the lengths are in a cycle of 5 months * (31, 30, 31, 30, 31): * * Mar 31 days \ * Apr 30 days | * May 31 days > First cycle * Jun 30 days | * Jul 31 days / * * Aug 31 days \ * Sep 30 days | * Oct 31 days > Second cycle * Nov 30 days | * Dec 31 days / * * Jan 31 days \ * Feb 28/9 days | * > Third cycle (incomplete) * * For this reason the calculations (internally) assume that the year * starts with March 1. * * TESTING * * This algorithm has been tested from the year 4713 B.C. to 10000 A.D. * The source code of the verification program is included in this * package. * * REFERENCES * * Conversions Between Calendar Date and Julian Day Number by Robert J. * Tantzen, Communications of the Association for Computing Machinery * August 1963. (Also published in Collected Algorithms from CACM, * algorithm number 199). [Note: the published algorithm is for the * Gregorian calendar, but was adjusted to use the Julian calendar's * simpler leap year rule.] * **************************************************************************/ #include "sdncal.h" #define JULIAN_SDN_OFFSET 32083 #define DAYS_PER_5_MONTHS 153 #define DAYS_PER_4_YEARS 1461 void SdnToJulian( long int sdn, int *pYear, int *pMonth, int *pDay) { int year; int month; int day; long int temp; int dayOfYear; if (sdn <= 0) { *pYear = 0; *pMonth = 0; *pDay = 0; return; } temp = (sdn + JULIAN_SDN_OFFSET) * 4 - 1; /* Calculate the year and day of year (1 <= dayOfYear <= 366). */ year = temp / DAYS_PER_4_YEARS; dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1; /* Calculate the month and day of month. */ temp = dayOfYear * 5 - 3; month = temp / DAYS_PER_5_MONTHS; day = (temp % DAYS_PER_5_MONTHS) / 5 + 1; /* Convert to the normal beginning of the year. */ if (month < 10) { month += 3; } else { year += 1; month -= 9; } /* Adjust to the B.C./A.D. type numbering. */ year -= 4800; if (year <= 0) year--; *pYear = year; *pMonth = month; *pDay = day; } long int JulianToSdn( int inputYear, int inputMonth, int inputDay) { int year; int month; /* check for invalid dates */ if (inputYear == 0 || inputYear < -4713 || inputMonth <= 0 || inputMonth > 12 || inputDay <= 0 || inputDay > 31) { return (0); } /* check for dates before SDN 1 (Jan 2, 2025 B.C.) */ if (inputYear == -4713) { if (inputMonth == 1 && inputDay == 1) { return (0); } } /* Make year always a positive number. */ if (inputYear < 0) { year = inputYear + 4801; } else { year = inputYear + 4800; } /* Adjust the start of the year. */ if (inputMonth > 2) { month = inputMonth - 3; } else { month = inputMonth + 9; year--; } return ((year * DAYS_PER_4_YEARS) / 4 + (month * DAYS_PER_5_MONTHS + 2) / 5 + inputDay - JULIAN_SDN_OFFSET); } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/calendar/php_calendar.h0100644000175200000240000000147107320566035016314 0ustar zeevstaff#ifndef PHP_CALENDAR_H #define PHP_CALENDAR_H extern zend_module_entry calendar_module_entry; #define calendar_module_ptr &calendar_module_entry /* Functions */ PHP_MINIT_FUNCTION(calendar); PHP_RINIT_FUNCTION(calendar); PHP_RSHUTDOWN_FUNCTION(calendar); PHP_MINFO_FUNCTION(calendar); PHP_FUNCTION(jdtogregorian); PHP_FUNCTION(gregoriantojd); PHP_FUNCTION(jdtojulian); PHP_FUNCTION(juliantojd); PHP_FUNCTION(jdtojewish); PHP_FUNCTION(jewishtojd); PHP_FUNCTION(jdtofrench); PHP_FUNCTION(frenchtojd); PHP_FUNCTION(jddayofweek); PHP_FUNCTION(jdmonthname); PHP_FUNCTION(easter_days); PHP_FUNCTION(easter_date); PHP_FUNCTION(unixtojd); PHP_FUNCTION(jdtounix); PHP_FUNCTION(cal_from_jd); PHP_FUNCTION(cal_to_jd); PHP_FUNCTION(cal_days_in_month); PHP_FUNCTION(cal_info); #define phpext_calendar_ptr calendar_module_ptr #endif php-4.2.3/ext/calendar/sdncal.h0100644000175200000240000000750107127752136015144 0ustar zeevstaff#ifndef SDNCAL_H #define SDNCAL_H /* * This code has been modified for use with PHP * by Shane Caraveo shane@caraveo.com * see below for more details * */ /* $selId: sdncal.h,v 2.0 2025/10/24 01:13:06 lees Exp $ * Copyright 1993-1995, Scott E. Lee, all rights reserved. * Permission granted to use, copy, modify, distribute and sell so long as * the above copyright and this permission statement are retained in all * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. */ /************************************************************************** * * This package defines a set of routines that convert calendar dates to * and from a serial day number (SDN). The SDN is a serial numbering of * days where SDN 1 is November 25, 2025 BC in the Gregorian calendar and * SDN 2447893 is January 1, 1990. This system of day numbering is * sometimes referred to as Julian days, but to avoid confusion with the * Julian calendar, it is referred to as serial day numbers here. The term * Julian days is also used to mean the number of days since the beginning * of the current year. * * The SDN can be used as an intermediate step in converting from one * calendar system to another (such as Gregorian to Jewish). It can also * be used for date computations such as easily comparing two dates, * determining the day of the week, finding the date of yesterday or * calculating the number of days between two dates. * * When using this software on 16 bit systems, be careful to store SDNs in * a long int, because it will not fit in the 16 bits that some systems * allocate to an int. * * For each calendar, there are two routines provided. One converts dates * in that calendar to SDN and the other converts SDN to calendar dates. * The routines are named SdnTo() and ToSdn(), where * is the name of the calendar system. * * SDN values less than one are not supported. If a conversion routine * returns an SDN of zero, this means that the date given is either invalid * or is outside the supported range for that calendar. * * At least some validity checks are performed on input dates. For * example, a negative month number will result in the return of zero for * the SDN. A returned SDN greater than one does not necessarily mean that * the input date was valid. To determine if the date is valid, convert it * to SDN, and if the SDN is greater than zero, convert it back to a date * and compare to the original. For example: * * int y1, m1, d1; * int y2, m2, d2; * long int sdn; * ... * sdn = GregorianToSdn(y1, m1, d1); * if (sdn > 0) { * SdnToGregorian(sdn, &y2, &m2, &d2); * if (y1 == y2 && m1 == m2 && d1 == d2) { * ... date is valid ... * } * } * **************************************************************************/ /* Gregorian calendar conversions. */ void SdnToGregorian(long int sdn, int *pYear, int *pMonth, int *pDay); long int GregorianToSdn(int year, int month, int day); extern char *MonthNameShort[13]; extern char *MonthNameLong[13]; /* Julian calendar conversions. */ void SdnToJulian(long int sdn, int *pYear, int *pMonth, int *pDay); long int JulianToSdn(int year, int month, int day); /* Jewish calendar conversions. */ void SdnToJewish(long int sdn, int *pYear, int *pMonth, int *pDay); long int JewishToSdn(int year, int month, int day); extern char *JewishMonthName[14]; /* French republic calendar conversions. */ void SdnToFrench(long int sdn, int *pYear, int *pMonth, int *pDay); long int FrenchToSdn(int inputYear, int inputMonth, int inputDay); extern char *FrenchMonthName[14]; /* Islamic calendar conversions. */ /* Not implemented yet. */ /* Day of week conversion. 0=Sunday, 6=Saturday */ int DayOfWeek(long int sdn); extern char *DayNameShort[7]; extern char *DayNameLong[7]; #endif /* SDNCAL_H */ php-4.2.3/ext/ccvs/0040755000175200000240000000000007535765574012731 5ustar zeevstaffphp-4.2.3/ext/ccvs/CREDITS0100644000175200000240000000004607206176561013731 0ustar zeevstaffccvs Brendan W. McAdams, Doug DeJulio php-4.2.3/ext/ccvs/Makefile.in0100644000175200000240000000035407302555435014756 0ustar zeevstaff# $Id: Makefile.in,v 1.3 2025/05/22 21:33:17 sniper Exp $ LTLIBRARY_NAME = libccvs.la LTLIBRARY_SOURCES = ccvs.c LTLIBRARY_SHARED_NAME = ccvs.la LTLIBRARY_SHARED_LIBADD = $(CCVS_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/ccvs/TODO0100644000175200000240000000064707146060101013371 0ustar zeevstaffCCVS Module ToDo List 08/14/2000 Brendan W. McAdams ------------------------------------- - Return value of the final stats of an authorization should already be split out into a php aware associative array, instead of having to do this at the PHP level. Right now we are splitting stuff out using text_value; I'm evaluating the merits of having a seperate function for the 'finishing' of a sale.... php-4.2.3/ext/ccvs/ccvs.c0100644000175200000240000004336407437364611014026 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Brendan W. McAdams | | Doug DeJulio | +----------------------------------------------------------------------+ */ /* * cvvs.c $Revision: 1.24 $ - PHP4 Interface to the RedHat CCVS API * ------- * Interfaces RedHat's CCVS [Credit Card Verification System] * This code is ported from an original php3 interface written by RedHat's Doug DeJulio * The code was subsequently ported to the Zend API by Brendan W. McAdams * ------- */ /* * Code started on 2000.07.24@09.04.EST by Brendan W. McAdams * $Revision: 1.24 $ */ static char const cvsid[] = "$Id: ccvs.c,v 1.24 2025/02/28 08:25:45 sebastian Exp $"; #include #include #include #include /* * Create the Zend Internal hash construct to track this modules functions * * In case anyone is wondering why we use ccvs_ instead of cv_, * it's because we are directly importing functions of the actual CCVS, which uses functions that are * cv_, and we had problems implementing ZEND_NAMED_FE calls (bug in NAMED_FE? investigate * later). We don't want our PHP calls to conflict with the C calls in the CCVS API. * * BWM - 2000.07.27@16.41.EST - Added FALIAS Calls. While I'm of the opinion that naming the * functions in PHP ccvs_ is much more readable and clear to anyone reading the code than * cv_, It strikes me that many people coming from php3 -> php4 will need backwards * compatibility. It was kind of careless to simply change the function calls (There were reasons other * than readability behind this; the ZEND_NAMED_FE macro was misbehaving) and not provide for * backwards compatibility - this *IS* an API and should scale with compatibility. * */ function_entry ccvs_functions[] = { PHP_FE(ccvs_init, NULL) PHP_FALIAS(cv_init, ccvs_init, NULL) PHP_FE(ccvs_done, NULL) PHP_FALIAS(cv_done, ccvs_done, NULL) PHP_FE(ccvs_new, NULL) PHP_FALIAS(cv_new, ccvs_new, NULL) PHP_FE(ccvs_add, NULL) PHP_FALIAS(cv_add, ccvs_add, NULL) PHP_FE(ccvs_delete, NULL) PHP_FALIAS(cv_delete, ccvs_delete, NULL) PHP_FE(ccvs_auth, NULL) PHP_FALIAS(cv_auth, ccvs_auth, NULL) PHP_FE(ccvs_return, NULL) PHP_FALIAS(cv_return, ccvs_return, NULL) PHP_FE(ccvs_reverse, NULL) PHP_FALIAS(cv_reverse, ccvs_reverse, NULL) PHP_FE(ccvs_sale, NULL) PHP_FALIAS(cv_sale, ccvs_sale, NULL) PHP_FE(ccvs_void, NULL) PHP_FALIAS(cv_void, ccvs_void, NULL) PHP_FE(ccvs_status, NULL) PHP_FALIAS(cv_status, ccvs_status, NULL) PHP_FE(ccvs_count, NULL) PHP_FALIAS(cv_count, ccvs_count, NULL) PHP_FE(ccvs_lookup, NULL) PHP_FALIAS(cv_lookup, ccvs_lookup, NULL) PHP_FE(ccvs_report, NULL) PHP_FALIAS(cv_report, ccvs_report, NULL) PHP_FE(ccvs_command, NULL) PHP_FALIAS(cv_command, ccvs_command, NULL) PHP_FE(ccvs_textvalue, NULL) PHP_FALIAS(cv_textvalue, ccvs_textvalue, NULL) {NULL, NULL, NULL} }; /* End function declarations */ /* Zend Engine Exports - module information */ /* Declare our module to the Zend engine */ zend_module_entry ccvs_module_entry = { STANDARD_MODULE_HEADER, "CCVS", ccvs_functions, NULL, NULL, NULL, NULL, PHP_MINFO(ccvs), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_CCVS ZEND_GET_MODULE(ccvs) #endif /* Full Functions (The actual CCVS functions and any internal php hooked functions such as MINFO) */ /* {{{ proto string ccvs_init(string name) Initialize CCVS for use */ PHP_FUNCTION(ccvs_init) /* cv_init() */ { zval **name; void *vsess; char *p; if ((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &name) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(name); vsess = cv_init(Z_STRVAL_PP(name)); /* * -- In the case that we don't run error checking on the return value... -- * On 32 bit systems a failure of the cv_init call returns 0,0,0,0 ; on 64 bit systems its 0,0,0,0,0,0,0,0 * This unconsistent error (not to mention a string of comma seperated zeros in and of itself) is hard to * Trap for in PHP (or any language). However, we can also grab cv_init to return CV_SESS_BAD on * failure at the C API level, and return a set, fixed error code to the user which the user then knows to * trap for... e.g. a NULL Value which PHP can then trap by: * if (!($string = cv_init($config)) { or some such... */ if (vsess == CV_SESS_BAD) /* if the cv_init() call failed... */ { p = ""; /* set p, the value we will return, to NULL */ } else /* we got a valid session returned, which means it worked */ { p = hks_ptr_ptrtostring(vsess); /* Convert the (void*) into a string representation. */ } RETVAL_STRING(p, 1); free(p); return; } /* }}} */ /* {{{ proto string ccvs_done(string sess) Terminate CCVS engine and do cleanup work */ PHP_FUNCTION(ccvs_done) /* cv_done() */ { zval **sess; void *vsess; if ((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &sess) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(sess); /* Convert from the string representation back to a (void*) */ vsess = hks_ptr_stringtoptr(Z_STRVAL_PP(sess)); cv_done(vsess); RETURN_STRING("OK", 1); } /* }}} */ /* {{{ proto string ccvs_new(string session, string invoice) Create a new, blank transaction */ PHP_FUNCTION(ccvs_new) /* cv_new() */ { zval **psess; zval **pinvoice; void *sess; char *invoice; int r; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); if (!Z_STRVAL_PP(psess)) { php_error(E_WARNING, "Invalid session to ccvs_new()"); RETURN_FALSE; } sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); convert_to_string_ex(pinvoice); invoice = Z_STRVAL_PP(pinvoice); r = cv_new(sess, invoice); RETURN_STRING(cv_ret2str(r), 1); } /* }}} */ /* {{{ proto string ccvs_add(string session, string invoice, string argtype, string argval) Add data to a transaction */ PHP_FUNCTION(ccvs_add) /* cv_add() */ { zval **psess; zval **pinvoice; zval **pargtype; zval **pargval; void *sess; char *invoice; int argtype; char *argval; register int r; if ((ZEND_NUM_ARGS() != 4) || (zend_get_parameters_ex(4, &psess, &pinvoice, &pargtype, &pargval) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } /* Get meaningful arguments. */ convert_to_string_ex(psess); convert_to_string_ex(pinvoice); convert_to_string_ex(pargtype); convert_to_string_ex(pargval); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); invoice = Z_STRVAL_PP(pinvoice); argtype = cv_str2arg(Z_STRVAL_PP(pargtype)); argval = Z_STRVAL_PP(pargval); r = cv_add(sess, invoice, argtype, argval); RETURN_STRING(cv_ret2str(r), 1); } /* }}} */ /* * cv_create can't be implemented because of vararg limits in PHP3's C API. * (COMMENT BY DDJ [from original code]) * * BWM: I looked into this, checking in on what cv_create was; it is a deprecated function left in for * backwards compatibility according * to the CCVS C API ref. I didn't try to implement it for that reason. If anyone needs it, they can add it in * themselves I'm sure. */ /* {{{ proto string ccvs_delete(string session, string invoice) Delete a transaction */ PHP_FUNCTION(ccvs_delete) /* cv_delete() */ { zval **psess; zval **pinvoice; void *sess; char *invoice; register int r; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); convert_to_string_ex(pinvoice); invoice = Z_STRVAL_PP(pinvoice); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); r = cv_delete(sess, invoice); RETURN_STRING(cv_ret2str(r), 1); } /* }}} */ /* {{{ proto string ccvs_auth(string session, string invoice) Perform credit authorization test on a transaction */ PHP_FUNCTION(ccvs_auth) /* cv_auth() */ { zval **psess; zval **pinvoice; void *sess; char *invoice; register int r; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); convert_to_string_ex(pinvoice); invoice = Z_STRVAL_PP(pinvoice); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); r = cv_auth(sess, invoice); RETURN_STRING(cv_ret2str(r), 1); } /* }}} */ /* {{{ proto string ccvs_return(string session, string invoice) Transfer funds from the merchant to the credit card holder */ PHP_FUNCTION(ccvs_return) /* cv_return() */ { zval **psess; zval **pinvoice; void *sess; char *invoice; register int r; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); convert_to_string_ex(pinvoice); invoice = Z_STRVAL_PP(pinvoice); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); r = cv_return(sess, invoice); RETURN_STRING(cv_ret2str(r), 1); } /* }}} */ /* {{{ proto string ccvs_reverse(string session, string invoice) Perform a full reversal on an already-processed authorization */ PHP_FUNCTION(ccvs_reverse) /* cv_reverse() */ { zval **psess; zval **pinvoice; void *sess; char *invoice; register int r; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); convert_to_string_ex(pinvoice); invoice = Z_STRVAL_PP(pinvoice); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); r = cv_reverse(sess, invoice); RETURN_STRING(cv_ret2str(r), 1); } /* }}} */ /* {{{ proto string ccvs_sale(string session, string invoice) Transfer funds from the credit card holder to the merchant */ PHP_FUNCTION(ccvs_sale) /* cv_sale() */ { zval **psess; zval **pinvoice; void *sess; char *invoice; register int r; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); convert_to_string_ex(pinvoice); invoice = Z_STRVAL_PP(pinvoice); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); r = cv_sale(sess, invoice); RETURN_STRING(cv_ret2str(r), 1); } /* }}} */ /* {{{ proto string ccvs_void(string session, string invoice) Perform a full reversal on a completed transaction */ PHP_FUNCTION(ccvs_void) /* cv_void() */ { zval **psess; zval **pinvoice; void *sess; char *invoice; register int r; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); convert_to_string_ex(pinvoice); invoice = Z_STRVAL_PP(pinvoice); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); r = cv_void(sess, invoice); RETURN_STRING(cv_ret2str(r), 1); } /* }}} */ /* {{{ proto string ccvs_status(string session, string invoice) Check the status of an invoice */ PHP_FUNCTION(ccvs_status) /* cv_status() */ { zval **psess; zval **pinvoice; void *sess; char *invoice; register int r; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); convert_to_string_ex(pinvoice); invoice = Z_STRVAL_PP(pinvoice); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); r = cv_status(sess, invoice); RETURN_STRING(cv_stat2str(r), 1); } /* }}} */ /* {{{ proto int ccvs_count(string session, string type) Find out how many transactions of a given type are stored in the system */ PHP_FUNCTION(ccvs_count) /* cv_count() */ { zval **psess; zval **ptype; void *sess; int type; register int r; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &ptype) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); convert_to_string_ex(ptype); type = cv_str2stat(Z_STRVAL_PP(ptype)); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); r = cv_count(sess, type); RETURN_LONG(r); } /* }}} */ /* {{{ proto string ccvs_lookup(string session, string invoice, int inum) Look up an item of a particular type in the database */ PHP_FUNCTION(ccvs_lookup) /* cv_lookup() */ { zval **psess; zval **ptype; zval **pinum; void *sess; int type; long inum; register int r; if ((ZEND_NUM_ARGS() != 3) || (zend_get_parameters_ex(3, &psess, &ptype, &pinum) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); convert_to_string_ex(ptype); type = cv_str2stat(Z_STRVAL_PP(ptype)); convert_to_long_ex(pinum); inum = Z_LVAL_PP(pinum); r = cv_lookup(sess, type, inum); RETURN_STRING(cv_textvalue(sess), 1); } /* }}} */ /* {{{ proto string ccvs_report(string session, string type) Return the status of the background communication process */ PHP_FUNCTION(ccvs_report) /* cv_report() */ { zval **psess; zval **ptype; void *sess; int type; long inum; register int r; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &ptype) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); convert_to_string_ex(ptype); type = cv_str2rep(Z_STRVAL_PP(ptype)); r = cv_report(sess, type); RETURN_STRING(cv_stat2str(r), 1); } /* }}} */ /* {{{ proto string ccvs_command(string session, string type, string argval) Performs a command which is peculiar to a single protocol, and thus is not available in the general CCVS API */ PHP_FUNCTION(ccvs_command) /* cv_command() */ { zval **psess; zval **ptype; zval **pargval; void *sess; int type; register int r; char *argval; if ((ZEND_NUM_ARGS() != 3) || (zend_get_parameters_ex(3, &psess, &ptype, &pargval) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); convert_to_string_ex(ptype); type = cv_str2cmd(Z_STRVAL_PP(ptype)); convert_to_string_ex(pargval); argval = Z_STRVAL_PP(pargval); r = cv_command(sess, type, argval); RETURN_STRING(cv_stat2str(r), 1); } /* }}} */ /* {{{ proto string ccvs_textvalue(string session) Get text return value for previous function call */ PHP_FUNCTION(ccvs_textvalue) /* cv_textvalue() */ { zval **psess; void *sess; if ((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &psess) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */ { WRONG_PARAM_COUNT; } convert_to_string_ex(psess); sess = hks_ptr_stringtoptr(Z_STRVAL_PP(psess)); RETURN_STRING(cv_textvalue(sess), 1); } /* }}} */ /* * Our Info Function which reports info on this module out to PHP's phpinfo() function * Brendan W. McAdams on 2000.07.26@16:22.EST */ PHP_MINFO_FUNCTION(ccvs) { php_info_print_table_start(); php_info_print_table_header(2, "RedHat CCVS support", "enabled"); php_info_print_table_row(2, "CCVS Support by", "Brendan W. McAdams <bmcadams@php.net>
& Doug DeJulio <ddj@redhat.com>"); php_info_print_table_row(2, "Release ID", cvsid); php_info_print_table_row(2, "This Release Certified For CCVS Versions", "3.0 and greater"); php_info_print_table_end(); /* DISPLAY_INI_ENTRIES(); */ /* * In the future, we will probably have entries in php.ini for runtime config, in which case we will * Uncomment the DISPLAY_INI_ENTRIES call... */ } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/ccvs/ccvs.h0100644000175200000240000000440107437364611014020 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Brendan W. McAdams | | Doug DeJulio | +----------------------------------------------------------------------+ */ #include extern zend_module_entry ccvs_module_entry; #define ccvs_module_ptr &ccvs_module_entry #define phpext_ccvs_ptr ccvs_module_ptr /* Declare functions not in cv_api.h but in libccvs.a. */ char *hks_ptr_ptrtostring(void *vptr); void *hks_ptr_stringtoptr(char *str); /* Declare the Functions this Module Makes Available to Zend */ /* Pre-declarations of functions */ PHP_FUNCTION(ccvs_init); PHP_FUNCTION(ccvs_done); PHP_FUNCTION(ccvs_new); PHP_FUNCTION(ccvs_add); PHP_FUNCTION(ccvs_delete); PHP_FUNCTION(ccvs_auth); PHP_FUNCTION(ccvs_return); PHP_FUNCTION(ccvs_reverse); PHP_FUNCTION(ccvs_sale); PHP_FUNCTION(ccvs_void); PHP_FUNCTION(ccvs_status); PHP_FUNCTION(ccvs_count); PHP_FUNCTION(ccvs_lookup); PHP_FUNCTION(ccvs_report); PHP_FUNCTION(ccvs_command); PHP_FUNCTION(ccvs_textvalue); PHP_MINFO_FUNCTION(ccvs); /* Declare the information we need to dynamically link this module later */ #if COMPILE_DL DLEXPORT zend_module_entry *get_module(void) { return &ccvs_module_entry; } #endif /* End exports */ php-4.2.3/ext/ccvs/config.m40100644000175200000240000000133007401753417014413 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.10 2025/11/30 18:59:27 sniper Exp $ dnl PHP_ARG_WITH(ccvs, for CCVS support, [ --with-ccvs[=DIR] Include CCVS support]) if test "$PHP_CCVS" != "no"; then if test -r $PHP_CCVS/include/cv_api.h; then CCVS_DIR=$PHP_CCVS else for i in /usr /usr/local /usr/local/ccvs ; do if test -r $i/include/cv_api.h; then CCVS_DIR=$i fi done fi if test -z "$CCVS_DIR"; then AC_MSG_ERROR(not found. Please check your CCVS installation; cv_api.h should be in /include/) fi PHP_ADD_INCLUDE($CCVS_DIR/include) PHP_ADD_LIBRARY_WITH_PATH(ccvs, $CCVS_DIR/lib, CCVS_SHARED_LIBADD) PHP_EXTENSION(ccvs, $ext_shared) PHP_SUBST(CCVS_SHARED_LIBADD) fi php-4.2.3/ext/com/0040755000175200000240000000000007535765574012551 5ustar zeevstaffphp-4.2.3/ext/com/COM.c0100644000175200000240000017714707475644627013347 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Zeev Suraski | | Harald Radi | | Alan Brown | | Wez Furlong | +----------------------------------------------------------------------+ */ /* $Id: COM.c,v 1.64.2.7 2025/05/31 09:59:51 phanto Exp $ */ /* * This module implements support for COM components that support the IDispatch * interface. Both local (COM) and remote (DCOM) components can be accessed. * * Type libraries can be loaded (in order for PHP to recognize automation constants) * by specifying a typelib_file in the PHP .ini file. That file should contain * paths to type libraries, one in every line. By default, constants are registered * as case-sensitive. If you want them to be defined as case-insensitive, add * #case_insensitive or #cis at the end of the type library path. * * This is also the first module to demonstrate Zend's OO syntax overloading * capabilities. CORBA coders are invited to write a CORBA module as well! * * Zeev */ /* * 28.12.2024 * unicode conversion fixed by Harald Radi * * now all these strange '?'s should be disapeared */ /* * 28.1.2025 * VARIANT datatype and pass_by_reference support */ /* * 03.6.2025 * Enhanced Typelib support to include a search by name */ #ifdef PHP_WIN32 #define _WIN32_DCOM #include #include #include #include "php.h" #include "php_ini.h" #include "php_COM.h" #include "php_VARIANT.h" static ITypeLib *php_COM_find_typelib(char *search_string, int mode TSRMLS_DC); static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cleanup TSRMLS_DC); static int do_COM_propget(VARIANT *var_result, comval *obj, pval *arg_property, int cleanup TSRMLS_DC); static void php_register_COM_class(TSRMLS_D); static void php_COM_init(int module_number TSRMLS_DC); static char *php_string_from_clsid(const CLSID *clsid TSRMLS_DC); static int com_enable_events(comval *obj, int enable); static int le_comval; static int codepage; #ifdef _DEBUG int resourcecounter = 1; #endif static unsigned char arg1and2_force_ref[] = { 2, BYREF_FORCE, BYREF_FORCE }; function_entry COM_functions[] = { PHP_FE(com_load, NULL) PHP_FE(com_invoke, NULL) PHP_FE(com_addref, NULL) PHP_FE(com_release, NULL) PHP_FE(com_propget, NULL) PHP_FE(com_propput, NULL) PHP_FE(com_load_typelib, NULL) PHP_FE(com_isenum, NULL) PHP_FE(com_event_sink, arg1and2_force_ref) PHP_FE(com_message_pump, NULL) PHP_FE(com_print_typeinfo, NULL) PHP_FALIAS(com_get, com_propget, NULL) PHP_FALIAS(com_propset, com_propput, NULL) PHP_FALIAS(com_set, com_propput, NULL) { NULL, NULL, NULL } }; static PHP_MINFO_FUNCTION(COM) { DISPLAY_INI_ENTRIES(); } PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult, char **ErrString TSRMLS_DC) { HRESULT hr; int failed = FALSE; unsigned int ArgErr; EXCEPINFO ExceptInfo; *ErrString = NULL; /* @todo use DispInvoke here ? */ if (C_ISREFD(obj)) { if (C_HASTLIB(obj)) { hr = C_TYPEINFO_VT(obj)->Invoke(C_TYPEINFO(obj), C_DISPATCH(obj), dispIdMember, wFlags, pDispParams, pVarResult, &ExceptInfo, &ArgErr); if (FAILED(hr)) { hr = C_DISPATCH_VT(obj)->Invoke(C_DISPATCH(obj), dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT, wFlags, pDispParams, pVarResult, &ExceptInfo, &ArgErr); if (SUCCEEDED(hr)) { /* * ITypLib doesn't work * Release ITypeLib and fall back to IDispatch */ C_TYPEINFO_VT(obj)->Release(C_TYPEINFO(obj)); C_HASTLIB(obj) = FALSE; } } } else { hr = C_DISPATCH_VT(obj)->Invoke(C_DISPATCH(obj), dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT, wFlags, pDispParams, pVarResult, &ExceptInfo, &ArgErr); } if (FAILED(hr)) { switch (hr) { case DISP_E_EXCEPTION: { char *src=estrdup("Unavailable"); int srclen=strlen(src); char *desc=estrdup("Unavailable"); int desclen=strlen(desc); if (ExceptInfo.bstrSource) { efree(src); src = php_OLECHAR_to_char(ExceptInfo.bstrSource, &srclen, codepage TSRMLS_CC); SysFreeString(ExceptInfo.bstrSource); } if (ExceptInfo.bstrDescription) { efree(desc); desc = php_OLECHAR_to_char(ExceptInfo.bstrDescription, &desclen, codepage TSRMLS_CC); SysFreeString(ExceptInfo.bstrDescription); } *ErrString = pemalloc(srclen+desclen+50, 1); sprintf(*ErrString, "Source: %s Description: %s", src, desc); efree(src); efree(desc); if (ExceptInfo.bstrHelpFile) { SysFreeString(ExceptInfo.bstrHelpFile); } } break; case DISP_E_PARAMNOTFOUND: case DISP_E_TYPEMISMATCH: *ErrString = pemalloc(25, 1); sprintf(*ErrString, "Argument: %d", pDispParams->cArgs-ArgErr+1); break; } } if (pVarResult && (V_VT(pVarResult) == VT_EMPTY)) { V_VT(pVarResult) = VT_I4; V_I4(pVarResult) = hr; } return hr; } else { return DISP_E_UNKNOWNINTERFACE; } } PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId TSRMLS_DC) { HRESULT hr; if (C_ISREFD(obj)) { if (C_HASTLIB(obj)) { hr = C_TYPEINFO_VT(obj)->GetIDsOfNames(C_TYPEINFO(obj), rgszNames, 1, rgDispId); if (FAILED(hr)) { hr = C_DISPATCH_VT(obj)->GetIDsOfNames(C_DISPATCH(obj), &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId); if (SUCCEEDED(hr)) { /* * ITypLib doesn't work * Release ITypeLib and fall back to IDispatch */ C_TYPEINFO_VT(obj)->Release(C_TYPEINFO(obj)); C_HASTLIB(obj) = FALSE; } } } else { hr = C_DISPATCH_VT(obj)->GetIDsOfNames(C_DISPATCH(obj), &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId); } return hr; } else { return DISP_E_UNKNOWNINTERFACE; } } PHPAPI HRESULT php_COM_release(comval *obj TSRMLS_DC) { HRESULT hr; if (obj->refcount > 1) { C_RELEASE(obj); } else if (obj->refcount == 1) { if (C_HASTLIB(obj)) { C_TYPEINFO_VT(obj)->Release(C_TYPEINFO(obj)); } if (C_HASENUM(obj)) { hr = C_ENUMVARIANT_VT(obj)->Release(C_ENUMVARIANT(obj)); } hr = C_DISPATCH_VT(obj)->Release(C_DISPATCH(obj)); C_RELEASE(obj); } return obj->refcount; } PHPAPI HRESULT php_COM_addref(comval *obj TSRMLS_DC) { if (C_ISREFD(obj)) { C_ADDREF(obj); } return obj->refcount; } PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* ppDisp, int cleanup TSRMLS_DC) { HRESULT hr = 1; DISPPARAMS dispparams; VARIANT *var_result; IDispatch FAR* pDisp; pDisp = *ppDisp; if (cleanup) { *ppDisp = NULL; } C_REFCOUNT(obj) = 1; C_DISPATCH(obj) = pDisp; C_HASTLIB(obj) = SUCCEEDED(C_DISPATCH_VT(obj)->GetTypeInfo(C_DISPATCH(obj), 0, LANG_NEUTRAL, &C_TYPEINFO(obj))); dispparams.rgvarg = NULL; dispparams.rgdispidNamedArgs = NULL; dispparams.cArgs = 0; dispparams.cNamedArgs = 0; ALLOC_VARIANT(var_result); if (C_HASENUM(obj) = SUCCEEDED(C_DISPATCH_VT(obj)->Invoke(C_DISPATCH(obj), DISPID_NEWENUM, &IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD|DISPATCH_PROPERTYGET, &dispparams, var_result, NULL, NULL))) { if (V_VT(var_result) == VT_UNKNOWN) { V_UNKNOWN(var_result)->lpVtbl->AddRef(V_UNKNOWN(var_result)); C_HASENUM(obj) = SUCCEEDED(V_UNKNOWN(var_result)->lpVtbl->QueryInterface(V_UNKNOWN(var_result), &IID_IEnumVARIANT, (void**)&C_ENUMVARIANT(obj))); } else if (V_VT(var_result) == VT_DISPATCH) { V_DISPATCH(var_result)->lpVtbl->AddRef(V_DISPATCH(var_result)); C_HASENUM(obj) = SUCCEEDED(V_DISPATCH(var_result)->lpVtbl->QueryInterface(V_DISPATCH(var_result), &IID_IEnumVARIANT, (void**)&C_ENUMVARIANT(obj))); } } FREE_VARIANT(var_result); if (!cleanup) { hr = C_DISPATCH_VT(obj)->AddRef(C_DISPATCH(obj)); } #ifdef _DEBUG obj->resourceindex = resourcecounter++; #endif return hr; } PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup TSRMLS_DC) { HRESULT hr; C_HASTLIB(obj) = C_HASTLIB(clone); C_HASENUM(obj) = C_HASENUM(obj); C_DISPATCH(obj) = C_DISPATCH(clone); C_TYPEINFO(obj) = C_TYPEINFO(clone); if (cleanup || !C_ISREFD(obj)) { obj->refcount = clone->refcount; clone->refcount = 0; } else { if (C_HASTLIB(obj)) { C_TYPEINFO_VT(obj)->AddRef(C_TYPEINFO(obj)); } if (C_HASENUM(obj)) { C_ENUMVARIANT_VT(obj)->AddRef(C_ENUMVARIANT(obj)); } hr = C_DISPATCH_VT(obj)->AddRef(C_DISPATCH(obj)); obj->refcount = 1; } #ifdef _DEBUG obj->resourceindex = resourcecounter++; #endif return hr; } PHPAPI char *php_COM_error_message(HRESULT hr TSRMLS_DC) { void *pMsgBuf; if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &pMsgBuf, 0, NULL)) { char error_string[] = "No description available"; pMsgBuf = LocalAlloc(LMEM_FIXED, sizeof(error_string)); memcpy(pMsgBuf, error_string, sizeof(error_string)); } return pMsgBuf; } static char *php_string_from_clsid(const CLSID *clsid TSRMLS_DC) { LPOLESTR ole_clsid; char *clsid_str; StringFromCLSID(clsid, &ole_clsid); clsid_str = php_OLECHAR_to_char(ole_clsid, NULL, codepage TSRMLS_CC); LocalFree(ole_clsid); return clsid_str; } PHPAPI HRESULT php_COM_destruct(comval *obj TSRMLS_DC) { HRESULT hr = S_OK; com_enable_events(obj, FALSE); if (obj->sinkdispatch) obj->sinkdispatch->lpVtbl->Release(obj->sinkdispatch); if (C_ISREFD(obj)) { C_REFCOUNT(obj) = 1; hr = php_COM_release(obj TSRMLS_CC); } efree(obj); return hr; } static void php_comval_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { php_COM_destruct(rsrc->ptr TSRMLS_CC); } static PHP_INI_MH(OnTypelibFileChange) { FILE *typelib_file; char *typelib_name_buffer; char *strtok_buf = NULL; int interactive; interactive = CG(interactive); if (!new_value || (typelib_file = VCWD_FOPEN(new_value, "r"))==NULL) { return FAILURE; } if (interactive) { printf("Loading type libraries..."); fflush(stdout); } typelib_name_buffer = (char *) emalloc(sizeof(char)*1024); while (fgets(typelib_name_buffer, 1024, typelib_file)) { ITypeLib *pTL; char *typelib_name; char *modifier, *ptr; int mode = CONST_CS | CONST_PERSISTENT; /* CONST_PERSISTENT is ok here */ if (typelib_name_buffer[0]==';') { continue; } typelib_name = php_strtok_r(typelib_name_buffer, "\r\n", &strtok_buf); /* get rid of newlines */ if (typelib_name == NULL) { continue; } typelib_name = php_strtok_r(typelib_name, "#", &strtok_buf); modifier = php_strtok_r(NULL, "#", &strtok_buf); if (modifier != NULL) { if (!strcmp(modifier, "cis") || !strcmp(modifier, "case_insensitive")) { mode &= ~CONST_CS; } } /* Remove leading/training white spaces on search_string */ while (isspace(*typelib_name)) {/* Ends on '\0' in worst case */ typelib_name ++; } ptr = typelib_name + strlen(typelib_name) - 1; while ((ptr != typelib_name) && isspace(*ptr)) { *ptr = '\0'; ptr--; } if (interactive) { printf("\rLoading %-60s\r", typelib_name); } if ((pTL = php_COM_find_typelib(typelib_name, mode TSRMLS_CC)) != NULL) { php_COM_load_typelib(pTL, mode TSRMLS_CC); pTL->lpVtbl->Release(pTL); } } efree(typelib_name_buffer); fclose(typelib_file); if (interactive) { printf("\r%70s\r", ""); } return SUCCESS; } PHP_INI_BEGIN() PHP_INI_ENTRY_EX("com.allow_dcom", "0", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb) PHP_INI_ENTRY_EX("com.autoregister_typelib", "0", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb) PHP_INI_ENTRY_EX("com.autoregister_verbose", "0", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb) PHP_INI_ENTRY_EX("com.autoregister_casesensitive", "1", PHP_INI_SYSTEM, NULL, php_ini_boolean_displayer_cb) PHP_INI_ENTRY("com.typelib_file", "", PHP_INI_SYSTEM, OnTypelibFileChange) PHP_INI_END() /* {{{ proto int com_load(string module_name [, string remote_host [, int codepage [, string typelib]]]) Loads a COM module */ PHP_FUNCTION(com_load) { pval *module_name, *code_page, *typelib = NULL, *server_name = NULL, *user_name=NULL, *password=NULL, *domain=NULL; CLSID clsid; HRESULT hr; OLECHAR *ProgID; comval *obj; char *error_message; char *clsid_str; int mode = 0; ITypeLib *pTL; CLSCTX flags = CLSCTX_SERVER; codepage = CP_ACP; switch (ZEND_NUM_ARGS()) { case 1: zend_get_parameters(ht, 1, &module_name); break; case 2: zend_get_parameters(ht, 2, &module_name, &server_name); break; case 3: zend_get_parameters(ht, 3, &module_name, &server_name, &code_page); convert_to_long_ex(&code_page); codepage = Z_LVAL_P(code_page); break; case 4: zend_get_parameters(ht, 4, &module_name, &server_name, &code_page, &typelib); convert_to_string_ex(&typelib); convert_to_long_ex(&code_page); codepage = Z_LVAL_P(code_page); break; default: ZEND_WRONG_PARAM_COUNT(); } if (server_name != NULL) { /* What is server name? A String or an array? */ if (Z_TYPE_P(server_name) == IS_NULL) { server_name = NULL; } else if (Z_TYPE_P(server_name) == IS_ARRAY) { pval **tmp; /* DAB: 22 Sept 2025 * Aha - we have a number of possible arguments. * They are in the hash By name: Server, Domain, Username, Password * Flags. * This has been crafted to maintian maximum backward compatability. * If the server name is specified as a string, then the function * should behave as before by defaulting username and password and * using the (I believe) incorrect CLSCTX_SERVER instantiation * paramter. However if server is specified in this array then we * use either CLSCTX_REMOTE_SERVER or whatever flags are specified * in the array */ HashTable *ht = Z_ARRVAL(*server_name); if (FAILURE == zend_hash_find(ht, "Server", 7, (void **) &tmp)) { server_name = NULL; } else { server_name = *tmp; convert_to_string_ex(&server_name); /* CLSCTX_SERVER includes INPROC and LOCAL SERVER. This means * that any local server will be instantiated BEFORE even * looking on a remote server. Thus if we have a server name, * probably we want to access a remote machine or we would not * have bothered specifying it. So it would be wrong to to * connect locally. Futher, unless the name passed is a GUID, * there has to be something to map the Prog.Id to GUID and * unless that has been modified to remove the information * about local instantiation CLSCTX_SERVER would force a local * instantiation This setting can be overridden below if the * user specifies a flags element */ flags = CLSCTX_REMOTE_SERVER; } if (FAILURE == zend_hash_find(ht, "Username", 9, (void **) &tmp)) { user_name = NULL; } else { user_name = *tmp; convert_to_string_ex(&user_name); } if (FAILURE == zend_hash_find(ht, "Domain", 7, (void **) &tmp)) { domain = NULL; } else { domain = *tmp; convert_to_string_ex(&domain); } if (FAILURE == zend_hash_find(ht, "Password", 9, (void **) &tmp)) { password=NULL; } else { password = *tmp; convert_to_string_ex(&password); } if (SUCCESS == zend_hash_find(ht, "Flags", 6, (void **) &tmp)) { convert_to_long_ex(tmp); flags = (CLSCTX) Z_LVAL_PP(tmp); } } else { if (!INI_INT("com.allow_dcom")) { php_error(E_WARNING, "DCOM is disabled"); RETURN_NULL(); } else { flags = CLSCTX_REMOTE_SERVER; convert_to_string_ex(&server_name); } } } ALLOC_COM(obj); convert_to_string_ex(&module_name); ProgID = php_char_to_OLECHAR(Z_STRVAL_P(module_name), Z_STRLEN_P(module_name), codepage TSRMLS_CC); /* obtain CLSID */ if (FAILED(CLSIDFromString(ProgID, &clsid))) { /* Perhaps this is a Moniker? */ IBindCtx *pBindCtx; IMoniker *pMoniker; ULONG ulEaten; /* @todo if (server_name) */ if (!server_name) { /* @todo shouldn't the bind context be fetched on module startup and kept as a global shared instance ? * all calls to BindToObject would deliver the same instance then (as desired) * IBindCtx::RegisterObjectBound() should be called then after mkparsedisplayname() * * @todo use mkparsedisplaynameex() ? */ if (SUCCEEDED(hr = CreateBindCtx(0, &pBindCtx))) { if (SUCCEEDED(hr = MkParseDisplayName(pBindCtx, ProgID, &ulEaten, &pMoniker))) { hr = pMoniker->lpVtbl->BindToObject(pMoniker, pBindCtx, NULL, &IID_IDispatch, (LPVOID *) &C_DISPATCH(obj)); pMoniker->lpVtbl->Release(pMoniker); } pBindCtx->lpVtbl->Release(pBindCtx); } } else { hr = MK_E_SYNTAX; } efree(ProgID); if (FAILED(hr)) { php_COM_destruct(obj TSRMLS_CC); error_message = php_COM_error_message(hr TSRMLS_CC); php_error(E_WARNING,"Invalid ProgID, GUID string, or Moniker: %s", error_message); LocalFree(error_message); RETURN_NULL(); } } else { efree(ProgID); /* obtain IDispatch */ if (!server_name) { hr = CoCreateInstance(&clsid, NULL, flags, &IID_IDispatch, (LPVOID *) &C_DISPATCH(obj)); } else { COSERVERINFO server_info; MULTI_QI pResults; COAUTHIDENTITY authid; COAUTHINFO authinfo = {RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, &authid, EOAC_NONE}; server_info.dwReserved1=0; server_info.dwReserved2=0; server_info.pwszName = php_char_to_OLECHAR(Z_STRVAL_P(server_name), Z_STRLEN_P(server_name), codepage TSRMLS_CC); if (user_name) { /* Z_STRVAL_P(user_name); */ /* Parse Username into domain\username */ authid.User = (WCHAR *) Z_STRVAL_P(user_name); authid.UserLength = Z_STRLEN_P(user_name); if (password) { authid.Password = (USHORT *) Z_STRVAL_P(password); authid.PasswordLength = Z_STRLEN_P(password); } else { authid.Password = (USHORT *) ""; authid.PasswordLength = 0; } if (domain) { authid.Domain = (USHORT *) Z_STRVAL_P(domain); authid.DomainLength = Z_STRLEN_P(domain); } else { authid.Domain = (USHORT *) ""; authid.DomainLength = 0; } authid.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI; server_info.pAuthInfo=&authinfo; } else { server_info.pAuthInfo=NULL; } pResults.pIID = &IID_IDispatch; pResults.pItf = NULL; pResults.hr = S_OK; hr=CoCreateInstanceEx(&clsid, NULL, flags, &server_info, 1, &pResults); if (SUCCEEDED(hr)) { hr = pResults.hr; C_DISPATCH(obj) = (IDispatch *) pResults.pItf; } efree(server_info.pwszName); } if (FAILED(hr)) { error_message = php_COM_error_message(hr TSRMLS_CC); clsid_str = php_string_from_clsid(&clsid TSRMLS_CC); php_error(E_WARNING,"Unable to obtain IDispatch interface for CLSID %s: %s",clsid_str,error_message); LocalFree(error_message); efree(clsid_str); php_COM_destruct(obj TSRMLS_CC); RETURN_NULL(); } } php_COM_set(obj, &C_DISPATCH(obj), TRUE TSRMLS_CC); if (INI_INT("com.autoregister_casesensitive")) { mode |= CONST_CS; } if (C_HASTLIB(obj)) { if (INI_INT("com.autoregister_typelib")) { unsigned int idx; /* @todo check if typlib isn't already loaded */ if (C_TYPEINFO_VT(obj)->GetContainingTypeLib(C_TYPEINFO(obj), &pTL, &idx) == S_OK) { php_COM_load_typelib(pTL, mode TSRMLS_CC); pTL->lpVtbl->Release(pTL); } } } else { if (typelib != NULL) { ITypeLib *pTL; if ((pTL = php_COM_find_typelib(Z_STRVAL_P(typelib), mode TSRMLS_CC)) != NULL) { C_HASTLIB(obj) = SUCCEEDED(pTL->lpVtbl->GetTypeInfo(pTL, 0, &C_TYPEINFO(obj))); /* idx 0 should deliver the ITypeInfo for the IDispatch Interface */ if (INI_INT("com.autoregister_typelib")) { php_COM_load_typelib(pTL, mode TSRMLS_CC); } pTL->lpVtbl->Release(pTL); } } } RETURN_RESOURCE(zend_list_insert(obj, IS_COM)); } /* }}} */ int do_COM_invoke(comval *obj, pval *function_name, VARIANT *var_result, pval **arguments, int arg_count TSRMLS_DC) { DISPID dispid; DISPPARAMS dispparams; HRESULT hr; OLECHAR *funcname; SAFEARRAY *pSA; SAFEARRAYBOUND rgsabound[1]; VARIANT *variant_args; char *error_message; int current_arg, current_variant; unsigned long count; if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "next")) { /* Grab one argument off the stack, allocate enough * VARIANTs * Get the IEnumVariant interface and call ->Next(); */ switch (arg_count) { case 0: count = 1; break; case 1: convert_to_long_ex(&arguments[0]); count = Z_LVAL_P(arguments[0]); break; default: php_error(E_WARNING,"Wrong argument count to IEnumVariant::Next()"); return FAILURE; } rgsabound[0].lLbound = 0; rgsabound[0].cElements = count; if ((pSA = SafeArrayCreate(VT_VARIANT, 1, rgsabound)) == NULL) { VariantInit(var_result); return FAILURE; } else { V_ARRAY(var_result) = pSA; V_VT(var_result) = VT_VARIANT|VT_ARRAY; } if (FAILED(hr = C_ENUMVARIANT_VT(obj)->Next(C_ENUMVARIANT(obj), count, pSA->pvData, &count))) { char *error_message = php_COM_error_message(hr TSRMLS_CC); php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message); efree(error_message); VariantClear(var_result); return FAILURE; } if (count != rgsabound[0].cElements) { rgsabound[0].cElements = count; if (FAILED(SafeArrayRedim(pSA, rgsabound))) { char *error_message = php_COM_error_message(hr TSRMLS_CC); php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message); efree(error_message); VariantClear(var_result); return FAILURE; } } /* return a single element if next() was called without count */ if ((arg_count == 0) && (count == 1)) { long index[] = {0}; SafeArrayGetElement(pSA, index, var_result); SafeArrayDestroy(pSA); } return SUCCESS; } else if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "all")) { #define FETCH_BLOCKSIZE 10 /* fetch blocks of 10 elements */ count = FETCH_BLOCKSIZE; rgsabound[0].lLbound = 0; rgsabound[0].cElements = count; if ((pSA = SafeArrayCreate(VT_VARIANT, 1, rgsabound)) == NULL) { VariantInit(var_result); return FAILURE; } else { V_ARRAY(var_result) = pSA; V_VT(var_result) = VT_VARIANT|VT_ARRAY; } /* blah*/ } else if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "reset")) { if (FAILED(hr = C_ENUMVARIANT_VT(obj)->Reset(C_ENUMVARIANT(obj)))) { char *error_message = php_COM_error_message(hr TSRMLS_CC); php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message); efree(error_message); return FAILURE; } return SUCCESS; } else if (C_HASENUM(obj) && strstr(Z_STRVAL_P(function_name), "skip")) { unsigned long count; switch (arg_count) { case 0: count = 1; break; case 1: convert_to_long_ex(&arguments[0]); count = Z_LVAL_P(arguments[0]); break; default: php_error(E_WARNING,"Wrong argument count to IEnumVariant::Skip()"); return FAILURE; } if (FAILED(hr = C_ENUMVARIANT_VT(obj)->Skip(C_ENUMVARIANT(obj), count))) { char *error_message = php_COM_error_message(hr TSRMLS_CC); php_error(E_WARNING,"IEnumVariant::Next() failed: %s", error_message); efree(error_message); return FAILURE; } return SUCCESS; } else { char *ErrString; funcname = php_char_to_OLECHAR(Z_STRVAL_P(function_name), Z_STRLEN_P(function_name), codepage TSRMLS_CC); hr = php_COM_get_ids_of_names(obj, &funcname, &dispid TSRMLS_CC); if (FAILED(hr)) { error_message = php_COM_error_message(hr TSRMLS_CC); php_error(E_WARNING,"Unable to lookup %s: %s", Z_STRVAL_P(function_name), error_message); LocalFree(error_message); efree(funcname); return FAILURE; } variant_args = (VARIANT *) emalloc(sizeof(VARIANT) * arg_count); for (current_arg=0; current_argIDispatch */ VariantClear(&variant_args[current_arg]); } } efree(variant_args); if (FAILED(hr)) { error_message = php_COM_error_message(hr TSRMLS_CC); if (ErrString) { php_error(E_WARNING,"Invoke() failed: %s %s", error_message, ErrString); pefree(ErrString, 1); } else { php_error(E_WARNING,"Invoke() failed: %s", error_message); } LocalFree(error_message); return FAILURE; } } return SUCCESS; } /* {{{ proto mixed com_invoke(int module, string handler_name [, mixed arg [, mixed ...]]) Invokes a COM module */ PHP_FUNCTION(com_invoke) { pval **arguments; pval *object, *function_name; comval *obj; int type; int arg_count = ZEND_NUM_ARGS(); VARIANT *var_result; if (arg_count<2) { ZEND_WRONG_PARAM_COUNT(); } arguments = (pval **) emalloc(sizeof(pval *)*arg_count); if (zend_get_parameters_array(ht, arg_count, arguments) == FAILURE) { RETURN_NULL(); } object = arguments[0]; function_name = arguments[1]; /* obtain IDispatch interface */ convert_to_long(object); obj = (comval *)zend_list_find(Z_LVAL_P(object), &type); if (!obj || (type != IS_COM)) { php_error(E_WARNING,"%d is not a COM object handler", Z_STRVAL_P(function_name)); RETURN_NULL(); } /* obtain property/method handler */ convert_to_string_ex(&function_name); ALLOC_VARIANT(var_result); if (do_COM_invoke(obj, function_name, var_result, arguments+2, arg_count-2 TSRMLS_CC)==FAILURE) { FREE_VARIANT(var_result); efree(arguments); RETURN_NULL(); } RETVAL_VARIANT(var_result); efree(arguments); } /* }}} */ /* {{{ proto mixed com_release(int module) Releases a COM object */ PHP_FUNCTION(com_release) { pval *object; comval *obj; int type; int arg_count = ZEND_NUM_ARGS(); if (arg_count != 1) { ZEND_WRONG_PARAM_COUNT(); } if (zend_get_parameters(ht, 1, &object)==FAILURE) { RETURN_FALSE; } /* obtain IDispatch interface */ convert_to_long_ex(&object); obj = (comval *)zend_list_find(Z_LVAL_P(object), &type); if (!obj || (type != IS_COM)) { php_error(E_WARNING,"%d is not a COM object handler"); RETURN_FALSE; } RETURN_LONG(php_COM_release(obj TSRMLS_CC)) } /* }}} */ /* {{{ proto mixed com_addref(int module) Increases the reference counter on a COM object */ PHP_FUNCTION(com_addref) { pval *object; comval *obj; int type; int arg_count = ZEND_NUM_ARGS(); if (arg_count != 1) { ZEND_WRONG_PARAM_COUNT(); } if (zend_get_parameters(ht, 1, &object)==FAILURE) { RETURN_FALSE; } /* obtain IDispatch interface */ convert_to_long_ex(&object); obj = (comval *)zend_list_find(Z_LVAL_P(object), &type); if (!obj || (type != IS_COM)) { php_error(E_WARNING,"%d is not a COM object handler"); RETURN_FALSE; } RETURN_LONG(php_COM_addref(obj TSRMLS_CC)); } /* }}} */ /* {{{ proto bool com_message_pump([int timeoutms]) Process COM messages, sleeping for up to timeoutms milliseconds */ PHP_FUNCTION(com_message_pump) { long timeoutms = 0; MSG msg; DWORD result; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &timeoutms) == FAILURE) RETURN_FALSE; result = MsgWaitForMultipleObjects(0, NULL, FALSE, timeoutms, QS_ALLINPUT); if (result == WAIT_OBJECT_0) { while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } /* we processed messages */ RETVAL_TRUE; } else { /* we did not process messages (timed out) */ RETVAL_FALSE; } } /* }}} */ static int com_enable_events(comval *obj, int enable) { if (obj->sinkdispatch) { IConnectionPointContainer *cont; IConnectionPoint *point; if (SUCCEEDED(C_DISPATCH_VT(obj)->QueryInterface(C_DISPATCH(obj), &IID_IConnectionPointContainer, (void**)&cont))) { if (SUCCEEDED(cont->lpVtbl->FindConnectionPoint(cont, &obj->sinkid, &point))) { if (enable) { point->lpVtbl->Advise(point, (IUnknown*)obj->sinkdispatch, &obj->sinkcookie); } else { point->lpVtbl->Unadvise(point, obj->sinkcookie); } point->lpVtbl->Release(point); } cont->lpVtbl->Release(cont); } } return 0; } static const struct { VARTYPE vt; const char *name; } vt_names[] = { { VT_NULL, "VT_NULL" }, { VT_EMPTY, "VT_EMPTY" }, { VT_UI1, "VT_UI1" }, { VT_I2, "VT_I2" }, { VT_I4, "VT_I4" }, { VT_R4, "VT_R4" }, { VT_R8, "VT_R8" }, { VT_BOOL, "VT_BOOL" }, { VT_ERROR, "VT_ERROR" }, { VT_CY, "VT_CY" }, { VT_DATE, "VT_DATE" }, { VT_BSTR, "VT_BSTR" }, { VT_DECIMAL, "VT_DECIMAL" }, { VT_UNKNOWN, "VT_UNKNOWN" }, { VT_DISPATCH, "VT_DISPATCH" }, { VT_VARIANT, "VT_VARIANT" }, { VT_I1, "VT_I1" }, { VT_UI2, "VT_UI2" }, { VT_UI4, "VT_UI4" }, { VT_INT, "VT_INT" }, { VT_UINT, "VT_UINT" }, { VT_ARRAY, "VT_ARRAY" }, { VT_BYREF, "VT_BYREF" }, { VT_VOID, "VT_VOID" }, { VT_PTR, "VT_PTR" }, { VT_HRESULT, "VT_HRESULT" }, { 0, NULL } }; static inline const char *vt_to_string(VARTYPE vt) { int i; for (i = 0; vt_names[i].name != NULL; i++) { if (vt_names[i].vt == vt) return vt_names[i].name; } return "?"; } static int process_typeinfo(ITypeInfo *typeinfo, HashTable *id_to_name, int printdef, GUID *guid TSRMLS_DC) { TYPEATTR *attr; FUNCDESC *func; int i; OLECHAR *olename; char *ansiname = NULL; unsigned int ansinamelen; int ret = 0; if (FAILED(typeinfo->lpVtbl->GetTypeAttr(typeinfo, &attr))) return 0; /* verify that it is suitable */ if (id_to_name == NULL || attr->typekind == TKIND_DISPATCH) { if (guid) memcpy(guid, &attr->guid, sizeof(GUID)); if (printdef) { char *guidstring; typeinfo->lpVtbl->GetDocumentation(typeinfo, MEMBERID_NIL, &olename, NULL, NULL, NULL); ansiname = php_OLECHAR_to_char(olename, &ansinamelen, codepage TSRMLS_CC); SysFreeString(olename); guidstring = php_string_from_clsid(&attr->guid TSRMLS_CC); php_printf("class %s { /* GUID=%s */\n", ansiname, guidstring); efree(guidstring); efree(ansiname); } if (id_to_name) zend_hash_init(id_to_name, 0, NULL, ZVAL_PTR_DTOR, 0); /* So we've got the dispatch interface; lets list the event methods */ for (i = 0; i < attr->cFuncs; i++) { zval *tmp; DISPID lastid = 0; /* for props */ int isprop; if (FAILED(typeinfo->lpVtbl->GetFuncDesc(typeinfo, i, &func))) break; isprop = (func->invkind & DISPATCH_PROPERTYGET || func->invkind & DISPATCH_PROPERTYPUT); if (!isprop || lastid != func->memid) { lastid = func->memid; typeinfo->lpVtbl->GetDocumentation(typeinfo, func->memid, &olename, NULL, NULL, NULL); ansiname = php_OLECHAR_to_char(olename, &ansinamelen, codepage TSRMLS_CC); SysFreeString(olename); if (printdef) { int j; char *funcdesc; unsigned int funcdesclen, cnames = 0; BSTR *names; names = (BSTR*)emalloc((func->cParams + 1) * sizeof(BSTR)); typeinfo->lpVtbl->GetNames(typeinfo, func->memid, names, func->cParams + 1, &cnames); /* first element is the function name */ SysFreeString(names[0]); php_printf("\t/* DISPID=%d */\n", func->memid); if (func->elemdescFunc.tdesc.vt != VT_VOID) { php_printf("\t/* %s [%d] */\n", vt_to_string(func->elemdescFunc.tdesc.vt), func->elemdescFunc.tdesc.vt ); } if (isprop) { typeinfo->lpVtbl->GetDocumentation(typeinfo, func->memid, NULL, &olename, NULL, NULL); if (olename) { funcdesc = php_OLECHAR_to_char(olename, &funcdesclen, codepage TSRMLS_CC); SysFreeString(olename); php_printf("\t/* %s */\n", funcdesc); efree(funcdesc); } php_printf("\tvar $%s;\n\n", ansiname); } else { /* a function */ php_printf("\tfunction %s(\n", ansiname); for (j = 0; j < func->cParams; j++) { ELEMDESC *elem = &func->lprgelemdescParam[j]; php_printf("\t\t/* %s [%d] ", vt_to_string(elem->tdesc.vt), elem->tdesc.vt); if (elem->paramdesc.wParamFlags & PARAMFLAG_FIN) php_printf("[in]"); if (elem->paramdesc.wParamFlags & PARAMFLAG_FOUT) php_printf("[out]"); if (elem->tdesc.vt == VT_PTR) { /* what does it point to ? */ php_printf(" --> %s [%d] ", vt_to_string(elem->tdesc.lptdesc->vt), elem->tdesc.lptdesc->vt ); } /* when we handle prop put and get, this will look nicer */ if (j+1 < (int)cnames) { funcdesc = php_OLECHAR_to_char(names[j+1], &funcdesclen, codepage TSRMLS_CC); SysFreeString(names[j+1]); } else { funcdesc = "???"; } php_printf(" */ %s%s%c\n", elem->tdesc.vt == VT_PTR ? "&$" : "$", funcdesc, j == func->cParams - 1 ? ' ' : ',' ); if (j+1 < (int)cnames) efree(funcdesc); } php_printf("\t\t)\n\t{\n"); typeinfo->lpVtbl->GetDocumentation(typeinfo, func->memid, NULL, &olename, NULL, NULL); if (olename) { funcdesc = php_OLECHAR_to_char(olename, &funcdesclen, codepage TSRMLS_CC); SysFreeString(olename); php_printf("\t\t/* %s */\n", funcdesc); efree(funcdesc); } php_printf("\t}\n"); } efree(names); } if (id_to_name) { zend_str_tolower(ansiname, ansinamelen); MAKE_STD_ZVAL(tmp); ZVAL_STRINGL(tmp, ansiname, ansinamelen, 0); zend_hash_index_update(id_to_name, func->memid, (void*)&tmp, sizeof(zval *), NULL); } } typeinfo->lpVtbl->ReleaseFuncDesc(typeinfo, func); } if (printdef) php_printf("}\n"); ret = 1; } else { zend_error(E_WARNING, "Thats not a dispatchable interface!! type kind = %08x\n", attr->typekind); } typeinfo->lpVtbl->ReleaseTypeAttr(typeinfo, attr); return ret; } static ITypeInfo *locate_typeinfo(char *typelibname, comval *obj, char *dispname, int sink TSRMLS_DC) { ITypeInfo *typeinfo = NULL; ITypeLib *typelib = NULL; int gotguid = 0; GUID iid; if (obj) { if (dispname == NULL && sink) { IProvideClassInfo2 *pci2; IProvideClassInfo *pci; if (SUCCEEDED(C_DISPATCH_VT(obj)->QueryInterface(C_DISPATCH(obj), &IID_IProvideClassInfo2, (void**)&pci2))) { gotguid = SUCCEEDED(pci2->lpVtbl->GetGUID(pci2, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &iid)); pci2->lpVtbl->Release(pci2); } if (!gotguid && SUCCEEDED(C_DISPATCH_VT(obj)->QueryInterface(C_DISPATCH(obj), &IID_IProvideClassInfo, (void**)&pci))) { /* examine the available interfaces */ /* TODO: write some code here */ pci->lpVtbl->Release(pci); } } else if (dispname && C_HASTLIB(obj)) { unsigned int idx; /* get the library from the object; the rest will be dealt with later */ C_TYPEINFO_VT(obj)->GetContainingTypeLib(C_TYPEINFO(obj), &typelib, &idx); } else if (typelibname == NULL) { C_DISPATCH_VT(obj)->GetTypeInfo(C_DISPATCH(obj), 0, LANG_NEUTRAL, &typeinfo); } } else if (typelibname) { /* Fetch the typelibrary and use that to look things up */ typelib = php_COM_find_typelib(typelibname, CONST_CS TSRMLS_CC); } if (!gotguid && dispname && typelib) { unsigned short cfound; MEMBERID memid; OLECHAR *olename = php_char_to_OLECHAR(dispname, strlen(dispname), CP_ACP TSRMLS_CC); cfound = 1; if (FAILED(typelib->lpVtbl->FindName(typelib, olename, 0, &typeinfo, &memid, &cfound)) || cfound == 0) { CLSID coclass; ITypeInfo *coinfo; /* assume that it might be a progid instead */ if (SUCCEEDED(CLSIDFromProgID(olename, &coclass)) && SUCCEEDED(typelib->lpVtbl->GetTypeInfoOfGuid(typelib, &coclass, &coinfo))) { /* enumerate implemented interfaces and pick the one as indicated by sink */ TYPEATTR *attr; int i; coinfo->lpVtbl->GetTypeAttr(coinfo, &attr); for (i = 0; i < attr->cImplTypes; i++) { HREFTYPE rt; int tf; if (FAILED(coinfo->lpVtbl->GetImplTypeFlags(coinfo, i, &tf))) continue; if ((sink && tf == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) || (!sink && (tf & IMPLTYPEFLAG_FSOURCE) == 0)) { /* flags match what we are looking for */ if (SUCCEEDED(coinfo->lpVtbl->GetRefTypeOfImplType(coinfo, i, &rt))) if (SUCCEEDED(coinfo->lpVtbl->GetRefTypeInfo(coinfo, rt, &typeinfo))) break; } } coinfo->lpVtbl->ReleaseTypeAttr(coinfo, attr); coinfo->lpVtbl->Release(coinfo); } } efree(olename); } else if (gotguid) { typelib->lpVtbl->GetTypeInfoOfGuid(typelib, &iid, &typeinfo); } if (typelib) typelib->lpVtbl->Release(typelib); return typeinfo; } /* {{{ proto bool com_print_typeinfo(mixed comobject | string typelib, string dispinterface, bool wantsink) Print out a PHP class definition for a dispatchable interface */ PHP_FUNCTION(com_print_typeinfo) { zval *arg1; char *ifacename = NULL; char *typelibname = NULL; int ifacelen; zend_bool wantsink = 0; comval *obj = NULL; ITypeInfo *typeinfo; if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/s!b", &arg1, &ifacename, &ifacelen, &wantsink)) { RETURN_FALSE; } if (Z_TYPE_P(arg1) == IS_OBJECT && (Z_OBJCE_P(arg1) == &COM_class_entry || !strcmp(Z_OBJCE_P(arg1)->name, "COM"))) { zval **tmp; zend_hash_index_find(Z_OBJPROP_P(arg1), 0, (void**)&tmp); ZEND_FETCH_RESOURCE(obj, comval*, tmp, -1, "comval", IS_COM); } else if (Z_TYPE_P(arg1) == IS_RESOURCE) { ZEND_FETCH_RESOURCE(obj, comval*, &arg1, -1, "comval", IS_COM); } else { convert_to_string(arg1); typelibname = Z_STRVAL_P(arg1); } typeinfo = locate_typeinfo(typelibname, obj, ifacename, wantsink TSRMLS_CC); if (typeinfo) { process_typeinfo(typeinfo, NULL, 1, NULL TSRMLS_CC); typeinfo->lpVtbl->Release(typeinfo); RETURN_TRUE; } else { zend_error(E_WARNING, "Unable to find typeinfo using the parameters supplied"); } RETURN_FALSE; } /* }}} */ /* {{{ proto bool com_event_sink(mixed comobject, object sinkobject [, mixed sinkinterface]) Connect events from a COM object to a PHP object */ PHP_FUNCTION(com_event_sink) { zval *object, *sinkobject, *sink=NULL; char *dispname = NULL, *typelibname = NULL; zend_bool gotguid = 0; comval *obj; ITypeInfo *typeinfo = NULL; RETVAL_FALSE; if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz|z/", &object, &sinkobject, &sink)) { RETURN_FALSE; } if (Z_TYPE_P(object) == IS_OBJECT && (Z_OBJCE_P(object) == &COM_class_entry || !strcmp(Z_OBJCE_P(object)->name, "COM"))) { zval **tmp; zend_hash_index_find(Z_OBJPROP_P(object), 0, (void**)&tmp); ZEND_FETCH_RESOURCE(obj, comval*, tmp, -1, "comval", IS_COM); } else { ZEND_FETCH_RESOURCE(obj, comval*, &object, -1, "comval", IS_COM); } if (sink && Z_TYPE_P(sink) == IS_ARRAY) { /* 0 => typelibname, 1 => dispname */ zval **tmp; if (zend_hash_index_find(Z_ARRVAL_P(sink), 0, (void**)&tmp) == SUCCESS) typelibname = Z_STRVAL_PP(tmp); if (zend_hash_index_find(Z_ARRVAL_P(sink), 1, (void**)&tmp) == SUCCESS) dispname = Z_STRVAL_PP(tmp); } else if (sink != NULL) { convert_to_string(sink); dispname = Z_STRVAL_P(sink); } typeinfo = locate_typeinfo(typelibname, obj, dispname, 1 TSRMLS_CC); if (typeinfo) { HashTable *id_to_name; ALLOC_HASHTABLE(id_to_name); if (process_typeinfo(typeinfo, id_to_name, 0, &obj->sinkid TSRMLS_CC)) { /* Create the COM wrapper for this sink */ obj->sinkdispatch = php_COM_export_as_sink(sinkobject, &obj->sinkid, id_to_name TSRMLS_CC); /* Now hook it up to the source */ com_enable_events(obj, TRUE); RETVAL_TRUE; } else { FREE_HASHTABLE(id_to_name); } } if (typeinfo) typeinfo->lpVtbl->Release(typeinfo); } /* }}} */ static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cleanup TSRMLS_DC) { pval function_name; int retval; ZVAL_STRINGL(&function_name, "Item", 4, 0); retval = do_COM_invoke(array, &function_name, result, &property, 1 TSRMLS_CC); if (cleanup) { php_COM_destruct(array TSRMLS_CC); } return retval; } static int do_COM_propget(VARIANT *var_result, comval *obj, pval *arg_property, int cleanup TSRMLS_DC) { DISPID dispid; HRESULT hr; OLECHAR *propname; char *error_message; DISPPARAMS dispparams; char *ErrString; /* obtain property handler */ propname = php_char_to_OLECHAR(Z_STRVAL_P(arg_property), Z_STRLEN_P(arg_property), codepage TSRMLS_CC); hr = php_COM_get_ids_of_names(obj, &propname, &dispid TSRMLS_CC); if (FAILED(hr)) { error_message = php_COM_error_message(hr TSRMLS_CC); php_error(E_WARNING,"Unable to lookup %s: %s", Z_STRVAL_P(arg_property), error_message); LocalFree(error_message); efree(propname); if (cleanup) { php_COM_destruct(obj TSRMLS_CC); } return FAILURE; } dispparams.cArgs = 0; dispparams.cNamedArgs = 0; hr = php_COM_invoke(obj, dispid, DISPATCH_PROPERTYGET, &dispparams, var_result, &ErrString TSRMLS_CC); if (FAILED(hr)) { error_message = php_COM_error_message(hr TSRMLS_CC); if (ErrString) { php_error(E_WARNING,"PropGet() failed: %s %s", error_message, ErrString); pefree(ErrString, 1); } else { php_error(E_WARNING,"PropGet() failed: %s", error_message); } LocalFree(error_message); efree(propname); if (cleanup) { php_COM_destruct(obj TSRMLS_CC); } return FAILURE; } efree(propname); if (cleanup) { php_COM_destruct(obj TSRMLS_CC); } return SUCCESS; } static void do_COM_propput(pval *return_value, comval *obj, pval *arg_property, pval *value TSRMLS_DC) { DISPID dispid; HRESULT hr; OLECHAR *propname; char *error_message; VARIANT *var_result, *new_value; DISPPARAMS dispparams; DISPID mydispid = DISPID_PROPERTYPUT; char *ErrString; ALLOC_VARIANT(var_result); ALLOC_VARIANT(new_value); /* obtain property handler */ propname = php_char_to_OLECHAR(Z_STRVAL_P(arg_property), Z_STRLEN_P(arg_property), codepage TSRMLS_CC); hr = php_COM_get_ids_of_names(obj, &propname, &dispid TSRMLS_CC); if (FAILED(hr)) { error_message = php_COM_error_message(hr TSRMLS_CC); php_error(E_WARNING,"Unable to lookup %s: %s", Z_STRVAL_P(arg_property), error_message); LocalFree(error_message); efree(propname); FREE_VARIANT(var_result); FREE_VARIANT(new_value); RETURN_NULL(); } php_pval_to_variant(value, new_value, codepage TSRMLS_CC); dispparams.rgvarg = new_value; dispparams.rgdispidNamedArgs = &mydispid; dispparams.cArgs = 1; dispparams.cNamedArgs = 1; hr = php_COM_invoke(obj, dispid, DISPATCH_PROPERTYPUT, &dispparams, NULL, &ErrString TSRMLS_CC); if (FAILED(hr)) { error_message = php_COM_error_message(hr TSRMLS_CC); if (ErrString) { php_error(E_WARNING,"PropPut() failed: %s %s", error_message, ErrString); pefree(ErrString, 1); } else { php_error(E_WARNING,"PropPut() failed: %s", error_message); } LocalFree(error_message); FREE_VARIANT(var_result); efree(new_value); efree(propname); RETURN_NULL(); } if (return_value) { dispparams.cArgs = 0; dispparams.cNamedArgs = 0; hr = php_COM_invoke(obj, dispid, DISPATCH_PROPERTYGET, &dispparams, var_result, &ErrString TSRMLS_CC); if (SUCCEEDED(hr)) { php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); } else { *return_value = *value; zval_copy_ctor(return_value); } if (ErrString) { pefree(ErrString, 1); } } FREE_VARIANT(var_result); efree(new_value); // FREE_VARIANT does a VariantClear() which is not desired here ! efree(propname); } /* {{{ proto mixed com_propget(int module, string property_name) Gets properties from a COM module */ PHP_FUNCTION(com_propget) { pval *arg_comval, *arg_property; int type; comval *obj; VARIANT *var_result; if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters(ht, 2, &arg_comval, &arg_property) == FAILURE)) { ZEND_WRONG_PARAM_COUNT(); } /* obtain IDispatch interface */ convert_to_long(arg_comval); obj = (comval *)zend_list_find(Z_LVAL_P(arg_comval), &type); if (!obj || (type != IS_COM)) { php_error(E_WARNING,"%d is not a COM object handler", Z_LVAL_P(arg_comval)); RETURN_NULL(); } convert_to_string_ex(&arg_property); ALLOC_VARIANT(var_result); if (do_COM_propget(var_result, obj, arg_property, FALSE TSRMLS_CC) == FAILURE) { FREE_VARIANT(var_result); RETURN_NULL(); } RETVAL_VARIANT(var_result); } /* }}} */ /* {{{ proto bool com_propput(int module, string property_name, mixed value) Puts the properties for a module */ PHP_FUNCTION(com_propput) { pval *arg_comval, *arg_property, *arg_value; int type; comval *obj; if (ZEND_NUM_ARGS()!=3 || zend_get_parameters(ht, 3, &arg_comval, &arg_property, &arg_value)==FAILURE) { ZEND_WRONG_PARAM_COUNT(); } /* obtain comval interface */ convert_to_long(arg_comval); /* obtain comval interface */ obj = (comval *)zend_list_find(Z_LVAL_P(arg_comval), &type); if (!obj || (type != IS_COM)) { php_error(E_WARNING,"%d is not a COM object handler", Z_LVAL_P(arg_comval)); RETURN_NULL(); } convert_to_string_ex(&arg_property); do_COM_propput(return_value, obj, arg_property, arg_value TSRMLS_CC); } /* }}} */ /* {{{ proto bool com_load_typelib(string typelib_name [, int case_insensitive]) Loads a Typelib */ PHP_FUNCTION(com_load_typelib) { pval *arg_typelib, *arg_cis; ITypeLib *pTL; int mode = CONST_CS; switch (ZEND_NUM_ARGS()) { case 1: zend_get_parameters(ht, 1, &arg_typelib); break; case 2: zend_get_parameters(ht, 2, &arg_typelib, &arg_cis); convert_to_boolean_ex(&arg_cis); if (Z_LVAL_P(arg_cis)) { mode &= ~CONST_CS; } break; default: ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex(&arg_typelib); pTL = php_COM_find_typelib(Z_STRVAL_P(arg_typelib), mode TSRMLS_CC); if (php_COM_load_typelib(pTL, mode TSRMLS_CC) == SUCCESS) { pTL->lpVtbl->Release(pTL); RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_reference) { zend_overloaded_element *overloaded_property; zend_llist_element *element; pval return_value; pval **comval_handle; pval *object = property_reference->object; int type; comval *obj, *obj_prop; VARIANT *var_result; TSRMLS_FETCH(); INIT_ZVAL(return_value); ZVAL_NULL(&return_value); /* fetch the IDispatch interface */ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle); obj = (comval *) zend_list_find(Z_LVAL_P(*comval_handle), &type); if (!obj || (type != IS_COM)) { return return_value; } ALLOC_COM(obj_prop); ALLOC_VARIANT(var_result); for (element=property_reference->elements_list->head; element; element=element->next) { overloaded_property = (zend_overloaded_element *) element->data; switch (Z_TYPE_P(overloaded_property)) { case OE_IS_ARRAY: if (do_COM_offget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) { FREE_VARIANT(var_result); FREE_COM(obj_prop); return return_value; } break; case OE_IS_OBJECT: if (do_COM_propget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) { FREE_VARIANT(var_result); FREE_COM(obj_prop); return return_value; } break; case OE_IS_METHOD: { FREE_VARIANT(var_result); if (obj != obj_prop) { FREE_COM(obj_prop); return_value = *object; ZVAL_ADDREF(&return_value); } else { RETVAL_COM(obj); } return return_value; } break; } if (V_VT(var_result) == VT_DISPATCH) { if (V_DISPATCH(var_result) == NULL) { FREE_VARIANT(var_result); FREE_COM(obj_prop); return return_value; } obj = obj_prop; php_COM_set(obj, &V_DISPATCH(var_result), TRUE TSRMLS_CC); VariantInit(var_result); // to protect C_DISPATCH(obj) from being freed when var_result is destructed } else { php_variant_to_pval(var_result, &return_value, codepage TSRMLS_CC); FREE_COM(obj_prop); obj_prop = NULL; } pval_destructor(&overloaded_property->element); } if (obj_prop != NULL) { RETVAL_COM(obj); } FREE_VARIANT(var_result); return return_value; } PHPAPI int php_COM_set_property_handler(zend_property_reference *property_reference, pval *value) { zend_overloaded_element *overloaded_property; zend_llist_element *element; pval **comval_handle; pval *object = property_reference->object; comval *obj, *obj_prop; int type; VARIANT *var_result; TSRMLS_FETCH(); /* fetch the IDispatch interface */ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle); obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type); if (!obj || (type != IS_COM)) { return FAILURE; } ALLOC_COM(obj_prop); ALLOC_VARIANT(var_result); for (element=property_reference->elements_list->head; element != property_reference->elements_list->tail; element=element->next) { overloaded_property = (zend_overloaded_element *) element->data; switch (Z_TYPE_P(overloaded_property)) { case OE_IS_ARRAY: if (do_COM_offget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) { FREE_VARIANT(var_result); FREE_COM(obj_prop); return FAILURE; } break; case OE_IS_OBJECT: if (do_COM_propget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) { FREE_VARIANT(var_result); FREE_COM(obj_prop); return FAILURE; } break; case OE_IS_METHOD: /* this shouldn't happen */ return FAILURE; break; } if (V_VT(var_result) == VT_DISPATCH) { if (V_DISPATCH(var_result) == NULL) { FREE_VARIANT(var_result); FREE_COM(obj_prop); return FAILURE; } obj = obj_prop; php_COM_set(obj, &V_DISPATCH(var_result), TRUE TSRMLS_CC); } else { FREE_COM(obj_prop); FREE_VARIANT(var_result); return FAILURE; } VariantInit(var_result); // to protect C_DISPATCH(obj) from being freed when var_result is destructed pval_destructor(&overloaded_property->element); } FREE_VARIANT(var_result); overloaded_property = (zend_overloaded_element *) element->data; do_COM_propput(NULL, obj, &overloaded_property->element, value TSRMLS_CC); FREE_COM(obj_prop); pval_destructor(&overloaded_property->element); return SUCCESS; } /* create an overloaded COM object from a dispatch pointer */ PHPAPI zval *php_COM_object_from_dispatch(IDispatch *disp, zval *val TSRMLS_DC) { comval *obj; zval *zobj; ALLOC_COM(obj); MAKE_STD_ZVAL(zobj); php_COM_set(obj, &disp, FALSE TSRMLS_CC); ZVAL_COM_EX(zobj, obj, val); return zobj; } PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) { pval property, **handle; pval *object = property_reference->object; zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data; comval *obj; int type; if (zend_llist_count(property_reference->elements_list)==1 && !strcmp(Z_STRVAL(function_name->element), "com")) { /* constructor */ pval *object_handle; PHP_FN(com_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU); if (zend_is_true(return_value)) { ALLOC_ZVAL(object_handle); *object_handle = *return_value; pval_copy_constructor(object_handle); INIT_PZVAL(object_handle); zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL); pval_destructor(&function_name->element); } else { ZVAL_NULL(object); } return; } RETVAL_NULL(); property = php_COM_get_property_handler(property_reference); if (Z_TYPE(property) != IS_OBJECT) { pval_destructor(&property); pval_destructor(&function_name->element); /* error message - function call on a non-object */ return; } zend_hash_index_find(Z_OBJPROP(property), 0, (void **) &handle); obj = (comval *)zend_list_find(Z_LVAL_PP(handle), &type); if (!obj || (type != IS_COM)) { pval_destructor(&property); pval_destructor(&function_name->element); return; } if (zend_llist_count(property_reference->elements_list)==1 && !strcmp(Z_STRVAL_P(&function_name->element), "release")) { RETVAL_LONG(php_COM_release(obj TSRMLS_CC)); } else if (zend_llist_count(property_reference->elements_list)==1 && !strcmp(Z_STRVAL_P(&function_name->element), "addref")) { RETVAL_LONG(php_COM_addref(obj TSRMLS_CC)); } else { pval **arguments; VARIANT *var_result; int arg_count = ZEND_NUM_ARGS(); ALLOC_VARIANT(var_result); arguments = (pval **) emalloc(sizeof(pval *)*arg_count); zend_get_parameters_array(ht, arg_count, arguments); if (do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count TSRMLS_CC) == SUCCESS) { php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC); } FREE_VARIANT(var_result); efree(arguments); } if (zend_llist_count(property_reference->elements_list) > 1) { /* destruct temporary object */ zend_list_delete(Z_LVAL_PP(handle)); pval_destructor(&property); } pval_destructor(&function_name->element); } static ITypeLib *php_COM_find_typelib(char *search_string, int mode TSRMLS_DC) { ITypeLib *TypeLib = NULL; char *strtok_buf, *major, *minor; CLSID clsid; OLECHAR *p; /* Type Libraries: * The string we have is either: * a) a file name * b) a CLSID, major, minor e.g. "{00000200-0000-0010-8000-00AA006D2EA4},2,0" * c) a Type Library name e.g. "Microsoft OLE DB ActiveX Data Objects 1.0 Library" * Searching for the name will be more expensive that the * other two, so we will do that when both other attempts * fail. */ search_string = php_strtok_r(search_string, ",", &strtok_buf); if (search_string == NULL) return NULL; major = php_strtok_r(NULL, ",", &strtok_buf); minor = php_strtok_r(NULL, ",", &strtok_buf); p = php_char_to_OLECHAR(search_string, strlen(search_string), codepage TSRMLS_CC); /* Is the string a GUID ? */ if (!FAILED(CLSIDFromString(p, &clsid))) { HRESULT hr; WORD major_i = 1; WORD minor_i = 0; /* We have a valid GUID, check to see if a major/minor */ /* version was specified otherwise assume 1,0 */ if ((major != NULL) && (minor != NULL)) { major_i = (WORD) atoi(major); minor_i = (WORD) atoi(minor); } /* The GUID will either be a typelibrary or a CLSID */ hr = LoadRegTypeLib((REFGUID) &clsid, major_i, minor_i, LANG_NEUTRAL, &TypeLib); /* If the LoadRegTypeLib fails, let's try to instantiate */ /* the class itself and then QI for the TypeInfo and */ /* retrieve the type info from that interface */ if (FAILED(hr) && (!major || !minor)) { IDispatch *Dispatch; ITypeInfo *TypeInfo; int idx; if (FAILED(CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID *) &Dispatch))) { efree(p); return NULL; } if (FAILED(Dispatch->lpVtbl->GetTypeInfo(Dispatch, 0, LANG_NEUTRAL, &TypeInfo))) { Dispatch->lpVtbl->Release(Dispatch); efree(p); return NULL; } Dispatch->lpVtbl->Release(Dispatch); if (FAILED(TypeInfo->lpVtbl->GetContainingTypeLib(TypeInfo, &TypeLib, &idx))) { TypeInfo->lpVtbl->Release(TypeInfo); efree(p); return NULL; } TypeInfo->lpVtbl->Release(TypeInfo); } } else { if (FAILED(LoadTypeLib(p, &TypeLib))) { /* Walk HKCR/TypeLib looking for the string */ /* If that succeeds, call ourself recursively */ /* using the CLSID found, else give up and bail */ HKEY hkey, hsubkey; DWORD SubKeys, MaxSubKeyLength; char *keyname; register unsigned int ii, jj; DWORD VersionCount; char version[20]; /* All the version keys are 1.0, 4.6, ... */ char *libname; DWORD libnamelen; /* No Need for Unicode version any more */ efree(p); /* Starting at HKEY_CLASSES_ROOT/TypeLib */ /* Walk all subkeys (Typelib GUIDs) looking */ /* at each version for a string match to the */ /* supplied argument */ if (ERROR_SUCCESS != RegOpenKey(HKEY_CLASSES_ROOT, "TypeLib",&hkey)) { /* This is pretty bad - better bail */ return NULL; } if (ERROR_SUCCESS != RegQueryInfoKey(hkey, NULL, NULL, NULL, &SubKeys, &MaxSubKeyLength, NULL, NULL, NULL, NULL, NULL, NULL)) { RegCloseKey(hkey); return NULL; } MaxSubKeyLength++; /* \0 is not counted */ keyname = emalloc(MaxSubKeyLength); libname = emalloc(strlen(search_string)+1); for (ii=0;iilpVtbl->GetTypeInfoCount(TypeLib); TypeLib->lpVtbl->GetTypeComp(TypeLib, &TypeComp); for (i=0; ilpVtbl->GetTypeInfoType(TypeLib, i, &pTKind); if (pTKind==TKIND_ENUM) { ITypeInfo *TypeInfo; VARDESC *pVarDesc; UINT NameCount; int j; #if 0 BSTR bstr_EnumId; char *EnumId; TypeLib->lpVtbl->GetDocumentation(TypeLib, i, &bstr_EnumId, NULL, NULL, NULL); EnumId = php_OLECHAR_to_char(bstr_EnumId, NULL, codepage); printf("Enumeration %d - %s:\n", i, EnumId); efree(EnumId); #endif TypeLib->lpVtbl->GetTypeInfo(TypeLib, i, &TypeInfo); j=0; while (SUCCEEDED(TypeInfo->lpVtbl->GetVarDesc(TypeInfo, j, &pVarDesc))) { BSTR bstr_ids; zend_constant c; zval exists, results; char *const_name; TypeInfo->lpVtbl->GetNames(TypeInfo, pVarDesc->memid, &bstr_ids, 1, &NameCount); if (NameCount!=1) { j++; continue; } const_name = php_OLECHAR_to_char(bstr_ids, &c.name_len, codepage TSRMLS_CC); c.name = zend_strndup(const_name, c.name_len); efree(const_name); c.name_len++; /* length should include the NULL */ SysFreeString(bstr_ids); /* Before registering the contsnt, let's see if we can find it */ if (zend_get_constant(c.name, c.name_len-1, &exists TSRMLS_CC)) { /* Oops, it already exists. No problem if it is defined as the same value */ /* Check to see if they are the same */ if (!compare_function(&results, &c.value, &exists TSRMLS_CC) && INI_INT("com.autoregister_verbose")) { php_error(E_WARNING,"Type library value %s is already defined and has a different value", c.name); } free(c.name); j++; continue; } php_variant_to_pval(pVarDesc->lpvarValue, &c.value, codepage TSRMLS_CC); if (mode & CONST_PERSISTENT) { zval_persist(&c.value TSRMLS_CC); mode |= CONST_EFREE_PERSISTENT; } c.flags = mode; zend_register_constant(&c TSRMLS_CC); j++; } TypeInfo->lpVtbl->Release(TypeInfo); } } return SUCCESS; } /* {{{ proto bool com_isenum(object com_module) Grabs an IEnumVariant */ PHP_FUNCTION(com_isenum) { pval *object; pval **comval_handle; comval *obj; int type; if (ZEND_NUM_ARGS() != 1) { ZEND_WRONG_PARAM_COUNT(); } zend_get_parameters(ht, 1, &object); /* obtain IDispatch interface */ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle); obj = (comval *) zend_list_find(Z_LVAL_PP(comval_handle), &type); if (!obj || (type != IS_COM)) { php_error(E_WARNING,"%s is not a COM object handler", ""); RETURN_FALSE; } RETURN_BOOL(C_HASENUM(obj)); } /* }}} */ static void php_register_COM_class(TSRMLS_D) { INIT_OVERLOADED_CLASS_ENTRY(COM_class_entry, "COM", NULL, php_COM_call_function_handler, php_COM_get_property_handler, php_COM_set_property_handler); zend_register_internal_class(&COM_class_entry TSRMLS_CC); } static void php_COM_init(int module_number TSRMLS_DC) { le_comval = zend_register_list_destructors_ex(php_comval_destructor, NULL, "COM", module_number); php_register_COM_class(TSRMLS_C); } PHPAPI ZEND_DECLARE_MODULE_GLOBALS(com) static void php_com_init_globals(zend_com_globals *com_globals) { } PHP_MINIT_FUNCTION(COM) { ZEND_INIT_MODULE_GLOBALS(com, php_com_init_globals, NULL); php_COM_init(module_number TSRMLS_CC); php_VARIANT_init(module_number TSRMLS_CC); php_COM_dispatch_init(module_number TSRMLS_CC); REGISTER_LONG_CONSTANT("CLSCTX_INPROC_SERVER", CLSCTX_INPROC_SERVER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CLSCTX_INPROC_HANDLER", CLSCTX_INPROC_HANDLER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CLSCTX_LOCAL_SERVER", CLSCTX_LOCAL_SERVER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CLSCTX_REMOTE_SERVER", CLSCTX_REMOTE_SERVER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CLSCTX_SERVER", CLSCTX_SERVER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CLSCTX_ALL", CLSCTX_ALL, CONST_CS | CONST_PERSISTENT); REGISTER_INI_ENTRIES(); return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(COM) { UNREGISTER_INI_ENTRIES(); return SUCCESS; } /* exports for external object creation */ zend_module_entry COM_module_entry = { STANDARD_MODULE_HEADER, "com", COM_functions, PHP_MINIT(COM), PHP_MSHUTDOWN(COM), NULL, NULL, PHP_MINFO(COM), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; PHPAPI int php_COM_get_le_comval() { return le_comval; } #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: */ php-4.2.3/ext/com/CREDITS0100644000175200000240000000007407475644630013557 0ustar zeevstaffWin32 COM Alan Brown, Wez Furlong, Harald Radi, Zeev Suraskiphp-4.2.3/ext/com/TODO0100644000175200000240000000200207370333124013203 0ustar zeevstaff1) Multi-dimenstional array support -- done 2) IErrorInfo -- done 13) export VARIANT through the COM module 14) trap exceptions and errors 3) WithEvents 4) Documentation (internal and user) and howtos 5) IEnumVariant::All() which would be like IEnumVariant::Next(IDispatch::Count) 6) Look for memory leaks and AdRef/Release problems - I KNOW there are some... 7) Test component (goes with the docs) 8) Test suite (Needs test component) 9) reduce the need for VARIANT() 10) lets try if we are able to call non IDispatch - only Typelib components -- done 11) IEnumVariant::Next() without parameter should only return an object, not an array with one element -- done 12) VARIANT->value as lvalue ad 6.) check vbsample.php (new VARIANT(*, *|VT_BYREF)) GPs ad 4.) faq (i've collected a few questions from various lists) variant attributes !! to be discussed: - dcom inporc issue - mts support (getcontext) - adsi support (ads* functions) - winapi interface - try serialisation support (if component implements IPersist) php-4.2.3/ext/com/VARIANT.c0100644000175200000240000003021107475644630014003 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Harald Radi | +----------------------------------------------------------------------+ */ /* * This module maps the VARIANT datastructure into PHP so that it can be used to * pass values to COM and DOTNET Objects by reference and not only by value. * * harald */ #ifdef PHP_WIN32 #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" #include "php_VARIANT.h" #include static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value TSRMLS_DC); static int php_VARIANT_set_property_handler(zend_property_reference *property_reference, pval *value); static pval php_VARIANT_get_property_handler(zend_property_reference *property_reference); static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference); static void php_VARIANT_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC); static void php_register_VARIANT_class(TSRMLS_D); static int le_variant; static int codepage; static zend_class_entry VARIANT_class_entry; void php_VARIANT_init(int module_number TSRMLS_DC) { le_variant = zend_register_list_destructors_ex(php_VARIANT_destructor, NULL, "VARIANT", module_number); /* variant datatypes */ REGISTER_LONG_CONSTANT("VT_NULL", VT_NULL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_EMPTY", VT_EMPTY, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_UI1", VT_UI1, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_I2", VT_I2, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_I4", VT_I4, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_R4", VT_R4, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_R8", VT_R8, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_BOOL", VT_BOOL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_ERROR", VT_ERROR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_CY", VT_CY, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_DATE", VT_DATE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_BSTR", VT_BSTR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_DECIMAL", VT_DECIMAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_UNKNOWN", VT_UNKNOWN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_DISPATCH", VT_DISPATCH, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_VARIANT", VT_VARIANT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_I1", VT_I1, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_UI2", VT_UI2, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_UI4", VT_UI4, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_INT", VT_INT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_UINT", VT_UINT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_ARRAY", VT_ARRAY, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VT_BYREF", VT_BYREF, CONST_CS | CONST_PERSISTENT); /* codepages */ REGISTER_LONG_CONSTANT("CP_ACP", CP_ACP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_MACCP", CP_MACCP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_OEMCP", CP_OEMCP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_UTF7", CP_UTF7, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_UTF8", CP_UTF8, CONST_CS | CONST_PERSISTENT); #ifdef CP_SYMBOL REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT); #else # error "CP_SYMBOL undefined" #endif #ifdef CP_THREAD_ACP REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT); #else # error "CP_THREAD_ACP undefined" #endif php_register_VARIANT_class(TSRMLS_C); } PHPAPI int php_VARIANT_get_le_variant() { return le_variant; } static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) { pval *object = property_reference->object; zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data; VARIANT *pVar; if ((zend_llist_count(property_reference->elements_list)==1) && !strcmp(Z_STRVAL(function_name->element), "variant")) { /* constructor */ pval *object_handle, *data, *type, *code_page; ALLOC_VARIANT(pVar); VariantInit(pVar); switch (ZEND_NUM_ARGS()) { case 0: /* nothing to do */ break; case 1: zend_get_parameters(ht, 1, &data); php_pval_to_variant(data, pVar, codepage TSRMLS_CC); codepage = CP_ACP; break; case 2: zend_get_parameters(ht, 2, &data, &type); php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC); codepage = CP_ACP; break; case 3: zend_get_parameters(ht, 3, &data, &type, &code_page); php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC); convert_to_long(code_page); codepage = Z_LVAL_P(code_page); break; default: ZEND_WRONG_PARAM_COUNT(); break; } RETVAL_LONG(zend_list_insert(pVar, IS_VARIANT)); if (!zend_is_true(return_value)) { ZVAL_FALSE(object); return; } ALLOC_ZVAL(object_handle); *object_handle = *return_value; pval_copy_constructor(object_handle); INIT_PZVAL(object_handle); zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL); zval_dtor(&function_name->element); } } static pval php_VARIANT_get_property_handler(zend_property_reference *property_reference) { zend_overloaded_element *overloaded_property; int type; pval result, **var_handle, *object = property_reference->object; VARIANT *var_arg; TSRMLS_FETCH(); /* fetch the VARIANT structure */ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle); var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type); if (!var_arg || (type != IS_VARIANT)) { ZVAL_FALSE(&result); } else { overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data; switch (Z_TYPE_P(overloaded_property)) { case OE_IS_ARRAY: ZVAL_FALSE(&result); break; case OE_IS_OBJECT: if (!strcmp(Z_STRVAL(overloaded_property->element), "value")) { // var_arg can't be an idispatch, so we don't care for the implicit AddRef() call here php_variant_to_pval(var_arg, &result, codepage TSRMLS_CC); } else if (!strcmp(Z_STRVAL(overloaded_property->element), "type")) { ZVAL_LONG(&result, V_VT(var_arg)) } else { ZVAL_FALSE(&result); php_error(E_WARNING, "Unknown member."); } break; case OE_IS_METHOD: ZVAL_FALSE(&result); php_error(E_WARNING, "Unknown method."); break; zval_dtor(&overloaded_property->element); } } return result; } static int php_VARIANT_set_property_handler(zend_property_reference *property_reference, pval *value) { zend_overloaded_element *overloaded_property; int type; pval **var_handle, *object = property_reference->object; VARIANT *var_arg; TSRMLS_FETCH(); /* fetch the VARIANT structure */ zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle); var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type); if (!var_arg || (type != IS_VARIANT)) { return FAILURE; } overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data; do_VARIANT_propset(var_arg, &overloaded_property->element, value TSRMLS_CC); zval_dtor(&overloaded_property->element); return SUCCESS; } static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value TSRMLS_DC) { int type; if (!strcmp(Z_STRVAL_P(arg_property), "value")) { php_pval_to_variant(value, var_arg, codepage TSRMLS_CC); return SUCCESS; } else if (!strcmp(Z_STRVAL_P(arg_property), "bVal")) { type = VT_UI1; } else if (!strcmp(Z_STRVAL_P(arg_property), "iVal")) { type = VT_I2; } else if (!strcmp(Z_STRVAL_P(arg_property), "lVal")) { type = VT_I4; } else if (!strcmp(Z_STRVAL_P(arg_property), "fltVal")) { type = VT_R4; } else if (!strcmp(Z_STRVAL_P(arg_property), "dblVal")) { type = VT_R8; } else if (!strcmp(Z_STRVAL_P(arg_property), "boolVal")) { type = VT_BOOL; } else if (!strcmp(Z_STRVAL_P(arg_property), "scode")) { type = VT_ERROR; } else if (!strcmp(Z_STRVAL_P(arg_property), "cyVal")) { type = VT_CY; } else if (!strcmp(Z_STRVAL_P(arg_property), "date")) { type = VT_DATE; } else if (!strcmp(Z_STRVAL_P(arg_property), "bstrVal")) { type = VT_BSTR; } else if (!strcmp(Z_STRVAL_P(arg_property), "pdecVal")) { type = VT_DECIMAL|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "punkVal")) { type = VT_UNKNOWN; } else if (!strcmp(Z_STRVAL_P(arg_property), "pdispVal")) { type = VT_DISPATCH; } else if (!strcmp(Z_STRVAL_P(arg_property), "parray")) { type = VT_ARRAY; } else if (!strcmp(Z_STRVAL_P(arg_property), "pbVal")) { type = VT_UI1|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "piVal")) { type = VT_I2|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "plVal")) { type = VT_I4|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pfltVal")) { type = VT_R4|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pdblVal")) { type = VT_R8|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pboolVal")) { type = VT_BOOL|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pscode")) { type = VT_ERROR|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pcyVal")) { type = VT_CY|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pdate")) { type = VT_DATE|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pbstrVal")) { type = VT_BSTR|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "ppunkVal")) { type = VT_UNKNOWN|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "ppdispVal")) { type = VT_DISPATCH|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pparray")) { type = VT_ARRAY|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pvarVal")) { type = VT_VARIANT|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "byref")) { type = VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "cVal")) { type = VT_I1; } else if (!strcmp(Z_STRVAL_P(arg_property), "uiVal")) { type = VT_UI2; } else if (!strcmp(Z_STRVAL_P(arg_property), "ulVal")) { type = VT_UI4; } else if (!strcmp(Z_STRVAL_P(arg_property), "intVal")) { type = VT_INT; } else if (!strcmp(Z_STRVAL_P(arg_property), "uintVal")) { type = VT_UINT|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pcVal")) { type = VT_I1|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "puiVal")) { type = VT_UI2|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pulVal")) { type = VT_UI4|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "pintVal")) { type = VT_INT|VT_BYREF; } else if (!strcmp(Z_STRVAL_P(arg_property), "puintVal")) { type = VT_UINT|VT_BYREF; } else { php_error(E_WARNING, "Unknown member."); return FAILURE; } php_pval_to_variant_ex2(value, var_arg, type, codepage TSRMLS_CC); return SUCCESS; } static void php_VARIANT_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { FREE_VARIANT(rsrc->ptr); } static void php_register_VARIANT_class(TSRMLS_D) { INIT_OVERLOADED_CLASS_ENTRY(VARIANT_class_entry, "VARIANT", NULL, php_VARIANT_call_function_handler, php_VARIANT_get_property_handler, php_VARIANT_set_property_handler); zend_register_internal_class(&VARIANT_class_entry TSRMLS_CC); } #endif /* PHP_WIN32 */ php-4.2.3/ext/com/com.h0100644000175200000240000000370707475644630013474 0ustar zeevstaff#ifndef COM_H #define COM_H #if PHP_WIN32 BEGIN_EXTERN_C() #include typedef struct comval_ { #ifdef _DEBUG int resourceindex; #endif BOOL typelib; BOOL enumeration; int refcount; struct { IDispatch *dispatch; ITypeInfo *typeinfo; IEnumVARIANT *enumvariant; } i; IDispatch *sinkdispatch; GUID sinkid; DWORD sinkcookie; } comval; END_EXTERN_C() #define ZVAL_COM(z,o) { \ zval *handle = NULL; \ ZVAL_COM_EX(z,o,handle) \ } #define ZVAL_COM_EX(z,o,handle) { \ HashTable *properties; \ \ ALLOC_HASHTABLE(properties); \ zend_hash_init(properties, 0, NULL, ZVAL_PTR_DTOR, 0); \ \ if (handle == NULL) { \ MAKE_STD_ZVAL(handle); \ } \ ZVAL_RESOURCE(handle, zend_list_insert((o), IS_COM)); \ \ zval_copy_ctor(handle); \ zend_hash_index_update(properties, 0, &handle, sizeof(zval *), NULL); \ object_and_properties_init(z, &COM_class_entry, properties); \ } #define RETVAL_COM(o) ZVAL_COM(&return_value, o); #define RETURN_COM(o) RETVAL_COM(o) \ return; #define ALLOC_COM(z) (z) = (comval *) ecalloc(1, sizeof(comval)); \ C_REFCOUNT(z) = 0; #define FREE_COM(z) php_COM_destruct(z TSRMLS_CC); #define IS_COM php_COM_get_le_comval() #define C_HASTLIB(x) ((x)->typelib) #define C_HASENUM(x) ((x)->enumeration) #define C_REFCOUNT(x) ((x)->refcount) #define C_ISREFD(x) C_REFCOUNT(x) #define C_ADDREF(x) (++((x)->refcount)) #define C_RELEASE(x) (--((x)->refcount)) #define C_DISPATCH(x) ((x)->i.dispatch) #define C_TYPEINFO(x) ((x)->i.typeinfo) #define C_ENUMVARIANT(x) ((x)->i.enumvariant) #define C_DISPATCH_VT(x) (C_DISPATCH(x)->lpVtbl) #define C_TYPEINFO_VT(x) (C_TYPEINFO(x)->lpVtbl) #define C_ENUMVARIANT_VT(x) (C_ENUMVARIANT(x)->lpVtbl) #endif /* PHP_WIN32 */ #endif /* COM_H */ php-4.2.3/ext/com/conversion.c0100644000175200000240000005656507475644630015110 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Harald Radi | | Alan Brown | | Paul Shortis | +----------------------------------------------------------------------+ */ /* * 03.6.2025 * Added SafeArray ==> Hash support */ /* * Paul Shortis June 7, 2025 - Added code to support SafeArray passing * to COM objects. Support includes passing arrays of variants as well * as typed arrays. */ #ifdef PHP_WIN32 #include "php.h" #include "php_COM.h" #include "php_VARIANT.h" /* prototypes */ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC); /* implementations */ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage TSRMLS_DC) { int type = VT_EMPTY; /* default variant type */ switch (Z_TYPE_P(pval_arg)) { case IS_NULL: type = VT_NULL; break; case IS_BOOL: type = VT_BOOL; break; case IS_OBJECT: if (!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) { type = VT_VARIANT|VT_BYREF; } else { type = VT_DISPATCH; } break; case IS_ARRAY: type = VT_ARRAY; break; case IS_RESOURCE: case IS_CONSTANT: case IS_CONSTANT_ARRAY: /* ?? */ break; case IS_LONG: type = VT_I4; /* assuming 32-bit platform */ break; case IS_DOUBLE: type = VT_R8; /* assuming 64-bit double precision */ break; case IS_STRING: type = VT_BSTR; break; } php_pval_to_variant_ex2(pval_arg, var_arg, type, codepage TSRMLS_CC); } PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_type, int codepage TSRMLS_DC) { php_pval_to_variant_ex2(pval_arg, var_arg, Z_LVAL_P(pval_type), codepage TSRMLS_CC); } PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, int codepage TSRMLS_DC) { OLECHAR *unicode_str; VariantInit(var_arg); V_VT(var_arg) = type; if (V_VT(var_arg) & VT_ARRAY) { /* For now we'll just handle single dimension arrays, we'll use the data type of the first element for the output data type */ HashTable *ht = Z_ARRVAL(*pval_arg); int numberOfElements = zend_hash_num_elements(ht); SAFEARRAY *safeArray; SAFEARRAYBOUND bounds[1]; VARIANT *v; zval **entry; /* An entry in the input array */ type &= ~VT_ARRAY; if (V_VT(var_arg) == (VT_ARRAY|VT_BYREF)) { /* == is intended, because VT_*|VT_BYREF|VT_ARRAY means something diffrent */ type &= ~VT_BYREF; ALLOC_VARIANT(V_VARIANTREF(var_arg)); var_arg = V_VARIANTREF(var_arg); /* put the array in that VARIANT */ } bounds[0].lLbound = 0; bounds[0].cElements = numberOfElements; safeArray = SafeArrayCreate(VT_VARIANT, 1, bounds); if (NULL == safeArray) { php_error( E_WARNING,"Unable to convert php array to VARIANT array - %s", numberOfElements ? "" : "(Empty input array)"); ZVAL_FALSE(pval_arg); } else { V_ARRAY(var_arg) = safeArray; V_VT(var_arg) = VT_ARRAY|VT_VARIANT; /* Now have a valid safe array allocated */ if (SUCCEEDED(SafeArrayLock(safeArray))) { ulong i; zend_hash_internal_pointer_reset(ht); for (i = 0; i < (ulong)numberOfElements; ++i) { if ((zend_hash_get_current_data(ht, (void **)&entry) == SUCCESS) && (entry != NULL)) { /* Get a pointer to the php array element */ /* Add another value to the safe array */ if (SUCCEEDED(SafeArrayPtrOfIndex( safeArray, &i, &v))) { /* Pointer to output element entry retrieved successfully */ if (type) { /* explicit type */ php_pval_to_variant_ex2(*entry, v, type, codepage TSRMLS_CC); /* Do the required conversion */ } else { php_pval_to_variant(*entry, v, codepage TSRMLS_CC); /* Do the required conversion */ } } else { php_error( E_WARNING,"phpArrayToSafeArray() - Unable to retrieve pointer to output element number (%d)", i); } } zend_hash_move_forward(ht); } SafeArrayUnlock( safeArray); } else { php_error( E_WARNING,"phpArrayToSafeArray() - Unable to lock safeArray"); } } } else { switch (V_VT(var_arg)) { case VT_NULL: case VT_VOID: ZVAL_NULL(pval_arg); break; case VT_UI1: convert_to_long_ex(&pval_arg); V_UI1(var_arg) = (unsigned char) Z_LVAL_P(pval_arg); break; case VT_I2: convert_to_long_ex(&pval_arg); V_I2(var_arg) = (short) Z_LVAL_P(pval_arg); break; case VT_I4: convert_to_long_ex(&pval_arg); V_I4(var_arg) = Z_LVAL_P(pval_arg); break; case VT_R4: convert_to_double_ex(&pval_arg); V_R4(var_arg) = (float) Z_DVAL_P(pval_arg); break; case VT_R8: convert_to_double_ex(&pval_arg); V_R8(var_arg) = Z_DVAL_P(pval_arg); break; case VT_BOOL: convert_to_boolean_ex(&pval_arg); if (Z_LVAL_P(pval_arg)) { V_BOOL(var_arg) = VT_TRUE; } else { V_BOOL(var_arg) = VT_FALSE; } break; case VT_ERROR: convert_to_long_ex(&pval_arg); V_ERROR(var_arg) = Z_LVAL_P(pval_arg); break; case VT_CY: convert_to_double_ex(&pval_arg); VarCyFromR8(Z_DVAL_P(pval_arg), &V_CY(var_arg)); break; case VT_DATE: { SYSTEMTIME wintime; struct tm *phptime; switch (Z_TYPE_P(pval_arg)) { case IS_DOUBLE: /* already a VariantTime value */ V_DATE(var_arg) = Z_DVAL_P(pval_arg); break; /** @todo case IS_STRING: */ /* string representation of a time value */ default: /* a PHP time value ? */ convert_to_long_ex(&pval_arg); phptime = gmtime(&(Z_LVAL_P(pval_arg))); memset(&wintime, 0, sizeof(wintime)); wintime.wYear = phptime->tm_year + 1900; wintime.wMonth = phptime->tm_mon + 1; wintime.wDay = phptime->tm_mday; wintime.wHour = phptime->tm_hour; wintime.wMinute = phptime->tm_min; wintime.wSecond = phptime->tm_sec; SystemTimeToVariantTime(&wintime, &V_DATE(var_arg)); break; } } break; case VT_BSTR: convert_to_string_ex(&pval_arg); unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); V_BSTR(var_arg) = SysAllocStringByteLen((char *) unicode_str, Z_STRLEN_P(pval_arg) * sizeof(OLECHAR)); efree(unicode_str); break; case VT_DECIMAL: convert_to_string_ex(&pval_arg); unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); VarDecFromStr(unicode_str, LOCALE_SYSTEM_DEFAULT, 0, &V_DECIMAL(var_arg)); break; case VT_DECIMAL|VT_BYREF: convert_to_string_ex(&pval_arg); unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); VarDecFromStr(unicode_str, LOCALE_SYSTEM_DEFAULT, 0, V_DECIMALREF(var_arg)); break; case VT_UNKNOWN: comval_to_variant(pval_arg, var_arg TSRMLS_CC); if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); } else { V_VT(var_arg) = VT_UNKNOWN; V_UNKNOWN(var_arg) = (IUnknown *) V_DISPATCH(var_arg); } break; case VT_DISPATCH: if (!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) { comval_to_variant(pval_arg, var_arg TSRMLS_CC); } else { V_DISPATCH(var_arg) = php_COM_export_object(pval_arg TSRMLS_CC); if (V_DISPATCH(var_arg)) { V_VT(var_arg) = VT_DISPATCH; } } if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); } break; case VT_UI1|VT_BYREF: convert_to_long(pval_arg); V_UI1REF(var_arg) = (unsigned char FAR*) &Z_LVAL_P(pval_arg); break; case VT_I2|VT_BYREF: convert_to_long(pval_arg); V_I2REF(var_arg) = (short FAR*) &Z_LVAL_P(pval_arg); break; case VT_I4|VT_BYREF: convert_to_long(pval_arg); V_I4REF(var_arg) = (long FAR*) &Z_LVAL_P(pval_arg); break; case VT_R4|VT_BYREF: convert_to_double(pval_arg); V_R4REF(var_arg) = (float FAR*) &Z_LVAL_P(pval_arg); break; case VT_R8|VT_BYREF: convert_to_double(pval_arg); V_R8REF(var_arg) = (double FAR*) &Z_LVAL_P(pval_arg); break; case VT_BOOL|VT_BYREF: convert_to_boolean(pval_arg); /* emalloc or malloc ? */ V_BOOLREF(var_arg) = (short FAR*) pemalloc(sizeof(short), 1); if (Z_LVAL_P(pval_arg)) { *V_BOOLREF(var_arg) = VT_TRUE; } else { *V_BOOLREF(var_arg) = VT_TRUE; } break; case VT_ERROR|VT_BYREF: convert_to_long(pval_arg); V_ERRORREF(var_arg) = (long FAR*) &Z_LVAL_P(pval_arg); break; case VT_CY|VT_BYREF: convert_to_double_ex(&pval_arg); VarCyFromR8(Z_DVAL_P(pval_arg), var_arg->pcyVal); break; case VT_DATE|VT_BYREF: { SYSTEMTIME wintime; struct tm *phptime; phptime = gmtime(&(Z_LVAL_P(pval_arg))); memset(&wintime, 0, sizeof(wintime)); wintime.wYear = phptime->tm_year + 1900; wintime.wMonth = phptime->tm_mon + 1; wintime.wDay = phptime->tm_mday; wintime.wHour = phptime->tm_hour; wintime.wMinute = phptime->tm_min; wintime.wSecond = phptime->tm_sec; SystemTimeToVariantTime(&wintime, var_arg->pdate); } break; case VT_BSTR|VT_BYREF: convert_to_string(pval_arg); V_BSTRREF(var_arg) = (BSTR FAR*) emalloc(sizeof(BSTR FAR*)); unicode_str = php_char_to_OLECHAR(Z_STRVAL_P(pval_arg), Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); *V_BSTRREF(var_arg) = SysAllocString(unicode_str); efree(unicode_str); break; case VT_UNKNOWN|VT_BYREF: comval_to_variant(pval_arg, var_arg TSRMLS_CC); if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); } else { V_VT(var_arg) = VT_UNKNOWN|VT_BYREF; V_UNKNOWNREF(var_arg) = (IUnknown **) &V_DISPATCH(var_arg); } break; case VT_DISPATCH|VT_BYREF: comval_to_variant(pval_arg, var_arg TSRMLS_CC); if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); } else { V_VT(var_arg) = VT_DISPATCH|VT_BYREF; V_DISPATCHREF(var_arg) = &V_DISPATCH(var_arg); } break; case VT_VARIANT: php_error(E_WARNING,"VT_VARIANT is invalid. Use VT_VARIANT|VT_BYREF instead."); /* break missing intentionally */ case VT_VARIANT|VT_BYREF: { int tp; pval **var_handle; /* fetch the VARIANT structure */ zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &var_handle); V_VT(var_arg) = VT_VARIANT|VT_BYREF; V_VARIANTREF(var_arg) = (VARIANT FAR*) zend_list_find(Z_LVAL_P(*var_handle), &tp); if (!V_VARIANTREF(var_arg) && (tp != IS_VARIANT)) { VariantInit(var_arg); } } /* should be, but isn't :) if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) { VariantInit(var_arg); } */ break; case VT_I1: convert_to_long_ex(&pval_arg); V_I1(var_arg) = (char)Z_LVAL_P(pval_arg); break; case VT_UI2: convert_to_long_ex(&pval_arg); V_UI2(var_arg) = (unsigned short)Z_LVAL_P(pval_arg); break; case VT_UI4: convert_to_long_ex(&pval_arg); V_UI4(var_arg) = (unsigned long)Z_LVAL_P(pval_arg); break; case VT_INT: convert_to_long_ex(&pval_arg); V_INT(var_arg) = (int)Z_LVAL_P(pval_arg); break; case VT_UINT: convert_to_long_ex(&pval_arg); V_UINT(var_arg) = (unsigned int)Z_LVAL_P(pval_arg); break; case VT_I1|VT_BYREF: convert_to_long(pval_arg); V_I1REF(var_arg) = (char FAR*) &Z_LVAL_P(pval_arg); break; case VT_UI2|VT_BYREF: convert_to_long(pval_arg); V_UI2REF(var_arg) = (unsigned short FAR*) &Z_LVAL_P(pval_arg); break; case VT_UI4|VT_BYREF: convert_to_long(pval_arg); V_UI4REF(var_arg) = (unsigned long FAR*) &Z_LVAL_P(pval_arg); break; case VT_INT|VT_BYREF: convert_to_long(pval_arg); V_INTREF(var_arg) = (int FAR*) &Z_LVAL_P(pval_arg); break; case VT_UINT|VT_BYREF: convert_to_long(pval_arg); V_UINTREF(var_arg) = (unsigned int FAR*) &Z_LVAL_P(pval_arg); break; default: php_error(E_WARNING,"Unsupported variant type: %d (0x%X)", V_VT(var_arg), V_VT(var_arg)); } } } PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TSRMLS_DC) { /* Changed the function to return a value for recursive error testing */ /* Existing calls will be unaffected by the change - so it */ /* seemed like the smallest impact on unfamiliar code */ int ret = SUCCESS; INIT_PZVAL(pval_arg); /* Add SafeArray support */ if (V_ISARRAY(var_arg)) { SAFEARRAY *array = V_ARRAY(var_arg); LONG indices[1]; LONG lbound=0, ubound; VARTYPE vartype; register int ii; UINT Dims; VARIANT vv; pval *element; HRESULT hr; /* TODO: Add support for multi-dimensional SafeArrays */ /* For now just validate that the SafeArray has one dimension */ if (1 != (Dims = SafeArrayGetDim(array))) { php_error(E_WARNING,"Unsupported: multi-dimensional (%d) SafeArrays", Dims); ZVAL_NULL(pval_arg); return FAILURE; } SafeArrayLock(array); /* This call has failed for everything I have tried */ /* But best leave it to be on the safe side */ if (FAILED(SafeArrayGetVartype(array, &vartype)) || (vartype == VT_EMPTY)) { /* Fall back to what we do know */ /* Mask off the array bit and assume */ /* what is left is the type of the array */ /* elements */ vartype = V_VT(var_arg) & ~VT_ARRAY; } SafeArrayGetUBound(array, 1, &ubound); SafeArrayGetLBound(array, 1, &lbound); /* Since COM returned an array we set up the php */ /* return value to be an array */ array_init(pval_arg); /* Walk the safe array */ for (ii=lbound;ii<=ubound;ii++) { indices[0] = ii; VariantInit(&vv); /* Docs say this just set the vt field, but you never know */ /* Set up a variant to pass to a recursive call */ /* So that we do not need to have two copies */ /* of the code */ if (VT_VARIANT == vartype) { hr = SafeArrayGetElement(array, indices, (VOID *) &(vv)); } else { V_VT(&vv) = vartype; hr = SafeArrayGetElement(array, indices, (VOID *) &(vv.lVal)); } if (FAILED(hr)) { /* Failure to retieve an element probably means the array is sparse */ /* So leave the php array sparse too */ continue; } /* Create an element to be added to the array */ ALLOC_ZVAL(element); /* Call ourself again to handle the base type conversion */ /* If SafeArrayGetElement proclaims to allocate */ /* memory for a BSTR, so the recursive call frees */ /* the string correctly */ if (FAILURE == php_variant_to_pval(&vv, element, codepage TSRMLS_CC)) { /* Error occurred setting up array element */ /* Error was displayed by the recursive call */ FREE_ZVAL(element); /* TODO: Do we stop here, or go on and */ /* try to make sense of the rest of the array */ /* Going on leads to multiple errors displayed */ /* for the same conversion. For large arrays that */ /* could be very annoying */ /* And if we don't go on - what to do about */ /* the parts of the array that are OK? */ /* break; */ } else { /* Just insert the element into our return array */ add_index_zval(pval_arg, ii, element); } } SafeArrayUnlock(array); } else switch (var_arg->vt & ~VT_BYREF) { case VT_EMPTY: ZVAL_NULL(pval_arg); break; case VT_UI1: if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_UI1REF(var_arg)); } else { ZVAL_LONG(pval_arg, (long)V_UI1(var_arg)); } break; case VT_I2: if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long )*V_I2REF(var_arg)); } else { ZVAL_LONG(pval_arg, (long)V_I2(var_arg)); } break; case VT_I4: if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, *V_I4REF(var_arg)); } else { ZVAL_LONG(pval_arg, V_I4(var_arg)); } break; case VT_R4: if (V_ISBYREF(var_arg)) { ZVAL_DOUBLE(pval_arg, (double)*V_R4REF(var_arg)); } else { ZVAL_DOUBLE(pval_arg, (double)V_R4(var_arg)); } break; case VT_R8: if (V_ISBYREF(var_arg)) { ZVAL_DOUBLE(pval_arg, *V_R8REF(var_arg)); } else { ZVAL_DOUBLE(pval_arg, V_R8(var_arg)); } break; /* 96bit uint */ case VT_DECIMAL: { OLECHAR *unicode_str; switch (VarBstrFromDec(&V_DECIMAL(var_arg), LOCALE_SYSTEM_DEFAULT, 0, &unicode_str)) { case S_OK: Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(unicode_str, &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); Z_TYPE_P(pval_arg) = IS_STRING; break; default: ZVAL_NULL(pval_arg); ret = FAILURE; php_error(E_WARNING, "Error converting DECIMAL value to PHP string"); break; } } break; /* Currency */ case VT_CY: if (V_ISBYREF(var_arg)) { VarR8FromCy(*V_CYREF(var_arg), &Z_DVAL_P(pval_arg)); } else { VarR8FromCy(V_CY(var_arg), &Z_DVAL_P(pval_arg)); } Z_TYPE_P(pval_arg) = IS_DOUBLE; break; case VT_BOOL: if (V_ISBYREF(var_arg)) { if (*V_BOOLREF(var_arg)) { ZVAL_BOOL(pval_arg, Z_TRUE); } else { ZVAL_BOOL(pval_arg, Z_FALSE); } } else { if (V_BOOL(var_arg)) { ZVAL_BOOL(pval_arg, Z_TRUE); } else { ZVAL_BOOL(pval_arg, Z_FALSE); } } break; case VT_NULL: case VT_VOID: ZVAL_NULL(pval_arg); break; case VT_VARIANT: php_variant_to_pval(V_VARIANTREF(var_arg), pval_arg, codepage TSRMLS_CC); break; case VT_BSTR: Z_TYPE_P(pval_arg) = IS_STRING; if (V_ISBYREF(var_arg)) { if (*V_BSTR(var_arg)) { Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); } else { ZVAL_NULL(pval_arg); } efree(V_BSTRREF(var_arg)); } else { if (V_BSTR(var_arg)) { Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); } else { ZVAL_NULL(pval_arg); } } break; case VT_DATE: { BOOL success; SYSTEMTIME wintime; struct tm phptime; if (V_ISBYREF(var_arg)) { success = VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime); } else { success = VariantTimeToSystemTime(V_DATE(var_arg), &wintime); } if (success) { memset(&phptime, 0, sizeof(phptime)); phptime.tm_year = wintime.wYear - 1900; phptime.tm_mon = wintime.wMonth - 1; phptime.tm_mday = wintime.wDay; phptime.tm_hour = wintime.wHour; phptime.tm_min = wintime.wMinute; phptime.tm_sec = wintime.wSecond; phptime.tm_isdst = -1; tzset(); ZVAL_LONG(pval_arg, mktime(&phptime)); } else { ret = FAILURE; } } break; case VT_UNKNOWN: if (V_UNKNOWN(var_arg) == NULL) { V_DISPATCH(var_arg) = NULL; } else { HRESULT hr; hr = V_UNKNOWN(var_arg)->lpVtbl->QueryInterface(var_arg->punkVal, &IID_IDispatch, &V_DISPATCH(var_arg)); if (FAILED(hr)) { char *error_message; error_message = php_COM_error_message(hr TSRMLS_CC); php_error(E_WARNING,"Unable to obtain IDispatch interface: %s", error_message); LocalFree(error_message); V_DISPATCH(var_arg) = NULL; } } /* break missing intentionaly */ case VT_DISPATCH: { comval *obj; if (V_DISPATCH(var_arg) == NULL) { ret = FAILURE; ZVAL_NULL(pval_arg); } else { ALLOC_COM(obj); php_COM_set(obj, &V_DISPATCH(var_arg), FALSE TSRMLS_CC); ZVAL_COM(pval_arg, obj); VariantInit(var_arg); // to protect C_DISPATCH(obj) from being freed when var_result is destructed } } break; case VT_I1: if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_I1REF(var_arg)); } else { ZVAL_LONG(pval_arg, (long)V_I1(var_arg)); } break; case VT_UI2: if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_UI2REF(var_arg)); } else { ZVAL_LONG(pval_arg, (long)V_UI2(var_arg)); } break; case VT_UI4: if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_UI4REF(var_arg)); } else { ZVAL_LONG(pval_arg, (long)V_UI4(var_arg)); } break; case VT_INT: if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_INTREF(var_arg)); } else { ZVAL_LONG(pval_arg, (long)V_INT(var_arg)); } break; case VT_UINT: if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_UINTREF(var_arg)); } else { ZVAL_LONG(pval_arg, (long)V_UINT(var_arg)); } break; default: php_error(E_WARNING,"Unsupported variant type: %d (0x%X)", V_VT(var_arg), V_VT(var_arg)); ZVAL_NULL(pval_arg); ret = FAILURE; break; } return ret; } PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRMLS_DC) { BOOL error = FALSE; OLECHAR *unicode_str; if (strlen == -1) { /* request needed buffersize */ strlen = MultiByteToWideChar(codepage, (codepage == CP_UTF8 ? 0 : MB_PRECOMPOSED | MB_ERR_INVALID_CHARS), C_str, -1, NULL, 0); } else { /* \0 terminator */ strlen++; } if (strlen >= 0) { unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR) * strlen); /* convert string */ error = !MultiByteToWideChar(codepage, (codepage == CP_UTF8 ? 0 : MB_PRECOMPOSED | MB_ERR_INVALID_CHARS), C_str, strlen, unicode_str, strlen); } else { /* return a zero-length string */ unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR)); *unicode_str = 0; error = TRUE; } if (error) { switch (GetLastError()) { case ERROR_NO_UNICODE_TRANSLATION: php_error(E_WARNING, "No unicode translation available for the specified string"); break; case ERROR_INSUFFICIENT_BUFFER: php_error(E_WARNING, "Internal Error: Insufficient Buffer"); break; default: php_error(E_WARNING, "Unknown error in php_char_to_OLECHAR()"); } } return unicode_str; } PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int codepage TSRMLS_DC) { char *C_str; uint length = 0; /* request needed buffersize */ uint reqSize = WideCharToMultiByte(codepage, codepage == CP_UTF8 ? 0 : WC_COMPOSITECHECK, unicode_str, -1, NULL, 0, NULL, NULL); if (reqSize) { C_str = (char *) emalloc(sizeof(char) * reqSize); /* convert string */ length = WideCharToMultiByte(codepage, codepage == CP_UTF8 ? 0 : WC_COMPOSITECHECK, unicode_str, -1, C_str, reqSize, NULL, NULL) - 1; } else { C_str = (char *) emalloc(sizeof(char)); *C_str = 0; php_error(E_WARNING,"Error in php_OLECHAR_to_char()"); } if (out_length) { *out_length = length; } return C_str; } static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC) { pval **comval_handle; comval *obj; int type; /* fetch the comval structure */ zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &comval_handle); obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type); if (!obj || (type != IS_COM) || !C_ISREFD(obj)) { VariantInit(var_arg); } else { V_VT(var_arg) = VT_DISPATCH; V_DISPATCH(var_arg) = C_DISPATCH(obj); } } #endif /* PHP_WIN32 */ php-4.2.3/ext/com/conversion.h0100644000175200000240000000142007357124553015065 0ustar zeevstaff#ifndef CONVERSION_H #define CONVERSION_H /* isn't this defined somewhere else ? */ #define Z_TRUE 1 #define Z_FALSE 0 #define VT_TRUE -1 #define VT_FALSE 0 BEGIN_EXTERN_C() PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage TSRMLS_DC); PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_type, int codepage TSRMLS_DC); PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, int codepage TSRMLS_DC); PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TSRMLS_DC); PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRMLS_DC); PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int codepage TSRMLS_DC); END_EXTERN_C() #endifphp-4.2.3/ext/com/dispatch.c0100644000175200000240000003716607475530251014507 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ /* $Id: dispatch.c,v 1.3 2025/05/30 23:07:21 phanto Exp $ */ /* * This module is used to export PHP objects to COM and DOTNET by exposing * them as objects implementing IDispatch. * */ #include "php.h" #include "php_COM.h" #include "php_VARIANT.h" #include "conversion.h" #include "variant.h" #define COBJMACROS #include /* IDispatch */ #include /* IDispatchEx */ typedef struct { /* This first part MUST match the declaration * of interface IDispatchEx */ CONST_VTBL struct IDispatchExVtbl *lpVtbl; /* now the PHP stuff */ THREAD_T engine_thread; /* for sanity checking */ zval *object; /* the object exported */ LONG refcount; /* COM reference count */ HashTable *dispid_to_name; /* keep track of dispid -> name mappings */ HashTable *name_to_dispid; /* keep track of name -> dispid mappings */ GUID sinkid; /* iid that we "implement" for event sinking */ int id; } php_dispatchex; static void disp_destructor(php_dispatchex *disp); static void dispatch_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { php_dispatchex *disp = (php_dispatchex *)rsrc->ptr; disp_destructor(disp); } static int le_dispatch; int php_COM_dispatch_init(int module_number TSRMLS_DC) { le_dispatch = zend_register_list_destructors_ex(dispatch_dtor, NULL, "COM:Dispatch", module_number); return le_dispatch; } /* {{{ trace */ static inline void trace(char *fmt, ...) { va_list ap; char buf[4096]; sprintf(buf, "T=%08x ", tsrm_thread_id()); OutputDebugString(buf); va_start(ap, fmt); vsnprintf(buf, sizeof(buf), fmt, ap); OutputDebugString(buf); va_end(ap); } /* }}} */ #define FETCH_DISP(methname) \ php_dispatchex *disp = (php_dispatchex*)This; \ trace(" PHP:%s %s\n", Z_OBJCE_P(disp->object)->name, methname); \ if (tsrm_thread_id() != disp->engine_thread) \ return E_UNEXPECTED; static HRESULT STDMETHODCALLTYPE disp_queryinterface( IDispatchEx *This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject) { FETCH_DISP("QueryInterface"); if (IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IDispatch, riid) || IsEqualGUID(&IID_IDispatchEx, riid) || IsEqualGUID(&disp->sinkid, riid)) { *ppvObject = This; InterlockedIncrement(&disp->refcount); return S_OK; } *ppvObject = NULL; return E_NOINTERFACE; } static ULONG STDMETHODCALLTYPE disp_addref(IDispatchEx *This) { FETCH_DISP("AddRef"); return InterlockedIncrement(&disp->refcount); } static ULONG STDMETHODCALLTYPE disp_release(IDispatchEx *This) { ULONG ret; TSRMLS_FETCH(); FETCH_DISP("Release"); ret = InterlockedDecrement(&disp->refcount); trace("-- refcount now %d\n", ret); if (ret == 0) { /* destroy it */ if (disp->id) zend_list_delete(disp->id); } return ret; } static HRESULT STDMETHODCALLTYPE disp_gettypeinfocount( IDispatchEx *This, /* [out] */ UINT *pctinfo) { FETCH_DISP("GetTypeInfoCount"); *pctinfo = 0; return S_OK; } static HRESULT STDMETHODCALLTYPE disp_gettypeinfo( IDispatchEx *This, /* [in] */ UINT iTInfo, /* [in] */ LCID lcid, /* [out] */ ITypeInfo **ppTInfo) { FETCH_DISP("GetTypeInfo"); *ppTInfo = NULL; return DISP_E_BADINDEX; } static HRESULT STDMETHODCALLTYPE disp_getidsofnames( IDispatchEx *This, /* [in] */ REFIID riid, /* [size_is][in] */ LPOLESTR *rgszNames, /* [in] */ UINT cNames, /* [in] */ LCID lcid, /* [size_is][out] */ DISPID *rgDispId) { UINT i; HRESULT ret = S_OK; TSRMLS_FETCH(); FETCH_DISP("GetIDsOfNames"); for (i = 0; i < cNames; i++) { char *name; unsigned int namelen; zval **tmp; name = php_OLECHAR_to_char(rgszNames[i], &namelen, CP_ACP TSRMLS_CC); /* Lookup the name in the hash */ if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == FAILURE) { ret = DISP_E_UNKNOWNNAME; rgDispId[i] = 0; } else { rgDispId[i] = Z_LVAL_PP(tmp); } efree(name); } return ret; } static HRESULT STDMETHODCALLTYPE disp_invoke( IDispatchEx *This, /* [in] */ DISPID dispIdMember, /* [in] */ REFIID riid, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS *pDispParams, /* [out] */ VARIANT *pVarResult, /* [out] */ EXCEPINFO *pExcepInfo, /* [out] */ UINT *puArgErr) { return This->lpVtbl->InvokeEx(This, dispIdMember, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, NULL); } static HRESULT STDMETHODCALLTYPE disp_getdispid( IDispatchEx *This, /* [in] */ BSTR bstrName, /* [in] */ DWORD grfdex, /* [out] */ DISPID *pid) { HRESULT ret = DISP_E_UNKNOWNNAME; char *name; unsigned int namelen; zval **tmp; TSRMLS_FETCH(); FETCH_DISP("GetDispID"); name = php_OLECHAR_to_char(bstrName, &namelen, CP_ACP TSRMLS_CC); /* Lookup the name in the hash */ if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS) { *pid = Z_LVAL_PP(tmp); ret = S_OK; } efree(name); return ret; } static HRESULT STDMETHODCALLTYPE disp_invokeex( IDispatchEx *This, /* [in] */ DISPID id, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [in] */ DISPPARAMS *pdp, /* [out] */ VARIANT *pvarRes, /* [out] */ EXCEPINFO *pei, /* [unique][in] */ IServiceProvider *pspCaller) { zval **name; UINT i; int codepage = CP_ACP; zval *retval = NULL; zval ***params = NULL; HRESULT ret = DISP_E_MEMBERNOTFOUND; TSRMLS_FETCH(); FETCH_DISP("InvokeEx"); if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) { /* TODO: add support for overloaded objects */ trace("-- Invoke: %d %20s flags=%08x args=%d\n", id, Z_STRVAL_PP(name), wFlags, pdp->cArgs); /* convert args into zvals. * Args are in reverse order */ params = (zval ***)emalloc(sizeof(zval **) * pdp->cArgs); for (i = 0; i < pdp->cArgs; i++) { VARIANT *arg; zval *zarg; arg = &pdp->rgvarg[ pdp->cArgs - 1 - i]; trace("alloc zval for arg %d VT=%08x\n", i, V_VT(arg)); ALLOC_INIT_ZVAL(zarg); if (V_VT(arg) == VT_DISPATCH) { trace("arg %d is dispatchable\n", i); if (NULL == php_COM_object_from_dispatch(V_DISPATCH(arg), zarg TSRMLS_CC)) { trace("failed to convert arg %d to zval\n", i); ZVAL_NULL(zarg); } } else { // arg can't be an idispatch, so we don't care for the implicit AddRef() call here if (FAILURE == php_variant_to_pval(arg, zarg, codepage TSRMLS_CC)) { trace("failed to convert arg %d to zval\n", i); ZVAL_NULL(zarg); } } params[i] = &zarg; } trace("arguments processed, prepare to do some work\n"); if (wFlags & DISPATCH_PROPERTYGET) { trace("trying to get a property\n"); zend_hash_find(Z_OBJPROP_P(disp->object), Z_STRVAL_PP(name), Z_STRLEN_PP(name)+1, (void**)&retval); } else if (wFlags & DISPATCH_PROPERTYPUT) { trace("trying to set a property\n"); add_property_zval(disp->object, Z_STRVAL_PP(name), *params[0]); } else if (wFlags & DISPATCH_METHOD) { trace("Trying to call user function\n"); if (SUCCESS == call_user_function_ex(EG(function_table), &disp->object, *name, &retval, pdp->cArgs, params, 1, NULL TSRMLS_CC)) { ret = S_OK; } else { ret = DISP_E_EXCEPTION; } } else { trace("Don't know how to handle this invocation %08x\n", wFlags); } /* release arguments */ for (i = 0; i < pdp->cArgs; i++) zval_ptr_dtor(params[i]); efree(params); /* return value */ if (retval) { if (pvarRes) { if (Z_TYPE_P(retval) == IS_OBJECT) { /* export the object using a dispatch like ourselves */ VariantInit(pvarRes); V_VT(pvarRes) = VT_DISPATCH; V_DISPATCH(pvarRes) = php_COM_export_object(retval TSRMLS_CC); } else { php_pval_to_variant(retval, pvarRes, codepage TSRMLS_CC); } } zval_ptr_dtor(&retval); } else if (pvarRes) { VariantInit(pvarRes); } } else { trace("InvokeEx: I don't support DISPID=%d\n", id); } return ret; } static HRESULT STDMETHODCALLTYPE disp_deletememberbyname( IDispatchEx *This, /* [in] */ BSTR bstrName, /* [in] */ DWORD grfdex) { FETCH_DISP("DeleteMemberByName"); return S_FALSE; } static HRESULT STDMETHODCALLTYPE disp_deletememberbydispid( IDispatchEx *This, /* [in] */ DISPID id) { FETCH_DISP("DeleteMemberByDispID"); return S_FALSE; } static HRESULT STDMETHODCALLTYPE disp_getmemberproperties( IDispatchEx *This, /* [in] */ DISPID id, /* [in] */ DWORD grfdexFetch, /* [out] */ DWORD *pgrfdex) { FETCH_DISP("GetMemberProperties"); return DISP_E_UNKNOWNNAME; } static HRESULT STDMETHODCALLTYPE disp_getmembername( IDispatchEx *This, /* [in] */ DISPID id, /* [out] */ BSTR *pbstrName) { zval *name; TSRMLS_FETCH(); FETCH_DISP("GetMemberName"); if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) { OLECHAR *olestr = php_char_to_OLECHAR(Z_STRVAL_P(name), Z_STRLEN_P(name), CP_ACP TSRMLS_CC); *pbstrName = SysAllocString(olestr); efree(olestr); return S_OK; } else { return DISP_E_UNKNOWNNAME; } } static HRESULT STDMETHODCALLTYPE disp_getnextdispid( IDispatchEx *This, /* [in] */ DWORD grfdex, /* [in] */ DISPID id, /* [out] */ DISPID *pid) { ulong next = id+1; FETCH_DISP("GetNextDispID"); while(!zend_hash_index_exists(disp->dispid_to_name, next)) next++; if (zend_hash_index_exists(disp->dispid_to_name, next)) { *pid = next; return S_OK; } return S_FALSE; } static HRESULT STDMETHODCALLTYPE disp_getnamespaceparent( IDispatchEx *This, /* [out] */ IUnknown **ppunk) { FETCH_DISP("GetNameSpaceParent"); *ppunk = NULL; return E_NOTIMPL; } static struct IDispatchExVtbl php_dispatch_vtbl = { disp_queryinterface, disp_addref, disp_release, disp_gettypeinfocount, disp_gettypeinfo, disp_getidsofnames, disp_invoke, disp_getdispid, disp_invokeex, disp_deletememberbyname, disp_deletememberbydispid, disp_getmemberproperties, disp_getmembername, disp_getnextdispid, disp_getnamespaceparent }; /* enumerate functions and properties of the object and assign * dispatch ids */ static void generate_dispids(php_dispatchex *disp TSRMLS_DC) { HashPosition pos; char *name = NULL; zval *tmp; int namelen; int keytype; ulong pid; if (disp->dispid_to_name == NULL) { ALLOC_HASHTABLE(disp->dispid_to_name); ALLOC_HASHTABLE(disp->name_to_dispid); zend_hash_init(disp->name_to_dispid, 0, NULL, ZVAL_PTR_DTOR, 0); zend_hash_init(disp->dispid_to_name, 0, NULL, ZVAL_PTR_DTOR, 0); } /* properties */ zend_hash_internal_pointer_reset_ex(Z_OBJPROP_PP(&disp->object), &pos); while (HASH_KEY_NON_EXISTANT != (keytype = zend_hash_get_current_key_ex(Z_OBJPROP_PP(&disp->object), &name, &namelen, &pid, 0, &pos))) { char namebuf[32]; if (keytype == HASH_KEY_IS_LONG) { sprintf(namebuf, "%d", pid); name = namebuf; namelen = strlen(namebuf); } zend_hash_move_forward_ex(Z_OBJPROP_PP(&disp->object), &pos); /* Find the existing id */ if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS) continue; /* add the mappings */ MAKE_STD_ZVAL(tmp); ZVAL_STRINGL(tmp, name, namelen, 1); zend_hash_index_update(disp->dispid_to_name, pid, (void*)&tmp, sizeof(zval *), NULL); MAKE_STD_ZVAL(tmp); ZVAL_LONG(tmp, pid); zend_hash_update(disp->name_to_dispid, name, namelen+1, (void*)&tmp, sizeof(zval *), NULL); } /* functions */ zend_hash_internal_pointer_reset_ex(&Z_OBJCE_PP(&disp->object)->function_table, &pos); while (HASH_KEY_NON_EXISTANT != (keytype = zend_hash_get_current_key_ex(&Z_OBJCE_PP(&disp->object)->function_table, &name, &namelen, &pid, 0, &pos))) { char namebuf[32]; if (keytype == HASH_KEY_IS_LONG) { sprintf(namebuf, "%d", pid); name = namebuf; namelen = strlen(namebuf); } zend_hash_move_forward_ex(Z_OBJPROP_PP(&disp->object), &pos); /* Find the existing id */ if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS) continue; /* add the mappings */ MAKE_STD_ZVAL(tmp); ZVAL_STRINGL(tmp, name, namelen, 1); zend_hash_index_update(disp->dispid_to_name, pid, (void*)&tmp, sizeof(zval *), NULL); MAKE_STD_ZVAL(tmp); ZVAL_LONG(tmp, pid); zend_hash_update(disp->name_to_dispid, name, namelen+1, (void*)&tmp, sizeof(zval *), NULL); } } static php_dispatchex *disp_constructor(zval *object TSRMLS_DC) { php_dispatchex *disp = (php_dispatchex*)CoTaskMemAlloc(sizeof(php_dispatchex)); trace("constructing a COM proxy\n"); if (disp == NULL) return NULL; memset(disp, 0, sizeof(php_dispatchex)); disp->engine_thread = tsrm_thread_id(); disp->lpVtbl = &php_dispatch_vtbl; disp->refcount = 1; if (object) ZVAL_ADDREF(object); disp->object = object; disp->id = zend_list_insert(disp, le_dispatch); return disp; } static void disp_destructor(php_dispatchex *disp) { TSRMLS_FETCH(); trace("destroying COM wrapper for PHP object %s\n", Z_OBJCE_P(disp->object)->name); disp->id = 0; if (disp->refcount > 0) CoDisconnectObject((IUnknown*)disp, 0); zend_hash_destroy(disp->dispid_to_name); zend_hash_destroy(disp->name_to_dispid); FREE_HASHTABLE(disp->dispid_to_name); FREE_HASHTABLE(disp->name_to_dispid); if (disp->object) zval_ptr_dtor(&disp->object); CoTaskMemFree(disp); } PHPAPI IDispatch *php_COM_export_as_sink(zval *val, GUID *sinkid, HashTable *id_to_name TSRMLS_DC) { php_dispatchex *disp = disp_constructor(val TSRMLS_CC); HashPosition pos; char *name = NULL; zval *tmp, **ntmp; int namelen; int keytype; ulong pid; disp->dispid_to_name = id_to_name; memcpy(&disp->sinkid, sinkid, sizeof(disp->sinkid)); /* build up the reverse mapping */ ALLOC_HASHTABLE(disp->name_to_dispid); zend_hash_init(disp->name_to_dispid, 0, NULL, ZVAL_PTR_DTOR, 0); zend_hash_internal_pointer_reset_ex(id_to_name, &pos); while (HASH_KEY_NON_EXISTANT != (keytype = zend_hash_get_current_key_ex(id_to_name, &name, &namelen, &pid, 0, &pos))) { if (keytype == HASH_KEY_IS_LONG) { zend_hash_get_current_data_ex(id_to_name, (void**)&ntmp, &pos); MAKE_STD_ZVAL(tmp); ZVAL_LONG(tmp, pid); zend_hash_update(disp->name_to_dispid, Z_STRVAL_PP(ntmp), Z_STRLEN_PP(ntmp)+1, (void*)&tmp, sizeof(zval *), NULL); } zend_hash_move_forward_ex(id_to_name, &pos); } return (IDispatch*)disp; } PHPAPI IDispatch *php_COM_export_object(zval *val TSRMLS_DC) { php_dispatchex *disp = NULL; if (Z_TYPE_P(val) != IS_OBJECT) return NULL; if (Z_OBJCE_P(val) == &COM_class_entry || !strcmp(Z_OBJCE_P(val)->name, "COM")) { /* pass back it's IDispatch directly */ zval **tmp; comval *obj; int type; zend_hash_index_find(Z_OBJPROP_P(val), 0, (void**)&tmp); obj = (comval *)zend_list_find(Z_LVAL_PP(tmp), &type); if (type != IS_COM) return NULL; C_DISPATCH(obj)->lpVtbl->AddRef(C_DISPATCH(obj)); return C_DISPATCH(obj); } disp = disp_constructor(val TSRMLS_CC); generate_dispids(disp TSRMLS_CC); return (IDispatch*)disp; } php-4.2.3/ext/com/php_COM.h0100644000175200000240000000446407475644630014204 0ustar zeevstaff#ifndef PHP_COM_H #define PHP_COM_H #if PHP_WIN32 #include "com.h" BEGIN_EXTERN_C() PHP_MINIT_FUNCTION(COM); PHP_MSHUTDOWN_FUNCTION(COM); PHP_FUNCTION(com_load); PHP_FUNCTION(com_invoke); PHP_FUNCTION(com_addref); PHP_FUNCTION(com_release); PHP_FUNCTION(com_propget); PHP_FUNCTION(com_propput); PHP_FUNCTION(com_load_typelib); PHP_FUNCTION(com_isenum); PHP_FUNCTION(com_event_sink); PHP_FUNCTION(com_message_pump); PHP_FUNCTION(com_print_typeinfo); PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult, char **ErrString TSRMLS_DC); PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId TSRMLS_DC); PHPAPI HRESULT php_COM_release(comval *obj TSRMLS_DC); PHPAPI HRESULT php_COM_addref(comval *obj TSRMLS_DC); PHPAPI HRESULT php_COM_destruct(comval *obj TSRMLS_DC); PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup TSRMLS_DC); PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup TSRMLS_DC); PHPAPI char *php_COM_error_message(HRESULT hr TSRMLS_DC); PHPAPI int php_COM_get_le_comval(); PHPAPI int php_COM_set_property_handler(zend_property_reference *property_reference, pval *value); PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_reference); PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference); PHPAPI zval *php_COM_object_from_dispatch(IDispatch *disp, zval *val TSRMLS_DC); PHPAPI int php_COM_load_typelib(ITypeLib *TypeLib, int mode TSRMLS_DC); /* dispatch.c */ PHPAPI IDispatch *php_COM_export_object(zval *val TSRMLS_DC); PHPAPI IDispatch *php_COM_export_as_sink(zval *val, GUID *sinkid, HashTable *id_to_name TSRMLS_DC); int php_COM_dispatch_init(int module_number TSRMLS_DC); zend_module_entry COM_module_entry; zend_class_entry COM_class_entry; #ifdef DEBUG extern int resourcecounter; #endif END_EXTERN_C() #define phpext_com_ptr &COM_module_entry ZEND_BEGIN_MODULE_GLOBALS(com) int nothing; ZEND_END_MODULE_GLOBALS(com) PHPAPI ZEND_EXTERN_MODULE_GLOBALS(com); #ifdef ZTS #define COMG(v) TSRMG(com_globals_id, zend_com_globals *, v) #else #define COMG(v) (com_globals.v) #endif #else #define phpext_com_ptr NULL #endif /* PHP_WIN32 */ #endif /* PHP_COM_H */ php-4.2.3/ext/com/php_VARIANT.h0100644000175200000240000000047007357322433014654 0ustar zeevstaff#ifndef PHP_TYPEDEF_VARIANT_H #define PHP_TYPEDEF_VARIANT_H #if PHP_WIN32 BEGIN_EXTERN_C() #include "conversion.h" #include "variant.h" void php_VARIANT_init(int module_number TSRMLS_DC); PHPAPI int php_VARIANT_get_le_variant(); END_EXTERN_C() #endif /* PHP_WIN32 */ #endif /* PHP_TYPEDEF_VARIANT_H */ php-4.2.3/ext/com/variant.h0100644000175200000240000000152607475644630014357 0ustar zeevstaff#ifndef VARIANT_H #define VARIANT_H #if PHP_WIN32 #define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ VariantInit(v); #define FREE_VARIANT(v) VariantClear(v); \ efree(v); #define IS_VARIANT php_VARIANT_get_le_variant() #define ZVAL_VARIANT(z, v) if (V_VT(v) == VT_DISPATCH) { \ comval *obj; \ ALLOC_COM(obj); \ php_COM_set(obj, &V_DISPATCH(v), TRUE TSRMLS_CC); \ ZVAL_RESOURCE((z), zend_list_insert(obj, IS_COM)); \ } else { \ php_variant_to_pval((v), (z), codepage TSRMLS_CC); \ FREE_VARIANT(v); \ } #define RETVAL_VARIANT(v) ZVAL_VARIANT(return_value, (v)); #define RETURN_VARIANT(v) RETVAL_VARIANT(v) \ return; #endif /* PHP_WIN32 */ #endif /* VARIANT_H */ php-4.2.3/ext/cpdf/0040755000175200000240000000000007535765574012707 5ustar zeevstaffphp-4.2.3/ext/cpdf/CREDITS0100644000175200000240000000002307206176562013703 0ustar zeevstaffcpdf Uwe Steinmann php-4.2.3/ext/cpdf/Makefile.in0100644000175200000240000000014207103403245014715 0ustar zeevstaff LTLIBRARY_NAME = libcpdf.la LTLIBRARY_SOURCES = cpdf.c include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/cpdf/config.m40100644000175200000240000000441107401753417014374 0ustar zeevstaffdnl $Id: config.m4,v 1.8 2025/11/30 18:59:27 sniper Exp $ AC_MSG_CHECKING(for cpdflib support) AC_ARG_WITH(cpdflib, [ --with-cpdflib[=DIR] Include cpdflib support (requires cpdflib >= 2).], [ case $withval in no) AC_MSG_RESULT(no) ;; yes) AC_MSG_RESULT(yes) PHP_EXTENSION(cpdf) AC_CHECK_LIB(cpdf, cpdf_open, [AC_DEFINE(HAVE_CPDFLIB,1,[Whether you have cpdflib])], [AC_MSG_ERROR([Cpdf module requires cpdflib >= 2.])]) PHP_ADD_LIBRARY(cpdf) PHP_ADD_LIBRARY(tiff) PHP_ADD_LIBRARY(jpeg) ;; *) test -f $withval/include/cpdflib.h && CPDFLIB_INCLUDE=$withval/include if test -n "$CPDFLIB_INCLUDE" ; then AC_MSG_RESULT(yes) PHP_EXTENSION(cpdf) old_LIBS=$LIBS old_withval=$withval AC_MSG_CHECKING([for libjpeg (needed by cpdflib 2.x)]) AC_ARG_WITH(jpeg-dir, [ --with-jpeg-dir[=DIR] jpeg dir for cpdflib 2.x],[ AC_MSG_RESULT(yes) if test -z $withval; then withval=/usr/local fi LIBS="$LIBS -L$withval/lib" AC_CHECK_LIB(jpeg,jpeg_read_header, ,[AC_MSG_RESULT(no)],) PHP_ADD_LIBRARY_WITH_PATH(jpeg, $withval/lib) ],[ AC_MSG_RESULT(no) AC_MSG_WARN(If configure fails try --with-jpeg-dir=) ]) AC_MSG_CHECKING([for libtiff (needed by cpdflib 2.x)]) AC_ARG_WITH(tiff-dir, [ --with-tiff-dir[=DIR] tiff dir for cpdflib 2.x],[ AC_MSG_RESULT(yes) if test -z $withval; then withval=/usr/local fi LIBS="$LIBS -L$withval/lib" AC_CHECK_LIB(tiff,TIFFOpen, ,[AC_MSG_RESULT(no)],) PHP_ADD_LIBRARY_WITH_PATH(tiff, $withval/lib) ],[ AC_MSG_RESULT(no) AC_MSG_WARN(If configure fails try --with-tiff-dir=) ]) withval=$old_withval LIBS="$LIBS -L$withval/lib" AC_CHECK_LIB(cpdf, cpdf_open, [AC_DEFINE(HAVE_CPDFLIB,1,[Whether you have cpdflib])], [AC_MSG_ERROR([Cpdflib module requires cpdflib >= 2.])]) LIBS=$old_LIBS PHP_ADD_LIBRARY_WITH_PATH(cpdf, $withval/lib) PHP_ADD_INCLUDE($CPDFLIB_INCLUDE) else AC_MSG_RESULT(no) fi ;; esac ],[ AC_MSG_RESULT(no) ]) php-4.2.3/ext/cpdf/cpdf.c0100644000175200000240000020141307437364612013752 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Uwe Steinmann | +----------------------------------------------------------------------+ */ /* $Id: cpdf.c,v 1.41 2025/02/28 08:25:46 sebastian Exp $ */ /* cpdflib.h -- C language API definitions for ClibPDF library * Copyright (C) 1998 FastIO Systems, All Rights Reserved. */ /* Note that there is no code from the cpdflib package in this file */ #if !PHP_31 && defined(THREAD_SAFE) #undef THREAD_SAFE #endif #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_globals.h" #include "zend_list.h" #include "ext/standard/php_standard.h" #include "ext/standard/head.h" #include #if HAVE_LIBGD13 #include #endif #ifdef HAVE_UNISTD_H # include #endif #ifdef PHP_WIN32 # include # include #endif #if HAVE_CPDFLIB #include "php_cpdf.h" #include "ext/standard/info.h" #ifdef THREAD_SAFE DWORD CPDFlibTls; static int numthreads=0; typedef struct cpdflib_global_struct{ int le_cpdf; int le_outline; #if HAVE_LIBGD13 int le_gd; #endif } cpdflib_global_struct; # define CPDF_GLOBAL(v) TSRMG(CPDFlibTls, cpdflib_global_struct *, v) #else # define CPDF_GLOBAL(a) a static int le_cpdf; static int le_outline; #if HAVE_LIBGD13 static int le_gd; #endif #endif function_entry cpdf_functions[] = { PHP_FE(cpdf_global_set_document_limits, NULL) PHP_FE(cpdf_set_creator, NULL) PHP_FE(cpdf_set_title, NULL) PHP_FE(cpdf_set_subject, NULL) PHP_FE(cpdf_set_keywords, NULL) PHP_FE(cpdf_open, NULL) PHP_FE(cpdf_close, NULL) PHP_FE(cpdf_set_viewer_preferences, NULL) PHP_FE(cpdf_page_init, NULL) PHP_FE(cpdf_finalize_page, NULL) PHP_FE(cpdf_set_current_page, NULL) PHP_FE(cpdf_begin_text, NULL) PHP_FE(cpdf_end_text, NULL) PHP_FE(cpdf_show, NULL) PHP_FE(cpdf_show_xy, NULL) PHP_FE(cpdf_text, NULL) PHP_FE(cpdf_continue_text, NULL) PHP_FE(cpdf_set_font, NULL) PHP_FE(cpdf_set_font_directories, NULL) PHP_FE(cpdf_set_font_map_file, NULL) PHP_FE(cpdf_set_leading, NULL) PHP_FE(cpdf_set_text_rendering, NULL) PHP_FE(cpdf_set_horiz_scaling, NULL) PHP_FE(cpdf_set_text_rise, NULL) PHP_FE(cpdf_set_text_matrix, NULL) PHP_FE(cpdf_set_text_pos, NULL) PHP_FE(cpdf_rotate_text, NULL) PHP_FE(cpdf_set_char_spacing, NULL) PHP_FE(cpdf_set_word_spacing, NULL) PHP_FE(cpdf_stringwidth, NULL) PHP_FE(cpdf_save, NULL) PHP_FE(cpdf_restore, NULL) PHP_FE(cpdf_translate, NULL) PHP_FE(cpdf_scale, NULL) PHP_FE(cpdf_rotate, NULL) PHP_FE(cpdf_setflat, NULL) PHP_FE(cpdf_setlinejoin, NULL) PHP_FE(cpdf_setlinecap, NULL) PHP_FE(cpdf_setmiterlimit, NULL) PHP_FE(cpdf_setlinewidth, NULL) PHP_FE(cpdf_setdash, NULL) PHP_FE(cpdf_moveto, NULL) PHP_FE(cpdf_rmoveto, NULL) PHP_FE(cpdf_lineto, NULL) PHP_FE(cpdf_rlineto, NULL) PHP_FE(cpdf_curveto, NULL) PHP_FE(cpdf_circle, NULL) PHP_FE(cpdf_arc, NULL) PHP_FE(cpdf_rect, NULL) PHP_FE(cpdf_newpath, NULL) PHP_FE(cpdf_closepath, NULL) PHP_FE(cpdf_stroke, NULL) PHP_FE(cpdf_closepath_stroke, NULL) PHP_FE(cpdf_fill, NULL) PHP_FE(cpdf_fill_stroke, NULL) PHP_FE(cpdf_closepath_fill_stroke, NULL) PHP_FE(cpdf_clip, NULL) PHP_FE(cpdf_setgray_fill, NULL) PHP_FE(cpdf_setgray_stroke, NULL) PHP_FE(cpdf_setgray, NULL) PHP_FE(cpdf_setrgbcolor_fill, NULL) PHP_FE(cpdf_setrgbcolor_stroke, NULL) PHP_FE(cpdf_setrgbcolor, NULL) PHP_FE(cpdf_set_page_animation, NULL) PHP_FE(cpdf_finalize, NULL) PHP_FE(cpdf_output_buffer, NULL) PHP_FE(cpdf_save_to_file, NULL) PHP_FE(cpdf_import_jpeg, NULL) #if HAVE_LIBGD13 PHP_FE(cpdf_place_inline_image, NULL) #endif PHP_FE(cpdf_add_annotation, NULL) PHP_FE(cpdf_add_outline, NULL) PHP_FE(cpdf_set_action_url, NULL) {NULL, NULL, NULL} }; zend_module_entry cpdf_module_entry = { STANDARD_MODULE_HEADER, "cpdf", cpdf_functions, PHP_MINIT(cpdf), PHP_MSHUTDOWN(cpdf), PHP_RINIT(cpdf), NULL, PHP_MINFO(cpdf), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_CPDF ZEND_GET_MODULE(cpdf) #endif static void _free_outline(zend_rsrc_list_entry *rsrc TSRMLS_DC) { } static void _free_doc(zend_rsrc_list_entry *rsrc TSRMLS_DC) { CPDFdoc *pdf = (CPDFdoc *)rsrc->ptr; cpdf_close(pdf); } PHP_MINIT_FUNCTION(cpdf) { CPDF_GLOBAL(le_outline) = zend_register_list_destructors_ex(_free_outline, NULL, "cpdf outline", module_number); CPDF_GLOBAL(le_cpdf) = zend_register_list_destructors_ex(_free_doc, NULL, "cpdf", module_number); REGISTER_LONG_CONSTANT("CPDF_PM_NONE", PM_NONE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CPDF_PM_OUTLINES", PM_OUTLINES, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CPDF_PM_THUMBS", PM_THUMBS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CPDF_PM_FULLSCREEN", PM_FULLSCREEN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CPDF_PL_SINGLE", PL_SINGLE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CPDF_PL_1COLUMN", PL_1COLUMN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CPDF_PL_2LCOLUMN", PL_2LCOLUMN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CPDF_PL_2RCOLUMN", PL_2RCOLUMN, CONST_CS | CONST_PERSISTENT); return SUCCESS; } PHP_RINIT_FUNCTION(cpdf) { /* CPDF_GLOBAL(le_outline) = NULL; */ return SUCCESS; } PHP_MINFO_FUNCTION(cpdf) { /* need to use a PHPAPI function here because it is external module in windows */ /* (don't knwo if that still applies (cmv) */ php_info_print_table_start(); php_info_print_table_row(2, "CPDF Support", "enabled"); php_info_print_table_row(2, "Version", cpdf_version() ); php_info_print_table_end(); } PHP_MSHUTDOWN_FUNCTION(cpdf) { return SUCCESS; } /* {{{ proto void cpdf_global_set_document_limits(int maxPages, int maxFonts, int maxImages, int maxAnnots, int maxObjects) Sets document settings for all documents */ PHP_FUNCTION(cpdf_global_set_document_limits) { pval *argv[5]; int argc; argc = ZEND_NUM_ARGS(); if(argc != 5) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_long(argv[1]); convert_to_long(argv[2]); convert_to_long(argv[3]); convert_to_long(argv[4]); cpdf_setGlobalDocumentLimits(Z_LVAL_P(argv[0]), Z_LVAL_P(argv[1]), Z_LVAL_P(argv[2]), Z_LVAL_P(argv[3]), Z_LVAL_P(argv[4])); RETURN_TRUE; } /* }}} */ /* {{{ proto bool cpdf_set_creator(int pdfdoc, string creator) Sets the creator field */ PHP_FUNCTION(cpdf_set_creator) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d (type=%d)", id, type); RETURN_FALSE; } cpdf_setCreator(pdf, Z_STRVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto bool cpdf_set_title(int pdfptr, string title) Fills the title field of the info structure */ PHP_FUNCTION(cpdf_set_title) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d (type=%d)", id, type); RETURN_FALSE; } cpdf_setTitle(pdf, Z_STRVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto bool cpdf_set_subject(int pdfptr, string subject) Fills the subject field of the info structure */ PHP_FUNCTION(cpdf_set_subject) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d (type=%d)", id, type); RETURN_FALSE; } cpdf_setSubject(pdf, Z_STRVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto bool cpdf_set_keywords(int pdfptr, string keywords) Fills the keywords field of the info structure */ PHP_FUNCTION(cpdf_set_keywords) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if (!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d (type=%d)", id, type); RETURN_FALSE; } cpdf_setKeywords(pdf, Z_STRVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_viewer_preferences(int pdfdoc, array preferences) How to show the document in the viewer */ PHP_FUNCTION(cpdf_set_viewer_preferences) { zval *arg1, *arg2; zval **zvalue; int id, type; CPDFdoc *pdf; CPDFviewerPrefs vP = { 0, 0, 0, 0, 0, 0, 0, 0 }; if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT; if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(arg1); convert_to_array(arg2); id = Z_LVAL_P (arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if (zend_hash_find (Z_ARRVAL_P(arg2), "pagemode", sizeof ("pagemode"), (void **) &zvalue) == SUCCESS) { convert_to_long_ex (zvalue); vP.pageMode = Z_LVAL_PP (zvalue); } if (zend_hash_find (Z_ARRVAL_P(arg2), "hidetoolbar", sizeof ("hidetoolbar"), (void **) &zvalue) == SUCCESS) { convert_to_long_ex (zvalue); vP.hideToolbar = Z_LVAL_PP (zvalue); } if (zend_hash_find (Z_ARRVAL_P(arg2), "hidemenubar", sizeof ("hidemenubar"), (void **) &zvalue) == SUCCESS) { convert_to_long_ex (zvalue); vP.hideMenubar = Z_LVAL_PP (zvalue); } if (zend_hash_find (Z_ARRVAL_P(arg2), "hidewindowui", sizeof ("hidewindowui"), (void **) &zvalue) == SUCCESS) { convert_to_long_ex (zvalue); vP.hideWindowUI = Z_LVAL_PP (zvalue); } if (zend_hash_find (Z_ARRVAL_P(arg2), "fitwindow", sizeof ("fitwindow"), (void **) &zvalue) == SUCCESS) { convert_to_long_ex (zvalue); vP.fitWindow = Z_LVAL_PP (zvalue); } if (zend_hash_find (Z_ARRVAL_P(arg2), "centerwindow", sizeof ("centerwindow"), (void **) &zvalue) == SUCCESS) { convert_to_long_ex (zvalue); vP.centerWindow = Z_LVAL_PP (zvalue); } if (zend_hash_find (Z_ARRVAL_P(arg2), "pagelayout", sizeof ("pagelayout"), (void **) &zvalue) == SUCCESS) { convert_to_long_ex (zvalue); vP.pageLayout = Z_LVAL_PP (zvalue); } if (zend_hash_find (Z_ARRVAL_P(arg2), "nonfspagemode", sizeof ("nonfspagemode"), (void **) &zvalue) == SUCCESS) { convert_to_long_ex (zvalue); vP.nonFSPageMode = Z_LVAL_PP (zvalue); } cpdf_setViewerPreferences(pdf, &vP); RETURN_TRUE; } /* }}} */ /* {{{ proto int cpdf_open(int compression [, string filename [, array doc_limits]]) Opens a new pdf document */ PHP_FUNCTION(cpdf_open) { pval *arg1, *arg2, *arg3; int id, argc; CPDFdoc *cpdf; argc = ZEND_NUM_ARGS(); switch(argc) { case 1: if (getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } break; case 2: if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } break; case 3: if (getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) { WRONG_PARAM_COUNT; } break; default: WRONG_PARAM_COUNT; } convert_to_long(arg1); cpdf = cpdf_open(0, NULL); if(!cpdf) RETURN_FALSE; if(Z_LVAL_P(arg1) == 1) cpdf_enableCompression(cpdf, YES); else cpdf_enableCompression(cpdf, NO); if(argc > 1) { convert_to_string(arg2); #if APACHE if(strcmp(Z_STRVAL_P(arg2), "-") == 0) php_error(E_WARNING, "Writing to stdout as described in the ClibPDF manual is not possible if php is used as an Apache module. Write to a memory stream and use cpdf_output_buffer() instead."); #endif cpdf_setOutputFilename(cpdf, Z_STRVAL_P(arg2)); } cpdf_init(cpdf); id = zend_list_insert(cpdf, CPDF_GLOBAL(le_cpdf)); RETURN_LONG(id); } /* }}} */ /* {{{ proto void cpdf_close(int pdfdoc) Closes the pdf document */ PHP_FUNCTION(cpdf_close) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } zend_list_delete(id); RETURN_TRUE; } /* }}} */ #define BUFFERLEN 40 /* {{{ proto void cpdf_page_init(int pdfdoc, int pagenr, int orientation, int height, int width [, float unit]) Starts page */ PHP_FUNCTION(cpdf_page_init) { pval *argv[6]; int id, type, pagenr, orientation; int height, width, argc; char buffer[BUFFERLEN]; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if(argc < 5 || argc > 6) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_long(argv[1]); convert_to_long(argv[2]); convert_to_long(argv[3]); convert_to_long(argv[4]); id=Z_LVAL_P(argv[0]); pagenr=Z_LVAL_P(argv[1]); orientation=Z_LVAL_P(argv[2]); height = Z_LVAL_P(argv[3]); width = Z_LVAL_P(argv[4]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 5) { convert_to_double(argv[5]); if(Z_DVAL_P(argv[5]) > 0.0) cpdf_setDefaultDomainUnit(pdf, Z_DVAL_P(argv[5])); } snprintf(buffer, BUFFERLEN, "0 0 %d %d", width, height); cpdf_pageInit(pdf, pagenr, orientation, buffer, buffer); RETURN_TRUE; } /* }}} */ #undef BUFFERLEN /* {{{ proto void cpdf_finalize_page(int pdfdoc, int pagenr) Ends the page to save memory */ PHP_FUNCTION(cpdf_finalize_page) { pval *arg1, *arg2; int id, type, pagenr; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); id=Z_LVAL_P(arg1); pagenr=Z_LVAL_P(arg2); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_finalizePage(pdf, pagenr); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_current_page(int pdfdoc, int pagenr) Sets page for output */ PHP_FUNCTION(cpdf_set_current_page) { pval *arg1, *arg2; int id, type, pagenr; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); id=Z_LVAL_P(arg1); pagenr=Z_LVAL_P(arg2); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setCurrentPage(pdf, pagenr); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_begin_text(int pdfdoc) Starts text section */ PHP_FUNCTION(cpdf_begin_text) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_beginText(pdf, 0); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_end_text(int pdfdoc) Ends text section */ PHP_FUNCTION(cpdf_end_text) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_endText(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_show(int pdfdoc, string text) Output text at current position */ PHP_FUNCTION(cpdf_show) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_textShow(pdf, Z_STRVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_show_xy(int pdfdoc, string text, float x-koor, float y-koor [, int mode]) Output text at position */ PHP_FUNCTION(cpdf_show_xy) { pval *argv[5]; int id, type, argc, mode=0; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 4) || (argc > 5)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_string(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc == 5) { convert_to_long(argv[4]); mode = Z_LVAL_P(argv[4]); } if(mode == 1) cpdf_rawText(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), 0.0, Z_STRVAL_P(argv[1])); else cpdf_text(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), 0.0, Z_STRVAL_P(argv[1])); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_continue_text(int pdfdoc, string text) Outputs text in next line */ PHP_FUNCTION(cpdf_continue_text) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_textCRLFshow(pdf, Z_STRVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_text(int pdfdoc, string text [, float x-koor, float y-koor [, int mode [, float orientation [, int alignmode]]]]) Outputs text */ PHP_FUNCTION(cpdf_text) { pval *argv[7]; int id, type, argc, mode=0; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 2) || (argc == 3) || (argc > 7) || getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_string(argv[1]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 4) { convert_to_long(argv[4]); mode = Z_LVAL_P(argv[2]); } switch(argc) { case 2: cpdf_textShow(pdf, Z_STRVAL_P(argv[1])); break; case 4: convert_to_double(argv[2]); convert_to_double(argv[3]); cpdf_text(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), 0.0, Z_STRVAL_P(argv[1])); break; case 5: convert_to_double(argv[2]); convert_to_double(argv[3]); if(mode == 1) cpdf_rawText(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), 0.0, Z_STRVAL_P(argv[1])); else cpdf_text(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), 0.0, Z_STRVAL_P(argv[1])); break; case 6: convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[5]); if(mode == 1) cpdf_rawText(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[5]), Z_STRVAL_P(argv[1])); else cpdf_text(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[5]), Z_STRVAL_P(argv[1])); break; case 7: convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[5]); convert_to_long(argv[6]); if(mode == 1) cpdf_rawTextAligned(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[5]), Z_LVAL_P(argv[6]), Z_STRVAL_P(argv[1])); else cpdf_textAligned(pdf, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[5]), Z_LVAL_P(argv[6]), Z_STRVAL_P(argv[1])); break; } RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_font(int pdfdoc, string font, float size, string encoding) Selects the current font face, size and encoding */ PHP_FUNCTION(cpdf_set_font) { pval *arg1, *arg2, *arg3, *arg4; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); convert_to_double(arg3); convert_to_string(arg4); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } /* if(Z_LVAL_P(arg4) > 6) { php_error(E_WARNING, "Font encoding set to 5"); Z_LVAL_P(arg4) = 5; } */ cpdf_setFont(pdf, Z_STRVAL_P(arg2), Z_STRVAL_P(arg4), (float) Z_DVAL_P(arg3)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_font_directories(int pdfdoc, string pfmdir, string pfbdir) Sets directories to search when using external fonts */ PHP_FUNCTION(cpdf_set_font_directories) { pval *arg1, *arg2, *arg3; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); convert_to_string(arg3); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setFontDirectories(pdf, Z_STRVAL_P(arg2), Z_STRVAL_P(arg3)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_font_map_file(int pdfdoc, string filename) Sets fontname to filename translation map when using external fonts */ PHP_FUNCTION(cpdf_set_font_map_file) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setFontMapFile(pdf, Z_STRVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_leading(int pdfdoc, float distance) Sets distance between text lines */ PHP_FUNCTION(cpdf_set_leading) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setTextLeading(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_text_rendering(int pdfdoc, int rendermode) Determines how text is rendered */ PHP_FUNCTION(cpdf_set_text_rendering) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setTextRenderingMode(pdf, Z_LVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_horiz_scaling(int pdfdoc, float scale) Sets horizontal scaling of text */ PHP_FUNCTION(cpdf_set_horiz_scaling) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setHorizontalScaling(pdf, (float) Z_DVAL_P(arg2) * 100.0); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_text_rise(int pdfdoc, float value) Sets the text rise */ PHP_FUNCTION(cpdf_set_text_rise) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setTextRise(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_text_matrix(int pdfdoc, arry matrix) Sets the text matrix */ PHP_FUNCTION(cpdf_set_text_matrix) { pval *arg1, *arg2, *data; int id, type, i; HashTable *matrix; CPDFdoc *pdf; float *pdfmatrixptr; float pdfmatrix[6]; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_array(arg2); id=Z_LVAL_P(arg1); matrix=Z_ARRVAL_P(arg2); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(zend_hash_num_elements(matrix) != 6) { php_error(E_WARNING, "Text matrix must have 6 elements"); RETURN_FALSE; } pdfmatrixptr = pdfmatrix; zend_hash_internal_pointer_reset(matrix); for(i=0; i 4)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 3) { convert_to_long(argv[3]); mode = Z_LVAL_P(argv[3]); } if(mode == 1) cpdf_rawSetTextPosition(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2])); else cpdf_setTextPosition(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2])); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_rotate_text(int pdfdoc, float angle) Sets text rotation angle */ PHP_FUNCTION(cpdf_rotate_text) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_rotateText(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_char_spacing(int pdfdoc, float space) Sets character spacing */ PHP_FUNCTION(cpdf_set_char_spacing) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setCharacterSpacing(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_word_spacing(int pdfdoc, float space) Sets spacing between words */ PHP_FUNCTION(cpdf_set_word_spacing) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setWordSpacing(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto float cpdf_stringwidth(int pdfdoc, string text) Returns width of text in current font */ PHP_FUNCTION(cpdf_stringwidth) { pval *arg1, *arg2; int id, type; double width; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } width = (double) cpdf_stringWidth(pdf, Z_STRVAL_P(arg2)); RETURN_DOUBLE((double)width); } /* }}} */ /* {{{ proto void cpdf_save(int pdfdoc) Saves current enviroment */ PHP_FUNCTION(cpdf_save) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_gsave(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_restore(int pdfdoc) Restores formerly saved enviroment */ PHP_FUNCTION(cpdf_restore) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_grestore(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_translate(int pdfdoc, float x, float y) Sets origin of coordinate system */ PHP_FUNCTION(cpdf_translate) { pval *arg1, *arg2, *arg3; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); convert_to_double(arg3); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_rawTranslate(pdf, (float) Z_DVAL_P(arg2), (float) Z_DVAL_P(arg3)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_scale(int pdfdoc, float x_scale, float y_scale) Sets scaling */ PHP_FUNCTION(cpdf_scale) { pval *arg1, *arg2, *arg3; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); convert_to_double(arg3); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_scale(pdf, (float) Z_DVAL_P(arg2), (float) Z_DVAL_P(arg3)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_rotate(int pdfdoc, float angle) Sets rotation */ PHP_FUNCTION(cpdf_rotate) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_rotate(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setflat(int pdfdoc, float value) Sets flatness */ PHP_FUNCTION(cpdf_setflat) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if((Z_LVAL_P(arg2) > 100) && (Z_LVAL_P(arg2) < 0)) { php_error(E_WARNING, "Parameter of pdf_setflat() has to between 0 and 100"); RETURN_FALSE; } cpdf_setflat(pdf, (int) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setlinejoin(int pdfdoc, int value) Sets linejoin parameter */ PHP_FUNCTION(cpdf_setlinejoin) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if((Z_LVAL_P(arg2) > 2) && (Z_LVAL_P(arg2) < 0)) { php_error(E_WARNING, "Parameter of pdf_setlinejoin() has to between 0 and 2"); RETURN_FALSE; } cpdf_setlinejoin(pdf, Z_LVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setlinecap(int pdfdoc, int value) Sets linecap parameter */ PHP_FUNCTION(cpdf_setlinecap) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if((Z_LVAL_P(arg2) > 2) && (Z_LVAL_P(arg2) < 0)) { php_error(E_WARNING, "Parameter of pdf_setlinecap() has to be > 0 and =< 2"); RETURN_FALSE; } cpdf_setlinecap(pdf, Z_LVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setmiterlimit(int pdfdoc, float value) Sets miter limit */ PHP_FUNCTION(cpdf_setmiterlimit) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(Z_DVAL_P(arg2) < 1) { php_error(E_WARNING, "Parameter of pdf_setmiterlimit() has to be >= 1"); RETURN_FALSE; } cpdf_setmiterlimit(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setlinewidth(int pdfdoc, float width) Sets line width */ PHP_FUNCTION(cpdf_setlinewidth) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setlinewidth(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ #define BUFFERLEN 20 /* {{{ proto void cpdf_setdash(int pdfdoc, long white, long black) Sets dash pattern */ PHP_FUNCTION(cpdf_setdash) { pval *arg1, *arg2, *arg3; int id, type; char buffer[BUFFERLEN]; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); convert_to_long(arg3); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } snprintf(buffer, BUFFERLEN, "[%d %d] 0", (int) Z_LVAL_P(arg2), (int) Z_LVAL_P(arg3)); cpdf_setdash(pdf, buffer); RETURN_TRUE; } /* }}} */ #undef BUFFERLEN /* {{{ proto void cpdf_moveto(int pdfdoc, float x, float y [, int mode]) Sets current point */ PHP_FUNCTION(cpdf_moveto) { pval *argv[4]; int id, type, argc, mode=0; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 3) || (argc > 4)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 3) { convert_to_long(argv[3]); mode = Z_LVAL_P(argv[3]); } if(mode == 1) cpdf_rawMoveto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2])); else cpdf_moveto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2])); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_rmoveto(int pdfdoc, float x, float y [, int mode]) Sets current point */ PHP_FUNCTION(cpdf_rmoveto) { pval *argv[4]; int id, type, argc, mode=0; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 3) || (argc > 4)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 3) { convert_to_long(argv[3]); mode = Z_LVAL_P(argv[3]); } if(mode == 1) cpdf_rawRmoveto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2])); else cpdf_rmoveto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2])); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_curveto(int pdfdoc, float x1, float y1, float x2, float y2, float x3, float y3 [, int mode]) Draws a curve */ PHP_FUNCTION(cpdf_curveto) { pval *argv[8]; int id, type, argc, mode=0; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 7) || (argc > 8)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_double(argv[5]); convert_to_double(argv[6]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 7) { convert_to_long(argv[7]); mode = Z_LVAL_P(argv[7]); } if(mode == 1) cpdf_rawCurveto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), (float) Z_DVAL_P(argv[5]), (float) Z_DVAL_P(argv[6])); else cpdf_curveto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), (float) Z_DVAL_P(argv[5]), (float) Z_DVAL_P(argv[6])); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_lineto(int pdfdoc, float x, float y [, int mode]) Draws a line */ PHP_FUNCTION(cpdf_lineto) { pval *argv[4]; int id, type, argc, mode=0; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 3) || (argc > 4)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 3) { convert_to_long(argv[3]); mode = Z_LVAL_P(argv[3]); } if(mode == 1) cpdf_rawLineto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2])); else cpdf_lineto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2])); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_rlineto(int pdfdoc, float x, float y [, int mode]) Draws a line relative to current point */ PHP_FUNCTION(cpdf_rlineto) { pval *argv[4]; int id, type, argc, mode=0; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 3) || (argc > 4)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 3) { convert_to_long(argv[3]); mode = Z_LVAL_P(argv[3]); } if(mode == 1) cpdf_rawRlineto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2])); else cpdf_rlineto(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2])); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_circle(int pdfdoc, float x, float y, float radius [, int mode]) Draws a circle */ PHP_FUNCTION(cpdf_circle) { pval *argv[5]; int id, type, argc, mode=0; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 4) || (argc > 5)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 4) { convert_to_long(argv[4]); mode = Z_LVAL_P(argv[4]); } if(mode == 1) cpdf_rawCircle(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3])); else cpdf_circle(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3])); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_arc(int pdfdoc, float x, float y, float radius, float start, float end [, int mode]) Draws an arc */ PHP_FUNCTION(cpdf_arc) { pval *argv[7]; int id, type, argc, mode=0; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 6) || (argc > 7)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_double(argv[5]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 6) { convert_to_long(argv[6]); mode = Z_LVAL_P(argv[6]); } if(mode == 1) cpdf_rawArc(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), (float) Z_DVAL_P(argv[5]), 1); else cpdf_arc(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), (float) Z_DVAL_P(argv[5]), 1); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_rect(int pdfdoc, float x, float y, float width, float height [, int mode]) Draws a rectangle */ PHP_FUNCTION(cpdf_rect) { pval *argv[6]; int id, type, argc, mode=0; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 5) || (argc > 6)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 5) { convert_to_long(argv[5]); mode = Z_LVAL_P(argv[5]); } if(mode == 1) cpdf_rawRect(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4])); else cpdf_rect(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4])); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_newpath(int pdfdoc) Starts new path */ PHP_FUNCTION(cpdf_newpath) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_newpath(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_closepath(int pdfdoc) Close path */ PHP_FUNCTION(cpdf_closepath) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_closepath(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_closepath_stroke(int pdfdoc) Close path and draw line along path */ PHP_FUNCTION(cpdf_closepath_stroke) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_closepath(pdf); cpdf_stroke(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_stroke(int pdfdoc) Draws line along path path */ PHP_FUNCTION(cpdf_stroke) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_stroke(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_fill(int pdfdoc) Fills current path */ PHP_FUNCTION(cpdf_fill) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_fill(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_fill_stroke(int pdfdoc) Fills and stroke current path */ PHP_FUNCTION(cpdf_fill_stroke) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_fill(pdf); cpdf_stroke(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_closepath_fill_stroke(int pdfdoc) Close, fill and stroke current path */ PHP_FUNCTION(cpdf_closepath_fill_stroke) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_closepath(pdf); cpdf_fill(pdf); cpdf_stroke(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_clip(int pdfdoc) Clips to current path */ PHP_FUNCTION(cpdf_clip) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_clip(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setgray_fill(int pdfdoc, float value) Sets filling color to gray value */ PHP_FUNCTION(cpdf_setgray_fill) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setgrayFill(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setgray_stroke(int pdfdoc, float value) Sets drawing color to gray value */ PHP_FUNCTION(cpdf_setgray_stroke) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setgrayStroke(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setgray(int pdfdoc, float value) Sets drawing and filling color to gray value */ PHP_FUNCTION(cpdf_setgray) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setgray(pdf, (float) Z_DVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setrgbcolor_fill(int pdfdoc, float red, float green, float blue) Sets filling color to rgb color value */ PHP_FUNCTION(cpdf_setrgbcolor_fill) { pval *arg1, *arg2, *arg3, *arg4; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); convert_to_double(arg3); convert_to_double(arg4); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setrgbcolorFill(pdf, (float) Z_DVAL_P(arg2), (float) Z_DVAL_P(arg3), (float) Z_DVAL_P(arg4)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setrgbcolor_stroke(int pdfdoc, float red, float green, float blue) Sets drawing color to RGB color value */ PHP_FUNCTION(cpdf_setrgbcolor_stroke) { pval *arg1, *arg2, *arg3, *arg4; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); convert_to_double(arg3); convert_to_double(arg4); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setrgbcolorStroke(pdf, (float) Z_DVAL_P(arg2), (float) Z_DVAL_P(arg3), (float) Z_DVAL_P(arg4)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_setrgbcolor(int pdfdoc, float red, float green, float blue) Sets drawing and filling color to RGB color value */ PHP_FUNCTION(cpdf_setrgbcolor) { pval *arg1, *arg2, *arg3, *arg4; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 4 || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_double(arg2); convert_to_double(arg3); convert_to_double(arg4); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setrgbcolor(pdf, (float) Z_DVAL_P(arg2), (float) Z_DVAL_P(arg3), (float) Z_DVAL_P(arg4)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_page_animation(int pdfdoc, int transition, float duration, float direction, int orientation, int inout) Sets transition between pages */ PHP_FUNCTION(cpdf_set_page_animation) { pval *arg1, *arg2, *arg3, *arg4, *arg5, *arg6; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 6 || getParameters(ht, 6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_long(arg2); convert_to_double(arg3); convert_to_double(arg4); convert_to_long(arg5); convert_to_long(arg6); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_setPageTransition(pdf, Z_LVAL_P(arg2), Z_DVAL_P(arg3), Z_DVAL_P(arg4), Z_LVAL_P(arg5), Z_LVAL_P(arg6)); RETURN_TRUE; } /* }}} */ /* {{{ proto array cpdf_finalize(int pdfdoc) Creates PDF doc in memory */ PHP_FUNCTION(cpdf_finalize) { pval *arg1; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } cpdf_finalizeAll(pdf); RETURN_TRUE; } /* }}} */ /* {{{ proto array cpdf_output_buffer(int pdfdoc) Returns the internal memory stream as string */ PHP_FUNCTION(cpdf_output_buffer) { pval *arg1; int id, type, lenght; CPDFdoc *pdf; char *buffer; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } buffer = cpdf_getBufferForPDF(pdf, &lenght); php_write(buffer, lenght TSRMLS_CC); RETURN_TRUE; } /* }}} */ /* {{{ proto array cpdf_save_to_file(int pdfdoc, string filename) Saves the internal memory stream to a file */ PHP_FUNCTION(cpdf_save_to_file) { pval *arg1, *arg2; int id, type; CPDFdoc *pdf; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(arg1); convert_to_string(arg2); id=Z_LVAL_P(arg1); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } #if APACHE if(strcmp(Z_STRVAL_P(arg2), "-") == 0) php_error(E_WARNING, "Writing to stdout as described in the ClibPDF manual is not possible if php is used as an Apache module. Use cpdf_output_buffer() instead."); #endif cpdf_savePDFmemoryStreamToFile(pdf, Z_STRVAL_P(arg2)); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_import_jpeg(int pdfdoc, string filename, float x, float y, float angle, float width, float height, float x_scale, float y_scale, int gsave [, int mode]) Includes JPEG image */ PHP_FUNCTION(cpdf_import_jpeg) { pval *argv[11]; int id, type, argc, mode=0; float width, height, xscale, yscale; CPDFdoc *pdf; argc = ZEND_NUM_ARGS(); if((argc < 10) || (argc > 11)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_string(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_double(argv[5]); width = (float) Z_DVAL_P(argv[5]); convert_to_double(argv[6]); height = (float) Z_DVAL_P(argv[6]); convert_to_double(argv[7]); xscale = (float) Z_DVAL_P(argv[7]); convert_to_double(argv[8]); yscale = (float) Z_DVAL_P(argv[8]); convert_to_long(argv[9]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } if(argc > 10) { convert_to_long(argv[10]); mode = Z_LVAL_P(argv[10]); } if(mode == 1) cpdf_rawImportImage(pdf, Z_STRVAL_P(argv[1]), JPEG_IMG, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), &width, &height, &xscale, &yscale, Z_LVAL_P(argv[9])); else cpdf_rawImportImage(pdf, Z_STRVAL_P(argv[1]), JPEG_IMG, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), &width, &height, &xscale, &yscale, Z_LVAL_P(argv[9])); RETURN_TRUE; } /* }}} */ #if HAVE_LIBGD13 /* {{{ proto void cpdf_place_inline_image(int pdfdoc, int gdimage, float x, float y, float angle, fload width, float height, int gsave [, int mode]) Includes image */ PHP_FUNCTION(cpdf_place_inline_image) { pval *argv[11]; int id, gid, type, argc, mode=0; int count, i, j, color; CPDFdoc *pdf; unsigned char *buffer, *ptr; gdImagePtr im; argc = ZEND_NUM_ARGS(); if((argc < 8) || (argc > 9)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_long(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_double(argv[5]); convert_to_double(argv[6]); convert_to_long(argv[7]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } gid=Z_LVAL_P(argv[1]); im = zend_list_find(gid, &type); ZEND_GET_RESOURCE_TYPE_ID(CPDF_GLOBAL(le_gd), "gd"); if(!CPDF_GLOBAL(le_gd)) { php_error(E_ERROR, "Unable to find handle for GD image stream. Please check the GD extension is loaded."); } if (!im || type != CPDF_GLOBAL(le_gd)) { php_error(E_WARNING, "cpdf: Unable to find image pointer"); RETURN_FALSE; } if(argc > 8) { convert_to_long(argv[8]); mode = Z_LVAL_P(argv[8]); } count = 3 * im->sx * im->sy; if(NULL == (buffer = (unsigned char *) emalloc(count))) RETURN_FALSE; ptr = buffer; for(i=0; isy; i++) { for(j=0; jsx; j++) { color = im->pixels[i][j]; *ptr++ = im->red[color]; *ptr++ = im->green[color]; *ptr++ = im->blue[color]; } } if(mode == 1) cpdf_placeInLineImage(pdf, buffer, count, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), (float) Z_DVAL_P(argv[5]), (float) Z_DVAL_P(argv[6]), im->sx, im->sy, 8, 2, Z_LVAL_P(argv[7])); else cpdf_rawPlaceInLineImage(pdf, buffer, count, (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), (float) Z_DVAL_P(argv[5]), (float) Z_DVAL_P(argv[6]), im->sx, im->sy, 8, 2, Z_LVAL_P(argv[7])); efree(buffer); RETURN_TRUE; } /* }}} */ #endif /* {{{ proto void cpdf_add_annotation(int pdfdoc, float xll, float yll, float xur, float xur, string title, string text [, int mode]) Sets annotation */ PHP_FUNCTION(cpdf_add_annotation) { pval *argv[11]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDFannotAttrib attrib; argc = ZEND_NUM_ARGS(); if((argc < 7) || (argc > 8)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_string(argv[5]); convert_to_string(argv[6]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } attrib.flags = AF_NOZOOM | AF_NOROTATE | AF_READONLY; attrib.border_array = "[0 0 1 [4 2]]"; attrib.BS = NULL; attrib.r = 0.00; attrib.g = 1.00; attrib.b = 1.00; if(argc > 7) { convert_to_long(argv[7]); mode = Z_LVAL_P(argv[7]); } if(mode == 1) cpdf_rawSetAnnotation(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), Z_STRVAL_P(argv[5]), Z_STRVAL_P(argv[6]), &attrib); else cpdf_setAnnotation(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), Z_STRVAL_P(argv[5]), Z_STRVAL_P(argv[6]), &attrib); RETURN_TRUE; } /* }}} */ /* {{{ proto void cpdf_set_action_url(int pdfdoc, float xll, float yll, float xur, float xur, string url [, int mode]) Sets hyperlink */ PHP_FUNCTION(cpdf_set_action_url) { pval *argv[11]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDFannotAttrib attrib; argc = ZEND_NUM_ARGS(); if((argc < 6) || (argc > 7)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_string(argv[5]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } attrib.flags = AF_NOZOOM | AF_NOROTATE | AF_READONLY; attrib.border_array = "[0 0 1 [4 0]]"; attrib.BS = NULL; attrib.r = 0.00; attrib.g = 0.00; attrib.b = 1.00; if(argc > 6) { convert_to_long(argv[6]); mode = Z_LVAL_P(argv[6]); } if(mode == 1) cpdf_rawSetActionURL(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), Z_STRVAL_P(argv[5]), &attrib); else cpdf_setActionURL(pdf, (float) Z_DVAL_P(argv[1]), (float) Z_DVAL_P(argv[2]), (float) Z_DVAL_P(argv[3]), (float) Z_DVAL_P(argv[4]), Z_STRVAL_P(argv[5]), &attrib); RETURN_TRUE; } /* }}} */ /* {{{ proto int cpdf_add_outline(int pdfdoc, int lastoutline, int sublevel, int open, int pagenr, string title) Adds outline */ PHP_FUNCTION(cpdf_add_outline) { pval *argv[11]; int id, oid, type, argc; CPDFdoc *pdf; CPDFoutlineEntry *lastoutline; argc = ZEND_NUM_ARGS(); if(argc != 6) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_long(argv[1]); convert_to_long(argv[2]); convert_to_long(argv[3]); convert_to_long(argv[4]); convert_to_string(argv[5]); id=Z_LVAL_P(argv[0]); pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } oid=Z_LVAL_P(argv[1]); lastoutline = zend_list_find(oid, &type); if(!lastoutline || type!=CPDF_GLOBAL(le_outline)) { lastoutline = NULL; /* php_error(E_WARNING, "Unable to find last outline entry %d", id); RETURN_FALSE; */ } lastoutline = cpdf_addOutlineEntry(pdf, lastoutline, Z_LVAL_P(argv[2]), Z_LVAL_P(argv[3]), Z_LVAL_P(argv[4]), Z_STRVAL_P(argv[5]), 1, 0.0, 0.0, 0.0, 0.0); id = zend_list_insert(lastoutline, CPDF_GLOBAL(le_outline)); RETURN_LONG(id); } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/cpdf/cpdf.dsp0100644000175200000240000001135607164104662014315 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="cpdf" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=cpdf - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "cpdf.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "cpdf.mak" CFG="cpdf - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "cpdf - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "cpdf - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "cpdf - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CPDF" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\bindlib_w32" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CPDF_EXPORTS" /D "COMPILE_DL_CPDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CPDFLIB=1 /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib cpdfi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts.lib cpdf.lib user32.lib winspool.lib kernel32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_cpdf.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "cpdf - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CPDF" /D ZTS=1 /D MSSQL70=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\bindlib_w32" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CPDF_EXPORTS" /D "COMPILE_DL_CPDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CPDFLIB=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib cpdfi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 cpdf.lib php4ts_debug.lib user32.lib winspool.lib kernel32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_cpdf.dll" /libpath:"..\..\Debug_TS" # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "cpdf - Win32 Release_TS" # Name "cpdf - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\cpdf.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_cpdf.h # End Source File # End Group # End Target # End Project php-4.2.3/ext/cpdf/php_cpdf.h0100644000175200000240000001002107437364613014620 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Uwe Steinmann | +----------------------------------------------------------------------+ */ /* $Id: php_cpdf.h,v 1.12 2025/02/28 08:25:47 sebastian Exp $ */ #ifndef PHP_CPDF_H #define PHP_CPDF_H #if HAVE_CPDFLIB /* The macro T is defined in the IMAP headers and clashes with a function declaration here. Get rid of it. */ #ifdef T #undef T #endif #include extern zend_module_entry cpdf_module_entry; #define cpdf_module_ptr &cpdf_module_entry PHP_MINFO_FUNCTION(cpdf); PHP_MINIT_FUNCTION(cpdf); PHP_RINIT_FUNCTION(cpdf); PHP_MSHUTDOWN_FUNCTION(cpdf); PHP_FUNCTION(cpdf_global_set_document_limits); PHP_FUNCTION(cpdf_set_creator); PHP_FUNCTION(cpdf_set_title); PHP_FUNCTION(cpdf_set_subject); PHP_FUNCTION(cpdf_set_keywords); PHP_FUNCTION(cpdf_set_viewer_preferences); PHP_FUNCTION(cpdf_open); PHP_FUNCTION(cpdf_close); PHP_FUNCTION(cpdf_page_init); PHP_FUNCTION(cpdf_finalize_page); PHP_FUNCTION(cpdf_set_current_page); PHP_FUNCTION(cpdf_begin_text); PHP_FUNCTION(cpdf_end_text); PHP_FUNCTION(cpdf_show); PHP_FUNCTION(cpdf_show_xy); PHP_FUNCTION(cpdf_continue_text); PHP_FUNCTION(cpdf_text); PHP_FUNCTION(cpdf_set_font); PHP_FUNCTION(cpdf_set_font_directories); PHP_FUNCTION(cpdf_set_font_map_file); PHP_FUNCTION(cpdf_set_leading); PHP_FUNCTION(cpdf_set_text_rendering); PHP_FUNCTION(cpdf_set_horiz_scaling); PHP_FUNCTION(cpdf_set_text_rise); PHP_FUNCTION(cpdf_set_text_matrix); PHP_FUNCTION(cpdf_set_text_pos); PHP_FUNCTION(cpdf_rotate_text); PHP_FUNCTION(cpdf_set_char_spacing); PHP_FUNCTION(cpdf_set_word_spacing); PHP_FUNCTION(cpdf_continue_text); PHP_FUNCTION(cpdf_stringwidth); PHP_FUNCTION(cpdf_save); PHP_FUNCTION(cpdf_restore); PHP_FUNCTION(cpdf_translate); PHP_FUNCTION(cpdf_scale); PHP_FUNCTION(cpdf_rotate); PHP_FUNCTION(cpdf_setflat); PHP_FUNCTION(cpdf_setlinejoin); PHP_FUNCTION(cpdf_setlinecap); PHP_FUNCTION(cpdf_setmiterlimit); PHP_FUNCTION(cpdf_setlinewidth); PHP_FUNCTION(cpdf_setdash); PHP_FUNCTION(cpdf_moveto); PHP_FUNCTION(cpdf_rmoveto); PHP_FUNCTION(cpdf_curveto); PHP_FUNCTION(cpdf_lineto); PHP_FUNCTION(cpdf_rlineto); PHP_FUNCTION(cpdf_circle); PHP_FUNCTION(cpdf_arc); PHP_FUNCTION(cpdf_rect); PHP_FUNCTION(cpdf_newpath); PHP_FUNCTION(cpdf_closepath); PHP_FUNCTION(cpdf_closepath_stroke); PHP_FUNCTION(cpdf_stroke); PHP_FUNCTION(cpdf_fill); PHP_FUNCTION(cpdf_fill_stroke); PHP_FUNCTION(cpdf_closepath_fill_stroke); PHP_FUNCTION(cpdf_endpath); PHP_FUNCTION(cpdf_clip); PHP_FUNCTION(cpdf_setgray_fill); PHP_FUNCTION(cpdf_setgray_stroke); PHP_FUNCTION(cpdf_setgray); PHP_FUNCTION(cpdf_setrgbcolor_fill); PHP_FUNCTION(cpdf_setrgbcolor_stroke); PHP_FUNCTION(cpdf_setrgbcolor); PHP_FUNCTION(cpdf_add_outline); PHP_FUNCTION(cpdf_set_page_animation); PHP_FUNCTION(cpdf_finalize); PHP_FUNCTION(cpdf_output_buffer); PHP_FUNCTION(cpdf_save_to_file); PHP_FUNCTION(cpdf_add_annotation); PHP_FUNCTION(cpdf_import_jpeg); #if HAVE_LIBGD13 PHP_FUNCTION(cpdf_place_inline_image); #endif PHP_FUNCTION(cpdf_set_action_url); #else #define cpdf_module_ptr NULL #endif #define phpext_cpdf_ptr cpdf_module_ptr #endif /* _PHP_PDF_H */ php-4.2.3/ext/crack/0040755000175200000240000000000007535765574013056 5ustar zeevstaffphp-4.2.3/ext/crack/tests/0040755000175200000240000000000007535765574014220 5ustar zeevstaffphp-4.2.3/ext/crack/tests/001.phpt0100644000175200000240000000104707212162030015356 0ustar zeevstaff--TEST-- Check for crack presence --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- crack extension is availablephp-4.2.3/ext/crack/CREDITS0100644000175200000240000000003007232042174014036 0ustar zeevstaffcrack Alexander Feldman php-4.2.3/ext/crack/EXPERIMENTAL0100644000175200000240000000023707232042174014647 0ustar zeevstaffthis extension is experimental, its functions may change their names or move to extension all together so do not rely to much on them you have been warned! php-4.2.3/ext/crack/Makefile.in0100644000175200000240000000037007212162030015062 0ustar zeevstaff# $Id: Makefile.in,v 1.1 2025/12/02 11:59:20 sasha Exp $ LTLIBRARY_NAME = libcrack.la LTLIBRARY_SOURCES = crack.c LTLIBRARY_SHARED_NAME = crack.la LTLIBRARY_SHARED_LIBADD = $(CRACK_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/crack/config.m40100644000175200000240000000157507437536136014561 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.7 2025/02/28 23:25:18 sniper Exp $ dnl PHP_ARG_WITH(crack, for CRACKlib support, [ --with-crack[=DIR] Include crack support.]) if test "$PHP_CRACK" != "no"; then for i in /usr/local/lib /usr/lib $PHP_CRACK/lib $PHP_CRACK/cracklib; do test -f $i/libcrack.$SHLIB_SUFFIX_NAME -o -f $i/libcrack.a && CRACK_LIBDIR=$i done for i in /usr/local/include /usr/include $PHP_CRACK/include $PHP_CRACK/cracklib; do test -f $i/packer.h && CRACK_INCLUDEDIR=$i done if test -z "$CRACK_LIBDIR"; then AC_MSG_ERROR(Cannot find the cracklib library file) fi if test -z "$CRACK_INCLUDEDIR"; then AC_MSG_ERROR(Cannot find a cracklib header file) fi PHP_ADD_INCLUDE($CRACK_INCLUDEDIR) PHP_ADD_LIBRARY_WITH_PATH(crack, $CRACK_LIBDIR, CRACK_SHARED_LIBADD) PHP_EXTENSION(crack, $ext_shared) PHP_SUBST(CRACK_SHARED_LIBADD) AC_DEFINE(HAVE_CRACK, 1, [ ]) fi php-4.2.3/ext/crack/crack.c0100644000175200000240000001455007437364614014276 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Alexander Feldman | +----------------------------------------------------------------------+ */ /* $Id: crack.c,v 1.18 2025/02/28 08:25:48 sebastian Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" #include "php_crack.h" #if HAVE_CRACK #include ZEND_DECLARE_MODULE_GLOBALS(crack) /* True global resources - no need for thread safety here */ static int le_crack; function_entry crack_functions[] = { ZEND_FE(crack_opendict, NULL) ZEND_FE(crack_closedict, NULL) ZEND_FE(crack_check, NULL) ZEND_FE(crack_getlastmessage, NULL) {NULL, NULL, NULL} }; zend_module_entry crack_module_entry = { STANDARD_MODULE_HEADER, "crack", crack_functions, ZEND_MODULE_STARTUP_N(crack), ZEND_MODULE_SHUTDOWN_N(crack), ZEND_MODULE_ACTIVATE_N(crack), ZEND_MODULE_DEACTIVATE_N(crack), ZEND_MODULE_INFO_N(crack), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_CRACK ZEND_GET_MODULE(crack) #endif PHP_INI_BEGIN() STD_PHP_INI_ENTRY("crack.default_dictionary", NULL, PHP_INI_SYSTEM, OnUpdateString, default_dictionary, zend_crack_globals, crack_globals) PHP_INI_END() long _crack_open_dict(char *dictpath TSRMLS_DC) { PWDICT *pwdict; long resource; if (CRACKG(current_id) != -1) { zend_error(E_WARNING, "Can not use more than one open dictionary with this implementation of libcrack"); return -1; } if (NULL == (pwdict = PWOpen(dictpath, "r"))) { zend_error(E_WARNING, "Unable to open a crack dictionary"); return -1; } resource = zend_list_insert(pwdict, le_crack); /* if (CRACKG(current_id) != -1) { zend_list_delete(CRACKG(current_id)); } */ CRACKG(current_id) = resource; return resource; } void _close_crack_dict(PWDICT *pwdict) { PWClose(pwdict); } ZEND_MODULE_STARTUP_D(crack) { #ifdef ZTS zend_crack_globals *crack_globals; ts_allocate_id(&crack_globals_id, sizeof(zend_crack_globals), NULL, NULL); crack_globals = ts_resource(crack_globals_id); #endif REGISTER_INI_ENTRIES(); le_crack = register_list_destructors(_close_crack_dict, NULL); return SUCCESS; } ZEND_MODULE_SHUTDOWN_D(crack) { UNREGISTER_INI_ENTRIES(); return SUCCESS; } ZEND_MODULE_ACTIVATE_D(crack) { CRACKG(last_message) = NULL; CRACKG(current_id) = -1; return SUCCESS; } ZEND_MODULE_DEACTIVATE_D(crack) { if (NULL != CRACKG(last_message)) { efree(CRACKG(last_message)); } return SUCCESS; } ZEND_MODULE_INFO_D(crack) { php_info_print_table_start(); php_info_print_table_header(2, "crack support", "enabled"); php_info_print_table_end(); DISPLAY_INI_ENTRIES(); } /* {{{ proto string crack_opendict(string dictionary) Opens a new cracklib dictionary */ ZEND_FUNCTION(crack_opendict) { zval **dictpath; long resource; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &dictpath) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(dictpath); if (-1 == (resource = _crack_open_dict(Z_STRVAL_PP(dictpath) TSRMLS_CC))) { RETURN_FALSE; } RETURN_RESOURCE(resource); } /* }}} */ /* {{{ proto string crack_closedict([int link_identifier]) Closes an open cracklib dictionary */ ZEND_FUNCTION(crack_closedict) { PWDICT *pwdict; zval **dictionary; long id; switch (ZEND_NUM_ARGS()) { case 0: id = CRACKG(current_id); break; case 1: if (zend_get_parameters_ex(1, &dictionary) == FAILURE) { WRONG_PARAM_COUNT; } id = Z_LVAL_PP(dictionary); break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(pwdict, PWDICT *, dictionary, id, "cracklib dictionary", le_crack); if (CRACKG(current_id) == id) { CRACKG(current_id) = -1; } zend_list_delete(id); RETURN_TRUE; } /* }}} */ /* {{{ proto string crack_check([int dictionary,] string password) Performs an obscure check with the given password */ ZEND_FUNCTION(crack_check) { zval **dictionary = NULL, **password; char pwtrunced[STRINGSIZE]; char *message; PWDICT *pwdict; long id; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &password) == FAILURE) { RETURN_FALSE; } if (NULL != CRACKG(default_dictionary) && CRACKG(current_id) == -1) { _crack_open_dict(CRACKG(default_dictionary) TSRMLS_CC); } id = CRACKG(current_id); break; case 2: if (zend_get_parameters_ex(2, &dictionary, &password) == FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(pwdict, PWDICT *, dictionary, id, "cracklib dictionary", le_crack); convert_to_string_ex(password); /* Prevent buffer overflow attacks. */ strlcpy(pwtrunced, Z_STRVAL_PP(password), sizeof(pwtrunced)); message = (char *)FascistLook(pwdict, pwtrunced); if (NULL != CRACKG(last_message)) { efree(CRACKG(last_message)); } if (NULL == message) { CRACKG(last_message) = estrdup("strong password"); RETURN_TRUE; } CRACKG(last_message) = estrdup(message); RETURN_FALSE; } /* }}} */ /* {{{ proto string crack_getlastmessage(void) Returns the message from the last obscure check */ ZEND_FUNCTION(crack_getlastmessage) { if (ZEND_NUM_ARGS() != 0) { WRONG_PARAM_COUNT; } if (NULL == CRACKG(last_message)) { zend_error(E_WARNING, "No obscure checks in this session"); RETURN_FALSE; } RETURN_STRING(CRACKG(last_message), 1); } /* }}} */ #endif /* HAVE_CRACK */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/crack/php_crack.h0100644000175200000240000000414207437364614015146 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Alexander Feldman | +----------------------------------------------------------------------+ */ /* $Id: php_crack.h,v 1.5 2025/02/28 08:25:48 sebastian Exp $ */ #ifndef ZEND_CRACK_H #define ZEND_CRACK_H #if HAVE_CRACK extern zend_module_entry crack_module_entry; #define phpext_crack_ptr &crack_module_entry #ifdef ZEND_WIN32 #define ZEND_CRACK_API __declspec(dllexport) #else #define ZEND_CRACK_API #endif ZEND_MINIT_FUNCTION(crack); ZEND_MSHUTDOWN_FUNCTION(crack); ZEND_RINIT_FUNCTION(crack); ZEND_RSHUTDOWN_FUNCTION(crack); PHP_MINFO_FUNCTION(crack); ZEND_FUNCTION(crack_opendict); ZEND_FUNCTION(crack_closedict); ZEND_FUNCTION(crack_check); ZEND_FUNCTION(crack_getlastmessage); ZEND_BEGIN_MODULE_GLOBALS(crack) char *default_dictionary; char *last_message; long current_id; ZEND_END_MODULE_GLOBALS(crack) #ifdef ZTS #define CRACKG(v) TSRMG(crack_globals_id, zend_crack_globals *, v) #else #define CRACKG(v) (crack_globals.v) #endif #else #define phpext_crack_ptr NULL #endif #endif /* ZEND_CRACK_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/ctype/0040755000175200000240000000000007535765574013117 5ustar zeevstaffphp-4.2.3/ext/ctype/tests/0040755000175200000240000000000007535765574014261 5ustar zeevstaffphp-4.2.3/ext/ctype/tests/001.phpt0100644000175200000240000000146707364705024015443 0ustar zeevstaff--TEST-- ctype on integers --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- ctype_lower 26 ctype_upper 26 ctype_alpha 52 ctype_digit 10 ctype_alnum 62 ctype_cntrl 33 ctype_graph 94 ctype_print 95 ctype_punct 32 ctype_space 6 ctype_xdigit 22 php-4.2.3/ext/ctype/tests/002.phpt0100644000175200000240000000163207364705024015436 0ustar zeevstaff--TEST-- ctype on strings --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- ctype_lower 26 0 ctype_upper 26 0 ctype_alpha 52 0 ctype_digit 10 0 ctype_alnum 62 0 ctype_cntrl 33 0 ctype_graph 94 94 ctype_print 95 95 ctype_punct 32 0 ctype_space 6 0 ctype_xdigit 22 0 php-4.2.3/ext/ctype/CREDITS0100644000175200000240000000003107206621376014110 0ustar zeevstaffctype Hartmut Holzgraefe php-4.2.3/ext/ctype/Makefile.in0100644000175200000240000000037307206615274015146 0ustar zeevstaff# $Id: Makefile.in,v 1.1 2025/11/22 01:00:44 hholzgra Exp $ LTLIBRARY_NAME = libctype.la LTLIBRARY_SOURCES = ctype.c LTLIBRARY_SHARED_NAME = ctype.la LTLIBRARY_SHARED_LIBADD = $(CTYPE_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/ctype/README0100644000175200000240000000037707206621376013765 0ustar zeevstaffthis is an experimental extension that provides the ctype family of function available in C i'm not sure about whether they should go into ext/standard or stay as an extension of their own and about using a ctype_ prefix or sticking with the C names ... php-4.2.3/ext/ctype/config.m40100644000175200000240000000044307440171510014574 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.4 2025/03/02 15:44:08 hholzgra Exp $ dnl PHP_ARG_ENABLE(ctype, whether to enable ctype functions, [ --disable-ctype Disable ctype functions], yes) if test "$PHP_CTYPE" != "no"; then AC_DEFINE(HAVE_CTYPE, 1, [ ]) PHP_EXTENSION(ctype, $ext_shared) fi php-4.2.3/ext/ctype/ctype.c0100644000175200000240000001141007442253241014355 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Hartmut Holzgraefe | +----------------------------------------------------------------------+ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "php_ctype.h" #include "SAPI.h" #include "ext/standard/info.h" #include /* You should tweak config.m4 so this symbol (or some else suitable) gets defined. */ #if HAVE_CTYPE /* If you declare any globals in php_ctype.h uncomment this: ZEND_DECLARE_MODULE_GLOBALS(ctype) */ /* True global resources - no need for thread safety here */ /* static int le_ctype; */ /* {{{ ctype_functions[] * Every user visible function must have an entry in ctype_functions[]. */ function_entry ctype_functions[] = { PHP_FE(ctype_alnum, NULL) PHP_FE(ctype_alpha, NULL) PHP_FE(ctype_cntrl, NULL) PHP_FE(ctype_digit, NULL) PHP_FE(ctype_lower, NULL) PHP_FE(ctype_graph, NULL) PHP_FE(ctype_print, NULL) PHP_FE(ctype_punct, NULL) PHP_FE(ctype_space, NULL) PHP_FE(ctype_upper, NULL) PHP_FE(ctype_xdigit, NULL) {NULL, NULL, NULL} /* Must be the last line in ctype_functions[] */ }; /* }}} */ /* {{{ ctype_mpodule_entry */ zend_module_entry ctype_module_entry = { STANDARD_MODULE_HEADER, "ctype", ctype_functions, NULL, NULL, NULL, NULL, PHP_MINFO(ctype), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; /* }}} */ #ifdef COMPILE_DL_CTYPE ZEND_GET_MODULE(ctype) #endif /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(ctype) { php_info_print_table_start(); php_info_print_table_row(2, "ctype functions", "enabled (experimental)"); php_info_print_table_end(); } /* }}} */ /* {{{ ctype */ #define CTYPE(iswhat) \ zval *c; \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &c) == FAILURE) \ return; \ switch (Z_TYPE_P(c)) { \ case IS_LONG: \ RETURN_BOOL(iswhat(Z_LVAL_P(c))); \ case IS_STRING: \ { \ char *p; \ int n, len; \ p=Z_STRVAL_P(c); \ len = Z_STRLEN_P(c); \ for(n=0;n # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=ctype - Win32 Debug_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "ctype.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "ctype.mak" CFG="ctype - Win32 Debug_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "ctype - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "ctype - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "ctype - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTYPE_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "PHP_EXPORTS" /D "COMPILE_DL_CTYPE" /D ZTS=1 /D HAVE_CTYPE=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x407 /d "NDEBUG" # ADD RSC /l 0x407 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ctype.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" !ELSEIF "$(CFG)" == "ctype - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTYPE_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_CTYPE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CTYPE=1 /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x407 /d "_DEBUG" # ADD RSC /l 0x407 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ctype.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "ctype - Win32 Release_TS" # Name "ctype - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\ctype.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_ctype.h # End Source File # End Group # End Target # End Project php-4.2.3/ext/ctype/ctype.xml0100644000175200000240000001336007206615274014747 0ustar zeevstaff Character type functions ctype These functions check whether a character or string falls into a certain character class according to the i current locale. When called with an integer argument theese functions behave exactly like their C counterparts. When called with a string argument they will check every character in the string and will only return true if every character in the string matches the requested criteria. Passing anything else but a string or integer will return false immediately. isalnum Check for alphanumeric character(s) Description bool isalnum string c See also setlocale. isalpha Description bool isalpha string c iscntrl Description bool iscntrl string c isdigit Description bool isdigit string c islower Description bool islower string c isgraph Description bool isgraph string c isprint Description bool isprint string c ispunct Description bool ispunct string c isspace Description bool isspace string c isupper Description bool isupper string c isxdigit Description bool isxdigit string c php-4.2.3/ext/ctype/php_ctype.h0100644000175200000240000000451607437364616015257 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Hartmut Holzgraefe | +----------------------------------------------------------------------+ */ #ifndef PHP_CTYPE_H #define PHP_CTYPE_H /* You should tweak config.m4 so this symbol (or some else suitable) gets defined. */ #if HAVE_CTYPE extern zend_module_entry ctype_module_entry; #define phpext_ctype_ptr &ctype_module_entry #ifdef PHP_WIN32 #define PHP_CTYPE_API __declspec(dllexport) #else #define PHP_CTYPE_API #endif PHP_MINIT_FUNCTION(ctype); PHP_MSHUTDOWN_FUNCTION(ctype); PHP_RINIT_FUNCTION(ctype); PHP_RSHUTDOWN_FUNCTION(ctype); PHP_MINFO_FUNCTION(ctype); PHP_FUNCTION(ctype_alnum); PHP_FUNCTION(ctype_alpha); PHP_FUNCTION(ctype_cntrl); PHP_FUNCTION(ctype_digit); PHP_FUNCTION(ctype_lower); PHP_FUNCTION(ctype_graph); PHP_FUNCTION(ctype_print); PHP_FUNCTION(ctype_punct); PHP_FUNCTION(ctype_space); PHP_FUNCTION(ctype_upper); PHP_FUNCTION(ctype_xdigit); /* Declare any global variables you may need between the BEGIN and END macros here: ZEND_BEGIN_MODULE_GLOBALS(ctype) int global_variable; ZEND_END_MODULE_GLOBALS(ctype) */ #ifdef ZTS #define CTYPEG(v) TSRMG(ctype_globals_id, php_ctype_globals *, v) #else #define CTYPEG(v) (ctype_globals.v) #endif #else #define phpext_ctype_ptr NULL #endif #endif /* PHP_CTYPE_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/curl/0040755000175200000240000000000007535765574012740 5ustar zeevstaffphp-4.2.3/ext/curl/CREDITS0100644000175200000240000000002507206176562013736 0ustar zeevstaffCURL Sterling Hughes php-4.2.3/ext/curl/Makefile.in0100644000175200000240000000026407134407375014767 0ustar zeevstaff LTLIBRARY_NAME = libcurl.la LTLIBRARY_SOURCES = curl.c LTLIBRARY_SHARED_NAME = curl.la LTLIBRARY_SHARED_LIBADD = $(CURL_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/curl/config.m40100644000175200000240000000343307401753421014423 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.12 2025/11/30 18:59:29 sniper Exp $ dnl PHP_ARG_WITH(curl, for CURL support, [ --with-curl[=DIR] Include CURL support]) if test "$PHP_CURL" != "no"; then if test -r $PHP_CURL/include/curl/easy.h; then CURL_DIR=$PHP_CURL else AC_MSG_CHECKING(for CURL in default path) for i in /usr/local /usr; do if test -r $i/include/curl/easy.h; then CURL_DIR=$i AC_MSG_RESULT(found in $i) fi done fi if test -z "$CURL_DIR"; then AC_MSG_RESULT(not found) AC_MSG_ERROR(Please reinstall the libcurl distribution - easy.h should be in /include/curl/) fi CURL_CONFIG="curl-config" AC_MSG_CHECKING(for cURL 7.9 or greater) if ${CURL_DIR}/bin/curl-config --libs print > /dev/null 2>&1; then CURL_CONFIG=${CURL_DIR}/bin/curl-config else if ${CURL_DIR}/curl-config --libs print > /dev/null 2>&1; then CURL_CONFIG=${CURL_DIR}/curl-config fi fi curl_version_full=`$CURL_CONFIG --version` curl_version=`echo ${curl_version_full} | sed -e 's/libcurl //' | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` if test "$curl_version" -ge 7009000; then AC_MSG_RESULT($curl_version_full) CURL_LIBS=`$CURL_CONFIG --libs` else AC_MSG_ERROR(cURL version 7.9 or later is required to compile php with cURL support) fi PHP_ADD_INCLUDE($CURL_DIR/include) PHP_EVAL_LIBLINE($CURL_LIBS, CURL_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(curl, $CURL_DIR/lib, CURL_SHARED_LIBADD) PHP_CHECK_LIBRARY(curl,curl_easy_perform, [ AC_DEFINE(HAVE_CURL,1,[ ]) ],[ AC_MSG_ERROR(There is something wrong. Please check config.log for more information.) ],[ $CURL_LIBS -L$CURL_DIR/lib ]) PHP_EXTENSION(curl, $ext_shared) PHP_SUBST(CURL_SHARED_LIBADD) fi php-4.2.3/ext/curl/curl.c0100644000175200000240000007455407452714211014041 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sterling Hughes | +----------------------------------------------------------------------+ */ /* $Id: curl.c,v 1.105.2.2 2025/04/04 00:04:25 sterling Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if HAVE_CURL #include #include #ifdef PHP_WIN32 #include #include #endif #include #include #define SMART_STR_PREALLOC 4096 #include "ext/standard/php_smart_str.h" #include "ext/standard/info.h" #include "ext/standard/file.h" #include "php_curl.h" static int le_curl; #define le_curl_name "cURL handle" static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC); #define SAVE_CURL_ERROR(__handle, __err) (__handle)->err.no = (int) __err; /* {{{ curl_functions[] */ function_entry curl_functions[] = { PHP_FE(curl_init, NULL) PHP_FE(curl_version, NULL) PHP_FE(curl_setopt, NULL) PHP_FE(curl_exec, NULL) PHP_FE(curl_getinfo, NULL) PHP_FE(curl_error, NULL) PHP_FE(curl_errno, NULL) PHP_FE(curl_close, NULL) {NULL, NULL, NULL} }; /* }}} */ /* {{{ curl_module_entry */ zend_module_entry curl_module_entry = { STANDARD_MODULE_HEADER, "curl", curl_functions, PHP_MINIT(curl), PHP_MSHUTDOWN(curl), NULL, NULL, PHP_MINFO(curl), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; /* }}} */ #ifdef COMPILE_DL_CURL ZEND_GET_MODULE (curl) #endif /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(curl) { php_info_print_table_start(); php_info_print_table_row(2, "CURL support", "enabled"); php_info_print_table_row(2, "CURL Information", curl_version()); php_info_print_table_end(); } /* }}} */ #define REGISTER_CURL_CONSTANT(__c) REGISTER_LONG_CONSTANT(#__c, __c, CONST_CS | CONST_PERSISTENT) /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(curl) { le_curl = zend_register_list_destructors_ex(_php_curl_close, NULL, "curl", module_number); /* Constants for curl_setopt() */ REGISTER_CURL_CONSTANT(CURLOPT_PORT); REGISTER_CURL_CONSTANT(CURLOPT_FILE); REGISTER_CURL_CONSTANT(CURLOPT_INFILE); REGISTER_CURL_CONSTANT(CURLOPT_INFILESIZE); REGISTER_CURL_CONSTANT(CURLOPT_URL); REGISTER_CURL_CONSTANT(CURLOPT_PROXY); REGISTER_CURL_CONSTANT(CURLOPT_VERBOSE); REGISTER_CURL_CONSTANT(CURLOPT_HEADER); REGISTER_CURL_CONSTANT(CURLOPT_HTTPHEADER); REGISTER_CURL_CONSTANT(CURLOPT_NOPROGRESS); REGISTER_CURL_CONSTANT(CURLOPT_NOBODY); REGISTER_CURL_CONSTANT(CURLOPT_FAILONERROR); REGISTER_CURL_CONSTANT(CURLOPT_UPLOAD); REGISTER_CURL_CONSTANT(CURLOPT_POST); REGISTER_CURL_CONSTANT(CURLOPT_FTPLISTONLY); REGISTER_CURL_CONSTANT(CURLOPT_FTPAPPEND); REGISTER_CURL_CONSTANT(CURLOPT_NETRC); REGISTER_CURL_CONSTANT(CURLOPT_FOLLOWLOCATION); REGISTER_CURL_CONSTANT(CURLOPT_FTPASCII); REGISTER_CURL_CONSTANT(CURLOPT_PUT); REGISTER_CURL_CONSTANT(CURLOPT_MUTE); REGISTER_CURL_CONSTANT(CURLOPT_USERPWD); REGISTER_CURL_CONSTANT(CURLOPT_PROXYUSERPWD); REGISTER_CURL_CONSTANT(CURLOPT_RANGE); REGISTER_CURL_CONSTANT(CURLOPT_TIMEOUT); REGISTER_CURL_CONSTANT(CURLOPT_POSTFIELDS); REGISTER_CURL_CONSTANT(CURLOPT_REFERER); REGISTER_CURL_CONSTANT(CURLOPT_USERAGENT); REGISTER_CURL_CONSTANT(CURLOPT_FTPPORT); REGISTER_CURL_CONSTANT(CURLOPT_LOW_SPEED_LIMIT); REGISTER_CURL_CONSTANT(CURLOPT_LOW_SPEED_TIME); REGISTER_CURL_CONSTANT(CURLOPT_RESUME_FROM); REGISTER_CURL_CONSTANT(CURLOPT_COOKIE); REGISTER_CURL_CONSTANT(CURLOPT_SSLCERT); REGISTER_CURL_CONSTANT(CURLOPT_SSLCERTPASSWD); REGISTER_CURL_CONSTANT(CURLOPT_WRITEHEADER); REGISTER_CURL_CONSTANT(CURLOPT_SSL_VERIFYHOST); REGISTER_CURL_CONSTANT(CURLOPT_COOKIEFILE); REGISTER_CURL_CONSTANT(CURLOPT_SSLVERSION); REGISTER_CURL_CONSTANT(CURLOPT_TIMECONDITION); REGISTER_CURL_CONSTANT(CURLOPT_TIMEVALUE); REGISTER_CURL_CONSTANT(CURLOPT_CUSTOMREQUEST); REGISTER_CURL_CONSTANT(CURLOPT_STDERR); REGISTER_CURL_CONSTANT(CURLOPT_TRANSFERTEXT); REGISTER_CURL_CONSTANT(CURLOPT_RETURNTRANSFER); REGISTER_CURL_CONSTANT(CURLOPT_QUOTE); REGISTER_CURL_CONSTANT(CURLOPT_POSTQUOTE); REGISTER_CURL_CONSTANT(CURLOPT_INTERFACE); REGISTER_CURL_CONSTANT(CURLOPT_KRB4LEVEL); REGISTER_CURL_CONSTANT(CURLOPT_HTTPPROXYTUNNEL); REGISTER_CURL_CONSTANT(CURLOPT_FILETIME); REGISTER_CURL_CONSTANT(CURLOPT_WRITEFUNCTION); REGISTER_CURL_CONSTANT(CURLOPT_READFUNCTION); REGISTER_CURL_CONSTANT(CURLOPT_PASSWDFUNCTION); REGISTER_CURL_CONSTANT(CURLOPT_HEADERFUNCTION); REGISTER_CURL_CONSTANT(CURLOPT_MAXREDIRS); REGISTER_CURL_CONSTANT(CURLOPT_MAXCONNECTS); REGISTER_CURL_CONSTANT(CURLOPT_CLOSEPOLICY); REGISTER_CURL_CONSTANT(CURLOPT_FRESH_CONNECT); REGISTER_CURL_CONSTANT(CURLOPT_FORBID_REUSE); REGISTER_CURL_CONSTANT(CURLOPT_RANDOM_FILE); REGISTER_CURL_CONSTANT(CURLOPT_EGDSOCKET); REGISTER_CURL_CONSTANT(CURLOPT_CONNECTTIMEOUT); REGISTER_CURL_CONSTANT(CURLOPT_SSL_VERIFYPEER); REGISTER_CURL_CONSTANT(CURLOPT_CAINFO); REGISTER_CURL_CONSTANT(CURLOPT_COOKIEJAR); REGISTER_CURL_CONSTANT(CURLOPT_SSL_CIPHER_LIST); REGISTER_CURL_CONSTANT(CURLOPT_BINARYTRANSFER); /* Constants effecting the way CURLOPT_CLOSEPOLICY works */ REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_LEAST_RECENTLY_USED); REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_LEAST_TRAFFIC); REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_SLOWEST); REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_CALLBACK); REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_OLDEST); /* Info constants */ REGISTER_CURL_CONSTANT(CURLINFO_EFFECTIVE_URL); REGISTER_CURL_CONSTANT(CURLINFO_HTTP_CODE); REGISTER_CURL_CONSTANT(CURLINFO_HEADER_SIZE); REGISTER_CURL_CONSTANT(CURLINFO_REQUEST_SIZE); REGISTER_CURL_CONSTANT(CURLINFO_TOTAL_TIME); REGISTER_CURL_CONSTANT(CURLINFO_NAMELOOKUP_TIME); REGISTER_CURL_CONSTANT(CURLINFO_CONNECT_TIME); REGISTER_CURL_CONSTANT(CURLINFO_PRETRANSFER_TIME); REGISTER_CURL_CONSTANT(CURLINFO_SIZE_UPLOAD); REGISTER_CURL_CONSTANT(CURLINFO_SIZE_DOWNLOAD); REGISTER_CURL_CONSTANT(CURLINFO_SPEED_DOWNLOAD); REGISTER_CURL_CONSTANT(CURLINFO_SPEED_UPLOAD); REGISTER_CURL_CONSTANT(CURLINFO_FILETIME); REGISTER_CURL_CONSTANT(CURLINFO_SSL_VERIFYRESULT); REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_LENGTH_DOWNLOAD); REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_LENGTH_UPLOAD); /* Error Constants */ REGISTER_CURL_CONSTANT(CURLE_OK); REGISTER_CURL_CONSTANT(CURLE_UNSUPPORTED_PROTOCOL); REGISTER_CURL_CONSTANT(CURLE_FAILED_INIT); REGISTER_CURL_CONSTANT(CURLE_URL_MALFORMAT); REGISTER_CURL_CONSTANT(CURLE_URL_MALFORMAT_USER); REGISTER_CURL_CONSTANT(CURLE_COULDNT_RESOLVE_PROXY); REGISTER_CURL_CONSTANT(CURLE_COULDNT_RESOLVE_HOST); REGISTER_CURL_CONSTANT(CURLE_COULDNT_CONNECT); REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_SERVER_REPLY); REGISTER_CURL_CONSTANT(CURLE_FTP_ACCESS_DENIED); REGISTER_CURL_CONSTANT(CURLE_FTP_USER_PASSWORD_INCORRECT); REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_PASS_REPLY); REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_USER_REPLY); REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_PASV_REPLY); REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_227_FORMAT); REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_GET_HOST); REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_RECONNECT); REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_BINARY); REGISTER_CURL_CONSTANT(CURLE_PARTIAL_FILE); REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_RETR_FILE); REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR); REGISTER_CURL_CONSTANT(CURLE_FTP_QUOTE_ERROR); REGISTER_CURL_CONSTANT(CURLE_HTTP_NOT_FOUND); REGISTER_CURL_CONSTANT(CURLE_WRITE_ERROR); REGISTER_CURL_CONSTANT(CURLE_MALFORMAT_USER); REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_STOR_FILE); REGISTER_CURL_CONSTANT(CURLE_READ_ERROR); REGISTER_CURL_CONSTANT(CURLE_OUT_OF_MEMORY); REGISTER_CURL_CONSTANT(CURLE_OPERATION_TIMEOUTED); REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_ASCII); REGISTER_CURL_CONSTANT(CURLE_FTP_PORT_FAILED); REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_USE_REST); REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_GET_SIZE); REGISTER_CURL_CONSTANT(CURLE_HTTP_RANGE_ERROR); REGISTER_CURL_CONSTANT(CURLE_HTTP_POST_ERROR); REGISTER_CURL_CONSTANT(CURLE_SSL_CONNECT_ERROR); REGISTER_CURL_CONSTANT(CURLE_FTP_BAD_DOWNLOAD_RESUME); REGISTER_CURL_CONSTANT(CURLE_FILE_COULDNT_READ_FILE); REGISTER_CURL_CONSTANT(CURLE_LDAP_CANNOT_BIND); REGISTER_CURL_CONSTANT(CURLE_LDAP_SEARCH_FAILED); REGISTER_CURL_CONSTANT(CURLE_LIBRARY_NOT_FOUND); REGISTER_CURL_CONSTANT(CURLE_FUNCTION_NOT_FOUND); REGISTER_CURL_CONSTANT(CURLE_ABORTED_BY_CALLBACK); REGISTER_CURL_CONSTANT(CURLE_BAD_FUNCTION_ARGUMENT); REGISTER_CURL_CONSTANT(CURLE_BAD_CALLING_ORDER); REGISTER_CURL_CONSTANT(CURLE_HTTP_PORT_FAILED); REGISTER_CURL_CONSTANT(CURLE_BAD_PASSWORD_ENTERED); REGISTER_CURL_CONSTANT(CURLE_TOO_MANY_REDIRECTS); REGISTER_CURL_CONSTANT(CURLE_UNKNOWN_TELNET_OPTION); REGISTER_CURL_CONSTANT(CURLE_TELNET_OPTION_SYNTAX); REGISTER_CURL_CONSTANT(CURLE_OBSOLETE); REGISTER_CURL_CONSTANT(CURLE_SSL_PEER_CERTIFICATE); if (curl_global_init(CURL_GLOBAL_SSL) != CURLE_OK) { return FAILURE; } return SUCCESS; } /* }}} */ /* {{{ PHP_MSHUTDOWN_FUNCTION */ PHP_MSHUTDOWN_FUNCTION(curl) { curl_global_cleanup(); return SUCCESS; } /* }}} */ #define PHP_CURL_STDOUT 0 #define PHP_CURL_FILE 1 #define PHP_CURL_USER 2 #define PHP_CURL_DIRECT 3 #define PHP_CURL_RETURN 4 #define PHP_CURL_ASCII 5 #define PHP_CURL_BINARY 6 #define PHP_CURL_IGNORE 7 /* {{{ curl_write */ static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx) { php_curl *ch = (php_curl *) ctx; php_curl_write *t = ch->handlers->write; size_t length = size * nmemb; TSRMLS_FETCH(); switch (t->method) { case PHP_CURL_STDOUT: PUTS(data); break; case PHP_CURL_FILE: return fwrite(data, size, nmemb, t->fp); case PHP_CURL_RETURN: smart_str_appendl(&t->buf, data, (int) length); break; case PHP_CURL_USER: { zval *argv[2]; zval *retval; int error; TSRMLS_FETCH(); MAKE_STD_ZVAL(argv[0]); MAKE_STD_ZVAL(argv[1]); MAKE_STD_ZVAL(retval); ZVAL_RESOURCE(argv[0], ch->id); zend_list_addref(ch->id); ZVAL_STRINGL(argv[1], data, length, 1); error = call_user_function(EG(function_table), NULL, t->func, retval, 2, argv TSRMLS_CC); if (error == FAILURE) { php_error(E_WARNING, "Couldn't call the CURLOPT_WRITEFUNCTION"); length = -1; } else { length = Z_LVAL_P(retval); } zval_ptr_dtor(&argv[0]); zval_ptr_dtor(&argv[1]); zval_ptr_dtor(&retval); break; } } return length; } /* }}} */ /* {{{ curl_read */ static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx) { php_curl *ch = (php_curl *) ctx; php_curl_read *t = ch->handlers->read; int length = -1; switch (t->method) { case PHP_CURL_DIRECT: length = fread(data, size, nmemb, t->fp); break; case PHP_CURL_USER: { zval *argv[3]; zval *retval; int length; int error; TSRMLS_FETCH(); MAKE_STD_ZVAL(argv[0]); MAKE_STD_ZVAL(argv[1]); MAKE_STD_ZVAL(argv[2]); MAKE_STD_ZVAL(retval); ZVAL_RESOURCE(argv[0], ch->id); zend_list_addref(ch->id); ZVAL_RESOURCE(argv[1], t->fd); zend_list_addref(t->fd); ZVAL_LONG(argv[2], (int) size * nmemb); error = call_user_function(EG(function_table), NULL, t->func, retval, 3, argv TSRMLS_CC); if (error == FAILURE) { php_error(E_WARNING, "Cannot call the CURLOPT_READFUNCTION"); length = -1; } else { memcpy(data, Z_STRVAL_P(retval), size * nmemb); length = Z_STRLEN_P(retval); } zval_ptr_dtor(&argv[0]); zval_ptr_dtor(&argv[1]); zval_ptr_dtor(&argv[2]); zval_ptr_dtor(&retval); break; } } return length; } /* }}} */ /* {{{ curl_write_header */ static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx) { php_curl *ch = (php_curl *) ctx; php_curl_write *t = ch->handlers->write_header; size_t length = size * nmemb; TSRMLS_FETCH(); switch (t->method) { case PHP_CURL_STDOUT: /* Handle special case write when we're returning the entire transfer */ if (ch->handlers->write->method == PHP_CURL_RETURN) smart_str_appendl(&ch->handlers->write->buf, data, (int) length); else PUTS(data); break; case PHP_CURL_FILE: return fwrite(data, size, nmemb, t->fp); case PHP_CURL_USER: { zval *argv[2]; zval *retval; int error; TSRMLS_FETCH(); MAKE_STD_ZVAL(argv[0]); MAKE_STD_ZVAL(argv[1]); MAKE_STD_ZVAL(retval); ZVAL_RESOURCE(argv[0], ch->id); zend_list_addref(ch->id); ZVAL_STRINGL(argv[1], data, length, 1); error = call_user_function(EG(function_table), NULL, t->func, retval, 2, argv TSRMLS_CC); if (error == FAILURE) { php_error(E_WARNING, "Couldn't call the CURLOPT_HEADERFUNCTION"); length = -1; } else { length = Z_LVAL_P(retval); } zval_ptr_dtor(&argv[0]); zval_ptr_dtor(&argv[1]); zval_ptr_dtor(&retval); break; } case PHP_CURL_IGNORE: return length; } return length; } /* }}} */ /* {{{ curl_passwd */ static size_t curl_passwd(void *ctx, char *prompt, char *buf, int buflen) { php_curl *ch = (php_curl *) ctx; zval *func = ch->handlers->passwd; zval *argv[3]; zval *retval = NULL; int error; int ret = 0; TSRMLS_FETCH(); MAKE_STD_ZVAL(argv[0]); MAKE_STD_ZVAL(argv[1]); MAKE_STD_ZVAL(argv[2]); ZVAL_RESOURCE(argv[0], ch->id); zend_list_addref(ch->id); ZVAL_STRING(argv[1], prompt, 1); ZVAL_LONG(argv[2], buflen); error = call_user_function(EG(function_table), NULL, func, retval, 2, argv TSRMLS_CC); if (error == FAILURE) { php_error(E_WARNING, "Couldn't call the CURLOPT_PASSWDFUNCTION"); ret = -1; } else { if (Z_STRLEN_P(retval) > buflen) { php_error(E_WARNING, "Returned password is too long for libcurl to handle"); ret = -1; } else { strlcpy(buf, Z_STRVAL_P(retval), buflen); } } zval_ptr_dtor(&argv[0]); zval_ptr_dtor(&argv[1]); zval_ptr_dtor(&argv[2]); zval_ptr_dtor(&retval); return ret; } /* }}} */ /* {{{ curl_free_string */ static void curl_free_string(void **string) { efree(*string); } /* }}} */ /* {{{ curl_free_post */ static void curl_free_post(void **post) { curl_formfree((struct HttpPost *) *post); } /* }}} */ /* {{{ curl_free_slist */ static void curl_free_slist(void **slist) { curl_slist_free_all((struct curl_slist *) *slist); } /* }}} */ /* {{{ proto string curl_version(void) Return the CURL version string. */ PHP_FUNCTION(curl_version) { if (ZEND_NUM_ARGS() != 0) { WRONG_PARAM_COUNT; } RETURN_STRING(curl_version(), 1); } /* }}} */ /* {{{ alloc_curl_handle */ static void alloc_curl_handle(php_curl **ch) { *ch = emalloc(sizeof(php_curl)); (*ch)->handlers = ecalloc(1, sizeof(php_curl_handlers)); (*ch)->handlers->write = ecalloc(1, sizeof(php_curl_write)); (*ch)->handlers->write_header = ecalloc(1, sizeof(php_curl_write)); (*ch)->handlers->read = ecalloc(1, sizeof(php_curl_read)); memset(&(*ch)->err, 0, sizeof((*ch)->err)); zend_llist_init(&(*ch)->to_free.str, sizeof(char *), (void(*)(void *)) curl_free_string, 0); zend_llist_init(&(*ch)->to_free.slist, sizeof(struct curl_slist), (void(*)(void *)) curl_free_slist, 0); zend_llist_init(&(*ch)->to_free.post, sizeof(struct HttpPost), (void(*)(void *)) curl_free_post, 0); } /* }}} */ /* {{{ proto int curl_init([string url]) Initialize a CURL session */ PHP_FUNCTION(curl_init) { zval **url; php_curl *ch; int argc = ZEND_NUM_ARGS(); if (argc < 0 || argc > 1 || zend_get_parameters_ex(argc, &url) == FAILURE) { WRONG_PARAM_COUNT; } alloc_curl_handle(&ch); ch->cp = curl_easy_init(); if (! ch->cp) { php_error(E_WARNING, "Cannot initialize a new cURL handle"); RETURN_FALSE; } ch->handlers->write->method = PHP_CURL_STDOUT; ch->handlers->write->type = PHP_CURL_ASCII; ch->handlers->read->method = PHP_CURL_DIRECT; ch->handlers->write_header->method = PHP_CURL_IGNORE; curl_easy_setopt(ch->cp, CURLOPT_NOPROGRESS, 1); curl_easy_setopt(ch->cp, CURLOPT_VERBOSE, 0); curl_easy_setopt(ch->cp, CURLOPT_ERRORBUFFER, ch->err.str); curl_easy_setopt(ch->cp, CURLOPT_WRITEFUNCTION, curl_write); curl_easy_setopt(ch->cp, CURLOPT_FILE, (void *) ch); curl_easy_setopt(ch->cp, CURLOPT_READFUNCTION, curl_read); curl_easy_setopt(ch->cp, CURLOPT_INFILE, (void *) ch); curl_easy_setopt(ch->cp, CURLOPT_HEADERFUNCTION, curl_write_header); curl_easy_setopt(ch->cp, CURLOPT_WRITEHEADER, (void *) ch); if (argc > 0) { char *urlcopy; convert_to_string_ex(url); urlcopy = estrndup(Z_STRVAL_PP(url), Z_STRLEN_PP(url)); curl_easy_setopt(ch->cp, CURLOPT_URL, urlcopy); zend_llist_add_element(&ch->to_free.str, &urlcopy); } ZEND_REGISTER_RESOURCE(return_value, ch, le_curl); ch->id = Z_LVAL_P(return_value); } /* }}} */ /* {{{ proto bool curl_setopt(int ch, string option, mixed value) Set an option for a CURL transfer */ PHP_FUNCTION(curl_setopt) { zval **zid, **zoption, **zvalue; php_curl *ch; CURLcode error; int option; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &zid, &zoption, &zvalue) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl); convert_to_long_ex(zoption); option = Z_LVAL_PP(zoption); switch (option) { case CURLOPT_INFILESIZE: case CURLOPT_VERBOSE: case CURLOPT_HEADER: case CURLOPT_NOPROGRESS: case CURLOPT_NOBODY: case CURLOPT_FAILONERROR: case CURLOPT_UPLOAD: case CURLOPT_POST: case CURLOPT_FTPLISTONLY: case CURLOPT_FTPAPPEND: case CURLOPT_NETRC: case CURLOPT_FOLLOWLOCATION: case CURLOPT_PUT: case CURLOPT_MUTE: case CURLOPT_TIMEOUT: case CURLOPT_LOW_SPEED_LIMIT: case CURLOPT_SSLVERSION: case CURLOPT_LOW_SPEED_TIME: case CURLOPT_RESUME_FROM: case CURLOPT_TIMEVALUE: case CURLOPT_TIMECONDITION: case CURLOPT_TRANSFERTEXT: case CURLOPT_HTTPPROXYTUNNEL: case CURLOPT_FILETIME: case CURLOPT_MAXREDIRS: case CURLOPT_MAXCONNECTS: case CURLOPT_CLOSEPOLICY: case CURLOPT_FRESH_CONNECT: case CURLOPT_FORBID_REUSE: case CURLOPT_CONNECTTIMEOUT: case CURLOPT_SSL_VERIFYHOST: case CURLOPT_SSL_VERIFYPEER: convert_to_long_ex(zvalue); error = curl_easy_setopt(ch->cp, option, Z_LVAL_PP(zvalue)); break; case CURLOPT_URL: case CURLOPT_PROXY: case CURLOPT_USERPWD: case CURLOPT_PROXYUSERPWD: case CURLOPT_RANGE: case CURLOPT_CUSTOMREQUEST: case CURLOPT_USERAGENT: case CURLOPT_FTPPORT: case CURLOPT_COOKIE: case CURLOPT_SSLCERT: case CURLOPT_SSLCERTPASSWD: case CURLOPT_COOKIEFILE: case CURLOPT_REFERER: case CURLOPT_INTERFACE: case CURLOPT_KRB4LEVEL: case CURLOPT_RANDOM_FILE: case CURLOPT_EGDSOCKET: case CURLOPT_CAINFO: case CURLOPT_COOKIEJAR: case CURLOPT_SSL_CIPHER_LIST: { char *copystr = NULL; convert_to_string_ex(zvalue); copystr = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue)); error = curl_easy_setopt(ch->cp, option, copystr); zend_llist_add_element(&ch->to_free.str, ©str); break; } case CURLOPT_FILE: case CURLOPT_INFILE: case CURLOPT_WRITEHEADER: case CURLOPT_STDERR: { FILE *fp = NULL; ZEND_FETCH_RESOURCE(fp, FILE *, zvalue, -1, "File-Handle", php_file_le_fopen()); if (!fp) { RETURN_FALSE; } error = CURLE_OK; switch (option) { case CURLOPT_FILE: ch->handlers->write->fp = fp; ch->handlers->write->method = PHP_CURL_FILE; break; case CURLOPT_WRITEHEADER: ch->handlers->write_header->fp = fp; ch->handlers->write_header->method = PHP_CURL_FILE; break; case CURLOPT_INFILE: zend_list_addref(Z_LVAL_PP(zvalue)); ch->handlers->read->fp = fp; ch->handlers->read->fd = Z_LVAL_PP(zvalue); break; default: error = curl_easy_setopt(ch->cp, option, fp); break; } break; } case CURLOPT_RETURNTRANSFER: convert_to_long_ex(zvalue); if (Z_LVAL_PP(zvalue)) { ch->handlers->write->method = PHP_CURL_RETURN; } break; case CURLOPT_BINARYTRANSFER: convert_to_long_ex(zvalue); ch->handlers->write->type = PHP_CURL_BINARY; break; case CURLOPT_WRITEFUNCTION: zval_add_ref(zvalue); ch->handlers->write->func = *zvalue; ch->handlers->write->method = PHP_CURL_USER; break; case CURLOPT_READFUNCTION: zval_add_ref(zvalue); ch->handlers->read->func = *zvalue; ch->handlers->read->method = PHP_CURL_USER; break; case CURLOPT_HEADERFUNCTION: zval_add_ref(zvalue); ch->handlers->write_header->func = *zvalue; ch->handlers->write_header->method = PHP_CURL_USER; break; case CURLOPT_PASSWDFUNCTION: zval_add_ref(zvalue); ch->handlers->passwd = *zvalue; error = curl_easy_setopt(ch->cp, CURLOPT_PASSWDFUNCTION, curl_passwd); error = curl_easy_setopt(ch->cp, CURLOPT_PASSWDDATA, (void *) ch); break; case CURLOPT_POSTFIELDS: if (Z_TYPE_PP(zvalue) == IS_ARRAY || Z_TYPE_PP(zvalue) == IS_OBJECT) { zval **current; HashTable *postfields; struct HttpPost *first = NULL; struct HttpPost *last = NULL; char *postval; char *string_key = NULL; ulong num_key; uint string_key_len; postfields = HASH_OF(*zvalue); if (! postfields) { php_error(E_WARNING, "Couldn't get HashTable in CURLOPT_POSTFIELDS"); RETURN_FALSE; } for (zend_hash_internal_pointer_reset(postfields); zend_hash_get_current_data(postfields, (void **) ¤t) == SUCCESS; zend_hash_move_forward(postfields)) { SEPARATE_ZVAL(current); convert_to_string_ex(current); zend_hash_get_current_key_ex(postfields, &string_key, &string_key_len, &num_key, 0, NULL); postval = Z_STRVAL_PP(current); if (*postval == '@') { error = curl_formadd(&first, &last, CURLFORM_COPYNAME, string_key, CURLFORM_FILE, ++postval, CURLFORM_END); } else { error = curl_formadd(&first, &last, CURLFORM_COPYNAME, string_key, CURLFORM_PTRCONTENTS, postval, CURLFORM_CONTENTSLENGTH, Z_STRLEN_PP(current), CURLFORM_END); } } SAVE_CURL_ERROR(ch, error); if (error != CURLE_OK) { RETURN_FALSE; } zend_llist_add_element(&ch->to_free.post, &first); error = curl_easy_setopt(ch->cp, CURLOPT_HTTPPOST, first); } else { char *post = NULL; convert_to_string_ex(zvalue); post = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue)); zend_llist_add_element(&ch->to_free.str, &post); error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDS, post); error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, Z_STRLEN_PP(zvalue)); } break; case CURLOPT_HTTPHEADER: case CURLOPT_QUOTE: case CURLOPT_POSTQUOTE: { zval **current; HashTable *ph; struct curl_slist *slist = NULL; ph = HASH_OF(*zvalue); if (! ph) { php_error(E_WARNING, "You must pass either an object or an array with the CURLOPT_HTTPHEADER," "CURLOPT_QUOTE and CURLOPT_POSTQUOTE arguments"); RETURN_FALSE; } for (zend_hash_internal_pointer_reset(ph); zend_hash_get_current_data(ph, (void **) ¤t) == SUCCESS; zend_hash_move_forward(ph)) { char *indiv = NULL; SEPARATE_ZVAL(current); convert_to_string_ex(current); indiv = estrndup(Z_STRVAL_PP(current), Z_STRLEN_PP(current) + 1); slist = curl_slist_append(slist, indiv); if (! slist) { efree(indiv); php_error(E_WARNING, "Couldn't build curl_slist from curl_setopt()"); RETURN_FALSE; } zend_llist_add_element(&ch->to_free.str, &indiv); } zend_llist_add_element(&ch->to_free.slist, &slist); error = curl_easy_setopt(ch->cp, option, slist); break; } } SAVE_CURL_ERROR(ch, error); if (error != CURLE_OK) { RETURN_FALSE; } else { RETURN_TRUE; } } /* }}} */ /* {{{ proto bool curl_exec(int ch) Perform a CURL session */ PHP_FUNCTION(curl_exec) { zval **zid; php_curl *ch; CURLcode error; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl); error = curl_easy_perform(ch->cp); SAVE_CURL_ERROR(ch, error); if (error != CURLE_OK) { if (ch->handlers->write->buf.len > 0) smart_str_free(&ch->handlers->write->buf); RETURN_FALSE; } if (ch->handlers->write->method == PHP_CURL_RETURN && ch->handlers->write->buf.len > 0) { if (ch->handlers->write->type != PHP_CURL_BINARY) smart_str_0(&ch->handlers->write->buf); RETURN_STRINGL(ch->handlers->write->buf.c, ch->handlers->write->buf.len, 0); } RETURN_TRUE; } /* }}} */ #define CAAL(s, v) add_assoc_long_ex(return_value, s, sizeof(s), v); #define CAAD(s, v) add_assoc_double_ex(return_value, s, sizeof(s), v); #define CAAS(s, v) add_assoc_string_ex(return_value, s, sizeof(s), v, 1); /* {{{ proto string curl_getinfo(int ch, int opt) Get information regarding a specific transfer */ PHP_FUNCTION(curl_getinfo) { zval **zid, **zoption; php_curl *ch; int option, argc = ZEND_NUM_ARGS(); if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &zid, &zoption) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl); if (argc < 2) { char *url; long l_code; double d_code; array_init(return_value); curl_easy_getinfo(ch->cp, CURLINFO_EFFECTIVE_URL, &url); CAAS("url", url); curl_easy_getinfo(ch->cp, CURLINFO_HTTP_CODE, &l_code); CAAL("http_code", l_code); curl_easy_getinfo(ch->cp, CURLINFO_HEADER_SIZE, &l_code); CAAL("header_size", l_code); curl_easy_getinfo(ch->cp, CURLINFO_REQUEST_SIZE, &l_code); CAAL("request_size", l_code); curl_easy_getinfo(ch->cp, CURLINFO_FILETIME, &l_code); CAAL("filetime", l_code); curl_easy_getinfo(ch->cp, CURLINFO_SSL_VERIFYRESULT, &l_code); CAAL("ssl_verify_result", l_code); curl_easy_getinfo(ch->cp, CURLINFO_TOTAL_TIME, &d_code); CAAD("total_time", d_code); curl_easy_getinfo(ch->cp, CURLINFO_NAMELOOKUP_TIME, &d_code); CAAD("namelookup_time", d_code); curl_easy_getinfo(ch->cp, CURLINFO_CONNECT_TIME, &d_code); CAAD("connect_time", d_code); curl_easy_getinfo(ch->cp, CURLINFO_PRETRANSFER_TIME, &d_code); CAAD("pretransfer_time", d_code); curl_easy_getinfo(ch->cp, CURLINFO_SIZE_UPLOAD, &d_code); CAAD("size_upload", d_code); curl_easy_getinfo(ch->cp, CURLINFO_SIZE_DOWNLOAD, &d_code); CAAD("size_download", d_code); curl_easy_getinfo(ch->cp, CURLINFO_SPEED_DOWNLOAD, &d_code); CAAD("speed_download", d_code); curl_easy_getinfo(ch->cp, CURLINFO_SPEED_UPLOAD, &d_code); CAAD("speed_upload", d_code); curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d_code); CAAD("download_content_length", d_code); curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_UPLOAD, &d_code); CAAD("upload_content_length", d_code); } else { option = Z_LVAL_PP(zoption); switch (option) { case CURLINFO_EFFECTIVE_URL: { char *url; curl_easy_getinfo(ch->cp, option, &url); RETURN_STRING(url, 1); break; } case CURLINFO_HTTP_CODE: case CURLINFO_HEADER_SIZE: case CURLINFO_REQUEST_SIZE: case CURLINFO_FILETIME: case CURLINFO_SSL_VERIFYRESULT: { long code; curl_easy_getinfo(ch->cp, option, &code); RETURN_LONG(code); break; } case CURLINFO_TOTAL_TIME: case CURLINFO_NAMELOOKUP_TIME: case CURLINFO_CONNECT_TIME: case CURLINFO_PRETRANSFER_TIME: case CURLINFO_SIZE_UPLOAD: case CURLINFO_SIZE_DOWNLOAD: case CURLINFO_SPEED_DOWNLOAD: case CURLINFO_SPEED_UPLOAD: case CURLINFO_CONTENT_LENGTH_DOWNLOAD: case CURLINFO_CONTENT_LENGTH_UPLOAD: { double code; curl_easy_getinfo(ch->cp, option, &code); RETURN_DOUBLE(code); break; } } } } /* }}} */ /* {{{ proto string curl_error(int ch) Return a string contain the last error for the current session */ PHP_FUNCTION(curl_error) { zval **zid; php_curl *ch; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl); ch->err.str[CURL_ERROR_SIZE] = 0; RETURN_STRING(ch->err.str, 1); } /* }}} */ /* {{{ proto int curl_errno(int ch) Return an integer containing the last error number */ PHP_FUNCTION(curl_errno) { zval **zid; php_curl *ch; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl); RETURN_LONG(ch->err.no); } /* }}} */ /* {{{ proto void curl_close(int ch) Close a CURL session */ PHP_FUNCTION(curl_close) { zval **zid; php_curl *ch; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl); zend_list_delete(Z_LVAL_PP(zid)); } /* }}} */ /* {{{ _php_curl_close() List destructor for curl handles */ static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC) { php_curl *ch = (php_curl *) rsrc->ptr; curl_easy_cleanup(ch->cp); zend_llist_clean(&ch->to_free.str); zend_llist_clean(&ch->to_free.slist); zend_llist_clean(&ch->to_free.post); if (ch->handlers->write->func) zval_ptr_dtor(&ch->handlers->write->func); if (ch->handlers->read->func) zval_ptr_dtor(&ch->handlers->read->func); if (ch->handlers->write_header->func) zval_ptr_dtor(&ch->handlers->write_header->func); if (ch->handlers->passwd) zval_ptr_dtor(&ch->handlers->passwd); efree(ch->handlers->write); efree(ch->handlers->write_header); efree(ch->handlers->read); efree(ch->handlers); efree(ch); } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ php-4.2.3/ext/curl/curl.dsp0100644000175200000240000002317707363612667014415 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="curl" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=curl - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "curl.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "curl.mak" CFG="curl - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "curl - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "curl - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "curl - Win32 Debug_TS_SSL" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "curl - Win32 Release_TS_SSL" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "curl - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CURL" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /nodefaultlib:"MSVCRT" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\curl\lib" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "curl - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CURL" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts_debug.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib wsock32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"MSVCRTD" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\curl\lib" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "curl - Win32 Debug_TS_SSL" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "curl___Win32_Debug_TS_SSL" # PROP BASE Intermediate_Dir "curl___Win32_Debug_TS_SSL" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS_SSL" # PROP Intermediate_Dir "Debug_TS_SSL" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 php4ts_debug.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS" # SUBTRACT BASE LINK32 /pdb:none # ADD LINK32 php4ts_debug.lib libcurl.lib ssleay32.lib libeay32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"MSVCRTD" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\curl\lib" # SUBTRACT LINK32 /pdb:none /nodefaultlib !ELSEIF "$(CFG)" == "curl - Win32 Release_TS_SSL" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "curl___Win32_Release_TS_SSL" # PROP BASE Intermediate_Dir "curl___Win32_Release_TS_SSL" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS_SSL" # PROP Intermediate_Dir "Release_TS_SSL" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 php4ts.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT BASE LINK32 /pdb:none # ADD LINK32 php4ts.lib libcurl.lib ssleay32.lib libeay32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /nodefaultlib:"MSVCRT" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\curl\lib" # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "curl - Win32 Release_TS" # Name "curl - Win32 Debug_TS" # Name "curl - Win32 Debug_TS_SSL" # Name "curl - Win32 Release_TS_SSL" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\curl.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_curl.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project php-4.2.3/ext/curl/php_curl.h0100644000175200000240000000527307405423072014705 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sterling Hughes | +----------------------------------------------------------------------+ */ /* $Id: php_curl.h,v 1.27 2025/12/11 15:28:58 sebastian Exp $ */ #ifndef _PHP_CURL_H #define _PHP_CURL_H #include "php.h" #include "ext/standard/php_smart_str.h" #ifdef COMPILE_DL_CURL #undef HAVE_CURL #define HAVE_CURL 1 #endif #if HAVE_CURL #include extern zend_module_entry curl_module_entry; #define curl_module_ptr &curl_module_entry #define CURLOPT_RETURNTRANSFER 19913 #define CURLOPT_BINARYTRANSFER 19914 PHP_MINIT_FUNCTION(curl); PHP_MSHUTDOWN_FUNCTION(curl); PHP_MINFO_FUNCTION(curl); PHP_FUNCTION(curl_version); PHP_FUNCTION(curl_init); PHP_FUNCTION(curl_setopt); PHP_FUNCTION(curl_exec); PHP_FUNCTION(curl_getinfo); PHP_FUNCTION(curl_error); PHP_FUNCTION(curl_errno); PHP_FUNCTION(curl_close); typedef struct { zval *func; FILE *fp; smart_str buf; int method; int type; } php_curl_write; typedef struct { zval *func; FILE *fp; long fd; int method; } php_curl_read; typedef struct { php_curl_write *write; php_curl_write *write_header; php_curl_read *read; zval *passwd; } php_curl_handlers; struct _php_curl_error { char str[CURL_ERROR_SIZE + 1]; int no; }; struct _php_curl_free { zend_llist str; zend_llist post; zend_llist slist; }; typedef struct { CURL *cp; php_curl_handlers *handlers; struct _php_curl_error err; struct _php_curl_free to_free; long id; } php_curl; #else #define curl_module_ptr NULL #endif /* HAVE_CURL */ #define phpext_curl_ptr curl_module_ptr #endif /* _PHP_CURL_H */ php-4.2.3/ext/cybercash/0040755000175200000240000000000007535765574013736 5ustar zeevstaffphp-4.2.3/ext/cybercash/CREDITS0100644000175200000240000000002707206176563014737 0ustar zeevstaffCyberCash Evan Klinger php-4.2.3/ext/cybercash/Makefile.in0100644000175200000240000000015407103403245015747 0ustar zeevstaff LTLIBRARY_NAME = libcybercash.la LTLIBRARY_SOURCES = cybercash.c include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/cybercash/config.m40100644000175200000240000000153307401753421015420 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.9 2025/11/30 18:59:29 sniper Exp $ dnl AC_MSG_CHECKING(for CyberCash support) AC_ARG_WITH(cybercash, [ --with-cybercash[=DIR] Include CyberCash support. DIR is the CyberCash MCK install directory.], [ if test "$withval" != "no"; then test -f $withval/mckcrypt.h && MCK_DIR=$withval test -f $withval/c-api/mckcrypt.h && MCK_DIR=$withval/c-api if test -n "$MCK_DIR"; then AC_MSG_RESULT(yes) PHP_EXTENSION(cybercash) old_LIBS=$LIBS LIBS="$LIBS -L$MCK_DIR/lib" AC_CHECK_LIB(mckcrypto,base64_encode,[AC_DEFINE(HAVE_MCK,1,[ ])], [AC_MSG_ERROR(Please reinstall the CyberCash MCK - cannot find mckcrypto lib)]) LIBS=$old_LIBS PHP_ADD_LIBRARY_WITH_PATH(mckcrypto, $MCK_DIR/lib) PHP_ADD_INCLUDE($MCK_DIR) else AC_MSG_RESULT(no) fi fi ],[ AC_MSG_RESULT(no) ]) php-4.2.3/ext/cybercash/cybercash.c0100644000175200000240000001410107405423072016013 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Evan Klinger | | Timothy Whitfield | +----------------------------------------------------------------------+ */ /* $Id: cybercash.c,v 1.18 2025/12/11 15:28:58 sebastian Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "ext/standard/info.h" #include "cybercash.h" #if HAVE_MCK #include "mckcrypt.h" #include "base64.h" /* {{{ cybercash_functions[] */ function_entry cybercash_functions[] = { PHP_FE(cybercash_encr, NULL) PHP_FE(cybercash_decr, NULL) PHP_FE(cybercash_base64_encode, NULL) PHP_FE(cybercash_base64_decode, NULL) {NULL, NULL, NULL} }; /* }}} */ /* {{{ cybercash_module_entry */ zend_module_entry cybercash_module_entry = { STANDARD_MODULE_HEADER, "cybercash", cybercash_functions, NULL, NULL, NULL, NULL, PHP_MINFO(cybercash), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES, }; /* }}} */ #ifdef COMPILE_DL_CYBERCASH ZEND_GET_MODULE(cybercash) #endif /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(cybercash) { php_info_print_table_start(); php_info_print_table_row(2, "Cybercash Support", "enabled"); php_info_print_table_end(); } /* }}} */ /* {{{ proto array cybercash_encr(string wmk, string sk, string data) Cybercash encrypt */ PHP_FUNCTION(cybercash_encr) { zval **wmk, **sk, **inbuff; unsigned char *outbuff, *macbuff; unsigned int outAlloc, outLth; long errcode; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &wmk, &sk, &inbuff) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(wmk); convert_to_string_ex(sk); convert_to_string_ex(inbuff); outAlloc = Z_STRLEN_PP(inbuff) + 10; outbuff = (unsigned char *)emalloc(sizeof(unsigned char) * outAlloc); macbuff = (unsigned char *)emalloc(sizeof(unsigned char) * 20); errcode = mck_encr(Z_STRVAL_PP(wmk), Z_STRVAL_PP(sk), Z_STRLEN_PP(inbuff) + 1, Z_STRVAL_PP(inbuff), outAlloc, outbuff, &outLth, macbuff); if (array_init(return_value) == FAILURE) { php_error(E_WARNING, "Return value from cybercash_encr could not be initialized"); RETURN_FALSE; } add_assoc_long(return_value, "errcode", errcode); if (!errcode) { add_assoc_stringl(return_value, "outbuff", outbuff, outLth, 0); add_assoc_long(return_value,"outLth", outLth); add_assoc_stringl(return_value,"macbuff", macbuff, 20, 0); } else { efree(outbuff); efree(macbuff); } } /* }}} */ /* {{{ proto array cybercash_decr(string wmp, string sk, string data) Cybercash decrypt */ PHP_FUNCTION(cybercash_decr) { zval **wmk, **sk, **inbuff; unsigned char *outbuff, *macbuff; unsigned int outAlloc, outLth; long errcode; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &wmk, &sk, &inbuff) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(wmk); convert_to_string_ex(sk); convert_to_string_ex(inbuff); outAlloc = Z_STRLEN_PP(inbuff); outbuff = (unsigned char *)emalloc(sizeof(unsigned char) * outAlloc); macbuff = (unsigned char *)emalloc(sizeof(unsigned char) * 20); errcode = mck_decr(Z_STRVAL_PP(wmk), Z_STRVAL_PP(sk), Z_STRLEN_PP(inbuff), Z_STRVAL_PP(inbuff), outAlloc, outbuff, &outLth, macbuff); if (array_init(return_value) == FAILURE) { php_error(E_WARNING, "Could not initialize Return value from cybercash_decr"); RETURN_FALSE; } add_assoc_long(return_value, "errcode", errcode); if (!errcode) { add_assoc_stringl(return_value, "outbuff", outbuff, outLth, 0); add_assoc_long(return_value, "outLth", outLth); add_assoc_stringl(return_value, "macbuff", macbuff, 20, 0); } else { efree(outbuff); efree(macbuff); } } /* }}} */ /* {{{ proto string cybercash_base64_encode(string data) base64 encode data for cybercash */ PHP_FUNCTION(cybercash_base64_encode) { zval **inbuff; char *outbuff; long ret_length; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &inbuff) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(inbuff); outbuff = (char *)emalloc(base64_enc_size((unsigned int)Z_STRLEN_PP(inbuff))); ret_length = base64_encode(outbuff, Z_STRVAL_PP(inbuff), Z_STRLEN_PP(inbuff)); RETURN_STRINGL(outbuff, ret_length, 0); } /* }}} */ /* {{{ proto string cybercash_base64_decode(string data) base64 decode data for cybercash */ PHP_FUNCTION(cybercash_base64_decode) { zval **inbuff; char *outbuff; long ret_length; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &inbuff) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(inbuff); outbuff = (char *)emalloc(base64_dec_size((unsigned int)Z_STRLEN_PP(inbuff))); ret_length = base64_decode(outbuff, Z_STRVAL_PP(inbuff), Z_STRLEN_PP(inbuff)); RETURN_STRINGL(outbuff, ret_length, 0); } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/cybercash/cybercash.dsp0100644000175200000240000001147507152022163016365 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="cybercash" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=cybercash - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "cybercash.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "cybercash.mak" CFG="cybercash - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "cybercash - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "cybercash - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "cybercash - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CYBERCASH" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CYBERCASH_EXPORTS" /D "COMPILE_DL_CYBERCASH" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MCK=1 /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib cybercashi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts.lib user32.lib winspool.lib mckcrypto.lib kernel32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /nodefaultlib:"libcmt.lib" /out:"..\..\Release_TS/php_cybercash.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "cybercash - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CYBERCASH" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CYBERCASH_EXPORTS" /D "COMPILE_DL_CYBERCASH" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MCK=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib cybercashi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts_debug.lib user32.lib winspool.lib mckcrypto.lib kernel32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"libcmt.lib" /out:"..\..\Debug_TS/php_cybercash.dll" /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "cybercash - Win32 Release_TS" # Name "cybercash - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\cybercash.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\cybercash.h # End Source File # End Group # End Target # End Project php-4.2.3/ext/cybercash/cybercash.h0100644000175200000240000000305707437364617016046 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Evan Klinger | +----------------------------------------------------------------------+ */ #ifndef CYBERCASH_H #define CYBERCASH_H #if HAVE_MCK extern zend_module_entry cybercash_module_entry; #define cybercash_module_ptr &cybercash_module_entry PHP_MINFO_FUNCTION(cybercash); PHP_FUNCTION(cybercash_encr); PHP_FUNCTION(cybercash_decr); PHP_FUNCTION(cybercash_base64_encode); PHP_FUNCTION(cybercash_base64_decode); #else #define cybercash_module_ptr NULL #endif #define phpext_cybercash_ptr cybercash_module_ptr #endif php-4.2.3/ext/cybercash/cyberlib.php0100644000175200000240000001264607353425316016231 0ustar zeevstaff * * * * PHP Cybercash API - This requires that CyberCash support be * * compiled. * * * * * * This is an attempt to duplicate the cybercash API for PHP * * users. * ********************************************************************* * This does not require merchant_conf for reasons that any file * * can be accessed by the web server can be accessed by any cgi. * ********************************************************************* */ function SendCC2_1Server($merchant,$merchant_key, $url,$operation,$CCNVList) { /* We need to make the url. */ $url=$url."cr21api.cgi/".$operation; return SendCCServer($merchant,$merchant_key,$url,$CCNVList); } function SendCCServer($merchant,$merchant_key,$url,$CCNVList) { /* Break the url into parts. */ $url=parse_url($url); /* Turn the name value pairs into a url encoded message. */ $pairs=""; $done=0; $more=list($key,$val)=each($CCNVList); while(!$done) { $pairs.=rtrim($key)."=".urlencode(rtrim($val)); $more=list($key,$val)=each($CCNVList); if($more) { $pairs.="&"; } else { $done=1; } } $encrypted_pairs=CCEncrypt($merchant_key,$pairs); $pairs_length=strlen($encrypted_pairs); $message=sprintf("POST %s/%s HTTP/1.0\r\n",$url["path"],$merchant); $message.=sprintf("User-Agent: CCMCK-%s\r\n","3.2.0.5"); $message.="Content-type: application/x-www-form-urlencoded\r\n"; $message.=sprintf("Content-length: %d\r\n",$pairs_length); $message.="\r\n"; $message.=$encrypted_pairs."\r\n"; $response=CCSocketSend($merchant_key,$url["host"],isset($url["port"])?$url["port"]:"",$message); return $response; } function CCEncrypt($merchant_key,$pairs) { $session_key=sprintf("%s #%ld",date("D M j H:i:s Y"),getmypid()); $enc_msg=cybercash_encr($merchant_key,$session_key,$pairs); $pairs=cybercash_base64_encode($enc_msg["outbuff"]); $mac=cybercash_base64_encode($enc_msg["macbuff"]); /* This adds the information needed to decrypt. */ $encrypted_pairs="message=".urlencode($pairs)."&"; $encrypted_pairs.="session-key=".urlencode($session_key)."&"; $encrypted_pairs.="mac=".urlencode($mac); return $encrypted_pairs; } function CCSocketSend($merchant_key,$host,$port,$message) { if(!$port) { $port="80"; } /*This opens the port. */ $fd=fsockopen($host,$port); /* Minor error checking. */ if(!$fd) { $vars["MStatus"]="failure-hard"; $vars["MErrMsg"]="Error contacting credit processor."; return $vars; } /*This sends the message. */ fputs($fd,$message); /* We read the header in and parse at the same time. */ /* Retrieve header. */ $i=0; $response=""; while(!feof($fd) && $response != "\n") { $response=""; $more=""; while(!feof($fd) && $more != "\n") { $more=fgetc($fd); if($more != "\n" || $response=="") { if($more != "\r") { $response.=$more; } } } $header[$i++]=$response; } /* We will now get the message. */ $message=""; while(!feof($fd)) { $message.=fgets($fd,50); } /* It should be ok to close the socket now. */ fclose($fd); /* This set of variables is encoded/encrypted. */ $vars=CCGetVars($message); $vars["message"]=cybercash_base64_decode($vars["message"]); $vars["mac"]=cybercash_base64_decode($vars["mac"]); /* Check for errors with the request/decryption. */ /* message is base64 and encrypted. */ $dec_msg=cybercash_decr($merchant_key,$vars["session-key"], $vars["message"]); if($dec_msg["errcode"]) { $vars["MStatus"]="failure-hard"; $vars["MErrMsg"]="Response non-decodable."; return $vars; } if($dec_msg["macbuff"] != $vars["mac"]) { $vars["MStatus"]="failure-hard"; $vars["MErrMsg"]="Signitures do not match."; return $vars; } /* We will have to parse again to get more info. */ $vars=CCGetVars($dec_msg["outbuff"]); return $vars; } function CCGetVars($message) { /* Retrieve variables. This function retrieves variables in var/value key pairs. So that $myvar["var"]==value */ /* Need to find these variables too. */ $cx=0; $response=""; $more=""; $message.="\n"; $msg_len=strlen($message); while($cx<=$msg_len) { $more=""; $varname=""; $varval=""; while($cx<=$msg_len && $more != "&" && $more != "\n") { $more=substr($message,$cx,1); $cx++; if($more != "&" && $more != "=" && $more != "\n") { $response=$response.$more; } if($more=="=") { $varname=$response; $response=""; } if($more=="&" || $more=="\n") { $varval=$response; $response=""; } } if($varname != "") { $cybervar[$varname]=urldecode($varval); } } return $cybervar; } ?> php-4.2.3/ext/cybercash/test.php0100644000175200000240000000147307023070153015376 0ustar zeevstaff "2342322", "Amount" => "usd 11.50", "Card-Number" => "4111111111111111", "Card-Address" => "1600 Pennsylvania Avenue", "Card-City" => "Washington", "Card-State" => "DC", "Card-Zip" => "20500", "Card-Country" => "USA", "Card-Exp" => "12/99", "Card-Name" => "Bill Clinton")); while(list($key,$val)=each($response)) { echo $key."=".$val."
"; } ?> php-4.2.3/ext/cybermut/0040755000175200000240000000000007535765574013625 5ustar zeevstaffphp-4.2.3/ext/cybermut/tests/0040755000175200000240000000000007535765574014767 5ustar zeevstaffphp-4.2.3/ext/cybermut/tests/001.phpt0100644000175200000240000000106307247727755016160 0ustar zeevstaff--TEST-- Check for cybermut presence --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- cybermut extension is availablephp-4.2.3/ext/cybermut/Makefile.in0100644000175200000240000000040307247727755015663 0ustar zeevstaff# $Id: Makefile.in,v 1.1 2025/03/02 14:36:29 zeev Exp $ LTLIBRARY_NAME = libcybermut.la LTLIBRARY_SOURCES = cybermut.c LTLIBRARY_SHARED_NAME = cybermut.la LTLIBRARY_SHARED_LIBADD = $(CYBERMUT_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/cybermut/config.m40100644000175200000240000000316107401753421015306 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.3 2025/11/30 18:59:29 sniper Exp $ dnl PHP_ARG_WITH(cybermut, for cybermut support, [ --with-cybermut[=DIR] Include CyberMut (french Credit Mutuel telepaiement)]) if test "$PHP_CYBERMUT" != "no"; then for i in /usr/local /usr $PHP_CYBERMUT; do if test -r $i/cm-mac.h; then CYBERMUT_INC_DIR=$i elif test -r $i/include/cm-mac.h; then CYBERMUT_INC_DIR=$i/include fi if test -r $i/libcm-mac.a; then CYBERMUT_LIB_DIR=$i elif test -r $i/lib/libcm-mac.a; then CYBERMUT_LIB_DIR=$i/lib fi done if test -z "$CYBERMUT_INC_DIR"; then AC_MSG_ERROR(Could not find cm-mac.h Please make sure you have the CyberMut SDK installed. Use ./configure --with-cybermut= if necessary) fi if test -z "$CYBERMUT_LIB_DIR"; then AC_MSG_ERROR(Could not find libcm-mac.a Please make sure you have the CyberMut SDK installed. Use ./configure --with-cybermut= if necessary) fi AC_MSG_RESULT(found in $CYBERMUT_LIB_DIR) AC_MSG_RESULT(linking libcm-mac.a with libcybermut.a) ln -sf $CYBERMUT_LIB_DIR/libcm-mac.a $CYBERMUT_LIB_DIR/libcybermut.a PHP_ADD_INCLUDE($CYBERMUT_INC_DIR) PHP_SUBST(CYBERMUT_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(cybermut, $CYBERMUT_LIB_DIR, CYBERMUT_SHARED_LIBADD) AC_DEFINE(HAVE_CYBERMUT, 1, [ ]) PHP_EXTENSION(cybermut, $ext_shared) fi php-4.2.3/ext/cybermut/cybermut.c0100644000175200000240000001366607437364620015620 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sylvain PAGES | +----------------------------------------------------------------------+ */ /* $Id: cybermut.c,v 1.10 2025/02/28 08:25:52 sebastian Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "php_cybermut.h" #include "cm-mac.h" /* If you declare any globals in php_cybermut.h uncomment this: ZEND_DECLARE_MODULE_GLOBALS(cybermut) */ /* True global resources - no need for thread safety here */ static int le_cybermut; /* {{{ cybermut_functions[] */ function_entry cybermut_functions[] = { PHP_FE(cybermut_creerformulairecm, NULL) PHP_FE(cybermut_testmac, NULL) PHP_FE(cybermut_creerreponsecm, NULL) {NULL, NULL, NULL} /* Must be the last line in cybermut_functions[] */ }; /* }}} */ /* {{{ cybermut_module_entry */ zend_module_entry cybermut_module_entry = { STANDARD_MODULE_HEADER, "cybermut", cybermut_functions, PHP_MINIT(cybermut), PHP_MSHUTDOWN(cybermut), NULL, NULL, PHP_MINFO(cybermut), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; /* }}} */ #ifdef COMPILE_DL_CYBERMUT ZEND_GET_MODULE(cybermut) #endif PHP_MINIT_FUNCTION(cybermut) { return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(cybermut) { return SUCCESS; } /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(cybermut) { php_info_print_table_start(); php_info_print_table_header(2, "cybermut support", "enabled"); php_info_print_table_end(); } /* }}} */ /* {{{ proto string cybermut_creerformulairecm(string url_CM, string version, string TPE, string montant, string ref_commande, string texte_libre, string url_retour, string url_retour_ok, string url_retour_err, string langue, string code_societe, string texte_bouton) Returns a string containing source HTML of the form of request for payment. This result corresponds to the last parameter "formulaire" of the original function which was removed */ PHP_FUNCTION(cybermut_creerformulairecm) { zval **url_CM, **version, **TPE, **montant, **ref_commande, **texte_libre, **url_retour, **url_retour_ok, **url_retour_err, **langue, **code_societe, **texte_bouton; char formulaire [10000]; if (ZEND_NUM_ARGS() != 12 || zend_get_parameters_ex(12, &url_CM, &version, &TPE, &montant, &ref_commande, &texte_libre, &url_retour, &url_retour_ok, &url_retour_err, &langue, &code_societe, &texte_bouton) == FAILURE){ WRONG_PARAM_COUNT; } convert_to_string_ex(url_CM); convert_to_string_ex(version); convert_to_string_ex(TPE); convert_to_string_ex(montant); convert_to_string_ex(ref_commande); convert_to_string_ex(texte_libre); convert_to_string_ex(url_retour); convert_to_string_ex(url_retour_ok); convert_to_string_ex(url_retour_err); convert_to_string_ex(langue); convert_to_string_ex(code_societe); convert_to_string_ex(texte_bouton); CreerFormulaireCM ( Z_STRVAL_PP(url_CM), Z_STRVAL_PP(version), Z_STRVAL_PP(TPE), Z_STRVAL_PP(montant), Z_STRVAL_PP(ref_commande), Z_STRVAL_PP(texte_libre), Z_STRVAL_PP(url_retour), Z_STRVAL_PP(url_retour_ok), Z_STRVAL_PP(url_retour_err), Z_STRVAL_PP(langue), Z_STRVAL_PP(code_societe), Z_STRVAL_PP(texte_bouton), formulaire); RETURN_STRING(formulaire, 1); } /* }}} */ /* {{{ proto bool cybermut_testmac(string code_MAC, string version, string TPE, string cdate, string montant, string ref_commande, string texte_libre, string code_retour) Returns a boolean attesting that the authentification proceeded well. TRUE if the received message is authenticated and FALSE if not */ PHP_FUNCTION(cybermut_testmac) { zval **code_MAC, **version, **TPE, **cdate, **montant, **ref_commande, **texte_libre, **code_retour; int cdr_test; if (ZEND_NUM_ARGS() != 8 || zend_get_parameters_ex(8, &code_MAC, &version, &TPE, &cdate, &montant, &ref_commande, &texte_libre, &code_retour) == FAILURE){ WRONG_PARAM_COUNT; } convert_to_string_ex(code_MAC); convert_to_string_ex(version); convert_to_string_ex(TPE); convert_to_string_ex(cdate); convert_to_string_ex(montant); convert_to_string_ex(ref_commande); convert_to_string_ex(texte_libre); convert_to_string_ex(code_retour); cdr_test = TestMAC ( Z_STRVAL_PP(code_MAC), Z_STRVAL_PP(version), Z_STRVAL_PP(TPE), Z_STRVAL_PP(cdate), Z_STRVAL_PP(montant), Z_STRVAL_PP(ref_commande), Z_STRVAL_PP(texte_libre), Z_STRVAL_PP(code_retour)); if (cdr_test == 1) { RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto string cybermut_creerreponsecm(string phrase) Returns a string containing the message of acknowledgement of delivery (headers and body of the message). This result corresponds to the last parameter "reponse" of the original function which was removed */ PHP_FUNCTION(cybermut_creerreponsecm) { zval **phrase; char buf[5000]; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &phrase) == FAILURE){ WRONG_PARAM_COUNT; } convert_to_string_ex(phrase); CreerReponseCM( Z_STRVAL_PP(phrase), buf); RETURN_STRING (buf, 1); } /* }}} */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/cybermut/cybermut.xml0100644000175200000240000001647307250122047016161 0ustar zeevstaff Credit Mutuel CyberMUT functions CyberMUT This extension allows you to process credit cards transactions using Credit Mutuel CyberMUT system (http://www.creditmutuel.fr/centre_commercial/vendez_sur_internet.html). CynerMUT is a popular Web Payment Service in France, provided by the Credit Mutuel bank. If you are foreign in France, these functions will not be useful for you. These functions are only available if PHP has been compiled with the option, where DIR is the location of libcm-mac.a and cm-mac.h. You will require the appropriate SDK for your platform, which may be sent to you after your CyberMUT's subscription (contact them via Web, or go to the nearest Credit Mutuel). The use of these functions is almost identical to the original functions, except for the parameters of return for CreerFormulaireCM and CreerReponseCM, which are returned directly by functions PHP, whereas they had passed in reference in the original functions. These functions have been added in PHP 4.0.4. ??? These functions only provide a link to CyberMUT SDK. Be sure to read the CynerMUT Developers Guide for full details of the required parameters. cybermut_creerformulairecm Generate HTML form of request for payment Description string pfpro_init string url_CM string version string TPE string montant string ref_commande string texte_libre string url_retour string url_retour_ok string url_retour_err string langue string code_societe string texte_bouton cynermut_creerformulairecm is used to generate the HTML form of request for payment. See also cybermut_testmac cybermut_creerreponsecm. First step of payment (equiv cgi1.c) <?php // Directory where are located the keys putenv("CMKEYDIR=/var/creditmut/cles"); // Version number $VERSION="1.2"; $retour = creditmut_creerformulairecm( "https://www.creditmutuel.fr/test/telepaiement/paiement.cgi", $VERSION, "1234567890", "300FRF", $REFERENCE, $TEXTE_LIBRE, $URL_RETOUR, $URL_RETOUR_OK, $URL_RETOUR_ERR, "francais", "company", "Paiement par carte bancaire"); echo $retour; ?> cybermut_testmac Make sure that there no was data diddling contained in the received message of confirmation Description bool cybermut_testmac string code_MAC string version string TPE string cdate string montant string ref_commande string texte_libre string code-retour cybermut_testmac is used to make sure that there was not data diddling contained in the received message of confirmation. Pay attention to parameters code-retour and texte-libre, which cannot be evaluated as is, because auf the dash. You must retrieve them by using: $code_retour=$HTTP_GET_VARS["code-retour"]; $texte_libre=$HTTP_GET_VARS["texte-libre"]; See also cybermut_creerformulairecm cybermut_creerreponsecm. Last step of payment (equiv cgi2.c) <?php_track_vars?> <?php // Directory where are located the keys putenv("CMKEYDIR=/var/creditmut/cles"); // Version number $VERSION="1.2"; $texte_libre = $HTTP_GET_VARS["texte-libre"]; $code_retour = $HTTP_GET_VARS["code-retour"]; $mac_ok = creditmut_testmac($MAC,$VERSION,$TPE,$date,$montant,$reference,$texte_libre,$code_retour); if ($mac_ok) { // // insert data processing here // // $result=creditmut_creerreponsecm("OK"); } else { $result=creditmut_creerreponsecm("Document Falsifie");} ?> cybermut_creerreponsecm Generate the acknowledgement of delivery of the confirmation of payment Description string cybermut_creerreponsecm string phrase Returns: string containing the message of aknowledgement of delivery. The parameter is "OK" if the message of confirmation of the payment were correctly auhentified by cybermut_testmac. Any other chain is regarded as an error message. See also cybermut_creerformulairecm cybermut_testmac. php-4.2.3/ext/cybermut/php_cybermut.h0100644000175200000240000000471707437364620016471 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sylvain PAGES | +----------------------------------------------------------------------+ */ #ifndef PHP_CYBERMUT_H #define PHP_CYBERMUT_H extern zend_module_entry cybermut_module_entry; #define phpext_cybermut_ptr &cybermut_module_entry #ifdef PHP_WIN32 #define PHP_CYBERMUT_API __declspec(dllexport) #else #define PHP_CYBERMUT_API #endif PHP_MINIT_FUNCTION(cybermut); PHP_MSHUTDOWN_FUNCTION(cybermut); PHP_RINIT_FUNCTION(cybermut); PHP_RSHUTDOWN_FUNCTION(cybermut); PHP_MINFO_FUNCTION(cybermut); PHP_FUNCTION(confirm_cybermut_compiled); /* For testing, remove later. */ PHP_FUNCTION(cybermut_creerformulairecm); PHP_FUNCTION(cybermut_testmac); PHP_FUNCTION(cybermut_creerreponsecm); /* Declare any global variables you may need between the BEGIN and END macros here: ZEND_BEGIN_MODULE_GLOBALS(cybermut) int global_variable; ZEND_END_MODULE_GLOBALS(cybermut) */ /* In every function that needs to use variables in php_cybermut_globals, do call CYBERMUTLS_FETCH(); after declaring other variables used by that function, and always refer to them as CYBERMUTG(variable). You are encouraged to rename these macros something shorter, see examples in any other php module directory. */ #ifdef ZTS #define CYBERMUTG(v) TSRMG(cybermut_globals_id, php_cybermut_globals *, v) #else #define CYBERMUTG(v) (cybermut_globals.v) #endif #endif /* PHP_CYBERMUT_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/cyrus/0040755000175200000240000000000007535765574013140 5ustar zeevstaffphp-4.2.3/ext/cyrus/CREDITS0100644000175200000240000000002607333302647014133 0ustar zeevstaffCyrus Sterling Hughes php-4.2.3/ext/cyrus/Makefile.in0100644000175200000240000000037307333302647015165 0ustar zeevstaff# $Id: Makefile.in,v 1.1 2025/08/05 17:43:03 sterling Exp $ LTLIBRARY_NAME = libcyrus.la LTLIBRARY_SOURCES = cyrus.c LTLIBRARY_SHARED_NAME = cyrus.la LTLIBRARY_SHARED_LIBADD = $(CYRUS_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/cyrus/config.m40100644000175200000240000000257607401753421014632 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.3 2025/11/30 18:59:29 sniper Exp $ dnl PHP_ARG_WITH(cyrus, for cyrus imap support, [ --with-cyrus Include cyrus imap support]) if test "$PHP_CYRUS" != "no"; then found_cyrus=no found_sasl=no found_openssl=no for i in /usr /usr/local $PHP_CYRUS; do if test -r $i/include/cyrus/imclient.h && test "$found_cyrus" = "no"; then PHP_ADD_INCLUDE($i/include) PHP_SUBST(CYRUS_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(cyrus, $i/lib, CYRUS_SHARED_LIBADD) found_cyrus=yes fi if test -r $i/include/sasl.h && test "$found_sasl" = "no"; then PHP_ADD_INCLUDE($i/include) PHP_SUBST(SASL_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(sasl, $i/lib, SASL_SHARED_LIBADD) found_sasl=yes fi if test -r $i/include/openssl/ssl.h && test "$found_openssl" = "no" && test "$PHP_OPENSSL" = "no"; then PHP_SUBST(OPENSSL_SHARED_LIBADD) PHP_SUBST(CRYPTO_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(ssl, $i/lib, OPENSSL_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(crypto, $i/lib, CRYPTO_SHARED_LIBADD) found_openssl=yes fi done if test "$found_cyrus" = "no"; then AC_MSG_RESULT(not found) AC_MSG_ERROR(Please Re-install the cyrus distribution) fi if test "$found_sasl" = "no"; then AC_MSG_RESULT(sasl not found) AC_MSG_ERROR(Please Re-install the cyrus distribution) fi AC_DEFINE(HAVE_CYRUS,1,[ ]) PHP_EXTENSION(cyrus, $ext_shared) fi php-4.2.3/ext/cyrus/cyrus.c0100644000175200000240000003146007461327457014442 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sterling Hughes | +----------------------------------------------------------------------+ */ /* $Id: cyrus.c,v 1.9.2.1 2025/04/23 18:59:59 derick Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_cyrus.h" #if HAVE_CYRUS #include #include #include #include #include static int le_cyrus; #define le_cyrus_name "Cyrus IMAP connection" function_entry cyrus_functions[] = { PHP_FE(cyrus_connect, NULL) PHP_FE(cyrus_authenticate, NULL) PHP_FE(cyrus_bind, NULL) PHP_FE(cyrus_unbind, NULL) PHP_FE(cyrus_query, NULL) PHP_FE(cyrus_close, NULL) {NULL, NULL, NULL} }; zend_module_entry cyrus_module_entry = { STANDARD_MODULE_HEADER, "cyrus", cyrus_functions, PHP_MINIT(cyrus), NULL, NULL, NULL, PHP_MINFO(cyrus), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_CYRUS ZEND_GET_MODULE(cyrus) #endif static void cyrus_free(zend_rsrc_list_entry *rsrc) { php_cyrus *conn = (php_cyrus *) rsrc->ptr; if (conn->client) imclient_close(conn->client); if (conn->host) efree(conn->host); if (conn->port) efree(conn->port); efree(conn); } PHP_MINIT_FUNCTION(cyrus) { le_cyrus = zend_register_list_destructors_ex(cyrus_free, NULL, le_cyrus_name, module_number); REGISTER_LONG_CONSTANT("CYRUS_CONN_NONSYNCLITERAL", IMCLIENT_CONN_NONSYNCLITERAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CYRUS_CONN_INITIALRESPONSE", IMCLIENT_CONN_INITIALRESPONSE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CYRUS_CALLBACK_NUMBERED", CALLBACK_NUMBERED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CYRUS_CALLBACK_NOLITERAL", CALLBACK_NOLITERAL, CONST_CS | CONST_PERSISTENT); return SUCCESS; } PHP_MINFO_FUNCTION(cyrus) { php_info_print_table_start(); php_info_print_table_header(2, "Cyrus IMAP support", "enabled"); php_info_print_table_end(); } extern void fatal(char *s, int exit) { php_error(E_ERROR, s); } /* {{{ proto resource cyrus_connect([ string host [, string port [, int flags]]]) Connect to a Cyrus IMAP server */ PHP_FUNCTION(cyrus_connect) { zval **z_host; zval **z_port; zval **z_flags; php_cyrus *conn; struct imclient *client; char *host; char *port = NULL; int flags = 0; int error; int argc = ZEND_NUM_ARGS(); if (argc < 0 || argc > 3 || zend_get_parameters_ex(argc, &z_host, &z_port, &z_flags) == FAILURE) { WRONG_PARAM_COUNT; } if (argc > 0) { convert_to_string_ex(z_host); host = estrndup(Z_STRVAL_PP(z_host), Z_STRLEN_PP(z_host)); } else { host = estrndup("localhost", sizeof("localhost") - 1); } if (argc > 1) { convert_to_string_ex(z_port); port = estrndup(Z_STRVAL_PP(z_port), Z_STRLEN_PP(z_port)); } if (argc > 2) { convert_to_long_ex(z_flags); flags = Z_LVAL_PP(z_flags); } error = imclient_connect(&client, host, port, NULL); switch (error) { case 0: if (client) { conn = ecalloc(1, sizeof *conn); conn->client = client; conn->host = host; conn->port = port; if (flags) { imclient_setflags(conn->client, flags); conn->flags = flags; } } break; case -1: php_error(E_WARNING, "Invalid hostname: %s", host); RETURN_FALSE; case -2: php_error(E_WARNING, "Invalid port: %d", port); RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, conn, le_cyrus); conn->id = Z_LVAL_P(return_value); } /* }}} */ static void cyrus_capable_callback(struct imclient *client, void *rock, struct imclient_reply *reply) { char *token = NULL; char *token_buf; char *mechanism = rock; /* We need to split the reply up by the whitespace */ token = php_strtok_r(reply->text, " ", &token_buf); while (token != NULL) { if (! strncmp(token, "AUTH=", 5)) { memcpy(mechanism, token + 5, strlen(token) - 5); break; } token = php_strtok_r(NULL, " ", &token_buf); } } /* {{{ proto bool cyrus_authenticate( resource connection [, string mechlist [, string service [, string user [, int minssf [, int maxssf]]]]]) Authenticate agaings a Cyrus IMAP server */ PHP_FUNCTION(cyrus_authenticate) { zval **z_conn; zval **z_mechlist; zval **z_service; zval **z_user; zval **z_minssf; zval **z_maxssf; php_cyrus *conn; char *mechlist; char *service; char *user; int minssf; int maxssf; int argc = ZEND_NUM_ARGS(); if (argc < 1 || argc > 6 || zend_get_parameters_ex(argc, &z_conn, &z_mechlist, &z_service, &z_user, &z_minssf, &z_maxssf) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(conn, php_cyrus *, z_conn, -1, le_cyrus_name, le_cyrus); /* Determine support mechanisms */ if (argc > 1 && Z_TYPE_PP(z_mechlist) != IS_NULL) { convert_to_string_ex(z_mechlist); mechlist = estrndup(Z_STRVAL_PP(z_mechlist), Z_STRLEN_PP(z_mechlist)); } else { char tmp_mechlist[100]; int pos = 0; /* NULL out the buffer, ensures it has a safe ending and allows us to * test properly for the end of the buffer */ memset(tmp_mechlist, 0, sizeof tmp_mechlist); /* We'll be calling the "CAPABILITY" command, which will give us a list * of the types of authorization the server is capable of */ imclient_addcallback(conn->client, "CAPABILITY", 0, cyrus_capable_callback, (void *) tmp_mechlist, 0); imclient_send(conn->client, NULL, NULL, "CAPABILITY"); /* Grab the end of string position into pos */ while (tmp_mechlist[pos++] != 0) ; /* Tack on PLAIN to whatever the auth string is */ memcpy(tmp_mechlist + pos, " PLAIN", 6); /* Copy it onto the main buffer */ mechlist = estrndup(tmp_mechlist, pos + 6); } /* Determine the service type */ if (argc > 2 && Z_TYPE_PP(z_service) != IS_NULL) { convert_to_string_ex(z_service); service = estrndup(Z_STRVAL_PP(z_service), Z_STRLEN_PP(z_service)); } else { service = estrndup("imap", 4); } /* Determine the user */ if (argc > 3 && Z_TYPE_PP(z_user) != IS_NULL) { convert_to_string_ex(z_user); user = estrndup(Z_STRVAL_PP(z_user), Z_STRLEN_PP(z_user)); } else { /* XXX: UGLY, but works, determines the username to use */ user = (char *) sapi_getenv("USER", 4); if (! user) { user = (char *) getenv("USER"); if (! user) { user = (char *) sapi_getenv("LOGNAME", 7); if (! user) { user = (char *) getenv("LOGNAME"); if (! user) { struct passwd *pwd = getpwuid(getuid()); if (! pwd) { php_error(E_WARNING, "Couldn't determine user id"); RETURN_FALSE; } user = estrdup(pwd->pw_name); } } } } } /* Determine the minssf */ if (argc > 4 && Z_TYPE_PP(z_minssf) != NULL) { convert_to_long_ex(z_minssf); minssf = Z_LVAL_PP(z_minssf); } else { minssf = 0; } /* Determine the maxssf */ if (argc > 5 && Z_TYPE_PP(z_maxssf) != NULL) { convert_to_long_ex(z_maxssf); maxssf = Z_LVAL_PP(z_maxssf); } else { maxssf = 1000; } imclient_authenticate(conn->client, mechlist, service, user, minssf, maxssf); efree(mechlist); efree(service); efree(user); } /* }}} */ static void cyrus_generic_callback(struct imclient *client, void *rock, struct imclient_reply *reply) { php_cyrus_callback *callback = rock; if (client) { zval **argv[4]; zval *retval; zval *cyrus; zval *keyword; zval *text; zval *msgno; TSRMLS_FETCH(); MAKE_STD_ZVAL(cyrus); MAKE_STD_ZVAL(keyword); MAKE_STD_ZVAL(text); MAKE_STD_ZVAL(msgno); ZVAL_RESOURCE(cyrus, callback->le); zend_list_addref(callback->le); ZVAL_STRING(keyword, reply->keyword, 1); ZVAL_STRING(text, reply->text, 1); ZVAL_LONG(msgno, reply->msgno); argv[0] = &cyrus; argv[1] = &keyword; argv[2] = &text; argv[3] = &msgno; if (call_user_function_ex(EG(function_table), NULL, callback->function, &retval, 4, argv, 0, NULL TSRMLS_CC) == FAILURE) { php_error(E_WARNING, "Couldn't call the %s handler", callback->trigger); } zval_ptr_dtor(argv[0]); zval_ptr_dtor(argv[1]); zval_ptr_dtor(argv[2]); zval_ptr_dtor(argv[3]); efree(argv); } else { return; } } /* {{{ proto bool cyrus_bind( resource connection, array callbacks) Bind callbacks to a Cyrus IMAP connection */ PHP_FUNCTION(cyrus_bind) { zval **z_conn; zval **z_callback; zval **tmp; HashTable *hash; php_cyrus *conn; php_cyrus_callback callback; char *string_key; ulong num_key; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &z_conn, &z_callback) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(conn, php_cyrus *, z_conn, -1, le_cyrus_name, le_cyrus); hash = HASH_OF(*z_callback); if (! hash) { php_error(E_WARNING, "Second argument to cyrus_bind() must be an array or object"); RETURN_FALSE; } for (zend_hash_internal_pointer_reset(hash); zend_hash_get_current_data(hash, (void **) &tmp) == SUCCESS; zend_hash_move_forward(hash)) { SEPARATE_ZVAL(tmp); zend_hash_get_current_key(hash, &string_key, &num_key, 0); if (! string_key) continue; if (! strcasecmp(string_key, "trigger")) { convert_to_string_ex(tmp); callback.trigger = estrndup(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)); } else if (! strcasecmp(string_key, "function")) { callback.function = *tmp; zval_add_ref(&callback.function); } else if (! strcasecmp(string_key, "flags")) { convert_to_long_ex(tmp); callback.flags |= Z_LVAL_PP(tmp); } } if (! callback.trigger) { php_error(E_WARNING, "You must specify a trigger in your callback"); RETURN_FALSE; } if (! callback.function) { php_error(E_WARNING, "You must specify a function in your callback"); RETURN_FALSE; } callback.le = conn->id; imclient_addcallback(conn->client, callback.trigger, callback.flags, cyrus_generic_callback, (void **) &callback, 0); RETURN_TRUE; } /* }}} */ /* {{{ proto bool cyrus_unbind( resource connection, string trigger_name) Unbind ... */ PHP_FUNCTION(cyrus_unbind) { zval **z_conn; zval **trigger_name; php_cyrus *conn; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &z_conn, &trigger_name) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(conn, php_cyrus *, z_conn, -1, le_cyrus_name, le_cyrus); convert_to_string_ex(trigger_name); imclient_addcallback(conn->client, Z_STRVAL_PP(trigger_name), 0, NULL, NULL, 0); RETURN_TRUE; } /* }}} */ /* {{{ proto bool cyrus_query( resource connection, string query) Send a query to a Cyrus IMAP server */ PHP_FUNCTION(cyrus_query) { zval **z_conn; zval **query; php_cyrus *conn; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &z_conn, &query) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(conn, php_cyrus *, z_conn, -1, le_cyrus_name, le_cyrus); convert_to_string_ex(query); imclient_send(conn->client, NULL, NULL, Z_STRVAL_PP(query)); RETURN_TRUE; } /* }}} */ /* {{{ proto bool cyrus_close( resource connection) Close connection to a cyrus server */ PHP_FUNCTION(cyrus_close) { zval **z_conn; php_cyrus *conn; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &z_conn) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(conn, php_cyrus *, z_conn, -1, le_cyrus_name, le_cyrus); zend_list_delete(Z_LVAL_PP(z_conn)); RETURN_TRUE; } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: */ php-4.2.3/ext/cyrus/php_cyrus.h0100644000175200000240000000406007437364622015310 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sterling Hughes | +----------------------------------------------------------------------+ */ /* $Id: php_cyrus.h,v 1.3 2025/02/28 08:25:54 sebastian Exp $ */ #ifndef PHP_CYRUS_H #define PHP_CYRUS_H #include "php.h" #if HAVE_CYRUS #include extern zend_module_entry cyrus_module_entry; #define phpext_cyrus_ptr &cyrus_module_entry #ifdef PHP_WIN32 #define PHP_CYRUS_API __declspec(dllexport) #else #define PHP_CYRUS_API #endif PHP_MINIT_FUNCTION(cyrus); PHP_MINFO_FUNCTION(cyrus); PHP_FUNCTION(cyrus_connect); PHP_FUNCTION(cyrus_authenticate); PHP_FUNCTION(cyrus_bind); PHP_FUNCTION(cyrus_unbind); PHP_FUNCTION(cyrus_query); PHP_FUNCTION(cyrus_close); typedef struct { struct imclient *client; char *host; char *port; int flags; int id; } php_cyrus; typedef struct { zval *function; char *trigger; long le; int flags; } php_cyrus_callback; #endif #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: */ php-4.2.3/ext/db/0040755000175200000240000000000007535765574012360 5ustar zeevstaffphp-4.2.3/ext/db/tests/0040755000175200000240000000000007535765574013522 5ustar zeevstaffphp-4.2.3/ext/db/tests/001.phpt0100644000175200000240000000030307174765525014703 0ustar zeevstaff--TEST-- DBM File Creation Test --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- php-4.2.3/ext/db/tests/002.phpt0100644000175200000240000000047607174765525014717 0ustar zeevstaff--TEST-- DBM Insert/Fetch Test --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- This is a test insert php-4.2.3/ext/db/tests/003.phpt0100644000175200000240000000061607174765525014714 0ustar zeevstaff--TEST-- DBM Insert/Replace/Fetch Test --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- This is the replacement text php-4.2.3/ext/db/tests/004.phpt0100644000175200000240000000114007174765525014706 0ustar zeevstaff--TEST-- DBM Multiple Insert/Fetch Test --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- Another Content String Content String 2 php-4.2.3/ext/db/tests/005.phpt0100644000175200000240000000113307174765525014711 0ustar zeevstaff--TEST-- DBM FirstKey/NextKey Loop Test With 5 Items --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- 5 php-4.2.3/ext/db/tests/006.phpt0100644000175200000240000000122507174765525014714 0ustar zeevstaff--TEST-- DBM FirstKey/NextKey with 2 deletes --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- 3 php-4.2.3/ext/db/CREDITS0100644000175200000240000000004107206176564013356 0ustar zeevstaffDBM Rasmus Lerdorf, Jim Winstead php-4.2.3/ext/db/Makefile.in0100644000175200000240000000013607103403543014372 0ustar zeevstaff LTLIBRARY_NAME = libdb.la LTLIBRARY_SOURCES = db.c include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/db/config.m40100644000175200000240000000353507401753422014047 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.12 2025/11/30 18:59:30 sniper Exp $ dnl # Checks for libraries. # Prefer gdbm, Berkeley DB and ndbm/dbm, in that order AC_DEFUN(AC_PREFERRED_DB_LIB,[ AC_CHECK_LIB(gdbm, gdbm_open,[AC_DEFINE(GDBM,1, [Whether you have GDBM]) DBM_TYPE=gdbm; DBM_LIB=-lgdbm], [AC_CHECK_LIB(c, dbm_open,[AC_DEFINE(NDBM,1,[ ]) DBM_TYPE=ndbm; DBM_LIB=], [AC_CHECK_LIB(dbm, dbm_open,[AC_DEFINE(NDBM,1,[ ]) DBM_TYPE=ndbm; DBM_LIB=-ldbm], [AC_CHECK_LIB(db, dbm_open,[AC_DEFINE(NDBM,1, [Whether you have NDBM]) DBM_TYPE=ndbm; DBM_LIB=-ldb], [DBM_TYPE=""]) ]) ]) ]) AC_MSG_CHECKING([preferred dbm library]) if test "a$DBM_TYPE" = a; then AC_MSG_RESULT(none found) AC_MSG_WARN(No dbm library found - using built-in flatfile support) else AC_MSG_RESULT($DBM_TYPE chosen) fi PHP_SUBST(DBM_LIB) PHP_SUBST(DBM_TYPE) ]) PHP_ARG_WITH(db, for xDBM support, [ --with-db Include old xDBM support (deprecated)]) if test "$PHP_DB" != "no"; then AC_PREFERRED_DB_LIB if test "$DBM_LIB" = "-lgdbm"; then AC_CHECK_HEADER(gdbm.h, [ GDBM_INCLUDE="" ], [ AC_MSG_RESULT("Try /usr/local/include/gdbm.h"); AC_CHECK_HEADER(/usr/local/include/gdbm.h, [ GDBM_INCLUDE=-I/usr/local/include ],[ AC_MSG_RESULT("Try /opt/local/include/gdbm.h"); AC_CHECK_HEADER(/opt/local/include/gdbm.h, [ GDBM_INCLUDE=-I/opt/local/include ],[ dnl if in /usr/pkg/include, do not add anything. See above. AC_MSG_RESULT("Try /usr/pkg/include/gdbm.h"); AC_CHECK_HEADER(/usr/pkg/include/gdbm.h, [ GDBM_INCLUDE="" ],[ AC_MSG_RESULT("Giving up - You need to install gdbm.h somewhere"); exit ]) ]) ]) ]) fi if test -n "$DBM_LIB"; then INCLUDES="$INCLUDES $GDBM_INCLUDE" EXTRA_LIBS="$EXTRA_LIBS $DBM_LIB" fi PHP_EXTENSION(db) fi php-4.2.3/ext/db/db.c0100644000175200000240000006114707532550330013072 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Jim Winstead | +----------------------------------------------------------------------+ */ /* $Id: db.c,v 1.70.2.1 2025/08/27 01:07:36 helly Exp $ */ #define IS_EXT_MODULE #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_globals.h" #include "safe_mode.h" #include "fopen_wrappers.h" #include "ext/standard/flock_compat.h" #include "ext/standard/info.h" #include #include #include #if HAVE_UNISTD_H #include #endif #ifdef PHP_31 #include "os/nt/flock.h" #else #ifdef PHP_WIN32 #include "win32/flock.h" #else #include #endif #endif #if HAVE_FCNTL_H #include #endif #if GDBM #include #define DBM_TYPE GDBM_FILE #define DBM_MODE_TYPE int #define DBM_WRITE_MODE GDBM_WRITER #define DBM_CREATE_MODE GDBM_WRCREAT #define DBM_NEW_MODE GDBM_NEWDB #define DBM_DEFAULT_MODE GDBM_READER #define DBM_OPEN(filename, mode) gdbm_open(filename, 512, mode, 0666, 0) #define DBM_CLOSE(dbf) gdbm_close(dbf) #define DBM_STORE(dbf, key, value, mode) gdbm_store(dbf, key, value, mode) #define DBM_FETCH(dbf, key) gdbm_fetch(dbf, key) #define DBM_EXISTS(dbf, key) gdbm_exists(dbf, key) #define DBM_DELETE(dbf, key) gdbm_delete(dbf, key) #define DBM_FIRSTKEY(dbf) gdbm_firstkey(dbf) #define DBM_NEXTKEY(dbf, key) gdbm_nextkey(dbf, key) #define DBM_INSERT GDBM_INSERT #define DBM_REPLACE GDBM_REPLACE #endif #if NDBM && !GDBM #if BSD2 #define DB_DBM_HSEARCH 1 #include #else #ifdef HAVE_DB1_NDBM_H #include #else #include #endif #endif #define DBM_TYPE DBM * #define DBM_MODE_TYPE int #define DBM_WRITE_MODE O_RDWR #define DBM_CREATE_MODE O_RDWR | O_CREAT #define DBM_NEW_MODE O_RDWR | O_CREAT | O_TRUNC #define DBM_DEFAULT_MODE O_RDONLY #define DBM_OPEN(filename, mode) dbm_open(filename, mode, 0666) #define DBM_CLOSE(dbf) dbm_close(dbf) #define DBM_STORE(dbf, key, value, mode) dbm_store(dbf, key, value, mode) #define DBM_FETCH(dbf, key) dbm_fetch(dbf, key) #define DBM_EXISTS(dbf, key) php_dbm_key_exists(dbf, key) #define DBM_DELETE(dbf, key) dbm_delete(dbf, key) #define DBM_FIRSTKEY(dbf) dbm_firstkey(dbf) #define DBM_NEXTKEY(dbf, key) dbm_nextkey(dbf) /* {{{ php_dbm_key_exists */ static int php_dbm_key_exists(DBM *dbf, datum key_datum) { datum value_datum; int ret; value_datum = dbm_fetch(dbf, key_datum); if (value_datum.dptr) ret = 1; else ret = 0; return ret; } /* }}} */ #endif #if !NDBM && !GDBM #define DBM_TYPE FILE * #define DBM_MODE_TYPE char * #define DBM_WRITE_MODE "r+b" #define DBM_CREATE_MODE "a+b" #define DBM_NEW_MODE "w+b" #define DBM_DEFAULT_MODE "r" #define DBM_OPEN(filename, mode) VCWD_FOPEN(filename, mode) #define DBM_CLOSE(dbf) fclose(dbf) #define DBM_STORE(dbf, key, value, mode) flatfile_store(dbf, key, value, mode) #define DBM_FETCH(dbf, key) flatfile_fetch(dbf, key) #define DBM_EXISTS(dbf, key) flatfile_findkey(dbf, key) #define DBM_DELETE(dbf, key) flatfile_delete(dbf, key) #define DBM_FIRSTKEY(dbf) flatfile_firstkey(dbf) #define DBM_NEXTKEY(dbf, key) flatfile_nextkey(dbf) #define DBM_INSERT 0 #define DBM_REPLACE 1 typedef struct { char *dptr; int dsize; } datum; int flatfile_store(FILE *dbf, datum key, datum value, int mode); datum flatfile_fetch(FILE *dbf, datum key); int flatfile_findkey(FILE *dbf, datum key); int flatfile_delete(FILE *dbf, datum key); datum flatfile_firstkey(FILE *dbf); datum flatfile_nextkey(FILE *dbf); #endif #include "php_db.h" #include "ext/standard/php_string.h" static int le_db; /* {{{ php_find_dbm */ dbm_info *php_find_dbm(pval *id TSRMLS_DC) { list_entry *le; dbm_info *info; int numitems, i; int info_type; if (Z_TYPE_P(id) == IS_STRING) { numitems = zend_hash_num_elements(&EG(regular_list)); for (i=1; i<=numitems; i++) { if (zend_hash_index_find(&EG(regular_list), i, (void **) &le)==FAILURE) { continue; } if (Z_TYPE_P(le) == le_db) { info = (dbm_info *)(le->ptr); if (!strcmp(info->filename, Z_STRVAL_P(id))) { return (dbm_info *)(le->ptr); } } } } /* didn't find it as a database filename, try as a number */ convert_to_long(id); info = zend_list_find(Z_LVAL_P(id), &info_type); if (info_type != le_db) return NULL; return info; } /* }}} */ /* {{{ php_get_info_db */ static char *php_get_info_db(void) { static char temp1[128]; static char temp[256]; temp1[0]='\0'; temp[0]='\0'; #ifdef DB_VERSION_STRING /* using sleepycat dbm */ strcat(temp, DB_VERSION_STRING); #endif #if GDBM sprintf(temp1, "%s", gdbm_version); strcat(temp, temp1); #endif #if NDBM && !GDBM strcat(temp, "ndbm support enabled"); #endif #if !GDBM && !NDBM strcat(temp, "flat file support enabled"); #endif #if NFS_HACK strcat(temp, "NFS hack in effect"); #endif if (!*temp) strcat(temp, "No database support"); return temp; } /* }}} */ /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(db) { /* this isn't pretty ... should break out the info a bit more (cmv) */ php_info_print_box_start(0); php_printf(php_get_info_db()); php_info_print_box_end(); } /* }}} */ /* {{{ proto string dblist(void) Describes the dbm-compatible library being used */ PHP_FUNCTION(dblist) { char *str; if (ZEND_NUM_ARGS() != 0) { WRONG_PARAM_COUNT; } str = php_get_info_db(); RETURN_STRING(str, 1); } /* }}} */ /* {{{ proto int dbmopen(string filename, string mode) Opens a dbm database */ PHP_FUNCTION(dbmopen) { pval *filename, *mode; dbm_info *info=NULL; int ret; if (ZEND_NUM_ARGS()!=2 || zend_get_parameters(ht, 2, &filename, &mode)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_string(filename); convert_to_string(mode); info = php_dbm_open(Z_STRVAL_P(filename), Z_STRVAL_P(mode) TSRMLS_CC); if (info) { ret = zend_list_insert(info, le_db); RETURN_LONG(ret); } else { RETURN_FALSE; } } /* }}} */ /* {{{ php_dbm_open */ dbm_info *php_dbm_open(char *filename, char *mode TSRMLS_DC) { dbm_info *info; int ret, lock=0; char *lockfn = NULL; int lockfd = 0; #if NFS_HACK int last_try = 0; struct stat sb; int retries = 0; #endif DBM_TYPE dbf=NULL; DBM_MODE_TYPE imode; if (filename == NULL) { php_error(E_WARNING, "NULL filename passed to php_dbm_open()"); return NULL; } if (PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) { return NULL; } if (php_check_open_basedir(filename TSRMLS_CC)) { return NULL; } switch (*mode) { case 'w': imode = DBM_WRITE_MODE; lock = 1; break; case 'c': imode = DBM_CREATE_MODE; lock = 1; break; case 'n': imode = DBM_NEW_MODE; lock = 1; break; default: imode = DBM_DEFAULT_MODE; lock = 0; break; } if (lock) { lockfn = emalloc(strlen(filename) + 5); strcpy(lockfn, filename); strcat(lockfn, ".lck"); #if NFS_HACK while((last_try = VCWD_STAT(lockfn, &sb))==0) { retries++; php_sleep(1); if (retries>30) break; } if (last_try!=0) { lockfd = open(lockfn, O_RDWR|O_CREAT, 0644); close(lockfd); } else { php_error(E_WARNING, "File appears to be locked [%s]\n", lockfn); return -1; } #else /* NFS_HACK */ lockfd = VCWD_OPEN_MODE(lockfn, O_RDWR|O_CREAT, 0644); if (lockfd) { flock(lockfd, LOCK_EX); close(lockfd); } else { php_error(E_WARNING, "Unable to establish lock: %s", filename); } #endif /* else NFS_HACK */ } dbf = DBM_OPEN(filename, imode); #if !NDBM && !GDBM if (dbf) { setvbuf(dbf, NULL, _IONBF, 0); } #endif if (dbf) { info = (dbm_info *)emalloc(sizeof(dbm_info)); if (!info) { php_error(E_ERROR, "problem allocating memory!"); return NULL; } info->filename = estrdup(filename); info->lockfn = lockfn; info->lockfd = lockfd; info->dbf = dbf; return info; } else { #if GDBM php_error(E_WARNING, "dbmopen_gdbm(%s): %d [%s], %d [%s]", filename, gdbm_errno, gdbm_strerror(gdbm_errno), errno, strerror(errno)); if (gdbm_errno) ret = gdbm_errno; else if (errno) ret = errno; else ret = -1; #else #if NDBM #if PHP_DEBUG php_error(E_WARNING, "dbmopen_ndbm(%s): errno = %d [%s]\n", filename, errno, strerror(errno)); #endif if (errno) ret=errno; else ret = -1; #else #if PHP_DEBUG php_error(E_WARNING, "dbmopen_flatfile(%s): errno = %d [%s]\n", filename, errno, strerror(errno)); #endif if (errno) ret=errno; else ret = -1; #endif #endif #if NFS_HACK if (lockfn) { VCWD_UNLINK(lockfn); } #endif if (lockfn) efree(lockfn); } return NULL; } /* }}} */ /* {{{ proto bool dbmclose(int dbm_identifier) Closes a dbm database */ PHP_FUNCTION(dbmclose) { pval *id; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters(ht, 1, &id)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(id); if (zend_list_delete(Z_LVAL_P(id)) == SUCCESS) { RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ /* {{{ php_dbm_close */ void php_dbm_close(zend_rsrc_list_entry *rsrc TSRMLS_DC) { dbm_info *info = (dbm_info *)rsrc->ptr; DBM_TYPE dbf; int lockfd; dbf = info->dbf; #if NFS_HACK VCWD_UNLINK(info->lockfn); #else if (info->lockfn) { lockfd = VCWD_OPEN_MODE(info->lockfn, O_RDWR, 0644); flock(lockfd, LOCK_UN); close(lockfd); } #endif if (dbf) DBM_CLOSE(dbf); /* free the memory used by the dbm_info struct */ if (info->filename) efree(info->filename); if (info->lockfn) efree(info->lockfn); efree(info); } /* }}} */ /* * ret = -1 means that database was opened for read-only * ret = 0 success * ret = 1 key already exists - nothing done */ /* {{{ proto int dbminsert(int dbm_identifier, string key, string value) Inserts a value for a key in a dbm database */ PHP_FUNCTION(dbminsert) { pval *id, *key, *value; dbm_info *info; int ret; if (ZEND_NUM_ARGS()!=3||zend_get_parameters(ht, 3, &id, &key, &value) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string(key); convert_to_string(value); info = php_find_dbm(id TSRMLS_CC); if (!info) { php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id)); RETURN_FALSE; } ret = php_dbm_insert_replace(info, Z_STRVAL_P(key), Z_STRVAL_P(value), 0 TSRMLS_CC); RETURN_LONG(ret); } /* }}} */ /* {{{ proto int dbmreplace(int dbm_identifier, string key, string value) Replaces the value for a key in a dbm database */ PHP_FUNCTION(dbmreplace) { pval *id, *key, *value; dbm_info *info; int ret; if (ZEND_NUM_ARGS()!=3||zend_get_parameters(ht, 3, &id, &key, &value) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string(key); convert_to_string(value); info = php_find_dbm(id TSRMLS_CC); if (!info) { php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id)); RETURN_FALSE; } ret = php_dbm_insert_replace(info, Z_STRVAL_P(key), Z_STRVAL_P(value), 1 TSRMLS_CC); RETURN_LONG(ret); } /* }}} */ /* {{{ php_dbm_replace */ int php_dbm_insert_replace(dbm_info *info, char *key, char *value, int replace_mode TSRMLS_DC) { DBM_TYPE dbf; int ret; datum key_datum, value_datum; key = estrdup(key); value = estrdup(value); if (PG(magic_quotes_runtime)) { php_stripslashes(key, NULL TSRMLS_CC); php_stripslashes(value, NULL TSRMLS_CC); } value_datum.dptr = value; value_datum.dsize = strlen(value); key_datum.dptr = key; key_datum.dsize = strlen(key); #if GDBM_FIX key_datum.dsize++; #endif dbf = info->dbf; if (!dbf) { php_error(E_WARNING, "%s(): Unable to locate dbm file", get_active_function_name(TSRMLS_C)); ret = 1; } else { if (!replace_mode) { ret = DBM_STORE(dbf, key_datum, value_datum, DBM_INSERT); } else { ret = DBM_STORE(dbf, key_datum, value_datum, DBM_REPLACE); } } /* free the memory */ efree(key_datum.dptr); efree(value_datum.dptr); return(ret); } /* }}} */ /* {{{ proto string dbmfetch(int dbm_identifier, string key) Fetches a value for a key from a dbm database */ PHP_FUNCTION(dbmfetch) { pval *id, *key; dbm_info *info; char *ret; if (ZEND_NUM_ARGS()!=2||zend_get_parameters(ht, 2, &id, &key)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_string(key); info = php_find_dbm(id TSRMLS_CC); if (!info) { php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id)); RETURN_FALSE; } ret = php_dbm_fetch(info, Z_STRVAL_P(key) TSRMLS_CC); if (ret) { RETVAL_STRING(ret, 0); } else { RETURN_FALSE; } } /* }}} */ /* {{{ php_dbm_fetch */ char *php_dbm_fetch(dbm_info *info, char *key TSRMLS_DC) { datum key_datum, value_datum; char *ret; DBM_TYPE dbf; key_datum.dptr = key; key_datum.dsize = strlen(key); #if GDBM_FIX key_datum.dsize++; #endif value_datum.dptr = NULL; value_datum.dsize = 0; dbf = info->dbf; if (!dbf) { php_error(E_WARNING, "Unable to locate dbm file"); return(NULL); } value_datum = DBM_FETCH(dbf, key_datum); if (value_datum.dptr) { ret = (char *)emalloc(sizeof(char) * value_datum.dsize + 1); strncpy(ret, value_datum.dptr, value_datum.dsize); ret[value_datum.dsize] = '\0'; #if GDBM /* all but NDBM use malloc to allocate the content blocks, so we need to free it */ free(value_datum.dptr); #else # if !NDBM efree(value_datum.dptr); # endif #endif } else ret = NULL; if (ret && PG(magic_quotes_runtime)) { ret = php_addslashes(ret, value_datum.dsize, NULL, 1 TSRMLS_CC); } return(ret); } /* }}} */ /* {{{ proto int dbmexists(int dbm_identifier, string key) Tells if a value exists for a key in a dbm database */ PHP_FUNCTION(dbmexists) { pval *id, *key; dbm_info *info; int ret; if (ZEND_NUM_ARGS()!=2||zend_get_parameters(ht, 2, &id, &key)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_string(key); info = php_find_dbm(id TSRMLS_CC); if (!info) { php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id)); RETURN_FALSE; } ret = php_dbm_exists(info, Z_STRVAL_P(key)); RETURN_LONG(ret); } /* }}} */ /* {{{ php_dbm_exists */ int php_dbm_exists(dbm_info *info, char *key) { datum key_datum; int ret; DBM_TYPE dbf; key_datum.dptr = key; key_datum.dsize = strlen(key); #if GDBM_FIX key_datum.dsize++; #endif dbf = info->dbf; if (!dbf) { php_error(E_WARNING, "Unable to locate dbm file"); return(0); } ret = DBM_EXISTS(dbf, key_datum); return(ret); } /* }}} */ /* {{{ proto int dbmdelete(int dbm_identifier, string key) Deletes the value for a key from a dbm database */ PHP_FUNCTION(dbmdelete) { pval *id, *key; dbm_info *info; int ret; if (ZEND_NUM_ARGS()!=2||zend_get_parameters(ht, 2, &id, &key)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_string(key); info = php_find_dbm(id TSRMLS_CC); if (!info) { php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id)); RETURN_FALSE; } ret = php_dbm_delete(info, Z_STRVAL_P(key)); RETURN_LONG(ret); } /* }}} */ /* {{{ php_dbm_delete */ int php_dbm_delete(dbm_info *info, char *key) { datum key_datum; int ret; DBM_TYPE dbf; key_datum.dptr = key; key_datum.dsize = strlen(key); #if GDBM_FIX key_datum.dsize++; #endif dbf = info->dbf; if (!dbf) { php_error(E_WARNING, "Unable to locate dbm file"); return(0); } ret = DBM_DELETE(dbf, key_datum); return(ret); } /* }}} */ /* {{{ proto string dbmfirstkey(int dbm_identifier) Retrieves the first key from a dbm database */ PHP_FUNCTION(dbmfirstkey) { pval *id; dbm_info *info; char *ret; if (ZEND_NUM_ARGS()!=1||zend_get_parameters(ht, 1, &id)==FAILURE) { WRONG_PARAM_COUNT; } info = php_find_dbm(id TSRMLS_CC); if (!info) { php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id)); RETURN_FALSE; } ret = php_dbm_first_key(info); if (!ret) { RETURN_FALSE; } else { RETVAL_STRING(ret, 0); } } /* }}} */ /* {{{ php_dbm_first_key */ char *php_dbm_first_key(dbm_info *info) { datum ret_datum; char *ret; DBM_TYPE dbf; dbf = info->dbf; if (!dbf) { php_error(E_WARNING, "Unable to locate dbm file"); return(NULL); } /* explicitly zero-out ret_datum */ ret_datum.dptr = NULL; ret_datum.dsize = 0; ret_datum = DBM_FIRSTKEY(dbf); if (!ret_datum.dptr) return NULL; ret = (char *)emalloc((ret_datum.dsize + 1) * sizeof(char)); strncpy(ret, ret_datum.dptr, ret_datum.dsize); ret[ret_datum.dsize] = '\0'; #if !NDBM & !GDBM efree(ret_datum.dptr); #endif return (ret); } /* }}} */ /* {{{ proto string dbmnextkey(int dbm_identifier, string key) Retrieves the next key from a dbm database */ PHP_FUNCTION(dbmnextkey) { pval *id, *key; dbm_info *info; char *ret; if (ZEND_NUM_ARGS()!=2||zend_get_parameters(ht, 2, &id, &key)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_string(key); info = php_find_dbm(id TSRMLS_CC); if (!info) { php_error(E_WARNING, "not a valid database identifier %d", Z_LVAL_P(id)); RETURN_FALSE; } ret = php_dbm_nextkey(info, Z_STRVAL_P(key) TSRMLS_CC); if (!ret) { RETURN_FALSE; } else { RETVAL_STRING(ret, 0); } } /* }}} */ /* {{{ php_dbm_nextkey */ char *php_dbm_nextkey(dbm_info *info, char *key TSRMLS_DC) { datum key_datum, ret_datum; char *ret; DBM_TYPE dbf; key_datum.dptr = key; key_datum.dsize = strlen(key); #if GDBM_FIX key_datum.dsize++; #endif dbf = info->dbf; if (!dbf) { php_error(E_WARNING, "Unable to locate dbm file"); return(NULL); } /* explicitly zero-out ret_datum */ ret_datum.dptr = NULL; ret_datum.dsize = 0; ret_datum = DBM_NEXTKEY(dbf, key_datum); if (ret_datum.dptr) { ret = (char *)emalloc(sizeof(char) * ret_datum.dsize + 1); strncpy(ret, ret_datum.dptr, ret_datum.dsize); ret[ret_datum.dsize] = '\0'; #if GDBM /* GDBM uses malloc to allocate the value_datum block, so we need to free it */ free(ret_datum.dptr); #else # if !NDBM efree(ret_datum.dptr); # endif #endif } else ret=NULL; if (ret && PG(magic_quotes_runtime)) { ret = php_addslashes(ret, ret_datum.dsize, NULL, 1 TSRMLS_CC); } return(ret); } /* }}} */ #if !GDBM && !NDBM static long CurrentFlatFilePos = 0L; /* {{{ flatfile_store */ int flatfile_store(FILE *dbf, datum key_datum, datum value_datum, int mode) { int ret; if (mode == DBM_INSERT) { if (flatfile_findkey(dbf, key_datum)) { return 1; } fseek(dbf, 0L, SEEK_END); fprintf(dbf, "%d\n", key_datum.dsize); fflush(dbf); ret = write(fileno(dbf), key_datum.dptr, key_datum.dsize); fprintf(dbf, "%d\n", value_datum.dsize); fflush(dbf); ret = write(fileno(dbf), value_datum.dptr, value_datum.dsize); } else { /* DBM_REPLACE */ flatfile_delete(dbf, key_datum); fprintf(dbf, "%d\n", key_datum.dsize); fflush(dbf); ret = write(fileno(dbf), key_datum.dptr, key_datum.dsize); fprintf(dbf, "%d\n", value_datum.dsize); ret = write(fileno(dbf), value_datum.dptr, value_datum.dsize); } if (ret>0) ret=0; return ret; } /* }}} */ /* {{{ flatfile_fetch */ datum flatfile_fetch(FILE *dbf, datum key_datum) { datum value_datum = {NULL, 0}; int num=0, buf_size=1024; char *buf; if (flatfile_findkey(dbf, key_datum)) { buf = emalloc((buf_size+1) * sizeof(char)); if (fgets(buf, 15, dbf)) { num = atoi(buf); if (num > buf_size) { buf_size+=num; buf = emalloc((buf_size+1)*sizeof(char)); } read(fileno(dbf), buf, num); value_datum.dptr = buf; value_datum.dsize = num; } } return value_datum; } /* }}} */ /* {{{ flatfile_delete */ int flatfile_delete(FILE *dbf, datum key_datum) { char *key = key_datum.dptr; int size = key_datum.dsize; char *buf; int num, buf_size = 1024; long pos; rewind(dbf); buf = emalloc((buf_size + 1)*sizeof(char)); while(!feof(dbf)) { /* read in the length of the key name */ if (!fgets(buf, 15, dbf)) break; num = atoi(buf); if (num > buf_size) { buf_size += num; if (buf) efree(buf); buf = emalloc((buf_size+1)*sizeof(char)); } pos = ftell(dbf); /* read in the key name */ num = fread(buf, sizeof(char), num, dbf); if (num<0) break; *(buf+num) = '\0'; if (size == num && !memcmp(buf, key, size)) { fseek(dbf, pos, SEEK_SET); fputc(0, dbf); fflush(dbf); fseek(dbf, 0L, SEEK_END); if (buf) efree(buf); return SUCCESS; } /* read in the length of the value */ if (!fgets(buf, 15, dbf)) break; num = atoi(buf); if (num > buf_size) { buf_size+=num; if (buf) efree(buf); buf = emalloc((buf_size+1)*sizeof(char)); } /* read in the value */ num = fread(buf, sizeof(char), num, dbf); if (num<0) break; } if (buf) efree(buf); return FAILURE; } /* }}} */ /* {{{ flatfile_findkey */ int flatfile_findkey(FILE *dbf, datum key_datum) { char *buf = NULL; int num; int buf_size=1024; int ret=0; void *key = key_datum.dptr; int size = key_datum.dsize; rewind(dbf); buf = emalloc((buf_size+1)*sizeof(char)); while (!feof(dbf)) { if (!fgets(buf, 15, dbf)) break; num = atoi(buf); if (num > buf_size) { if (buf) efree(buf); buf_size+=num; buf = emalloc((buf_size+1)*sizeof(char)); } num = fread(buf, sizeof(char), num, dbf); if (num<0) break; *(buf+num) = '\0'; if (size == num) { if (!memcmp(buf, key, size)) { ret = 1; break; } } if (!fgets(buf, 15, dbf)) break; num = atoi(buf); if (num > buf_size) { if (buf) efree(buf); buf_size+=num; buf = emalloc((buf_size+1)*sizeof(char)); } num = fread(buf, sizeof(char), num, dbf); if (num<0) break; *(buf+num) = '\0'; } if (buf) efree(buf); return(ret); } /* }}} */ /* {{{ flatfile_firstkey */ datum flatfile_firstkey(FILE *dbf) { datum buf; int num; int buf_size=1024; rewind(dbf); buf.dptr = emalloc((buf_size+1)*sizeof(char)); while(!feof(dbf)) { if (!fgets(buf.dptr, 15, dbf)) break; num = atoi(buf.dptr); if (num > buf_size) { buf_size+=num; if (buf.dptr) efree(buf.dptr); buf.dptr = emalloc((buf_size+1)*sizeof(char)); } num=read(fileno(dbf), buf.dptr, num); if (num<0) break; buf.dsize = num; if (*(buf.dptr)!=0) { CurrentFlatFilePos = ftell(dbf); return(buf); } if (!fgets(buf.dptr, 15, dbf)) break; num = atoi(buf.dptr); if (num > buf_size) { buf_size+=num; if (buf.dptr) efree(buf.dptr); buf.dptr = emalloc((buf_size+1)*sizeof(char)); } num=read(fileno(dbf), buf.dptr, num); if (num<0) break; } if (buf.dptr) efree(buf.dptr); buf.dptr = NULL; return(buf); } /* }}} */ /* {{{ latfile_nextkey */ datum flatfile_nextkey(FILE *dbf) { datum buf; int num; int buf_size=1024; fseek(dbf, CurrentFlatFilePos, SEEK_SET); buf.dptr = emalloc((buf_size+1)*sizeof(char)); while(!feof(dbf)) { if (!fgets(buf.dptr, 15, dbf)) break; num = atoi(buf.dptr); if (num > buf_size) { buf_size+=num; if (buf.dptr) efree(buf.dptr); buf.dptr = emalloc((buf_size+1)*sizeof(char)); } num=read(fileno(dbf), buf.dptr, num); if (num<0) break; if (!fgets(buf.dptr, 15, dbf)) break; num = atoi(buf.dptr); if (num > buf_size) { buf_size+=num; if (buf.dptr) efree(buf.dptr); buf.dptr = emalloc((buf_size+1)*sizeof(char)); } num=read(fileno(dbf), buf.dptr, num); if (num<0) break; buf.dsize = num; if (*(buf.dptr)!=0) { CurrentFlatFilePos = ftell(dbf); return(buf); } } if (buf.dptr) efree(buf.dptr); buf.dptr = NULL; return(buf); } /* }}} */ #endif /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(db) { le_db = zend_register_list_destructors_ex(php_dbm_close, NULL, "dbm", module_number); return SUCCESS; } /* }}} */ /* {{{ PHP_RINIT_FUNCTION */ PHP_RINIT_FUNCTION(db) { #if !GDBM && !NDBM CurrentFlatFilePos = 0L; #endif return SUCCESS; } /* }}} */ /* {{{ dbm_functions[] */ function_entry dbm_functions[] = { PHP_FE(dblist, NULL) PHP_FE(dbmopen, NULL) PHP_FE(dbmclose, NULL) PHP_FE(dbminsert, NULL) PHP_FE(dbmfetch, NULL) PHP_FE(dbmreplace, NULL) PHP_FE(dbmexists, NULL) PHP_FE(dbmdelete, NULL) PHP_FE(dbmfirstkey, NULL) PHP_FE(dbmnextkey, NULL) {NULL, NULL, NULL} }; /* }}} */ zend_module_entry dbm_module_entry = { STANDARD_MODULE_HEADER, "db", dbm_functions, PHP_MINIT(db), NULL, PHP_RINIT(db), NULL, PHP_MINFO(db), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_DB ZEND_GET_MODULE(dbm) #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/db/db.dsp0100644000175200000240000001160107352155154013431 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="db" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=db - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "db.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "db.mak" CFG="db - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "db - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "db - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "db - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DB" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "DB_EXPORTS" /D "COMPILE_DL_DB" /D ZTS=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_INET_ATON" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_db.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "db - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DB" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DB_EXPORTS" /D "COMPILE_DL_DB" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_INET_ATON" /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_db.dll" /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "db - Win32 Release_TS" # Name "db - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\db.c # End Source File # Begin Source File SOURCE=..\standard\flock_compat.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=..\standard\flock_compat.h # End Source File # Begin Source File SOURCE=.\php_db.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project php-4.2.3/ext/db/php_db.h0100644000175200000240000000522707532550330013743 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Jim Winstead | +----------------------------------------------------------------------+ */ /* $Id: php_db.h,v 1.16.2.1 2025/08/27 01:07:36 helly Exp $ */ #ifndef PHP_DB_H #define PHP_DB_H #ifndef DLEXPORT #define DLEXPORT #endif extern zend_module_entry dbm_module_entry; #define phpext_db_ptr &dbm_module_entry typedef struct dbm_info { char *filename; char *lockfn; int lockfd; void *dbf; } dbm_info; /* we're not going to bother with flatfile on win32 because the dbm module will be external, and we do not want flatfile compiled staticly */ #if defined(PHP_WIN32) && !defined(COMPILE_DL_DB) #undef phpext_db_ptr #define phpext_db_ptr NULL #endif dbm_info *php_find_dbm(pval *id TSRMLS_DC); void php_dbm_close(zend_rsrc_list_entry *rsrc TSRMLS_DC); dbm_info *php_dbm_open(char *filename, char *mode TSRMLS_DC); char *php_dbm_fetch(dbm_info *info, char *key TSRMLS_DC); int php_dbm_insert_replace(dbm_info *info, char *key, char *value, int insert_mode TSRMLS_DC); int php_dbm_exists(dbm_info *info, char *key); int php_dbm_delete(dbm_info *info, char *key); char *php_dbm_first_key(dbm_info *info); char *php_dbm_nextkey(dbm_info *info, char *key TSRMLS_DC); /* db file functions */ PHP_MINIT_FUNCTION(db); PHP_RINIT_FUNCTION(db); PHP_MINFO_FUNCTION(db); PHP_FUNCTION(dblist); PHP_FUNCTION(dbmopen); PHP_FUNCTION(dbmclose); PHP_FUNCTION(dbminsert); PHP_FUNCTION(dbmfetch); PHP_FUNCTION(dbmreplace); PHP_FUNCTION(dbmexists); PHP_FUNCTION(dbmdelete); PHP_FUNCTION(dbmfirstkey); PHP_FUNCTION(dbmnextkey); #endif /* PHP_DB_H */ php-4.2.3/ext/dba/0040755000175200000240000000000007535765574012521 5ustar zeevstaffphp-4.2.3/ext/dba/CREDITS0100644000175200000240000000002407206176563013517 0ustar zeevstaffDBA Sascha Schumann php-4.2.3/ext/dba/Makefile.in0100644000175200000240000000035507103446662014547 0ustar zeevstaff LTLIBRARY_NAME = libdba.la LTLIBRARY_SOURCES = dba.c dba_cdb.c dba_db2.c dba_dbm.c dba_gdbm.c \ dba_ndbm.c dba_db3.c LTLIBRARY_SHARED_NAME = dba.la LTLIBRARY_SHARED_LIBADD = $(DBA_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/dba/config.m40100644000175200000240000001307107457536227014221 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.16.2.1 2025/04/18 12:31:19 derick Exp $ dnl AC_DEFUN(PHP_TEMP_LDFLAGS,[ old_LDFLAGS=$LDFLAGS LDFLAGS="$1 $LDFLAGS" $2 LDFLAGS=$old_LDFLAGS ]) dnl Assign INCLUDE/LFLAGS from PREFIX AC_DEFUN(PHP_DBA_STD_ASSIGN,[ if test -n "$THIS_PREFIX" && test "$THIS_PREFIX" != "/usr"; then THIS_INCLUDE=$THIS_PREFIX/include THIS_LFLAGS=$THIS_PREFIX/lib fi ]) dnl Standard check AC_DEFUN(PHP_DBA_STD_CHECK,[ THIS_RESULT="yes" if test "$THIS_PREFIX" != "/usr" -a "$THIS_INCLUDE" = ""; then AC_MSG_ERROR(cannot find necessary header file(s)) fi if test "$THIS_LIBS" = "" ; then AC_MSG_ERROR(cannot find necessary library) fi ]) dnl Attach THIS_x to DBA_x AC_DEFUN(PHP_DBA_STD_ATTACH,[ PHP_ADD_INCLUDE($THIS_INCLUDE) PHP_ADD_LIBRARY_WITH_PATH($THIS_LIBS, $THIS_LFLAGS, DBA_SHARED_LIBADD) unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX ]) dnl Print the result message AC_DEFUN(AC_DBA_STD_RESULT,[ if test "$THIS_RESULT" = "yes"; then HAVE_DBA=1 AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi unset THIS_RESULT ]) PHP_ARG_ENABLE(dba,whether to enable DBA, [ --enable-dba=shared Build DBA as a shared module]) AC_ARG_WITH(gdbm, [ --with-gdbm[=DIR] Include GDBM support],[ if test "$withval" != "no"; then for i in /usr/local /usr $withval; do if test -f "$i/include/gdbm.h"; then THIS_PREFIX="$i" fi done unset ac_cv_lib_gdbm_gdbm_open PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[ AC_CHECK_LIB(gdbm, gdbm_open, [AC_DEFINE(DBA_GDBM, 1, [ ]) THIS_LIBS=gdbm]) ]) PHP_DBA_STD_ASSIGN PHP_DBA_STD_CHECK PHP_DBA_STD_ATTACH fi ]) AC_MSG_CHECKING(for GDBM support) AC_DBA_STD_RESULT AC_ARG_WITH(ndbm, [ --with-ndbm[=DIR] Include NDBM support],[ if test "$withval" != "no"; then for i in /usr/local /usr $withval; do if test -f "$i/include/db1/ndbm.h" ; then THIS_PREFIX=$i NDBM_EXTRA=db1/ndbm.h elif test -f "$i/include/ndbm.h" ; then THIS_PREFIX=$i NDBM_EXTRA=ndbm.h fi done if test "$NDBM_EXTRA" != ""; then AC_DEFINE_UNQUOTED(NDBM_INCLUDE_FILE, "$NDBM_EXTRA", [ ]) fi for LIB in db1 ndbm c; do PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[ AC_CHECK_LIB($LIB, dbm_open, [AC_DEFINE(DBA_NDBM,1, [ ]) THIS_LIBS=$LIB]) ]) done PHP_DBA_STD_ASSIGN PHP_DBA_STD_CHECK PHP_DBA_STD_ATTACH fi ]) AC_MSG_CHECKING(for NDBM support) AC_DBA_STD_RESULT AC_ARG_WITH(db2, [ --with-db2[=DIR] Include Berkeley DB2 support],[ if test "$withval" != "no"; then for i in /usr/local /usr /usr/BerkeleyDB $withval/BerkeleyDB $withval; do if test -f "$i/db2/db.h"; then THIS_PREFIX=$i DB2_EXTRA=db2 elif test -f "$i/include/db2/db.h"; then THIS_PREFIX=$i DB2_EXTRA=db2/db.h elif test -f "$i/include/db/db2.h"; then THIS_PREFIX=$i DB2_EXTRA=db/db2.h elif test -f "$i/include/db2.h"; then THIS_PREFIX=$i DB2_EXTRA=db2.h elif test -f "$i/include/db.h" ; then THIS_PREFIX=$i DB2_EXTRA=db.h fi done if test "$DB2_EXTRA" = "db2" ; then DBA_INCLUDE="$DBA_INCLUDE -I$THIS_PREFIX/db2" DB2_EXTRA=db.h fi if test -n "$DB2_EXTRA"; then AC_DEFINE_UNQUOTED(DB2_INCLUDE_FILE, "$DB2_EXTRA", [ ]) fi for LIB in db db2 c; do PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[ AC_CHECK_LIB($LIB, db_appinit, [AC_DEFINE(DBA_DB2,1,[ ]) THIS_LIBS=$LIB]) ]) done PHP_DBA_STD_ASSIGN PHP_DBA_STD_CHECK PHP_DBA_STD_ATTACH fi ]) AC_MSG_CHECKING(for Berkeley DB2 support) AC_DBA_STD_RESULT AC_ARG_WITH(db3, [ --with-db3[=DIR] Include Berkeley DB3 support],[ if test "$withval" != "no"; then for i in /usr/local /usr /usr/local/BerkeleyDB.3.0 $withval; do if test -f "$i/include/db.h" ; then THIS_PREFIX=$i DB3_EXTRA=db.h fi done if test -n "$DB3_EXTRA"; then AC_DEFINE_UNQUOTED(DB3_INCLUDE_FILE, "$DB3_EXTRA", [ ]) fi for LIB in db db-3 db3; do PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[ AC_CHECK_LIB($LIB, db_create, [AC_DEFINE(DBA_DB3,1,[ ]) THIS_LIBS=$LIB]) ]) done PHP_DBA_STD_ASSIGN PHP_DBA_STD_CHECK PHP_DBA_STD_ATTACH fi ]) AC_MSG_CHECKING(for Berkeley DB3 support) AC_DBA_STD_RESULT AC_ARG_WITH(dbm, [ --with-dbm[=DIR] Include DBM support],[ if test "$withval" != "no"; then for i in /usr/local /usr $withval; do if test -f "$i/include/dbm.h" ; then THIS_PREFIX=$i fi done for LIB in db1 dbm c; do PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[ AC_CHECK_LIB($LIB, dbminit, [AC_DEFINE(DBA_DBM,1,[ ]) THIS_LIBS=$LIB]) ]) done PHP_DBA_STD_ASSIGN PHP_DBA_STD_CHECK PHP_DBA_STD_ATTACH fi ]) AC_MSG_CHECKING(for DBM support) AC_DBA_STD_RESULT AC_ARG_WITH(cdb, [ --with-cdb[=DIR] Include CDB support],[ if test "$withval" != "no"; then for i in /usr/local /usr $withval; do if test -f "$i/include/cdb.h" ; then THIS_PREFIX=$i fi done for LIB in cdb c; do PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib,[ AC_CHECK_LIB($LIB, cdb_bread, [AC_DEFINE(DBA_CDB,1,[ ]) THIS_LIBS=$LIB]) ]) done PHP_DBA_STD_ASSIGN PHP_DBA_STD_CHECK PHP_DBA_STD_ATTACH fi ]) AC_MSG_CHECKING(for CDB support) AC_DBA_STD_RESULT AC_MSG_CHECKING(whether to enable DBA interface) if test "$HAVE_DBA" = "1"; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_DBA, 1, [ ]) PHP_EXTENSION(dba,$ext_shared) PHP_SUBST(DBA_SHARED_LIBADD) else AC_MSG_RESULT(no) fi php-4.2.3/ext/dba/dba.c0100644000175200000240000002706007437364625013406 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ /* $Id: dba.c,v 1.42 2025/02/28 08:25:57 sebastian Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if HAVE_DBA #include "php_dba.h" #include "ext/standard/info.h" #include "php_gdbm.h" #include "php_ndbm.h" #include "php_dbm.h" #include "php_cdb.h" #include "php_db2.h" #include "php_db3.h" /* {{{ dba_functions[] */ function_entry dba_functions[] = { PHP_FE(dba_open, NULL) PHP_FE(dba_popen, NULL) PHP_FE(dba_close, NULL) PHP_FE(dba_delete, NULL) PHP_FE(dba_exists, NULL) PHP_FE(dba_fetch, NULL) PHP_FE(dba_insert, NULL) PHP_FE(dba_replace, NULL) PHP_FE(dba_firstkey, NULL) PHP_FE(dba_nextkey, NULL) PHP_FE(dba_optimize, NULL) PHP_FE(dba_sync, NULL) {NULL, NULL, NULL} }; /* }}} */ static PHP_MINIT_FUNCTION(dba); static PHP_MSHUTDOWN_FUNCTION(dba); static PHP_MINFO_FUNCTION(dba); zend_module_entry dba_module_entry = { STANDARD_MODULE_HEADER, "dba", dba_functions, PHP_MINIT(dba), PHP_MSHUTDOWN(dba), NULL, NULL, PHP_MINFO(dba), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_DBA ZEND_GET_MODULE(dba) #endif typedef struct dba_handler { char *name; int (*open)(dba_info * TSRMLS_DC); void (*close)(dba_info *); char* (*fetch)(dba_info *, char *, int, int *); int (*update)(dba_info *, char *, int, char *, int, int); int (*exists)(dba_info *, char *, int); int (*delete)(dba_info *, char *, int); char* (*firstkey)(dba_info *, int *); char* (*nextkey)(dba_info *, int *); int (*optimize)(dba_info *); int (*sync)(dba_info *); } dba_handler; /* {{{ macromania */ #define DBA_ID_PARS \ pval **id; \ dba_info *info = NULL; \ int type, ac = ZEND_NUM_ARGS() /* these are used to get the standard arguments */ #define DBA_GET1 \ if(ac != 1 || zend_get_parameters_ex(ac, &id) != SUCCESS) { \ WRONG_PARAM_COUNT; \ } #define DBA_GET2 \ pval **key; \ if(ac != 2 || zend_get_parameters_ex(ac, &key, &id) != SUCCESS) { \ WRONG_PARAM_COUNT; \ } \ convert_to_string_ex(key) #define DBA_IF_NOT_CORRECT_TYPE(link_id) \ info = zend_list_find(link_id, &type); \ if(!info || (type != GLOBAL(le_db) && type != GLOBAL(le_pdb))) #define DBA_ID_GET \ convert_to_long_ex(id); \ DBA_IF_NOT_CORRECT_TYPE(Z_LVAL_PP(id)) { \ php_error(E_WARNING, "Unable to find DBA identifier %d", \ Z_LVAL_PP(id)); \ RETURN_FALSE; \ } #define DBA_ID_GET1 DBA_ID_PARS; DBA_GET1; DBA_ID_GET #define DBA_ID_GET2 DBA_ID_PARS; DBA_GET2; DBA_ID_GET /* a DBA handler must have specific routines */ #define DBA_HND(x) \ {\ #x, dba_open_##x, dba_close_##x, dba_fetch_##x, dba_update_##x, \ dba_exists_##x, dba_delete_##x, dba_firstkey_##x, dba_nextkey_##x, \ dba_optimize_##x, dba_sync_##x \ }, /* check whether the user has write access */ #define DBA_WRITE_CHECK \ if(info->mode != DBA_WRITER && info->mode != DBA_TRUNC && info->mode != DBA_CREAT) { \ php_error(E_WARNING, "you cannot perform a modification to a database without proper access"); \ RETURN_FALSE; \ } #define GLOBAL(a) a /* }}} */ /* {{{ globals */ static dba_handler handler[] = { #if DBA_GDBM DBA_HND(gdbm) #endif #if DBA_DBM DBA_HND(dbm) #endif #if DBA_NDBM DBA_HND(ndbm) #endif #if DBA_CDB DBA_HND(cdb) #endif #if DBA_DB2 DBA_HND(db2) #endif #if DBA_DB3 DBA_HND(db3) #endif { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; static int le_db; static int le_pdb; static HashTable ht_keys; /* }}} */ /* {{{ dba_close */ static void dba_close(dba_info *info) { if(info->hnd) info->hnd->close(info); if(info->path) free(info->path); free(info); } /* }}} */ /* {{{ dba_close_rsrc */ static void dba_close_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC) { dba_info *info = (dba_info *)rsrc->ptr; dba_close(info); } /* }}} */ /* {{{ PHP_MINIT_FUNCTION */ static PHP_MINIT_FUNCTION(dba) { zend_hash_init(&ht_keys, 0, NULL, NULL, 1); GLOBAL(le_db) = zend_register_list_destructors_ex(dba_close_rsrc, NULL, "dba", module_number); GLOBAL(le_pdb) = zend_register_list_destructors_ex(NULL, dba_close_rsrc, "dba persistent", module_number); return SUCCESS; } /* }}} */ /* {{{ PHP_MSHUTDOWN_FUNCTION */ static PHP_MSHUTDOWN_FUNCTION(dba) { zend_hash_destroy(&ht_keys); return SUCCESS; } /* }}} */ #include "ext/standard/php_smart_str.h" /* {{{ PHP_MINFO_FUNCTION */ static PHP_MINFO_FUNCTION(dba) { dba_handler *hptr; smart_str handlers = {0}; for(hptr = handler; hptr->name; hptr++) { smart_str_appends(&handlers, hptr->name); smart_str_appendc(&handlers, ' '); } php_info_print_table_start(); php_info_print_table_row(2, "DBA support", "enabled"); if (handlers.c) { smart_str_0(&handlers); php_info_print_table_row(2, "Supported handlers", handlers.c); smart_str_free(&handlers); } else { php_info_print_table_row(2, "Supported handlers", "none"); } php_info_print_table_end(); } /* }}} */ /* {{{ php_dba_update */ static void php_dba_update(INTERNAL_FUNCTION_PARAMETERS, int mode) { DBA_ID_PARS; pval **val, **key; if(ac != 3 || zend_get_parameters_ex(ac, &key, &val, &id) != SUCCESS) { WRONG_PARAM_COUNT; } convert_to_string_ex(key); convert_to_string_ex(val); DBA_ID_GET; DBA_WRITE_CHECK; if(info->hnd->update(info, VALLEN(key), VALLEN(val), mode) == SUCCESS) RETURN_TRUE; RETURN_FALSE; } /* }}} */ #define FREENOW if(args) efree(args); if(key) efree(key) /* {{{ php_dba_open */ static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent) { pval ***args = (pval ***) NULL; int ac = ZEND_NUM_ARGS(); dba_mode_t modenr; dba_info *info; dba_handler *hptr; char *key = NULL; int keylen = 0; int listid; int i; if(ac < 3) { WRONG_PARAM_COUNT; } /* we pass additional args to the respective handler */ args = emalloc(ac * sizeof(pval *)); if(zend_get_parameters_array_ex(ac, args) != SUCCESS) { FREENOW; WRONG_PARAM_COUNT; } /* we only take string arguments */ for(i = 0; i < ac; i++) { convert_to_string_ex(args[i]); keylen += Z_STRLEN_PP(args[i]); } if(persistent) { /* calculate hash */ key = emalloc(keylen); keylen = 0; for(i = 0; i < ac; i++) { memcpy(key+keylen, Z_STRVAL_PP(args[i]), Z_STRLEN_PP(args[i])); keylen += Z_STRLEN_PP(args[i]); } if(zend_hash_find(&ht_keys, key, keylen, (void **) &info) == SUCCESS) { FREENOW; RETURN_LONG(zend_list_insert(info, GLOBAL(le_pdb))); } } for(hptr = handler; hptr->name && strcasecmp(hptr->name, Z_STRVAL_PP(args[2])); hptr++); if(!hptr->name) { php_error(E_WARNING, "no such handler: %s", Z_STRVAL_PP(args[2])); FREENOW; RETURN_FALSE; } switch(Z_STRVAL_PP(args[1])[0]) { case 'c': modenr = DBA_CREAT; break; case 'w': modenr = DBA_WRITER; break; case 'r': modenr = DBA_READER; break; case 'n': modenr = DBA_TRUNC; break; default: php_error(E_WARNING, "illegal DBA mode: %s", Z_STRVAL_PP(args[1])); FREENOW; RETURN_FALSE; } info = malloc(sizeof(*info)); memset(info, 0, sizeof(info)); info->path = strdup(Z_STRVAL_PP(args[0])); info->mode = modenr; info->argc = ac - 3; info->argv = args + 3; info->hnd = NULL; if(hptr->open(info TSRMLS_CC) != SUCCESS) { dba_close(info); php_error(E_WARNING, "driver initialization failed"); FREENOW; RETURN_FALSE; } info->hnd = hptr; info->argc = 0; info->argv = NULL; listid = zend_list_insert(info, persistent?GLOBAL(le_pdb):GLOBAL(le_db)); if(persistent) { zend_hash_update(&ht_keys, key, keylen, info, sizeof(*info), NULL); } FREENOW; RETURN_LONG(listid); } /* }}} */ #undef FREENOW /* {{{ proto int dba_popen(string path, string mode, string handlername [, string ...]) Opens path using the specified handler in mode persistently */ PHP_FUNCTION(dba_popen) { php_dba_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ proto int dba_open(string path, string mode, string handlername [, string ...]) Opens path using the specified handler in mode*/ PHP_FUNCTION(dba_open) { php_dba_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto void dba_close(int handle) Closes database */ PHP_FUNCTION(dba_close) { DBA_ID_GET1; zend_list_delete(Z_LVAL_PP(id)); } /* }}} */ /* {{{ proto bool dba_exists(string key, int handle) Checks, if the specified key exists */ PHP_FUNCTION(dba_exists) { DBA_ID_GET2; if(info->hnd->exists(info, VALLEN(key)) == SUCCESS) { RETURN_TRUE; } RETURN_FALSE; } /* }}} */ /* {{{ proto string dba_fetch(string key, int handle) Fetches the data associated with key */ PHP_FUNCTION(dba_fetch) { char *val; int len = 0; DBA_ID_GET2; if((val = info->hnd->fetch(info, VALLEN(key), &len)) != NULL) { RETURN_STRINGL(val, len, 0); } RETURN_FALSE; } /* }}} */ /* {{{ proto string dba_firstkey(int handle) Resets the internal key pointer and returns the first key */ PHP_FUNCTION(dba_firstkey) { char *fkey; int len; DBA_ID_GET1; fkey = info->hnd->firstkey(info, &len); if(fkey) RETURN_STRINGL(fkey, len, 0); RETURN_FALSE; } /* }}} */ /* {{{ proto string dba_nextkey(int handle) Returns the next key */ PHP_FUNCTION(dba_nextkey) { char *nkey; int len; DBA_ID_GET1; nkey = info->hnd->nextkey(info, &len); if(nkey) RETURN_STRINGL(nkey, len, 0); RETURN_FALSE; } /* }}} */ /* {{{ proto bool dba_delete(string key, int handle) Deletes the entry associated with key */ PHP_FUNCTION(dba_delete) { DBA_ID_GET2; DBA_WRITE_CHECK; if(info->hnd->delete(info, VALLEN(key)) == SUCCESS) RETURN_TRUE; RETURN_FALSE; } /* }}} */ /* {{{ proto bool dba_insert(string key, string value, int handle) Inserts value as key, returns false, if key exists already */ PHP_FUNCTION(dba_insert) { php_dba_update(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ proto bool dba_replace(string key, string value, int handle) Inserts value as key, replaces key, if key exists already */ PHP_FUNCTION(dba_replace) { php_dba_update(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto bool dba_optimize(int handle) Optimizes (e.g. clean up, vacuum) database */ PHP_FUNCTION(dba_optimize) { DBA_ID_GET1; DBA_WRITE_CHECK; if(info->hnd->optimize(info) == SUCCESS) { RETURN_TRUE; } RETURN_FALSE; } /* }}} */ /* {{{ proto bool dba_sync(int handle) Synchronizes database */ PHP_FUNCTION(dba_sync) { DBA_ID_GET1; if(info->hnd->sync(info) == SUCCESS) { RETURN_TRUE; } RETURN_FALSE; } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dba/dba.dsp0100644000175200000240000001350607176076440013745 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="dba" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=dba - Win32 Debug_TS Berkeley DB3 !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "dba.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "dba.mak" CFG="dba - Win32 Debug_TS Berkeley DB3" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "dba - Win32 Release_TS Berkeley DB3" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "dba - Win32 Debug_TS Berkeley DB3" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "dba - Win32 Release_TS Berkeley DB3" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D DBA_DB3=1 /D DB3_INCLUDE_FILE="db.h" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D DBA_DB3=1 /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x407 /d "NDEBUG" # ADD RSC /l 0x407 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 php4ts.lib libdb31s.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dba.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # ADD LINK32 php4ts.lib libdb31s.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dba.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" !ELSEIF "$(CFG)" == "dba - Win32 Debug_TS Berkeley DB3" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D "DBA_DB3" /D DB3_INCLUDE_FILE="db.h" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D "DBA_DB3" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x407 /d "_DEBUG" # ADD RSC /l 0x407 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dba.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" # ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dba.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "dba - Win32 Release_TS Berkeley DB3" # Name "dba - Win32 Debug_TS Berkeley DB3" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\dba.c # End Source File # Begin Source File SOURCE=.\dba_cdb.c # End Source File # Begin Source File SOURCE=.\dba_db2.c # End Source File # Begin Source File SOURCE=.\dba_db3.c # End Source File # Begin Source File SOURCE=.\dba_dbm.c # End Source File # Begin Source File SOURCE=.\dba_gdbm.c # End Source File # Begin Source File SOURCE=.\dba_ndbm.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_cdb.h # End Source File # Begin Source File SOURCE=.\php_db2.h # End Source File # Begin Source File SOURCE=.\php_db3.h # End Source File # Begin Source File SOURCE=.\php_dba.h # End Source File # Begin Source File SOURCE=.\php_dbm.h # End Source File # Begin Source File SOURCE=.\php_gdbm.h # End Source File # Begin Source File SOURCE=.\php_ndbm.h # End Source File # End Group # End Target # End Project php-4.2.3/ext/dba/dba_cdb.c0100644000175200000240000001034107457536227014211 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ /* $Id: dba_cdb.c,v 1.12.2.1 2025/04/18 12:31:19 derick Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if DBA_CDB #include "php_cdb.h" #include #include #include #include #include #define CDB_INFO \ dba_cdb *cdb = (dba_cdb *) info->dbf typedef struct { int fd; uint32 eod; /* size of constant database */ uint32 pos; /* current position for traversing */ } dba_cdb; DBA_OPEN_FUNC(cdb) { int gmode = 0; dba_cdb *cdb; dba_info *pinfo = (dba_info *) info; switch(info->mode) { case DBA_READER: gmode = O_RDONLY; break; /* currently not supported: */ #if 0 case DBA_WRITER: gmode = O_RDWR; break; #endif default: return FAILURE; } cdb = malloc(sizeof *cdb); memset(cdb, 0, sizeof *cdb); cdb->fd = VCWD_OPEN(info->path, gmode); if(cdb->fd < 0) { free(cdb); return FAILURE; } pinfo->dbf = cdb; return SUCCESS; } DBA_CLOSE_FUNC(cdb) { CDB_INFO; close(cdb->fd); free(cdb); } DBA_FETCH_FUNC(cdb) { CDB_INFO; int len; char *new = NULL; if(cdb_seek(cdb->fd, key, keylen, &len) == 1) { new = emalloc(len); read(cdb->fd, new, len); if(newlen) *newlen = len; } return new; } DBA_UPDATE_FUNC(cdb) { /* if anyone figures out cdbmake.c, let me know */ return FAILURE; } DBA_EXISTS_FUNC(cdb) { CDB_INFO; int len; if(cdb_seek(cdb->fd, key, keylen, &len) == 1) return SUCCESS; return FAILURE; } DBA_DELETE_FUNC(cdb) { return FAILURE; } #define CREAD(n) if(read(cdb->fd, buf, n) < n) return NULL #define CSEEK(n) \ if(n >= cdb->eod) return NULL; \ if(lseek(cdb->fd, (off_t)n, SEEK_SET) != (off_t) n) return NULL DBA_FIRSTKEY_FUNC(cdb) { CDB_INFO; uint32 len; char buf[8]; char *key; cdb->eod = -1; CSEEK(0); CREAD(4); cdb->eod = cdb_unpack(buf); CSEEK(2048); CREAD(8); len = cdb_unpack(buf); key = emalloc(len + 1); if(read(cdb->fd, key, len) < len) { efree(key); key = NULL; } else key[len] = '\0'; /* header + klenlen + dlenlen + klen + dlen */ cdb->pos = 2048 + 4 + 4 + len + cdb_unpack(buf + 4); return key; } DBA_NEXTKEY_FUNC(cdb) { CDB_INFO; uint32 len; char buf[8]; char *nkey; CSEEK(cdb->pos); CREAD(8); len = cdb_unpack(buf); nkey = emalloc(len + 1); if(read(cdb->fd, nkey, len) < len) { efree(nkey); return NULL; } nkey[len] = '\0'; if(newlen) *newlen = len; cdb->pos += 8 + len + cdb_unpack(buf + 4); return nkey; #if 0 /* this code cdb_seeks and is thus slower than directly seeking in the file */ CDB_INFO; char *nkey = NULL; uint32 len; char buf[8]; if(cdb_seek(cdb->fd, key, keylen, &len) == 1) { if(lseek(cdb->fd, (off_t) len, SEEK_CUR) >= (off_t) cdb->eod) return NULL; CREAD(8); len = cdb_unpack(buf); nkey = emalloc(len + 1); if(read(cdb->fd, nkey, len) < len) { efree(nkey); nkey = NULL; } else nkey[len] = '\0'; } return nkey; #endif } DBA_OPTIMIZE_FUNC(cdb) { return SUCCESS; } DBA_SYNC_FUNC(cdb) { /* this is read-only */ return SUCCESS; } #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dba/dba_db2.c0100644000175200000240000001077507457536227014143 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ /* $Id: dba_db2.c,v 1.20.2.2 2025/04/18 12:31:19 derick Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if DBA_DB2 #include "php_db2.h" #include #include #ifdef DB2_INCLUDE_FILE #include DB2_INCLUDE_FILE #endif #define DB2_DATA dba_db2_data *dba = info->dbf #define DB2_GKEY \ DBT gkey; \ memset(&gkey, 0, sizeof(gkey)); \ gkey.data = (char *) key; gkey.size = keylen typedef struct { DB *dbp; DBC *cursor; } dba_db2_data; DBA_OPEN_FUNC(db2) { DB *dbp; DBTYPE type; int gmode = 0; int filemode = 0644; struct stat check_stat; int s = VCWD_STAT(info->path, &check_stat); type = info->mode == DBA_READER ? DB_UNKNOWN : info->mode == DBA_TRUNC ? DB_BTREE : s ? DB_BTREE : DB_UNKNOWN; gmode = info->mode == DBA_READER ? DB_RDONLY : (info->mode == DBA_CREAT && s) ? DB_CREATE : (info->mode == DBA_CREAT && !s) ? 0 : info->mode == DBA_WRITER ? 0 : info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1; if(gmode == -1) return FAILURE; if(info->argc > 0) { convert_to_long_ex(info->argv[0]); filemode = Z_LVAL_PP(info->argv[0]); } if(!db_open(info->path, type, gmode, filemode, NULL, NULL, &dbp)) { info->dbf = malloc(sizeof(dba_db2_data)); memset(info->dbf, 0, sizeof(dba_db2_data)); ((dba_db2_data *) info->dbf)->dbp = dbp; return SUCCESS; } return FAILURE; } DBA_CLOSE_FUNC(db2) { DB2_DATA; if(dba->cursor) dba->cursor->c_close(dba->cursor); dba->dbp->close(dba->dbp, 0); free(dba); } DBA_FETCH_FUNC(db2) { DBT gval; char *new = NULL; DB2_DATA; DB2_GKEY; memset(&gval, 0, sizeof(gval)); if(!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) { if(newlen) *newlen = gval.size; new = estrndup(gval.data, gval.size); } return new; } DBA_UPDATE_FUNC(db2) { DBT gval; DB2_DATA; DB2_GKEY; memset(&gval, 0, sizeof(gval)); gval.data = (char *) val; gval.size = vallen; if(!dba->dbp->put(dba->dbp, NULL, &gkey, &gval, mode == 1 ? DB_NOOVERWRITE : 0)) { return SUCCESS; } return FAILURE; } DBA_EXISTS_FUNC(db2) { DBT gval; DB2_DATA; DB2_GKEY; memset(&gval, 0, sizeof(gval)); if(!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) { return SUCCESS; } return FAILURE; } DBA_DELETE_FUNC(db2) { DB2_DATA; DB2_GKEY; return dba->dbp->del(dba->dbp, NULL, &gkey, 0) ? FAILURE : SUCCESS; } DBA_FIRSTKEY_FUNC(db2) { DB2_DATA; if(dba->cursor) { dba->cursor->c_close(dba->cursor); } dba->cursor = NULL; #if (DB_VERSION_MAJOR > 2) || (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR > 6) || (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 6 && DB_VERSION_PATCH >= 4) if(dba->dbp->cursor(dba->dbp, NULL, &dba->cursor, 0)) { #else if(dba->dbp->cursor(dba->dbp, NULL, &dba->cursor)) { #endif return NULL; } /* we should introduce something like PARAM_PASSTHRU... */ return dba_nextkey_db2(info, newlen); } DBA_NEXTKEY_FUNC(db2) { DB2_DATA; DBT gkey, gval; char *nkey = NULL; memset(&gkey, 0, sizeof(gkey)); memset(&gval, 0, sizeof(gval)); if(!dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT)) { if(gkey.data) { nkey = estrndup(gkey.data, gkey.size); if(newlen) *newlen = gkey.size; } } return nkey; } DBA_OPTIMIZE_FUNC(db2) { return SUCCESS; } DBA_SYNC_FUNC(db2) { DB2_DATA; return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS; } #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dba/dba_db3.c0100644000175200000240000001063207457536227014134 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ /* $Id: dba_db3.c,v 1.16.2.1 2025/04/18 12:31:19 derick Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if DBA_DB3 #include "php_db3.h" #include #include #ifdef DB3_INCLUDE_FILE #include DB3_INCLUDE_FILE #else #include #endif #define DB3_DATA dba_db3_data *dba = info->dbf #define DB3_GKEY \ DBT gkey; \ memset(&gkey, 0, sizeof(gkey)); \ gkey.data = (char *) key; gkey.size = keylen typedef struct { DB *dbp; DBC *cursor; } dba_db3_data; DBA_OPEN_FUNC(db3) { DB *dbp = NULL; DBTYPE type; int gmode = 0; int filemode = 0644; struct stat check_stat; int s = VCWD_STAT(info->path, &check_stat); type = info->mode == DBA_READER ? DB_UNKNOWN : info->mode == DBA_TRUNC ? DB_BTREE : s? DB_BTREE : DB_UNKNOWN; gmode = info->mode == DBA_READER ? DB_RDONLY : (info->mode == DBA_CREAT && s) ? DB_CREATE : (info->mode == DBA_CREAT && !s) ? 0 : info->mode == DBA_WRITER ? 0 : info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1; if (gmode == -1) return FAILURE; if (info->argc > 0) { convert_to_long_ex(info->argv[0]); filemode = Z_LVAL_PP(info->argv[0]); } if (db_create(&dbp, NULL, 0) == 0 && dbp->open(dbp, info->path, NULL, type, gmode, filemode) == 0) { dba_db3_data *data; data = malloc(sizeof(*data)); data->dbp = dbp; data->cursor = NULL; info->dbf = data; return SUCCESS; } else if (dbp != NULL) { dbp->close(dbp, 0); } return FAILURE; } DBA_CLOSE_FUNC(db3) { DB3_DATA; if (dba->cursor) dba->cursor->c_close(dba->cursor); dba->dbp->close(dba->dbp, 0); free(dba); } DBA_FETCH_FUNC(db3) { DBT gval; char *new = NULL; DB3_DATA; DB3_GKEY; memset(&gval, 0, sizeof(gval)); if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) { if (newlen) *newlen = gval.size; new = estrndup(gval.data, gval.size); } return new; } DBA_UPDATE_FUNC(db3) { DBT gval; DB3_DATA; DB3_GKEY; memset(&gval, 0, sizeof(gval)); gval.data = (char *) val; gval.size = vallen; if (!dba->dbp->put(dba->dbp, NULL, &gkey, &gval, mode == 1 ? DB_NOOVERWRITE : 0)) { return SUCCESS; } return FAILURE; } DBA_EXISTS_FUNC(db3) { DBT gval; DB3_DATA; DB3_GKEY; memset(&gval, 0, sizeof(gval)); if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) { return SUCCESS; } return FAILURE; } DBA_DELETE_FUNC(db3) { DB3_DATA; DB3_GKEY; return dba->dbp->del(dba->dbp, NULL, &gkey, 0) ? FAILURE : SUCCESS; } DBA_FIRSTKEY_FUNC(db3) { DB3_DATA; if (dba->cursor) { dba->cursor->c_close(dba->cursor); } dba->cursor = NULL; if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor, 0) != 0) { return NULL; } /* we should introduce something like PARAM_PASSTHRU... */ return dba_nextkey_db3(info, newlen); } DBA_NEXTKEY_FUNC(db3) { DB3_DATA; DBT gkey, gval; char *nkey = NULL; memset(&gkey, 0, sizeof(gkey)); memset(&gval, 0, sizeof(gval)); if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT) == 0) { if (gkey.data) { nkey = estrndup(gkey.data, gkey.size); if (newlen) *newlen = gkey.size; } } return nkey; } DBA_OPTIMIZE_FUNC(db3) { return SUCCESS; } DBA_SYNC_FUNC(db3) { DB3_DATA; return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS; } #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dba/dba_dbm.c0100644000175200000240000000731307457536227014230 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ /* $Id: dba_dbm.c,v 1.14.2.1 2025/04/18 12:31:19 derick Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if DBA_DBM #include "php_dbm.h" #include #include #include #include #include #define DBM_DATA dba_dbm_data *dba = info->dbf #define DBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen #define TRUNC_IT(extension, mode) \ snprintf(buf, MAXPATHLEN, "%s" extension, info->path); \ buf[MAXPATHLEN-1] = '\0'; \ if((fd = VCWD_OPEN_MODE(buf, O_CREAT | mode | O_WRONLY, filemode)) == -1) \ return FAILURE; \ close(fd); typedef struct { datum nextkey; } dba_dbm_data; DBA_OPEN_FUNC(dbm) { int fd; int filemode = 0644; if(info->argc > 0) { convert_to_long_ex(info->argv[0]); filemode = Z_LVAL_PP(info->argv[0]); } if(info->mode == DBA_TRUNC) { char buf[MAXPATHLEN]; /* dbm/ndbm original */ TRUNC_IT(".pag", O_TRUNC); TRUNC_IT(".dir", O_TRUNC); } if(info->mode == DBA_CREAT) { char buf[MAXPATHLEN]; TRUNC_IT(".pag", 0); TRUNC_IT(".dir", 0); } if(dbminit((char *) info->path) == -1) { return FAILURE; } info->dbf = calloc(sizeof(dba_dbm_data), 1); return SUCCESS; } DBA_CLOSE_FUNC(dbm) { free(info->dbf); dbmclose(); } DBA_FETCH_FUNC(dbm) { datum gval; char *new = NULL; DBM_GKEY; gval = fetch(gkey); if(gval.dptr) { if(newlen) *newlen = gval.dsize; new = estrndup(gval.dptr, gval.dsize); } return new; } DBA_UPDATE_FUNC(dbm) { datum gval; DBM_GKEY; gval.dptr = (char *) val; gval.dsize = vallen; return (store(gkey, gval) == -1 ? FAILURE : SUCCESS); } DBA_EXISTS_FUNC(dbm) { datum gval; DBM_GKEY; gval = fetch(gkey); if(gval.dptr) { return SUCCESS; } return FAILURE; } DBA_DELETE_FUNC(dbm) { DBM_GKEY; return(delete(gkey) == -1 ? FAILURE : SUCCESS); } DBA_FIRSTKEY_FUNC(dbm) { DBM_DATA; datum gkey; char *key = NULL; gkey = firstkey(); if(gkey.dptr) { if(newlen) *newlen = gkey.dsize; key = estrndup(gkey.dptr, gkey.dsize); dba->nextkey = gkey; } else dba->nextkey.dptr = NULL; return key; } DBA_NEXTKEY_FUNC(dbm) { DBM_DATA; datum gkey; char *nkey = NULL; if(!dba->nextkey.dptr) return NULL; gkey = nextkey(dba->nextkey); if(gkey.dptr) { if(newlen) *newlen = gkey.dsize; nkey = estrndup(gkey.dptr, gkey.dsize); dba->nextkey = gkey; } else dba->nextkey.dptr = NULL; return nkey; } DBA_OPTIMIZE_FUNC(dbm) { /* dummy */ return SUCCESS; } DBA_SYNC_FUNC(dbm) { return SUCCESS; } #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dba/dba_gdbm.c0100644000175200000240000000772007457536227014401 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ /* $Id: dba_gdbm.c,v 1.10.2.1 2025/04/18 12:31:19 derick Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if DBA_GDBM #include "php_gdbm.h" #include #define GDBM_DATA dba_gdbm_data *dba = info->dbf #define GDBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen typedef struct { GDBM_FILE dbf; datum nextkey; } dba_gdbm_data; DBA_OPEN_FUNC(gdbm) { GDBM_FILE dbf; int gmode = 0; int filemode = 0644; gmode = info->mode == DBA_READER ? GDBM_READER : info->mode == DBA_WRITER ? GDBM_WRITER : info->mode == DBA_CREAT ? GDBM_WRCREAT : info->mode == DBA_TRUNC ? GDBM_NEWDB : -1; if(gmode == -1) return FAILURE; if(info->argc > 0) { convert_to_long_ex(info->argv[0]); filemode = Z_LVAL_PP(info->argv[0]); } dbf = gdbm_open(info->path, 0, gmode, filemode, NULL); if(dbf) { info->dbf = malloc(sizeof(dba_gdbm_data)); memset(info->dbf, 0, sizeof(dba_gdbm_data)); ((dba_gdbm_data *) info->dbf)->dbf = dbf; return SUCCESS; } return FAILURE; } DBA_CLOSE_FUNC(gdbm) { GDBM_DATA; if(dba->nextkey.dptr) free(dba->nextkey.dptr); gdbm_close(dba->dbf); free(dba); } DBA_FETCH_FUNC(gdbm) { GDBM_DATA; datum gval; char *new = NULL; GDBM_GKEY; gval = gdbm_fetch(dba->dbf, gkey); if(gval.dptr) { if(newlen) *newlen = gval.dsize; new = estrndup(gval.dptr, gval.dsize); free(gval.dptr); } return new; } DBA_UPDATE_FUNC(gdbm) { datum gval; GDBM_DATA; GDBM_GKEY; gval.dptr = (char *) val; gval.dsize = vallen; if(gdbm_store(dba->dbf, gkey, gval, mode == 1 ? GDBM_INSERT : GDBM_REPLACE) == 0) return SUCCESS; printf("XXX %s\n", gdbm_strerror(gdbm_errno)); return FAILURE; } DBA_EXISTS_FUNC(gdbm) { GDBM_DATA; GDBM_GKEY; return gdbm_exists(dba->dbf, gkey) ? SUCCESS : FAILURE; } DBA_DELETE_FUNC(gdbm) { GDBM_DATA; GDBM_GKEY; return gdbm_delete(dba->dbf, gkey) == -1 ? FAILURE : SUCCESS; } DBA_FIRSTKEY_FUNC(gdbm) { GDBM_DATA; datum gkey; char *key = NULL; if(dba->nextkey.dptr) { free(dba->nextkey.dptr); } gkey = gdbm_firstkey(dba->dbf); if(gkey.dptr) { key = estrndup(gkey.dptr, gkey.dsize); if(newlen) *newlen = gkey.dsize; dba->nextkey = gkey; } else { dba->nextkey.dptr = NULL; } return key; } DBA_NEXTKEY_FUNC(gdbm) { GDBM_DATA; char *nkey = NULL; datum gkey; if(!dba->nextkey.dptr) return NULL; gkey = gdbm_nextkey(dba->dbf, dba->nextkey); free(dba->nextkey.dptr); if(gkey.dptr) { nkey = estrndup(gkey.dptr, gkey.dsize); if(newlen) *newlen = gkey.dsize; dba->nextkey = gkey; } else { dba->nextkey.dptr = NULL; } return nkey; } DBA_OPTIMIZE_FUNC(gdbm) { GDBM_DATA; gdbm_reorganize(dba->dbf); return SUCCESS; } DBA_SYNC_FUNC(gdbm) { GDBM_DATA; gdbm_sync(dba->dbf); return SUCCESS; } #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dba/dba_ndbm.c0100644000175200000240000000656007457536227014411 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ /* $Id: dba_ndbm.c,v 1.11.2.1 2025/04/18 12:31:19 derick Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if DBA_NDBM #include "php_ndbm.h" #include #ifdef NDBM_INCLUDE_FILE #include NDBM_INCLUDE_FILE #endif #define NDBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen DBA_OPEN_FUNC(ndbm) { DBM *dbf; int gmode = 0; int filemode = 0644; dba_info *pinfo = (dba_info *) info; switch(info->mode) { case DBA_READER: gmode = O_RDONLY; break; case DBA_WRITER: gmode = O_RDWR; break; case DBA_CREAT: gmode = O_RDWR | O_CREAT; break; case DBA_TRUNC: gmode = O_RDWR | O_CREAT | O_TRUNC; break; default: return FAILURE; } if(info->argc > 0) { convert_to_long_ex(info->argv[0]); filemode = Z_LVAL_PP(info->argv[0]); } dbf = dbm_open(info->path, gmode, filemode); if(dbf) { pinfo->dbf = dbf; return SUCCESS; } return FAILURE; } DBA_CLOSE_FUNC(ndbm) { dbm_close(info->dbf); } DBA_FETCH_FUNC(ndbm) { datum gval; char *new = NULL; NDBM_GKEY; gval = dbm_fetch(info->dbf, gkey); if(gval.dptr) { if(newlen) *newlen = gval.dsize; new = estrndup(gval.dptr, gval.dsize); } return new; } DBA_UPDATE_FUNC(ndbm) { datum gval; NDBM_GKEY; gval.dptr = (char *) val; gval.dsize = vallen; if(!dbm_store(info->dbf, gkey, gval, mode == 1 ? DBM_INSERT : DBM_REPLACE)) return SUCCESS; return FAILURE; } DBA_EXISTS_FUNC(ndbm) { datum gval; NDBM_GKEY; gval = dbm_fetch(info->dbf, gkey); if(gval.dptr) { return SUCCESS; } return FAILURE; } DBA_DELETE_FUNC(ndbm) { NDBM_GKEY; return(dbm_delete(info->dbf, gkey) == -1 ? FAILURE : SUCCESS); } DBA_FIRSTKEY_FUNC(ndbm) { datum gkey; char *key = NULL; gkey = dbm_firstkey(info->dbf); if(gkey.dptr) { if(newlen) *newlen = gkey.dsize; key = estrndup(gkey.dptr, gkey.dsize); } return key; } DBA_NEXTKEY_FUNC(ndbm) { datum gkey; char *nkey = NULL; gkey = dbm_nextkey(info->dbf); if(gkey.dptr) { if(newlen) *newlen = gkey.dsize; nkey = estrndup(gkey.dptr, gkey.dsize); } return nkey; } DBA_OPTIMIZE_FUNC(ndbm) { return SUCCESS; } DBA_SYNC_FUNC(ndbm) { return SUCCESS; } #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dba/php_cdb.h0100644000175200000240000000015007127752140014240 0ustar zeevstaff#ifndef PHP_CDB_H #define PHP_CDB_H #if DBA_CDB #include "php_dba.h" DBA_FUNCS(cdb); #endif #endif php-4.2.3/ext/dba/php_db2.h0100644000175200000240000000015007127752140014157 0ustar zeevstaff#ifndef PHP_DB2_H #define PHP_DB2_H #if DBA_DB2 #include "php_dba.h" DBA_FUNCS(db2); #endif #endif php-4.2.3/ext/dba/php_db3.h0100644000175200000240000000015007127752140014160 0ustar zeevstaff#ifndef PHP_DB3_H #define PHP_DB3_H #if DBA_DB3 #include "php_dba.h" DBA_FUNCS(db3); #endif #endif php-4.2.3/ext/dba/php_dba.h0100644000175200000240000000635507437364630014262 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ /* $Id: php_dba.h,v 1.11 2025/02/28 08:26:00 sebastian Exp $ */ #ifndef PHP_DBA_H #define PHP_DBA_H #if HAVE_DBA typedef enum { DBA_READER = 1, DBA_WRITER, DBA_TRUNC, DBA_CREAT } dba_mode_t; typedef struct dba_info { /* public */ void *dbf; /* ptr to private data or whatever */ char *path; dba_mode_t mode; /* arg[cv] are only available when the dba_open handler is called! */ int argc; pval ***argv; /* private */ struct dba_handler *hnd; } dba_info; extern zend_module_entry dba_module_entry; #define dba_module_ptr &dba_module_entry /* common prototypes which must be supplied by modules */ #define DBA_OPEN_FUNC(x) \ int dba_open_##x(dba_info *info TSRMLS_DC) #define DBA_CLOSE_FUNC(x) \ void dba_close_##x(dba_info *info) #define DBA_FETCH_FUNC(x) \ char *dba_fetch_##x(dba_info *info, char *key, int keylen, int *newlen) #define DBA_UPDATE_FUNC(x) \ int dba_update_##x(dba_info *info, char *key, int keylen, char *val, int vallen, int mode) #define DBA_EXISTS_FUNC(x) \ int dba_exists_##x(dba_info *info, char *key, int keylen) #define DBA_DELETE_FUNC(x) \ int dba_delete_##x(dba_info *info, char *key, int keylen) #define DBA_FIRSTKEY_FUNC(x) \ char *dba_firstkey_##x(dba_info *info, int *newlen) #define DBA_NEXTKEY_FUNC(x) \ char *dba_nextkey_##x(dba_info *info, int *newlen) #define DBA_OPTIMIZE_FUNC(x) \ int dba_optimize_##x(dba_info *info) #define DBA_SYNC_FUNC(x) \ int dba_sync_##x(dba_info *info) #define DBA_FUNCS(x) \ DBA_OPEN_FUNC(x); \ DBA_CLOSE_FUNC(x); \ DBA_FETCH_FUNC(x); \ DBA_UPDATE_FUNC(x); \ DBA_DELETE_FUNC(x); \ DBA_EXISTS_FUNC(x); \ DBA_FIRSTKEY_FUNC(x); \ DBA_NEXTKEY_FUNC(x); \ DBA_OPTIMIZE_FUNC(x); \ DBA_SYNC_FUNC(x) #define VALLEN(p) Z_STRVAL_PP(p), Z_STRLEN_PP(p) PHP_FUNCTION(dba_open); PHP_FUNCTION(dba_popen); PHP_FUNCTION(dba_close); PHP_FUNCTION(dba_firstkey); PHP_FUNCTION(dba_nextkey); PHP_FUNCTION(dba_replace); PHP_FUNCTION(dba_insert); PHP_FUNCTION(dba_delete); PHP_FUNCTION(dba_exists); PHP_FUNCTION(dba_fetch); PHP_FUNCTION(dba_optimize); PHP_FUNCTION(dba_sync); #else #define dba_module_ptr NULL #endif #define phpext_dba_ptr dba_module_ptr #endif php-4.2.3/ext/dba/php_dbm.h0100644000175200000240000000015007127752140014252 0ustar zeevstaff#ifndef PHP_DBM_H #define PHP_DBM_H #if DBA_DBM #include "php_dba.h" DBA_FUNCS(dbm); #endif #endif php-4.2.3/ext/dba/php_gdbm.h0100644000175200000240000000015407127752140014425 0ustar zeevstaff#ifndef PHP_GDBM_H #define PHP_GDBM_H #if DBA_GDBM #include "php_dba.h" DBA_FUNCS(gdbm); #endif #endif php-4.2.3/ext/dba/php_ndbm.h0100644000175200000240000000015407127752140014434 0ustar zeevstaff#ifndef PHP_NDBM_H #define PHP_NDBM_H #if DBA_NDBM #include "php_dba.h" DBA_FUNCS(ndbm); #endif #endif php-4.2.3/ext/dba/setup.stub0100644000175200000240000000032006745361540014533 0ustar zeevstaff# $Source: /repository/php4/ext/dba/Attic/setup.stub,v $ # $Id: setup.stub,v 1.1 2025/07/21 15:12:32 sas Exp $ define_option with-dba 'dba support?' yesnodir no \ ' Whether to build the dba extension.' php-4.2.3/ext/dbase/0040755000175200000240000000000007535765574013051 5ustar zeevstaffphp-4.2.3/ext/dbase/CREDITS0100644000175200000240000000002307206176564014047 0ustar zeevstaffdBase Jim Winstead php-4.2.3/ext/dbase/Makefile.in0100644000175200000240000000025707103455141015070 0ustar zeevstaff LTLIBRARY_NAME = libdbase.la LTLIBRARY_SOURCES = dbf_head.c dbf_rec.c dbf_misc.c dbf_ndx.c dbase.c LTLIBRARY_SHARED_NAME = dbase.la include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/dbase/config.m40100644000175200000240000000051207401753423014531 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.6 2025/11/30 18:59:31 sniper Exp $ dnl AC_ARG_WITH(dbase,[],[enable_dbase=$withval]) PHP_ARG_ENABLE(dbase,whether to enable dbase support, [ --enable-dbase Enable the bundled dbase library]) if test "$PHP_DBASE" = "yes"; then AC_DEFINE(DBASE,1,[ ]) PHP_EXTENSION(dbase, $ext_shared) fi php-4.2.3/ext/dbase/dbase.c0100644000175200000240000005367407441010444014256 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jim Winstead | +----------------------------------------------------------------------+ */ /* $Id: dbase.c,v 1.58 2025/03/05 00:28:20 fmk Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "safe_mode.h" #include "fopen_wrappers.h" #include "php_globals.h" #include #ifdef HAVE_SYS_TYPES_H #include #endif #if DBASE #include "php_dbase.h" #include "dbf.h" #if defined(THREAD_SAFE) DWORD DbaseTls; static int numthreads=0; void *dbase_mutex; typedef struct dbase_global_struct{ int le_dbhead; }dbase_global_struct; #define DBase_GLOBAL(a) dbase_globals->a #define DBase_TLS_VARS \ dbase_global_struct *dbase_globals; \ dbase_globals=TlsGetValue(DbaseTls); #else static int le_dbhead; #define DBase_GLOBAL(a) a #define DBase_TLS_VARS #endif #include #include static void _close_dbase(zend_rsrc_list_entry *rsrc TSRMLS_DC) { dbhead_t *dbhead = (dbhead_t *)rsrc->ptr; close(dbhead->db_fd); free_dbf_head(dbhead); } PHP_MINIT_FUNCTION(dbase) { #if defined(THREAD_SAFE) dbase_global_struct *dbase_globals; #ifdef COMPILE_DL_DBASE CREATE_MUTEX(dbase_mutex, "DBase_TLS"); SET_MUTEX(dbase_mutex); numthreads++; if (numthreads==1){ if ((DbaseTls=TlsAlloc())==0xFFFFFFFF){ FREE_MUTEX(dbase_mutex); return 0; }} FREE_MUTEX(dbase_mutex); #endif dbase_globals = (dbase_global_struct *) LocalAlloc(LPTR, sizeof(dbase_global_struct)); TlsSetValue(DbaseTls, (void *) dbase_globals); #endif DBase_GLOBAL(le_dbhead) = zend_register_list_destructors_ex(_close_dbase, NULL, "dbase", module_number); return SUCCESS; } static PHP_MSHUTDOWN_FUNCTION(dbase) { #if defined(THREAD_SAFE) dbase_global_struct *dbase_globals; dbase_globals = TlsGetValue(DbaseTls); if (dbase_globals != 0) LocalFree((HLOCAL) dbase_globals); #ifdef COMPILE_DL_DBASE SET_MUTEX(dbase_mutex); numthreads--; if (!numthreads){ if (!TlsFree(DbaseTls)){ FREE_MUTEX(dbase_mutex); return 0; }} FREE_MUTEX(dbase_mutex); #endif #endif return SUCCESS; } /* {{{ proto int dbase_open(string name, int mode) Opens a dBase-format database file */ PHP_FUNCTION(dbase_open) { pval *dbf_name, *options; dbhead_t *dbh; int handle; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &dbf_name, &options)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_string(dbf_name); convert_to_long(options); if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_P(dbf_name), NULL, CHECKUID_CHECK_FILE_AND_DIR))) { RETURN_FALSE; } if (php_check_open_basedir(Z_STRVAL_P(dbf_name) TSRMLS_CC)) { RETURN_FALSE; } dbh = dbf_open(Z_STRVAL_P(dbf_name), Z_LVAL_P(options) TSRMLS_CC); if (dbh == NULL) { php_error(E_WARNING, "unable to open database %s", Z_STRVAL_P(dbf_name)); RETURN_FALSE; } handle = zend_list_insert(dbh, DBase_GLOBAL(le_dbhead)); RETURN_LONG(handle); } /* }}} */ /* {{{ proto bool dbase_close(int identifier) Closes an open dBase-format database file */ PHP_FUNCTION(dbase_close) { pval *dbh_id; dbhead_t *dbh; int dbh_type; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dbh_id)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(dbh_id); dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type); if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id)); RETURN_FALSE; } zend_list_delete(Z_LVAL_P(dbh_id)); RETURN_TRUE; } /* }}} */ /* {{{ proto int dbase_numrecords(int identifier) Returns the number of records in the database */ PHP_FUNCTION(dbase_numrecords) { pval *dbh_id; dbhead_t *dbh; int dbh_type; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dbh_id)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(dbh_id); dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type); if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id)); RETURN_FALSE; } RETURN_LONG(dbh->db_records); } /* }}} */ /* {{{ proto int dbase_numfields(int identifier) Returns the number of fields (columns) in the database */ PHP_FUNCTION(dbase_numfields) { pval *dbh_id; dbhead_t *dbh; int dbh_type; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dbh_id)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(dbh_id); dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type); if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id)); RETURN_FALSE; } RETURN_LONG(dbh->db_nfields); } /* }}} */ /* {{{ proto bool dbase_pack(int identifier) Packs the database (deletes records marked for deletion) */ PHP_FUNCTION(dbase_pack) { pval *dbh_id; dbhead_t *dbh; int dbh_type; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dbh_id)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(dbh_id); dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type); if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id)); RETURN_FALSE; } pack_dbf(dbh); put_dbf_info(dbh); RETURN_TRUE; } /* }}} */ /* {{{ proto bool dbase_add_record(int identifier, array data) Adds a record to the database */ PHP_FUNCTION(dbase_add_record) { pval *dbh_id, *fields, **field; dbhead_t *dbh; int dbh_type; int num_fields; dbfield_t *dbf, *cur_f; char *cp, *t_cp; int i; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &dbh_id, &fields)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(dbh_id); if (Z_TYPE_P(fields) != IS_ARRAY) { php_error(E_WARNING, "Expected array as second parameter"); RETURN_FALSE; } dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type); if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id)); RETURN_FALSE; } num_fields = zend_hash_num_elements(Z_ARRVAL_P(fields)); if (num_fields != dbh->db_nfields) { php_error(E_WARNING, "Wrong number of fields specified"); RETURN_FALSE; } cp = t_cp = (char *)emalloc(dbh->db_rlen + 1); if (!cp) { php_error(E_WARNING, "unable to allocate memory"); RETURN_FALSE; } *t_cp++ = VALID_RECORD; dbf = dbh->db_fields; for (i = 0, cur_f = dbf; cur_f < &dbf[num_fields]; i++, cur_f++) { zval tmp; if (zend_hash_index_find(Z_ARRVAL_P(fields), i, (void **)&field) == FAILURE) { php_error(E_WARNING, "unexpected error"); efree(cp); RETURN_FALSE; } tmp = **field; zval_copy_ctor(&tmp); convert_to_string(&tmp); sprintf(t_cp, cur_f->db_format, Z_STRVAL(tmp)); zval_dtor(&tmp); t_cp += cur_f->db_flen; } dbh->db_records++; if (put_dbf_record(dbh, dbh->db_records, cp) < 0) { php_error(E_WARNING, "unable to put record at %ld", dbh->db_records); efree(cp); RETURN_FALSE; } put_dbf_info(dbh); efree(cp); RETURN_TRUE; } /* }}} */ /* {{{ proto bool dbase_replace_record(int identifier, array data, int recnum) Replaces a record to the database */ PHP_FUNCTION(dbase_replace_record) { pval *dbh_id, *fields, **field, *recnum; dbhead_t *dbh; int dbh_type; int num_fields; dbfield_t *dbf, *cur_f; char *cp, *t_cp; int i; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 3 || getParameters(ht, 3, &dbh_id, &fields, &recnum)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(dbh_id); convert_to_long(recnum); if (Z_TYPE_P(fields) != IS_ARRAY) { php_error(E_WARNING, "Expected array as second parameter"); RETURN_FALSE; } dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type); if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id)); RETURN_FALSE; } num_fields = zend_hash_num_elements(Z_ARRVAL_P(fields)); if (num_fields != dbh->db_nfields) { php_error(E_WARNING, "Wrong number of fields specified"); RETURN_FALSE; } cp = t_cp = (char *)emalloc(dbh->db_rlen + 1); if (!cp) { php_error(E_WARNING, "unable to allocate memory"); RETURN_FALSE; } *t_cp++ = VALID_RECORD; dbf = dbh->db_fields; for (i = 0, cur_f = dbf; cur_f < &dbf[num_fields]; i++, cur_f++) { if (zend_hash_index_find(Z_ARRVAL_P(fields), i, (void **)&field) == FAILURE) { php_error(E_WARNING, "unexpected error"); efree(cp); RETURN_FALSE; } convert_to_string_ex(field); sprintf(t_cp, cur_f->db_format, Z_STRVAL_PP(field)); t_cp += cur_f->db_flen; } if (put_dbf_record(dbh, Z_LVAL_P(recnum), cp) < 0) { php_error(E_WARNING, "unable to put record at %ld", dbh->db_records); efree(cp); RETURN_FALSE; } put_dbf_info(dbh); efree(cp); RETURN_TRUE; } /* }}} */ /* {{{ proto bool dbase_delete_record(int identifier, int record) Marks a record to be deleted */ PHP_FUNCTION(dbase_delete_record) { pval *dbh_id, *record; dbhead_t *dbh; int dbh_type; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &dbh_id, &record)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(dbh_id); convert_to_long(record); dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type); if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id)); RETURN_FALSE; } if (del_dbf_record(dbh, Z_LVAL_P(record)) < 0) { if (Z_LVAL_P(record) > dbh->db_records) { php_error(E_WARNING, "record %d out of bounds", Z_LVAL_P(record)); } else { php_error(E_WARNING, "unable to delete record %d", Z_LVAL_P(record)); } RETURN_FALSE; } put_dbf_info(dbh); RETURN_TRUE; } /* }}} */ /* {{{ proto array dbase_get_record(int identifier, int record) Returns an array representing a record from the database */ PHP_FUNCTION(dbase_get_record) { pval *dbh_id, *record; dbhead_t *dbh; int dbh_type; dbfield_t *dbf, *cur_f; char *data, *fnp, *str_value; size_t cursize = 0; long overflow_test; int errno_save; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &dbh_id, &record)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(dbh_id); convert_to_long(record); dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type); if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id)); RETURN_FALSE; } if ((data = get_dbf_record(dbh, Z_LVAL_P(record))) == NULL) { php_error(E_WARNING, "Tried to read bad record %d", Z_LVAL_P(record)); RETURN_FALSE; } dbf = dbh->db_fields; if (array_init(return_value) == FAILURE) { RETURN_FALSE; } fnp = NULL; for (cur_f = dbf; cur_f < &dbf[dbh->db_nfields]; cur_f++) { /* get the value */ str_value = (char *)emalloc(cur_f->db_flen + 1); if(cursize <= (unsigned)cur_f->db_flen) { cursize = cur_f->db_flen + 1; fnp = erealloc(fnp, cursize); } snprintf(str_value, cursize, cur_f->db_format, get_field_val(data, cur_f, fnp)); /* now convert it to the right php internal type */ switch (cur_f->db_type) { case 'C': case 'D': add_next_index_string(return_value, str_value, 1); break; case 'I': /* FALLS THROUGH */ case 'N': if (cur_f->db_fdc == 0) { /* Large integers in dbase can be larger than long */ errno_save = errno; overflow_test = strtol(str_value, NULL, 10); if (errno == ERANGE) { /* If the integer is too large, keep it as string */ add_next_index_string(return_value, str_value, 1); } else { add_next_index_long(return_value, overflow_test); } errno = errno_save; } else { add_next_index_double(return_value, atof(str_value)); } break; case 'L': /* we used to FALL THROUGH, but now we check for T/Y and F/N and insert 1 or 0, respectively. db_fdc is the number of decimals, which we don't care about. 3/14/2001 LEW */ if ((*str_value == 'T') || (*str_value == 'Y')) { add_next_index_long(return_value, strtol("1", NULL, 10)); } else { if ((*str_value == 'F') || (*str_value == 'N')) { add_next_index_long(return_value, strtol("0", NULL, 10)); } else { add_next_index_long(return_value, strtol(" ", NULL, 10)); } } break; case 'M': /* this is a memo field. don't know how to deal with this yet */ break; default: /* should deal with this in some way */ break; } efree(str_value); } efree(fnp); /* mark whether this record was deleted */ if (data[0] == '*') { add_assoc_long(return_value, "deleted", 1); } else { add_assoc_long(return_value, "deleted", 0); } free(data); } /* }}} */ /* From Martin Kuba */ /* {{{ proto array dbase_get_record_with_names(int identifier, int record) Returns an associative array representing a record from the database */ PHP_FUNCTION(dbase_get_record_with_names) { pval *dbh_id, *record; dbhead_t *dbh; int dbh_type; dbfield_t *dbf, *cur_f; char *data, *fnp, *str_value; long overflow_test; int errno_save; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &dbh_id, &record)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(dbh_id); convert_to_long(record); dbh = zend_list_find(Z_LVAL_P(dbh_id), &dbh_type); if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { php_error(E_WARNING, "Unable to find database for identifier %d", Z_LVAL_P(dbh_id)); RETURN_FALSE; } if ((data = get_dbf_record(dbh, Z_LVAL_P(record))) == NULL) { php_error(E_WARNING, "Tried to read bad record %d", Z_LVAL_P(record)); RETURN_FALSE; } dbf = dbh->db_fields; if (array_init(return_value) == FAILURE) { RETURN_FALSE; } fnp = (char *)emalloc(dbh->db_rlen); for (cur_f = dbf; cur_f < &dbf[dbh->db_nfields]; cur_f++) { /* get the value */ str_value = (char *)emalloc(cur_f->db_flen + 1); sprintf(str_value, cur_f->db_format, get_field_val(data, cur_f, fnp)); /* now convert it to the right php internal type */ switch (cur_f->db_type) { case 'C': case 'D': add_assoc_string(return_value, cur_f->db_fname, str_value, 1); break; case 'I': /* FALLS THROUGH */ case 'N': if (cur_f->db_fdc == 0) { /* Large integers in dbase can be larger than long */ errno_save = errno; overflow_test = strtol(str_value, NULL, 10); if (errno == ERANGE) { /* If the integer is too large, keep it as string */ add_assoc_string(return_value, cur_f->db_fname, str_value, 1); } else { add_assoc_long(return_value, cur_f->db_fname, overflow_test); } errno = errno_save; } else { add_assoc_double(return_value, cur_f->db_fname, atof(str_value)); } break; case 'L': /* we used to FALL THROUGH, but now we check for T/Y and F/N and insert 1 or 0, respectively. db_fdc is the number of decimals, which we don't care about. 3/14/2001 LEW */ if ((*str_value == 'T') || (*str_value == 'Y')) { add_assoc_long(return_value, cur_f->db_fname,strtol("1", NULL, 10)); } else { if ((*str_value == 'F') || (*str_value == 'N')) { add_assoc_long(return_value, cur_f->db_fname,strtol("0", NULL, 10)); } else { add_assoc_long(return_value, cur_f->db_fname,strtol(" ", NULL, 10)); } } break; case 'M': /* this is a memo field. don't know how to deal with this yet */ break; default: /* should deal with this in some way */ break; } efree(str_value); } efree(fnp); /* mark whether this record was deleted */ if (data[0] == '*') { add_assoc_long(return_value, "deleted", 1); } else { add_assoc_long(return_value, "deleted", 0); } free(data); } /* }}} */ /* {{{ proto bool dbase_create(string filename, array fields) Creates a new dBase-format database file */ PHP_FUNCTION(dbase_create) { pval *filename, *fields, **field, **value; int fd; dbhead_t *dbh; int num_fields; dbfield_t *dbf, *cur_f; int i, rlen, handle; DBase_TLS_VARS; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &filename, &fields)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_string(filename); if (Z_TYPE_P(fields) != IS_ARRAY) { php_error(E_WARNING, "Expected array as second parameter"); RETURN_FALSE; } if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_P(filename), NULL, CHECKUID_CHECK_FILE_AND_DIR))) { RETURN_FALSE; } if (php_check_open_basedir(Z_STRVAL_P(filename) TSRMLS_CC)) { RETURN_FALSE; } if ((fd = VCWD_OPEN_MODE(Z_STRVAL_P(filename), O_BINARY|O_RDWR|O_CREAT, 0644)) < 0) { php_error(E_WARNING, "Unable to create database (%d): %s", errno, strerror(errno)); RETURN_FALSE; } num_fields = zend_hash_num_elements(Z_ARRVAL_P(fields)); /* have to use regular malloc() because this gets free()d by code in the dbase library */ dbh = (dbhead_t *)malloc(sizeof(dbhead_t)); dbf = (dbfield_t *)malloc(sizeof(dbfield_t) * num_fields); if (!dbh || !dbf) { php_error(E_WARNING, "Unable to allocate memory for header info"); RETURN_FALSE; } /* initialize the header structure */ dbh->db_fields = dbf; dbh->db_fd = fd; dbh->db_dbt = DBH_TYPE_NORMAL; strcpy(dbh->db_date, "19930818"); dbh->db_records = 0; dbh->db_nfields = num_fields; dbh->db_hlen = sizeof(struct dbf_dhead) + 1 + num_fields * sizeof(struct dbf_dfield); rlen = 1; /** * Patch by greg@darkphoton.com **/ /* make sure that the db_format entries for all fields are set to NULL to ensure we don't seg fault if there's an error and we need to call free_dbf_head() before all fields have been defined. */ for (i = 0, cur_f = dbf; i < num_fields; i++, cur_f++) { cur_f->db_format = NULL; } /** * end patch */ for (i = 0, cur_f = dbf; i < num_fields; i++, cur_f++) { /* look up the first field */ if (zend_hash_index_find(Z_ARRVAL_P(fields), i, (void **)&field) == FAILURE) { php_error(E_WARNING, "unable to find field %d", i); free_dbf_head(dbh); RETURN_FALSE; } if (Z_TYPE_PP (field) != IS_ARRAY) { php_error(E_WARNING, "second parameter must be array of arrays"); free_dbf_head(dbh); RETURN_FALSE; } /* field name */ if (zend_hash_index_find(Z_ARRVAL_PP(field), 0, (void **)&value) == FAILURE) { php_error(E_WARNING, "expected field name as first element of list in field %d", i); free_dbf_head(dbh); RETURN_FALSE; } convert_to_string_ex(value); if (Z_STRLEN_PP(value) > 10 || Z_STRLEN_PP(value) == 0) { php_error(E_WARNING, "invalid field name '%s' (must be non-empty and less than or equal to 10 characters)", Z_STRVAL_PP(value)); free_dbf_head(dbh); RETURN_FALSE; } copy_crimp(cur_f->db_fname, Z_STRVAL_PP(value), Z_STRLEN_PP(value)); /* field type */ if (zend_hash_index_find(Z_ARRVAL_PP (field), 1, (void **)&value) == FAILURE) { php_error(E_WARNING, "expected field type as sececond element of list in field %d", i); RETURN_FALSE; } convert_to_string_ex(value); cur_f->db_type = toupper(*Z_STRVAL_PP(value)); cur_f->db_fdc = 0; /* verify the field length */ switch (cur_f->db_type) { case 'L': cur_f->db_flen = 1; break; case 'M': cur_f->db_flen = 10; dbh->db_dbt = DBH_TYPE_MEMO; /* should create the memo file here, probably */ break; case 'D': cur_f->db_flen = 8; break; case 'N': case 'C': /* field length */ if (zend_hash_index_find(Z_ARRVAL_PP (field), 2, (void **)&value) == FAILURE) { php_error(E_WARNING, "expected field length as third element of list in field %d", i); free_dbf_head(dbh); RETURN_FALSE; } convert_to_long_ex(value); cur_f->db_flen = Z_LVAL_PP(value); if (cur_f->db_type == 'N') { if (zend_hash_index_find(Z_ARRVAL_PP (field), 3, (void **)&value) == FAILURE) { php_error(E_WARNING, "expected field precision as fourth element of list in field %d", i); free_dbf_head(dbh); RETURN_FALSE; } convert_to_long_ex(value); cur_f->db_fdc = Z_LVAL_PP(value); } break; default: php_error(E_WARNING, "unknown field type '%c'", cur_f->db_type); } cur_f->db_foffset = rlen; rlen += cur_f->db_flen; cur_f->db_format = get_dbf_f_fmt(cur_f); } dbh->db_rlen = rlen; put_dbf_info(dbh); handle = zend_list_insert(dbh, DBase_GLOBAL(le_dbhead)); RETURN_LONG(handle); } /* }}} */ /* {{{ dbase_functions[] */ function_entry dbase_functions[] = { PHP_FE(dbase_open, NULL) PHP_FE(dbase_create, NULL) PHP_FE(dbase_close, NULL) PHP_FE(dbase_numrecords, NULL) PHP_FE(dbase_numfields, NULL) PHP_FE(dbase_add_record, NULL) PHP_FE(dbase_replace_record, NULL) PHP_FE(dbase_get_record, NULL) PHP_FE(dbase_get_record_with_names, NULL) PHP_FE(dbase_delete_record, NULL) PHP_FE(dbase_pack, NULL) {NULL, NULL, NULL} }; /* }}} */ zend_module_entry dbase_module_entry = { STANDARD_MODULE_HEADER, "dbase", dbase_functions, PHP_MINIT(dbase), PHP_MSHUTDOWN(dbase), NULL, NULL, NULL, NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_DBASE ZEND_GET_MODULE(dbase) #if (WIN32|WINNT) && defined(THREAD_SAFE) /*NOTE: You should have an odbc.def file where you export DllMain*/ BOOL WINAPI DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return 1; } #endif #endif #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dbase/dbase.dsp0100644000175200000240000001274107352155162014620 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="dbase" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=dbase - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "dbase.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "dbase.mak" CFG="dbase - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "dbase - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "dbase - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "dbase - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DBASE" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "DBASE_EXPORTS" /D "COMPILE_DL_DBASE" /D ZTS=1 /D HAVE_DBASE=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D DBASE=1 /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dbase.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "dbase - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DBASE" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DBASE_EXPORTS" /D "COMPILE_DL_DBASE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBASE=1 /D DBASE=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_dbase.dll" /libpath:"..\..\Debug_TS" # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "dbase - Win32 Release_TS" # Name "dbase - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\dbase.c # End Source File # Begin Source File SOURCE=.\dbf_head.c # End Source File # Begin Source File SOURCE=.\dbf_misc.c # End Source File # Begin Source File SOURCE=.\dbf_ndx.c # End Source File # Begin Source File SOURCE=.\dbf_rec.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\dbf.h # End Source File # Begin Source File SOURCE=.\dbf_head.h # End Source File # Begin Source File SOURCE=.\dbf_misc.h # End Source File # Begin Source File SOURCE=.\dbf_ndx.h # End Source File # Begin Source File SOURCE=.\dbf_rec.h # End Source File # Begin Source File SOURCE=.\php_dbase.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project php-4.2.3/ext/dbase/dbf.h0100644000175200000240000000431007127752140013726 0ustar zeevstaff/* * Copyright (c) 1991, 1992, 1993 Brad Eacker, * (Music, Intuition, Software, and Computers) * All Rights Reserved */ /* * dbf header structure on disk (pc dbase III) * * Basic info taken from: * "File Formats for Popular PC Software" * Jeff Walden * (c) 1986 John Wiley & Sons, Inc. */ #ifndef DBF_H_ #define DBF_H_ #include #include #ifdef WIN32 #include #else #include #endif /* So we can use O_BINARY on non-Win32 systems. */ #if !defined(O_BINARY) && !defined(WIN32) #define O_BINARY (0) #endif struct dbf_dhead { char dbh_dbt; /* memo (dbt) file present */ char dbh_date[3]; /* last update YY, MM, DD */ char dbh_records[4]; /* number of records LE */ char dbh_hlen[2]; /* header length LE */ char dbh_rlen[2]; /* record length LE */ char dbh_res[20]; /* padding */ }; #define DBH_DATE_YEAR 0 /* byte offset for year in dbh_date */ #define DBH_DATE_MONTH 1 #define DBH_DATE_DAY 2 /* * field description on disk */ #define DBF_NAMELEN 11 struct dbf_dfield { char dbf_name[DBF_NAMELEN]; /* name of field */ char dbf_type; /* type of field */ char dbf_fda[4]; /* something for dbase III */ char dbf_flen[2]; /* field length [and decimal if N] */ char dbf_res[14]; /* padding */ }; struct db_field { char db_fname[DBF_NAMELEN+1]; /* 0 terminated */ char db_type; /* type of field */ int db_flen; /* length of field */ int db_fdc; /* number of decimals in field */ char *db_format; /* format for printing %s etc */ int db_foffset; /* offset within record */ }; typedef struct db_field dbfield_t; struct db_head { int db_fd; unsigned char db_dbt; /* dbt present */ char db_date[9]; /* date of last update in db format */ long db_records; /* number of records */ int db_hlen; /* header length */ int db_rlen; /* record length */ int db_nfields; /* number of fields */ dbfield_t *db_fields; /* field info */ char *db_name; /* name of dbf file */ int db_cur_rec; /* current record */ }; typedef struct db_head dbhead_t; #define DBH_TYPE_NORMAL 0x03 #define DBH_TYPE_MEMO 0x83 #define VALID_RECORD ' ' #define DELETED_RECORD '*' #include "dbf_head.h" #include "dbf_misc.h" #include "dbf_rec.h" #endif /* DBF_H_ */ php-4.2.3/ext/dbase/dbf_head.c0100644000175200000240000001400107360420032014667 0ustar zeevstaff/* * Copyright (c) 1991, 1992, 1993 Brad Eacker, * (Music, Intuition, Software, and Computers) * All Rights Reserved */ #include #include #include "php.h" #include "dbf.h" void free_dbf_head(dbhead_t *dbh); int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf); /* * get the header info from the file * basic header info & field descriptions */ dbhead_t *get_dbf_head(int fd) { dbhead_t *dbh; struct dbf_dhead dbhead; dbfield_t *dbf, *cur_f, *tdbf; int ret, nfields, offset, gf_retval; if ((dbh = (dbhead_t *)malloc(sizeof(dbhead_t))) == NULL) return NULL; if (lseek(fd, 0, 0) < 0) return NULL; if ((ret = read(fd, &dbhead, sizeof(dbhead))) < 0) return NULL; /* build in core info */ dbh->db_fd = fd; dbh->db_dbt = dbhead.dbh_dbt; dbh->db_records = get_long(dbhead.dbh_records); dbh->db_hlen = get_short(dbhead.dbh_hlen); dbh->db_rlen = get_short(dbhead.dbh_rlen); db_set_date(dbh->db_date, dbhead.dbh_date[DBH_DATE_YEAR] + 1900, dbhead.dbh_date[DBH_DATE_MONTH], dbhead.dbh_date[DBH_DATE_DAY]); /* malloc enough memory for the maximum number of fields: 32 * 254 = 8128 bytes */ tdbf = (dbfield_t *)malloc(sizeof(dbfield_t)*254); offset = 1; nfields = 0; gf_retval = 0; for (cur_f = tdbf; gf_retval < 2 && nfields < 254; cur_f++) { gf_retval = get_dbf_field(dbh, cur_f); if (gf_retval < 0) { free_dbf_head(dbh); return NULL; } if (gf_retval != 2 ) { cur_f->db_foffset = offset; offset += cur_f->db_flen; nfields++; } } dbh->db_nfields = nfields; /* malloc the right amount of space for records, copy and destroy old */ dbf = (dbfield_t *)malloc(sizeof(dbfield_t)*nfields); memcpy(dbf, tdbf, sizeof(dbfield_t)*nfields); free(tdbf); dbh->db_fields = dbf; return dbh; } /* * free up the header info built above */ void free_dbf_head(dbhead_t *dbh) { dbfield_t *dbf, *cur_f; int nfields; dbf = dbh->db_fields; nfields = dbh->db_nfields; for (cur_f = dbf; cur_f < &dbf[nfields]; cur_f++) { if (cur_f->db_format) { free(cur_f->db_format); } } free(dbf); free(dbh); } /* * put out the header info */ int put_dbf_head(dbhead_t *dbh) { int fd = dbh->db_fd; struct dbf_dhead dbhead; int ret; memset (&dbhead, 0, sizeof(dbhead)); /* build on disk info */ dbhead.dbh_dbt = dbh->db_dbt; put_long(dbhead.dbh_records, dbh->db_records); put_short(dbhead.dbh_hlen, dbh->db_hlen); put_short(dbhead.dbh_rlen, dbh->db_rlen); /* put the date spec'd into the on disk header */ dbhead.dbh_date[DBH_DATE_YEAR] =(char)(db_date_year(dbh->db_date) - 1900); dbhead.dbh_date[DBH_DATE_MONTH]=(char)(db_date_month(dbh->db_date)); dbhead.dbh_date[DBH_DATE_DAY] =(char)(db_date_day(dbh->db_date)); if (lseek(fd, 0, 0) < 0) return -1; if ((ret = write(fd, &dbhead, sizeof(dbhead))) < 0) return -1; return ret; } /* * get a field off the disk from the current file offset */ int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf) { struct dbf_dfield dbfield; int ret; if ((ret = read(dbh->db_fd, &dbfield, sizeof(dbfield))) < 0) { return ret; } /* Check for the '0Dh' field terminator , if found return '2' which will tell the loop we are at the end of fields */ if (dbfield.dbf_name[0]==0x0d) { return 2; } /* build the field name */ copy_crimp(dbf->db_fname, dbfield.dbf_name, DBF_NAMELEN); dbf->db_type = dbfield.dbf_type; switch (dbf->db_type) { case 'N': dbf->db_flen = dbfield.dbf_flen[0]; dbf->db_fdc = dbfield.dbf_flen[1]; break; default: dbf->db_flen = get_short(dbfield.dbf_flen); break; } if ((dbf->db_format = get_dbf_f_fmt(dbf)) == NULL) { return 1; } return 0; } /* * put a field out on the disk at the current file offset */ int put_dbf_field(dbhead_t *dbh, dbfield_t *dbf) { struct dbf_dfield dbfield; char *scp, *dcp; int ret; memset (&dbfield, 0, sizeof(dbfield)); /* build the on disk field info */ scp = dbf->db_fname; dcp = dbfield.dbf_name; strncpy(dbfield.dbf_name, dbf->db_fname, DBF_NAMELEN); dbfield.dbf_type = dbf->db_type; switch (dbf->db_type) { case 'N': dbfield.dbf_flen[0] = dbf->db_flen; dbfield.dbf_flen[1] = dbf->db_fdc; break; default: put_short(dbfield.dbf_flen, dbf->db_flen); } /* now write it out to disk */ if ((ret = write(dbh->db_fd, &dbfield, sizeof(dbfield))) < 0) { return ret; } return 1; } /* * put out all the info at the top of the file... */ static char end_stuff[2] = {0x0d, 0}; void put_dbf_info(dbhead_t *dbh) { dbfield_t *dbf; char *cp; int fcnt; if ((cp = db_cur_date(NULL))) { strncpy(dbh->db_date, cp, 8); free(cp); } put_dbf_head(dbh); dbf = dbh->db_fields; for (fcnt = dbh->db_nfields; fcnt > 0; fcnt--, dbf++) put_dbf_field(dbh, dbf); write(dbh->db_fd, end_stuff, 1); } char *get_dbf_f_fmt(dbfield_t *dbf) { char format[100]; /* build the field format for printf */ switch (dbf->db_type) { case 'C': sprintf(format, "%%-%ds", dbf->db_flen); break; case 'N': case 'L': case 'D': sprintf(format, "%%%ds", dbf->db_flen); break; case 'M': strcpy(format, "%s"); break; } return (char *)strdup(format); } dbhead_t *dbf_open(char *dp, int o_flags TSRMLS_DC) { int fd; char *cp; dbhead_t *dbh; cp = dp; if ((fd = VCWD_OPEN(cp, o_flags|O_BINARY)) < 0) { cp = (char *)malloc(256); strcpy(cp, dp); strcat(cp, ".dbf"); if ((fd = VCWD_OPEN(cp, o_flags)) < 0) { perror("open"); return NULL; } } if ((dbh = get_dbf_head(fd)) == 0) { fprintf(stderr, "Unable to get header\n"); return NULL; } dbh->db_name = cp; dbh->db_cur_rec = 0; return dbh; } void dbf_head_info(dbhead_t *dbh) { int nfields; dbfield_t *dbf, *cur_f; nfields = dbh->db_nfields; printf("# fields: %d, record len: %d, total records %ld\n", nfields, dbh->db_rlen, dbh->db_records); dbf = dbh->db_fields; for (cur_f = dbf; cur_f < &dbf[nfields] ; cur_f++) { printf("# %s, %c, %d, %d\n", cur_f->db_fname, cur_f->db_type, cur_f->db_flen, cur_f->db_fdc); } } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dbase/dbf_head.h0100644000175200000240000000064307333506417014717 0ustar zeevstaff#include "php.h" extern dbhead_t *get_dbf_head(int fd); void free_dbf_head(dbhead_t *dbh); extern int put_dbf_head(dbhead_t *dbh); extern int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf); extern int put_dbf_field(dbhead_t *dbh, dbfield_t *dbf); void put_dbf_info(dbhead_t *dbh); extern char *get_dbf_f_fmt(dbfield_t *dbf); extern dbhead_t *dbf_open(char *dp, int o_flags TSRMLS_DC); void dbf_head_info(dbhead_t *dbh); php-4.2.3/ext/dbase/dbf_misc.c0100644000175200000240000000540507346667216014756 0ustar zeevstaff/* * Copyright (c) 1991, 1992, 1993 Brad Eacker, * (Music, Intuition, Software, and Computers) * All Rights Reserved */ #include #include #include #include "dbf_misc.h" #include "php_reentrancy.h" /* * routine to change little endian long to host long */ long get_long(char *cp) { int ret; unsigned char *source = (unsigned char *)cp; ret = *source++; ret += ((*source++)<<8); ret += ((*source++)<<16); ret += ((*source++)<<24); return ret; } void put_long(char *cp, long lval) { *cp++ = lval & 0xff; *cp++ = (lval >> 8) & 0xff; *cp++ = (lval >> 16) & 0xff; *cp++ = (lval >> 24) & 0xff; } /* * routine to change little endian short to host short */ int get_short(char *cp) { int ret; unsigned char *source = (unsigned char *)cp; ret = *source++; ret += ((*source++)<<8); return ret; } void put_short(char *cp, int sval) { *cp++ = sval & 0xff; *cp++ = (sval >> 8) & 0xff; } double get_double(char *cp) { double ret; unsigned char *dp = (unsigned char *)&ret; dp[7] = *cp++; dp[6] = *cp++; dp[5] = *cp++; dp[4] = *cp++; dp[3] = *cp++; dp[2] = *cp++; dp[1] = *cp++; dp[0] = *cp++; return ret; } void put_double(char *cp, double fval) { unsigned char *dp = (unsigned char *)&fval; cp[7] = *dp++; cp[6] = *dp++; cp[5] = *dp++; cp[4] = *dp++; cp[3] = *dp++; cp[2] = *dp++; cp[1] = *dp++; cp[0] = *dp++; } void copy_fill(char *dp, char *sp, int len) { while (*sp && len > 0) { *dp++ = *sp++; len--; } while (len-- > 0) *dp++ = ' '; } void copy_crimp(char *dp, char *sp, int len) { while (len-- > 0) { *dp++ = *sp++; } *dp = 0; for (dp-- ; *dp == ' '; dp--) { *dp = 0; } } void db_set_date(char *cp, int year, int month, int day) { if (month > 12) month = 0; if (day > 31) day = 0; sprintf(cp, "%d", year); cp[4] = month / 10 + '0'; cp[5] = month % 10 + '0'; cp[6] = day / 10 + '0'; cp[7] = day % 10 + '0'; cp[8] = 0; } int db_date_year(char *cp) { int year, i; for (year = 0, i = 0; i < 4; i++) year = year * 10 + (cp[i] - '0'); return year; } int db_date_month(char *cp) { int month, i; for (month = 0, i = 4; i < 6; i++) month = month * 10 + (cp[i] - '0'); return month; } int db_date_day(char *cp) { int day, i; for (day = 0, i = 6; i < 8; i++) day = day * 10 + (cp[i] - '0'); return day; } #include char *db_cur_date(char *cp) { struct tm *ctm, tmbuf; time_t c_time; c_time = time((time_t *)NULL); ctm = php_localtime_r(&c_time, &tmbuf); if (cp == NULL) cp = (char *)malloc(9); if (ctm == NULL || cp == NULL) return NULL; db_set_date(cp, ctm->tm_year + 1900, ctm->tm_mon + 1, ctm->tm_mday); return cp; } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dbase/dbf_misc.h0100644000175200000240000000076606721227773014764 0ustar zeevstaffvoid put_long(char *cp, long lval); extern long get_long(char *cp); extern int get_short(char *cp); void put_short(char *cp, int sval); void put_double(char *cp, double fval); extern double get_double(char *cp); void copy_fill(char *dp, char *sp, int len); void copy_crimp(char *dp, char *sp, int len); void db_set_date(char *cp, int year, int month, int day); extern int db_date_year(char *cp); extern int db_date_month(char *cp); extern int db_date_day(char *cp); extern char *db_cur_date(char *cp); php-4.2.3/ext/dbase/dbf_ndx.c0100644000175200000240000001026107346667216014610 0ustar zeevstaff/* * Copyright (c) 1991, 1992, 1993 Brad Eacker, * (Music, Intuition, Software, and Computers) * All Rights Reserved */ #include #include #include "dbf.h" #include "dbf_ndx.h" /* * get the ndx header for this file */ ndx_header_t *ndx_get_header(int fd) { dndx_header_t *dp; ndx_header_t *np; if ((dp = (dndx_header_t *)malloc(NDX_PAGE_SZ)) == NULL) return NULL; if ((np = (ndx_header_t *)malloc(sizeof(ndx_header_t))) == NULL) { free(dp); return NULL; } if ((lseek(fd, 0, 0) < 0) || (read(fd, dp, NDX_PAGE_SZ) < 0)) { free(dp); free(np); return NULL; } np->ndx_hpage = dp; np->ndx_fd = fd; np->ndx_start_pg = get_long(dp->dndx_st_pg); np->ndx_total_pgs = get_long(dp->dndx_tot_pg); np->ndx_key_len = get_short(dp->dndx_key_len); np->ndx_keys_ppg = get_short(dp->dndx_keys_ppg); np->ndx_key_type = get_short(dp->dndx_key_type); np->ndx_key_size = get_long(dp->dndx_size_key); np->ndx_key_name = dp->dndx_key_name; np->ndx_unique = dp->dndx_unique; np->ndx_fp = NULL; return np; } static ndx_page_t *ndx_get_page(ndx_header_t *hp, int pageno) { ndx_page_t *fp; dndx_page_t *dp; ndx_record_t *rp; #if PHP_DEBUG printf("getting page %d", pageno); #endif if ((fp = (ndx_page_t *)malloc(sizeof(ndx_page_t))) == NULL) return NULL; if ((dp = (dndx_page_t *)malloc(NDX_PAGE_SZ)) == NULL) { free(fp); return NULL; } if ((rp = (ndx_record_t *)malloc(sizeof(ndx_record_t) * hp->ndx_keys_ppg)) == NULL) { free(dp); free(fp); return NULL; } fp->ndxp_page_data = dp; if ((lseek(hp->ndx_fd, pageno * NDX_PAGE_SZ, 0) < 0) || (read(hp->ndx_fd, dp, NDX_PAGE_SZ) < 0)) { free(fp); free(dp); return NULL; } fp->ndxp_parent = NULL; fp->ndxp_page_no = pageno; fp->ndxp_num_keys = get_long(dp->dndxp_num_keys); memset(rp, 0, sizeof(ndx_record_t) * hp->ndx_keys_ppg); fp->ndxp_records = rp; fp->ndxp_header_p = hp; #if PHP_DEBUG printf(", n_keys %ld\n", fp->ndxp_num_keys); #endif return fp; } /* * get the first entry for this ndx */ static ndx_page_t *ndx_get_first_pg(ndx_header_t *hp) { ndx_page_t *fp; if (hp->ndx_fp) return hp->ndx_fp; if ((fp = ndx_get_page(hp, hp->ndx_start_pg))) { hp->ndx_fp = fp; } return fp; } static ndx_record_t *ndx_get_record(ndx_page_t *fp, int rec_no) { ndx_record_t *rp; ndx_header_t *hp = fp->ndxp_header_p; struct dndx_record *drp; #if PHP_DEBUG printf("page %ld, rec %d: ", fp->ndxp_page_no, rec_no); #endif if (rec_no >= fp->ndxp_num_keys) return NULL; rp = &(fp->ndxp_records[rec_no]); if (!rp->ndxr_page) { rp->ndxr_page = fp; drp = (dndx_record_t *)((char *)&fp->ndxp_page_data->dndx_rp + rec_no * hp->ndx_key_size); rp->ndxr_left = get_long(drp->dndx_left_pg); rp->ndxr_rec = get_long(drp->dndx_dbf_rec); rp->ndxr_key_data = &drp->dndx_key_data; rp->ndxr_p_nrec = rec_no; } #if PHP_DEBUG printf("left %ld, dbf_rec %ld, data '%s'\n", rp->ndxr_left, rp->ndxr_rec, rp->ndxr_key_data); #endif return rp; } static ndx_record_t *ndx_scan_down(ndx_header_t *hp, ndx_page_t *fp, int recno) { ndx_page_t *np; ndx_record_t *rp; while ((rp = ndx_get_record(fp, recno)) && (rp->ndxr_rec == 0)) { np = ndx_get_page(hp, rp->ndxr_left); np->ndxp_parent = fp; np->ndxp_par_rno = recno; fp = np; recno = 0; } return rp; } static ndx_record_t *ndx_scan_up(ndx_header_t *hp, ndx_page_t *fp, int recno) { ndx_record_t *rp; if (fp == NULL) rp = NULL; else if (recno < fp->ndxp_num_keys) { rp = ndx_scan_down(hp, fp, recno); } else { rp = ndx_scan_up(hp, fp->ndxp_parent, fp->ndxp_par_rno + 1); } return rp; } ndx_record_t *ndx_get_first_rec(ndx_header_t *hp) { ndx_page_t *fp; ndx_record_t *rp = NULL; if ((fp = ndx_get_first_pg(hp))) { fp->ndxp_last_key = 0; rp = ndx_scan_down(hp, fp, 0); } hp->ndx_cur_rec = rp; return rp; } ndx_record_t *ndx_get_next_rec(ndx_header_t *hp, ndx_record_t *rp) { ndx_page_t *fp; int rec_no; fp = rp->ndxr_page; rec_no = rp->ndxr_p_nrec + 1; if (rec_no < fp->ndxp_num_keys) { rp = ndx_scan_down(hp, fp, rec_no); } else { rp = ndx_scan_up(hp, fp->ndxp_parent, fp->ndxp_par_rno + 1); } return rp; } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dbase/dbf_ndx.h0100644000175200000240000000477307127752140014614 0ustar zeevstaff/* * Copyright (c) 1993 Brad Eacker, * (Music, Intuition, Software, and Computers) * All Rights Reserved */ /* * dbf .ndx header structure on disk and in memory * * Basic info taken from: * "Clipper Programming Guide, 3rd Edition, Version 5.01" * by Rick Spence */ #ifndef DBF_NDX_H_ #define DBF_NDX_H_ #include "dbf.h" #define NDX_PAGE_SZ 512 /* on disk ndx header */ struct dndx_header { char dndx_st_pg[4]; /* starting page number */ char dndx_tot_pg[4]; /* total number of pages */ char dndx_filler1[4]; /* space */ char dndx_key_len[2]; /* key length */ char dndx_keys_ppg[2]; /* number of keys per page */ char dndx_key_type[2]; /* key type */ char dndx_size_key[4]; /* size of the key record */ char dndx_filler2; /* space */ char dndx_unique; /* whether or not done with unique */ char dndx_key_name[488]; /* string defining the key */ }; typedef struct dndx_header dndx_header_t; /* in memory ndx header */ struct ndx_header { long ndx_start_pg; long ndx_total_pgs; unsigned short ndx_key_len; unsigned short ndx_keys_ppg; unsigned short ndx_key_type; char ndx_unique; long ndx_key_size; char *ndx_key_name; int ndx_fd; struct ndx_page *ndx_fp; dndx_header_t *ndx_hpage; struct ndx_record *ndx_cur_rec; }; typedef struct ndx_header ndx_header_t; /* these are the possible values in the key type field */ #define NDX_CHAR_TYPE 00 #define NDX_NUM_TYPE 01 /* on disk key record */ struct dndx_record { char dndx_left_pg[4]; /* number of left page */ char dndx_dbf_rec[4]; /* dbf record number */ char dndx_key_data; /* key data */ }; typedef struct dndx_record dndx_record_t; struct ndx_record { long ndxr_left; long ndxr_rec; char *ndxr_key_data; struct ndx_page *ndxr_page; /* page pointer to where we are from*/ int ndxr_p_nrec; /* number of the record within page */ }; typedef struct ndx_record ndx_record_t; struct dndx_page { char dndxp_num_keys[4]; /* number of keys on this page */ struct dndx_record dndx_rp; }; typedef struct dndx_page dndx_page_t; struct ndx_page { long ndxp_page_no; long ndxp_num_keys; dndx_page_t *ndxp_page_data; ndx_header_t *ndxp_header_p; long ndxp_last_key; struct ndx_page *ndxp_parent; /* parent page */ int ndxp_par_rno; /* record number within parent */ struct ndx_record *ndxp_records; }; typedef struct ndx_page ndx_page_t; extern ndx_header_t *ndx_get_header(int); extern ndx_record_t *ndx_get_first_rec(ndx_header_t *); extern ndx_record_t *ndx_get_next_rec(ndx_header_t *, ndx_record_t *); #endif /* DBF_NDX_H_ */ php-4.2.3/ext/dbase/dbf_rec.c0100644000175200000240000000772507441010427014561 0ustar zeevstaff/* * Copyright (c) 1993 Brad Eacker, * (Music, Intuition, Software, and Computers) * All Rights Reserved */ #ifdef PHP_WIN32 #include "ext/standard/flock_compat.h" #endif #include #include #include "dbf.h" int get_piece(dbhead_t *dbh, long offset, char *cp, int len); int put_piece(dbhead_t *dbh, long offset, char *cp, int len); /* * get a record off the database */ char *get_dbf_record(dbhead_t *dbh, long rec_num) { long offset; char *cp; if (rec_num > dbh->db_records) { return NULL; } if ((cp = (char *)malloc(dbh->db_rlen)) == NULL) { return NULL; } /* go to the correct spot on the file */ offset = dbh->db_hlen + (rec_num - 1) * dbh->db_rlen; if (get_piece(dbh, offset, cp, dbh->db_rlen) != dbh->db_rlen) { free(cp); cp = NULL; } if (cp) dbh->db_cur_rec = rec_num; return cp; } int get_piece(dbhead_t *dbh, long offset, char *cp, int len) { /* go to the correct spot on the file */ if ( lseek(dbh->db_fd, offset, 0) < 0 ) { return -1; } /* read the record into the allocated space */ return read(dbh->db_fd, cp, len); } /* * put a record to the database */ long put_dbf_record(dbhead_t *dbh, long rec_num, char *cp) { long offset; if (rec_num == 0) { rec_num = dbh->db_records; } if (rec_num > dbh->db_records) { return 0L; } /* go to the correct spot on the file */ offset = dbh->db_hlen + (rec_num - 1) * dbh->db_rlen; if (put_piece(dbh, offset, cp, dbh->db_rlen) != dbh->db_rlen) { rec_num = -1; } return rec_num; } int put_piece(dbhead_t *dbh, long offset, char *cp, int len) { /* go to the correct spot on the file */ if ( lseek(dbh->db_fd, offset, 0) < 0 ) { return -1; } /* write the record into the file */ return write(dbh->db_fd, cp, len); } int del_dbf_record(dbhead_t *dbh, long rec_num) { int ret = 0; char *cp; if (rec_num > dbh->db_records) return -1; if ((cp = get_dbf_record(dbh, rec_num))) { *cp = DELETED_RECORD; ret = put_dbf_record(dbh, rec_num, cp); free(cp); } return ret; } void pack_dbf(dbhead_t *dbh) { long out_off, in_off; int rec_cnt, new_cnt; char *cp; if ((cp = (char *)malloc(dbh->db_rlen)) == NULL) { return; } in_off = out_off = dbh->db_hlen; new_cnt = 0; rec_cnt = dbh->db_records; while (rec_cnt > 0) { if (get_piece(dbh, in_off, cp, dbh->db_rlen) < 0) break; if (*cp != DELETED_RECORD) { /* write the record into the file */ if (put_piece(dbh, out_off, cp, dbh->db_rlen) < 0) break; out_off += dbh->db_rlen; new_cnt++; } in_off += dbh->db_rlen; rec_cnt--; } free(cp); /* Try to truncate the file to the right size. */ if (ftruncate(dbh->db_fd, out_off) != 0) { php_error(E_WARNING, "dbase_pack() couldn't truncate the file to the right size. Some deleted records may still be left in there."); } if (rec_cnt == 0) dbh->db_records = new_cnt; } /* routine to get a field from a record */ char *get_field_val(char *rp, dbfield_t *fldp, char *cp) { int flen = fldp->db_flen; if ( !cp ) cp = (char *)malloc(flen + 1); if ( cp ) { strncpy(cp, &rp[fldp->db_foffset], flen); cp[flen] = 0; } return cp; } void put_field_val(char *rp, dbfield_t *fldp, char *cp) { strncpy(&rp[fldp->db_foffset], cp, fldp->db_flen); } /* * output a record */ void out_rec(dbhead_t *dbh, dbfield_t *dbf, char *cp) { dbfield_t *cur_f; int nfields = dbh->db_nfields; char *fnp = (char *)malloc(dbh->db_rlen); printf("%c", *cp); for (cur_f = dbf; cur_f < &dbf[nfields] ; cur_f++) { printf(" "); printf(cur_f->db_format, get_field_val(cp, cur_f, fnp)); } printf("\n"); free(fnp); } /* check for record validity */ int is_valid_rec(char *cp) { if (cp && (*cp == VALID_RECORD)) return 1; else return 0; } /* get the next record */ char *dbf_get_next(dbhead_t *dbh) { return get_dbf_record(dbh, dbh->db_cur_rec + 1); } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/dbase/dbf_rec.h0100644000175200000240000000102606721227773014570 0ustar zeevstaffextern char *get_dbf_record(dbhead_t *dbh, long rec_num); extern long put_dbf_record(dbhead_t *dbh, long rec_num, char *cp); extern int put_piece(dbhead_t *dbh, long offset, char *cp, int len); extern int del_dbf_record(dbhead_t *dbh, long rec_num); void pack_dbf(dbhead_t *dbh); extern char *get_field_val(char *rp, dbfield_t *fldp, char *cp); void put_field_val(char *rp, dbfield_t *fldp, char *cp); void out_rec(dbhead_t *dbh, dbfield_t *dbf, char *cp); extern int is_valid_rec(char *cp); extern char *dbf_get_next(dbhead_t *dbh); php-4.2.3/ext/dbase/php_dbase.h0100644000175200000240000000341607437364631015136 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jim Winstead | +----------------------------------------------------------------------+ */ /* $Id: php_dbase.h,v 1.10 2025/02/28 08:26:01 sebastian Exp $ */ #ifndef PHP_DBASE_H #define PHP_DBASE_H #if DBASE extern zend_module_entry dbase_module_entry; #define dbase_module_ptr &dbase_module_entry PHP_MINIT_FUNCTION(dbase); PHP_FUNCTION(dbase_open); PHP_FUNCTION(dbase_create); PHP_FUNCTION(dbase_close); PHP_FUNCTION(dbase_numrecords); PHP_FUNCTION(dbase_numfields); PHP_FUNCTION(dbase_add_record); PHP_FUNCTION(dbase_get_record); PHP_FUNCTION(dbase_delete_record); PHP_FUNCTION(dbase_pack); PHP_FUNCTION(dbase_get_record_with_names); #else #define dbase_module_ptr NULL #endif #define phpext_dbase_ptr dbase_module_ptr #endif /* PHP_DBASE_H */ php-4.2.3/ext/dbase/setup.stub0100644000175200000240000000025006706633042015061 0ustar zeevstaff# $Id: setup.stub,v 1.1 2025/04/19 13:56:50 ssb Exp $ -*- sh -*- define_option with-dbase 'dBase support? ' yesno no \ ' Whether to use the bundled dbase library.' php-4.2.3/ext/dbplus/0040755000175200000240000000000007535765574013264 5ustar zeevstaffphp-4.2.3/ext/dbplus/tests/0040755000175200000240000000000007535765541014420 5ustar zeevstaffphp-4.2.3/ext/dbplus/tests/001.phpt0100644000175200000240000000105307321200163015562 0ustar zeevstaff--TEST-- Check for dbplus presence --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- dbplus extension is availablephp-4.2.3/ext/dbplus/CREDITS0100644000175200000240000000003207321200163014237 0ustar zeevstaffdbplus Hartmut Holzgraefe php-4.2.3/ext/dbplus/EXPERIMENTAL0100644000175200000240000000023707321200163015046 0ustar zeevstaffthis extension is experimental, its functions may change their names or move to extension all together so do not rely to much on them you have been warned! php-4.2.3/ext/dbplus/Makefile.in0100644000175200000240000000041507342201713015276 0ustar zeevstaff# $Id: Makefile.in,v 1.2 2025/08/26 14:12:27 hholzgra Exp $ LTLIBRARY_NAME = libdbplus.la LTLIBRARY_SOURCES = dbplus.c php_dbplus.c LTLIBRARY_SHARED_NAME = dbplus.la LTLIBRARY_SHARED_LIBADD = $(DBPLUS_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/dbplus/README0100644000175200000240000000012707321200163014104 0ustar zeevstaffexperimental db++ extension for more information on db++ see http://www.concept-asa.de php-4.2.3/ext/dbplus/config.m40100644000175200000240000000270207401753424014750 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.6 2025/11/30 18:59:32 sniper Exp $ dnl PHP_ARG_WITH(dbplus, for dbplus support, [ --with-dbplus Include dbplus support]) if test "$PHP_DBPLUS" != "no"; then # --with-dbplus -> check with-path SEARCH_PATH="/usr/dbplus /usr/local/dbplus /opt/dbplus" SEARCH_FOR="/include/dbconfig.h" if test -r $PHP_DBPLUS/; then # path given as parameter DBPLUS_DIR=$PHP_DBPLUS else # search default path list AC_MSG_CHECKING(for dbplus files in default path) for i in $SEARCH_PATH ; do if test -r $i/$SEARCH_FOR; then DBPLUS_DIR=$i AC_MSG_RESULT(found in $i) fi done fi if test -z "$DBPLUS_DIR"; then AC_MSG_RESULT(not found) AC_MSG_ERROR(Please reinstall the dbplus distribution) fi # --with-dbplus -> add include path AC_ADD_INCLUDE($DBPLUS_DIR/include) # --with-dbplus -> chech for lib and symbol presence LIBNAME=Ddb LIBSYMBOL=Db_Init old_LIBS=$LIBS LIBS="-L$DBPLUS_DIR/lib -lm -ldl -lDmacc -lDracc" AC_CHECK_LIB($LIBNAME, $LIBSYMBOL, [AC_DEFINE(HAVE_DBPLUSLIB,1,[ ])], [AC_MSG_ERROR(wrong dbplus lib version or lib not found)]) LIBS=$old_LIBS PHP_SUBST(DBPLUS_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $DBPLUS_DIR/lib, DBPLUS_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(Dmacc, $DBPLUS_DIR/lib, DBPLUS_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(Dracc, $DBPLUS_DIR/lib, DBPLUS_SHARED_LIBADD) PHP_EXTENSION(dbplus, $ext_shared) fi php-4.2.3/ext/dbplus/dbplus.c0100644000175200000240000002134507437364634014714 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Hartmut Holzgraefe | +----------------------------------------------------------------------+ */ #include "php.h" #include "ext/standard/info.h" #include "php_ini.h" #include "php_dbplus.h" #include #include #include /* If you declare any globals in php_dbplus.h uncomment this: ZEND_DECLARE_MODULE_GLOBALS(dbplus) */ #ifdef COMPILE_DL_DBPLUS ZEND_GET_MODULE(dbplus) #endif /* {{{ Resource handling */ /* True global resources - no need for thread safety here */ int le_dbplus_relation; int le_dbplus_tupel; void dbplus_destruct_relation(zend_rsrc_list_entry *rsrc TSRMLS_DC) { relf *conn = (relf *)(rsrc->ptr); cdb_close(conn); } void dbplus_destruct_tupel(zend_rsrc_list_entry *rsrc TSRMLS_DC) { tuple *t = (tuple *)(rsrc->ptr); efree(t); } /* }}} */ /* {{{ function table */ /* Every user visible function must have an entry in dbplus_functions[]. */ function_entry dbplus_functions[] = { PHP_FE(dbplus_add, NULL) PHP_FE(dbplus_aql, NULL) PHP_FE(dbplus_chdir, NULL) PHP_FE(dbplus_close, NULL) PHP_FE(dbplus_curr, NULL) PHP_FE(dbplus_errno, NULL) PHP_FE(dbplus_errcode, NULL) PHP_FE(dbplus_find, NULL) PHP_FE(dbplus_first, NULL) PHP_FE(dbplus_flush, NULL) PHP_FE(dbplus_freealllocks, NULL) PHP_FE(dbplus_freelock, NULL) PHP_FE(dbplus_freerlocks, NULL) PHP_FE(dbplus_getlock, NULL) PHP_FE(dbplus_getunique, NULL) PHP_FE(dbplus_info, NULL) PHP_FE(dbplus_last, NULL) PHP_FE(dbplus_next, NULL) PHP_FE(dbplus_open, NULL) PHP_FE(dbplus_prev, NULL) PHP_FE(dbplus_rchperm, NULL) PHP_FE(dbplus_rcreate, NULL) PHP_FE(dbplus_rcrtexact, NULL) PHP_FE(dbplus_rcrtlike, NULL) PHP_FE(dbplus_resolve, NULL) PHP_FE(dbplus_restorepos, NULL) PHP_FE(dbplus_rkeys, NULL) PHP_FE(dbplus_ropen, NULL) PHP_FE(dbplus_rquery, NULL) PHP_FE(dbplus_rrename, NULL) PHP_FE(dbplus_rsecindex, NULL) PHP_FE(dbplus_runlink, NULL) PHP_FE(dbplus_rzap, NULL) PHP_FE(dbplus_savepos, NULL) PHP_FE(dbplus_setindex, NULL) PHP_FE(dbplus_setindexbynumber, NULL) PHP_FE(dbplus_sql, NULL) PHP_FE(dbplus_tcl, NULL) PHP_FE(dbplus_tremove, NULL) PHP_FE(dbplus_undo, NULL) PHP_FE(dbplus_undoprepare, NULL) PHP_FE(dbplus_unlockrel, NULL) PHP_FE(dbplus_unselect, NULL) PHP_FE(dbplus_update, NULL) PHP_FE(dbplus_xlockrel, NULL) PHP_FE(dbplus_xunlockrel, NULL) {NULL, NULL, NULL} /* Must be the last line in dbplus_functions[] */ }; /* }}} */ /* {{{ module entry */ zend_module_entry dbplus_module_entry = { STANDARD_MODULE_HEADER, "dbplus", dbplus_functions, PHP_MINIT(dbplus), PHP_MSHUTDOWN(dbplus), PHP_RINIT(dbplus), /* Replace with NULL if there's nothing to do at request start */ PHP_RSHUTDOWN(dbplus), /* Replace with NULL if there's nothing to do at request end */ PHP_MINFO(dbplus), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; /* }}} */ /* {{{ ini parameters */ /* Remove comments and fill if you need to have entries in php.ini PHP_INI_BEGIN() PHP_INI_END() */ /* }}} */ /* {{{ module init */ PHP_MINIT_FUNCTION(dbplus) { /* resource id for cdb connections */ le_dbplus_relation = zend_register_list_destructors_ex(dbplus_destruct_relation, NULL, "dbplus_relation", module_number); le_dbplus_tupel = zend_register_list_destructors_ex(dbplus_destruct_tupel , NULL, "dbplus_tuple" , module_number); /* constants for DBPLUS error codes */ REGISTER_LONG_CONSTANT("DBPLUS_ERR_NOERR", ERR_NOERR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_DUPLICATE", ERR_DUPLICATE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_EOSCAN", ERR_EOSCAN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_EMPTY", ERR_EMPTY, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_CLOSE", ERR_CLOSE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_WLOCKED", ERR_WLOCKED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_LOCKED", ERR_LOCKED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_NOLOCK", ERR_NOLOCK, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_READ", ERR_READ, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_WRITE", ERR_WRITE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_CREATE", ERR_CREATE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_LSEEK", ERR_LSEEK, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_LENGTH", ERR_LENGTH, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_OPEN", ERR_OPEN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_WOPEN", ERR_WOPEN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_MAGIC", ERR_MAGIC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_VERSION", ERR_VERSION, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_PGSIZE", ERR_PGSIZE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_CRC", ERR_CRC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_PIPE", ERR_PIPE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_NIDX", ERR_NIDX, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_MALLOC", ERR_MALLOC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_NUSERS", ERR_NUSERS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_PREEXIT", ERR_PREEXIT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_ONTRAP", ERR_ONTRAP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_PREPROC", ERR_PREPROC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_DBPARSE", ERR_DBPARSE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_DBRUNERR", ERR_DBRUNERR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_DBPREEXIT", ERR_DBPREEXIT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_WAIT", ERR_WAIT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_CORRUPT_TUPLE", ERR_CORRUPT_TUPLE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_WARNING0", ERR_WARNING0, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_PANIC", ERR_PANIC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_FIFO", ERR_FIFO, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_PERM", ERR_PERM, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_TCL", ERR_TCL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_RESTRICTED", ERR_RESTRICTED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_USER", ERR_USER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBPLUS_ERR_UNKNOWN", ERR_UNKNOWN, CONST_CS | CONST_PERSISTENT); return SUCCESS; } /* }}} */ /* {{{ module shutdown */ PHP_MSHUTDOWN_FUNCTION(dbplus) { return SUCCESS; } /* }}} */ /* {{{ request init */ /* Remove if there's nothing to do at request start */ PHP_RINIT_FUNCTION(dbplus) { return SUCCESS; } /* }}} */ /* {{{ request shutdown */ /* Remove if there's nothing to do at request end */ PHP_RSHUTDOWN_FUNCTION(dbplus) { return SUCCESS; } /* }}} */ /* {{{ module information */ PHP_MINFO_FUNCTION(dbplus) { php_info_print_table_start(); php_info_print_table_header(2, "dbplus support", "enabled"); php_info_print_table_end(); /* Remove comments if you have entries in php.ini DISPLAY_INI_ENTRIES(); */ } /* }}} */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbplus/php_dbplus.c0100644000175200000240000010565207437364634015567 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Hartmut Holzgraefe | +----------------------------------------------------------------------+ */ #include "php.h" #include "php_ini.h" #include "php_dbplus.h" #include "ext/standard/php_string.h" #include #include #include /* missing prototypes in dbplus header files */ void string_to_scalop(char *op, enum scalop *sop); field * string_to_field(char *val, attribute *ap, int flags); void cdb_tcl(int,char *,char **, int *); relf * aql_exec(char *, char *); tuple *rnext(relf *); #define _STRING(x) (Z_STRVAL_PP(x)) #define _INT(x) (Z_LVAL_PP(x)) #define _HASH(x) (Z_ARRVAL_PP(x)) #define DBPLUS_FETCH_RESOURCE(r, z) ZEND_FETCH_RESOURCE(r, relf *, z, -1, "dbplus_relation", le_dbplus_relation); \ if(!r) RETURN_LONG(ERR_UNKNOWN); static int var2tuple(relf *r, zval **zv, tuple *t) { register attribute *ap ; unsigned deg ; zval **element; if (Z_TYPE_PP(zv)!=IS_ARRAY) return 1; rtupinit(r, t); ap = r->r_atts; deg = r->r_rel.rel_deg; do { if(SUCCESS!=zend_hash_find(Z_ARRVAL_PP(zv), ap->att_name, strlen(ap->att_name)+1, (void **)&element)) { continue; } if (! *element) { return 1; } switch(ap->att_type) { case FT_SHORT: /* short integer */ convert_to_long_ex(element); AFFIX(ap, t)->f_short = (short) Z_LVAL_PP(element); break; case FT_UNSIGNED: /* unsigned short integer */ convert_to_long_ex(element); AFFIX(ap, t)->f_unsigned = (unsigned) Z_LVAL_PP(element); break; case FT_LONG: /* 32bit signed long */ case FT_SEQUENCE: /* unique sequence number -> just a long to outsiders */ convert_to_long_ex(element); AFFIX(ap, t)->f_long = (long4) Z_LVAL_PP(element); break; case FT_DATE: /* date -> long containing YYYYMMDD */ convert_to_long_ex(element); AFFIX(ap, t)->f_date = (long4) Z_LVAL_PP(element); break; case FT_TIME: /* time as unix timestamp */ convert_to_long_ex(element); AFFIX(ap, t)->f_time = (long4) Z_LVAL_PP(element); break; case FT_FLOAT: /* single prec. floating point */ convert_to_double_ex(element); AFFIX(ap, t)->f_float = (float) Z_DVAL_PP(element); break; case FT_DOUBLE: /* double prec. floating point */ convert_to_double_ex(element); AFFIX(ap, t)->f_double = (double) Z_DVAL_PP(element); break; case FT_STRING: case FT_DEUTSCH: case FT_CHAR: case FT_ANSI: case FT_ISO: case FT_ISOL: /* different variants of Strings */ convert_to_string_ex(element); afput(ap, t, (field *)0, Z_STRVAL_PP(element)); break; default: php_error(E_WARNING,"%s is of yet unsupported type %d",ap->att_name,ap->att_type); break; } } while (ap++, --deg); return 0; } static int tuple2var(relf * r, tuple * t, zval **zv) { register attribute *ap ; unsigned deg ; zval *element; zval_dtor(*zv); if (array_init(*zv) == FAILURE) { return 1; } ap = r->r_atts; deg = r->r_rel.rel_deg; do { MAKE_STD_ZVAL(element); Z_TYPE_P(element)=IS_NULL; switch(ap->att_type) { case FT_SHORT: ZVAL_LONG(element, AFFIX(ap, t)->f_short); break; case FT_UNSIGNED: ZVAL_LONG(element, AFFIX(ap, t)->f_unsigned); break; case FT_LONG: case FT_SEQUENCE: ZVAL_LONG(element, AFFIX(ap, t)->f_long); break; case FT_TIME: ZVAL_LONG(element, AFFIX(ap, t)->f_time); break; case FT_FLOAT: ZVAL_DOUBLE(element, AFFIX(ap, t)->f_float); break; case FT_DOUBLE: ZVAL_DOUBLE(element, AFFIX(ap, t)->f_double); break; case FT_STRING: case FT_DEUTSCH: case FT_CHAR: ZVAL_STRING(element, AFVAR(ap, t)->f_string, 1); break; default: php_error(E_WARNING,"%s is of yet unsupported type %d",ap->att_name,ap->att_type); break; } if(Z_TYPE_P(element)!=IS_NULL) zend_hash_update(Z_ARRVAL_PP(zv), ap->att_name, strlen(ap->att_name)+1, (void *)&element, sizeof(zval*), NULL); } while (ap++, --deg); return 0; } static constraint * ary2constr(relf * r, zval** constr) { attribute *ap; static constraint c; field *f; enum scalop sop; char * dom; char * val; char * op; zval **zdata; /* init first */ db_coninit(r, &c); if (Z_TYPE_PP(constr) != IS_ARRAY) { php_error(E_WARNING, "Constraint is not an array"); return NULL; } zend_hash_internal_pointer_reset(_HASH(constr)); if(zend_hash_get_current_data(_HASH(constr), (void **)&zdata)!=SUCCESS) { php_error(E_WARNING, "Constraint array is empty"); return NULL; } switch(Z_TYPE_PP(zdata)) { case IS_STRING: /* constraints in plain string array */ if (_HASH(constr)->nNumOfElements%3) { php_error(E_WARNING, "Constraint array has to have triples of strings"); return NULL; } do { convert_to_string_ex(zdata); dom = _STRING(zdata); zend_hash_move_forward(_HASH(constr)); zend_hash_get_current_data(_HASH(constr), (void **)&zdata); convert_to_string_ex(zdata); op = _STRING(zdata); zend_hash_move_forward(_HASH(constr)); zend_hash_get_current_data(_HASH(constr), (void **)&zdata); convert_to_string_ex(zdata); val = _STRING(zdata); zend_hash_move_forward(_HASH(constr)); if (!(ap = (attribute *) attno (r, dom))) { fprintf(stderr, "Invalid domain \"%s\"\n", dom); return 0; } /* operator */ string_to_scalop(op, &sop); /* value */ f = string_to_field(val, ap, 0); (void) db_constrain(r, &c, dom, sop, f ? f : (field *) val); } while(SUCCESS==zend_hash_get_current_data(_HASH(constr), (void **)&zdata)); break; case IS_ARRAY: { zval **entry; for(zend_hash_internal_pointer_reset(_HASH(constr)); SUCCESS==zend_hash_get_current_data(_HASH(constr), (void **)&zdata); zend_hash_move_forward(_HASH(constr))) { if(!(Z_TYPE_PP(zdata)==IS_ARRAY)) { php_error(E_WARNING, "Constraint array element not an array"); return NULL; } if(_HASH(zdata)->nNumOfElements!=3) { php_error(E_WARNING, "Constraint array element not an array of size 3"); return NULL; } zend_hash_internal_pointer_reset(_HASH(zdata)); zend_hash_get_current_data(_HASH(zdata), (void **)&entry); convert_to_string_ex(entry); dom=_STRING(entry); zend_hash_move_forward(_HASH(zdata)); zend_hash_get_current_data(_HASH(zdata), (void **)&entry); convert_to_string_ex(entry); op=_STRING(entry); zend_hash_move_forward(_HASH(zdata)); zend_hash_get_current_data(_HASH(zdata), (void **)&entry); convert_to_string_ex(entry); val=_STRING(entry); if (!(ap = (attribute *) attno (r, dom))) { fprintf(stderr, "Invalid domain \"%s\"\n", dom); return 0; } /* operator */ string_to_scalop(op, &sop); /* value */ f = string_to_field(val, ap, 0); (void) db_constrain(r, &c, dom, sop, f ? f : (field *) val); } } break; default: /* TODO error-handling */ return NULL; } return &c; } /* {{{ proto int dbplus_add(int relation, array tuple) Adds a tuple to a relation */ PHP_FUNCTION(dbplus_add) { zval **relation, **data; enum errorcond stat = ERR_UNKNOWN; relf *r; tuple t; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &data) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); convert_to_array_ex(data); if(var2tuple(r, data, &t)) RETURN_LONG(ERR_UNKNOWN); stat=cdb_add(r, &t); if(stat==ERR_NOERR) { tuple2var(r, &t, data); } RETURN_LONG(stat); } /* }}} */ /* {{{ proto resource dbplus_aql(string query [, string server [, string dbpath]]) Performs AQL query */ PHP_FUNCTION(dbplus_aql) { int argc; zval **query, **server, **dbpath; relf *r; argc = ZEND_NUM_ARGS(); if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &query, &server, &dbpath) == FAILURE){ WRONG_PARAM_COUNT; } switch (argc) { case 3: convert_to_string_ex(dbpath); php_error(E_WARNING, "Arg dbpath: %s", _STRING(dbpath)); /* Fall-through. */ case 2: convert_to_string_ex(server); php_error(E_WARNING, "Arg server: %s", _STRING(server)); /* Fall-through. */ case 1: convert_to_string_ex(query); php_error(E_WARNING, "Arg query: %s", _STRING(query)); break; } r = cdb_aql((argc>=2)?_STRING(server):"localhost", _STRING(query), (argc==3)?_STRING(dbpath):NULL); if(r == NULL) { /* TODO error handling */ RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, r, le_dbplus_relation); } /* }}} */ /* {{{ proto string dbplus_chdir([string newdir]) Gets/Sets database virtual current directory */ PHP_FUNCTION(dbplus_chdir) { int argc; char *p; zval **newdir; argc = ZEND_NUM_ARGS(); switch(argc) { case 0: break; case 1: if(zend_get_parameters_ex(1, &newdir) == FAILURE) { WRONG_PARAM_COUNT; } else { convert_to_string_ex(newdir); } break; default: WRONG_PARAM_COUNT; } p = cdb_chdir((argc)?_STRING(newdir):NULL); if(p) { RETURN_STRING(p, 1); } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto int dbplus_close(int relation) Closes a relation */ PHP_FUNCTION(dbplus_close) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); zend_list_delete(Z_LVAL_PP(relation)); RETURN_TRUE; } /* }}} */ /* {{{ proto int dbplus_curr(int relation, array tuple) Gets current tuple from relation */ PHP_FUNCTION(dbplus_curr) { zval **relation, **tname; relf *r; tuple t; int stat; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &tname) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); stat = cdb_current(r, &t); if(stat==ERR_NOERR) { tuple2var(r, &t, tname); } RETURN_LONG(stat); } /* }}} */ /* {{{ proto string dbplus_errcode(int err) Gets error string for given errorcode or last error */ PHP_FUNCTION(dbplus_errcode) { zval **err; int errno; switch (ZEND_NUM_ARGS()) { case 0: errno=-1; break; case 1: if( zend_get_parameters_ex(1, &err) == FAILURE){ WRONG_PARAM_COUNT; } convert_to_long_ex(err); errno = _INT(err); } if(errno==-1) errno = Acc_error; RETURN_STRING(dbErrorMsg(errno, NULL), 1); } /* }}} */ /* {{{ proto int dbplus_errno(void) Gets error code for last operation */ PHP_FUNCTION(dbplus_errno) { RETURN_LONG(Acc_error); } /* }}} */ /* {{{ proto int dbplus_find(int relation, array constr, mixed tuple) Sets a constraint on a relation */ PHP_FUNCTION(dbplus_find) { relf *r; zval **relation, **constr, **data; constraint *c; tuple t; int stat; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &relation, &constr, &data) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); if (Z_TYPE_PP(constr) != IS_ARRAY) { php_error(E_WARNING, "Constraint is not an array"); RETURN_LONG(ERR_UNKNOWN); } convert_to_array_ex(data); c = ary2constr(r, constr); if (!c){ RETURN_LONG(ERR_USER); } stat = cdb_find(r, &t, c); if(stat==ERR_NOERR) tuple2var(r, &t, data); RETURN_LONG(stat); } /* }}} */ /* {{{ proto int dbplus_first(int relation, array tuple) Gets first tuple from relation */ PHP_FUNCTION(dbplus_first) { zval **relation, **tname; relf *r; tuple t; int stat; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &tname) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); stat = cdb_first(r, &t); if(stat==ERR_NOERR) { tuple2var(r, &t, tname); } RETURN_LONG(stat); } /* }}} */ /* {{{ proto int dbplus_flush(int relation) ??? */ PHP_FUNCTION(dbplus_flush) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdb_flush(r)); } /* }}} */ /* {{{ proto int dbplus_freealllocks(void) Frees all locks held by this client */ PHP_FUNCTION(dbplus_freealllocks) { RETURN_LONG(cdbFreeAllLocks()); } /* }}} */ /* {{{ proto int dbplus_freelock(int relation, array tuple) Releases write lock on tuple */ PHP_FUNCTION(dbplus_freelock) { zval **relation, **data; enum errorcond stat = ERR_UNKNOWN; relf *r; tuple t; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &data) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); convert_to_array_ex(data); if(var2tuple(r, data, &t)) RETURN_LONG(ERR_UNKNOWN); stat=cdb_freelock(r, &t); RETURN_LONG(stat); } /* }}} */ /* {{{ proto int dbplus_freerlocks(int relation) Frees all locks on given relation */ PHP_FUNCTION(dbplus_freerlocks) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdb_freerlocks(r)); } /* }}} */ /* {{{ proto int dbplus_getlock(int relation, array tuple) Requests locking of tuple */ PHP_FUNCTION(dbplus_getlock) { zval **relation, **data; enum errorcond stat = ERR_UNKNOWN; relf *r; tuple t; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &data) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); convert_to_array_ex(data); if(var2tuple(r, data, &t)) RETURN_LONG(ERR_UNKNOWN); stat=cdb_getlock(r, &t); RETURN_LONG(stat); } /* }}} */ /* {{{ proto int dbplus_getunique(int handle, int uniqueid) Gets a id number unique to a relation */ PHP_FUNCTION(dbplus_getunique) { relf *r; zval **relation, **uniqueid; long l; int stat; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &uniqueid) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); stat = cdb_getunique(r, &l, 1); if(!stat) { ZVAL_LONG(*uniqueid,l); } RETURN_LONG(stat); } /* }}} */ /* {{{ proto int dbplus_info(int relation, string key, array &result) ??? */ PHP_FUNCTION(dbplus_info) { zval **relation, **key, **result, *element; relf *r; register attribute *ap; unsigned deg; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &relation, &key, &result) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); ap = r->r_atts; deg = r->r_rel.rel_deg; convert_to_string_ex(key); zval_dtor(*result); if (array_init(*result) == FAILURE) RETURN_LONG(ERR_USER); if(!strcmp("atts", Z_STRVAL_PP(key))) { do { MAKE_STD_ZVAL(element); ZVAL_STRING(element, ap->att_name, 1); zend_hash_update(Z_ARRVAL_PP(result), ap->att_name, strlen(ap->att_name)+1, (void *)&element, sizeof(zval*), NULL); } while (ap++, deg--); RETURN_LONG(ERR_NOERR); } RETURN_LONG(ERR_USER); } /* }}} */ /* {{{ proto int dbplus_last(int relation, array tuple) Gets last tuple from relation */ PHP_FUNCTION(dbplus_last) { zval **relation, **tname; relf *r; tuple t; int stat; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &tname) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); stat = cdb_last(r, &t); if(stat==ERR_NOERR) { tuple2var(r, &t, tname); } RETURN_LONG(stat); } /* }}} */ /* {{{ proto int dbplus_lockrel(int relation) Requests write lock on relation */ PHP_FUNCTION(dbplus_lockrel) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdb_lockrel(r)); } /* }}} */ /* {{{ proto int dbplus_next(int relation, array &tname) Gets next tuple from relation */ PHP_FUNCTION(dbplus_next) { zval **relation, **tname; relf *r; tuple *t; int stat; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &tname) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); if(r->r_sid = 9999) { t = rnext(r); stat = Acc_error; } else { t = (tuple *) pmalloc(sizeof(tuple)); stat = cdb_next(r, t); } if(stat==ERR_NOERR) { tuple2var(r, t, tname); } RETURN_LONG(stat); } /* }}} */ /* {{{ proto resource dbplus_open(string name) Opens a relation file */ PHP_FUNCTION(dbplus_open) { relf *r; zval **tname; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &tname) == FAILURE){ WRONG_PARAM_COUNT; } convert_to_string_ex(tname); r = cdb_open(Z_STRVAL_PP(tname), 1, 1); if(r == NULL) { /* TODO error handling */ RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, r, le_dbplus_relation); } /* }}} */ /* {{{ proto int dbplus_prev(int relation, array tuple) Gets previous tuple from relation */ PHP_FUNCTION(dbplus_prev) { zval **relation, **tname; relf *r; tuple t; int stat; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &tname) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); stat = cdb_previous(r, &t); if(stat==ERR_NOERR) { tuple2var(r, &t, tname); } RETURN_LONG(stat); } /* }}} */ /* {{{ proto int dbplus_rchperm(int relation, int mask, string user, string group) ??? */ PHP_FUNCTION(dbplus_rchperm) { relf *r; zval **relation, **mask, **user, **group; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &relation, &mask, &user, &group) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); convert_to_long_ex(mask); convert_to_string_ex(user); convert_to_string_ex(group); RETURN_LONG(cdbRchperm(r, _INT(mask), _STRING(user), _STRING(group))); } /* }}} */ /* {{{ proto resource dbplus_rcreate(string name, mixed domlist [, int overwrite]) Creates a new DB++ relation */ PHP_FUNCTION(dbplus_rcreate) { zval **name, **domlist, **overwrite; relf *r=NULL; int flag, ndoms, argc = ZEND_NUM_ARGS(); attdef *at0; switch(argc) { case 3: if(zend_get_parameters_ex(3, &name, &domlist, &overwrite) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(overwrite); flag=_INT(overwrite); break; case 2: if(zend_get_parameters_ex(3, &name, &domlist) == FAILURE) { WRONG_PARAM_COUNT; } flag=0; break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(name); switch ( Z_TYPE_PP(domlist) ) { case IS_STRING: convert_to_string_ex(domlist); break; case IS_ARRAY: { zval tmp; ZVAL_STRING(&tmp," ",0); php_implode(&tmp,*domlist,*domlist); } break; default: } at0 = create2att(_STRING(domlist), &ndoms); if (at0) { r = cdbRcreate(_STRING(name), 0666, 0, ndoms, at0, flag); dbxfree((char *) at0); } if(r == NULL) { /* TODO error handling */ RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, r, le_dbplus_relation); } /* }}} */ /* {{{ proto resource dbplus_rcrtexact(string name, resource relation [, boolean overwrite]) Creates an exact but empty copy of a relation including indices */ PHP_FUNCTION(dbplus_rcrtexact) { zval **name, **relation, **overwrite; relf *r; int f,argc = ZEND_NUM_ARGS(); switch(argc) { case 3: if(zend_get_parameters_ex(3, &name, &relation, &overwrite) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(overwrite); f=_INT(overwrite); break; case 2: if(zend_get_parameters_ex(3, &name, &relation) == FAILURE) { WRONG_PARAM_COUNT; } f=0; break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(name); DBPLUS_FETCH_RESOURCE(r, relation); r = cdbRcrtexact(_STRING(name), 0666, r, f); if(r == NULL) { /* TODO error handling */ RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, r, le_dbplus_relation); } /* }}} */ /* {{{ proto resource dbplus_rcrtlike(string name, int handle [, int overwrite]) Creates an empty copy of a relation with default indices */ PHP_FUNCTION(dbplus_rcrtlike) { zval **name, **relation, **overwrite; relf *r; int f,argc = ZEND_NUM_ARGS(); switch(argc) { case 3: if(zend_get_parameters_ex(3, &name, &relation, &overwrite) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(overwrite); f=_INT(overwrite); break; case 2: if(zend_get_parameters_ex(3, &name, &relation) == FAILURE) { WRONG_PARAM_COUNT; } f=0; break; default: WRONG_PARAM_COUNT; break; } convert_to_string_ex(name); DBPLUS_FETCH_RESOURCE(r, relation); r = cdbRcrtlike(_STRING(name), 0666, 0, r, f); if(r == NULL) { /* TODO error handling */ RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, r, le_dbplus_relation); } /* }}} */ /* {{{ proto int dbplus_resolve(string name) Resolves host information for relation */ PHP_FUNCTION(dbplus_resolve) { zval **name, *element; char * host; char * host_path; int sid; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE){ WRONG_PARAM_COUNT; } convert_to_string_ex(name); sid = cdb_resolve(_STRING(name), &host, &host_path); if (sid <= 0) RETURN_FALSE; if (array_init(return_value) == FAILURE) { RETURN_FALSE; } MAKE_STD_ZVAL(element); Z_TYPE_P(element)=IS_NULL; ZVAL_LONG(element,sid); zend_hash_update(Z_ARRVAL_P(return_value), "sid", 4, &element, sizeof(zval *), NULL); MAKE_STD_ZVAL(element); Z_TYPE_P(element)=IS_NULL; ZVAL_STRING(element,host,1); zend_hash_update(Z_ARRVAL_P(return_value), "host", 5, &element, sizeof(zval *), NULL); MAKE_STD_ZVAL(element); Z_TYPE_P(element)=IS_NULL; ZVAL_STRING(element,host_path,1); zend_hash_update(Z_ARRVAL_P(return_value), "host_path", 10, &element, sizeof(zval *), NULL); } /* }}} */ /* {{{ proto int dbplus_restorepos(int relation, array tuple) ??? */ PHP_FUNCTION(dbplus_restorepos) { zval **relation, **tname; relf *r; tuple t; int stat; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &tname) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); stat = cdb_next(r, &t); if(stat==ERR_NOERR) { tuple2var(r, &t, tname); } RETURN_LONG(stat); } /* }}} */ /* {{{ proto resource dbplus_rkeys(resource relation, mixed domlist) Defines primary key for relation */ PHP_FUNCTION(dbplus_rkeys) { relf *r, *rnew; zval **relation, **domlist, **zdata; int nkeys=0; char *name=NULL, *keys[40]; /* TODO hardcoded magic number ??? */ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &domlist) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); switch(Z_TYPE_PP(domlist)) { case IS_ARRAY: convert_to_array_ex(domlist); for(zend_hash_internal_pointer_reset(_HASH(domlist)); SUCCESS==zend_hash_get_current_data(_HASH(domlist), (void **)&zdata); zend_hash_move_forward(_HASH(domlist))) { if(Z_TYPE_PP(zdata)==IS_STRING) keys[nkeys++] = _STRING(zdata); else { php_error(E_WARNING, "dbplus_rkeys: domlist array contains non-string value(s)"); Acc_error = ERR_USER; RETURN_FALSE; } } break; case IS_STRING: convert_to_string_ex(domlist); keys[0] = _STRING(domlist); nkeys = 1; break; default: php_error(E_WARNING, "dbplus_rkeys: domlist has to be of type string or an array of strings"); Acc_error = ERR_USER; RETURN_FALSE; } rnew = cdbRkeys(r, nkeys, keys); if(name) efree(name); if(rnew) { /* TODO realy delete old relation resource ? */ #if 0 zend_list_delete(Z_LVAL_PP(relation)); #endif ZEND_REGISTER_RESOURCE(return_value, rnew, le_dbplus_relation); } else { /* TODO error reporting */ RETURN_FALSE; } } /* }}} */ /* {{{ proto resource dbplus_ropen(string name) Opens relation file local */ PHP_FUNCTION(dbplus_ropen) { relf *r; zval **tname; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &tname) == FAILURE){ WRONG_PARAM_COUNT; } convert_to_string_ex(tname); r = ropen(Z_STRVAL_PP(tname), 0, 0); if(r == NULL) { /* TODO error handling */ RETURN_FALSE; } r->r_sid = 9999; ZEND_REGISTER_RESOURCE(return_value, r, le_dbplus_relation); } /* }}} */ /* {{{ proto resource dbplus_rquery(string name, string dbpath) ??? */ PHP_FUNCTION(dbplus_rquery) { relf *r; zval **name, **dbpath; int argc = ZEND_NUM_ARGS(); if ((argc <1) || (argc>2) || (zend_get_parameters_ex(2, &name, &dbpath) == FAILURE)){ WRONG_PARAM_COUNT; } r = aql_exec(_STRING(name), (argc==2)?_STRING(dbpath):NULL); if(!r) { /* TODO error handling */ RETURN_FALSE; } r->r_sid = 9999; ZEND_REGISTER_RESOURCE(return_value, r, le_dbplus_relation); } /* }}} */ /* {{{ proto int dbplus_rrename(int relation, string name) ??? */ PHP_FUNCTION(dbplus_rrename) { relf *r; zval **relation, **name; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &name) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); convert_to_string_ex(name); RETURN_LONG(cdbRrename(r, _STRING(name), 0)); } /* }}} */ /* {{{ proto resource dbplus_rsecindex(resource relation, mixed domlist, int compact) Creates an additional index on relation */ PHP_FUNCTION(dbplus_rsecindex) { relf *r, *rnew; zval **relation, **domlist, **compact, **zdata; int nkeys=0; char *name=NULL, *keys[40]; /* TODO hardcoded magic number ??? */ if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &relation, &domlist, &compact) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); switch ( Z_TYPE_PP(domlist) ) { case IS_ARRAY: convert_to_array_ex(domlist); for(zend_hash_internal_pointer_reset(_HASH(domlist)); SUCCESS==zend_hash_get_current_data(_HASH(domlist), (void **)&zdata); zend_hash_move_forward(_HASH(domlist))) { if(Z_TYPE_PP(zdata)==IS_STRING) keys[nkeys++] = _STRING(zdata); else { php_error(E_WARNING, "dbplus_rsecindex: domlist array contains non-string value(s)"); Acc_error = ERR_USER; RETURN_FALSE; } } break; case IS_STRING: convert_to_string_ex(domlist); keys[0] = _STRING(domlist); nkeys = 1; break; default: php_error(E_WARNING, "dbplus_rsecindex: domlist has to be of type string or an array of strings"); Acc_error = ERR_USER; RETURN_FALSE; } convert_to_long_ex(compact); rnew = cdbRsecindex(r, nkeys, keys, _INT(compact)); if(name) efree(name); if(rnew) { /* TODO realy delete old relation resource ? */ zend_list_delete(Z_LVAL_PP(relation)); ZEND_REGISTER_RESOURCE(return_value, rnew, le_dbplus_relation); } else { /* TODO error reporting */ RETURN_FALSE; } } /* }}} */ /* {{{ proto int dbplus_runlink(int relation) Removes relation from filesystem */ PHP_FUNCTION(dbplus_runlink) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdbRunlink(&r)); } /* }}} */ /* {{{ proto int dbplus_rzap(int relation, int truncate) Removes all tuples from relation */ PHP_FUNCTION(dbplus_rzap) { /* todo: optional argument */ relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdbRzap(r, 1)); } /* }}} */ /* {{{ proto int dbplus_savepos(int relation) ??? */ PHP_FUNCTION(dbplus_savepos) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdb_savepos(r)); } /* }}} */ /* {{{ proto int dbplus_setindex(int relation, string idx_name) ??? */ PHP_FUNCTION(dbplus_setindex) { relf *r; zval **relation, **idx_name; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &idx_name) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); convert_to_string_ex(idx_name); RETURN_LONG(cdb_setindex(r, _STRING(idx_name))); } /* }}} */ /* {{{ proto int dbplus_setindexbynumber(int relation, int idx_number) ??? */ PHP_FUNCTION(dbplus_setindexbynumber) { relf *r; zval **relation, **idx_number; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &idx_number) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); convert_to_long_ex(idx_number); RETURN_LONG(cdb_setindexbynumber(r, Z_LVAL_PP(idx_number))); } /* }}} */ /* {{{ proto resource dbplus_sql(string query, string server, string dbpath) Performs SQL query */ PHP_FUNCTION(dbplus_sql) { int argc; zval **query, **server, **dbpath; relf *r; argc = ZEND_NUM_ARGS(); if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &query, &server, &dbpath) == FAILURE){ WRONG_PARAM_COUNT; } switch (argc) { case 3: convert_to_string_ex(dbpath); php_error(E_WARNING, "Arg dbpath: %s", _STRING(dbpath)); /* Fall-through. */ case 2: convert_to_string_ex(server); php_error(E_WARNING, "Arg server: %s", _STRING(server)); /* Fall-through. */ case 1: convert_to_string_ex(query); php_error(E_WARNING, "Arg query: %s", _STRING(query)); break; } r = cdb_sql((argc>=2)?_STRING(server):"localhost", _STRING(query), (argc==3)?_STRING(dbpath):NULL); if(r == NULL) { /* TODO error handling */ RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, r, le_dbplus_relation); } /* }}} */ /* {{{ proto string dbplus_tcl(int sid, string script) Executes server side TCL code */ PHP_FUNCTION(dbplus_tcl) { zval **sid, **script; char *ret; int result_type; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &sid, &script) == FAILURE){ WRONG_PARAM_COUNT; } convert_to_long_ex(sid); convert_to_string_ex(script); cdb_tcl(_INT(sid),_STRING(script),&ret,&result_type); if(ret) { RETURN_STRING(ret,1); } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto int dbplus_tremove(int relation, array old [, array current]) Removes tuple and return new current tuple */ PHP_FUNCTION(dbplus_tremove) { zval **relation, **old, **current; enum errorcond stat = ERR_UNKNOWN; relf *r; tuple told, tcurr; int argc; argc = ZEND_NUM_ARGS(); if ( argc<2 || argc>3 || zend_get_parameters_ex(2, &relation, &old, ¤t) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); convert_to_array_ex(old); if(var2tuple(r, old, &told)) RETURN_LONG(ERR_UNKNOWN); stat=cdbTremove(r, &told, &tcurr); if((stat==ERR_NOERR) && (argc==3)) tuple2var(r, &tcurr, current); RETURN_LONG(stat); } /* }}} */ /* {{{ proto int dbplus_undo(int relation) ??? */ PHP_FUNCTION(dbplus_undo) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdb_undo(r)); } /* }}} */ /* {{{ proto int dbplus_undoprepare(int relation) ??? */ PHP_FUNCTION(dbplus_undoprepare) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdb_undoprepare(r)); } /* }}} */ /* {{{ proto int dbplus_unlockrel(int relation) Gives up write lock on relation */ PHP_FUNCTION(dbplus_unlockrel) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdb_unlockrel(r)); } /* }}} */ /* {{{ proto int dbplus_unselect(int relation) Removes constraint from relation */ PHP_FUNCTION(dbplus_unselect) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdb_unselect(r)); } /* }}} */ /* {{{ proto int dbplus_update(int relation, array old, array new) Updates specified tuple in relation */ PHP_FUNCTION(dbplus_update) { zval **relation, **old, **new; enum errorcond stat = ERR_UNKNOWN; relf *r; tuple told, tnew; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &relation, &old, &new) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); convert_to_array_ex(old); convert_to_array_ex(new); if(var2tuple(r, old, &told)) RETURN_LONG(ERR_UNKNOWN); if(var2tuple(r, new, &tnew)) RETURN_LONG(ERR_UNKNOWN); stat=cdb_update(r, &told, &tnew); RETURN_LONG(stat); } /* }}} */ /* {{{ proto int dbplus_xlockrel(int relation) Requests exclusive lock on relation */ PHP_FUNCTION(dbplus_xlockrel) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdb_xlockrel(r)); } /* }}} */ /* {{{ proto int dbplus_xunlockrel(int relation) Frees exclusive lock on relation */ PHP_FUNCTION(dbplus_xunlockrel) { relf *r; zval **relation; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &relation) == FAILURE){ WRONG_PARAM_COUNT; } DBPLUS_FETCH_RESOURCE(r, relation); RETURN_LONG(cdb_xunlockrel(r)); } /* }}} */ /* * Local variables: * tab-width: 2 * c-basic-offset: 2 * End: */ php-4.2.3/ext/dbplus/php_dbplus.h0100644000175200000240000000713407437364635015571 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ */ #ifndef PHP_DBPLUS_H #define PHP_DBPLUS_H extern zend_module_entry dbplus_module_entry; #define phpext_dbplus_ptr &dbplus_module_entry #ifdef PHP_WIN32 #define PHP_DBPLUS_API __declspec(dllexport) #else #define PHP_DBPLUS_API #endif PHP_MINIT_FUNCTION(dbplus); PHP_MSHUTDOWN_FUNCTION(dbplus); PHP_RINIT_FUNCTION(dbplus); PHP_RSHUTDOWN_FUNCTION(dbplus); PHP_MINFO_FUNCTION(dbplus); PHP_FUNCTION(dbplus_add); PHP_FUNCTION(dbplus_aql); PHP_FUNCTION(dbplus_chdir); PHP_FUNCTION(dbplus_close); PHP_FUNCTION(dbplus_curr); PHP_FUNCTION(dbplus_errno); PHP_FUNCTION(dbplus_errcode); PHP_FUNCTION(dbplus_find); PHP_FUNCTION(dbplus_first); PHP_FUNCTION(dbplus_flush); PHP_FUNCTION(dbplus_freealllocks); PHP_FUNCTION(dbplus_freelock); PHP_FUNCTION(dbplus_freerlocks); PHP_FUNCTION(dbplus_getlock); PHP_FUNCTION(dbplus_getunique); PHP_FUNCTION(dbplus_info); PHP_FUNCTION(dbplus_last); PHP_FUNCTION(dbplus_next); PHP_FUNCTION(dbplus_open); PHP_FUNCTION(dbplus_prev); PHP_FUNCTION(dbplus_rchperm); PHP_FUNCTION(dbplus_rcreate); PHP_FUNCTION(dbplus_rcrtexact); PHP_FUNCTION(dbplus_rcrtlike); PHP_FUNCTION(dbplus_resolve); PHP_FUNCTION(dbplus_restorepos); PHP_FUNCTION(dbplus_rkeys); PHP_FUNCTION(dbplus_ropen); PHP_FUNCTION(dbplus_rquery); PHP_FUNCTION(dbplus_rrename); PHP_FUNCTION(dbplus_rsecindex); PHP_FUNCTION(dbplus_runlink); PHP_FUNCTION(dbplus_rzap); PHP_FUNCTION(dbplus_savepos); PHP_FUNCTION(dbplus_setindex); PHP_FUNCTION(dbplus_setindexbynumber); PHP_FUNCTION(dbplus_sql); PHP_FUNCTION(dbplus_tcl); PHP_FUNCTION(dbplus_tremove); PHP_FUNCTION(dbplus_undo); PHP_FUNCTION(dbplus_undoprepare); PHP_FUNCTION(dbplus_unlockrel); PHP_FUNCTION(dbplus_unselect); PHP_FUNCTION(dbplus_update); PHP_FUNCTION(dbplus_xlockrel); PHP_FUNCTION(dbplus_xunlockrel); /* Declare any global variables you may need between the BEGIN and END macros here: ZEND_BEGIN_MODULE_GLOBALS(dbplus) int global_variable; ZEND_END_MODULE_GLOBALS(dbplus) */ /* In every function that needs to use variables in php_dbplus_globals, do call DBPLUSLS_FETCH(); after declaring other variables used by that function, and always refer to them as DBPLUSG(variable). You are encouraged to rename these macros something shorter, see examples in any other php module directory. */ #ifdef ZTS #define AG(v) TSRMG(dbplus_globals_id, php_dbplus_globals *, v) #else #define DBPLUSG(v) (dbplus_globals.v) #endif int le_dbplus_relation; int le_dbplus_tuple; void dbplus_destruct_relation(zend_rsrc_list_entry *rsrc TSRMLS_DC); void dbplus_destruct_tupel(zend_rsrc_list_entry *rsrc TSRMLS_DC); #endif /* PHP_DBPLUS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/0040755000175200000240000000000007535765574012550 5ustar zeevstaffphp-4.2.3/ext/dbx/tests/0040755000175200000240000000000007535765574013712 5ustar zeevstaffphp-4.2.3/ext/dbx/tests/001.phpt0100644000175200000240000000031707307161705015064 0ustar zeevstaff--TEST-- Check for dbx presence --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- dbx extension is availablephp-4.2.3/ext/dbx/tests/002.phpt0100644000175200000240000000226207434143657015075 0ustar zeevstaff--TEST-- DBX_CONSTANTS --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- okphp-4.2.3/ext/dbx/tests/003.phpt0100644000175200000240000000651007311666025015067 0ustar zeevstaff--TEST-- dbx_connect --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- connect using string ok connect using constant ok connect to non-existing database failed, so it's ok connect with false username/password combi failed, so it's ok persistent connect using string ok persistent connect using constant ok persistent connect to non-existing database failed, so it's ok persistent connect with false username/password combi failed, so it's ok too many parameters: connect failure works ok too few parameters: connect failure works ok multiple connects ok multiple connects (2nd fails on database-name) okphp-4.2.3/ext/dbx/tests/004.phpt0100644000175200000240000000132207307161705015064 0ustar zeevstaff--TEST-- dbx_close --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- close works ok close failure works ok too many parameters: close failure works ok too few parameters: close failure works okphp-4.2.3/ext/dbx/tests/005.phpt0100644000175200000240000000713307434143657015102 0ustar zeevstaff--TEST-- dbx_query --SKIPIF-- --POST-- --GET-- --FILE-- 64 k, as one of the test-fields // requires this (shouldn't this be a php.ini-entry??) if ($connection === DBX_SYBASECT) @dbx_query($dlo, "set textsize 100000"); // select query if ($dro=dbx_query($dlo, $sql_statement)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".$dro->data[$i]['field1'].".".strlen($dro->data[$i]['field2'])."\n"); } $dro->data[0]['id']='changed_value'; print($dro->data[0][0]."\n"); } // insert query if (dbx_query($dlo, $sql_insert_statement)) { print('insert-query: dbx_query works ok'."\n"); if ($dro=dbx_query($dlo, $sql_select_statement)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".strlen($dro->data[$i]['field2'])."\n"); } } } // update query if (dbx_query($dlo, $sql_update_statement)) { print('update-query: dbx_query works ok'."\n"); if ($dro=dbx_query($dlo, $sql_select_statement)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".strlen($dro->data[$i]['field2'])."\n"); } } } // delete query if (dbx_query($dlo, $sql_delete_statement)) { print('delete-query: dbx_query works ok'."\n"); if ($dro=dbx_query($dlo, $sql_select_statement)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".strlen($dro->data[$i]['field2'])."\n"); } } } // generate errors if (!@dbx_query(0, $sql_statement)) { print('wrong dbx_link_object: query failure works ok'."\n"); } if (!@dbx_query($dlo, $invalid_sql_statement)) { print('wrong sql-statement: query failure works ok'."\n"); } if (!@dbx_query($dlo, $sql_statement, DBX_RESULT_INDEX, "12many")) { print('too many parameters: query failure works ok'."\n"); } if (!@dbx_query($dlo)) { print('too few parameters: query failure works ok'."\n"); } dbx_close($dlo); } ?> --EXPECT-- 1.root.empty fields.0 10.abc.field2 contains single quote.3 20.cba.field2 contains double quote.3 30.bac.field2 contains >4k text.4591 40.100.field2 contains >64k text.70051 50.20.empty fields.0 60.20.empty fields.0 changed_value insert-query: dbx_query works ok 999999.temporary_record.0 update-query: dbx_query works ok 999999.temporary_record.11 delete-query: dbx_query works ok wrong dbx_link_object: query failure works ok wrong sql-statement: query failure works ok too many parameters: query failure works ok too few parameters: query failure works ok php-4.2.3/ext/dbx/tests/006.phpt0100644000175200000240000000377507434143657015113 0ustar zeevstaff--TEST-- dbx_error --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- query generated an error: dbx_error works ok query is valid: dbx_error works ok wrong dbx_link_object: dbx_error failure works ok too many parameters: dbx_error failure works ok too few parameters: dbx_error failure works ok php-4.2.3/ext/dbx/tests/007.phpt0100644000175200000240000000413007307161705015067 0ustar zeevstaff--TEST-- dbx_sort --SKIPIF-- --POST-- --GET-- --FILE-- rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n"); } if (dbx_sort($dro, $compare_function)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n"); } } if (!@dbx_sort(0, $compare_function)) { print('wrong dbx_result_object: dbx_sort failure works ok'."\n"); } if (dbx_sort($dro, $nonexisting_compare_function)) { print('nonexisting compare function: dbx_sort will NOT complain'."\n"); } if (dbx_sort($dro, $invalid_compare_function)) { print('invalid compare function: dbx_sort will NOT complain'."\n"); } if (!@dbx_sort($dro, $compare_function, "12many")) { print('too many parameters: dbx_sort failure works ok'."\n"); } if (!@dbx_sort($dro)) { print('too few parameters: dbx_sort failure works ok'."\n"); } dbx_close($dlo); } ?> --EXPECT-- 10.abc 20.cba 30.bac 40.100 50.20 60.20 40.100 50.20 60.20 10.abc 30.bac 20.cba wrong dbx_result_object: dbx_sort failure works ok nonexisting compare function: dbx_sort will NOT complain invalid compare function: dbx_sort will NOT complain too many parameters: dbx_sort failure works ok too few parameters: dbx_sort failure works okphp-4.2.3/ext/dbx/tests/008.phpt0100644000175200000240000000755507307161705015106 0ustar zeevstaff--TEST-- dbx_compare --SKIPIF-- --POST-- --GET-- --FILE-- rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n"); } if (dbx_sort($dro, $compare_function_1)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n"); } } if (dbx_sort($dro, $compare_function_2)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n"); } } if (dbx_sort($dro, $compare_function_3)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n"); } } if (dbx_sort($dro, $compare_function_4)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n"); } } if (dbx_sort($dro, $compare_function_5)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n"); } } if (dbx_sort($dro, $compare_function_6)) { for ($i=0; $i<$dro->rows; ++$i) { print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n"); } } if (!@dbx_compare($a, $b, "fieldname")) { print('wrong parameters: dbx_compare failure works ok'."\n"); } if (!@dbx_compare($a, $b, "fieldname", DBX_CMP_NATIVE, "12many")) { print('too many parameters: dbx_compare failure works ok'."\n"); } if (!@dbx_compare($a, $b)) { print('too few parameters: dbx_compare failure works ok'."\n"); } dbx_close($dlo); } ?> --EXPECT-- 10.abc 20.cba 30.bac 40.100 50.20 60.20 40.100 50.20 60.20 10.abc 30.bac 20.cba 20.cba 30.bac 10.abc 50.20 60.20 40.100 40.100 60.20 50.20 10.abc 30.bac 20.cba 20.cba 30.bac 10.abc 60.20 50.20 40.100 40.100 50.20 60.20 10.abc 30.bac 20.cba 10.0 20.0 30.0 50.20 60.20 40.100 wrong parameters: dbx_compare failure works ok too many parameters: dbx_compare failure works ok too few parameters: dbx_compare failure works okphp-4.2.3/ext/dbx/tests/dbx_test.p0100644000175200000240000000305007434143657015670 0ustar zeevstaffphp-4.2.3/ext/dbx/tests/dbx_test.pgsql.script0100644000175200000240000022544607312401343020061 0ustar zeevstaffcreate database dbx_test; \cdbx_test create table tbl ( id int NOT NULL default 0, parentid int NOT NULL default 0, description varchar(255) NULL, field1 text NULL, field2 text NULL, field3 text NULL, field4 text NULL, field5 text NULL, creation_date int8 NULL, PRIMARY KEY (id) ); create index parentid on tbl (parentid); create index description on tbl (description); create index creation_date on tbl (creation_date); insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values (1, 0, 'root', 'empty fields', '', '', '', '', 20010605110724 ); insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values (10, 1, 'abc', 'field2 contains single quote', 'x''x', '', '', '', 20010605110724); insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values (20, 1, 'cba', 'field2 contains double quote', 'x"x', '', '', '', 20010605110724); insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values (30, 1, 'bac', 'field2 contains >4k text', 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl', '', '', '', 20010605110724); insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values (40, 1, '100', 'field2 contains >64k text', 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl', '', '', '', 20010605110724); insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values (50, 1, '20', 'empty fields', '', '', '', '', 20010605110724); insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values (60, 1, '20', 'empty fields', '', '', '', '', 20010605110724); create user dbx_testuser with password 'dbx_testpassword'; grant SELECT,INSERT,UPDATE,DELETE on tbl to dbx_testuser; php-4.2.3/ext/dbx/tests/dbx_test.script0100644000175200000240000022435107314104547016736 0ustar zeevstaff create database if not exists dbx_test; use dbx_test; grant SELECT,INSERT,UPDATE,DELETE on dbx_test.* to dbx_testuser@localhost identified by 'dbx_testpassword'; # info tables drop table if exists tbl; create table tbl ( id int(10) NOT NULL default 0, parentid int(10) NOT NULL default 0, description varchar(255) NULL, field1 mediumtext NULL, field2 mediumtext NULL, field3 mediumtext NULL, field4 mediumtext NULL, field5 mediumtext NULL, creation_date timestamp NULL, PRIMARY KEY (id), KEY parentid (parentid), KEY description (description), KEY creation_date (creation_date) ); insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values (1, 0, 'root', 'empty fields', '', '', '', '', 20010605110724), (10, 1, 'abc', 'field2 contains single quote', 'x''x', '', '', '', 20010605110724), (20, 1, 'cba', 'field2 contains double quote', 'x"x', '', '', '', 20010605110724), (30, 1, 'bac', 'field2 contains >4k text', 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl', '', '', '', 20010605110724), (40, 1, '100', 'field2 contains >64k text', 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl', '', '', '', 20010605110724), (50, 1, '20', 'empty fields', '', '', '', '', 20010605110724), (60, 1, '20', 'empty fields', '', '', '', '', 20010605110724) ;php-4.2.3/ext/dbx/CREDITS0100644000175200000240000000010707440153445013542 0ustar zeevstaffdbx (database abstraction) Marc Boeren, Rui Hirokawa, Frank M. Kromann php-4.2.3/ext/dbx/INSTALL0100644000175200000240000000115207314104547013553 0ustar zeevstaff If you downloaded this separately, you can place the dbx folder in the php-source-folders under the ext/ folder. Be sure to use buildconf to rebuild the configure script. Linux: Compile php with the --enable-dbx switch Windows: This should set all includepaths to the right relative folders. Open the .dsp and compile. You could also add this project to the php_modules project. It generates a php_dbx.dll in your extensions folder, and you must enable it in your php.ini file. When you run phpinfo(), dbx-support should be visible in the resulting table. Good luck and enjoy! Marc Boeren march 16th, 2001 php-4.2.3/ext/dbx/Makefile.in0100644000175200000240000000032107434143657014574 0ustar zeevstaff LTLIBRARY_NAME = libdbx.la LTLIBRARY_SOURCES = dbx.c dbx_mysql.c dbx_odbc.c dbx_pgsql.c dbx_mssql.c dbx_fbsql.c dbx_oci8.c dbx_sybasect.c LTLIBRARY_SHARED_NAME = dbx.la include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/dbx/config.m40100644000175200000240000000034407401753424014234 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.2 2025/11/30 18:59:32 sniper Exp $ dnl PHP_ARG_ENABLE(dbx,whether to enable dbx support, [ --enable-dbx Enable dbx]) if test "$PHP_DBX" != "no"; then PHP_EXTENSION(dbx, $ext_shared) fi php-4.2.3/ext/dbx/dbx.c0100644000175200000240000010277307517257233013464 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx.c,v 1.34.2.3 2025/07/23 13:48:11 sas Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "php_dbx.h" #include "ext/standard/info.h" /* defines for supported databases */ #define DBX_UNKNOWN 0 #define DBX_MYSQL 1 #define DBX_ODBC 2 #define DBX_PGSQL 3 #define DBX_MSSQL 4 #define DBX_FBSQL 5 #define DBX_OCI8 6 #define DBX_SYBASECT 7 /* includes for supported databases */ #include "dbx.h" #include "dbx_mysql.h" #include "dbx_odbc.h" #include "dbx_pgsql.h" #include "dbx_mssql.h" #include "dbx_fbsql.h" #include "dbx_oci8.h" #include "dbx_sybasect.h" /* support routines */ int module_exists(char *module_name) { zend_module_entry *zme; int r; r = zend_hash_find(&module_registry, module_name, strlen(module_name)+1, (void **) &zme); return r==0?1:0; } int module_identifier_exists(long module_identifier) { switch (module_identifier) { case DBX_MYSQL: return module_exists("mysql"); case DBX_ODBC: return module_exists("odbc"); case DBX_PGSQL: return module_exists("pgsql"); case DBX_MSSQL: return module_exists("mssql"); case DBX_FBSQL: return module_exists("fbsql"); case DBX_OCI8: return module_exists("oci8"); case DBX_SYBASECT: return module_exists("sybase_ct"); } return 0; } int get_module_identifier(char *module_name) { if (!strcmp("mysql", module_name)) return DBX_MYSQL; if (!strcmp("odbc", module_name)) return DBX_ODBC; if (!strcmp("pgsql", module_name)) return DBX_PGSQL; if (!strcmp("mssql", module_name)) return DBX_MSSQL; if (!strcmp("fbsql", module_name)) return DBX_FBSQL; if (!strcmp("oci8", module_name)) return DBX_OCI8; if (!strcmp("sybase_ct", module_name)) return DBX_SYBASECT; return DBX_UNKNOWN; } int split_dbx_handle_object(zval **dbx_object, zval ***pdbx_handle, zval ***pdbx_module, zval ***pdbx_database) { convert_to_object_ex(dbx_object); if (zend_hash_find(Z_OBJPROP_PP(dbx_object), "handle", 7, (void **) pdbx_handle)==FAILURE || zend_hash_find(Z_OBJPROP_PP(dbx_object), "module", 7, (void **) pdbx_module)==FAILURE || zend_hash_find(Z_OBJPROP_PP(dbx_object), "database", 9, (void **) pdbx_database)==FAILURE) { return 0; } return 1; } /* from dbx.h, to be used in support-files (dbx_mysql.c etc...) */ void dbx_call_any_function(INTERNAL_FUNCTION_PARAMETERS, char *function_name, zval **returnvalue, int number_of_arguments, zval ***params) { zval *zval_function_name; MAKE_STD_ZVAL(zval_function_name); ZVAL_STRING(zval_function_name, function_name, 1); if (call_user_function_ex(EG(function_table), NULL, zval_function_name, returnvalue, number_of_arguments, params, 0, NULL TSRMLS_CC) == FAILURE) { zend_error(E_ERROR, "function '%s' not found", Z_STRVAL_P(zval_function_name)); } zval_dtor(zval_function_name); /* to free stringvalue memory */ FREE_ZVAL(zval_function_name); } /* switch_dbx functions declarations * each must be supported in the dbx_module files as dbx_module_function, * e.g. switch_dbx_connect expects a dbx_mysql_connect in de dbx_mysql files * all params except the dbx_module param are passed on * each must return the expected zval *'s in the rv parameter, which are passed on unmodified * do NOT use the return_value parameter from INTERNAL_FUNCTION_PARAMETERS * you can additionally return 0 or 1 for failure or success which will also be returned by the switches */ int switch_dbx_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns connection handle as resource on success or 0 as long on failure */ int switch_dbx_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns persistent connection handle as resource on success or 0 as long on failure */ int switch_dbx_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns 1 as long on success or 0 as long on failure */ int switch_dbx_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns 1 as long or result identifier as resource on success or 0 as long on failure */ int switch_dbx_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns column-count as long on success or 0 as long on failure */ int switch_dbx_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns column-name as string on success or 0 as long on failure */ int switch_dbx_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns column-type as string on success or 0 as long on failure */ int switch_dbx_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int switch_dbx_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns string */ /* Every user visible function must have an entry in dbx_functions[]. */ function_entry dbx_functions[] = { ZEND_FE(dbx_connect, NULL) ZEND_FE(dbx_close, NULL) ZEND_FE(dbx_query, NULL) ZEND_FE(dbx_error, NULL) ZEND_FE(dbx_sort, NULL) ZEND_FE(dbx_compare, NULL) {NULL, NULL, NULL} /* Must be the last line in dbx_functions[] */ }; zend_module_entry dbx_module_entry = { STANDARD_MODULE_HEADER, "dbx", dbx_functions, ZEND_MINIT(dbx), ZEND_MSHUTDOWN(dbx), NULL, /*ZEND_RINIT(dbx), Replace with NULL if there's nothing to do at request start */ NULL, /*ZEND_RSHUTDOWN(dbx), Replace with NULL if there's nothing to do at request end */ ZEND_MINFO(dbx), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_DBX ZEND_GET_MODULE(dbx) #endif ZEND_MINIT_FUNCTION(dbx) { REGISTER_LONG_CONSTANT("DBX_MYSQL", DBX_MYSQL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_ODBC", DBX_ODBC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_PGSQL", DBX_PGSQL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_MSSQL", DBX_MSSQL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_FBSQL", DBX_FBSQL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_OCI8", DBX_OCI8, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_SYBASECT", DBX_SYBASECT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_PERSISTENT", DBX_PERSISTENT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_RESULT_INFO", DBX_RESULT_INFO, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_RESULT_INDEX", DBX_RESULT_INDEX, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_RESULT_ASSOC", DBX_RESULT_ASSOC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_CMP_NATIVE", DBX_CMP_NATIVE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_CMP_TEXT", DBX_CMP_TEXT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_CMP_NUMBER", DBX_CMP_NUMBER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_CMP_ASC", DBX_CMP_ASC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_CMP_DESC", DBX_CMP_DESC, CONST_CS | CONST_PERSISTENT); return SUCCESS; } ZEND_MSHUTDOWN_FUNCTION(dbx) { return SUCCESS; } /* Remove if there's nothing to do at request start */ /*ZEND_RINIT_FUNCTION(dbx) { return SUCCESS; }*/ /* Remove if there's nothing to do at request end */ /*ZEND_RSHUTDOWN_FUNCTION(dbx) { return SUCCESS; }*/ ZEND_MINFO_FUNCTION(dbx) { php_info_print_table_start(); php_info_print_table_row(2, "dbx support", "enabled"); php_info_print_table_row(2, "dbx version", "1.0.0"); php_info_print_table_row(2, "supported databases", "MySQL\nODBC\nPostgreSQL\nMicrosoft SQL Server\nFrontBase\nOracle 8 (not really)\nSybase-CT"); php_info_print_table_end(); } /* actual implementation of the dbx functions */ /* {{{ proto dbx_link_object dbx_connect(string module_name, string host, string db, string username, string password [, bool persistent]) Returns a dbx_link_object on success and returns 0 on failure */ ZEND_FUNCTION(dbx_connect) { int number_of_arguments=5; zval **arguments[6]; int result; long module_identifier; zval *dbx_module; zval *db_name; zval *rv_dbx_handle; int persistent=0; if ( !(ZEND_NUM_ARGS()==number_of_arguments+1 || ZEND_NUM_ARGS()==number_of_arguments) || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), arguments) == FAILURE) { WRONG_PARAM_COUNT; } if (ZEND_NUM_ARGS()==number_of_arguments+1) { convert_to_long_ex(arguments[5]); if (Z_LVAL_PP(arguments[5])!=0) persistent=1; } if (Z_TYPE_PP(arguments[0]) == IS_LONG) { if (!module_identifier_exists(Z_LVAL_PP(arguments[0]))) { zend_error(E_WARNING, "dbx: module '%ld' not loaded or not supported.\n", Z_LVAL_PP(arguments[0])); return; } module_identifier = Z_LVAL_PP(arguments[0]); } else { convert_to_string_ex(arguments[0]); if (!module_exists(Z_STRVAL_PP(arguments[0]))) { zend_error(E_WARNING, "dbx: module '%s' not loaded.\n", Z_STRVAL_PP(arguments[0])); return; } module_identifier=get_module_identifier(Z_STRVAL_PP(arguments[0])); if (!module_identifier) { zend_error(E_WARNING, "dbx: unsupported module '%s'.\n", Z_STRVAL_PP(arguments[0])); return; } } MAKE_STD_ZVAL(dbx_module); ZVAL_LONG(dbx_module, module_identifier); MAKE_STD_ZVAL(rv_dbx_handle); ZVAL_LONG(rv_dbx_handle, 0); convert_to_string_ex(arguments[1]); convert_to_string_ex(arguments[2]); convert_to_string_ex(arguments[3]); convert_to_string_ex(arguments[4]); MAKE_STD_ZVAL(db_name); ZVAL_STRING(db_name, Z_STRVAL_PP(arguments[2]), 1); if (persistent) { result = switch_dbx_pconnect(&rv_dbx_handle, arguments[1], arguments[2], arguments[3], arguments[4], INTERNAL_FUNCTION_PARAM_PASSTHRU, &dbx_module); } else { result = switch_dbx_connect(&rv_dbx_handle, arguments[1], arguments[2], arguments[3], arguments[4], INTERNAL_FUNCTION_PARAM_PASSTHRU, &dbx_module); } if (!result) { FREE_ZVAL(dbx_module); zval_dtor(db_name); /* to free stringvalue memory */ FREE_ZVAL(db_name); FREE_ZVAL(rv_dbx_handle); RETURN_LONG(0); } if (object_init(return_value) != SUCCESS) { zend_error(E_ERROR, "dbx: unable to create resulting object..."); FREE_ZVAL(dbx_module); zval_dtor(db_name); /* to free stringvalue memory */ FREE_ZVAL(db_name); FREE_ZVAL(rv_dbx_handle); RETURN_LONG(0); } zend_hash_update(Z_OBJPROP_P(return_value), "handle", 7, (void *)&(rv_dbx_handle), sizeof(zval *), NULL); zend_hash_update(Z_OBJPROP_P(return_value), "module", 7, (void *)&(dbx_module), sizeof(zval *), NULL); zend_hash_update(Z_OBJPROP_P(return_value), "database", 9, (void *)&(db_name), sizeof(zval *), NULL); } /* }}} */ /* {{{ proto bool dbx_close(dbx_link_object dbx_link) Returns success or failure */ ZEND_FUNCTION(dbx_close) { int number_of_arguments=1; zval **arguments[1]; int result; zval **dbx_handle; zval **dbx_module; zval **dbx_database; zval *rv_success; if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) { WRONG_PARAM_COUNT; } if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database)) { zend_error(E_WARNING, "dbx_close: not a valid dbx_handle-object..."); RETURN_LONG(0); } MAKE_STD_ZVAL(rv_success); ZVAL_LONG(rv_success, 0); result = switch_dbx_close(&rv_success, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module); result = (result && Z_LVAL_P(rv_success))?1:0; FREE_ZVAL(rv_success); RETURN_LONG(result?1:0); } /* }}} */ /* {{{ proto dbx_result_object dbx_query(dbx_link_object dbx_link, string sql_statement [, long flags]) Returns a dbx_link_object on success and returns 0 on failure */ ZEND_FUNCTION(dbx_query) { int min_number_of_arguments=2; int number_of_arguments=3; zval **arguments[3]; int result; zval **dbx_handle; zval **dbx_module; zval **dbx_database; zval *rv_result_handle; zval *rv_column_count; long col_index; long row_count; zval *info; long info_flags; zval *data; zval **row_ptr; zval **inforow_ptr; if (ZEND_NUM_ARGS()number_of_arguments || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), arguments) == FAILURE) { WRONG_PARAM_COUNT; } if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database)) { zend_error(E_WARNING, "dbx_query: not a valid dbx_handle-object..."); RETURN_LONG(0); } /* default values */ info_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC; /* parameter overrides */ if (ZEND_NUM_ARGS()>2) { convert_to_long_ex(arguments[2]); info_flags = Z_LVAL_PP(arguments[2]); /* fieldnames are needed for association! */ if (info_flags & DBX_RESULT_ASSOC) { info_flags |= DBX_RESULT_INFO; } } MAKE_STD_ZVAL(rv_result_handle); ZVAL_LONG(rv_result_handle, 0); convert_to_string_ex(arguments[1]); result = switch_dbx_query(&rv_result_handle, dbx_handle, dbx_database, arguments[1], INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module); /* boolean return value means either failure for any query or success for queries that don't return anything */ if (!result || (rv_result_handle && Z_TYPE_P(rv_result_handle)==IS_BOOL)) { result = (result && Z_LVAL_P(rv_result_handle))?1:0; FREE_ZVAL(rv_result_handle); RETURN_LONG(result?1:0); } /* if you get here, the query succeeded and returned results, so we'll return them * rv_result_handle holds a resource */ /* init return_value as object (of rows) */ if (object_init(return_value) != SUCCESS) { zend_error(E_ERROR, "dbx_query: unable to create resulting object..."); FREE_ZVAL(rv_result_handle); RETURN_LONG(0); } /* add result_handle property to return_value */ zend_hash_update(Z_OBJPROP_P(return_value), "handle", 7, (void *)&(rv_result_handle), sizeof(zval *), NULL); /* init info property as array and add to return_value as a property */ if (info_flags & DBX_RESULT_INFO) { MAKE_STD_ZVAL(info); if (array_init(info) != SUCCESS) { zend_error(E_ERROR, "dbx_query: unable to create info-array for results..."); FREE_ZVAL(info); RETURN_LONG(0); } zend_hash_update(Z_OBJPROP_P(return_value), "info", 5, (void *)&(info), sizeof(zval *), NULL); } /* init data property as array and add to return_value as a property */ MAKE_STD_ZVAL(data); if (array_init(data) != SUCCESS) { zend_error(E_ERROR, "dbx_query: unable to create data-array for results..."); FREE_ZVAL(data); RETURN_LONG(0); } zend_hash_update(Z_OBJPROP_P(return_value), "data", 5, (void *)&(data), sizeof(zval *), NULL); /* get columncount and add to returnvalue as property */ MAKE_STD_ZVAL(rv_column_count); ZVAL_LONG(rv_column_count, 0); result = switch_dbx_getcolumncount(&rv_column_count, &rv_result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module); if (!result) { zend_error(E_ERROR, "dbx_query: get column_count failed..."); FREE_ZVAL(rv_column_count); RETURN_LONG(0); } zend_hash_update(Z_OBJPROP_P(return_value), "cols", 5, (void *)&(rv_column_count), sizeof(zval *), NULL); /* fill the info array with columnnames and types (indexed and assoc) */ if (info_flags & DBX_RESULT_INFO) { zval *info_row_name; zval *info_row_type; MAKE_STD_ZVAL(info_row_name); MAKE_STD_ZVAL(info_row_type); if (array_init(info_row_name) != SUCCESS) { zend_error(E_ERROR, "dbx_query: unable to create info_row_name-array for results..."); FREE_ZVAL(info_row_name); FREE_ZVAL(info_row_type); RETURN_LONG(0); } if (array_init(info_row_type) != SUCCESS) { zend_error(E_ERROR, "dbx_query: unable to create info_row_type-array for results..."); FREE_ZVAL(info_row_name); FREE_ZVAL(info_row_type); RETURN_LONG(0); } for (col_index=0; col_indexrefcount+=1; (*actual_ptr)->is_ref=1; zend_hash_update(Z_ARRVAL_PP(row_ptr), Z_STRVAL_PP(columnname_ptr), Z_STRLEN_PP(columnname_ptr) + 1, actual_ptr, sizeof(zval *), NULL); } } ++row_count; } else { FREE_ZVAL(rv_row); } } /* add row_count property */ add_property_long(return_value, "rows", row_count); } /* }}} */ /* {{{ proto void dbx_error(dbx_link_object dbx_link) Returns success or failure */ ZEND_FUNCTION(dbx_error) { int number_of_arguments=1; zval **arguments[1]; int result; zval **dbx_handle; zval **dbx_module; zval **dbx_database; zval *rv_errormsg; if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) { WRONG_PARAM_COUNT; } if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database)) { zend_error(E_WARNING, "dbx_error: not a valid dbx_handle-object..."); RETURN_LONG(0); } MAKE_STD_ZVAL(rv_errormsg); ZVAL_LONG(rv_errormsg, 0); result = switch_dbx_error(&rv_errormsg, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module); if (!result) { FREE_ZVAL(rv_errormsg); RETURN_STRING("", 1); } MOVE_RETURNED_TO_RV(&return_value, rv_errormsg); } /* }}} */ /* * dbx functions that are database independent... like sorting result_objects! */ /* {{{ proto int dbx_compare(array row_x, array row_y, string columnname [, int flags]) Returns row_y[columnname] - row_x[columnname], converted to -1, 0 or 1 */ ZEND_FUNCTION(dbx_compare) { int min_number_of_arguments=3; int max_number_of_arguments=4; int number_of_arguments=-1; long comparison_direction=DBX_CMP_ASC; long comparison_type=DBX_CMP_NATIVE; double dtemp; long ltemp; zval **arguments[4]; zval **zv_a; zval **zv_b; int result=0; number_of_arguments=ZEND_NUM_ARGS(); if (number_of_argumentsmax_number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) { WRONG_PARAM_COUNT; } if (Z_TYPE_PP(arguments[0]) != IS_ARRAY || Z_TYPE_PP(arguments[1]) != IS_ARRAY) { zend_error(E_WARNING, "Wrong argument type for compare"); RETURN_LONG(0); } convert_to_string_ex(arguments[2]); /* field name */ comparison_type = DBX_CMP_NATIVE; comparison_direction = DBX_CMP_ASC; if (number_of_arguments>3) { convert_to_long_ex(arguments[3]); /* comparison type and direction*/ /* direction */ if (Z_LVAL_PP(arguments[3]) & DBX_CMP_DESC) { comparison_direction=DBX_CMP_DESC; } if (Z_LVAL_PP(arguments[3]) & DBX_CMP_ASC) { comparison_direction=DBX_CMP_ASC; } /* type */ if (Z_LVAL_PP(arguments[3]) & DBX_CMP_NUMBER) { comparison_type=DBX_CMP_NUMBER; } if (Z_LVAL_PP(arguments[3]) & DBX_CMP_TEXT) { comparison_type=DBX_CMP_TEXT; } if (Z_LVAL_PP(arguments[3]) & DBX_CMP_NATIVE) { comparison_type=DBX_CMP_NATIVE; } } if (zend_hash_find(Z_ARRVAL_PP(arguments[0]), Z_STRVAL_PP(arguments[2]), Z_STRLEN_PP(arguments[2])+1, (void **) &zv_a)==FAILURE || zend_hash_find(Z_ARRVAL_PP(arguments[1]), Z_STRVAL_PP(arguments[2]), Z_STRLEN_PP(arguments[2])+1, (void **) &zv_b)==FAILURE) { zend_error(E_WARNING, "Field '%s' not available in result-object", Z_STRVAL_PP(arguments[2])); RETURN_LONG(0); } switch (comparison_type) { case DBX_CMP_TEXT: convert_to_string_ex(zv_a); convert_to_string_ex(zv_b); break; case DBX_CMP_NUMBER: convert_to_double_ex(zv_a); convert_to_double_ex(zv_b); break; } switch (Z_TYPE_PP(zv_a)) { case IS_NULL: result=0; break; case IS_BOOL: case IS_LONG: case IS_CONSTANT: ltemp = Z_LVAL_PP(zv_a) - Z_LVAL_PP(zv_b); result = (ltemp==0?0: (ltemp>0?1:-1)); break; case IS_DOUBLE: dtemp = (Z_DVAL_PP(zv_a) - Z_DVAL_PP(zv_b)); result = (dtemp==0?0: (dtemp>0?1:-1)); break; case IS_STRING: ltemp = strcmp(Z_STRVAL_PP(zv_a), Z_STRVAL_PP(zv_b)); result = (ltemp==0?0: (ltemp>0?1:-1)); break; default: result=0; } if (comparison_direction==DBX_CMP_DESC) RETURN_LONG(-result); RETURN_LONG(result); } /* }}} */ /* {{{ proto int dbx_sort(object dbx_result, string compare_function_name) Returns 0 on failure, 1 on success */ ZEND_FUNCTION(dbx_sort) { int number_of_arguments=2; zval **arguments[2]; zval **zval_data; zval *returned_zval; int result=0; if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) { WRONG_PARAM_COUNT; } if (Z_TYPE_PP(arguments[0]) != IS_OBJECT || Z_TYPE_PP(arguments[1]) != IS_STRING) { zend_error(E_WARNING, "Wrong argument type for sort"); RETURN_LONG(0); } if (zend_hash_find(Z_OBJPROP_PP(arguments[0]), "data", 5, (void **) &zval_data)==FAILURE || Z_TYPE_PP(zval_data) != IS_ARRAY) { zend_error(E_WARNING, "Wrong argument type for sort"); RETURN_LONG(0); } arguments[0] = zval_data; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "usort", &returned_zval, number_of_arguments, arguments); zval_ptr_dtor(&returned_zval); RETURN_LONG(1); } /* }}} */ /***********************************/ /* * switch_dbx functions */ int switch_dbx_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) { /* returns connection handle as resource on success or 0 as long on failure */ switch (Z_LVAL_PP(dbx_module)) { case DBX_MYSQL: return dbx_mysql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_ODBC: return dbx_odbc_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_PGSQL: return dbx_pgsql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_MSSQL: return dbx_mssql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_FBSQL: return dbx_fbsql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_OCI8: zend_error(E_WARNING, "dbx_connect: OCI8 extension is still highly experimental!"); return dbx_oci8_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_SYBASECT: return dbx_sybasect_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_connect: not supported in this module"); return 0; } int switch_dbx_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) { /* returns persistent connection handle as resource on success or 0 as long on failure */ switch (Z_LVAL_PP(dbx_module)) { case DBX_MYSQL: return dbx_mysql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_ODBC: return dbx_odbc_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_PGSQL: return dbx_pgsql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_MSSQL: return dbx_mssql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_FBSQL: return dbx_fbsql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_OCI8: zend_error(E_WARNING, "dbx_pconnect: OCI8 extension is still highly experimental!"); return dbx_oci8_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_SYBASECT: return dbx_sybasect_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_pconnect: not supported in this module"); return 0; } int switch_dbx_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) { /* returns 1 as long on success or 0 as long on failure */ switch (Z_LVAL_PP(dbx_module)) { case DBX_MYSQL: return dbx_mysql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_ODBC: return dbx_odbc_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_PGSQL: return dbx_pgsql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_MSSQL: return dbx_mssql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_FBSQL: return dbx_fbsql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_OCI8: return dbx_oci8_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_SYBASECT: return dbx_sybasect_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_close: not supported in this module"); return 0; } int switch_dbx_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) { /* returns 1 as long or result identifier as resource on success or 0 as long on failure */ switch (Z_LVAL_PP(dbx_module)) { case DBX_MYSQL: return dbx_mysql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_ODBC: return dbx_odbc_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_PGSQL: return dbx_pgsql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_MSSQL: return dbx_mssql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_FBSQL: return dbx_fbsql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_OCI8: return dbx_oci8_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_SYBASECT: return dbx_sybasect_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_query: not supported in this module"); return 0; } int switch_dbx_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) { /* returns column-count as long on success or 0 as long on failure */ switch (Z_LVAL_PP(dbx_module)) { case DBX_MYSQL: return dbx_mysql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_ODBC: return dbx_odbc_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_PGSQL: return dbx_pgsql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_MSSQL: return dbx_mssql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_FBSQL: return dbx_fbsql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_OCI8: return dbx_oci8_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_SYBASECT: return dbx_sybasect_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_getcolumncount: not supported in this module"); return 0; } int switch_dbx_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) { /* returns column-name as string on success or 0 as long on failure */ switch (Z_LVAL_PP(dbx_module)) { case DBX_MYSQL: return dbx_mysql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_ODBC: return dbx_odbc_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_PGSQL: return dbx_pgsql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_MSSQL: return dbx_mssql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_FBSQL: return dbx_fbsql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_OCI8: return dbx_oci8_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_SYBASECT: return dbx_sybasect_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_getcolumnname: not supported in this module"); return 0; } int switch_dbx_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) { /* returns column-type as string on success or 0 as long on failure */ switch (Z_LVAL_PP(dbx_module)) { case DBX_MYSQL: return dbx_mysql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_ODBC: return dbx_odbc_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_PGSQL: return dbx_pgsql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_MSSQL: return dbx_mssql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_FBSQL: return dbx_fbsql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_OCI8: return dbx_oci8_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_SYBASECT: return dbx_sybasect_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_getcolumntype: not supported in this module"); return 0; } int switch_dbx_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) { /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ switch (Z_LVAL_PP(dbx_module)) { case DBX_MYSQL: return dbx_mysql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_ODBC: return dbx_odbc_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_PGSQL: return dbx_pgsql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_MSSQL: return dbx_mssql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_FBSQL: return dbx_fbsql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_OCI8: return dbx_oci8_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_SYBASECT: return dbx_sybasect_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_getrow: not supported in this module"); return 0; } int switch_dbx_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) { /* returns string */ switch (Z_LVAL_PP(dbx_module)) { case DBX_MYSQL: return dbx_mysql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_ODBC: return dbx_odbc_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_PGSQL: return dbx_pgsql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_MSSQL: return dbx_mssql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_FBSQL: return dbx_fbsql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_OCI8: return dbx_oci8_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); case DBX_SYBASECT: return dbx_sybasect_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_error: not supported in this module"); return 0; } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx.dsp0100644000175200000240000001365707434143657014034 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="dbx" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=dbx - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "dbx.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "dbx.mak" CFG="dbx - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "dbx - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "dbx - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "dbx - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_dbx" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "DBX_EXPORTS" /D "COMPILE_DL_DBX" /D ZTS=1 /D HAVE_LIBINTL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dbx.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # ADD LINK32 php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dbx.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" !ELSEIF "$(CFG)" == "dbx - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_dbx" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DBX_EXPORTS" /D "COMPILE_DL_DBX" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBINTL=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"../../Debug_TS/php_dbx.dll" /libpath:"..\..\Debug_TS" # ADD LINK32 php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"../../Debug_TS/php_dbx.dll" /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "dbx - Win32 Release_TS" # Name "dbx - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\dbx.c # End Source File # Begin Source File SOURCE=.\dbx_fbsql.c # End Source File # Begin Source File SOURCE=.\dbx_mssql.c # End Source File # Begin Source File SOURCE=.\dbx_mysql.c # End Source File # Begin Source File SOURCE=.\dbx_oci8.c # End Source File # Begin Source File SOURCE=.\dbx_odbc.c # End Source File # Begin Source File SOURCE=.\dbx_pgsql.c # End Source File # Begin Source File SOURCE=.\dbx_sybasect.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\dbx.h # End Source File # Begin Source File SOURCE=.\dbx_fbsql.h # End Source File # Begin Source File SOURCE=.\dbx_mssql.h # End Source File # Begin Source File SOURCE=.\dbx_mysql.h # End Source File # Begin Source File SOURCE=.\dbx_oci8.h # End Source File # Begin Source File SOURCE=.\dbx_odbc.h # End Source File # Begin Source File SOURCE=.\dbx_pgsql.h # End Source File # Begin Source File SOURCE=.\dbx_sybasect.h # End Source File # Begin Source File SOURCE=.\php_dbx.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project php-4.2.3/ext/dbx/dbx.h0100644000175200000240000000442707405423101013447 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx.h,v 1.9 2025/12/11 15:29:05 sebastian Exp $ */ #ifndef ZEND_DBX_H #define ZEND_DBX_H #ifndef INIT_FUNC_ARGS #include "zend_modules.h" #endif #include "php.h" #define DBX_PERSISTENT (1<<0) #define DBX_RESULT_INFO (1<<0) #define DBX_RESULT_INDEX (1<<1) #define DBX_RESULT_ASSOC (1<<2) #define DBX_CMP_NATIVE (1<<0) #define DBX_CMP_TEXT (1<<1) #define DBX_CMP_NUMBER (1<<2) #define DBX_CMP_ASC (1<<3) #define DBX_CMP_DESC (1<<4) #define MOVE_RETURNED_TO_RV(rv, returned_zval) { **rv = *returned_zval; zval_copy_ctor(*rv); zval_ptr_dtor(&returned_zval); } void dbx_call_any_function(INTERNAL_FUNCTION_PARAMETERS, char *function_name, zval **returnvalue, int number_of_arguments, zval ***params); #endif /* ZEND_DBX_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_fbsql.c0100644000175200000240000002261207405423101014625 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | | Frank M. Kromann | +----------------------------------------------------------------------+ */ /* $Id: dbx_fbsql.c,v 1.6 2025/12/11 15:29:05 sebastian Exp $ */ #include "dbx.h" #include "dbx_fbsql.h" #define FBSQL_ASSOC 1<<0 #define FBSQL_NUM 1<<1 int dbx_fbsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; zval *select_db_zval=NULL; arguments[0]=host; arguments[1]=username; arguments[2]=password; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_connect", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } number_of_arguments=2; arguments[0]=db; arguments[1]=&returned_zval; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_select_db", &select_db_zval, number_of_arguments, arguments); if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) { if (select_db_zval) zval_ptr_dtor(&select_db_zval); /* also close connection */ number_of_arguments=1; arguments[0]=&returned_zval; zend_list_addref(Z_LVAL_P(returned_zval)); dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &select_db_zval, number_of_arguments, arguments); if (select_db_zval) zval_ptr_dtor(&select_db_zval); zval_ptr_dtor(&returned_zval); return 0; } zval_ptr_dtor(&select_db_zval); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_fbsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns persistent connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; zval *select_db_zval=NULL; arguments[0]=host; arguments[1]=username; arguments[2]=password; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_pconnect", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } number_of_arguments=2; arguments[0]=db; arguments[1]=&returned_zval; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_select_db", &select_db_zval, number_of_arguments, arguments); if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) { if (select_db_zval) zval_ptr_dtor(&select_db_zval); /* also close connection */ number_of_arguments=1; arguments[0]=&returned_zval; zend_list_addref(Z_LVAL_P(returned_zval)); dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &select_db_zval, number_of_arguments, arguments); if (select_db_zval) zval_ptr_dtor(&select_db_zval); zval_ptr_dtor(&returned_zval); return 0; } zval_ptr_dtor(&select_db_zval); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_fbsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_fbsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; arguments[0]=db_name; arguments[1]=sql_statement; arguments[2]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_db_query", &returned_zval, number_of_arguments, arguments); /* fbsql_query returns a bool for success or failure, or a result_identifier for select statements */ if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_fbsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-count as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=result_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_num_fields", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_fbsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-name as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_field_name", &returned_zval, number_of_arguments, arguments); /* fbsql_field_name returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_fbsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-type as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_field_type", &returned_zval, number_of_arguments, arguments); /* fbsql_field_name returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_fbsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS) { /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_resulttype=NULL; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_resulttype); ZVAL_LONG(zval_resulttype, FBSQL_NUM); arguments[0]=result_handle; arguments[1]=&zval_resulttype; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_fetch_array", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_resulttype); return 0; } FREE_ZVAL(zval_resulttype); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_fbsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns string */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; if (!dbx_handle) number_of_arguments=0; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_error", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_fbsql.h0100644000175200000240000000652707405423101014641 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | | Frank M. Kromann | +----------------------------------------------------------------------+ */ /* $Id: dbx_fbsql.h,v 1.5 2025/12/11 15:29:05 sebastian Exp $ */ #ifndef ZEND_DBX_FBSQL_H #define ZEND_DBX_FBSQL_H #ifndef INIT_FUNC_ARGS #include "zend_modules.h" #endif #include "php.h" int dbx_fbsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns connection handle as resource on success or 0 as long on failure */ int dbx_fbsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns persistent connection handle as resource on success or 0 as long on failure */ int dbx_fbsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long on success or 0 as long on failure */ int dbx_fbsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int dbx_fbsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns column-count as long on success or 0 as long on failure */ int dbx_fbsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-name as string on success or 0 as long on failure */ int dbx_fbsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-type as string on success or 0 as long on failure */ int dbx_fbsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS); /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_fbsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ #endif /* ZEND_DBX_FBSQL_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_mssql.c0100644000175200000240000002261107405423101014654 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx_mssql.c,v 1.9 2025/12/11 15:29:05 sebastian Exp $ */ #include "dbx.h" #include "dbx_mssql.h" #define MSSQL_ASSOC 1<<0 #define MSSQL_NUM 1<<1 int dbx_mssql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; zval *select_db_zval=NULL; arguments[0]=host; arguments[1]=username; arguments[2]=password; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_connect", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } number_of_arguments=2; arguments[0]=db; arguments[1]=&returned_zval; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments); if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) { if (select_db_zval) zval_ptr_dtor(&select_db_zval); /* also close connection */ number_of_arguments=1; arguments[0]=&returned_zval; zend_list_addref(Z_LVAL_P(returned_zval)); dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_close", &select_db_zval, number_of_arguments, arguments); if (select_db_zval) zval_ptr_dtor(&select_db_zval); zval_ptr_dtor(&returned_zval); return 0; } zval_ptr_dtor(&select_db_zval); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mssql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns persistent connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; zval *select_db_zval=NULL; arguments[0]=host; arguments[1]=username; arguments[2]=password; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_pconnect", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } number_of_arguments=2; arguments[0]=db; arguments[1]=&returned_zval; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments); if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) { if (select_db_zval) zval_ptr_dtor(&select_db_zval); /* also close connection */ number_of_arguments=1; arguments[0]=&returned_zval; zend_list_addref(Z_LVAL_P(returned_zval)); dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_close", &select_db_zval, number_of_arguments, arguments); if (select_db_zval) zval_ptr_dtor(&select_db_zval); zval_ptr_dtor(&returned_zval); return 0; } zval_ptr_dtor(&select_db_zval); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mssql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_close", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mssql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *returned_zval=NULL; zval *select_db_zval=NULL; number_of_arguments=2; arguments[0]=db_name; arguments[1]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments); zval_ptr_dtor(&select_db_zval); number_of_arguments=2; arguments[0]=sql_statement; arguments[1]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_query", &returned_zval, number_of_arguments, arguments); /* mssql_query returns a bool for success or failure, or a result_identifier for select statements */ if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mssql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-count as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=result_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_num_fields", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mssql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-name as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_field_name", &returned_zval, number_of_arguments, arguments); /* mssql_field_name returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mssql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-type as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_field_type", &returned_zval, number_of_arguments, arguments); /* mssql_field_name returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mssql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS) { /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=result_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_fetch_row", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mssql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns string */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; if (!dbx_handle) number_of_arguments=0; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_get_last_message", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_mssql.h0100644000175200000240000000641307405423101014663 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx_mssql.h,v 1.7 2025/12/11 15:29:05 sebastian Exp $ */ #ifndef ZEND_DBX_MSSQL_H #define ZEND_DBX_MSSQL_H #ifndef INIT_FUNC_ARGS #include "zend_modules.h" #endif #include "php.h" int dbx_mssql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns connection handle as resource on success or 0 as long on failure */ int dbx_mssql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns persistent connection handle as resource on success or 0 as long on failure */ int dbx_mssql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long on success or 0 as long on failure */ int dbx_mssql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int dbx_mssql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns column-count as long on success or 0 as long on failure */ int dbx_mssql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-name as string on success or 0 as long on failure */ int dbx_mssql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-type as string on success or 0 as long on failure */ int dbx_mssql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS); /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_mssql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ #endif /* ZEND_DBX_MSSQL_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_mysql.c0100644000175200000240000002310007421325102014654 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx_mysql.c,v 1.14 2025/01/16 16:28:50 mboeren Exp $ */ #include "dbx.h" #include "dbx_mysql.h" #define MYSQL_ASSOC 1<<0 #define MYSQL_NUM 1<<1 int dbx_mysql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; zval *select_db_zval=NULL; arguments[0]=host; arguments[1]=username; arguments[2]=password; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_connect", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } number_of_arguments=2; arguments[0]=db; arguments[1]=&returned_zval; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_select_db", &select_db_zval, number_of_arguments, arguments); if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) { if (select_db_zval) zval_ptr_dtor(&select_db_zval); /* also close connection */ number_of_arguments=1; arguments[0]=&returned_zval; zend_list_addref(Z_LVAL_P(returned_zval)); dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_close", &select_db_zval, number_of_arguments, arguments); if (select_db_zval) zval_ptr_dtor(&select_db_zval); zval_ptr_dtor(&returned_zval); return 0; } zval_ptr_dtor(&select_db_zval); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mysql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns persistent connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; zval *select_db_zval=NULL; arguments[0]=host; arguments[1]=username; arguments[2]=password; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_pconnect", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } number_of_arguments=2; arguments[0]=db; arguments[1]=&returned_zval; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_select_db", &select_db_zval, number_of_arguments, arguments); if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) { if (select_db_zval) zval_ptr_dtor(&select_db_zval); /* also close connection */ number_of_arguments=1; arguments[0]=&returned_zval; zend_list_addref(Z_LVAL_P(returned_zval)); dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_close", &select_db_zval, number_of_arguments, arguments); if (select_db_zval) zval_ptr_dtor(&select_db_zval); zval_ptr_dtor(&returned_zval); return 0; } zval_ptr_dtor(&select_db_zval); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mysql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_close", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mysql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *returned_zval=NULL; zval *select_db_zval=NULL; number_of_arguments=2; arguments[0]=db_name; arguments[1]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_select_db", &select_db_zval, number_of_arguments, arguments); zval_ptr_dtor(&select_db_zval); number_of_arguments=2; arguments[0]=sql_statement; arguments[1]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_query", &returned_zval, number_of_arguments, arguments); /* mysql_query returns a bool for success or failure, or a result_identifier for select statements */ if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mysql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-count as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=result_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_num_fields", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mysql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-name as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_field_name", &returned_zval, number_of_arguments, arguments); /* mysql_field_name returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mysql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-type as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_field_type", &returned_zval, number_of_arguments, arguments); /* mysql_field_name returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mysql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS) { /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_resulttype=NULL; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_resulttype); ZVAL_LONG(zval_resulttype, MYSQL_NUM); arguments[0]=result_handle; arguments[1]=&zval_resulttype; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_fetch_array", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_resulttype); return 0; } FREE_ZVAL(zval_resulttype); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_mysql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns string */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; if (!dbx_handle) number_of_arguments=0; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_error", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_mysql.h0100644000175200000240000000641407405423101014672 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx_mysql.h,v 1.11 2025/12/11 15:29:05 sebastian Exp $ */ #ifndef ZEND_DBX_MYSQL_H #define ZEND_DBX_MYSQL_H #ifndef INIT_FUNC_ARGS #include "zend_modules.h" #endif #include "php.h" int dbx_mysql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns connection handle as resource on success or 0 as long on failure */ int dbx_mysql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns persistent connection handle as resource on success or 0 as long on failure */ int dbx_mysql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long on success or 0 as long on failure */ int dbx_mysql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int dbx_mysql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns column-count as long on success or 0 as long on failure */ int dbx_mysql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-name as string on success or 0 as long on failure */ int dbx_mysql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-type as string on success or 0 as long on failure */ int dbx_mysql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS); /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_mysql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ #endif /* ZEND_DBX_MYSQL_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_oci8.c0100644000175200000240000002212407405423101014356 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx_oci8.c,v 1.5 2025/12/11 15:29:05 sebastian Exp $ */ #include "dbx.h" #include "dbx_oci8.h" #define OCI_ASSOC 1<<0 #define OCI_NUM 1<<1 #define OCI_RETURN_NULLS 1<<2 #define OCI_RETURN_LOBS 1<<3 int dbx_oci8_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; arguments[0]=username; arguments[1]=password; arguments[2]=db; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCILogon", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_oci8_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; arguments[0]=username; arguments[1]=password; arguments[2]=db; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIPLogon", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_oci8_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCILogOff", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_oci8_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *returned_zval=NULL; zval *execute_zval=NULL; arguments[0]=dbx_handle; arguments[1]=sql_statement; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIParse", &returned_zval, number_of_arguments, arguments); /* OCIParse returns a bool for failure, or a statement_identifier for valid sql_statements */ if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } number_of_arguments=1; arguments[0]=&returned_zval; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIExecute", &execute_zval, number_of_arguments, arguments); /* OCIExecute returns a bool for success or failure???? */ if (!execute_zval || Z_TYPE_P(execute_zval)!=IS_BOOL) { if (execute_zval) zval_ptr_dtor(&execute_zval); zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_oci8_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-count as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=result_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCINumCols", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_oci8_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-name as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); /* dbx uses 0-based column-indices, oci8 uses 1-based indices... */ ZVAL_LONG(zval_column_index, column_index+1); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIColumnName", &returned_zval, number_of_arguments, arguments); /* OCIColumnName returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_oci8_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-type as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); /* dbx uses 0-based column-indices, oci8 uses 1-based indices... */ ZVAL_LONG(zval_column_index, column_index+1); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIColumnType", &returned_zval, number_of_arguments, arguments); /* OCIColumnType returns a string??? */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_oci8_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS) { /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *zval_resulttype=NULL; zval *zval_returned_array=NULL; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_resulttype); ZVAL_LONG(zval_resulttype, OCI_NUM | OCI_RETURN_NULLS); /* no ASSOC, dbx handles that part */ arguments[0]=result_handle; arguments[1]=&zval_returned_array; arguments[2]=&zval_resulttype; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIFetchInto", &returned_zval, number_of_arguments, arguments); /* OCIFetchInto returns an integer, but the actual array is passed back in arg[1] */ /* I'm not sure how this will work, Thies, so this is something that should be especially tested! */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL || Z_LVAL_P(returned_zval)==0) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_resulttype); return 0; } FREE_ZVAL(zval_resulttype); zval_ptr_dtor(&returned_zval); MOVE_RETURNED_TO_RV(rv, zval_returned_array); return 1; } int dbx_oci8_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns string */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; zval *returned_message_zval=NULL; arguments[0]=dbx_handle; if (!dbx_handle) number_of_arguments=0; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "OCIError", &returned_zval, number_of_arguments, arguments); /* OCIError should returns an assoc array containing code & message, dbx needs the message */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } /* get the messagestring here */ if (zend_hash_find(Z_ARRVAL_P(returned_zval), "message", strlen("message")+1, (void **) &returned_message_zval)==FAILURE) { /* oops! no msg? */ zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_message_zval); zval_ptr_dtor(&returned_zval); return 1; } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_oci8.h0100644000175200000240000000637607405423101014376 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx_oci8.h,v 1.4 2025/12/11 15:29:05 sebastian Exp $ */ #ifndef ZEND_DBX_OCI8_H #define ZEND_DBX_OCI8_H #ifndef INIT_FUNC_ARGS #include "zend_modules.h" #endif #include "php.h" int dbx_oci8_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns connection handle as resource on success or 0 as long on failure */ int dbx_oci8_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns persistent connection handle as resource on success or 0 as long on failure */ int dbx_oci8_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long on success or 0 as long on failure */ int dbx_oci8_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int dbx_oci8_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns column-count as long on success or 0 as long on failure */ int dbx_oci8_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-name as string on success or 0 as long on failure */ int dbx_oci8_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-type as string on success or 0 as long on failure */ int dbx_oci8_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS); /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_oci8_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ #endif /* ZEND_DBX_OCI8_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_odbc.c0100644000175200000240000002351507405423101014430 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx_odbc.c,v 1.15 2025/12/11 15:29:05 sebastian Exp $ */ #include "dbx.h" #include "dbx_odbc.h" #define ODBC_ASSOC 1 #define ODBC_NUM 2 int dbx_odbc_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; arguments[0]=db; arguments[1]=username; arguments[2]=password; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_connect", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_odbc_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; arguments[0]=db; arguments[1]=username; arguments[2]=password; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_pconnect", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_odbc_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; int exit_status=EG(exit_status); int actual_resource_type; void *resource; resource = zend_list_find(Z_LVAL_PP(dbx_handle), &actual_resource_type); if (!resource) { return 0; } arguments[0]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_close", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_NULL) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } convert_to_long_ex(&returned_zval); Z_LVAL_P(returned_zval)=1; MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_odbc_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *queryresult_zval=NULL; zval *num_fields_zval=NULL; /* db_name is not used in this function */ arguments[0]=dbx_handle; arguments[1]=sql_statement; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_exec", &queryresult_zval, number_of_arguments, arguments); /* odbc_query returns a bool for failure, or a result_identifier for success */ if (!queryresult_zval || Z_TYPE_P(queryresult_zval)!=IS_RESOURCE) { if (queryresult_zval) zval_ptr_dtor(&queryresult_zval); return 0; } MAKE_STD_ZVAL(num_fields_zval); ZVAL_LONG(num_fields_zval, 0); if (!dbx_odbc_getcolumncount(&num_fields_zval, &queryresult_zval, INTERNAL_FUNCTION_PARAM_PASSTHRU)) { FREE_ZVAL(num_fields_zval); if (queryresult_zval) zval_ptr_dtor(&queryresult_zval); return 0; } if (Z_LVAL_P(num_fields_zval)==0) { Z_TYPE_PP(rv)=IS_BOOL; Z_LVAL_PP(rv)=1; /* success, but no data */ FREE_ZVAL(num_fields_zval); if (queryresult_zval) zval_ptr_dtor(&queryresult_zval); return 1; } FREE_ZVAL(num_fields_zval); MOVE_RETURNED_TO_RV(rv, queryresult_zval); return 1; } int dbx_odbc_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-count as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=result_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_num_fields", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG || Z_LVAL_P(returned_zval)<0) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_odbc_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-name as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index+1); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_field_name", &returned_zval, number_of_arguments, arguments); /* odbc_field_name returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_odbc_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-type as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index+1); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_field_type", &returned_zval, number_of_arguments, arguments); /* odbc_field_name returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_odbc_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS) { /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int number_of_arguments; zval **arguments[2]; zval *num_fields_zval=NULL; zval *fetch_row_result_zval=NULL; zval *field_result_zval=NULL; zval *field_index_zval; zval *returned_zval=NULL; long field_index; long field_count=-1; /* get # fields */ MAKE_STD_ZVAL(num_fields_zval); ZVAL_LONG(num_fields_zval, 0); if (!dbx_odbc_getcolumncount(&num_fields_zval, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU)) { return 0; } field_count=Z_LVAL_P(num_fields_zval); FREE_ZVAL(num_fields_zval); /* fetch row */ number_of_arguments=1; arguments[0]=result_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_fetch_row", &fetch_row_result_zval, number_of_arguments, arguments); if (!fetch_row_result_zval || Z_TYPE_P(fetch_row_result_zval)!=IS_BOOL) { if (fetch_row_result_zval) zval_ptr_dtor(&fetch_row_result_zval); return 0; } if (Z_LVAL_P(fetch_row_result_zval)==0) { Z_TYPE_PP(rv)=IS_LONG; Z_LVAL_PP(rv)=0; /* ok, no more rows */ zval_ptr_dtor(&fetch_row_result_zval); return 0; } zval_ptr_dtor(&fetch_row_result_zval); /* fill array with field results... */ MAKE_STD_ZVAL(returned_zval); if (array_init(returned_zval) != SUCCESS) { zend_error(E_ERROR, "dbx_odbc_getrow: unable to create result-array..."); FREE_ZVAL(returned_zval); return 0; } MAKE_STD_ZVAL(field_index_zval); ZVAL_LONG(field_index_zval, 0); number_of_arguments=2; for (field_index=0; field_index | +----------------------------------------------------------------------+ */ /* $Id: dbx_odbc.h,v 1.11 2025/12/11 15:29:05 sebastian Exp $ */ #ifndef ZEND_DBX_ODBC_H #define ZEND_DBX_ODBC_H #ifndef INIT_FUNC_ARGS #include "zend_modules.h" #endif #include "php.h" int dbx_odbc_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns connection handle as resource on success or 0 as long on failure */ int dbx_odbc_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns persisten connection handle as resource on success or 0 as long on failure */ int dbx_odbc_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long on success or 0 as long on failure */ int dbx_odbc_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int dbx_odbc_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns column-count as long on success or 0 as long on failure */ int dbx_odbc_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-name as string on success or 0 as long on failure */ int dbx_odbc_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-type as string on success or 0 as long on failure */ int dbx_odbc_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS); /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_odbc_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ #endif /* ZEND_DBX_ODBC_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_pgsql.c0100644000175200000240000002202307432463010014643 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Rui Hirokawa | +----------------------------------------------------------------------+ */ /* $Id: dbx_pgsql.c,v 1.17 2025/02/13 13:11:36 yohgaki Exp $ */ #include "dbx.h" #include "php_dbx.h" #include "dbx_pgsql.h" #include #define PGSQL_ASSOC 1<<0 #define PGSQL_NUM 1<<1 int dbx_pgsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns connection handle as resource on success or 0 as long on failure */ int nargs=5; char *port="5432", *connstring=NULL; zval **args[5], *rarg = NULL; zval *conn_zval = NULL; zval *returned_zval=NULL; MAKE_STD_ZVAL(conn_zval); ZVAL_LONG(conn_zval, 0); if (Z_STRLEN_PP(username)>0) { int len; len = Z_STRLEN_PP(host)+Z_STRLEN_PP(db)+strlen(port); len += Z_STRLEN_PP(username)+Z_STRLEN_PP(password)+45; connstring = (char *)emalloc(len+1); sprintf(connstring, "host='%s' port='%s' dbname='%s' user='%s' password='%s'", Z_STRVAL_PP(host), port, Z_STRVAL_PP(db), Z_STRVAL_PP(username), Z_STRVAL_PP(password)); ZVAL_STRING(conn_zval, connstring, 0); args[0] = &conn_zval; nargs = 1; } else { int k; args[0] = host; for (k=1;k<4;k++){ MAKE_STD_ZVAL(rarg); ZVAL_EMPTY_STRING(rarg); args[k] = &rarg; } args[4] = db; } dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_connect", &returned_zval, nargs, args); zval_dtor(conn_zval); FREE_ZVAL(conn_zval); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_pgsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns persistent connection handle as resource on success or 0 as long on failure */ int nargs=5; char *port="5432", *connstring=NULL; zval **args[5], *rarg = NULL; zval *conn_zval = NULL; zval *returned_zval=NULL; MAKE_STD_ZVAL(conn_zval); ZVAL_LONG(conn_zval, 0); if (Z_STRLEN_PP(username)>0) { int len; len = Z_STRLEN_PP(host)+Z_STRLEN_PP(db)+strlen(port); len += Z_STRLEN_PP(username)+Z_STRLEN_PP(password)+45; connstring = (char *)emalloc(len+1); sprintf(connstring, "host='%s' port='%s' dbname='%s' user='%s' password='%s'", Z_STRVAL_PP(host), port, Z_STRVAL_PP(db), Z_STRVAL_PP(username), Z_STRVAL_PP(password)); ZVAL_STRING(conn_zval, connstring, 0); args[0] = &conn_zval; nargs = 1; } else { int k; args[0] = host; for (k=1;k<4;k++){ MAKE_STD_ZVAL(rarg); ZVAL_EMPTY_STRING(rarg); args[k] = &rarg; } args[4] = db; } dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_pconnect", &returned_zval, nargs, args); zval_dtor(conn_zval); FREE_ZVAL(conn_zval); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_pgsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_close", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_pgsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int nargs=2; zval **args[2]; zval *returned_zval=NULL; /* db_name is not used in this function */ args[0]=dbx_handle; args[1]=sql_statement; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_exec", &returned_zval, nargs, args); /* pg_query returns a bool for success or failure, or a result_identifier for select statements */ if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_pgsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-count as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=result_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_numfields", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_pgsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-name as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_fieldname", &returned_zval, number_of_arguments, arguments); /* pg_fieldname returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_pgsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-type as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_fieldtype", &returned_zval, number_of_arguments, arguments); /* pg_fieldtype returns a string */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } FREE_ZVAL(zval_column_index); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_pgsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS) { /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int number_of_arguments=2; int save_error_reporting=0; zval **arguments[2]; zval *zval_row=NULL; zval *returned_zval=NULL; MAKE_STD_ZVAL(zval_row); ZVAL_LONG(zval_row, row_number); arguments[0]=result_handle; arguments[1]=&zval_row; if (EG(error_reporting) & E_WARNING){ save_error_reporting = EG(error_reporting); EG(error_reporting) &= ~E_WARNING; } dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_fetch_array", &returned_zval, number_of_arguments, arguments); if (save_error_reporting) { EG(error_reporting) = save_error_reporting; } if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_row); return 0; } FREE_ZVAL(zval_row); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_pgsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns string */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; if (!dbx_handle) number_of_arguments=0; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_errormessage", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_pgsql.h0100644000175200000240000000573507405423101014660 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Rui Hirokawa | +----------------------------------------------------------------------+ */ /* $Id: dbx_pgsql.h,v 1.10 2025/12/11 15:29:05 sebastian Exp $ */ #ifndef ZEND_DBX_PGSQL_H #define ZEND_DBX_PGSQL_H #ifndef INIT_FUNC_ARGS #include "zend_modules.h" #endif #include "php.h" int dbx_pgsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns connection handle as resource on success or 0 as long on failure */ int dbx_pgsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns persistent connection handle as resource on success or 0 as long on failure */ int dbx_pgsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long on success or 0 as long on failure */ int dbx_pgsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int dbx_pgsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns column-count as long on success or 0 as long on failure */ int dbx_pgsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-name as string on success or 0 as long on failure */ int dbx_pgsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-type as string on success or 0 as long on failure */ int dbx_pgsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS); /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_pgsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ #endif /* ZEND_DBX_PGSQL_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_sybasect.c0100644000175200000240000002420407530401777015350 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx_sybasect.c,v 1.1.2.1 2025/08/20 08:55:27 edink Exp $ */ #include "dbx.h" #include "dbx_sybasect.h" #define MYSQL_ASSOC 1<<0 #define MYSQL_NUM 1<<1 int dbx_sybasect_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; zval *select_db_zval=NULL; arguments[0]=host; arguments[1]=username; arguments[2]=password; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_connect", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } number_of_arguments=2; arguments[0]=db; arguments[1]=&returned_zval; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_select_db", &select_db_zval, number_of_arguments, arguments); if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) { if (select_db_zval) zval_ptr_dtor(&select_db_zval); /* also close connection */ number_of_arguments=1; arguments[0]=&returned_zval; zend_list_addref(Z_LVAL_P(returned_zval)); dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_close", &select_db_zval, number_of_arguments, arguments); if (select_db_zval) zval_ptr_dtor(&select_db_zval); zval_ptr_dtor(&returned_zval); return 0; } zval_ptr_dtor(&select_db_zval); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_sybasect_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) { /* returns persistent connection handle as resource on success or 0 as long on failure */ int number_of_arguments=3; zval **arguments[3]; zval *returned_zval=NULL; zval *select_db_zval=NULL; arguments[0]=host; arguments[1]=username; arguments[2]=password; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_pconnect", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } number_of_arguments=2; arguments[0]=db; arguments[1]=&returned_zval; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_select_db", &select_db_zval, number_of_arguments, arguments); if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) { if (select_db_zval) zval_ptr_dtor(&select_db_zval); /* also close connection */ number_of_arguments=1; arguments[0]=&returned_zval; zend_list_addref(Z_LVAL_P(returned_zval)); dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_close", &select_db_zval, number_of_arguments, arguments); if (select_db_zval) zval_ptr_dtor(&select_db_zval); zval_ptr_dtor(&returned_zval); return 0; } zval_ptr_dtor(&select_db_zval); MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_sybasect_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_close", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_sybasect_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS) { /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *returned_zval=NULL; zval *select_db_zval=NULL; number_of_arguments=2; arguments[0]=db_name; arguments[1]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_select_db", &select_db_zval, number_of_arguments, arguments); zval_ptr_dtor(&select_db_zval); number_of_arguments=2; arguments[0]=sql_statement; arguments[1]=dbx_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_query", &returned_zval, number_of_arguments, arguments); /* sybase_query returns a bool for success or failure, or a result_identifier for select statements */ if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_sybasect_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-count as long on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=result_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_num_fields", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_sybasect_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-name as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; zval **zv_name=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_fetch_field", &returned_zval, number_of_arguments, arguments); /* sybase_fetch_field returns an object */ /* we need only the 'name' member here */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_OBJECT) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } if (zend_hash_find(returned_zval->value.obj.properties, "name", 5, (void **) &zv_name)==FAILURE) { zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } **rv = **zv_name; zval_copy_ctor(*rv); zval_ptr_dtor(&returned_zval); zval_ptr_dtor(zv_name); FREE_ZVAL(zval_column_index); /* MOVE_RETURNED_TO_RV(rv, returned_zval); */ return 1; } int dbx_sybasect_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) { /* returns column-type as string on success or 0 as long on failure */ int number_of_arguments=2; zval **arguments[2]; zval *zval_column_index; zval *returned_zval=NULL; zval **zv_type=NULL; MAKE_STD_ZVAL(zval_column_index); ZVAL_LONG(zval_column_index, column_index); arguments[0]=result_handle; arguments[1]=&zval_column_index; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_fetch_field", &returned_zval, number_of_arguments, arguments); /* sybase_fetch_field returns an object */ /* we need only the 'type' member here */ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_OBJECT) { if (returned_zval) zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } if (zend_hash_find(returned_zval->value.obj.properties, "type", 5, (void **) &zv_type)==FAILURE) { zval_ptr_dtor(&returned_zval); FREE_ZVAL(zval_column_index); return 0; } **rv = **zv_type; zval_copy_ctor(*rv); zval_ptr_dtor(&returned_zval); zval_ptr_dtor(zv_type); FREE_ZVAL(zval_column_index); /* MOVE_RETURNED_TO_RV(rv, returned_zval); */ return 1; } int dbx_sybasect_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS) { /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=result_handle; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_fetch_row", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } int dbx_sybasect_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS) { /* returns string */ int number_of_arguments=1; zval **arguments[1]; zval *returned_zval=NULL; arguments[0]=dbx_handle; if (!dbx_handle) number_of_arguments=0; dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_get_last_message", &returned_zval, number_of_arguments, arguments); if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/dbx_sybasect.h0100644000175200000240000000646007434152721015354 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: dbx_sybasect.h,v 1.2 2025/02/18 10:22:09 mboeren Exp $ */ #ifndef ZEND_DBX_SYBASECT_H #define ZEND_DBX_SYBASECT_H #ifndef INIT_FUNC_ARGS #include "zend_modules.h" #endif #include "php.h" int dbx_sybasect_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns connection handle as resource on success or 0 as long on failure */ int dbx_sybasect_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS); /* returns persistent connection handle as resource on success or 0 as long on failure */ int dbx_sybasect_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long on success or 0 as long on failure */ int dbx_sybasect_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS); /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */ int dbx_sybasect_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns column-count as long on success or 0 as long on failure */ int dbx_sybasect_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-name as string on success or 0 as long on failure */ int dbx_sybasect_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS); /* returns column-type as string on success or 0 as long on failure */ int dbx_sybasect_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS); /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_sybasect_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ #endif /* ZEND_DBX_SYBASECT_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dbx/howto_extend_dbx.html0100644000175200000240000005175707437441113016773 0ustar zeevstaff HOWTO extend dbx
How-to code support for another database
Every supported database module must be loaded by PHP before it can be used. Every supported database module must be added to the dbx-module before it can be used. Currently there is support for MySQL, PostgreSQL, Microsoft SQL Server, Frontbase, Sybase-CT and ODBC, but it is not difficult to add support for more databases.

The dbx module is found in de PHP ext/dbx folder. The support-code is found in the same folder

To add support for module 'blabla' the following steps must be taken:
1. the dbx.c source file must be extended to recognize module 'blabla' and switch to the 'blabla' functions.
2. the files dbx_blabla.h and dbx_blabla.c must be created and edited to produce the required response.
3. add the files from step 2 to the project.
4. compile.
5. enjoy.

You may need a bit of help for step 1 and 2. If you need help for step 3 or 4, you shouldn't try to attempt this probably :-). If you need help with step 5 you're in big trouble ;o)
Help for step 1 and 2 is given below, bold text in code indicate the important bits.

home

1. the dbx.c source file must be extended
Define a module identifier and assign it a unique number. Include your header file here as well.
// defines for supported databases
#define DBX_UNKNOWN 0
#define DBX_MYSQL 1
#define DBX_ODBC 2
#define DBX_BLABLA 3
// includes for supported databases
#include "dbx.h"
#include "dbx_mysql.h"
#include "dbx_odbc.h"
#include "dbx_blabla.h"
Add code to the module_identifier_exists function so DBX_BLABLA will be recognized:
int module_identifier_exists(long module_identifier) {
    switch (module_identifier) {
        case DBX_MYSQL: return module_exists("mysql");
        case DBX_ODBC: return module_exists("odbc");
        case DBX_BLABLA: return module_exists("blabla");
        }
    return 0;
    }
Add code to the get_module_identifier function so your extension will be recognized:
int get_module_identifier(char * module_name) {
    if (!strcmp("mysql", module_name)) return DBX_MYSQL;
    if (!strcmp("odbc", module_name)) return DBX_ODBC;
    if (!strcmp("blabla", module_name)) return DBX_BLABLA;
    return DBX_UNKNOWN;
    }
Add code for exposing the DBX_BLABLA constant to the world:
ZEND_MINIT_FUNCTION(dbx)
{
/*/	REGISTER_INI_ENTRIES(); /*/
    REGISTER_LONG_CONSTANT("DBX_MYSQL", DBX_MYSQL, CONST_CS | CONST_PERSISTENT);
    REGISTER_LONG_CONSTANT("DBX_ODBC", DBX_ODBC, CONST_CS | CONST_PERSISTENT);
    REGISTER_LONG_CONSTANT("DBX_BLABLA", DBX_BLABLA CONST_CS | CONST_PERSISTENT);
    [...]
    return SUCCESS;
    }
Add code for inclusion in the phpinfo() function (optional, but recommended):
ZEND_MINFO_FUNCTION(dbx)
{
    php_info_print_table_start();
    php_info_print_table_row(2, "dbx support", "enabled");
    php_info_print_table_row(2, "dbx support for MySQL", "enabled");
    php_info_print_table_row(2, "dbx support for ODBC", "enabled");
    php_info_print_table_row(2, "dbx support for BlaBla", "enabled");
    php_info_print_table_end();
    DISPLAY_INI_ENTRIES();
}
Finally, for the implementation of all switch_dbx_XXXXX functions, copy a 'case'-line for every function that you support (should be all functions!). Here is an example for only the switch_dbx_connect function:
int switch_dbx_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) {
    // returns connection handle as resource on success or 0 as long on failure
    switch ((*dbx_module)->value.lval) {
        case DBX_MYSQL: return dbx_mysql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
        case DBX_ODBC: return dbx_odbc_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
        case DBX_BLABLA: return dbx_blabla_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
        }
    zend_error(E_WARNING, "dbx_connect: not supported in this module");
    return 0;
    }
This should be done for all switch_dbx_XXXXX functions. They are listed below:
int switch_dbx_connect(...);
int switch_dbx_pconnect(...);
int switch_dbx_close(...);
int switch_dbx_query(...);
int switch_dbx_getcolumncount(...);
int switch_dbx_getcolumnname(...);
int switch_dbx_getcolumntype(...);
int switch_dbx_getrow(...);
int switch_dbx_error(...);
This concludes the changes for the dbx.c file. All that is needed now is to actually code the dbx_blabla_connect and other functions, which we will see in the following step.

top

2. the files dbx_blabla.h and dbx_blabla.c
The dbx_blabla.h and dbx_blabla.c file are created in the folder /ext/dbx.
The easiest method is to just copy dbx_mysql.h en dbx_mysql.c, open both files, and do a search and replace ('blabla' for 'mysql' and 'BLABLA' for 'MYSQL'). Yes, case-sensitive.
For the .h file, that's all.
For the .c file, the fun has just started :-)
In the .c is the actual realization of the database abstraction, where a call to a standard function is translated into one or more database-specific calls. For mysql, a dbx_connect translates to a mysql_connect followed by a mysql_select_db. Refer to the dbx_mysql.c and dbx_odbc.c files regularly for examples!
In dbx.h one macro and one function are defined to make the calling of external module functions and returning of the results easier: dbx_call_any_function and MOVE_RETURNED_TO_RV.

The details of what each of the functions do, what parameters they get, and what parameters they should return are discussed below. But first, the dbx_mysql_connect function is presented and explained, so you get an idea of how things work.

int dbx_mysql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) {
    // returns connection handle as resource on success or 0 as long on 
    // failure
    int number_of_arguments;
    zval **arguments[3];
    zval * returned_zval=NULL;
    zval * select_db_zval=NULL;
    number_of_arguments=3;
    arguments[0]=host;
    arguments[1]=username;
    arguments[2]=password;
    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_connect", &returned_zval, number_of_arguments, arguments);
    if (!returned_zval || returned_zval->type!=IS_RESOURCE) {
        if (returned_zval) zval_ptr_dtor(&returned_zval);
        return 0;
        }
    MOVE_RETURNED_TO_RV(rv, returned_zval);
    number_of_arguments=2;
    arguments[0]=db;
    arguments[1]=rv;
    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_select_db", &select_db_zval, number_of_arguments, arguments);
    zval_ptr_dtor(&select_db_zval);
    return 1;
    }
First of all, all functions return 0 on failure and 1 on success. These values are used in the dbx-routines, they are never actually given back to the PHP-script writer that calls the dbx_connect function.
The actual value that is of interest to the caller is returned in the rv parameter. In this case it is a connection handle (or link identifier, in mysql-speak), that is also returned if the database selection doesn't succeed.
The parameters that are of interest to the function are located between the rv and INTERNAL_FUNCTION_PARAMETERS parameters, in this case it is a host name, a db name, a username and a password. These are the values that the user specifies if he calls dbx_connect(); These parameters are used in the calls to the mysql-database functions. The user actually also specifies a module-name, that decides which connect-function should be called. Here, he specified 'mysql'.
To actually call a mysql module function, you can use dbx_call_any_function where you specify the function name (it is used twice in dbx_mysql_connect, see 'mysql_connect' and 'mysql_select_db', they are printed bold in the code). The value that is returned from the function will be stored in the next argument, a zval * (e.g. returned_zval) parameter that you must declare locally. To actually return such a parameter, use the MOVE_RETURNED_TO_RV(rv, returned_zval) macro, which copies the values to rv and frees anything that may be left in returned_zval. Parameters that must be passed to the mysql-function are stored in the arguments array, which must be large enough to hold all parameters to the function-call that requires the most parameters (in this case, mysql_connect expects 3 parameters, mysql_select_db expects two parameters, so the arguments array is defined 'zval **arguments[3]'). The number_of_arguments parameter is set to the actual number of arguments that the function-call requires. As you can see it is initialized to 3, for the first call to mysql_connect. Then it is set to 2, for the call to mysql_select_db. If you call a function that retrieves a value, and you don't return it with MOVE_RETURNED_TO_RV, then you must free the value using zval_ptr_dtor, as can be seen right after the call to mysql_select_db. This can also be seen directly after the call to mysql_connect, if somehow this function failed or didn't return a resource (on a successful connect mysql_connect returns a resource) the returned value is freed as well (and 0 is returned because the connection failed).

OK, now the description of all functions that you should implement, and what is expected of them...

int dbx_blabla_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
// int: returns 0 on connect-failure and 1 on success
// rv: connection handle as resource on success or nothing on failure
dbx_blabla_connect creates a connection to a database on a specified host, using username and password for authentication. This may be done by connecting to a server and selecting a database (as mysql does), or connecting to a specific database directly (as in ODBC).
What must be returned (in rv) is the link identifier that is returned from the blabla_connect function, in it's native form so the end-user can use $db->handle to call other blabla_* functions that expect this parameter.
What must be returned from the function is a 1 on success and a 0 on failure. Remember that a failed database selection can still return a 1 because the connection succeeded!
The host (string) is the name of the machine the server is run on, but it may be empty if a database name is enough to establish a connection.
The db (string) is the name of the database to select, or, for e.g. ODBC, the identifier that is needed to actually select the database.
The username (string) and password (string) are used for authentication.
int dbx_blabla_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
// int: returns 0 on pconnect-failure and 1 on success
// rv: persistent connection handle as resource on success or nothing
// on failure
dbx_blabla_pconnect is identical to dbx_blabla_connect except that it will create a persistent connection.
int dbx_blabla_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
// int: returns 0 on close-failure and 1 on success
// rv: 1 as bool on success or nothing on failure
dbx_blabla_close closes an open connection, whether it was created persistently or not.
What must be returned (in rv) is a boolean true that indicates when the connection was closed successfully. If it wasn't, no value is returned in rv.
What must be returned from the function is a 1 on success and a 0 on failure. Note that an unsuccessful close is still a succeeded function call.
The dbx_handle is the same value that you returned from dbx_blabla_connect or dbx_blabla_pconnect.
int dbx_blabla_query(zval **rv, zval **dbx_handle, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
// int: returns 0 on query-failure and 1 on success
// rv: 1 as bool or a result identifier as resource on success 
// or nothing on failure
dbx_blabla_query executes an SQL statement over the connection.
What must be returned (in rv) is a nothing on failure, on success it must return either a boolean 1 for queries that don't return data (like INSERT INTO) or a native result-handle for queries that do return data (SELECT). The native result handle ($q->handle) can be used by the end-user to call other blabla_* functions that expect this parameter.
What must be returned from the function is a 1 on success and a 0 on failure. Note that a failed query execution can still return a 1 because the query function succeeded!
The dbx_handle is the same value that you returned from dbx_blabla_connect or dbx_blabla_pconnect.
The sql_statement (string) can have any value.
int dbx_blabla_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
// int: returns 0 on query-failure and 1 on success
// returns column-count as long on success or nothing on failure
dbx_blabla_getcolumncount gets the number of fields that the query-result contains.
What must be returned (in rv) is the number of fields as long from the query result specified by the result_handle.
What must be returned from the function is a 1 on success and a 0 on failure.
The result_handle is the same value that you returned from dbx_query.
int dbx_blabla_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
// int: returns 0 on failure and 1 on success
// returns column-name as string on success or nothing on failure
dbx_blabla_getcolumnname gets the fieldname of the specified column.
What must be returned (in rv) is the fieldname as string of the given column.
What must be returned from the function is a 1 on success and a 0 on failure.
The result_handle is the same value that you returned from dbx_query.
The column_index is a long that ranges from 0 to the value you returned from dbx_blabla_getcolumncount minus 1 [0..columncount-1].
int dbx_blabla_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
// int: returns 0 on failure and 1 on success
// returns column-type as string on success or nothing on failure
dbx_blabla_getcolumnname gets the field type of the specified column.
What must be returned (in rv) is the field type as string of the given column.
What must be returned from the function is a 1 on success and a 0 on failure.
The result_handle is the same value that you returned from dbx_query.
The column_index is a long that ranges from 0 to the value you returned from dbx_blabla_getcolumncount minus 1 [0..columncount-1].
int dbx_blabla_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
// int: returns 0 on failure and 1 on success
// returns array[0..columncount-1] as strings on success or 0 as long 
// on failure
dbx_blabla_getrow gets the next row from the query-results.
In some cases (PostgreSQL) the rownumber is needed to actually fetch the row. This will be provided (it will be indexed starting at 0) by the dbx_query function. In other cases it is not needed and thus not used.
What must be returned (in rv) is an indexed array[0..columncount-1] of strings, containing the data from the row (for mysql this is easy since it already performs this way, for ODBC the array has to be constructed inside this function from a loop that fetches the data for each column).
What must be returned from the function is a 1 on success and a 0 on failure (function failed or there are no more rows available).
The result_handle is the same value that you returned from dbx_query.
int dbx_blabla_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
// int: returns 0 on failure and 1 on success
// returns error message as string
dbx_blabla_error gets the error message from the last database call.
What must be returned (in rv) is the error message as a string.
What must be returned from the function is a 1 on success and a 0 on failure.
The dbx_handle is the same value that you returned from dbx_blabla_connect or dbx_blabla_pconnect.

top

For specifics or the finer details you can always refer to dbx_mysql.c and dbx_odbc.c to see everything in action.
More Zend API documentation can be found at http://www.zend.com/apidoc.
This document can be found at http://www.guidance.nl/php/dbx.

top

php-4.2.3/ext/dbx/php_dbx.h0100644000175200000240000000540107405423101014307 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | dbx module version 1.0 | +----------------------------------------------------------------------+ | Copyright (c) 2001 Guidance Rotterdam BV | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author : Marc Boeren | +----------------------------------------------------------------------+ */ /* $Id: php_dbx.h,v 1.12 2025/12/11 15:29:05 sebastian Exp $ */ #ifndef ZEND_PHP_DBX_H #define ZEND_PHP_DBX_H #ifndef INIT_FUNC_ARGS #include "zend_modules.h" #endif extern zend_module_entry dbx_module_entry; #define phpext_dbx_ptr &dbx_module_entry #ifdef ZEND_WIN32 #define ZEND_DBX_API __declspec(dllexport) #else #define ZEND_DBX_API #endif ZEND_MINIT_FUNCTION(dbx); ZEND_MSHUTDOWN_FUNCTION(dbx); /* ZEND_RINIT_FUNCTION(dbx); */ /* ZEND_RSHUTDOWN_FUNCTION(dbx); */ ZEND_MINFO_FUNCTION(dbx); ZEND_FUNCTION(dbx_connect); ZEND_FUNCTION(dbx_close); ZEND_FUNCTION(dbx_query); ZEND_FUNCTION(dbx_error); ZEND_FUNCTION(dbx_sort); ZEND_FUNCTION(dbx_compare); /* Declare any global variables you may need between the BEGIN and END macros here: */ /* ZEND_BEGIN_MODULE_GLOBALS(dbx) ZEND_END_MODULE_GLOBALS(dbx) */ /* In every function that needs to use variables in php_dbx_globals, do call dbxLS_FETCH(); after declaring other variables used by that function, and always refer to them as dbxG(variable). You are encouraged to rename these macros something shorter, see examples in any other php module directory. */ #ifdef ZTS #define DBXG(v) TSRMG(dbx_globals_id, zend_dbx_globals *, v) #else #define DBXG(v) (dbx_globals.v) #endif #endif /* ZEND_PHP_DBX_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/dio/0040755000175200000240000000000007535765574012546 5ustar zeevstaffphp-4.2.3/ext/dio/tests/0040755000175200000240000000000007535765542013703 5ustar zeevstaffphp-4.2.3/ext/dio/tests/001.phpt0100644000175200000240000000103707371753151015065 0ustar zeevstaff--TEST-- Check for dio presence --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- dio extension is availablephp-4.2.3/ext/dio/EXPERIMENTAL0100644000175200000240000000000007371753151014333 0ustar zeevstaffphp-4.2.3/ext/dio/Makefile.in0100644000175200000240000000036307371753151014574 0ustar zeevstaff# $Id: Makefile.in,v 1.1 2025/11/06 12:24:09 sterling Exp $ LTLIBRARY_NAME = libdio.la LTLIBRARY_SOURCES = dio.c LTLIBRARY_SHARED_NAME = dio.la LTLIBRARY_SHARED_LIBADD = $(DIO_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/dio/config.m40100644000175200000240000000037407401753424014235 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.2 2025/11/30 18:59:32 sniper Exp $ dnl PHP_ARG_ENABLE(dio, whether to enable direct I/O support, [ --enable-dio Enable direct I/O support]) if test "$PHP_DIO" != "no"; then PHP_EXTENSION(dio, $ext_shared) fi php-4.2.3/ext/dio/dio.c0100644000175200000240000002440607437364635013462 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sterling Hughes | +----------------------------------------------------------------------+ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" #include "php_dio.h" #include #include #include #include #define le_fd_name "Direct I/O File Descriptor" static int le_fd; function_entry dio_functions[] = { PHP_FE(dio_open, NULL) PHP_FE(dio_truncate, NULL) PHP_FE(dio_stat, NULL) PHP_FE(dio_seek, NULL) PHP_FE(dio_fcntl, NULL) PHP_FE(dio_read, NULL) PHP_FE(dio_write, NULL) PHP_FE(dio_close, NULL) {NULL, NULL, NULL} }; zend_module_entry dio_module_entry = { STANDARD_MODULE_HEADER, "dio", dio_functions, PHP_MINIT(dio), NULL, NULL, NULL, PHP_MINFO(dio), "0.1", STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_DIO ZEND_GET_MODULE(dio) #endif static void _dio_close_fd(zend_rsrc_list_entry *rsrc TSRMLS_DC) { php_fd_t *f = (php_fd_t *) rsrc->ptr; close(f->fd); free(f); } #define RDIOC(c) REGISTER_LONG_CONSTANT(#c, c, CONST_CS | CONST_PERSISTENT) PHP_MINIT_FUNCTION(dio) { le_fd = zend_register_list_destructors_ex(_dio_close_fd, NULL, le_fd_name, module_number); RDIOC(O_RDONLY); RDIOC(O_WRONLY); RDIOC(O_RDWR); RDIOC(O_CREAT); RDIOC(O_EXCL); RDIOC(O_TRUNC); RDIOC(O_APPEND); RDIOC(O_NONBLOCK); RDIOC(O_NDELAY); RDIOC(O_SYNC); RDIOC(O_NOCTTY); RDIOC(S_IRWXU); RDIOC(S_IRUSR); RDIOC(S_IWUSR); RDIOC(S_IXUSR); RDIOC(S_IRWXG); RDIOC(S_IRGRP); RDIOC(S_IWGRP); RDIOC(S_IXGRP); RDIOC(S_IRWXO); RDIOC(S_IROTH); RDIOC(S_IWOTH); RDIOC(S_IXOTH); RDIOC(F_DUPFD); RDIOC(F_GETFD); RDIOC(F_GETFL); RDIOC(F_SETFL); RDIOC(F_GETLK); RDIOC(F_SETLK); RDIOC(F_SETLKW); RDIOC(F_SETOWN); RDIOC(F_GETOWN); RDIOC(F_UNLCK); RDIOC(F_RDLCK); RDIOC(F_WRLCK); return SUCCESS; } PHP_MINFO_FUNCTION(dio) { php_info_print_table_start(); php_info_print_table_header(2, "dio support", "enabled"); php_info_print_table_end(); } static void new_php_fd(php_fd_t **f, int fd) { *f = malloc(sizeof(php_fd_t)); (*f)->fd = fd; } /* {{{ proto resource dio_open(string filename, int flags[, int mode]) Open a new filename with specified permissions of flags and creation permissions of mode */ PHP_FUNCTION(dio_open) { php_fd_t *f; char *file_name; int file_name_length; int flags; mode_t mode = 0; int fd; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|l", &file_name, &file_name_length, &flags, &mode) == FAILURE) { return; } if (ZEND_NUM_ARGS() == 3) { fd = open(file_name, flags, mode); } else { fd = open(file_name, flags); } if (fd == -1) { php_error(E_WARNING, "%s(): cannot open file %s with flags %d and permissions %d: %s", get_active_function_name(TSRMLS_C), file_name, flags, mode, strerror(errno)); RETURN_FALSE; } new_php_fd(&f, fd); ZEND_REGISTER_RESOURCE(return_value, f, le_fd); } /* }}} */ /* {{{ proto string dio_read(resource fd[, int n]) Read n bytes from fd and return them, if n is not specified, read 1k */ PHP_FUNCTION(dio_read) { zval *r_fd; php_fd_t *f; char *data; int bytes = 1024; ssize_t res; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &r_fd, &bytes) == FAILURE) { return; } ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd); data = emalloc(bytes + 1); res = read(f->fd, data, bytes); if (res <= 0) { RETURN_NULL(); } data[res] = 0; RETURN_STRINGL(data, res, 0); } /* }}} */ /* {{{ proto int dio_write(resource fd, string data[, int len]) Write data to fd with optional truncation at length */ PHP_FUNCTION(dio_write) { zval *r_fd; php_fd_t *f; char *data; size_t data_len; size_t trunc_len = 0; ssize_t res; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &r_fd, &data, &data_len, &trunc_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd); res = write(f->fd, data, trunc_len ? trunc_len : data_len); if (res == -1) { php_error(E_WARNING, "%s(): cannot write data to file descriptor %d, %s", get_active_function_name(TSRMLS_C), f->fd, strerror(errno)); } RETURN_LONG(res); } /* }}} */ /* {{{ proto bool dio_truncate(resource fd, int offset) Truncate file descriptor fd to offset bytes */ PHP_FUNCTION(dio_truncate) { zval *r_fd; php_fd_t *f; off_t offset; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &r_fd, &offset) == FAILURE) { return; } ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd); if (ftruncate(f->fd, offset) == -1) { php_error(E_WARNING, "%s(): couldn't truncate %d to %d bytes: %s", get_active_function_name(TSRMLS_C), f->fd, offset, strerror(errno)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ #define ADD_FIELD(f, v) add_assoc_long_ex(return_value, (f), sizeof(f), v); /* {{{ proto array dio_stat(resource fd) Get stat information about the file descriptor fd */ PHP_FUNCTION(dio_stat) { zval *r_fd; php_fd_t *f; struct stat s; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fd) == FAILURE) { return; } ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd); if (fstat(f->fd, &s) == -1) { php_error(E_WARNING, "%s(): cannot stat %d: %s", get_active_function_name(TSRMLS_C), f->fd, strerror(errno)); RETURN_FALSE; } array_init(return_value); ADD_FIELD("device", s.st_dev); ADD_FIELD("inode", s.st_ino); ADD_FIELD("mode", s.st_mode); ADD_FIELD("nlink", s.st_nlink); ADD_FIELD("uid", s.st_uid); ADD_FIELD("gid", s.st_gid); ADD_FIELD("device_type", s.st_rdev); ADD_FIELD("size", s.st_size); ADD_FIELD("block_size", s.st_blksize); ADD_FIELD("blocks", s.st_blocks); ADD_FIELD("atime", s.st_atime); ADD_FIELD("mtime", s.st_mtime); ADD_FIELD("ctime", s.st_ctime); } /* }}} */ /* {{{ proto int dio_seek(resource fd, int pos, int whence) Seek to pos on fd from whence */ PHP_FUNCTION(dio_seek) { zval *r_fd; php_fd_t *f; off_t offset; int whence = SEEK_SET; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|l", &r_fd, &offset, &whence) == FAILURE) { return; } ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd); RETURN_LONG(lseek(f->fd, offset, whence)); } /* }}} */ /* {{{ proto mixed dio_fcntl(resource fd, int cmd[, mixed arg]) Perform a c library fcntl on fd */ PHP_FUNCTION(dio_fcntl) { zval *r_fd; zval *arg = NULL; php_fd_t *f; int cmd; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|z", &r_fd, &cmd, &arg) == FAILURE) { return; } ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd); switch (cmd) { case F_SETLK: case F_SETLKW: { zval **element; struct flock lk = {0}; HashTable *fh; if (!arg) { php_error(E_WARNING, "%s() expects argument 3 to be array or int, none given", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } if (Z_TYPE_P(arg) == IS_ARRAY) { fh = HASH_OF(arg); if (zend_hash_find(fh, "start", 5, (void **) &element) == FAILURE) { lk.l_start = 0; } else { lk.l_start = Z_LVAL_PP(element); } if (zend_hash_find(fh, "length", 6, (void **) &element) == FAILURE) { lk.l_len = 0; } else { lk.l_len = Z_LVAL_PP(element); } if (zend_hash_find(fh, "whence", 6, (void **) &element) == FAILURE) { lk.l_whence = 0; } else { lk.l_whence = SEEK_SET; } if (zend_hash_find(fh, "type", 6, (void **) &element) == FAILURE) { lk.l_type = 0; } else { lk.l_type = Z_LVAL_PP(element); } } else if (Z_TYPE_P(arg) == IS_LONG) { lk.l_start = 0; lk.l_len = 0; lk.l_whence = SEEK_SET; lk.l_type = Z_LVAL_P(arg); } else { php_error(E_WARNING, "%s() expects argument 3 to be array or int, %s given", get_active_function_name(TSRMLS_C), zend_zval_type_name(arg)); RETURN_FALSE; } RETURN_LONG(fcntl(f->fd, cmd, &lk)); break; } case F_GETLK: { struct flock lk = {0}; fcntl(f->fd, cmd, &lk); array_init(return_value); add_assoc_long(return_value, "type", lk.l_type); add_assoc_long(return_value, "whence", lk.l_whence); add_assoc_long(return_value, "start", lk.l_start); add_assoc_long(return_value, "length", lk.l_len); add_assoc_long(return_value, "pid", lk.l_pid); break; } case F_DUPFD: { php_fd_t *new_f; if (!arg || Z_TYPE_P(arg) != IS_LONG) { php_error(E_WARNING, "%s() expects argument 3 to be int", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } new_php_fd(&new_f, fcntl(f->fd, cmd, Z_LVAL_P(arg))); ZEND_REGISTER_RESOURCE(return_value, new_f, le_fd); break; } default: if (!arg || Z_TYPE_P(arg) != IS_LONG) { php_error(E_WARNING, "%s() expects argument 3 to be int", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } RETURN_LONG(fcntl(f->fd, cmd, Z_LVAL_P(arg))); } } /* }}} */ /* {{{ proto void dio_close(resource fd) Close the file descriptor given by fd */ PHP_FUNCTION(dio_close) { zval *r_fd; php_fd_t *f; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fd) == FAILURE) { return; } ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd); zend_list_delete(Z_LVAL_P(r_fd)); } /* }}} */ /* * Local variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: sw=4 ts=4 noet */ php-4.2.3/ext/dio/php_dio.h0100644000175200000240000000327507437364635014337 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ */ #ifndef PHP_DIO_H #define PHP_DIO_H extern zend_module_entry dio_module_entry; #define phpext_dio_ptr &dio_module_entry #ifdef PHP_WIN32 #define PHP_DIO_API __declspec(dllexport) #else #define PHP_DIO_API #endif #ifdef ZTS #include "TSRM.h" #endif PHP_MINIT_FUNCTION(dio); PHP_MSHUTDOWN_FUNCTION(dio); PHP_RINIT_FUNCTION(dio); PHP_RSHUTDOWN_FUNCTION(dio); PHP_MINFO_FUNCTION(dio); PHP_FUNCTION(dio_open); PHP_FUNCTION(dio_truncate); PHP_FUNCTION(dio_stat); PHP_FUNCTION(dio_seek); PHP_FUNCTION(dio_read); PHP_FUNCTION(dio_write); PHP_FUNCTION(dio_fcntl); PHP_FUNCTION(dio_close); typedef struct { int fd; } php_fd_t; #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: */ php-4.2.3/ext/domxml/0040755000175200000240000000000007535765574013273 5ustar zeevstaffphp-4.2.3/ext/domxml/CREDITS0100644000175200000240000000002507206176565014274 0ustar zeevstaffdomxml Uwe Steinmann php-4.2.3/ext/domxml/EXPERIMENTAL0100644000175200000240000000023707232042174015064 0ustar zeevstaffthis extension is experimental, its functions may change their names or move to extension all together so do not rely to much on them you have been warned! php-4.2.3/ext/domxml/Makefile.in0100644000175200000240000000040307173420605015307 0ustar zeevstaff# $Id: Makefile.in,v 1.9 2025/10/18 22:17:41 hirokawa Exp $ LTLIBRARY_NAME = libdomxml.la LTLIBRARY_SOURCES = php_domxml.c LTLIBRARY_SHARED_NAME = domxml.la LTLIBRARY_SHARED_LIBADD = $(DOMXML_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/domxml/TODO0100644000175200000240000000110307336160462013733 0ustar zeevstaff1) Implement the following list entries and thier destructors: le_domxmldoctypep le_domxmldtdp le_domxmlcdatap le_domxmlpip le_domxmlcommentp le_domxmlnotationp le_domxmlentityrefp 2) Use ZEND_FETCH_RESOURCE() macros instead of custom functions. 3) Implement those classes we really want, kill all of the rest. 4) Remove debug code (many calls to fprintf()). 5) Make 1st arg always be the object. This is currently half-and-half, or so. 6) Take a hard look at startup/shutdown code. This is really running slower than it ought to be. 7) Fix the many, many memory leaks. php-4.2.3/ext/domxml/config.m40100644000175200000240000001206407470453724014767 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.33.2.2 2025/05/15 12:43:00 chregu Exp $ dnl AC_DEFUN(PHP_DOM_CHECK_VERSION,[ old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$DOMXML_DIR/include$DOMXML_DIR_ADD AC_MSG_CHECKING(for libxml version) AC_EGREP_CPP(yes,[ #include #if LIBXML_VERSION >= 20414 yes #endif ],[ AC_MSG_RESULT(>= 2.4.14) ],[ AC_MSG_ERROR(libxml version 2.4.14 or greater required.) ]) CPPFLAGS=$old_CPPFLAGS ]) PHP_ARG_WITH(dom, for DOM support, [ --with-dom[=DIR] Include DOM support (requires libxml >= 2.4.14). DIR is the libxml install directory.]) if test "$PHP_DOM" != "no"; then DOMXML_DIR_ADD="" if test -r $PHP_DOM/include/libxml2/libxml/tree.h; then DOMXML_DIR=$PHP_DOM DOMXML_DIR_ADD="/libxml2" elif test -r $PHP_DOM/include/libxml/tree.h; then DOMXML_DIR=$PHP_DOM else for i in /usr/local /usr; do test -r $i/include/libxml/tree.h && DOMXML_DIR=$i test -r $i/include/libxml2/libxml/tree.h && DOMXML_DIR=$i && DOMXML_DIR_ADD="/libxml2" done fi if test -z "$DOMXML_DIR"; then AC_MSG_RESULT(not found) AC_MSG_ERROR(Please reinstall the libxml >= 2.4.14 distribution) fi PHP_DOM_CHECK_VERSION if test -f $DOMXML_DIR/lib/libxml2.a -o -f $DOMXML_DIR/lib/libxml2.$SHLIB_SUFFIX_NAME ; then DOM_LIBNAME=xml2 else DOM_LIBNAME=xml fi XML2_CONFIG=$DOMXML_DIR/bin/xml2-config if test -x $XML2_CONFIG; then DOM_LIBS=`$XML2_CONFIG --libs` PHP_EVAL_LIBLINE($DOM_LIBS, DOMXML_SHARED_LIBADD) else PHP_ADD_LIBRARY_WITH_PATH($DOM_LIBNAME, $DOMXML_DIR/lib, DOMXML_SHARED_LIBADD) fi PHP_ADD_INCLUDE($DOMXML_DIR/include$DOMXML_DIR_ADD) if test "$PHP_ZLIB_DIR" = "no"; then AC_MSG_ERROR(DOMXML requires ZLIB. Use --with-zlib-dir=) else PHP_ADD_LIBRARY_WITH_PATH(z, $PHP_ZLIB_DIR/lib, DOMXML_SHARED_LIBADD) fi AC_DEFINE(HAVE_DOMXML,1,[ ]) PHP_EXTENSION(domxml, $ext_shared) PHP_SUBST(DOMXML_SHARED_LIBADD) fi AC_DEFUN(PHP_DOM_XSLT_CHECK_VERSION,[ old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$DOMXSLT_DIR/include AC_MSG_CHECKING(for libxslt version) AC_EGREP_CPP(yes,[ #include #if LIBXSLT_VERSION >= 10003 yes #endif ],[ AC_MSG_RESULT(>= 1.0.3) ],[ AC_MSG_ERROR(libxslt version 1.0.3 or greater required.) ]) CPPFLAGS=$old_CPPFLAGS ]) AC_DEFUN(PHP_DOM_EXSLT_CHECK_VERSION,[ old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$DOMEXSLT_DIR/include AC_MSG_CHECKING(for libexslt version) AC_EGREP_CPP(yes,[ #include #if LIBEXSLT_VERSION >= 600 yes #endif ],[ AC_MSG_RESULT(>= 1.0.3) ],[ AC_MSG_ERROR(libxslt version 1.0.3 or greater required.) ]) CPPFLAGS=$old_CPPFLAGS ]) PHP_ARG_WITH(dom-xslt, for DOM XSLT support, [ --with-dom-xslt[=DIR] Include DOM XSLT support (requires libxslt >= 1.0.3). DIR is the libxslt install directory.]) PHP_ARG_WITH(dom-exslt, for DOM EXSLT support, [ --with-dom-exslt[=DIR] Include DOM EXSLT support (requires libxslt >= 1.0.3). DIR is the libexslt install directory.]) if test "$PHP_DOM_XSLT" != "no"; then if test -r $PHP_DOM_XSLT/include/libxslt/transform.h; then DOMXSLT_DIR=$PHP_DOM_XSLT else for i in /usr/local /usr; do test -r $i/include/libxslt/transform.h && DOMXSLT_DIR=$i done fi if test -z "$DOMXSLT_DIR"; then AC_MSG_RESULT(not found) AC_MSG_ERROR(Please reinstall the libxslt >= 1.0.3 distribution) fi PHP_DOM_XSLT_CHECK_VERSION PHP_ADD_LIBRARY_WITH_PATH(xslt, $DOMXSLT_DIR/lib, DOMXML_SHARED_LIBADD) PHP_ADD_INCLUDE($DOMXSLT_DIR/include) if test "$PHP_DOM" = "no"; then AC_MSG_ERROR(DOMXSLT requires DOMXML. Use --with-dom=) fi if test -f $DOMXML_DIR/lib/libxml2.a -o -f $DOMXML_DIR/lib/libxml2.$SHLIB_SUFFIX_NAME ; then DOM_LIBNAME=xml2 else DOM_LIBNAME=xml fi PHP_ADD_LIBRARY_WITH_PATH($DOM_LIBNAME, $DOMXML_DIR/lib, DOMXML_SHARED_LIBADD) PHP_ADD_INCLUDE($DOMXML_DIR/include$DOMXML_DIR_ADD) if test -f $DOMXML_DIR/lib/libxsltbreakpoint.a -o -f $DOMXML_DIR/lib/libxsltbreakpoint.$SHLIB_SUFFIX_NAME ; then PHP_ADD_LIBRARY_WITH_PATH(xsltbreakpoint, $DOMXML_DIR/lib, DOMXML_SHARED_LIBADD) fi AC_DEFINE(HAVE_DOMXSLT,1,[ ]) PHP_SUBST(DOMXML_SHARED_LIBADD) fi if test "$PHP_DOM_EXSLT" != "no"; then if test "$PHP_DOM" = "no"; then AC_MSG_ERROR(DOMEXSLT requires DOMXML. Use --with-dom=) fi if test "$PHP_DOM_XSLT" = "no"; then AC_MSG_ERROR(DOMEXSLT requires DOMXSLT. Use --with-dom-xslt=) fi if test -r $PHP_DOM_EXSLT/include/libexslt/exslt.h; then DOMEXSLT_DIR=$PHP_DOM_EXSLT else for i in /usr/local /usr; do test -r $i/include/libexslt/exslt.h && DOMEXSLT_DIR=$i done fi if test -z "$DOMEXSLT_DIR"; then AC_MSG_RESULT(not found) AC_MSG_ERROR(Please reinstall the libxslt >= 1.0.3 distribution) fi PHP_DOM_EXSLT_CHECK_VERSION PHP_ADD_LIBRARY_WITH_PATH(exslt, $DOMEXSLT_DIR/lib, DOMXML_SHARED_LIBADD) PHP_ADD_INCLUDE($DOMEXSLT_DIR/include) AC_DEFINE(HAVE_DOMEXSLT,1,[ ]) PHP_SUBST(DOMXML_SHARED_LIBADD) fi php-4.2.3/ext/domxml/domxml.dsp0100644000175200000240000001157307273237555015277 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="domxml" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=domxml - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "domxml.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "domxml.mak" CFG="domxml - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "domxml - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "domxml - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "domxml - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DOMXML" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "DOMXML_EXPORTS" /D "COMPILE_DL_DOMXML" /D ZTS=1 /D HAVE_DOMXML=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 libxml2.lib wsock32.lib php4ts.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_domxml.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "domxml - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DOMXML" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DOMXML_EXPORTS" /D "COMPILE_DL_DOMXML" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DOMXML=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 libxml2.lib php4ts_debug.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_domxml.dll" /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "domxml - Win32 Release_TS" # Name "domxml - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\php_domxml.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_domxml.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project php-4.2.3/ext/domxml/php_domxml.c0100644000175200000240000033451407532635465015605 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Uwe Steinmann | +----------------------------------------------------------------------+ */ /* $Id: php_domxml.c,v 1.118.2.16 2025/08/27 08:41:25 chregu Exp $ */ /* TODO * - Support Notation Nodes * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_domxml.h" #if HAVE_DOMXML #include "ext/standard/info.h" #define PHP_XPATH 1 #define PHP_XPTR 2 /* General macros used by domxml */ #define DOMXML_DOMOBJ_NEW(zval, obj, ret) if (NULL == (zval = php_domobject_new(obj, ret TSRMLS_CC))) { \ php_error(E_WARNING, "%s(): cannot create required DOM object", \ get_active_function_name(TSRMLS_C)); \ RETURN_FALSE; \ } #define DOMXML_RET_ZVAL(zval) SEPARATE_ZVAL(&zval); \ *return_value = *zval; \ FREE_ZVAL(zval); #define DOMXML_RET_OBJ(zval, obj, ret) DOMXML_DOMOBJ_NEW(zval, obj, ret); \ DOMXML_RET_ZVAL(zval); #define DOMXML_GET_THIS(zval) if (NULL == (zval = getThis())) { \ php_error(E_WARNING, "%s(): underlying object missing", \ get_active_function_name(TSRMLS_C)); \ RETURN_FALSE; \ } #define DOMXML_GET_OBJ(ret, zval, le) if (NULL == (ret = php_dom_get_object(zval, le, 0 TSRMLS_CC))) { \ php_error(E_WARNING, "%s(): cannot fetch DOM object", \ get_active_function_name(TSRMLS_C)); \ RETURN_FALSE; \ } #define DOMXML_GET_THIS_OBJ(ret, zval, le) DOMXML_GET_THIS(zval); \ DOMXML_GET_OBJ(ret, zval, le); #define DOMXML_NO_ARGS() if (ZEND_NUM_ARGS() != 0) { \ php_error(E_WARNING, "%s() expects exactly 0 parameters, %d given", \ get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS()); \ return; \ } #define DOMXML_NOT_IMPLEMENTED() php_error(E_WARNING, "%s() not yet implemented", \ get_active_function_name(TSRMLS_C)); \ return; /* WARNING: The number of parameters is actually the * number of passed variables to zend_parse_parameters(), * *NOT* the number of parameters expected by the PHP function. */ #define DOMXML_PARAM_NONE(ret, zval, le) if (NULL == (zval = getThis())) { \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zval) == FAILURE) { \ return; \ } \ } \ DOMXML_GET_OBJ(ret, zval, le); #define DOMXML_PARAM_ONE(ret, zval, le, s, p1) if (NULL == (zval = getThis())) { \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o"s, &zval, p1) == FAILURE) { \ return; \ } \ } else { \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s, p1) == FAILURE) { \ return; \ } \ } \ DOMXML_GET_OBJ(ret, zval, le); #define DOMXML_PARAM_TWO(ret, zval, le, s, p1, p2) if (NULL == (zval = getThis())) { \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o"s, &zval, p1, p2) == FAILURE) { \ return; \ } \ } else { \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s, p1, p2) == FAILURE) { \ return; \ } \ } \ DOMXML_GET_OBJ(ret, zval, le); #define DOMXML_PARAM_THREE(ret, zval, le, s, p1, p2, p3) if (NULL == (zval = getThis())) { \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o"s, &zval, p1, p2, p3) == FAILURE) { \ return; \ } \ } else { \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s, p1, p2, p3) == FAILURE) { \ return; \ } \ } \ DOMXML_GET_OBJ(ret, zval, le); #define DOMXML_PARAM_FOUR(ret, zval, le, s, p1, p2, p3, p4) if (NULL == (zval = getThis())) { \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o"s, &zval, p1, p2, p3, p4) == FAILURE) { \ return; \ } \ } else { \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s, p1, p2, p3, p4) == FAILURE) { \ return; \ } \ } \ DOMXML_GET_OBJ(ret, zval, le); #define DOMXML_LOAD_PARSING 0 #define DOMXML_LOAD_VALIDATING 1 #define DOMXML_LOAD_RECOVERING 2 #define DOMXML_LOAD_SUBSTITUTE_ENTITIES 4 #define DOMXML_LOAD_COMPLETE_ATTRS 8 static int le_domxmldocp; static int le_domxmldoctypep; static int le_domxmldtdp; static int le_domxmlnodep; static int le_domxmlelementp; static int le_domxmlattrp; static int le_domxmlcdatap; static int le_domxmltextp; static int le_domxmlpip; static int le_domxmlcommentp; static int le_domxmlnotationp; static int le_domxmlparserp; /*static int le_domxmlentityp;*/ static int le_domxmlentityrefp; /*static int le_domxmlnsp;*/ #if HAVE_DOMXSLT static int le_domxsltstylesheetp; #endif #if defined(LIBXML_XPATH_ENABLED) static int le_xpathctxp; static int le_xpathobjectp; #endif zend_class_entry *domxmldoc_class_entry; zend_class_entry *domxmldoctype_class_entry; zend_class_entry *domxmlelement_class_entry; zend_class_entry *domxmldtd_class_entry; zend_class_entry *domxmlnode_class_entry; zend_class_entry *domxmlattr_class_entry; zend_class_entry *domxmlcdata_class_entry; zend_class_entry *domxmltext_class_entry; zend_class_entry *domxmlpi_class_entry; zend_class_entry *domxmlcomment_class_entry; zend_class_entry *domxmlnotation_class_entry; zend_class_entry *domxmlentity_class_entry; zend_class_entry *domxmlentityref_class_entry; zend_class_entry *domxmlns_class_entry; zend_class_entry *domxmlparser_class_entry; #if defined(LIBXML_XPATH_ENABLED) zend_class_entry *xpathctx_class_entry; zend_class_entry *xpathobject_class_entry; #endif #if HAVE_DOMXSLT zend_class_entry *domxsltstylesheet_class_entry; #endif static int node_attributes(zval **attributes, xmlNode *nodep TSRMLS_DC); static int node_children(zval **children, xmlNode *nodep TSRMLS_DC); static zend_function_entry domxml_functions[] = { PHP_FE(domxml_version, NULL) PHP_FE(xmldoc, NULL) PHP_FALIAS(domxml_open_mem, xmldoc, NULL) PHP_FE(xmldocfile, NULL) PHP_FALIAS(domxml_open_file, xmldocfile, NULL) #if defined(LIBXML_HTML_ENABLED) PHP_FE(html_doc, NULL) PHP_FE(html_doc_file, NULL) #endif PHP_FE(domxml_xmltree, NULL) PHP_FALIAS(xmltree, domxml_xmltree, NULL) PHP_FE(domxml_substitute_entities_default, NULL) PHP_FE(domxml_add_root, NULL) PHP_FE(domxml_dump_mem, NULL) PHP_FE(domxml_dump_mem_file, NULL) PHP_FE(domxml_dump_node, NULL) #if defined(LIBXML_HTML_ENABLED) PHP_FE(domxml_html_dump_mem, NULL) #endif PHP_FE(domxml_node_attributes, NULL) PHP_FE(domxml_elem_get_attribute, NULL) PHP_FE(domxml_elem_set_attribute, NULL) PHP_FE(domxml_node_children, NULL) PHP_FE(domxml_node_has_attributes, NULL) PHP_FE(domxml_node_new_child, NULL) PHP_FE(domxml_node, NULL) PHP_FE(domxml_node_unlink_node, NULL) PHP_FE(domxml_node_set_content, NULL) PHP_FE(domxml_node_get_content, NULL) PHP_FE(domxml_new_xmldoc, NULL) PHP_FALIAS(domxml_new_doc, domxml_new_xmldoc, NULL) PHP_FE(domxml_parser, NULL) PHP_FE(domxml_parser_add_chunk, NULL) PHP_FE(domxml_parser_end, NULL) #if defined(LIBXML_XPATH_ENABLED) PHP_FE(xpath_new_context, NULL) PHP_FE(xpath_eval, NULL) PHP_FE(xpath_eval_expression, NULL) PHP_FE(xpath_register_ns, NULL) PHP_FE(domxml_doc_get_elements_by_tagname, NULL) PHP_FE(domxml_doc_get_element_by_id, NULL) #endif #if defined(LIBXML_XPTR_ENABLED) PHP_FE(xptr_new_context, NULL) PHP_FE(xptr_eval, NULL) #endif #if HAVE_DOMXSLT PHP_FE(domxml_xslt_version, NULL) PHP_FE(domxml_xslt_stylesheet, NULL) PHP_FE(domxml_xslt_stylesheet_doc, NULL) PHP_FE(domxml_xslt_stylesheet_file, NULL) PHP_FE(domxml_xslt_process, NULL) #endif PHP_FALIAS(domxml_root, domxml_doc_document_element, NULL) PHP_FALIAS(domxml_attributes, domxml_node_attributes, NULL) PHP_FALIAS(domxml_get_attribute, domxml_elem_get_attribute, NULL) PHP_FALIAS(domxml_getattr, domxml_elem_get_attribute, NULL) PHP_FALIAS(domxml_set_attribute, domxml_elem_set_attribute, NULL) PHP_FALIAS(domxml_setattr, domxml_elem_set_attribute, NULL) PHP_FALIAS(domxml_children, domxml_node_children, NULL) PHP_FALIAS(domxml_new_child, domxml_node_new_child, NULL) PHP_FALIAS(domxml_unlink_node, domxml_node_unlink_node, NULL) PHP_FALIAS(set_content, domxml_node_set_content, NULL) PHP_FALIAS(new_xmldoc, domxml_new_xmldoc, NULL) PHP_FALIAS(domxml_dumpmem, domxml_dump_mem, NULL) {NULL, NULL, NULL} }; static function_entry php_domxmldoc_class_functions[] = { PHP_FALIAS(doctype, domxml_doc_doctype, NULL) PHP_FALIAS(implementation, domxml_doc_implementation, NULL) PHP_FALIAS(document_element, domxml_doc_document_element, NULL) PHP_FALIAS(create_element, domxml_doc_create_element, NULL) PHP_FALIAS(create_text_node, domxml_doc_create_text_node, NULL) PHP_FALIAS(create_comment, domxml_doc_create_comment, NULL) PHP_FALIAS(create_attribute, domxml_doc_create_attribute, NULL) PHP_FALIAS(create_cdata_section, domxml_doc_create_cdata_section, NULL) PHP_FALIAS(create_entity_reference, domxml_doc_create_entity_reference, NULL) PHP_FALIAS(create_processing_instruction, domxml_doc_create_processing_instruction, NULL) PHP_FALIAS(get_elements_by_tagname, domxml_doc_get_elements_by_tagname, NULL) PHP_FALIAS(get_element_by_id, domxml_doc_get_element_by_id, NULL) /* Everything below this comment is none DOM compliant */ /* children is deprecated because it is inherited from DomNode */ /* PHP_FALIAS(children, domxml_node_children, NULL) */ PHP_FALIAS(root, domxml_doc_document_element, NULL) PHP_FALIAS(add_root, domxml_add_root, NULL) PHP_FALIAS(imported_node, domxml_doc_imported_node, NULL) PHP_FALIAS(dtd, domxml_intdtd, NULL) PHP_FALIAS(ids, domxml_doc_ids, NULL) PHP_FALIAS(dumpmem, domxml_dump_mem, NULL) PHP_FALIAS(dump_mem, domxml_dump_mem, NULL) PHP_FALIAS(dump_mem_file, domxml_dump_mem_file, NULL) PHP_FALIAS(dump_file, domxml_dump_mem_file, NULL) #if defined(LIBXML_HTML_ENABLED) PHP_FALIAS(html_dump_mem, domxml_html_dump_mem, NULL) #endif #if defined(LIBXML_XPATH_ENABLED) PHP_FALIAS(xpath_init, xpath_init, NULL) PHP_FALIAS(xpath_new_context, xpath_new_context, NULL) PHP_FALIAS(xptr_new_context, xptr_new_context, NULL) #endif {NULL, NULL, NULL} }; static function_entry php_domxmlparser_class_functions[] = { PHP_FALIAS(add_chunk, domxml_parser_add_chunk, NULL) PHP_FALIAS(end, domxml_parser_end, NULL) PHP_FALIAS(set_keep_blanks, domxml_parser_set_keep_blanks, NULL) {NULL, NULL, NULL} }; static function_entry php_domxmldoctype_class_functions[] = { PHP_FALIAS(name, domxml_doctype_name, NULL) PHP_FALIAS(entities, domxml_doctype_entities, NULL) PHP_FALIAS(notations, domxml_doctype_notations, NULL) PHP_FALIAS(system_id, domxml_doctype_system_id, NULL) PHP_FALIAS(public_id, domxml_doctype_public_id, NULL) /* PHP_FALIAS(internal_subset, domxml_doctype_internal_subset, NULL) */ {NULL, NULL, NULL} }; static zend_function_entry php_domxmldtd_class_functions[] = { {NULL, NULL, NULL} }; static zend_function_entry php_domxmlnode_class_functions[] = { PHP_FALIAS(domnode, domxml_node, NULL) PHP_FALIAS(node_name, domxml_node_name, NULL) PHP_FALIAS(node_type, domxml_node_type, NULL) PHP_FALIAS(node_value, domxml_node_value, NULL) PHP_FALIAS(first_child, domxml_node_first_child, NULL) PHP_FALIAS(last_child, domxml_node_last_child, NULL) PHP_FALIAS(children, domxml_node_children, NULL) PHP_FALIAS(child_nodes, domxml_node_children, NULL) PHP_FALIAS(previous_sibling, domxml_node_previous_sibling, NULL) PHP_FALIAS(next_sibling, domxml_node_next_sibling, NULL) PHP_FALIAS(has_child_nodes, domxml_node_has_child_nodes, NULL) PHP_FALIAS(parent, domxml_node_parent, NULL) PHP_FALIAS(parent_node, domxml_node_parent, NULL) PHP_FALIAS(insert_before, domxml_node_insert_before, NULL) PHP_FALIAS(append_child, domxml_node_append_child, NULL) PHP_FALIAS(remove_child, domxml_node_remove_child, NULL) PHP_FALIAS(replace_child, domxml_node_replace_child, NULL) PHP_FALIAS(owner_document, domxml_node_owner_document, NULL) PHP_FALIAS(new_child, domxml_node_new_child, NULL) PHP_FALIAS(attributes, domxml_node_attributes, NULL) PHP_FALIAS(has_attributes, domxml_node_has_attributes, NULL) PHP_FALIAS(prefix, domxml_node_prefix, NULL) PHP_FALIAS(clone_node, domxml_clone_node, NULL) /* Non DOM functions start here */ PHP_FALIAS(add_child, domxml_node_append_child, NULL) PHP_FALIAS(append_sibling, domxml_node_append_sibling, NULL) PHP_FALIAS(node, domxml_node, NULL) PHP_FALIAS(unlink, domxml_node_unlink_node, NULL) PHP_FALIAS(unlink_node, domxml_node_unlink_node, NULL) PHP_FALIAS(replace_node, domxml_node_replace_node, NULL) PHP_FALIAS(set_content, domxml_node_set_content, NULL) PHP_FALIAS(get_content, domxml_node_get_content, NULL) PHP_FALIAS(text_concat, domxml_node_text_concat, NULL) PHP_FALIAS(set_name, domxml_node_set_name, NULL) PHP_FALIAS(is_blank_node, domxml_is_blank_node, NULL) PHP_FALIAS(dump_node, domxml_dump_node, NULL) {NULL, NULL, NULL} }; static zend_function_entry php_domxmlelement_class_functions[] = { PHP_FALIAS(domelement, domxml_element, NULL) PHP_FALIAS(name, domxml_elem_tagname, NULL) PHP_FALIAS(tagname, domxml_elem_tagname, NULL) PHP_FALIAS(get_attribute, domxml_elem_get_attribute, NULL) PHP_FALIAS(set_attribute, domxml_elem_set_attribute, NULL) PHP_FALIAS(remove_attribute, domxml_elem_remove_attribute, NULL) PHP_FALIAS(get_attribute_node, domxml_elem_get_attribute_node, NULL) PHP_FALIAS(set_attribute_node, domxml_elem_set_attribute_node, NULL) PHP_FALIAS(get_elements_by_tagname, domxml_elem_get_elements_by_tagname, NULL) PHP_FALIAS(has_attribute, domxml_elem_has_attribute, NULL) {NULL, NULL, NULL} }; static zend_function_entry php_domxmlcdata_class_functions[] = { PHP_FALIAS(length, domxml_cdata_length, NULL) {NULL, NULL, NULL} }; static zend_function_entry php_domxmltext_class_functions[] = { {NULL, NULL, NULL} }; static zend_function_entry php_domxmlcomment_class_functions[] = { {NULL, NULL, NULL} }; static zend_function_entry php_domxmlnotation_class_functions[] = { PHP_FALIAS(public_id, domxml_notation_public_id, NULL) PHP_FALIAS(system_id, domxml_notation_system_id, NULL) {NULL, NULL, NULL} }; static zend_function_entry php_domxmlentityref_class_functions[] = { {NULL, NULL, NULL} }; static zend_function_entry php_domxmlentity_class_functions[] = { /* PHP_FALIAS(public_id, domxml_entity_public_id, NULL) PHP_FALIAS(system_id, domxml_entity_system_id, NULL) PHP_FALIAS(notation_name, domxml_entity_notation_name, NULL) */ {NULL, NULL, NULL} }; static zend_function_entry php_domxmlpi_class_functions[] = { PHP_FALIAS(target, domxml_pi_target, NULL) PHP_FALIAS(data, domxml_pi_data, NULL) {NULL, NULL, NULL} }; #if defined(LIBXML_XPATH_ENABLED) static zend_function_entry php_xpathctx_class_functions[] = { PHP_FALIAS(xpath_eval, xpath_eval, NULL) PHP_FALIAS(xpath_eval_expression, xpath_eval_expression, NULL) PHP_FALIAS(xpath_register_ns, xpath_register_ns, NULL) {NULL, NULL, NULL} }; static zend_function_entry php_xpathobject_class_functions[] = { {NULL, NULL, NULL} }; #endif static zend_function_entry php_domxmlattr_class_functions[] = { PHP_FALIAS(name, domxml_attr_name, NULL) PHP_FALIAS(value, domxml_attr_value, NULL) PHP_FALIAS(specified, domxml_attr_specified, NULL) /* PHP_FALIAS(owner_element, domxml_attr_owner_element, NULL) */ {NULL, NULL, NULL} }; static zend_function_entry php_domxmlns_class_functions[] = { {NULL, NULL, NULL} }; #if HAVE_DOMXSLT static zend_function_entry php_domxsltstylesheet_class_functions[] = { /* TODO: maybe some more methods? */ PHP_FALIAS(process, domxml_xslt_process, NULL) {NULL, NULL, NULL} }; #endif zend_module_entry domxml_module_entry = { STANDARD_MODULE_HEADER, "domxml", domxml_functions, PHP_MINIT(domxml), NULL, PHP_RINIT(domxml), NULL, PHP_MINFO(domxml), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_DOMXML ZEND_GET_MODULE(domxml) #endif static void dom_object_set_data(void *obj, zval *wrapper) { /* char tmp[20]; sprintf(tmp, "%08X", obj); fprintf(stderr, "Adding %s to hash\n", tmp); */ ((xmlNodePtr) obj)->_private = wrapper; } static zval *dom_object_get_data(void *obj) { /* char tmp[20]; sprintf(tmp, "%08X", obj); fprintf(stderr, "Trying getting %s from object ...", tmp); if(((xmlNodePtr) obj)->_private) fprintf(stderr, " found\n"); else fprintf(stderr, " not found\n"); */ return ((zval *) (((xmlNodePtr) obj)->_private)); } static inline void node_wrapper_dtor(xmlNodePtr node) { zval *wrapper; int refcount = 0; /* FIXME: type check probably unnecessary here? */ if (!node || Z_TYPE_P(node) == XML_DTD_NODE) return; wrapper = dom_object_get_data(node); if (wrapper != NULL) { refcount = wrapper->refcount; zval_ptr_dtor(&wrapper); /*only set it to null, if refcount was 1 before, otherwise it has still needed references */ if (refcount == 1) { dom_object_set_data(node, NULL); } } } static inline void attr_list_wrapper_dtor(xmlAttrPtr attr) { while (attr != NULL) { node_wrapper_dtor((xmlNodePtr) attr); attr = attr->next; } } static inline void node_list_wrapper_dtor(xmlNodePtr node) { while (node != NULL) { node_list_wrapper_dtor(node->children); switch (node->type) { /* Skip property freeing for the following types */ case XML_ATTRIBUTE_DECL: case XML_DTD_NODE: case XML_ENTITY_DECL: break; default: attr_list_wrapper_dtor(node->properties); } node_wrapper_dtor(node); node = node->next; } } static xmlNodeSetPtr php_get_elements_by_tagname(xmlNodePtr n, xmlChar* name) { xmlNodeSetPtr rv = NULL; xmlNodePtr cld = NULL; if ( n != NULL && name != NULL ) { cld = n->children; while ( cld != NULL ) { if ( xmlStrcmp( name, cld->name ) == 0 ){ if ( rv == NULL ) { rv = xmlXPathNodeSetCreate( cld ) ; } else { xmlXPathNodeSetAdd( rv, cld ); } } cld = cld->next; } } return rv; } static void php_free_xml_doc(zend_rsrc_list_entry *rsrc TSRMLS_DC) { xmlDoc *doc = (xmlDoc *) rsrc->ptr; if (doc) { node_list_wrapper_dtor(doc->children); node_wrapper_dtor((xmlNodePtr) doc); xmlFreeDoc(doc); } } static void php_free_xml_node(zend_rsrc_list_entry *rsrc TSRMLS_DC) { xmlNodePtr node = (xmlNodePtr) rsrc->ptr; /* if node has no parent, it will not be freed by php_free_xml_doc, so do it here and for all children as well. */ if (node->parent == NULL) { node_list_wrapper_dtor(node->children); node_wrapper_dtor(node); xmlFreeNode(node); } else { node_wrapper_dtor(node); } } static void php_free_xml_attr(zend_rsrc_list_entry *rsrc TSRMLS_DC) { xmlNodePtr node = (xmlNodePtr) rsrc->ptr; if (node->parent == NULL) { node_wrapper_dtor(node); xmlFreeProp((xmlAttrPtr) node); } else { node_wrapper_dtor(node); } } #if defined(LIBXML_XPATH_ENABLED) static void php_free_xpath_context(zend_rsrc_list_entry *rsrc TSRMLS_DC) { xmlXPathContextPtr ctx = (xmlXPathContextPtr) rsrc->ptr; if (ctx) { if (ctx->user) { zval *wrapper = ctx->user; zval_ptr_dtor(&wrapper); } xmlXPathFreeContext(ctx); } } static void php_free_xpath_object(zend_rsrc_list_entry *rsrc TSRMLS_DC) { xmlXPathObjectPtr obj = (xmlXPathObjectPtr) rsrc->ptr; if (obj) { if (obj->user) { zval *wrapper = obj->user; zval_ptr_dtor(&wrapper); } xmlXPathFreeObject(obj); } } #endif static void php_free_xml_parser(zend_rsrc_list_entry *rsrc TSRMLS_DC) { xmlParserCtxtPtr parser = (xmlParserCtxtPtr) rsrc->ptr; if (parser) { zval *wrapper = dom_object_get_data(parser); zval_ptr_dtor(&wrapper); xmlFreeParserCtxt(parser); } } #if HAVE_DOMXSLT static void php_free_xslt_stylesheet(zend_rsrc_list_entry *rsrc TSRMLS_DC) { xsltStylesheetPtr sheet = (xsltStylesheetPtr) rsrc->ptr; if (sheet) { node_wrapper_dtor((xmlNodePtr) sheet); xsltFreeStylesheet(sheet); } } static void xsltstylesheet_set_data(void *obj, zval *wrapper) { /* char tmp[20]; sprintf(tmp, "%08X", obj); fprintf(stderr, "Adding %s to hash\n", tmp); */ ((xsltStylesheetPtr) obj)->_private = wrapper; } static zval *xsltstylesheet_get_data(void *obj) { /* char tmp[20]; sprintf(tmp, "%08X", obj); fprintf(stderr, "Trying getting %s from object ...", tmp); if(((xmlNodePtr) obj)->_private) fprintf(stderr, " found\n"); else fprintf(stderr, " not found\n"); */ return ((zval *) (((xsltStylesheetPtr) obj)->_private)); } void *php_xsltstylesheet_get_object(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC) { void *obj; zval **handle; int type; if (NULL == wrapper) { php_error(E_WARNING, "xsltstylesheet_get_object() invalid wrapper object passed"); return NULL; } if (Z_TYPE_P(wrapper) != IS_OBJECT) { php_error(E_WARNING, "%s(): wrapper is not an object", get_active_function_name(TSRMLS_C)); return NULL; } if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) == FAILURE) { php_error(E_WARNING, "%s(): underlying object missing", get_active_function_name(TSRMLS_C)); return NULL; } obj = zend_list_find(Z_LVAL_PP(handle), &type); if (!obj || ((type != rsrc_type1) && (type != rsrc_type2))) { php_error(E_WARNING, "%s(): underlying object missing or of invalid type", get_active_function_name(TSRMLS_C)); return NULL; } return obj; } static void php_xsltstylesheet_set_object(zval *wrapper, void *obj, int rsrc_type) { zval *handle, *addr; MAKE_STD_ZVAL(handle); Z_TYPE_P(handle) = IS_LONG; Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type); MAKE_STD_ZVAL(addr); Z_TYPE_P(addr) = IS_LONG; Z_LVAL_P(addr) = (int) obj; zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL); zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL); zval_add_ref(&wrapper); xsltstylesheet_set_data(obj, wrapper); } #endif /* HAVE_DOMXSLT */ void *php_xpath_get_object(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC) { void *obj; zval **handle; int type; if (NULL == wrapper) { php_error(E_WARNING, "php_xpath_get_object() invalid wrapper object passed"); return NULL; } if (Z_TYPE_P(wrapper) != IS_OBJECT) { php_error(E_WARNING, "%s(): wrapper is not an object", get_active_function_name(TSRMLS_C)); return NULL; } if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) == FAILURE) { php_error(E_WARNING, "%s(): underlying object missing", get_active_function_name(TSRMLS_C)); return NULL; } obj = zend_list_find(Z_LVAL_PP(handle), &type); if (!obj || ((type != rsrc_type1) && (type != rsrc_type2))) { php_error(E_WARNING, "%s(): underlying object missing or of invalid type", get_active_function_name(TSRMLS_C)); return NULL; } return obj; } static void xpath_object_set_data(void *obj, zval *wrapper) { /* char tmp[20]; sprintf(tmp, "%08X", obj); fprintf(stderr, "Adding %s to hash\n", tmp); */ ((xmlXPathObjectPtr) obj)->user = wrapper; } static zval *xpath_object_get_data(void *obj) { /* char tmp[20]; sprintf(tmp, "%08X", obj); fprintf(stderr, "Trying getting %s from hash ...", tmp); if(((xmlXPathObjectPtr) obj)->user) fprintf(stderr, " found\n"); else fprintf(stderr, " not found\n"); */ return ((zval *) (((xmlXPathObjectPtr) obj)->user)); } static void php_xpath_set_object(zval *wrapper, void *obj, int rsrc_type) { zval *handle, *addr; MAKE_STD_ZVAL(handle); Z_TYPE_P(handle) = IS_LONG; Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type); MAKE_STD_ZVAL(addr); Z_TYPE_P(addr) = IS_LONG; Z_LVAL_P(addr) = (int) obj; zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL); zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL); zval_add_ref(&wrapper); xpath_object_set_data(obj, wrapper); } static zval *php_xpathobject_new(xmlXPathObjectPtr obj, int *found TSRMLS_DC) { zval *wrapper; *found = 0; if (!obj) { MAKE_STD_ZVAL(wrapper); ZVAL_NULL(wrapper); return wrapper; } if ((wrapper = (zval *) xpath_object_get_data((void *) obj))) { zval_add_ref(&wrapper); *found = 1; return wrapper; } MAKE_STD_ZVAL(wrapper); object_init_ex(wrapper, xpathobject_class_entry); /* rsrc_type = le_xpathobjectp; php_xpath_set_object(wrapper, (void *) obj, rsrc_type); */ php_xpath_set_object(wrapper, (void *) obj, le_xpathobjectp); return (wrapper); } void *php_xpath_get_context(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC) { void *obj; zval **handle; int type; if (NULL == wrapper) { php_error(E_WARNING, "php_xpath_get_context() invalid wrapper object passed"); return NULL; } if (Z_TYPE_P(wrapper) != IS_OBJECT) { php_error(E_WARNING, "%s(): wrapper is not an object", get_active_function_name(TSRMLS_C)); return NULL; } if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) == FAILURE) { php_error(E_WARNING, "%s(): underlying object missing", get_active_function_name(TSRMLS_C)); return NULL; } obj = zend_list_find(Z_LVAL_PP(handle), &type); if (!obj || ((type != rsrc_type1) && (type != rsrc_type2))) { php_error(E_WARNING, "%s(): underlying object missing or of invalid type", get_active_function_name(TSRMLS_C)); return NULL; } return obj; } static void xpath_context_set_data(void *obj, zval *wrapper) { /* char tmp[20]; sprintf(tmp, "%08X", obj); fprintf(stderr, "Adding %s to hash\n", tmp); */ ((xmlXPathContextPtr) obj)->user = (void *) wrapper; } static zval *xpath_context_get_data(void *obj) { /* char tmp[20]; sprintf(tmp, "%08X", obj); fprintf(stderr, "Trying getting %s from hash ...", tmp); if(((xmlXPathContextPtr) obj)->user) fprintf(stderr, " found\n"); else fprintf(stderr, " not found\n"); */ return ((zval *) (((xmlXPathContextPtr) obj)->user)); } static void php_xpath_set_context(zval *wrapper, void *obj, int rsrc_type) { zval *handle, *addr; MAKE_STD_ZVAL(handle); Z_TYPE_P(handle) = IS_LONG; Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type); MAKE_STD_ZVAL(addr); Z_TYPE_P(addr) = IS_LONG; Z_LVAL_P(addr) = (int) obj; zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL); zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL); zval_add_ref(&wrapper); xpath_context_set_data(obj, wrapper); } static zval *php_xpathcontext_new(xmlXPathContextPtr obj, int *found TSRMLS_DC) { zval *wrapper; int rsrc_type; *found = 0; if (!obj) { MAKE_STD_ZVAL(wrapper); ZVAL_NULL(wrapper); return wrapper; } if ((wrapper = (zval *) xpath_context_get_data((void *) obj))) { zval_add_ref(&wrapper); *found = 1; return wrapper; } MAKE_STD_ZVAL(wrapper); /* fprintf(stderr, "Adding new XPath Context\n"); */ object_init_ex(wrapper, xpathctx_class_entry); rsrc_type = le_xpathctxp; php_xpath_set_context(wrapper, (void *) obj, rsrc_type); return (wrapper); } /* helper functions for xmlparser stuff */ static void xmlparser_set_data(void *obj, zval *wrapper) { ((xmlParserCtxtPtr) obj)->_private = wrapper; } static void php_xmlparser_set_object(zval *wrapper, void *obj, int rsrc_type) { zval *handle, *addr; MAKE_STD_ZVAL(handle); Z_TYPE_P(handle) = IS_LONG; Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type); MAKE_STD_ZVAL(addr); Z_TYPE_P(addr) = IS_LONG; Z_LVAL_P(addr) = (int) obj; zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL); zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL); zval_add_ref(&wrapper); xmlparser_set_data(obj, wrapper); } static zval *php_xmlparser_new(xmlParserCtxtPtr obj, int *found TSRMLS_DC) { zval *wrapper; int rsrc_type; *found = 0; if (!obj) { MAKE_STD_ZVAL(wrapper); ZVAL_NULL(wrapper); return wrapper; } MAKE_STD_ZVAL(wrapper); object_init_ex(wrapper, domxmlparser_class_entry); rsrc_type = le_domxmlparserp; php_xmlparser_set_object(wrapper, (void *) obj, rsrc_type); return (wrapper); } void *php_dom_get_object(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC) { void *obj; zval **handle; int type; if (NULL == wrapper) { php_error(E_WARNING, "php_dom_get_object() invalid wrapper object passed"); return NULL; } if (Z_TYPE_P(wrapper) != IS_OBJECT) { php_error(E_WARNING, "%s(): wrapper is not an object", get_active_function_name(TSRMLS_C)); return NULL; } if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) == FAILURE) { php_error(E_WARNING, "%s(): underlying object missing", get_active_function_name(TSRMLS_C)); return NULL; } obj = zend_list_find(Z_LVAL_PP(handle), &type); /* The following test should be replaced with search in all parents */ if (!obj) { /* || ((type != rsrc_type1) && (type != rsrc_type2))) { */ php_error(E_WARNING, "%s(): underlying object missing or of invalid type", get_active_function_name(TSRMLS_C)); return NULL; } return obj; } static void php_dom_set_object(zval *wrapper, void *obj, int rsrc_type) { zval *handle, *addr; MAKE_STD_ZVAL(handle); Z_TYPE_P(handle) = IS_LONG; Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type); MAKE_STD_ZVAL(addr); Z_TYPE_P(addr) = IS_LONG; Z_LVAL_P(addr) = (int) obj; zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL); zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL); zval_add_ref(&wrapper); dom_object_set_data(obj, wrapper); } static zval *php_domobject_new(xmlNodePtr obj, int *found TSRMLS_DC) { zval *wrapper; char *content; int rsrc_type; *found = 0; if (!obj) { MAKE_STD_ZVAL(wrapper); ZVAL_NULL(wrapper); return wrapper; } if ((wrapper = (zval *) dom_object_get_data((void *) obj))) { zval_add_ref(&wrapper); *found = 1; return wrapper; } MAKE_STD_ZVAL(wrapper); switch (Z_TYPE_P(obj)) { case XML_ELEMENT_NODE: { xmlNodePtr nodep = obj; object_init_ex(wrapper, domxmlelement_class_entry); rsrc_type = le_domxmlelementp; add_property_long(wrapper, "type", Z_TYPE_P(nodep)); add_property_stringl(wrapper, "tagname", (char *) nodep->name, strlen(nodep->name), 1); break; } case XML_TEXT_NODE: { xmlNodePtr nodep = obj; object_init_ex(wrapper, domxmltext_class_entry); rsrc_type = le_domxmltextp; content = xmlNodeGetContent(nodep); add_property_long(wrapper, "type", Z_TYPE_P(nodep)); add_property_stringl(wrapper, "name", "#text", 5, 1); if (content) add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1); xmlFree(content); break; } case XML_COMMENT_NODE: { xmlNodePtr nodep = obj; object_init_ex(wrapper, domxmlcomment_class_entry); rsrc_type = le_domxmlcommentp; content = xmlNodeGetContent(nodep); if (content) { add_property_long(wrapper, "type", Z_TYPE_P(nodep)); add_property_stringl(wrapper, "name", "#comment", 8, 1); add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1); xmlFree(content); } break; } case XML_PI_NODE: { xmlNodePtr nodep = obj; object_init_ex(wrapper, domxmlpi_class_entry); rsrc_type = le_domxmlpip; content = xmlNodeGetContent(nodep); add_property_stringl(wrapper, "name", (char *) nodep->name, strlen(nodep->name), 1); if (content) { add_property_stringl(wrapper, "value", (char *) content, strlen(content), 1); xmlFree(content); } break; } case XML_ENTITY_REF_NODE: { xmlNodePtr nodep = obj; object_init_ex(wrapper, domxmlentityref_class_entry); rsrc_type = le_domxmlentityrefp; add_property_stringl(wrapper, "name", (char *) nodep->name, strlen(nodep->name), 1); break; } case XML_ENTITY_DECL: case XML_ELEMENT_DECL: { xmlNodePtr nodep = obj; object_init_ex(wrapper, domxmlnode_class_entry); rsrc_type = le_domxmlnodep; add_property_long(wrapper, "type", Z_TYPE_P(nodep)); add_property_stringl(wrapper, "name", (char *) nodep->name, strlen(nodep->name), 1); if (Z_TYPE_P(obj) == XML_ENTITY_REF_NODE) { content = xmlNodeGetContent(nodep); if (content) { add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1); xmlFree(content); } } break; } case XML_ATTRIBUTE_NODE: { xmlAttrPtr attrp = (xmlAttrPtr) obj; object_init_ex(wrapper, domxmlattr_class_entry); rsrc_type = le_domxmlattrp; add_property_long(wrapper, "type", Z_TYPE_P(attrp)); add_property_stringl(wrapper, "name", (char *) attrp->name, strlen(attrp->name), 1); content = xmlNodeGetContent((xmlNodePtr) attrp); if (content) { add_property_stringl(wrapper, "value", (char *) content, strlen(content), 1); xmlFree(content); } break; } case XML_DOCUMENT_NODE: case XML_HTML_DOCUMENT_NODE: { xmlDocPtr docp = (xmlDocPtr) obj; object_init_ex(wrapper, domxmldoc_class_entry); rsrc_type = le_domxmldocp; if (docp->name) add_property_stringl(wrapper, "name", (char *) docp->name, strlen(docp->name), 1); else add_property_stringl(wrapper, "name", "#document", 9, 1); if (docp->URL) add_property_stringl(wrapper, "url", (char *) docp->URL, strlen(docp->URL), 1); else add_property_stringl(wrapper, "url", "", 0, 1); if (docp->version) add_property_stringl(wrapper, "version", (char *) docp->version, strlen(docp->version), 1); else add_property_stringl(wrapper, "version", "", 0, 1); if (docp->encoding) add_property_stringl(wrapper, "encoding", (char *) docp->encoding, strlen(docp->encoding), 1); add_property_long(wrapper, "standalone", docp->standalone); add_property_long(wrapper, "type", Z_TYPE_P(docp)); add_property_long(wrapper, "compression", docp->compression); add_property_long(wrapper, "charset", docp->charset); break; } /* FIXME: nodes of type XML_DTD_NODE used to be domxmldtd_class_entry. * but the DOM Standard doesn't have a DomDtd class. The DocumentType * class seems to be want we need and the libxml dtd functions are * very much like the methods of DocumentType. I wonder what exactly * is the difference between XML_DTD_NODE and XML_DOCUMENT_TYPE_NODE. * Something like * * ]> * is considered a DTD by libxml, but from the DOM perspective it * rather is a DocumentType */ case XML_DTD_NODE: case XML_DOCUMENT_TYPE_NODE: { xmlDtdPtr dtd = (xmlDtdPtr) obj; object_init_ex(wrapper, domxmldoctype_class_entry); /* rsrc_type = le_domxmldtdp; */ rsrc_type = le_domxmldoctypep; /* add_property_long(wrapper, "type", Z_TYPE_P(dtd)); */ add_property_long(wrapper, "type", XML_DOCUMENT_TYPE_NODE); if (dtd->ExternalID) add_property_string(wrapper, "publicId", (char *) dtd->ExternalID, 1); else add_property_string(wrapper, "publicId", "", 1); if (dtd->SystemID) add_property_string(wrapper, "systemId", (char *) dtd->SystemID, 1); else add_property_string(wrapper, "systemId", "", 1); if (dtd->name) add_property_string(wrapper, "name", (char *) dtd->name, 1); break; } case XML_CDATA_SECTION_NODE: { xmlNodePtr nodep = obj; object_init_ex(wrapper, domxmlcdata_class_entry); rsrc_type = le_domxmlcdatap; content = xmlNodeGetContent(nodep); add_property_long(wrapper, "type", Z_TYPE_P(nodep)); if (content) { add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1); xmlFree(content); } break; } default: php_error(E_WARNING, "%s(): unsupported node type: %d\n", get_active_function_name(TSRMLS_C), Z_TYPE_P(obj)); FREE_ZVAL(wrapper); return NULL; } php_dom_set_object(wrapper, (void *) obj, rsrc_type); return (wrapper); } static void domxml_error(void *ctx, const char *msg, ...) { char buf[1024]; va_list ap; va_start(ap, msg); vsnprintf(buf, 1024, msg, ap); va_end(ap); php_error(E_WARNING, buf); } PHP_RINIT_FUNCTION(domxml) { return SUCCESS; } PHP_MINIT_FUNCTION(domxml) { zend_class_entry ce; le_domxmldocp = zend_register_list_destructors_ex(php_free_xml_doc, NULL, "domdocument", module_number); /* Freeing the document contains freeing the complete tree. Therefore nodes, attributes etc. may not be freed seperately. */ le_domxmlnodep = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domnode", module_number); le_domxmlcommentp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domnode", module_number); le_domxmlattrp = zend_register_list_destructors_ex(php_free_xml_attr, NULL, "domattribute", module_number); le_domxmltextp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domtext", module_number); le_domxmlelementp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domelement", module_number); le_domxmldtdp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domdtd", module_number); le_domxmlcdatap = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domcdata", module_number); le_domxmlentityrefp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domentityref", module_number); le_domxmlpip = zend_register_list_destructors_ex(php_free_xml_node, NULL, "dompi", module_number); le_domxmlparserp = zend_register_list_destructors_ex(php_free_xml_parser, NULL, "domparser", module_number); le_domxmldoctypep = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domdocumenttype", module_number); /* Not yet initialized le_*s */ le_domxmlnotationp = -10003; #if defined(LIBXML_XPATH_ENABLED) le_xpathctxp = zend_register_list_destructors_ex(php_free_xpath_context, NULL, "xpathcontext", module_number); le_xpathobjectp = zend_register_list_destructors_ex(php_free_xpath_object, NULL, "xpathobject", module_number); #endif /* le_domxmlnsp = register_list_destructors(NULL, NULL); */ #if HAVE_DOMXSLT le_domxsltstylesheetp = zend_register_list_destructors_ex(php_free_xslt_stylesheet, NULL, "xsltstylesheet", module_number); #endif INIT_OVERLOADED_CLASS_ENTRY(ce, "DomNode", php_domxmlnode_class_functions, NULL, NULL, NULL); domxmlnode_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomDocument", php_domxmldoc_class_functions, NULL, NULL, NULL); domxmldoc_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomParser", php_domxmlparser_class_functions, NULL, NULL, NULL); domxmlparser_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomDocumentType", php_domxmldoctype_class_functions, NULL, NULL, NULL); domxmldoctype_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "Dtd", php_domxmldtd_class_functions, NULL, NULL, NULL); domxmldtd_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomElement", php_domxmlelement_class_functions, NULL, NULL, NULL); domxmlelement_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomAttribute", php_domxmlattr_class_functions, NULL, NULL, NULL); domxmlattr_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomCData", php_domxmlcdata_class_functions, NULL, NULL, NULL); domxmlcdata_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomText", php_domxmltext_class_functions, NULL, NULL, NULL); domxmltext_class_entry = zend_register_internal_class_ex(&ce, domxmlcdata_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomComment", php_domxmlcomment_class_functions, NULL, NULL, NULL); domxmlcomment_class_entry = zend_register_internal_class_ex(&ce, domxmlcdata_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomProcessingInstruction", php_domxmlpi_class_functions, NULL, NULL, NULL); domxmlpi_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomNotation", php_domxmlnotation_class_functions, NULL, NULL, NULL); domxmlnotation_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomEntity", php_domxmlentity_class_functions, NULL, NULL, NULL); domxmlentity_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomEntityReference", php_domxmlentityref_class_functions, NULL, NULL, NULL); domxmlentityref_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "DomNamespace", php_domxmlns_class_functions, NULL, NULL, NULL); domxmlns_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); #if defined(LIBXML_XPATH_ENABLED) INIT_OVERLOADED_CLASS_ENTRY(ce, "XPathContext", php_xpathctx_class_functions, NULL, NULL, NULL); xpathctx_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "XPathObject", php_xpathobject_class_functions, NULL, NULL, NULL); xpathobject_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); #endif #if HAVE_DOMXSLT INIT_OVERLOADED_CLASS_ENTRY(ce, "XsltStylesheet", php_domxsltstylesheet_class_functions, NULL, NULL, NULL); domxsltstylesheet_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); #endif REGISTER_LONG_CONSTANT("XML_ELEMENT_NODE", XML_ELEMENT_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NODE", XML_ATTRIBUTE_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_TEXT_NODE", XML_TEXT_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_CDATA_SECTION_NODE", XML_CDATA_SECTION_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ENTITY_REF_NODE", XML_ENTITY_REF_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ENTITY_NODE", XML_ENTITY_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_PI_NODE", XML_PI_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_COMMENT_NODE", XML_COMMENT_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_DOCUMENT_NODE", XML_DOCUMENT_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_DOCUMENT_TYPE_NODE", XML_DOCUMENT_TYPE_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_DOCUMENT_FRAG_NODE", XML_DOCUMENT_FRAG_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_NOTATION_NODE", XML_NOTATION_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_HTML_DOCUMENT_NODE", XML_HTML_DOCUMENT_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_DTD_NODE", XML_DTD_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ELEMENT_DECL_NODE", XML_ELEMENT_DECL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_DECL_NODE", XML_ATTRIBUTE_DECL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ENTITY_DECL_NODE", XML_ENTITY_DECL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_NAMESPACE_DECL_NODE", XML_NAMESPACE_DECL, CONST_CS | CONST_PERSISTENT); #ifdef XML_GLOBAL_NAMESPACE REGISTER_LONG_CONSTANT("XML_GLOBAL_NAMESPACE", XML_GLOBAL_NAMESPACE, CONST_CS | CONST_PERSISTENT); #endif REGISTER_LONG_CONSTANT("XML_LOCAL_NAMESPACE", XML_LOCAL_NAMESPACE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_CDATA", XML_ATTRIBUTE_CDATA, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ID", XML_ATTRIBUTE_ID, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_IDREF", XML_ATTRIBUTE_IDREF, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_IDREFS", XML_ATTRIBUTE_IDREFS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ENTITY", XML_ATTRIBUTE_ENTITIES, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NMTOKEN", XML_ATTRIBUTE_NMTOKEN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NMTOKENS", XML_ATTRIBUTE_NMTOKENS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ENUMERATION", XML_ATTRIBUTE_ENUMERATION, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NOTATION", XML_ATTRIBUTE_NOTATION, CONST_CS | CONST_PERSISTENT); #if defined(LIBXML_XPATH_ENABLED) REGISTER_LONG_CONSTANT("XPATH_UNDEFINED", XPATH_UNDEFINED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_NODESET", XPATH_NODESET, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_BOOLEAN", XPATH_BOOLEAN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_NUMBER", XPATH_NUMBER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_STRING", XPATH_STRING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_POINT", XPATH_POINT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_RANGE", XPATH_RANGE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_LOCATIONSET", XPATH_LOCATIONSET, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_USERS", XPATH_USERS, CONST_CS | CONST_PERSISTENT); #endif REGISTER_LONG_CONSTANT("DOMXML_LOAD_PARSING", DOMXML_LOAD_PARSING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DOMXML_LOAD_VALIDATING", DOMXML_LOAD_VALIDATING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DOMXML_LOAD_RECOVERING", DOMXML_LOAD_RECOVERING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DOMXML_LOAD_SUBSTITUTE_ENTITIES", DOMXML_LOAD_SUBSTITUTE_ENTITIES, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DOMXML_LOAD_COMPLETE_ATTRS",DOMXML_LOAD_COMPLETE_ATTRS, CONST_CS | CONST_PERSISTENT); xmlSetGenericErrorFunc(xmlGenericErrorContext, (xmlGenericErrorFunc)domxml_error); #if HAVE_DOMXSLT xsltSetGenericErrorFunc(xsltGenericErrorContext, (xmlGenericErrorFunc)domxml_error); #if HAVE_DOMEXSLT exsltRegisterAll(); #endif #endif return SUCCESS; } /* {{{ proto int domxml_test(int id) Unity function for testing */ PHP_FUNCTION(domxml_test) { zval *id; if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(id); RETURN_LONG(Z_LVAL_P(id)); } /* }}} */ PHP_MINFO_FUNCTION(domxml) { /* don't know why that line was commented out in the previous version, so i left it (cmv) */ php_info_print_table_start(); php_info_print_table_row(2, "DOM/XML", "enabled"); php_info_print_table_row(2, "libxml Version", LIBXML_DOTTED_VERSION); #if defined(LIBXML_HTML_ENABLED) php_info_print_table_row(2, "HTML Support", "enabled"); #endif #if defined(LIBXML_XPATH_ENABLED) php_info_print_table_row(2, "XPath Support", "enabled"); #endif #if defined(LIBXML_XPTR_ENABLED) php_info_print_table_row(2, "XPointer Support", "enabled"); #endif #if HAVE_DOMXSLT php_info_print_table_row(2, "DOM/XSLT", "enabled"); php_info_print_table_row(2, "libxslt Version", LIBXSLT_DOTTED_VERSION); #if HAVE_DOMEXSLT php_info_print_table_row(2, "DOM/EXSLT", "enabled"); php_info_print_table_row(2, "libexslt Version", LIBEXSLT_DOTTED_VERSION); #endif #endif php_info_print_table_end(); } /* {{{ Methods of Class DomAttribute */ /* {{{ proto array domxml_attr_name(void) Returns list of attribute names Notice: domxml_node_name() does exactly the same for attribute-nodes, is this function here still needed, or would an alias be enough? */ PHP_FUNCTION(domxml_attr_name) { zval *id; xmlAttrPtr attrp; DOMXML_GET_THIS_OBJ(attrp, id,le_domxmlattrp); DOMXML_NO_ARGS(); RETURN_STRING((char *) (attrp->name), 1); } /* }}} */ /* {{{ proto array domxml_attr_value(void) Returns list of attribute names */ PHP_FUNCTION(domxml_attr_value) { zval *id; xmlAttrPtr attrp; DOMXML_GET_THIS_OBJ(attrp, id, le_domxmlattrp); DOMXML_NO_ARGS(); RETURN_STRING((char *) xmlNodeGetContent((xmlNodePtr) attrp), 1); } /* }}} */ /* {{{ proto array domxml_attr_specified(void) Returns list of attribute names */ PHP_FUNCTION(domxml_attr_specified) { zval *id; xmlAttrPtr attrp; DOMXML_NOT_IMPLEMENTED(); id = getThis(); attrp = php_dom_get_object(id, le_domxmlattrp, 0 TSRMLS_CC); RETURN_TRUE; } /* }}} */ /* End of Methods DomAttr }}} */ /* {{{ Methods of Class DomProcessingInstruction */ /* {{{ proto array domxml_pi_target(void) Returns target of pi */ PHP_FUNCTION(domxml_pi_target) { zval *id; xmlNodePtr nodep; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlpip); DOMXML_NO_ARGS(); RETURN_STRING((char *) nodep->name, 1); } /* }}} */ /* {{{ proto array domxml_pi_data(void) Returns data of pi */ PHP_FUNCTION(domxml_pi_data) { zval *id; xmlNodePtr nodep; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlpip); DOMXML_NO_ARGS(); RETURN_STRING(xmlNodeGetContent(nodep), 1); } /* }}} */ /* End of Methods of DomProcessingInstruction }}} */ /* {{{ Methods of Class DomCData */ /* {{{ proto array domxml_cdata_length(void) Returns list of attribute names */ PHP_FUNCTION(domxml_cdata_length) { zval *id; xmlNodePtr nodep; DOMXML_NOT_IMPLEMENTED(); id = getThis(); nodep = php_dom_get_object(id, le_domxmlcdatap, 0 TSRMLS_CC); RETURN_LONG(1); } /* }}} */ /* End of Methods DomCDdata }}} */ /* {{{ Methods of Class DomNode */ /* {{{ proto object domxml_node(string name) Creates node */ PHP_FUNCTION(domxml_node) { zval *rv; xmlNode *node; int ret, name_len; char *name; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { return; } node = xmlNewNode(NULL, name); if (!node) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, node, &ret); } /* }}} */ /* {{{ proto object domxml_node_name(void) Returns name of node */ PHP_FUNCTION(domxml_node_name) { zval *id; xmlNode *n; const char *str = NULL; DOMXML_GET_THIS_OBJ(n, id, le_domxmlnodep); DOMXML_NO_ARGS(); switch (Z_TYPE_P(n)) { case XML_ELEMENT_NODE: str = n->name; break; case XML_TEXT_NODE: str = "#text"; break; case XML_ATTRIBUTE_NODE: str = n->name; break; case XML_CDATA_SECTION_NODE: str = "#cdata-section"; break; case XML_ENTITY_REF_NODE: str = n->name; break; case XML_ENTITY_NODE: str = NULL; break; case XML_PI_NODE: str = n->name; break; case XML_COMMENT_NODE: str = "#comment"; break; case XML_DOCUMENT_NODE: str = "#document"; break; case XML_DOCUMENT_FRAG_NODE: str = "#document-fragment"; break; default: str = NULL; break; } if(str != NULL) { RETURN_STRING((char *) str, 1); } else { RETURN_EMPTY_STRING(); } } /* }}} */ /* {{{ proto object domxml_node_value(void) Returns name of value */ PHP_FUNCTION(domxml_node_value) { zval *id; xmlNode *n; char *str = NULL; DOMXML_GET_THIS_OBJ(n, id, le_domxmlnodep); DOMXML_NO_ARGS(); switch (Z_TYPE_P(n)) { case XML_TEXT_NODE: case XML_COMMENT_NODE: case XML_CDATA_SECTION_NODE: case XML_PI_NODE: str = n->content; break; default: str = NULL; break; } if(str != NULL) { RETURN_STRING((char *) str, 1); } else { RETURN_EMPTY_STRING(); } } /* }}} */ /* {{{ proto bool domxml_is_blank_node(void) Returns true if node is blank */ PHP_FUNCTION(domxml_is_blank_node) { zval *id; xmlNode *n; DOMXML_GET_THIS_OBJ(n, id, le_domxmlnodep); DOMXML_NO_ARGS(); if(xmlIsBlankNode(n)) { RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto int domxml_node_type(void) Returns the type of the node */ PHP_FUNCTION(domxml_node_type) { zval *id; xmlNode *node; DOMXML_GET_THIS_OBJ(node, id, le_domxmlnodep); DOMXML_NO_ARGS(); RETURN_LONG(node->type); } /* }}} */ /* {{{ proto bool domxml_clone_node(void) Clones a node */ PHP_FUNCTION(domxml_clone_node) { zval *rv; zval *id; xmlNode *n, *node; int ret, recursive = 0;; DOMXML_GET_THIS_OBJ(n, id, le_domxmlnodep); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &recursive) == FAILURE) { return; } node = xmlCopyNode(n, recursive); if (!node) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, node, &ret); } /* }}} */ /* {{{ proto object domxml_node_first_child(void) Returns first child from list of children */ PHP_FUNCTION(domxml_node_first_child) { zval *id, *rv; xmlNode *nodep, *first; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); DOMXML_NO_ARGS(); first = nodep->children; if (!first) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, first, &ret); } /* }}} */ /* {{{ proto object domxml_node_last_child(void) Returns last child from list of children */ PHP_FUNCTION(domxml_node_last_child) { zval *id, *rv; xmlNode *nodep, *last; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); DOMXML_NO_ARGS(); last = nodep->last; if (!last) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, last, &ret); } /* }}} */ /* {{{ proto object domxml_node_next_sibling(void) Returns next child from list of children */ PHP_FUNCTION(domxml_node_next_sibling) { zval *id, *rv; xmlNode *nodep, *first; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); DOMXML_NO_ARGS(); first = nodep->next; if (!first) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, first, &ret); } /* }}} */ /* {{{ proto object domxml_node_previous_sibling(void) Returns previous child from list of children */ PHP_FUNCTION(domxml_node_previous_sibling) { zval *id, *rv; xmlNode *nodep, *first; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); DOMXML_NO_ARGS(); first = nodep->prev; if (!first) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, first, &ret); } /* }}} */ /* {{{ proto object domxml_node_owner_document(void) Returns document this node belongs to */ PHP_FUNCTION(domxml_node_owner_document) { zval *id, *rv; xmlNode *nodep; xmlDocPtr docp; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); DOMXML_NO_ARGS(); docp = nodep->doc; if (!docp) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret); } /* }}} */ /* {{{ proto object domxml_node_has_child_nodes(void) Returns true if node has children */ PHP_FUNCTION(domxml_node_has_child_nodes) { zval *id; xmlNode *nodep; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); DOMXML_NO_ARGS(); if (nodep->children) { RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto object domxml_node_has_attributes(void) Returns true if node has attributes */ PHP_FUNCTION(domxml_node_has_attributes) { zval *id; xmlNode *nodep; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); DOMXML_NO_ARGS(); if (Z_TYPE_P(nodep) != XML_ELEMENT_NODE) RETURN_FALSE; if (nodep->properties) { RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto string domxml_node_prefix(void) Returns namespace prefix of node */ PHP_FUNCTION(domxml_node_prefix) { zval *id; xmlNode *nodep; xmlNsPtr ns; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); DOMXML_NO_ARGS(); ns = nodep->ns; if (!ns) { RETURN_EMPTY_STRING(); } if (ns->prefix) { RETURN_STRING((char *) (ns->prefix), 1); } else { RETURN_EMPTY_STRING(); } } /* }}} */ /* {{{ proto object domxml_node_parent(void) Returns parent of node */ PHP_FUNCTION(domxml_node_parent) { zval *id, *rv; xmlNode *nodep, *last; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); DOMXML_NO_ARGS(); last = nodep->parent; if (!last) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, last, &ret); } /* }}} */ /* {{{ proto array domxml_node_children(void) Returns list of children nodes */ PHP_FUNCTION(domxml_node_children) { zval *id; xmlNode *nodep, *last; int ret; DOMXML_PARAM_NONE(nodep, id, le_domxmlnodep); /* Even if the nodep is a XML_DOCUMENT_NODE the type is at the same position. */ if ((Z_TYPE_P(nodep) == XML_DOCUMENT_NODE) || (Z_TYPE_P(nodep) == XML_HTML_DOCUMENT_NODE)) last = ((xmlDoc *) nodep)->children; else last = nodep->children; if (!last) { RETURN_FALSE; } if (array_init(return_value) == FAILURE) { RETURN_FALSE; } while (last) { zval *child; child = php_domobject_new(last, &ret TSRMLS_CC); add_next_index_zval(return_value, child); last = last->next; } } /* }}} */ /* {{{ proto void domxml_node_unlink_node([object node]) Deletes the node */ PHP_FUNCTION(domxml_node_unlink_node) { zval *id; xmlNode *nodep; DOMXML_PARAM_NONE(nodep, id, le_domxmlnodep); xmlUnlinkNode(nodep); /* This causes a Segmentation Fault for some reason. Removing it allows the user to re-add the node at some other time, in addition to fixing the segfault. Node will be freed at shutdown. */ /*xmlFreeNode(nodep); zval_dtor(id);*/ /* This is not enough because the children won't be deleted */ } /* }}} */ /* {{{ proto object domxml_node_replace_node(object domnode) Replaces one node with another node */ PHP_FUNCTION(domxml_node_replace_node) { zval *id, *rv, *node; xmlNodePtr repnode, nodep, new_repnode; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) { return; } DOMXML_GET_OBJ(repnode, node, le_domxmlnodep); /* check if the new node is already part of the document. In such a case * we better make a copy to prevent changing identical nodes at different * positions in the document at the same time. * A node created with e.g. create_element() doesn't have parents. */ if(repnode->parent) { if (NULL == (new_repnode = xmlCopyNode(repnode, 1))) { php_error(E_WARNING, "%s(): unable to clone node", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } } else { new_repnode = repnode; } repnode = xmlReplaceNode(nodep, new_repnode); DOMXML_RET_OBJ(rv, nodep, &ret); } /* }}} */ /* {{{ proto object domxml_node_append_child(object domnode) Adds node to list of children */ PHP_FUNCTION(domxml_node_append_child) { zval *id, *rv, *node; xmlNodePtr child, nodep, new_child; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) { return; } DOMXML_GET_OBJ(child, node, le_domxmlnodep); if (child->type == XML_ATTRIBUTE_NODE) { php_error(E_WARNING, "%s(): can't append attribute node", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } if (NULL == (new_child = xmlCopyNode(child, 1))) { php_error(E_WARNING, "%s(): unable to clone node", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } /* FIXME reverted xmlAddChildList; crashes * Uwe: must have been a temporary problem. It works for me with both * xmlAddChildList and xmlAddChild */ child = xmlAddChild(nodep, new_child); if (NULL == child) { php_error(E_WARNING, "%s(): couldn't append node", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } DOMXML_RET_OBJ(rv, child, &ret); } /* }}} */ /* {{{ proto object domxml_node_append_sibling(object domnode) Adds node to list of siblings */ PHP_FUNCTION(domxml_node_append_sibling) { zval *id, *rv, *node; xmlNodePtr child, nodep, new_child; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) { return; } DOMXML_GET_OBJ(child, node, le_domxmlnodep); if (child->type == XML_ATTRIBUTE_NODE) { php_error(E_WARNING, "%s(): can't append attribute node", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } if (NULL == (new_child = xmlCopyNode(child, 1))) { php_error(E_WARNING, "%s(): unable to clone node", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } /* FIXME reverted xmlAddChildList; crashes */ child = xmlAddSibling(nodep, new_child); if (NULL == child) { php_error(E_WARNING, "%s(): couldn't append node", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } DOMXML_RET_OBJ(rv, child, &ret); } /* }}} */ /* {{{ proto object domxml_node_insert_before(object newnode, object refnode) Adds node in list of nodes before given node */ PHP_FUNCTION(domxml_node_insert_before) { zval *id, *rv, *node, *ref; xmlNodePtr child, new_child, nodep, refp; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "oo", &node, &ref) == FAILURE) { return; } DOMXML_GET_OBJ(child, node, le_domxmlnodep); DOMXML_GET_OBJ(refp, ref, le_domxmlnodep); if (NULL == (new_child = xmlCopyNode(child, 1))) { php_error(E_WARNING, "%s(): unable to clone node", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } child = xmlAddPrevSibling(refp, new_child); if (NULL == child) { php_error(E_WARNING, "%s(): couldn't add newnode as the previous sibling of refnode", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } DOMXML_RET_OBJ(rv, child, &ret); } /* }}} */ /* {{{ proto object domxml_node_remove_child(object domnode) Removes node from list of children */ PHP_FUNCTION(domxml_node_remove_child) { zval *id, *node; xmlNodePtr children, child, nodep; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) { return; } DOMXML_GET_OBJ(child, node, le_domxmlnodep); children = nodep->children; if (!children) { RETURN_FALSE; } while (children) { if (children == child) { zval *rv; xmlUnlinkNode(child); DOMXML_RET_OBJ(rv, child, &ret); return; } children = children->next; } RETURN_FALSE } /* }}} */ /* {{{ proto object domxml_node_replace_child(object newnode, object oldnode) Replaces node in list of children */ PHP_FUNCTION(domxml_node_replace_child) { zval *id, *newnode, *oldnode; xmlNodePtr children, newchild, oldchild, nodep; int foundoldchild = 0, foundnewchild = 0; int ret; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "oo", &newnode, &oldnode) == FAILURE) { return; } DOMXML_GET_OBJ(newchild, newnode, le_domxmlnodep); DOMXML_GET_OBJ(oldchild, oldnode, le_domxmlnodep); children = nodep->children; if (!children) { RETURN_FALSE; } /* check for the old child and wether the new child is already a child */ while (children) { if (children == oldchild) { foundoldchild = 1; } if(children == newchild) { foundnewchild = 1; } children = children->next; } /* if the child to replace is existent and the new child isn't already * a child, then do the replacement */ if(foundoldchild && !foundnewchild) { zval *rv; xmlNodePtr node; node = xmlReplaceNode(oldchild, newchild); DOMXML_RET_OBJ(rv, oldchild, &ret); return; } /* If the new child is already a child, then DOM requires to delete * the old one first, but this makes no sense here, since the old and * the new node are identical. */ if(foundnewchild) { zval *rv; DOMXML_RET_OBJ(rv, newchild, &ret); return; } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto bool domxml_node_set_name(string name) Sets name of a node */ PHP_FUNCTION(domxml_node_set_name) { zval *id; xmlNode *nodep; int name_len; char *name; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { return; } xmlNodeSetName(nodep, name); RETURN_TRUE; } /* }}} */ /* {{{ proto array domxml_node_attributes(void) Returns list of attributes of node */ PHP_FUNCTION(domxml_node_attributes) { zval *id, *attrs; xmlNode *nodep; #ifdef oldstyle_for_libxml_1_8_7 xmlAttr *attr; #endif DOMXML_PARAM_NONE(nodep, id, le_domxmlnodep); if (node_attributes(&attrs, nodep TSRMLS_CC) < 0) RETURN_FALSE; *return_value = *attrs; FREE_ZVAL(attrs); #ifdef oldstyle_for_libxml_1_8_7 attr = nodep->properties; if (!attr) { RETURN_FALSE; } if (array_init(return_value) == FAILURE) { RETURN_FALSE; } while (attr) { add_assoc_string(return_value, (char *) attr->name, xmlNodeGetContent(attr), 1); attr = attr->next; } #endif } /* }}} */ /* {{{ proto object domxml_node_new_child(string name, string content) Adds child node to parent node */ PHP_FUNCTION(domxml_node_new_child) { zval *id, *rv; xmlNodePtr child, nodep; int ret, name_len, content_len; char *name, *content = NULL; DOMXML_PARAM_FOUR(nodep, id, le_domxmlnodep, "s|s", &name, &name_len, &content, &content_len); child = xmlNewChild(nodep, NULL, name, content); if (!child) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, child, &ret); } /* }}} */ /* {{{ proto bool domxml_node_set_content(string content) Sets content of a node */ PHP_FUNCTION(domxml_node_set_content) { zval *id; xmlNode *nodep; int content_len; char *content; DOMXML_PARAM_TWO(nodep, id, le_domxmlnodep, "s", &content, &content_len); /* FIXME: another gotcha. If node has children, calling * xmlNodeSetContent will remove the children -> we loose the zval's * To prevent crash, append content if children are set */ if (nodep->children) { xmlNodeAddContentLen(nodep, content, content_len); } else { xmlNodeSetContentLen(nodep, content, content_len); } /* FIXME: Actually the property 'content' of the node has to be updated as well. Since 'content' should disappear sooner or later and being replaces by a function 'content()' I skip this for now */ RETURN_TRUE; } /* }}} */ /* {{{ proto string domxml_node_get_content() Gets content of a node. "Read the value of a node, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted." */ PHP_FUNCTION(domxml_node_get_content) { zval *id; xmlNode *nodep; xmlChar *mem; DOMXML_PARAM_NONE(nodep, id, le_domxmlnodep); mem = xmlNodeGetContent(nodep); if (!mem) { RETURN_FALSE; } RETVAL_STRING(mem,1); xmlFree(mem); } /* }}} */ /* End of Methods DomNode }}} */ /* {{{ Methods of Class DomNotation */ /* {{{ proto string domxml_notation_public_id(void) Returns public id of notation node */ PHP_FUNCTION(domxml_notation_public_id) { zval *id; xmlNotationPtr nodep; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnotationp); DOMXML_NO_ARGS(); if(nodep->PublicID) { RETURN_STRING((char *) (nodep->PublicID), 1); } else { RETURN_EMPTY_STRING(); } } /* }}} */ /* {{{ proto string domxml_notation_system_id(void) Returns system ID of notation node */ PHP_FUNCTION(domxml_notation_system_id) { zval *id; xmlNotationPtr nodep; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnotationp); DOMXML_NO_ARGS(); if(nodep->SystemID) { RETURN_STRING((char *) (nodep->SystemID), 1); } else { RETURN_EMPTY_STRING(); } } /* }}} */ /* End of Methods DomNotation }}} */ /* {{{ Methods of Class DomElement */ /* {{{ proto object domxml_element(string name) Constructor of DomElement */ PHP_FUNCTION(domxml_element) { zval *rv; xmlNode *node; int ret, name_len; char *name; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { return; } node = xmlNewNode(NULL, name); if (!node) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, node, &ret); } /* }}} */ /* {{{ proto string domxml_elem_tagname(void) Returns tag name of element node */ PHP_FUNCTION(domxml_elem_tagname) { zval *id; xmlNode *nodep; DOMXML_NO_ARGS(); DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlelementp); DOMXML_NO_ARGS(); RETURN_STRING((char *) (nodep->name), 1); } /* }}} */ /* {{{ proto string domxml_elem_get_attribute(string attrname) Returns value of given attribute */ PHP_FUNCTION(domxml_elem_get_attribute) { zval *id; xmlNode *nodep; char *name, *value; int name_len; DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len); value = xmlGetProp(nodep, name); if (!value) { RETURN_FALSE; } else { RETVAL_STRING(value, 1); xmlFree(value); } } /* }}} */ /* {{{ proto bool domxml_elem_set_attribute(string attrname, string value) Sets value of given attribute */ PHP_FUNCTION(domxml_elem_set_attribute) { zval *id, *rv; xmlNode *nodep; xmlAttr *attr; int ret, name_len, value_len; char *name, *value; DOMXML_PARAM_FOUR(nodep, id, le_domxmlelementp, "ss", &name, &name_len, &value, &value_len); attr = xmlSetProp(nodep, name, value); if (!attr) { php_error(E_WARNING, "%s(): no such attribute '%s'", get_active_function_name(TSRMLS_C), name); RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) attr, &ret); } /* }}} */ /* {{{ proto string domxml_elem_remove_attribute(string attrname) Removes given attribute */ PHP_FUNCTION(domxml_elem_remove_attribute) { zval *id; xmlNode *nodep; xmlAttr *attrp; int name_len; char *name; DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len); attrp = xmlHasProp(nodep,name); if (attrp == NULL) { RETURN_FALSE; } xmlUnlinkNode((xmlNodePtr)attrp); RETURN_TRUE; } /* }}} */ /* {{{ proto string domxml_elem_get_attribute_node(string attrname) Returns value of given attribute */ PHP_FUNCTION(domxml_elem_get_attribute_node) { zval *id, *rv; xmlNode *nodep; xmlAttr *attrp; int name_len, ret; char *name; DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len); attrp = xmlHasProp(nodep,name); if (attrp == NULL) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) attrp, &ret); } /* }}} */ /* {{{ proto bool domxml_elem_set_attribute_node(object attr) Sets value of given attribute */ PHP_FUNCTION(domxml_elem_set_attribute_node) { zval *id, *arg1, *rv; xmlNode *nodep; xmlAttr *attrp, *newattrp; int ret; if ((ZEND_NUM_ARGS() == 1) && getParameters(ht, 1, &arg1) == SUCCESS) { id = getThis(); nodep = php_dom_get_object(id, le_domxmlelementp, 0 TSRMLS_CC); attrp = php_dom_get_object(arg1, le_domxmlattrp, 0 TSRMLS_CC); } else { WRONG_PARAM_COUNT; } /* FIXME: The following line doesn't work */ newattrp = xmlCopyProp(nodep, attrp); if (!newattrp) { php_error(E_WARNING, "%s(): no such attribute '%s'", get_active_function_name(TSRMLS_C), attrp->name); RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) newattrp, &ret); } /* }}} */ /* {{{ proto string domxml_elem_has_attribute(string attrname) Checks for existenz given attribute */ PHP_FUNCTION(domxml_elem_has_attribute) { zval *id; xmlNode *nodep; char *name, *value; int name_len; DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len); value = xmlGetProp(nodep, name); if (!value) { RETURN_FALSE; } else { xmlFree(value); RETURN_TRUE; } } /* }}} */ #if defined(LIBXML_XPATH_ENABLED) /* {{{ proto string domxml_doc_get_elements_by_tagname(string tagname [,object xpathctx_handle] ) Returns array with nodes with given tagname in document or empty array, if not found*/ PHP_FUNCTION(domxml_doc_get_elements_by_tagname) { zval *id, *rv, *contextnode = NULL,*ctxpin = NULL; xmlXPathContextPtr ctxp; xmlDocPtr docp; xmlXPathObjectPtr xpathobjp; xmlNode *contextnodep; int name_len; char *str,*name; contextnode = NULL; contextnodep = NULL; DOMXML_PARAM_FOUR(docp, id, le_domxmldocp, "s|oo", &name, &name_len,&ctxpin,&contextnodep); /* if no xpath_context was submitted, create a new one */ if (ctxpin == NULL) { ctxp = xmlXPathNewContext(docp); } else { DOMXML_GET_OBJ(ctxp, ctxpin, le_xpathctxp); } if (contextnode) { DOMXML_GET_OBJ(contextnodep, contextnode, le_domxmlnodep); } ctxp->node = contextnodep; str = (char*) emalloc((name_len+3) * sizeof(char)) ; if (str == NULL) { php_error(E_WARNING, "%s(): cannot allocate memory for string", get_active_function_name(TSRMLS_C)); } sprintf(str ,"//%s",name); xpathobjp = xmlXPathEval(str, ctxp); efree(str); ctxp->node = NULL; if (!xpathobjp) { RETURN_FALSE; } MAKE_STD_ZVAL(rv); if(array_init(rv) != SUCCESS) { php_error(E_WARNING, "%s(): cannot create required array", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } switch (Z_TYPE_P(xpathobjp)) { case XPATH_NODESET: { int i; xmlNodeSetPtr nodesetp; if (NULL == (nodesetp = xpathobjp->nodesetval)) { zval_dtor(rv); RETURN_FALSE; } for (i = 0; i < nodesetp->nodeNr; i++) { xmlNodePtr node = nodesetp->nodeTab[i]; zval *child; int retnode; /* construct a node object */ child = php_domobject_new(node, &retnode TSRMLS_CC); zend_hash_next_index_insert(Z_ARRVAL_P(rv), &child, sizeof(zval *), NULL); } break; } default: break; } *return_value = *rv; FREE_ZVAL(rv); } /* }}} */ typedef struct _idsIterator idsIterator; struct _idsIterator { xmlChar *elementId; xmlNode *element; }; static void idsHashScanner(void *payload, void *data, xmlChar *name) { idsIterator *priv = (idsIterator *)data; if (priv->element == NULL && xmlStrEqual (name, priv->elementId)) priv->element = ((xmlNode *)((xmlID *)payload)->attr)->parent; } /* {{{ proto string domxml_doc_get_element_by_id(string id) Returns element for given id or false if not found */ PHP_FUNCTION(domxml_doc_get_element_by_id) { zval *id, *rv = NULL; xmlDocPtr docp; idsIterator iter; xmlHashTable *ids = NULL; int retnode,idname_len; char *idname; DOMXML_PARAM_TWO(docp, id, le_domxmldocp, "s", &idname, &idname_len); ids = (xmlHashTable *) docp->ids; if(ids) { iter.elementId = (xmlChar *) idname; iter.element = NULL; xmlHashScan(ids, idsHashScanner, &iter); rv = php_domobject_new(iter.element, &retnode TSRMLS_CC); SEPARATE_ZVAL(&rv); *return_value = *rv; FREE_ZVAL(rv); } else { RETURN_FALSE; } } /* }}} */ #endif /* {{{ proto string domxml_elem_get_elements_by_tagname(string tagname) Returns array with nodes with given tagname in element or empty array, if not found */ PHP_FUNCTION(domxml_elem_get_elements_by_tagname) { zval *id,*rv; xmlNode *nodep; int name_len,i; char *name; xmlNodeSet *nodesetp; DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len); MAKE_STD_ZVAL(rv); if(array_init(rv) != SUCCESS) { php_error(E_WARNING, "%s(): cannot create required array", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } nodesetp = php_get_elements_by_tagname(nodep,name); if(nodesetp) { for (i = 0; i < nodesetp->nodeNr; i++) { xmlNodePtr node = nodesetp->nodeTab[i]; zval *child; int retnode; child = php_domobject_new(node, &retnode TSRMLS_CC); zend_hash_next_index_insert(Z_ARRVAL_P(rv), &child, sizeof(zval *), NULL); } } *return_value = *rv; FREE_ZVAL(rv); } /* }}} */ /* End of Methods DomElement }}} */ /* {{{ Methods of Class DomDocumentType */ /* {{{ proto array domxml_doctype_name(void) Returns name of DocumentType */ PHP_FUNCTION(domxml_doctype_name) { zval *id; xmlDtdPtr attrp; DOMXML_NO_ARGS(); DOMXML_GET_THIS_OBJ(attrp, id, le_domxmldoctypep); RETURN_STRING((char *) (attrp->name), 1); } /* }}} */ /* {{{ proto array domxml_doctype_system_id(void) Returns system id of DocumentType */ PHP_FUNCTION(domxml_doctype_system_id) { zval *id; xmlDtdPtr attrp; DOMXML_NO_ARGS(); DOMXML_GET_THIS_OBJ(attrp, id, le_domxmldoctypep); if(attrp->SystemID) { RETURN_STRING((char *) (attrp->SystemID), 1); } else { RETURN_EMPTY_STRING(); } } /* }}} */ /* {{{ proto array domxml_doctype_public_id(void) Returns public id of DocumentType */ PHP_FUNCTION(domxml_doctype_public_id) { zval *id; xmlDtdPtr attrp; DOMXML_NO_ARGS(); DOMXML_GET_THIS_OBJ(attrp, id, le_domxmldoctypep); if(attrp->ExternalID) { RETURN_STRING((char *) (attrp->ExternalID), 1); } else { RETURN_EMPTY_STRING(); } } /* }}} */ /* {{{ proto array domxml_doctype_entities(void) Returns list of entities */ PHP_FUNCTION(domxml_doctype_entities) { zval *id; xmlNode *last; xmlDtdPtr doctypep; int ret; DOMXML_NOT_IMPLEMENTED(); DOMXML_PARAM_NONE(doctypep, id, le_domxmldoctypep); last = doctypep->entities; if (!last) { RETURN_FALSE; } if (array_init(return_value) == FAILURE) { RETURN_FALSE; } while (last) { zval *child; child = php_domobject_new(last, &ret TSRMLS_CC); add_next_index_zval(return_value, child); last = last->next; } } /* }}} */ /* {{{ proto array domxml_doctype_notations(void) Returns list of notations */ PHP_FUNCTION(domxml_doctype_notations) { zval *id; xmlNode *last; xmlDtdPtr doctypep; int ret; DOMXML_NOT_IMPLEMENTED(); DOMXML_PARAM_NONE(doctypep, id, le_domxmldoctypep); last = doctypep->notations; if (!last) { RETURN_FALSE; } if (array_init(return_value) == FAILURE) { RETURN_FALSE; } while (last) { zval *child; child = php_domobject_new(last, &ret TSRMLS_CC); add_next_index_zval(return_value, child); last = last->next; } } /* }}} */ /* End of Methods DomElementType }}} */ /* {{{ Methods of Class DomDocument */ /* {{{ proto object domxml_doc_doctype(void) Returns DomDocumentType */ PHP_FUNCTION(domxml_doc_doctype) { zval *id, *rv; xmlDtdPtr dtd; xmlDocPtr docp; int ret; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); DOMXML_NO_ARGS(); dtd = xmlGetIntSubset(docp); if (!dtd) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) dtd, &ret); } /* }}} */ /* {{{ proto object domxml_doc_implementation(void) Returns DomeDOMImplementation */ PHP_FUNCTION(domxml_doc_implementation) { /* zval *id; xmlDocPtr docp;*/ DOMXML_NOT_IMPLEMENTED(); /* DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); rv = php_domobject_new(node, &ret TSRMLS_CC); SEPARATE_ZVAL(&rv); *return_value = *rv; */ } /* }}} */ /* {{{ proto array domxml_doc_document_element(void) Returns root node of document */ PHP_FUNCTION(domxml_doc_document_element) { zval *id; xmlDoc *docp; xmlNode *node; int ret; id = getThis(); if (!id) { if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &id) == FAILURE) { return; } } DOMXML_GET_OBJ(docp, id, le_domxmldocp); node = docp->children; if (!node) { RETURN_FALSE; } while (node) { if (Z_TYPE_P(node) == XML_ELEMENT_NODE) { zval *rv; DOMXML_RET_OBJ(rv, node, &ret); return; } node = node->next; } } /* }}} */ /* {{{ proto object domxml_doc_create_element(string name) Creates new element node */ PHP_FUNCTION(domxml_doc_create_element) { zval *id, *rv; xmlNode *node; xmlDocPtr docp; int ret, name_len; char *name; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { return; } node = xmlNewNode(NULL, name); if (!node) { RETURN_FALSE; } node->doc = docp; DOMXML_RET_OBJ(rv, node, &ret); } /* }}} */ /* {{{ proto object domxml_doc_create_text_node(string content) Creates new text node */ PHP_FUNCTION(domxml_doc_create_text_node) { zval *id, *rv; xmlNode *node; xmlDocPtr docp; int ret, content_len; char *content; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &content, &content_len) == FAILURE) { return; } node = xmlNewTextLen(content, content_len); if (!node) { RETURN_FALSE; } node->doc = docp; DOMXML_RET_OBJ(rv, node, &ret); } /* }}} */ /* {{{ proto object domxml_doc_create_comment(string content) Creates new comment node */ PHP_FUNCTION(domxml_doc_create_comment) { zval *id, *rv; xmlNode *node; xmlDocPtr docp; int ret, content_len; char *content; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &content, &content_len) == FAILURE) { return; } node = xmlNewComment(content); if (!node) { RETURN_FALSE; } node->doc = docp; DOMXML_RET_OBJ(rv, node, &ret); } /* }}} */ /* {{{ proto object domxml_doc_create_attribute(string name, string value) Creates new attribute node */ PHP_FUNCTION(domxml_doc_create_attribute) { zval *id, *rv; xmlAttrPtr node; xmlDocPtr docp; int ret, name_len, value_len; char *name, *value; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &value, &value_len) == FAILURE) { return; } node = xmlNewProp(NULL, name, value); if (!node) { RETURN_FALSE; } node->doc = docp; DOMXML_RET_OBJ(rv, (xmlNodePtr) node, &ret); } /* }}} */ /* {{{ proto object domxml_doc_create_cdata_section(string content) Creates new cdata node */ PHP_FUNCTION(domxml_doc_create_cdata_section) { zval *id, *rv; xmlNode *node; xmlDocPtr docp; int ret, content_len; char *content; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &content, &content_len) == FAILURE) { return; } node = xmlNewCDataBlock(docp, content, content_len); if (!node) { RETURN_FALSE; } node->doc = docp; DOMXML_RET_OBJ(rv, node, &ret); } /* }}} */ /* {{{ proto object domxml_doc_create_entity_reference(string name) Creates new cdata node */ PHP_FUNCTION(domxml_doc_create_entity_reference) { zval *id, *rv; xmlNode *node; xmlDocPtr docp; int ret, name_len; char *name; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { return; } node = xmlNewReference(docp, name); if (!node) { RETURN_FALSE; } node->doc = docp; DOMXML_RET_OBJ(rv, node, &ret); } /* }}} */ /* {{{ proto object domxml_doc_create_processing_instruction(string name) Creates new processing_instruction node */ PHP_FUNCTION(domxml_doc_create_processing_instruction) { zval *id, *rv; xmlNode *node; xmlDocPtr docp; int ret, name_len, content_len; char *name, *content; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &content, &content_len) == FAILURE) { return; } node = xmlNewPI(name, content); if (!node) { RETURN_FALSE; } node->doc = docp; DOMXML_RET_OBJ(rv, node, &ret); } /* }}} */ /* {{{ proto object domxml_doc_imported_node(object node, bool recursive) Creates new element node */ PHP_FUNCTION(domxml_doc_imported_node) { zval *arg1, *id, *rv; xmlNodePtr node, srcnode; xmlDocPtr docp; int ret, recursive = 0; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); /* FIXME: which object type to expect? */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|l", &arg1, &recursive) == FAILURE) { return; } DOMXML_GET_OBJ(srcnode, arg1, le_domxmlnodep); node = xmlCopyNode(srcnode, recursive); if (!node) { RETURN_FALSE; } node->doc = docp; /* Not enough because other nodes in the tree are not set */ DOMXML_RET_OBJ(rv, node, &ret); } /* }}} */ /* {{{ proto object domxml_dtd(void) Returns DTD of document */ PHP_FUNCTION(domxml_intdtd) { zval *id, *rv; xmlDoc *docp; xmlDtd *dtd; int ret; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); dtd = xmlGetIntSubset(docp); if (!dtd) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) dtd, &ret); } /* }}} */ /* {{{ proto string domxml_dump_mem(object doc_handle [, int format][, encoding]) Dumps document into string and optionally formats it */ PHP_FUNCTION(domxml_dump_mem) { zval *id; xmlDoc *docp; xmlChar *mem; int format = 0; int size; int encoding_len = 0; char *encoding; DOMXML_PARAM_THREE(docp, id, le_domxmldocp, "|ls", &format, &encoding, &encoding_len); if (format) { xmlKeepBlanksDefault(0); if (encoding_len) { xmlDocDumpFormatMemoryEnc(docp, &mem, &size, encoding, format); } else { xmlDocDumpFormatMemory(docp, &mem, &size, format); } } else { if (encoding_len) { xmlDocDumpMemoryEnc(docp, &mem, &size, encoding); } else { xmlDocDumpMemory(docp, &mem, &size); } } if (!size) { RETURN_FALSE; } RETVAL_STRINGL(mem, size, 1); xmlFree(mem); } /* }}} */ /* {{{ proto int domxml_dump_mem_file(string filename [, int compressmode [, int format]]) Dumps document into file and uses compression if specified. Returns false on error, otherwise the length of the xml-document (uncompressed) */ PHP_FUNCTION(domxml_dump_mem_file) { zval *id; xmlDoc *docp; int file_len, bytes; int format = 0; int compressmode = 0; char *file; DOMXML_PARAM_FOUR(docp, id, le_domxmldocp, "s|ll", &file, &file_len, &compressmode, &format); xmlSetCompressMode(compressmode); if (format) { xmlKeepBlanksDefault(0); bytes = xmlSaveFormatFile(file, docp, format); } else { bytes = xmlSaveFile(file, docp); } if (bytes == -1) { RETURN_FALSE; } RETURN_LONG(bytes); } /* }}} */ /* {{{ proto string domxml_dump_node(object doc_handle, object node_handle [, int format [, int level]]) Dumps node into string */ PHP_FUNCTION(domxml_dump_node) { zval *id, *nodep; xmlDocPtr docp; xmlNodePtr elementp; xmlChar *mem ; xmlBufferPtr buf; int level = 0; int format = 0; DOMXML_PARAM_THREE(docp, id, le_domxmldocp, "o|ll", &nodep, &format, &level); DOMXML_GET_OBJ(elementp, nodep, le_domxmlnodep); if (Z_TYPE_P(elementp) == XML_DOCUMENT_NODE || Z_TYPE_P(elementp) == XML_HTML_DOCUMENT_NODE ) { php_error(E_WARNING, "%s(): cannot dump element with a document node", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } buf = xmlBufferCreate(); if (!buf) { php_error(E_WARNING, "%s(): could fetch buffer", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } xmlNodeDump(buf, docp, elementp, level, format); mem = (xmlChar*) xmlBufferContent(buf); if (!mem) { xmlBufferFree(buf); RETURN_FALSE; } RETVAL_STRING(mem, 1); xmlBufferFree(buf); } /* }}} */ static void idsHashScanner2(void *payload, void *data, xmlChar *name) { zval *return_value = (zval *) data; zval *child; int ret; xmlNode *nodep; TSRMLS_FETCH(); nodep = ((xmlNode *)((xmlID *)payload)->attr)->parent; child = php_domobject_new(nodep, &ret TSRMLS_CC); add_next_index_zval(return_value, child); } /* {{{ proto string domxml_doc_ids(object doc_handle) Returns array of ids */ PHP_FUNCTION(domxml_doc_ids) { zval *id; xmlDoc *docp; xmlHashTable *ids = NULL; DOMXML_GET_THIS_OBJ(docp, id, le_domxmldocp); ids = docp->ids; if(ids) { if (array_init(return_value) == FAILURE) { RETURN_FALSE; } xmlHashScan(ids, idsHashScanner2, return_value); } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto object xmldoc(string xmldoc[, int mode]) Creates DOM object of XML document */ PHP_FUNCTION(xmldoc) { zval *rv; xmlDoc *docp; int ret; char *buffer; int buffer_len; int mode = 0, prevSubstValue; int oldvalue = xmlDoValidityCheckingDefaultValue; /* xmlDtdPtr dtd; */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &buffer, &buffer_len, &mode) == FAILURE) { return; } /* Either of the following line force validation */ /* xmlLoadExtDtdDefaultValue = XML_DETECT_IDS; */ /* xmlDoValidityCheckingDefaultValue = 1; */ if(mode & DOMXML_LOAD_SUBSTITUTE_ENTITIES) prevSubstValue = xmlSubstituteEntitiesDefault (1); else prevSubstValue = xmlSubstituteEntitiesDefault (0); if(mode & DOMXML_LOAD_COMPLETE_ATTRS) xmlLoadExtDtdDefaultValue |= XML_COMPLETE_ATTRS; switch (mode & (DOMXML_LOAD_PARSING | DOMXML_LOAD_VALIDATING | DOMXML_LOAD_RECOVERING)) { case DOMXML_LOAD_PARSING: xmlDoValidityCheckingDefaultValue = 0; docp = xmlParseDoc(buffer); break; case DOMXML_LOAD_VALIDATING: xmlDoValidityCheckingDefaultValue = 1; docp = xmlParseDoc(buffer); break; case DOMXML_LOAD_RECOVERING: xmlDoValidityCheckingDefaultValue = 0; docp = xmlRecoverDoc(buffer); break; } xmlSubstituteEntitiesDefault (prevSubstValue); xmlDoValidityCheckingDefaultValue = oldvalue; if (!docp) RETURN_FALSE; /* dtd = xmlGetIntSubset(docp); if(dtd) { xmlParseDTD(dtd->ExternalID, dtd->SystemID); } */ DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret); } /* }}} */ /* {{{ proto object xmldocfile(string filename) Creates DOM object of XML document in file */ PHP_FUNCTION(xmldocfile) { zval *rv; xmlDoc *docp; int ret, file_len; char *file; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &file_len) == FAILURE) { return; } docp = xmlParseFile(file); if (!docp) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret); add_property_resource(return_value, "doc", ret); if (docp->name) add_property_stringl(return_value, "name", (char *) docp->name, strlen(docp->name), 1); if (docp->URL) add_property_stringl(return_value, "url", (char *) docp->URL, strlen(docp->URL), 1); add_property_stringl(return_value, "version", (char *) docp->version, strlen(docp->version), 1); if (docp->encoding) add_property_stringl(return_value, "encoding", (char *) docp->encoding, strlen(docp->encoding), 1); add_property_long(return_value, "standalone", docp->standalone); add_property_long(return_value, "type", Z_TYPE_P(docp)); add_property_long(return_value, "compression", docp->compression); add_property_long(return_value, "charset", docp->charset); zend_list_addref(ret); } /* }}} */ #if defined(LIBXML_HTML_ENABLED) /* {{{ proto string domxml_html_dump_mem([int doc_handle]) Dumps document into string as HTML */ PHP_FUNCTION(domxml_html_dump_mem) { zval *id; xmlDoc *docp; xmlChar *mem; int size; DOMXML_PARAM_NONE(docp, id, le_domxmldocp); htmlDocDumpMemory(docp, &mem, &size); if (!size) { if (mem) xmlFree(mem); RETURN_FALSE; } RETVAL_STRINGL(mem, size, 1); xmlFree(mem); } /* }}} */ /* {{{ proto object html_doc(string html_doc [, bool from_file]) Creates DOM object of HTML document */ PHP_FUNCTION(html_doc) { zval *rv; xmlDoc *docp; int ret; char *buffer; int buffer_len; zend_bool from_file = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &buffer, &buffer_len, &from_file) == FAILURE) { return; } if (from_file) { docp = htmlParseFile(buffer, NULL); } else { docp = htmlParseDoc(buffer, NULL); } if (!docp) RETURN_FALSE; DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret); } /* }}} */ /* {{{ proto object html_doc_file(string filename) Creates DOM object of HTML document in file */ PHP_FUNCTION(html_doc_file) { zval *rv; xmlDoc *docp; int ret, file_len; char *file; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &file_len) == FAILURE) { return; } docp = htmlParseFile(file, NULL); if (!docp) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret); add_property_resource(return_value, "doc", ret); if (docp->name) add_property_stringl(return_value, "name", (char *) docp->name, strlen(docp->name), 1); if (docp->URL) add_property_stringl(return_value, "url", (char *) docp->URL, strlen(docp->URL), 1); if (docp->version) add_property_stringl(return_value, "version", (char *) docp->version, strlen(docp->version), 1); /* add_property_stringl(return_value, "version", (char *) docp->version, strlen(docp->version), 1);*/ if (docp->encoding) add_property_stringl(return_value, "encoding", (char *) docp->encoding, strlen(docp->encoding), 1); add_property_long(return_value, "standalone", docp->standalone); add_property_long(return_value, "type", Z_TYPE_P(docp)); add_property_long(return_value, "compression", docp->compression); add_property_long(return_value, "charset", docp->charset); zend_list_addref(ret); } /* }}} */ #endif /* defined(LIBXML_HTML_ENABLED) */ /* {{{ proto bool domxml_substitute_entities_default(bool enable) Set and return the previous value for default entity support */ PHP_FUNCTION(domxml_substitute_entities_default) { zend_bool enable; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &enable) == FAILURE) { return; } RETURN_BOOL(xmlSubstituteEntitiesDefault(enable)); } /* }}} */ /* {{{ proto bool domxml_node_text_concat(string content) Add string tocontent of a node */ PHP_FUNCTION(domxml_node_text_concat) { zval *id; xmlNode *nodep; char *content; int content_len; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &content, &content_len) == FAILURE) { return; } if (content_len) xmlTextConcat(nodep, content, content_len); RETURN_TRUE; } /* }}} */ /* {{{ proto object domxml_add_root(string name) Adds root node to document */ PHP_FUNCTION(domxml_add_root) { zval *id, *rv; xmlDoc *docp; xmlNode *nodep; int ret, name_len; char *name; DOMXML_PARAM_TWO(docp, id, le_domxmldocp, "s", &name, &name_len); nodep = xmlNewDocNode(docp, NULL, name, NULL); if (!nodep) { RETURN_FALSE; } xmlDocSetRootElement(docp, nodep); DOMXML_RET_OBJ(rv, nodep, &ret); } /* }}} */ /* {{{ proto object domxml_new_xmldoc(string version) Creates new xmldoc */ PHP_FUNCTION(domxml_new_xmldoc) { zval *rv; xmlDoc *docp; int ret, buf_len; char *buf; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &buf_len) == FAILURE) { return; } docp = xmlNewDoc(buf); if (!docp) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret); } /* }}} */ /* {{{ proto object domxml_parser([string buf[,string filename]]) Creates new xmlparser */ PHP_FUNCTION(domxml_parser) { zval *rv; xmlParserCtxtPtr parserp; int ret, buf_len = 0; char *buf = ""; char *filename = NULL; int filename_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ss", &buf, &buf_len, &filename, &filename_len) == FAILURE) { return; } parserp = xmlCreatePushParserCtxt(NULL, NULL, buf, buf_len, filename); if (!parserp) { RETURN_FALSE; } /* parserp->loadsubset = XML_DETECT_IDS; */ rv = php_xmlparser_new(parserp, &ret TSRMLS_CC); DOMXML_RET_ZVAL(rv); } /* }}} */ /* {{{ proto bool domxml_parser_add_chunk(string chunk) adds xml-chunk to parser */ PHP_FUNCTION(domxml_parser_add_chunk) { zval *id; xmlParserCtxtPtr parserp; char *chunk; int chunk_len, error; DOMXML_PARAM_TWO(parserp, id, le_domxmlparserp,"s", &chunk, &chunk_len); error = xmlParseChunk(parserp, chunk, chunk_len , 0); if (error != 0) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto object domxml_parser_end([string chunk]) Ends parsing and returns DomDocument*/ PHP_FUNCTION(domxml_parser_end) { zval *id,*rv; xmlParserCtxtPtr parserp; char *chunk = NULL; int chunk_len = 0, error; int ret; DOMXML_PARAM_TWO(parserp, id, le_domxmlparserp,"|s", &chunk, &chunk_len); error = xmlParseChunk(parserp, chunk, chunk_len, 1); if (error != 0) { php_error(E_ERROR,"error: %d",error); RETURN_FALSE; } if (parserp->myDoc != NULL) { DOMXML_RET_OBJ(rv, (xmlNodePtr) parserp->myDoc, &ret); } else { RETVAL_FALSE } } /* }}} */ /* {{{ proto bool domxml_parser_set_keep_blanks(bool mode) Determines how to handle blanks */ PHP_FUNCTION(domxml_parser_set_keep_blanks) { zval *id; xmlParserCtxtPtr parserp; zend_bool mode; DOMXML_PARAM_ONE(parserp, id, le_domxmlparserp, "b", &mode); parserp->keepBlanks = mode; RETURN_TRUE; } /* }}} */ #ifdef newcode /* {{{ proto int node_namespace([int node]) Returns list of namespaces */ static int node_namespace(zval **attributes, xmlNode *nodep TSRMLS_DC) { xmlNs *ns; /* Get the children of the current node */ ns = nodep->ns; if (!ns) { return -1; } /* create an php array for the children */ MAKE_STD_ZVAL(*attributes); if (array_init(*attributes) == FAILURE) { return -1; } while (ns) { zval *pattr; int ret; pattr = php_domobject_new((xmlNodePtr) ns, &ret TSRMLS_CC); SEPARATE_ZVAL(&pattr); /* if(!ret) { */ if (ns->href) add_property_stringl(pattr, "href", (char *) ns->href, strlen(ns->href), 1); if (ns->prefix) add_property_stringl(pattr, "prefix", (char *) ns->prefix, strlen(ns->prefix), 1); add_property_long(pattr, "type", Z_TYPE_P(ns)); /* } */ zend_hash_next_index_insert(Z_ARRVAL_PP(attributes), &pattr, sizeof(zval *), NULL); ns = ns->next; } return 0; } /* }}} */ #endif /* We don't have a type zval. **attributes is also very unusual. */ /* {{{ proto int node_attributes(zval **attributes, int node) Returns list of children nodes */ static int node_attributes(zval **attributes, xmlNode *nodep TSRMLS_DC) { xmlAttr *attr; int count = 0; /* Get the children of the current node */ if (Z_TYPE_P(nodep) != XML_ELEMENT_NODE) return -1; attr = nodep->properties; if (!attr) return -1; /* create an php array for the children */ MAKE_STD_ZVAL(*attributes); array_init(*attributes); while (attr) { zval *pattr; int ret; pattr = php_domobject_new((xmlNodePtr) attr, &ret TSRMLS_CC); /** XXX FIXME XXX */ /* if(0 <= (n = node_children(&children, attr->children TSRMLS_CC))) { zend_hash_update(Z_OBJPROP_P(value), "children", sizeof("children"), (void *) &children, sizeof(zval *), NULL); } */ add_property_string(pattr, "name", (char *) (attr->name), 1); add_property_string(pattr, "value", xmlNodeGetContent((xmlNodePtr) attr), 1); zend_hash_next_index_insert(Z_ARRVAL_PP(attributes), &pattr, sizeof(zval *), NULL); attr = attr->next; count++; } return count; } /* }}} */ /* {{{ proto int node_children([int node]) Returns list of children nodes */ static int node_children(zval **children, xmlNode *nodep TSRMLS_DC) { zval *mchildren, *attributes; /* zval *namespace; */ xmlNode *last; int count = 0; /* Get the children of the current node */ last = nodep; if (!last) { return -1; } /* create an php array for the children */ MAKE_STD_ZVAL(*children); array_init(*children); while (last) { zval *child; int ret; if (NULL != (child = php_domobject_new(last, &ret TSRMLS_CC))) { zend_hash_next_index_insert(Z_ARRVAL_PP(children), &child, sizeof(zval *), NULL); /* Get the namespace of the current node and add it as a property */ /* XXX FIXME XXX */ /* if(!node_namespace(&namespace, last)) zend_hash_update(Z_OBJPROP_P(child), "namespace", sizeof("namespace"), (void *) &namespace, sizeof(zval *), NULL); */ /* Get the attributes of the current node and add it as a property */ if (node_attributes(&attributes, last TSRMLS_CC) >= 0) zend_hash_update(Z_OBJPROP_P(child), "attributes", sizeof("attributes"), (void *) &attributes, sizeof(zval *), NULL); /* Get recursively the children of the current node and add it as a property */ if (node_children(&mchildren, last->children TSRMLS_CC) >= 0) zend_hash_update(Z_OBJPROP_P(child), "children", sizeof("children"), (void *) &mchildren, sizeof(zval *), NULL); count++; } last = last->next; } return count; } /* }}} */ /* {{{ proto object domxml_xmltree(string xmltree) Creates a tree of PHP objects from an XML document */ PHP_FUNCTION(domxml_xmltree) { zval *children, *rv; xmlDoc *docp; xmlNode *root; int ret, buf_len; char *buf; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &buf_len) == FAILURE) { return; } /* Create a new xml document */ docp = xmlParseDoc(buf); if (!docp) { RETURN_FALSE; } /* get the root and add as a property to the document */ root = docp->children; if (!root) { xmlFreeDoc(docp); RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret); /* The root itself maybe an array. Though you may not have two Elements as root, you may have a comment, pi and and element as root. Thanks to Paul DuBois for pointing me at this. */ if (node_children(&children, root TSRMLS_CC) >= 0) { zend_hash_update(Z_OBJPROP_P(return_value), "children",sizeof("children"), (void *) &children, sizeof(zval *), NULL); } /* xmlFreeDoc(docp); */ } /* }}} */ #if defined(LIBXML_XPATH_ENABLED) /* {{{ proto bool xpath_init(void) Initializing XPath environment */ PHP_FUNCTION(xpath_init) { if (ZEND_NUM_ARGS() != 0) { WRONG_PARAM_COUNT; } xmlXPathInit(); RETURN_TRUE; } /* }}} */ /* {{{ php_xpathptr_new_context() */ static void php_xpathptr_new_context(INTERNAL_FUNCTION_PARAMETERS, int mode) { zval *id, *rv; xmlXPathContextPtr ctx; xmlDocPtr docp; int ret; DOMXML_PARAM_NONE(docp, id, le_domxmldocp); #if defined(LIBXML_XPTR_ENABLED) if (mode == PHP_XPTR) ctx = xmlXPtrNewContext(docp, NULL, NULL); else #endif ctx = xmlXPathNewContext(docp); if (!ctx) { RETURN_FALSE; } rv = php_xpathcontext_new(ctx, &ret TSRMLS_CC); DOMXML_RET_ZVAL(rv); } /* }}} */ /* {{{ proto object xpath_new_context([int doc_handle]) Creates new XPath context */ PHP_FUNCTION(xpath_new_context) { php_xpathptr_new_context(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_XPATH); } /* }}} */ /* {{{ proto object xptr_new_context([int doc_handle]) Creates new XPath context */ PHP_FUNCTION(xptr_new_context) { php_xpathptr_new_context(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_XPTR); } /* }}} */ /* {{{ php_xpathptr_eval() */ static void php_xpathptr_eval(INTERNAL_FUNCTION_PARAMETERS, int mode, int expr) { zval *id, *rv, *contextnode = NULL; xmlXPathContextPtr ctxp; xmlXPathObjectPtr xpathobjp; xmlNode *contextnodep; int ret, str_len; char *str; contextnode = NULL; contextnodep = NULL; if (NULL == (id = getThis())) { if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "os|o", &id, &str, &str_len, &contextnode) == FAILURE) { return; } } else { if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|o", &str, &str_len, &contextnode) == FAILURE) { return; } } ctxp = php_xpath_get_context(id, le_xpathctxp, 0 TSRMLS_CC); if (!ctxp) { php_error(E_WARNING, "%s(): cannot fetch XPATH context", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } if (contextnode) { DOMXML_GET_OBJ(contextnodep, contextnode, le_domxmlnodep); } ctxp->node = contextnodep; #if defined(LIBXML_XPTR_ENABLED) if (mode == PHP_XPTR) { xpathobjp = xmlXPtrEval(BAD_CAST str, ctxp); } else { #endif if (expr) { xpathobjp = xmlXPathEvalExpression(str, ctxp); } else { xpathobjp = xmlXPathEval(str, ctxp); } #if defined(LIBXML_XPTR_ENABLED) } #endif ctxp->node = NULL; if (!xpathobjp) { RETURN_FALSE; } if (NULL == (rv = php_xpathobject_new(xpathobjp, &ret TSRMLS_CC))) { php_error(E_WARNING, "%s(): cannot create required XPATH objcet", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } SEPARATE_ZVAL(&rv); add_property_long(rv, "type", Z_TYPE_P(xpathobjp)); switch (Z_TYPE_P(xpathobjp)) { case XPATH_UNDEFINED: break; case XPATH_NODESET: { int i; zval *arr; xmlNodeSetPtr nodesetp; MAKE_STD_ZVAL(arr); if (array_init(arr) == FAILURE) { zval_dtor(rv); RETURN_FALSE; } if (NULL == (nodesetp = xpathobjp->nodesetval)) { zval_dtor(rv); RETURN_FALSE; } for (i = 0; i < nodesetp->nodeNr; i++) { xmlNodePtr node = nodesetp->nodeTab[i]; zval *child; int retnode; /* construct a node object */ child = php_domobject_new(node, &retnode TSRMLS_CC); zend_hash_next_index_insert(Z_ARRVAL_P(arr), &child, sizeof(zval *), NULL); } zend_hash_update(Z_OBJPROP_P(rv), "nodeset", sizeof("nodeset"), (void *) &arr, sizeof(zval *), NULL); break; } case XPATH_BOOLEAN: add_property_bool(rv, "value", xpathobjp->boolval); break; case XPATH_NUMBER: add_property_double(rv, "value", xpathobjp->floatval); break; case XPATH_STRING: add_property_string(rv, "value", xpathobjp->stringval, 1); break; case XPATH_POINT: break; case XPATH_RANGE: break; case XPATH_LOCATIONSET: break; case XPATH_USERS: break; case XPATH_XSLT_TREE: break; } *return_value = *rv; FREE_ZVAL(rv); } /* }}} */ /* {{{ proto object xpath_eval([object xpathctx_handle,] string str) Evaluates the XPath Location Path in the given string */ PHP_FUNCTION(xpath_eval) { php_xpathptr_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_XPATH, 0); } /* }}} */ /* {{{ proto object xpath_eval_expression([object xpathctx_handle,] string str) Evaluates the XPath expression in the given string */ PHP_FUNCTION(xpath_eval_expression) { php_xpathptr_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_XPATH, 1); } /* }}} */ /* {{{ proto bool xpath_register_ns([object xpathctx_handle,] string namespace_prefix, string namespace_uri) Registeres the given namespace in the passed XPath context */ PHP_FUNCTION(xpath_register_ns) { /* TODO: - automagically register all namespaces when creating a new context */ int prefix_len, uri_len, result; xmlXPathContextPtr ctxp; char *prefix, *uri, *uri_static; zval *id; DOMXML_PARAM_FOUR(ctxp, id, le_xpathctxp, "ss", &prefix, &prefix_len, &uri, &uri_len); /* set the context node to NULL - what is a context node anyway? */ ctxp->node = NULL; /* this is a hack - libxml2 doesn't copy the URI, it simply uses the string given in the parameter - which is normally deallocated after the function */ uri_static = estrndup(uri, uri_len); result = xmlXPathRegisterNs(ctxp, prefix, uri_static); if (0 == result) { RETURN_TRUE; } RETURN_FALSE; } /* }}} */ #endif /* defined(LIBXML_XPATH_ENABLED) */ #if defined(LIBXML_XPTR_ENABLED) /* {{{ proto int xptr_eval([int xpathctx_handle,] string str) Evaluates the XPtr Location Path in the given string */ PHP_FUNCTION(xptr_eval) { php_xpathptr_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_XPTR, 0); } /* }}} */ #endif /* LIBXML_XPTR_ENABLED */ /* {{{ proto string domxml_version(void) Get XML library version */ PHP_FUNCTION(domxml_version) { RETURN_STRING(LIBXML_DOTTED_VERSION, 1); } /* }}} */ #if HAVE_DOMXSLT static zval *php_xsltstylesheet_new(xsltStylesheetPtr obj, int *found TSRMLS_DC) { zval *wrapper; int rsrc_type; *found = 0; if (!obj) { MAKE_STD_ZVAL(wrapper); ZVAL_NULL(wrapper); return wrapper; } if ((wrapper = (zval *) dom_object_get_data((void *) obj))) { zval_add_ref(&wrapper); *found = 1; return wrapper; } MAKE_STD_ZVAL(wrapper); object_init_ex(wrapper, domxsltstylesheet_class_entry); rsrc_type = le_domxsltstylesheetp; php_xsltstylesheet_set_object(wrapper, (void *) obj, rsrc_type); return (wrapper); } /* {{{ proto object domxml_xslt_stylesheet(string xsltstylesheet) Creates XSLT Stylesheet object from string */ PHP_FUNCTION(domxml_xslt_stylesheet) { zval *rv; xmlDocPtr docp; xsltStylesheetPtr sheetp; int ret; char *buffer; int buffer_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buffer, &buffer_len) == FAILURE) { RETURN_FALSE; } docp = xmlParseDoc(buffer); if (!docp) RETURN_FALSE; sheetp = xsltParseStylesheetDoc(docp); if (!sheetp) RETURN_FALSE; rv = php_xsltstylesheet_new(sheetp, &ret TSRMLS_CC); DOMXML_RET_ZVAL(rv); } /* }}} */ /* {{{ proto object domxml_xslt_stylesheet_doc(object xmldoc) Creates XSLT Stylesheet object from DOM Document object */ PHP_FUNCTION(domxml_xslt_stylesheet_doc) { zval *rv, *idxml; xmlDocPtr docp; xmlDocPtr newdocp; xsltStylesheetPtr sheetp; int ret; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &idxml) == FAILURE) { RETURN_FALSE; } DOMXML_GET_OBJ(docp, idxml, le_domxmldocp); newdocp = xmlCopyDoc(docp, 1); if (!newdocp) RETURN_FALSE; sheetp = xsltParseStylesheetDoc(newdocp); if (!sheetp) RETURN_FALSE; rv = php_xsltstylesheet_new(sheetp, &ret TSRMLS_CC); DOMXML_RET_ZVAL(rv); } /* }}} */ /* {{{ proto object domxml_xslt_stylesheet_file(string filename) Creates XSLT Stylesheet object from file */ PHP_FUNCTION(domxml_xslt_stylesheet_file) { zval *rv; xsltStylesheetPtr sheetp; int ret, file_len; char *file; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &file_len) == FAILURE) { RETURN_FALSE; } sheetp = xsltParseStylesheetFile(file); if (!sheetp) RETURN_FALSE; rv = php_xsltstylesheet_new(sheetp, &ret TSRMLS_CC); DOMXML_RET_ZVAL(rv); } /* }}} */ /* {{{ php_domxslt_string_to_xpathexpr() Translates a string to a XPath Expression */ static char *php_domxslt_string_to_xpathexpr(const char *str TSRMLS_DC) { const xmlChar *string = (const xmlChar *)str; xmlChar *value; int str_len; str_len = xmlStrlen(string) + 3; if (xmlStrchr(string, '"')) { if (xmlStrchr(string, '\'')) { php_error(E_WARNING, "%s(): Cannot create XPath expression (string contains both quote and double-quotes)", get_active_function_name(TSRMLS_C)); return NULL; } value = (xmlChar*) emalloc (str_len * sizeof(xmlChar) ); snprintf(value, str_len, "'%s'", string); } else { value = (xmlChar*) emalloc (str_len * sizeof(xmlChar) ); snprintf(value, str_len, "\"%s\"", string); } return (char *)value; } /* {{{ php_domxslt_make_params() Translates a PHP array to a libxslt parameters array */ static char **php_domxslt_make_params(zval *idvars, int xpath_params TSRMLS_DC) { HashTable *parht; int parsize; zval **value; char *xpath_expr, *string_key = NULL; ulong num_key; char **params = NULL; int i = 0; parht = HASH_OF(idvars); parsize = (2 * zend_hash_num_elements(parht) + 1) * sizeof(char *); params = (char **)emalloc(parsize); memset((char *)params, 0, parsize); for (zend_hash_internal_pointer_reset(parht); zend_hash_get_current_data(parht, (void **)&value) == SUCCESS; zend_hash_move_forward(parht)) { if (zend_hash_get_current_key(parht, &string_key, &num_key, 1) != HASH_KEY_IS_STRING) { php_error(E_WARNING, "Invalid argument or parameter array to %s", get_active_function_name(TSRMLS_C)); return NULL; } else { SEPARATE_ZVAL(value); convert_to_string_ex(value); if (!xpath_params) { xpath_expr = php_domxslt_string_to_xpathexpr(Z_STRVAL_PP(value) TSRMLS_CC); } else { xpath_expr = Z_STRVAL_PP(value); } if (xpath_expr) { params[i++] = string_key; params[i++] = xpath_expr; } } } params[i++] = NULL; return params; } /* {{{ proto object domxml_xslt_process(object xslstylesheet, object xmldoc [, array xslt_parameters [, bool xpath_parameters]]) Perform an XSLT transformation */ PHP_FUNCTION(domxml_xslt_process) { /* TODO: - test memory deallocation - test other stuff - check xsltsp->errors ??? */ zval *rv = NULL, *idxsl, *idxml, *idparams = NULL; zend_bool xpath_params = 0; xsltStylesheetPtr xsltstp; xmlDocPtr xmldocp; xmlDocPtr docp; char **params = NULL; int ret; DOMXML_GET_THIS(idxsl); xsltstp = php_xsltstylesheet_get_object(idxsl, le_domxsltstylesheetp, 0 TSRMLS_CC); if (!xsltstp) { php_error(E_WARNING, "%s(): underlying object missing", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|ab", &idxml, &idparams, &xpath_params) == FAILURE) { RETURN_FALSE; } DOMXML_GET_OBJ(xmldocp, idxml, le_domxmldocp); if (idparams) { params = php_domxslt_make_params(idparams, xpath_params TSRMLS_CC); } docp = xsltApplyStylesheet(xsltstp, xmldocp, (const char**)params); if (params) { efree(params); } if (!docp) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) docp, &ret); } /* }}} */ /* {{{ proto string domxml_xslt_version(void) Get XSLT library version */ PHP_FUNCTION(domxml_xslt_version) { RETURN_STRING(LIBXSLT_DOTTED_VERSION, 1); } /* }}} */ #endif /* HAVE_DOMXSLT */ #endif /* HAVE_DOMXML */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ php-4.2.3/ext/domxml/php_domxml.h0100644000175200000240000001470107464524677015611 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Uwe Steinmann (Uwe.Steinmann@fernuni-hagen.de | +----------------------------------------------------------------------+ */ /* $Id: php_domxml.h,v 1.42.2.1 2025/05/03 15:16:15 chregu Exp $ */ #ifndef PHP_DOMXML_H #define PHP_DOMXML_H #if HAVE_DOMXML #include #include #include #if defined(LIBXML_HTML_ENABLED) #include #include #endif #if defined(LIBXML_XPATH_ENABLED) #include #include #endif #if defined(LIBXML_XPTR_ENABLED) #include #endif #if HAVE_DOMXSLT #include #include #include #include #if HAVE_DOMEXSLT #include #include #endif #endif extern zend_module_entry domxml_module_entry; #define domxml_module_ptr &domxml_module_entry /* directory functions */ PHP_MINIT_FUNCTION(domxml); PHP_RINIT_FUNCTION(domxml); PHP_MINFO_FUNCTION(domxml); PHP_FUNCTION(domxml_version); PHP_FUNCTION(xmldoc); PHP_FUNCTION(xmldocfile); #if defined(LIBXML_HTML_ENABLED) PHP_FUNCTION(html_doc); PHP_FUNCTION(html_doc_file); #endif PHP_FUNCTION(domxml_xmltree); PHP_FUNCTION(domxml_new_xmldoc); PHP_FUNCTION(domxml_substitute_entities_default); /* Class Document methods */ PHP_FUNCTION(domxml_doc_doctype); PHP_FUNCTION(domxml_doc_implementation); PHP_FUNCTION(domxml_doc_document_element); PHP_FUNCTION(domxml_doc_create_element); PHP_FUNCTION(domxml_doc_create_text_node); PHP_FUNCTION(domxml_doc_create_comment); PHP_FUNCTION(domxml_doc_create_processing_instruction); PHP_FUNCTION(domxml_doc_create_attribute); PHP_FUNCTION(domxml_doc_create_cdata_section); PHP_FUNCTION(domxml_doc_create_entity_reference); PHP_FUNCTION(domxml_doc_imported_node); PHP_FUNCTION(domxml_add_root); PHP_FUNCTION(domxml_intdtd); PHP_FUNCTION(domxml_doc_ids); PHP_FUNCTION(domxml_dump_mem); PHP_FUNCTION(domxml_dump_mem_file); PHP_FUNCTION(domxml_dump_node); #if defined(LIBXML_HTML_ENABLED) PHP_FUNCTION(domxml_html_dump_mem); #endif /* Class DocumentType methods */ PHP_FUNCTION(domxml_doctype_name); PHP_FUNCTION(domxml_doctype_entities); PHP_FUNCTION(domxml_doctype_notations); PHP_FUNCTION(domxml_doctype_public_id); PHP_FUNCTION(domxml_doctype_system_id); PHP_FUNCTION(domxml_doctype_internal_subset); /* Class Notation methods */ PHP_FUNCTION(domxml_notation_public_id); PHP_FUNCTION(domxml_notation_system_id); /* Class Node methods */ PHP_FUNCTION(domxml_node_attributes); PHP_FUNCTION(domxml_node_children); PHP_FUNCTION(domxml_node_first_child); PHP_FUNCTION(domxml_node_last_child); PHP_FUNCTION(domxml_node_next_sibling); PHP_FUNCTION(domxml_node_previous_sibling); PHP_FUNCTION(domxml_node_owner_document); PHP_FUNCTION(domxml_node_insert_before); PHP_FUNCTION(domxml_node_append_sibling); PHP_FUNCTION(domxml_node_append_child); PHP_FUNCTION(domxml_node_remove_child); PHP_FUNCTION(domxml_node_replace_child); PHP_FUNCTION(domxml_node_has_attributes); PHP_FUNCTION(domxml_node_has_child_nodes); PHP_FUNCTION(domxml_node_parent); PHP_FUNCTION(domxml_node_prefix); PHP_FUNCTION(domxml_node); PHP_FUNCTION(domxml_clone_node); PHP_FUNCTION(domxml_node_unlink_node); PHP_FUNCTION(domxml_node_replace_node); PHP_FUNCTION(domxml_node_new_child); PHP_FUNCTION(domxml_node_set_content); PHP_FUNCTION(domxml_node_get_content); PHP_FUNCTION(domxml_node_text_concat); PHP_FUNCTION(domxml_node_set_name); PHP_FUNCTION(domxml_node_name); PHP_FUNCTION(domxml_node_type); PHP_FUNCTION(domxml_node_value); PHP_FUNCTION(domxml_is_blank_node); /* Class Attribute methods */ PHP_FUNCTION(domxml_attr_name); PHP_FUNCTION(domxml_attr_value); PHP_FUNCTION(domxml_attr_specified); /* Class Element methods */ PHP_FUNCTION(domxml_element); PHP_FUNCTION(domxml_elem_tagname); PHP_FUNCTION(domxml_elem_get_attribute); PHP_FUNCTION(domxml_elem_set_attribute); PHP_FUNCTION(domxml_elem_remove_attribute); PHP_FUNCTION(domxml_elem_get_attribute_node); PHP_FUNCTION(domxml_elem_set_attribute_node); PHP_FUNCTION(domxml_elem_get_elements_by_tagname); PHP_FUNCTION(domxml_elem_has_attribute); /* Class CData methods */ PHP_FUNCTION(domxml_cdata_length); /* Class Notation methods */ PHP_FUNCTION(domxml_notation_public_id); PHP_FUNCTION(domxml_notation_system_id); /* Class Entity methods */ PHP_FUNCTION(domxml_entity_public_id); PHP_FUNCTION(domxml_entity_system_id); PHP_FUNCTION(domxml_entity_notation_name); /* Class ProcessingInstructions */ PHP_FUNCTION(domxml_pi_target); PHP_FUNCTION(domxml_pi_data); /* Class Parser methods */ PHP_FUNCTION(domxml_parser); PHP_FUNCTION(domxml_parser_add_chunk); PHP_FUNCTION(domxml_parser_end); PHP_FUNCTION(domxml_parser_set_keep_blanks); /* Class XPathContext methods */ #if defined(LIBXML_XPATH_ENABLED) PHP_FUNCTION(xpath_init); PHP_FUNCTION(xpath_new_context); PHP_FUNCTION(xpath_eval); PHP_FUNCTION(xpath_eval_expression); PHP_FUNCTION(xpath_register_ns); PHP_FUNCTION(domxml_doc_get_elements_by_tagname); PHP_FUNCTION(domxml_doc_get_element_by_id); #endif #if defined(LIBXML_XPTR_ENABLED) PHP_FUNCTION(xptr_new_context); PHP_FUNCTION(xptr_eval); #endif PHP_FUNCTION(domxml_test); /* DOMXSLT functions */ #if HAVE_DOMXSLT PHP_FUNCTION(domxml_xslt_stylesheet); PHP_FUNCTION(domxml_xslt_stylesheet_doc); PHP_FUNCTION(domxml_xslt_stylesheet_file); PHP_FUNCTION(domxml_xslt_process); PHP_FUNCTION(domxml_xslt_version); #endif #else #define domxml_module_ptr NULL #endif /* HAVE_DOMXML */ #define phpext_domxml_ptr domxml_module_ptr #endif /* _PHP_DIR_H */ php-4.2.3/ext/dotnet/0040755000175200000240000000000007535765574013270 5ustar zeevstaffphp-4.2.3/ext/dotnet/CREDITS0100644000175200000240000000002007206176565014264 0ustar zeevstaffdotnet Sam Ruby php-4.2.3/ext/dotnet/EXPERIMENTAL0100644000175200000240000000023707232042174015061 0ustar zeevstaffthis extension is experimental, its functions may change their names or move to extension all together so do not rely to much on them you have been warned! php-4.2.3/ext/dotnet/README0100644000175200000240000000204107151736671014130 0ustar zeevstaffWarning ======= This support is EXPERIMENTAL. In fact, it integrates code that Microsoft labels as pre-beta. Use at your own risk. Build instructions ================== Download and install the .NET Framework SDK Technology Preview from http://msdn.microsoft.com/net/#sdk. Once installed, copy Mscoree.h (typically found in C:\Program Files\NGWSSDK\Include to ext\dotnet). Do not simply add the NGWSSDK\Include directory to the include path as this will cause compilation failures. Download and unzip the source to the dm.net COM Moniker from http://staff.develop.com/jasonw/clr/readme.htm. Copy mscorlib.h to ext\dotnet. There is no need to register the clrmonsrv.dll as it is not used. At this point, the dotnet project can be built like any other project, from either VisualStudio 6's GUI or from the command line. Example command line invocation: msdev dotnet.dsp /MAKE "dotnet - Win32 Debug_TS" Execution instructions: ======================= Add "extension=php_dotnet.dll" into php.ini. Sample program can be found at dotnet.php php-4.2.3/ext/dotnet/dotnet.cpp0100644000175200000240000001440707405423103015243 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sam Ruby | | Harald Radi | +----------------------------------------------------------------------+ */ /* * This module implements support for Microsoft .Net components. */ /* * 28.1.2025 * use external unicode conversion functions * * harald radi */ #ifdef PHP_WIN32 #include #include #include extern "C" { #include "php.h" #include "ext/standard/info.h" } #include "ext/com/conversion.h" #include "ext/com/php_COM.h" #include "Mscoree.h" #include "mscorlib.h" using namespace mscorlib; static ICorRuntimeHost *pHost; static mscorlib::_AppDomain *pDomain; static zend_class_entry dotnet_class_entry; static int codepage; HRESULT dotnet_init() { HRESULT hr; hr = CoCreateInstance(CLSID_CorRuntimeHost, NULL, CLSCTX_ALL, IID_ICorRuntimeHost, (void **)&pHost); if (FAILED(hr)) return hr; hr = pHost->Start(); if (FAILED(hr)) return hr; IUnknown *uDomain; hr = pHost->GetDefaultDomain(&uDomain); if (FAILED(hr)) return hr; hr = uDomain->QueryInterface(__uuidof(_AppDomain), (void**) &pDomain); if (FAILED(hr)) return -1; uDomain->Release(); return ERROR_SUCCESS; } HRESULT dotnet_create(OLECHAR *assembly, OLECHAR *datatype, comval *obj TSRMLS_DC) { HRESULT hr; _ObjectHandle *pHandle; hr = pDomain->CreateInstance(_bstr_t(assembly), _bstr_t(datatype), &pHandle); if (FAILED(hr)) return hr; if (!pHandle) return hr; _variant_t unwrapped; hr = pHandle->Unwrap(&unwrapped); pHandle->Release(); if (FAILED(hr)) return hr; php_COM_set(obj, &unwrapped.pdispVal, TRUE TSRMLS_CC); return ERROR_SUCCESS; } void dotnet_term() { if (pHost) pHost->Stop(); if (pHost) pHost->Release(); if (pDomain) pDomain->Release(); pHost = 0; pDomain = 0; } /* {{{ proto int dotnet_load(string assembly_name [, string datatype_name, int codepage]) Loads a DOTNET module */ PHP_FUNCTION(dotnet_load) { HRESULT hr; pval *assembly_name, *datatype_name, *code_page; OLECHAR *assembly, *datatype; comval *obj; switch(ZEND_NUM_ARGS()) { case 2: getParameters(ht, 2, &assembly_name, &datatype_name); codepage = CP_ACP; break; case 3: getParameters(ht, 3, &assembly_name, &datatype_name, &code_page); convert_to_long(code_page); codepage = Z_LVAL_P(code_page); break; default: WRONG_PARAM_COUNT; break; } convert_to_string(assembly_name); assembly = php_char_to_OLECHAR(Z_STRVAL_P(assembly_name), Z_STRLEN_P(assembly_name), codepage TSRMLS_CC); convert_to_string(datatype_name); datatype = php_char_to_OLECHAR(Z_STRVAL_P(datatype_name), Z_STRLEN_P(datatype_name), codepage TSRMLS_CC); ALLOC_COM(obj); /* obtain IDispatch */ hr = dotnet_create(assembly, datatype, obj TSRMLS_CC); efree(assembly); efree(datatype); if (FAILED(hr)) { char *error_message; error_message = php_COM_error_message(hr TSRMLS_CC); php_error(E_WARNING, "Error obtaining .Net class for %s in assembly %s: %s", datatype_name->value.str.val, assembly_name->value.str.val, error_message); LocalFree(error_message); efree(obj); RETURN_FALSE; } if (C_DISPATCH(obj) == NULL) { php_error(E_WARNING, "Unable to locate %s in assembly %s", datatype_name->value.str.val, assembly_name->value.str.val); efree(obj); RETURN_FALSE; } RETURN_LONG(zend_list_insert(obj, IS_COM)); } /* }}} */ void php_DOTNET_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) { pval *object = property_reference->object; zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data; if (zend_llist_count(property_reference->elements_list)==1 && !strcmp(Z_STRVAL(function_name->element), "dotnet")) { /* constructor */ pval *object_handle; PHP_FN(dotnet_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU); if (!Z_LVAL_P(return_value)) { ZVAL_FALSE(object); return; } ALLOC_ZVAL(object_handle); *object_handle = *return_value; pval_copy_constructor(object_handle); INIT_PZVAL(object_handle); zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL); pval_destructor(&function_name->element); } else { php_COM_call_function_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, property_reference); } } void php_register_DOTNET_class(TSRMLS_D) { INIT_OVERLOADED_CLASS_ENTRY(dotnet_class_entry, "DOTNET", NULL, php_DOTNET_call_function_handler, php_COM_get_property_handler, php_COM_set_property_handler); zend_register_internal_class(&dotnet_class_entry TSRMLS_CC); } function_entry DOTNET_functions[] = { {NULL, NULL, NULL} }; static PHP_MINFO_FUNCTION(DOTNET) { php_info_print_table_start(); php_info_print_table_row(2, ".NET support", "enabled"); php_info_print_table_end(); } PHP_MINIT_FUNCTION(DOTNET) { HRESULT hr; if (FAILED(hr = dotnet_init())) { return hr; } php_register_DOTNET_class(TSRMLS_C); return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(DOTNET) { dotnet_term(); return SUCCESS; } zend_module_entry dotnet_module_entry = { STANDARD_MODULE_HEADER, "dotnet", DOTNET_functions, PHP_MINIT(DOTNET), PHP_MSHUTDOWN(DOTNET), NULL, NULL, PHP_MINFO(DOTNET), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; BEGIN_EXTERN_C() ZEND_GET_MODULE(dotnet) END_EXTERN_C() #endif php-4.2.3/ext/dotnet/dotnet.dsp0100644000175200000240000002013207273242432015246 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="dotnet" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=dotnet - Win32 Debug_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "dotnet.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "dotnet.mak" CFG="dotnet - Win32 Debug_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "dotnet - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "dotnet - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "dotnet - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "dotnet - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "dotnet - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "..\..\Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x40d /d "NDEBUG" # ADD RSC /l 0x40d /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release/php_dotnet.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release" !ELSEIF "$(CFG)" == "dotnet - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "..\..\Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /D HAVE_JAVA=1 /FR /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x40d /d "_DEBUG" # ADD RSC /l 0x40d /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug/php_dotnet.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug" !ELSEIF "$(CFG)" == "dotnet - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "..\..\Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /FR /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR /YX /FD /D /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x40d /d "_DEBUG" # ADD RSC /l 0x40d /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dotnet.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" !ELSEIF "$(CFG)" == "dotnet - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "..\..\Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_JAVA" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x40d /d "NDEBUG" # ADD RSC /l 0x40d /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dotnet.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" !ENDIF # Begin Target # Name "dotnet - Win32 Release" # Name "dotnet - Win32 Debug" # Name "dotnet - Win32 Debug_TS" # Name "dotnet - Win32 Release_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\dotnet.cpp # End Source File # Begin Source File SOURCE=.\..\..\win32\winutil.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_dotnet.h # End Source File # End Group # Begin Source File SOURCE=.\README # End Source File # End Target # End Project php-4.2.3/ext/dotnet/dotnet.php0100644000175200000240000000023607151736671015262 0ustar zeevstaffPush(".Net"); $stack->Push("Hello "); echo $stack->Pop() . $stack->Pop(); ?> php-4.2.3/ext/dotnet/php_dotnet.h0100644000175200000240000000057407331137310015557 0ustar zeevstaff#ifndef PHP_DOTNET_H #define PHP_DOTNET_H #if WIN32|WINNT PHP_MINIT_FUNCTION(DOTNET); PHP_MSHUTDOWN_FUNCTION(DOTNET); PHP_FUNCTION(DOTNET_load); extern zend_module_entry DOTNET_module_entry; #define DOTNET_module_ptr &DOTNET_module_entry #else #define DOTNET_module_ptr NULL #endif /* Win32|WINNT */ #define phpext_DOTNET_ptr DOTNET_module_ptr #endif /* PHP_DOTNET_H */ php-4.2.3/ext/exif/0040755000175200000240000000000007535765574012726 5ustar zeevstaffphp-4.2.3/ext/exif/tests/0040755000175200000240000000000007535765574014070 5ustar zeevstaffphp-4.2.3/ext/exif/tests/001.phpt0100644000175200000240000000163307452060123015235 0ustar zeevstaff--TEST-- Check for exif_read_data --SKIPIF-- --POST-- --GET-- --FILE-- $section) { $accept .= $section; foreach($section as $name=>$value) { if ( $idx!='FILE' || $name!='FileDateTime') { $accept .= substr($name,0,2); $accept .= $value; } } } echo $accept; ?> --EXPECT-- ArrayFitest2.jpgFi1240SeCOMPUTED, ANY_TAG, IFD0, THUMBNAIL, COMMENT, EXIFArrayCoPhoto (c) M.BoergerCoEdited by M.Boerger.htwidth="1" height="1"He1Wi1Is1UsExif test image.UsASCIIArrayCoPhoto (c) M.BoergerUsASCIIArrayJP134JP523Array0Comment #1.1Comment #2.2Comment #3endphp-4.2.3/ext/exif/tests/002.phpt0100644000175200000240000000162207531512003015231 0ustar zeevstaff--TEST-- Check for exif_thumbnail --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- 27bbfd9fc10e1e663d749f5225447905_523_identical_523_27bbfd9fc10e1e663d749f5225447905 php-4.2.3/ext/exif/tests/003.phpt0100644000175200000240000000242107454120740015237 0ustar zeevstaff--TEST-- Check for exif_read_data --SKIPIF-- --POST-- --GET-- --FILE-- $section) { $accept .= $section; if ($idx=="COMPUTED" && array_key_exists("UserCommentEncoding",$section) && $section["UserCommentEncoding"]=="UNICODE") { $section["UserComment"] = mb_convert_encoding($section["UserComment"],"ISO-8859-1","UCS-2BE"); } foreach($section as $name=>$value) { if ($idx!='FILE' || $name!='FileDateTime') { $accept .= substr($name,0,2); $accept .= $value; } } } echo $accept; ?> --EXPECT-- ArrayFitest3.jpgFi1237SeCOMPUTED, ANY_TAG, IFD0, THUMBNAIL, COMMENT, EXIFArrayCoPhoto (c) M.BoergerCoEdited by M.Boerger.htwidth="1" height="1"He1Wi1Is1UsÄÖÜßäöüUsUNICODEArrayCoPhoto (c) M.BoergerUsUNICODEArrayJP134JP523Array0Comment #1.1Comment #2.2Comment #3endphp-4.2.3/ext/exif/tests/test1.jpg0100644000175200000240000000101307441510711015573 0ustar zeevstaffÿØÿàJFIF``ÿÛ„            ÿÀ"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?õT—Ê©$§ÿÙphp-4.2.3/ext/exif/tests/test2.jpg0100644000175200000240000000233007451402251015577 0ustar zeevstaffÿØÿàJFIF``ÿþComment #1.ÿþComment #2.ÿþComment #3endÿá™ExifMM*‚˜(&’†OhPhoto (c) M.BoergerEdited by M.Boerger.ASCIIExif test image.† ÿØÿàJFIF``ÿÛ„            ÿÀ"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?õT—Ê©$§ÿÙÿÛ„            ÿÀ"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?õT—Ê©$§ÿÙphp-4.2.3/ext/exif/tests/test3.jpg0100644000175200000240000000232507454120740015607 0ustar zeevstaffÿØÿàJFIF``ÿþComment #1.ÿþComment #2.ÿþComment #3endÿá–ExifMM*‚˜(&’†OePhoto (c) M.BoergerEdited by M.Boerger.UNICODEÄÖÜßäöü† ÿØÿàJFIF``ÿÛ„            ÿÀ"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?õT—Ê©$§ÿÙÿÛ„            ÿÀ"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?õT—Ê©$§ÿÙphp-4.2.3/ext/exif/CREDITS0100644000175200000240000000004407437302344013720 0ustar zeevstaffEXIF Rasmus Lerdorf, Marcus Boerger php-4.2.3/ext/exif/Makefile.in0100644000175200000240000000030407112727756014754 0ustar zeevstaff# $Id: Makefile.in,v 1.1 2025/05/24 10:33:18 rasmus Exp $ LTLIBRARY_NAME = libexif.la LTLIBRARY_SOURCES = exif.c LTLIBRARY_SHARED_NAME = exif.la include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/exif/config.m40100644000175200000240000000045507401753425014416 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.3 2025/11/30 18:59:33 sniper Exp $ dnl PHP_ARG_ENABLE(exif, whether to enable EXIF support, [ --enable-exif Enable EXIF support]) if test "$PHP_EXIF" != "no"; then AC_DEFINE(HAVE_EXIF, 1, [Whether you want exif support]) PHP_EXTENSION(exif, $ext_shared) fi php-4.2.3/ext/exif/exif.c0100644000175200000240000022712207535204317014007 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Marcus Boerger | +----------------------------------------------------------------------+ */ /* $Id: exif.c,v 1.52.2.12 2025/09/03 19:09:03 helly Exp $ */ /* ToDos * * JIS encoding for comments * See if example images from http://www.exif.org have illegal * thumbnail sizes or if code is corrupt. * Create/Update exif headers. * Create/Remove/Update image thumbnails. */ /* Fragments of the code in this module were borrowed from the public domain * jhead.c package with the author's consent. * * The original header from the jhead.c file was: * * -------------------------------------------------------------------------- * Program to pull the information out of various types of EFIF digital * camera files and show it in a reasonably consistent way * * Version 0.9 * * Compiles with MSVC on Windows, or with GCC on Linux * * Compileing under linux: Must include math library. * Use: cc -lm -O3 -o jhead jhead.c * * Matthias Wandel, Dec 1999 - April 2000 * -------------------------------------------------------------------------- */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if HAVE_EXIF /* When EXIF_DEBUG is defined the module generates a lot of debug messages * that help understanding what is going on. This can and should be used * while extending the module as it shows if you are at the right position. * You are always considered to have a copy of TIFF6.0 and EXIF 2.10 standard. */ #undef EXIF_DEBUG #include "php_exif.h" #include #include "php_ini.h" #include "ext/standard/php_string.h" #include "ext/standard/php_image.h" #include "ext/standard/info.h" typedef unsigned char uchar; #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif #define EXIT_FAILURE 1 #define EXIT_SUCCESS 0 /* {{{ exif_functions[] */ function_entry exif_functions[] = { PHP_FE(exif_read_data, NULL) PHP_FALIAS(read_exif_data, exif_read_data, NULL) PHP_FE(exif_tagname, NULL) PHP_FE(exif_thumbnail, NULL) {NULL, NULL, NULL} }; /* }}} */ #define EXIF_VERSION "1.2" PHP_MINFO_FUNCTION(exif); /* {{{ exif_module_entry */ zend_module_entry exif_module_entry = { STANDARD_MODULE_HEADER, "exif", exif_functions, NULL, NULL, NULL, NULL, PHP_MINFO(exif), EXIF_VERSION, STANDARD_MODULE_PROPERTIES }; /* }}} */ #ifdef COMPILE_DL_EXIF ZEND_GET_MODULE(exif) #endif /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(exif) { php_info_print_table_start(); php_info_print_table_row(2, "EXIF Support", "enabled" ); php_info_print_table_row(2, "EXIF Version", EXIF_VERSION ); php_info_print_table_row(2, "Supported EXIF Version", "0210"); php_info_print_table_row(2, "Supported filetypes", "JPEG,TIFF"); php_info_print_table_end(); } /* }}} */ /* {{{ php_strnlen * get length of string if buffer if less than buffer size or buffer size */ static size_t php_strnlen( char* str, size_t maxlen) { size_t len = 0; if ( str && maxlen && *str) { do { len++; } while ( --maxlen && *(++str)); } return len; } /* }}} */ /* {{{ format description defines Describes format descriptor */ static int php_tiff_bytes_per_format[] = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8}; #define NUM_FORMATS 12 #define TAG_FMT_BYTE 1 #define TAG_FMT_STRING 2 #define TAG_FMT_USHORT 3 #define TAG_FMT_ULONG 4 #define TAG_FMT_URATIONAL 5 #define TAG_FMT_SBYTE 6 #define TAG_FMT_UNDEFINED 7 #define TAG_FMT_SSHORT 8 #define TAG_FMT_SLONG 9 #define TAG_FMT_SRATIONAL 10 #define TAG_FMT_SINGLE 11 #define TAG_FMT_DOUBLE 12 #ifdef EXIF_DEBUG static char *exif_get_tagformat(int format) { switch(format) { case TAG_FMT_BYTE: return "BYTE"; case TAG_FMT_STRING: return "STRING"; case TAG_FMT_USHORT: return "USHORT"; case TAG_FMT_ULONG: return "ULONG"; case TAG_FMT_URATIONAL: return "URATIONAL"; case TAG_FMT_SBYTE: return "SBYTE"; case TAG_FMT_UNDEFINED: return "UNDEFINED"; case TAG_FMT_SSHORT: return "SSHORT"; case TAG_FMT_SLONG: return "SLONG"; case TAG_FMT_SRATIONAL: return "SRATIONAL"; case TAG_FMT_SINGLE: return "SINGLE"; case TAG_FMT_DOUBLE: return "DOUBLE"; } return "*Illegal"; } #endif /* Describes tag values */ #define TAG_TIFF_COMMENT 0x00FE /* SHOUDLNT HAPPEN */ #define TAG_NEW_SUBFILE 0x00FE /* New version of subfile tag */ #define TAG_SUBFILE_TYPE 0x00FF /* Old version of subfile tag */ #define TAG_IMAGEWIDTH 0x0100 #define TAG_IMAGEHEIGHT 0x0101 #define TAG_BITS_PER_SAMPLE 0x0102 #define TAG_COMPRESSION 0x0103 #define TAG_PHOTOMETRIC_INTERPRETATION 0x0106 #define TAG_TRESHHOLDING 0x0107 #define TAG_CELL_WIDTH 0x0108 #define TAG_CELL_HEIGHT 0x0109 #define TAG_STRIP_OFFSETS 0x0111 #define TAG_FILL_ORDER 0x010A #define TAG_DOCUMENT_NAME 0x010D #define TAG_IMAGE_DESCRIPTION 0x010E #define TAG_MAKE 0x010F #define TAG_MODEL 0x0110 #define TAG_STRIP_OFFSETS 0x0111 #define TAG_ORIENTATION 0x0112 #define TAG_SAMPLES_PER_PIXEL 0x0115 #define TAG_ROWS_PER_STRIP 0x0116 #define TAG_STRIP_BYTE_COUNTS 0x0117 #define TAG_MIN_SAMPPLE_VALUE 0x0118 #define TAG_MAX_SAMPLE_VALUE 0x0119 #define TAG_X_RESOLUTION 0x011A #define TAG_Y_RESOLUTION 0x011B #define TAG_PLANAR_CONFIGURATION 0x011C #define TAG_PAGE_NAME 0x011D #define TAG_X_POSITION 0x011E #define TAG_Y_POSITION 0x011F #define TAG_FREE_OFFSETS 0x0120 #define TAG_FREE_BYTE_COUNTS 0x0121 #define TAG_GRAY_RESPONSE_UNIT 0x0122 #define TAG_GRAY_RESPONSE_CURVE 0x0123 #define TAG_RESOLUTION_UNIT 0x0128 #define TAG_PAGE_NUMBER 0x0129 #define TAG_TRANSFER_FUNCTION 0x012D #define TAG_SOFTWARE 0x0131 #define TAG_DATETIME 0x0132 #define TAG_ARTIST 0x013B #define TAG_HOST_COMPUTER 0x013C #define TAG_PREDICATOR 0x013D #define TAG_WHITE_POINT 0x013E #define TAG_PRIMARY_CHROMATICITIES 0x013F #define TAG_COLOR_MAP 0x0140 #define TAG_HALFTONE_HINTS 0x0141 #define TAG_TILE_WIDTH 0x0142 #define TAG_TILE_LENGTH 0x0143 #define TAG_TILE_OFFSETS 0x0144 #define TAG_TILE_BYTE_COUNTS 0x0145 #define TAG_INK_SETMPUTER 0x014C #define TAG_NUMBER_OF_INKS 0x014E #define TAG_INK_NAMES 0x014D #define TAG_DOT_RANGE 0x0150 #define TAG_TARGET_PRINTER 0x0151 #define TAG_EXTRA_SAMPLE 0x0152 #define TAG_SAMPLE_FORMAT 0x0153 #define TAG_S_MIN_SAMPLE_VALUE 0x0154 #define TAG_S_MAX_SAMPLE_VALUE 0x0155 #define TAG_TRANSFER_RANGE 0x0156 #define TAG_JPEG_PROC 0x0200 #define TAG_JPEG_INTERCHANGE_FORMAT 0x0201 #define TAG_JPEG_INTERCHANGE_FORMAT_LEN 0x0202 #define TAG_JPEG_RESTART_INTERVAL 0x0203 #define TAG_JPEG_LOSSLESS_PREDICTOR 0x0205 #define TAG_JPEG_POINT_TRANSFORMS 0x0206 #define TAG_JPEG_Q_TABLES 0x0207 #define TAG_JPEG_DC_TABLES 0x0208 #define TAG_JPEG_AC_TABLES 0x0209 #define TAG_YCC_COEFFICIENTS 0x0211 #define TAG_YCC_SUB_SAMPLING 0x0212 #define TAG_YCC_POSITIONING 0x0213 #define TAG_REFERENCE_BLACK_WHITE 0x0214 #define TAG_COPYRIGHT 0x8298 #define TAG_EXPOSURETIME 0x829A #define TAG_FNUMBER 0x829D #define TAG_EXIF_IFD_POINTER 0x8769 #define TAG_GPS_IFD_POINTER 0x8825 #define TAG_ISOSPEED 0x8827 #define TAG_EXIFVERSION 0x9000 #define TAG_SHUTTERSPEED 0x9201 #define TAG_APERTURE 0x9202 #define TAG_DATETIME_ORIGINAL 0x9003 #define TAG_MAXAPERTURE 0x9205 #define TAG_SUBJECT_DISTANCE 0x9206 #define TAG_LIGHT_SOURCE 0x9208 #define TAG_FLASH 0x9209 #define TAG_FOCALLENGTH 0x920A #define TAG_MARKER_NOTE 0x927C #define TAG_USERCOMMENT 0x9286 #define TAG_FLASH_PIX_VERSION 0xA000 #define TAG_COLOR_SPACE 0xA001 #define TAG_COMP_IMAGEWIDTH 0xA002 /* compressed images only */ #define TAG_COMP_IMAGEHEIGHT 0xA003 #define TAG_INTEROP_IFD_POINTER 0xA005 /* IFD pointer */ #define TAG_FOCALPLANEXRES 0xA20E #define TAG_FOCALPLANEUNITS 0xA210 /* Olympus specific tags */ #define TAG_OLYMPUS_SPECIALMODE 0x0200 #define TAG_OLYMPUS_JPEGQUAL 0x0201 #define TAG_OLYMPUS_MACRO 0x0202 #define TAG_OLYMPUS_DIGIZOOM 0x0204 #define TAG_OLYMPUS_SOFTWARERELEASE 0x0207 #define TAG_OLYMPUS_PICTINFO 0x0208 #define TAG_OLYMPUS_CAMERAID 0x0209 /* end Olympus specific tags */ /* Internal */ #define TAG_NONE -1 /* note that -1 <> 0xFFFF */ #define TAG_COMPUTED_VALUE -2 /* Values for TAG_PHOTOMETRIC_INTERPRETATION */ #define PMI_BLACK_IS_ZERO 0 #define PMI_WHITE_IS_ZERO 1 #define PMI_RGB 2 #define PMI_PALETTE_COLOR 3 #define PMI_TRANSPARENCY_MASK 4 #define PMI_SEPARATED 5 #define PMI_YCBCR 6 #define PMI_CIELAB 8 /* }}} */ /* {{{ TabTable[] */ static const struct { unsigned short Tag; char *Desc; } TagTable[] = { { 0x00FE, "NewSubFile"}, { 0x00FF, "SubFile"}, { 0x0100, "ImageWidth"}, { 0x0101, "ImageLength"}, { 0x0102, "BitsPerSample"}, { 0x0103, "Compression"}, { 0x0106, "PhotometricInterpretation"}, { 0x010A, "FillOrder"}, { 0x010D, "DocumentName"}, { 0x010E, "ImageDescription"}, { 0x010F, "Make"}, { 0x0110, "Model"}, { 0x0111, "StripOffsets"}, { 0x0112, "Orientation"}, { 0x0115, "SamplesPerPixel"}, { 0x0116, "RowsPerStrip"}, { 0x0117, "StripByteCounts"}, { 0x0118, "MinSampleValue"}, { 0x0119, "MaxSampleValue"}, { 0x011A, "XResolution"}, { 0x011B, "YResolution"}, { 0x011C, "PlanarConfiguration"}, { 0x011D, "PageName"}, { 0x011E, "XPosition"}, { 0x011F, "YPosition"}, { 0x0120, "FreeOffsets"}, { 0x0121, "FreeByteCounts"}, { 0x0122, "GrayResponseUnit"}, { 0x0123, "GrayResponseCurve"}, { 0x0124, "T4Options"}, { 0x0125, "T6Options"}, { 0x0128, "ResolutionUnit"}, { 0x0129, "PageNumber"}, { 0x012D, "TransferFunction"}, { 0x0131, "Software"}, { 0x0132, "DateTime"}, { 0x013B, "Artist"}, { 0x013C, "HostComputer"}, { 0x013D, "Predictor"}, { 0x013E, "WhitePoint"}, { 0x013F, "PrimaryChromaticities"}, { 0x0140, "ColorMap"}, { 0x0141, "HalfToneHints"}, { 0x0142, "TileWidth"}, { 0x0143, "TileLength"}, { 0x0144, "TileOffsets"}, { 0x0145, "TileByteCounts"}, { 0x014C, "InkSet"}, { 0x014D, "InkNames"}, { 0x014E, "NumberOfInks"}, { 0x0150, "DotRange"}, { 0x0151, "TargetPrinter"}, { 0x0152, "ExtraSample"}, { 0x0153, "SampleFormat"}, { 0x0154, "SMinSampleValue"}, { 0x0155, "SMaxSampleValue"}, { 0x0156, "TransferRange"}, { 0x0200, "JPEGProc"}, { 0x0201, "JPEGInterchangeFormat"}, { 0x0202, "JPEGInterchangeFormatLength"}, { 0x0203, "JPEGRestartInterval"}, { 0x0205, "JPEGLosslessPredictors"}, { 0x0206, "JPEGPointTransforms"}, { 0x0207, "JPEGQTables"}, { 0x0208, "JPEGDCTables"}, { 0x0209, "JPEGACTables"}, { 0x0211, "YCbCrCoefficients"}, { 0x0212, "YCbCrSubSampling"}, { 0x0213, "YCbCrPositioning"}, { 0x0214, "ReferenceBlackWhite"}, { 0x1000, "RelatedImageFileFormat"}, { 0x828D, "CFARepeatPatternDim"}, { 0x828E, "CFAPattern"}, { 0x828F, "BatteryLevel"}, { 0x8298, "Copyright"}, { 0x829A, "ExposureTime"}, { 0x829D, "FNumber"}, { 0x83BB, "IPTC/NAA"}, { 0x8769, "Exif_IFD_Pointer"}, { 0x8773, "InterColorProfile"}, { 0x8822, "ExposureProgram"}, { 0x8824, "SpectralSensitivity"}, { 0x8825, "GPS_IFD_Pointer"}, { 0x8827, "ISOSpeedRatings"}, { 0x8828, "OECF"}, { 0x9000, "ExifVersion"}, { 0x9003, "DateTimeOriginal"}, { 0x9004, "DateTimeDigitized"}, { 0x9101, "ComponentsConfiguration"}, { 0x9102, "CompressedBitsPerPixel"}, { 0x9201, "ShutterSpeedValue"}, { 0x9202, "ApertureValue"}, { 0x9203, "BrightnessValue"}, { 0x9204, "ExposureBiasValue"}, { 0x9205, "MaxApertureValue"}, { 0x9206, "SubjectDistance"}, { 0x9207, "MeteringMode"}, { 0x9208, "LightSource"}, { 0x9209, "Flash"}, { 0x920A, "FocalLength"}, { 0x920B, "FlashEnergy"}, /* 0xA20B in JPEG */ { 0x920C, "SpatialFrequencyResponse"}, /* 0xA20C - - */ { 0x920E, "FocalPlaneXResolution"}, /* 0xA20E - - */ { 0x920F, "FocalPlaneYResolution"}, /* 0xA20F - - */ { 0x9210, "FocalPlaneResolutionUnit"}, /* 0xA210 - - */ { 0x9214, "SubjectLocation"}, /* 0xA214 - - */ { 0x9215, "ExposureIndex"}, /* 0xA215 - - */ { 0x9217, "SensingMethod"}, /* 0xA217 - - */ { 0x927C, "MakerNote"}, { 0x9286, "UserComment"}, { 0x9290, "SubSecTime"}, { 0x9291, "SubSecTimeOriginal"}, { 0x9292, "SubSecTimeDigitized"}, { 0xA000, "FlashPixVersion"}, { 0xA001, "ColorSpace"}, { 0xA002, "ExifImageWidth"}, { 0xA003, "ExifImageLength"}, { 0xA005, "InteroperabilityOffset"}, { 0xA20B, "FlashEnergy"}, /* 0x920B in TIFF/EP */ { 0xA20C, "SpatialFrequencyResponse"}, /* 0x920C - - */ { 0xA20E, "FocalPlaneXResolution"}, /* 0x920E - - */ { 0xA20F, "FocalPlaneYResolution"}, /* 0x920F - - */ { 0xA210, "FocalPlaneResolutionUnit"}, /* 0x9210 - - */ { 0xA214, "SubjectLocation"}, /* 0x9214 - - */ { 0xA215, "ExposureIndex"}, /* 0x9215 - - */ { 0xA217, "SensingMethod"}, /* 0x9217 - - */ { 0xA300, "FileSource"}, { 0xA301, "SceneType"}, {TAG_NONE, "no tag value"}, {TAG_COMPUTED_VALUE, "computed value"}, { 0, ""} /* Important for exif_get_tagname() IF value != "" functionresult is != false */ } ; /* }}} */ /* {{{ exif_get_tagname Get headername for tag_num or NULL if not defined */ static char * exif_get_tagname(int tag_num, char *ret) { int i,t; for (i=0;;i++) { if ( (t=TagTable[i].Tag) == tag_num || !t) { if (ret) { strcpy(ret,TagTable[i].Desc); if ( !t) sprintf(ret,"UndefinedTag:0x%04X", tag_num); return ret; } return TagTable[i].Desc; } } if (ret) { sprintf(ret,"UndefinedTag:0x%04X", tag_num); return ret; } return ""; } /* }}} */ /* {{{ php_ifd_get16m Get 16 bits motorola order (always) for jpeg header stuff. */ static int php_ifd_get16m(void *value) { return (((uchar *)value)[0] << 8) | ((uchar *)value)[1]; } /* }}} */ /* {{{ php_ifd_get16u * Convert a 16 bit unsigned value from file's native byte order */ static int php_ifd_get16u(void *value, int motorola_intel) { if (motorola_intel) { return (((uchar *)value)[0] << 8) | ((uchar *)value)[1]; } else { return (((uchar *)value)[1] << 8) | ((uchar *)value)[0]; } } /* }}} */ /* {{{ php_ifd_get16s * Convert a 16 bit signed value from file's native byte order */ static signed short php_ifd_get16s(void *value, int motorola_intel) { return (signed short)php_ifd_get16u(value, motorola_intel); } /* }}} */ /* {{{ php_ifd_get32s * Convert a 32 bit signed value from file's native byte order */ static int php_ifd_get32s(void *value, int motorola_intel) { if (motorola_intel) { return ((( char *)value)[0] << 24) | (((uchar *)value)[1] << 16) | (((uchar *)value)[2] << 8 ) | (((uchar *)value)[3] ); } else { return ((( char *)value)[3] << 24) | (((uchar *)value)[2] << 16) | (((uchar *)value)[1] << 8 ) | (((uchar *)value)[0] ); } } /* }}} */ /* {{{ php_ifd_get32u * Convert a 32 bit unsigned value from file's native byte order */ static unsigned php_ifd_get32u(void *value, int motorola_intel) { return (unsigned)php_ifd_get32s(value, motorola_intel) & 0xffffffff; } /* }}} */ /* {{{ exif_convert_any_format * Evaluate number, be it int, rational, or float from directory. */ static double exif_convert_any_format(void *value, int format, int motorola_intel) { int s_den; unsigned u_den; switch(format) { case TAG_FMT_SBYTE: return *(signed char *)value; case TAG_FMT_BYTE: return *(uchar *)value; case TAG_FMT_USHORT: return php_ifd_get16u(value, motorola_intel); case TAG_FMT_ULONG: return php_ifd_get32u(value, motorola_intel); case TAG_FMT_URATIONAL: u_den = php_ifd_get32u(4+(char *)value, motorola_intel); if (u_den == 0) { return 0; } else { return (double)php_ifd_get32u(value, motorola_intel) / u_den; } case TAG_FMT_SRATIONAL: s_den = php_ifd_get32s(4+(char *)value, motorola_intel); if (s_den == 0) { return 0; } else { return (double)php_ifd_get32s(value, motorola_intel) / s_den; } case TAG_FMT_SSHORT: return (signed short)php_ifd_get16u(value, motorola_intel); case TAG_FMT_SLONG: return php_ifd_get32s(value, motorola_intel); /* Not sure if this is correct (never seen float used in Exif format) */ case TAG_FMT_SINGLE: php_error(E_WARNING, "Found value of type single"); return (double)*(float *)value; case TAG_FMT_DOUBLE: php_error(E_WARNING, "Found value of type double"); return *(double *)value; } return 0; } /* }}} */ /* {{{ struct image_info_value, image_info_list */ #ifndef WORD #define WORD short #endif #ifndef DWORD #define DWORD int #endif typedef struct { int num; int den; } signed_rational; typedef struct { unsigned int num; unsigned int den; } unsigned_rational; typedef struct { WORD tag; WORD format; DWORD length; union { char *s; unsigned u; int i; float f; double d; signed_rational sr; unsigned_rational ur; } value; char *name; } image_info_value; typedef struct { int count; image_info_value *list; } image_info_list; /* }}} */ /* {{{ exif_get_sectionname Returns the name of a section */ #define SECTION_FILE 0 #define SECTION_COMPUTED 1 #define SECTION_ANY_TAG 2 #define SECTION_IFD0 3 #define SECTION_THUMBNAIL 4 #define SECTION_COMMENT 5 #define SECTION_APP0 6 #define SECTION_EXIF 7 #define SECTION_FPIX 8 #define SECTION_GPS 9 #define SECTION_INTEROP 10 #define SECTION_APP12 11 #define SECTION_COUNT 12 #define FOUND_FILE (1<2) sections[len-2] = '\0'; return sections; } /* }}} */ /* {{{ struct image_info_type This structure stores Exif header image elements in a simple manner Used to store camera data as extracted from the various ways that it can be stored in a nexif header */ typedef struct { uchar *Data; int Type; size_t Size; } section_t; /* EXIF standard defines Copyright as " [ '\0' ] ['\0']" */ /* This structure is used to store a section of a Jpeg file. */ typedef struct { char *FileName; time_t FileDateTime; size_t FileSize; image_filetype FileType; FILE *infile; int Height, Width; int IsColor; float ApertureFNumber; float ExposureTime; double FocalplaneUnits; float CCDWidth; double FocalplaneXRes; int ExifImageWidth; float FocalLength; float Distance; int motorola_intel; /* 1 Motorola; 0 Intel */ char *UserComment; int UserCommentLen; char UserCommentEncoding[12]; char *Thumbnail; int ThumbnailSize; int ThumbnailOffset; /* other */ int sections_found; /* FOUND_ */ image_info_list info_list[SECTION_COUNT]; /* for parsing */ int read_thumbnail; int read_all; /* internal */ section_t sections[20]; int sections_count; } image_info_type; /* }}} */ /* {{{ exif_add_image_info Free memory allocated for image_info */ void exif_add_image_info( image_info_type *image_info, int section_index, char *name, int tag, int format, int length, void* value) { image_info_value *info_value, *list; list = erealloc(image_info->info_list[section_index].list,(image_info->info_list[section_index].count+1)*sizeof(image_info_value)); if ( !list) { php_error(E_WARNING,"Cannot allocate memory for all data"); return; } image_info->info_list[section_index].list = list; image_info->sections_found |= 1<info_list[section_index].list[image_info->info_list[section_index].count]; info_value->name = emalloc(strlen(name)+1); strcpy(info_value->name, name); info_value->tag = tag; info_value->format = format; info_value->length = 1; /* we do not support arrays other than STRING/UNDEFINED */ switch (format) { case TAG_FMT_BYTE: info_value->value.u = *(uchar*)value; break; case TAG_FMT_STRING: if ( value) { length = php_strnlen(value,length); info_value->length = length; info_value->value.s = estrndup(value,length); } else { info_value->length = 0; info_value->value.s = estrdup(""); } if ( !info_value->value.s) { info_value->length = 0; php_error(E_WARNING, "Could not allocate memory for thumbnail"); break; /* better return with "" instead of possible casing problems */ } break; case TAG_FMT_USHORT: info_value->value.u = php_ifd_get16u(value,image_info->motorola_intel); break; case TAG_FMT_ULONG: info_value->value.u = php_ifd_get32u(value,image_info->motorola_intel); break; case TAG_FMT_URATIONAL: info_value->value.ur.num = php_ifd_get32u(value, image_info->motorola_intel); info_value->value.ur.den = php_ifd_get32u(4+(char *)value, image_info->motorola_intel); break; case TAG_FMT_SBYTE: info_value->value.i = *(char*)value; break; default: /* Standard says more types possible but skip them... * but allow users to handle data if they know how to * So not return but use type UNDEFINED * return; */ info_value->tag = TAG_FMT_UNDEFINED;/* otherwise not freed from memory */ case TAG_FMT_UNDEFINED: if ( value) { info_value->value.s = estrndup(value,length); info_value->length = length; } else { info_value->length = 0; info_value->value.s = estrdup(""); } if ( !info_value->value.s) { info_value->length = 0; php_error(E_WARNING, "Could not allocate memory for thumbnail"); return; } break; case TAG_FMT_SSHORT: info_value->value.i = php_ifd_get16s(value,image_info->motorola_intel); break; case TAG_FMT_SLONG: info_value->value.i = php_ifd_get32s(value,image_info->motorola_intel); break; case TAG_FMT_SRATIONAL: info_value->value.sr.num = php_ifd_get32u(value, image_info->motorola_intel); info_value->value.sr.den = php_ifd_get32u(4+(char *)value, image_info->motorola_intel); break; case TAG_FMT_SINGLE: php_error(E_WARNING, "Found value of type single"); info_value->value.f = *(float *)value; case TAG_FMT_DOUBLE: php_error(E_WARNING, "Found value of type double"); info_value->value.d = *(double *)value; break; } image_info->info_list[section_index].count++; } /* }}} */ /* {{{ exif_iif_add_int Add a tag from IFD to image_info */ void exif_iif_add_int( image_info_type *image_info, int section_index, char *name, int value) { image_info_value *info_value, *list; list = erealloc(image_info->info_list[section_index].list,(image_info->info_list[section_index].count+1)*sizeof(image_info_value)); if ( !list) { php_error(E_WARNING, "Could not allocate memory for thumbnail"); return; } image_info->info_list[section_index].list = list; info_value = &image_info->info_list[section_index].list[image_info->info_list[section_index].count]; info_value->tag = TAG_NONE; info_value->format = TAG_FMT_SLONG; info_value->length = 1; info_value->name = estrdup(name); if ( !info_value->name) { php_error(E_WARNING, "Could not allocate memory for thumbnail"); return; } info_value->value.i = value; image_info->sections_found |= 1<info_list[section_index].count++; } /* }}} */ /* {{{ exif_free_image_info Free memory allocated for image_info */ void exif_free_image_info( image_info_type *image_info, int section_index) { int i; void *f; if (image_info->info_list[section_index].count) { for (i=0; i < image_info->info_list[section_index].count; i++) { if ( (f=image_info->info_list[section_index].list[i].name) != NULL) { efree(f); } if ( image_info->info_list[section_index].list[i].format == TAG_FMT_STRING ||image_info->info_list[section_index].list[i].format == TAG_FMT_UNDEFINED ) { if ( (f=image_info->info_list[section_index].list[i].value.s) != NULL) { efree(f); } } } if ( (f=image_info->info_list[section_index].list) != NULL) { efree(f); } } } /* }}} */ #undef RETURN_SUB_ARRAYS /* {{{ add_assoc_image_info Add image_info to associative array value. */ void add_assoc_image_info( pval *value, int sub_array, image_info_type *image_info, int section_index) { char buffer[64], *val, *name, uname[64]; int idx=0, unknown=0; image_info_value *info_value; if ( image_info->info_list[section_index].count) { int i; pval *tmpi; if ( sub_array) { MAKE_STD_ZVAL(tmpi); array_init(tmpi); } else { tmpi = value; } for(i=0; iinfo_list[section_index].count; i++) { info_value = &image_info->info_list[section_index].list[i]; #ifdef EXIF_DEBUG /* php_error(E_NOTICE,"adding info #%d: '%s:%s'", i, exif_get_sectionname(section_index), info_value->name);*/ #endif if ( !(name = info_value->name)) { sprintf(uname,"%d", unknown++); name = uname; } switch(info_value->format) { default: /* Standard says more types possible but skip them... * but allow users to handle data if they know how to * So not return but use type UNDEFINED * return; */ case TAG_FMT_UNDEFINED: if ( !info_value->value.s) { add_assoc_stringl(tmpi, name, "", 0, 1); } else { add_assoc_stringl(tmpi, name, info_value->value.s, info_value->length, 1); } break; case TAG_FMT_STRING: if ( !(val = info_value->value.s)) val = ""; if (section_index==SECTION_COMMENT) { add_index_string(tmpi, idx++, val, 1); } else { add_assoc_string(tmpi, name, val, 1); } break; case TAG_FMT_BYTE: case TAG_FMT_USHORT: case TAG_FMT_ULONG: add_assoc_long(tmpi, name, (int)info_value->value.u); break; case TAG_FMT_URATIONAL: sprintf(buffer,"%i/%i", info_value->value.ur.num, info_value->value.ur.den); add_assoc_string(tmpi, name, buffer, 1); break; case TAG_FMT_SBYTE: case TAG_FMT_SSHORT: case TAG_FMT_SLONG: add_assoc_long(tmpi, name, info_value->value.i); break; case TAG_FMT_SRATIONAL: sprintf(buffer,"%i/%i", info_value->value.sr.num, info_value->value.sr.den); add_assoc_string(tmpi, name, buffer, 1); break; case TAG_FMT_SINGLE: add_assoc_double(tmpi, name, info_value->value.f); break; case TAG_FMT_DOUBLE: add_assoc_double(tmpi, name, info_value->value.d); break; } } if ( sub_array) { add_assoc_zval(value, exif_get_sectionname(section_index), tmpi); } } } /* }}} */ /* {{{ Markers JPEG markers consist of one or more 0xFF bytes, followed by a marker code byte (which is not an FF). Here are the marker codes of interest in this program. (See jdmarker.c for a more complete list.) */ #define M_TEM 0x01 #define M_SOF0 0xC0 /* Start Of Frame N */ #define M_SOF1 0xC1 /* N indicates which compression process */ #define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */ #define M_SOF3 0xC3 #define M_DHT 0xC4 #define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */ #define M_SOF6 0xC6 #define M_SOF7 0xC7 #define M_SOF9 0xC9 #define M_SOF10 0xCA #define M_SOF11 0xCB #define M_SOF13 0xCD #define M_SOF14 0xCE #define M_SOF15 0xCF #define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ #define M_EOI 0xD9 /* End Of Image (end of datastream) */ #define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ #define M_DQT 0xDB #define M_DNL 0xDC #define M_DRI 0xDD #define M_DHP 0xDE #define M_EXP 0xDF #define M_APP0 0xE0 #define M_EXIF 0xE1 /* Exif Attribute Information */ #define M_FPIX 0xE2 /* Flash Pix Extension Data */ #define M_APP3 0xE3 #define M_APP4 0xE4 #define M_APP5 0xE5 #define M_APP6 0xE6 #define M_APP7 0xE7 #define M_APP8 0xE8 #define M_APP9 0xE9 #define M_APP10 0xEA #define M_APP11 0xEB #define M_APP12 0xEC #define M_APP13 0xED #define M_APP14 0xEE #define M_APP15 0xEF #define M_JPG0 0xF0 #define M_JPG13 0xFD #define M_COM 0xFE /* COMment */ #define PSEUDO_IMAGE_MARKER 0x123; /* Extra value. */ /* }}} */ /* {{{ exif_process_COM Process a COM marker. We want to print out the marker contents as legible text; we must guard against random junk and varying newline representations. */ static void exif_process_COM (image_info_type *image_info, char *value, int length) { exif_add_image_info( image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_STRING, length-2, value+2); } /* }}} */ /* {{{ exif_process_SOFn * Process a SOFn marker. This is useful for the image dimensions */ static void exif_process_SOFn (image_info_type *ImageInfo, uchar *Data, int marker) { int data_precision, num_components; const char *process; data_precision = Data[2]; ImageInfo->Height = php_ifd_get16m(Data+3); ImageInfo->Width = php_ifd_get16m(Data+5); num_components = Data[7]; if (num_components == 3) { ImageInfo->IsColor = 1; } else { ImageInfo->IsColor = 0; } switch (marker) { case M_SOF0: process = "Baseline"; break; case M_SOF1: process = "Extended sequential"; break; case M_SOF2: process = "Progressive"; break; case M_SOF3: process = "Lossless"; break; case M_SOF5: process = "Differential sequential"; break; case M_SOF6: process = "Differential progressive"; break; case M_SOF7: process = "Differential lossless"; break; case M_SOF9: process = "Extended sequential, arithmetic coding"; break; case M_SOF10: process = "Progressive, arithmetic coding"; break; case M_SOF11: process = "Lossless, arithmetic coding"; break; case M_SOF13: process = "Differential sequential, arithmetic coding"; break; case M_SOF14: process = "Differential progressive, arithmetic coding"; break; case M_SOF15: process = "Differential lossless, arithmetic coding"; break; default: process = "Unknown"; break; } } /* }}} */ static void exif_process_IFD_in_JPEG(image_info_type *ImageInfo, char *DirStart, char *OffsetBase, unsigned IFDlength, int sub_section_index); /* {{{ exif_get_markername Get name of marker */ #ifdef EXIF_DEBUG char * exif_get_markername(int marker) { switch(marker) { case 0xC0: return "SOF0"; case 0xC1: return "SOF1"; case 0xC2: return "SOF2"; case 0xC3: return "SOF3"; case 0xC4: return "DHT"; case 0xC5: return "SOF5"; case 0xC6: return "SOF6"; case 0xC7: return "SOF7"; case 0xC9: return "SOF9"; case 0xCA: return "SOF10"; case 0xCB: return "SOF11"; case 0xCD: return "SOF13"; case 0xCE: return "SOF14"; case 0xCF: return "SOF15"; case 0xD8: return "SOI"; case 0xD9: return "EOI"; case 0xDA: return "SOS"; case 0xDB: return "DQT"; case 0xDC: return "DNL"; case 0xDD: return "DRI"; case 0xDE: return "DHP"; case 0xDF: return "EXP"; case 0xE0: return "APP0"; case 0xE1: return "EXIF"; case 0xE2: return "FPIX"; case 0xE3: return "APP3"; case 0xE4: return "APP4"; case 0xE5: return "APP5"; case 0xE6: return "APP6"; case 0xE7: return "APP7"; case 0xE8: return "APP8"; case 0xE9: return "APP9"; case 0xEA: return "APP10"; case 0xEB: return "APP11"; case 0xEC: return "APP12"; case 0xED: return "APP13"; case 0xEE: return "APP14"; case 0xEF: return "APP15"; case 0xF0: return "JPG0"; case 0xFD: return "JPG13"; case 0xFE: return "COM"; case 0x01: return "TEM"; } return "Unknown"; } #endif /* }}} */ /* {{{ proto string|false exif_tagname(index) Get headername for index or false if not defined */ PHP_FUNCTION(exif_tagname) { pval **p_num; int tag, ac = ZEND_NUM_ARGS(); char *szTemp; if ((ac < 1 || ac > 1) || zend_get_parameters_ex(ac, &p_num) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(p_num); tag = Z_LVAL_PP(p_num); szTemp = exif_get_tagname(tag,NULL); if ( tag<0 || !szTemp || !szTemp[0]) { RETURN_BOOL(FALSE); } else { RETURN_STRING(szTemp, 1) } } /* }}} */ /* {{{ exif_extract_thumbnail * Grab the thumbnail - by Matt Bonneau */ static void exif_extract_thumbnail(image_info_type *ImageInfo, char *offset, unsigned length) { /* according to exif2.1, the thumbnail is not supposed to be greater than 64K */ if ( ImageInfo->read_thumbnail) { if ( ImageInfo->ThumbnailSize >= 65536 || ImageInfo->ThumbnailSize <= 0 || ImageInfo->ThumbnailOffset <= 0) { php_error(E_WARNING, "Illegal thumbnail size/offset"); return; } ImageInfo->Thumbnail = emalloc(ImageInfo->ThumbnailSize); if (!ImageInfo->Thumbnail) { php_error(E_WARNING, "Could not allocate memory for thumbnail"); return; } else { /* Check to make sure we are not going to go past the ExifLength */ if ((unsigned)(ImageInfo->ThumbnailOffset + ImageInfo->ThumbnailSize) > length) { php_error(E_WARNING, "Thumbnail goes beyond exif header boundary"); return; } else { memcpy(ImageInfo->Thumbnail, offset + ImageInfo->ThumbnailOffset, ImageInfo->ThumbnailSize); } } } } /* }}} */ /* {{{ exif_process_string_raw * Copy a string in Exif header to a character string returns length of allocated buffer if any. */ static int exif_process_string_raw(char **result,char *value,size_t byte_count) { /* we cannot use strlcpy - here the problem is that we have to copy NUL * chars up to byte_count, we also have to add a single NUL character to * force end of string. */ if (byte_count) { (*result) = emalloc(byte_count+1); memcpy(*result, value, byte_count); (*result)[byte_count] = '\0'; return byte_count+1; } return 0; } /* }}} */ /* {{{ exif_process_string * Copy a string in Exif header to a character string returns length of allocated buffer if any. */ static int exif_process_string(char **result,char *value,size_t byte_count) { /* we cannot use strlcpy - here the problem is that we cannot use strlen to * determin length of string and we cannot use strlcpy with len=byte_count+1 * because then we might get into an EXCEPTION if we exceed an allocated * memory page...so we use php_strnlen in conjunction with memcpy and add the NUL * char. */ if ((byte_count=php_strnlen(value,byte_count)) > 0) { (*result) = emalloc(byte_count+1); memcpy(*result, value, byte_count); (*result)[byte_count] = '\0'; return byte_count+1; } return 0; } /* }}} */ /* {{{ exif_process_user_comment * Process UserComment in IFD. */ static int exif_process_user_comment(char **pszInfoPtr,char *szEncoding,char *szValuePtr,int ByteCount) { int a; *szEncoding = '\0'; /* Copy the comment */ if ( ByteCount>=8) { if (!memcmp(szValuePtr, "UNICODE\0", 8) || !memcmp(szValuePtr, "JIS\0\0\0\0\0", 8)) { /* treat JIS encoding as if it where UNICODE */ strcpy( szEncoding, szValuePtr); szValuePtr = szValuePtr+8; ByteCount -= 8; return exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount); } if ( !memcmp(szValuePtr, "ASCII\0\0\0", 8)) { strcpy( szEncoding, szValuePtr); szValuePtr = szValuePtr+8; ByteCount -= 8; } if ( !memcmp(szValuePtr,"\0\0\0\0\0\0\0\0",8)) { /* 8 NULL means undefined and should be ASCII... */ strcpy( szEncoding, "UNDEFINED"); szValuePtr = szValuePtr+8; ByteCount -= 8; } } /* Olympus has this padded with trailing spaces. Remove these first. */ if (ByteCount) for (a=ByteCount-1;a && szValuePtr[a]==' ';a--) (szValuePtr)[a] = '\0'; /* normal text without encoding */ return exif_process_string(pszInfoPtr, szValuePtr, ByteCount); } /* }}} */ /* {{{ exif_char_dump * Do not use! This is a debug function... */ #ifdef EXIF_DEBUG static unsigned char* exif_char_dump( unsigned char * addr, int len) { static unsigned char buf[1024+1]; int i, p=0; for(i=0; i=32) { buf[p++] = *addr; } else { buf[p++] = '?'; } addr++; } buf[sizeof(buf)-1]=0; return buf; } #endif /* }}} */ /* {{{ exif_process_IFD_TAG * Process one of the nested IFDs directories. */ static void exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, char *offset_base, size_t IFDlength, int section_index, int ReadNextIFD) { int l; int tag, format, components; char *value_ptr, tagname[64], cbuf[32], *outside=NULL; size_t byte_count, offset_val, fpos, fgot; tag = php_ifd_get16u(dir_entry, ImageInfo->motorola_intel); format = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel); components = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel); if ((format-1) >= NUM_FORMATS) { /* (-1) catches illegal zero case as unsigned underflows to positive large. */ php_error(E_WARNING, "Illegal format code in IFD"); return; } byte_count = components * php_tiff_bytes_per_format[format]; if (byte_count > 4) { offset_val = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel); /* If its bigger than 4 bytes, the dir entry contains an offset. */ value_ptr = offset_base+offset_val; if (offset_val+byte_count > IFDlength || value_ptr < dir_entry) { /* // It is important to check for IMAGE_FILETYPE_TIFF // JPEG does not use absolute pointers instead its pointers are relative to the start // of the TIFF header in APP1 section. */ if (offset_val<0 || offset_val+byte_count>ImageInfo->FileSize || (ImageInfo->FileType!=IMAGE_FILETYPE_TIFF_II && ImageInfo->FileType!=IMAGE_FILETYPE_TIFF_MM)) { if (value_ptr < dir_entry) { /* we can read this if offset_val > 0 */ /* some files have their values in other parts of the file */ php_error(E_WARNING, "process tag(x%04X=%s): Illegal pointer offset(x%04X < x%04X)", tag, exif_get_tagname(tag,tagname), offset_val, dir_entry); } else { /* this is for sure not allowed */ /* exception are IFD pointers */ php_error(E_WARNING, "process tag(x%04X=%s): Illegal pointer offset(x%04X + x%04X = x%04X > x%04X)", tag, exif_get_tagname(tag,tagname), offset_val, byte_count, offset_val+byte_count, IFDlength); } return; } if ( byte_count>sizeof(cbuf)) { /* mark as outside range and get buffer */ value_ptr = emalloc(byte_count); if ( !value_ptr) { php_error(E_WARNING, "could not allocate data for entire image"); return; } outside = value_ptr; } else { /* // in most cases we only access a small range so // it is faster to use a static buffer there // BUT it offers also the possibility to have // pointers read without the need to free them // explicitley before returning. */ value_ptr = cbuf; } fpos = ftell(ImageInfo->infile); fseek(ImageInfo->infile, offset_val, SEEK_SET); fgot = ftell(ImageInfo->infile); if ( fgot!=offset_val) { if ( outside) efree( outside); php_error(E_WARNING,"Wrong file pointer: 0x%08X != 0x08X", fgot, offset_val); return; } fgot = fread(value_ptr, 1, byte_count, ImageInfo->infile); fseek(ImageInfo->infile, fpos, SEEK_SET); if ( fgotsections_found |= FOUND_ANY_TAG; #ifdef EXIF_DEBUG php_error(E_NOTICE,"process tag(x%04x=%s,@x%04X+x%04X(=%d)): %s", tag, exif_get_tagname(tag,tagname), value_ptr-offset_base, byte_count, byte_count, format==TAG_FMT_STRING?(value_ptr?value_ptr:""):exif_get_tagformat(format)); #endif if (section_index==SECTION_THUMBNAIL) { switch(tag) { case TAG_STRIP_OFFSETS: case TAG_JPEG_INTERCHANGE_FORMAT: /* accept both formats */ ImageInfo->ThumbnailOffset = (int)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel); break; case TAG_JPEG_INTERCHANGE_FORMAT_LEN: ImageInfo->ThumbnailSize = (int)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel); /* no need to check for offset here: Exif says values have to be stored in tag order */ if ( ImageInfo->FileType == IMAGE_FILETYPE_JPEG) { exif_extract_thumbnail(ImageInfo, offset_base, IFDlength); } break; } } else{ switch(tag) { case TAG_COPYRIGHT: if (byte_count>1 && (l=php_strnlen(value_ptr,byte_count)) > 0) { if ( (size_t)lUserCommentLen = exif_process_user_comment(&(ImageInfo->UserComment),ImageInfo->UserCommentEncoding,value_ptr,byte_count); if (ImageInfo->UserCommentLen) ImageInfo->UserCommentLen--; /* We want number of characters not allocation size */ break; /* this is only a comment if type is string! */ /* case TAG_TIFF_COMMENT: if (format == TAG_FMT_STRING) { php_error(E_WARNING,"Found TIFF Comment with wrong TAG 0x00FE"); if (ImageInfo->numComments < EXIF_MAX_COMMENTS) { if (exif_process_string(&((ImageInfo->Comments)[ImageInfo->numComments]),value_ptr,byte_count)) { ImageInfo->numComments++; } } } break;*/ /* More relevant info always comes earlier, so only use this field if we don't have appropriate aperture information yet. */ case TAG_APERTURE: case TAG_MAXAPERTURE: if (ImageInfo->ApertureFNumber == 0) { ImageInfo->ApertureFNumber = (float)exp(exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel)*log(2)*0.5); } break; case TAG_SHUTTERSPEED: /* More complicated way of expressing exposure time, so only use this value if we don't already have it from somewhere else. SHUTTERSPEED comes after EXPOSURE TIME */ if (ImageInfo->ExposureTime == 0) { ImageInfo->ExposureTime = (float)(1/exp(exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel)*log(2))); } break; case TAG_EXPOSURETIME: ImageInfo->ExposureTime = -1; break; case TAG_COMP_IMAGEWIDTH: ImageInfo->ExifImageWidth = (int)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel); break; case TAG_FOCALPLANEXRES: ImageInfo->FocalplaneXRes = exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel); break; case TAG_SUBJECT_DISTANCE: /* Inidcates the distacne the autofocus camera is focused to. Tends to be less accurate as distance increases. */ ImageInfo->Distance = (float)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel); break; case TAG_FOCALPLANEUNITS: switch((int)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel)) { case 1: ImageInfo->FocalplaneUnits = 25.4; break; /* inch */ case 2: /* According to the information I was using, 2 measn meters. But looking at the Cannon powershot's files, inches is the only sensible value. */ ImageInfo->FocalplaneUnits = 25.4; break; case 3: ImageInfo->FocalplaneUnits = 10; break; /* centimeter */ case 4: ImageInfo->FocalplaneUnits = 1; break; /* milimeter */ case 5: ImageInfo->FocalplaneUnits = .001; break; /* micrometer */ } break; case TAG_EXIF_IFD_POINTER: case TAG_GPS_IFD_POINTER: case TAG_INTEROP_IFD_POINTER: if ( ReadNextIFD) { char *SubdirStart; int sub_section_index; switch(tag) { case TAG_EXIF_IFD_POINTER: #ifdef EXIF_DEBUG php_error(E_NOTICE,"found EXIF"); #endif ImageInfo->sections_found |= FOUND_EXIF; sub_section_index = SECTION_EXIF; break; case TAG_GPS_IFD_POINTER: #ifdef EXIF_DEBUG php_error(E_NOTICE,"found GPS"); #endif ImageInfo->sections_found |= FOUND_GPS; sub_section_index = SECTION_GPS; break; case TAG_INTEROP_IFD_POINTER: #ifdef EXIF_DEBUG php_error(E_NOTICE,"found INTEROPERABILITY"); #endif ImageInfo->sections_found |= FOUND_INTEROP; sub_section_index = SECTION_INTEROP; break; } SubdirStart = offset_base + php_ifd_get32u(value_ptr, ImageInfo->motorola_intel); if (SubdirStart < offset_base || SubdirStart > offset_base+IFDlength) { php_error(E_WARNING, "Illegal IFD Pointer"); break; } exif_process_IFD_in_JPEG(ImageInfo, SubdirStart, offset_base, IFDlength, sub_section_index); #ifdef EXIF_DEBUG php_error(E_NOTICE,"subsection %s done", exif_get_sectionname(sub_section_index)); #endif break; } break; } } /* correctly would be to set components as length * but we are ignoring length for those types where it is not the same as byte_count */ exif_add_image_info( ImageInfo, section_index, exif_get_tagname(tag,tagname), tag, format, byte_count, value_ptr); if ( outside) efree( outside); } /* }}} */ /* {{{ exif_process_IFD_in_JPEG * Process one of the nested IFDs directories. */ static void exif_process_IFD_in_JPEG(image_info_type *ImageInfo, char *DirStart, char *OffsetBase, unsigned IFDlength, int section_index) { int de; int NumDirEntries; int NextDirOffset; #ifdef EXIF_DEBUG php_error(E_NOTICE,"exif_process_IFD_in_JPEG(x%04X(=%d))", IFDlength, IFDlength); #endif ImageInfo->sections_found |= FOUND_IFD0; NumDirEntries = php_ifd_get16u(DirStart, ImageInfo->motorola_intel); if ((DirStart+2+NumDirEntries*12) > (OffsetBase+IFDlength)) { php_error(E_WARNING, "Illegally sized directory x%04X + 2 + x%04X*12 = x%04X > x%04X", (int)DirStart+2-(int)OffsetBase, NumDirEntries, (int)DirStart+2+NumDirEntries*12-(int)OffsetBase, IFDlength); return; } for (de=0;demotorola_intel); if (NextDirOffset) { /* the next line seems false but here IFDlength means length of all IFDs */ if (OffsetBase + NextDirOffset < OffsetBase || OffsetBase + NextDirOffset > OffsetBase+IFDlength) { php_error(E_WARNING, "Illegal directory offset"); return; } /* That is the IFD for the first thumbnail */ #ifdef EXIF_DEBUG php_error(E_NOTICE,"expect next IFD to be thumbnail"); #endif exif_process_IFD_in_JPEG(ImageInfo, OffsetBase + NextDirOffset, OffsetBase, IFDlength, SECTION_THUMBNAIL); } } /* }}} */ /* {{{ exif_process_TIFF_in_JPEG Process a TIFF header in a JPEG file */ static void exif_process_TIFF_in_JPEG(image_info_type *ImageInfo, char *CharBuf, unsigned int length) { /* set the thumbnail stuff to nothing so we can test to see if they get set up */ if (memcmp(CharBuf, "II", 2) == 0) { ImageInfo->motorola_intel = 0; } else if (memcmp(CharBuf, "MM", 2) == 0) { ImageInfo->motorola_intel = 1; } else { php_error(E_WARNING, "Invalid TIFF alignment marker."); return; } /* Check the next two values for correctness. */ if (php_ifd_get16u(CharBuf+2, ImageInfo->motorola_intel) != 0x2a || php_ifd_get32u(CharBuf+4, ImageInfo->motorola_intel) != 0x08) { php_error(E_WARNING, "Invalid TIFF start (1)"); return; } /* First directory starts at offset 8. Offsets starts at 0. */ exif_process_IFD_in_JPEG(ImageInfo, CharBuf+8, CharBuf, length/*-14*/, SECTION_IFD0); #ifdef EXIF_DEBUG php_error(E_NOTICE,"exif_process_TIFF_in_JPEG, done"); #endif /* Compute the CCD width, in milimeters. */ if (ImageInfo->FocalplaneXRes != 0) { ImageInfo->CCDWidth = (float)(ImageInfo->ExifImageWidth * ImageInfo->FocalplaneUnits / ImageInfo->FocalplaneXRes); } } /* }}} */ /* {{{ exif_process_APP1 Process an JPEG APP1 block marker Describes all the drivel that most digital cameras include... */ static void exif_process_APP1(image_info_type *ImageInfo, char *CharBuf, unsigned int length) { /* Check the APP1 for Exif Identifier Code */ static const uchar ExifHeader[] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00}; if (memcmp(CharBuf+2, ExifHeader, 6)) { php_error(E_WARNING, "Incorrect APP1 Exif Identifier Code"); return; } exif_process_TIFF_in_JPEG(ImageInfo,CharBuf+8,length-8); #ifdef EXIF_DEBUG php_error(E_NOTICE,"process Exif done"); #endif } /* }}} */ /* {{{ exif_process_APP12 Process an JPEG APP12 block marker used by OLYMPUS */ static void exif_process_APP12(image_info_type *ImageInfo, char *buffer, unsigned int length) { int l1, l2=0; if ( (l1 = php_strnlen(buffer+2,length-2)) > 0) { exif_add_image_info( ImageInfo, SECTION_APP12, "Company", TAG_NONE, TAG_FMT_STRING, l1, buffer+2); if ( length > 2+(unsigned int)l1+1) { l2 = php_strnlen(buffer+2+l1+1,length-2-l1+1); exif_add_image_info( ImageInfo, SECTION_APP12, "Info", TAG_NONE, TAG_FMT_STRING, l2, buffer+2+l1+1); } } #ifdef EXIF_DEBUG php_error(E_NOTICE,"process section APP12 with l1=%d, l2=%d done", l1, l2); #endif } /* }}} */ /* {{{ exif_scan_JPEG_header * Parse the marker stream until SOS or EOI is seen; */ static int exif_scan_JPEG_header(image_info_type *ImageInfo, FILE *infile) { int a; for(ImageInfo->sections_count=0;ImageInfo->sections_count < 19;) { int itemlen; int marker = 0; int ll, lh, got; uchar *Data; #ifdef EXIF_DEBUG size_t fpos; #endif #ifdef EXIF_DEBUG fpos = ftell(infile); php_error(E_NOTICE,"search section %d at 0x%04X", ImageInfo->sections_count, fpos); #endif for (a=0;a<7;a++) { marker = fgetc(infile); if (marker != 0xff) break; } #ifdef EXIF_DEBUG fpos = ftell(infile); #endif if (marker == 0xff) { /* 0xff is legal padding, but if we get that many, something's wrong. */ php_error(E_WARNING, "too many padding bytes!"); return FALSE; } ImageInfo->sections[ImageInfo->sections_count].Type = marker; /* Read the length of the section. */ lh = fgetc(infile); ll = fgetc(infile); itemlen = (lh << 8) | ll; if (itemlen < 2) { php_error(E_WARNING, "invalid marker"); return FALSE; } ImageInfo->sections[ImageInfo->sections_count].Size = itemlen; Data = (uchar *)emalloc(itemlen+1); /* Add 1 to allow sticking a 0 at the end. */ ImageInfo->sections[ImageInfo->sections_count++].Data = Data; /* Store first two pre-read bytes. */ Data[0] = (uchar)lh; Data[1] = (uchar)ll; got = fread(Data+2, 1, itemlen-2, infile); /* Read the whole section. */ if (got != itemlen-2) { php_error(E_WARNING, "error reading from file: got=x%04X(=%d) != itemlen-2=x%04X(=%d)",got, got, itemlen-2, itemlen-2); return FALSE; } #ifdef EXIF_DEBUG php_error(E_NOTICE,"process section(x%02X=%s) @ x%04X + x%04X(=%d)", marker, exif_get_markername(marker), fpos, itemlen, itemlen); #endif switch(marker) { case M_SOS: /* stop before hitting compressed data */ /* If reading entire image is requested, read the rest of the data. */ if (ImageInfo->read_all) { int cp, ep, size; /* Determine how much file is left. */ cp = ftell(infile); fseek(infile, 0, SEEK_END); ep = ftell(infile); fseek(infile, cp, SEEK_SET); size = ep-cp; Data = (uchar *)emalloc(size); if (Data == NULL) { php_error(E_WARNING, "could not allocate data for entire image"); return FALSE; } got = fread(Data, 1, size, infile); if (got != size) { php_error(E_WARNING, "could not read the rest of the image"); return FALSE; } ImageInfo->sections[ImageInfo->sections_count].Data = Data; ImageInfo->sections[ImageInfo->sections_count].Size = size; ImageInfo->sections[ImageInfo->sections_count].Type = PSEUDO_IMAGE_MARKER; (ImageInfo->sections_count)++; /* *HaveAll = 1; */ /* efree(Data); Done in php_exif_discard_sections */ } return TRUE; case M_EOI: /* in case it's a tables-only JPEG stream */ php_error(E_WARNING, "No image in jpeg!"); return (ImageInfo->sections_found&(~FOUND_COMPUTED)) ? TRUE : FALSE; case M_COM: /* Comment section */ exif_process_COM(ImageInfo, (char *)Data, itemlen); break; case M_EXIF: if ( !(ImageInfo->sections_found&FOUND_EXIF)) { ImageInfo->sections_found |= FOUND_EXIF; /* Seen files from some 'U-lead' software with Vivitar scanner that uses marker 31 later in the file (no clue what for!) */ exif_process_APP1(ImageInfo, (char *)Data, itemlen); } break; case M_FPIX: /*ImageInfo->sections_found |= FOUND_FPIX;*/ #ifdef EXIF_DEBUG php_error(E_NOTICE,"Found Flash Pix Extension Data"); #endif /*exif_process_TIFF_in_JPEG(ImageInfo,(char *)Data,itemlen);*/ break; case M_APP12: exif_process_APP12(ImageInfo,(char *)Data,itemlen); break; case M_SOF0: case M_SOF1: case M_SOF2: case M_SOF3: case M_SOF5: case M_SOF6: case M_SOF7: case M_SOF9: case M_SOF10: case M_SOF11: case M_SOF13: case M_SOF14: case M_SOF15: exif_process_SOFn(ImageInfo, Data, marker); break; default: /* skip any other marker silently. */ break; } } #ifdef EXIF_DEBUG php_error(E_NOTICE,"exif_scan_JPEG_header, done"); #endif return TRUE; } /* }}} */ /* {{{ exif_process_IFD_in_TIFF * Parse the TIFF header; */ static int exif_process_IFD_in_TIFF(image_info_type *ImageInfo, FILE *infile, size_t dir_offset, int section_index) { int i, sn, num_entries, sub_section_index; unsigned char *dir_entry; size_t ifd_size, dir_size, entry_offset, next_offset, entry_length, entry_value; int entry_tag , entry_type; #ifdef EXIF_DEBUG char tagname[64]; #endif sn = ImageInfo->sections_count++; if ( ImageInfo->FileSize >= dir_offset+2) { ImageInfo->sections[sn].Size = 2; ImageInfo->sections[sn].Data = emalloc(ImageInfo->sections[sn].Size); fseek(infile,dir_offset,SEEK_SET); /* we do not know the order of sections */ fread(ImageInfo->sections[sn].Data, 1, 2, infile); num_entries = php_ifd_get16u(ImageInfo->sections[sn].Data, ImageInfo->motorola_intel); dir_size = 2/*num dir entries*/ +12/*length of entry*/*num_entries +4/* offset to next ifd (points to thumbnail or NULL)*/; #ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X), IFD entries(%d)", ImageInfo->FileSize, dir_offset, dir_size, num_entries); #endif if ( ImageInfo->FileSize >= dir_offset+dir_size) { ImageInfo->sections[sn].Size = dir_size; ImageInfo->sections[sn].Data = erealloc(ImageInfo->sections[sn].Data,ImageInfo->sections[sn].Size); fread(ImageInfo->sections[sn].Data+2, 1, dir_size-2, infile); next_offset = php_ifd_get32u(ImageInfo->sections[sn].Data + dir_size - 4, ImageInfo->motorola_intel); #ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF done, next offset x%04X", next_offset); #endif /* now we have the directory we can look how long it should be */ ifd_size = dir_size; for(i=0;isections[sn].Data+2+i*12; entry_tag = php_ifd_get16u(dir_entry+0, ImageInfo->motorola_intel); entry_type = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel); if ( entry_type > NUM_FORMATS) { php_error(E_WARNING,"Error in TIFF: Illegal format, suppose bytes"); entry_type = TAG_FMT_BYTE; } entry_length = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel) * php_tiff_bytes_per_format[entry_type]; entry_length = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel) * php_tiff_bytes_per_format[entry_type]; if ( entry_length > 4) { entry_offset = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel); if ( entry_offset + entry_length > ifd_size) ifd_size = entry_offset + entry_length; } else { switch(entry_type) { case TAG_FMT_USHORT: entry_value = php_ifd_get16u(dir_entry+8, ImageInfo->motorola_intel); break; case TAG_FMT_SSHORT: entry_value = php_ifd_get16s(dir_entry+8, ImageInfo->motorola_intel); break; case TAG_FMT_ULONG: entry_value = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel); break; case TAG_FMT_SLONG: entry_value = php_ifd_get32s(dir_entry+8, ImageInfo->motorola_intel); break; default: continue; } switch(entry_tag) { case TAG_IMAGEWIDTH: case TAG_COMP_IMAGEWIDTH: ImageInfo->Width = entry_value; break; case TAG_IMAGEHEIGHT: case TAG_COMP_IMAGEHEIGHT: ImageInfo->Height = entry_value; break; case TAG_PHOTOMETRIC_INTERPRETATION: switch (entry_value) { case PMI_BLACK_IS_ZERO: case PMI_WHITE_IS_ZERO: case PMI_TRANSPARENCY_MASK: ImageInfo->IsColor = 0; break; case PMI_RGB: case PMI_PALETTE_COLOR: case PMI_SEPARATED: case PMI_YCBCR: case PMI_CIELAB: ImageInfo->IsColor = 1; break; } break; } } } ImageInfo->sections[sn].Size = ifd_size; ImageInfo->sections[sn].Data = erealloc(ImageInfo->sections[sn].Data,ImageInfo->sections[sn].Size); if ( ImageInfo->FileSize >= ImageInfo->sections[sn].Size) { if ( ifd_size > dir_size) { /* read values not stored in directory itself */ if ( ImageInfo->sections[sn].Size > ImageInfo->FileSize) { php_error(E_ERROR,"Error in TIFF: filesize(x%04X) less than size of IFD(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, ifd_size); return FALSE; } #ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF: filesize(x%04X), IFD(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, ifd_size); #endif fread(ImageInfo->sections[sn].Data+dir_size, 1, ifd_size-dir_size, infile); #ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF, done"); #endif } /* now process the tags */ for(i=0;isections[sn].Data+2+i*12; entry_tag = php_ifd_get16u(dir_entry+0, ImageInfo->motorola_intel); /*entry_type = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel);*/ /*entry_length = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel);*/ if (entry_tag == TAG_EXIF_IFD_POINTER || entry_tag == TAG_INTEROP_IFD_POINTER || entry_tag == TAG_GPS_IFD_POINTER ) { switch(entry_tag) { case TAG_EXIF_IFD_POINTER: ImageInfo->sections_found |= FOUND_EXIF; sub_section_index = SECTION_EXIF; break; case TAG_GPS_IFD_POINTER: ImageInfo->sections_found |= FOUND_GPS; sub_section_index = SECTION_GPS; break; case TAG_INTEROP_IFD_POINTER: ImageInfo->sections_found |= FOUND_INTEROP; sub_section_index = SECTION_INTEROP; break; } entry_offset = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel); #ifdef EXIF_DEBUG php_error(E_NOTICE,"Found other IFD: %s at x%04X", exif_get_tagname(entry_tag,tagname), entry_offset); #endif exif_process_IFD_in_TIFF(ImageInfo,infile,entry_offset,sub_section_index); #ifdef EXIF_DEBUG php_error(E_NOTICE,"TIFF subsection %s done", exif_get_sectionname(sub_section_index)); #endif } else { exif_process_IFD_TAG(ImageInfo,(char*)dir_entry,(char*)(ImageInfo->sections[sn].Data-dir_offset),ifd_size,section_index,0); } } if (next_offset && section_index != SECTION_THUMBNAIL) { /* this should be a thumbnail IFD */ /* the thumbnail itself is stored at Tag=StripOffsets */ #ifdef EXIF_DEBUG php_error(E_NOTICE,"Read next IFD (THUMBNAIL) at x%04X", next_offset); #endif exif_process_IFD_in_TIFF(ImageInfo,infile,next_offset,SECTION_THUMBNAIL); #ifdef EXIF_DEBUG php_error(E_NOTICE,"Read THUMBNAIL @0x%04X + 0x%04X", ImageInfo->ThumbnailOffset, ImageInfo->ThumbnailSize); #endif if (ImageInfo->ThumbnailOffset && ImageInfo->ThumbnailSize) { ImageInfo->Thumbnail = emalloc(ImageInfo->ThumbnailSize); if (!ImageInfo->Thumbnail) { php_error(E_WARNING, "Could not allocate memory for thumbnail"); } else { fseek(infile,ImageInfo->ThumbnailOffset,SEEK_SET); fread(ImageInfo->Thumbnail, 1, ImageInfo->ThumbnailSize, infile); } } #ifdef EXIF_DEBUG php_error(E_NOTICE,"Read next IFD (THUMBNAIL) done"); #endif } return TRUE; } else { php_error(E_ERROR,"Error in TIFF: filesize(x%04X) less than size of IFD(x%04X)", ImageInfo->sections[sn].Size); return FALSE; } } else { php_error(E_ERROR,"Error in TIFF: filesize(x%04X) less than size of IFD dir(x%04X)", ImageInfo->FileSize, dir_size); return FALSE; } } else { php_error(E_ERROR,"Error in TIFF: filesize(x%04X) less than size of IFD dir(x%04X)", ImageInfo->FileSize, dir_offset+2); return FALSE; } } /* }}} */ /* {{{ exif_scan_FILE_header * Parse the marker stream until SOS or EOI is seen; */ static int exif_scan_FILE_header (image_info_type *ImageInfo, FILE *infile) { unsigned char file_header[8]; ImageInfo->FileType = IMAGE_FILETYPE_UNKNOWN; if ( ImageInfo->FileSize >= 2) { fseek(infile, 0, SEEK_SET); fread(file_header, 1, 2, infile); if ( (file_header[0]==0xff) && (file_header[1]==M_SOI)) { ImageInfo->FileType = IMAGE_FILETYPE_JPEG; return exif_scan_JPEG_header(ImageInfo,infile); } else if ( ImageInfo->FileSize >= 8) { fread(file_header+2, 1, 6, infile); if ( !memcmp(file_header,"II\x2A\x00", 4)) { ImageInfo->FileType = IMAGE_FILETYPE_TIFF_II; ImageInfo->motorola_intel = 0; #ifdef EXIF_DEBUG php_error(E_NOTICE,"File(%s) has TIFF/II format", ImageInfo->FileName); #endif ImageInfo->sections_found |= FOUND_IFD0; return exif_process_IFD_in_TIFF(ImageInfo,infile,php_ifd_get32u(file_header+4,ImageInfo->motorola_intel),SECTION_IFD0); } else if ( !memcmp(file_header,"MM\x00\x2a", 4)) { ImageInfo->FileType = IMAGE_FILETYPE_TIFF_MM; ImageInfo->motorola_intel = 1; #ifdef EXIF_DEBUG php_error(E_NOTICE,"File(%s) has TIFF/MM format", ImageInfo->FileName); #endif ImageInfo->sections_found |= FOUND_IFD0; return exif_process_IFD_in_TIFF(ImageInfo,infile,php_ifd_get32u(file_header+4,ImageInfo->motorola_intel),SECTION_IFD0); } } } php_error(E_WARNING,"File(%s) to small or filetype not supported", ImageInfo->FileName); return FALSE; } /* }}} */ /* {{{ php_exif_discard_sections Discard data read by php_exif_read_file. */ int php_exif_discard_sections(image_info_type *ImageInfo) { int a; if ( ImageInfo->sections_count) { for (a=0;asections_count;a++) { efree(ImageInfo->sections[a].Data); } } ImageInfo->sections_count = 0; return TRUE; } /* }}} */ /* {{{ php_exif_discard_imageinfo Discard data scanned by php_exif_read_file. */ int php_exif_discard_imageinfo(image_info_type *ImageInfo) { int i; if (ImageInfo->FileName) efree(ImageInfo->FileName); if (ImageInfo->Thumbnail) efree(ImageInfo->Thumbnail); if (ImageInfo->UserComment) efree(ImageInfo->UserComment); for (i=0; imotorola_intel = 0; infile = VCWD_FOPEN(FileName, "rb"); /* Unix ignores 'b', windows needs it. */ if (infile == NULL) { php_error(E_WARNING, "Unable to open '%s'", FileName); return FALSE; } /* php_error(E_WARNING,"EXIF: Process %s%s: %s", read_thumbnail?"thumbs ":"", read_all?"All ":"", FileName); */ /* Start with an empty image information structure. */ memset(ImageInfo, 0, sizeof(*ImageInfo)); ImageInfo->FileName = php_basename(FileName, strlen(FileName), NULL, 0); ImageInfo->read_thumbnail = read_thumbnail; ImageInfo->read_all = read_all; { /* Store file date/time. */ struct stat st; if (VCWD_STAT(FileName, &st) >= 0) { ImageInfo->FileDateTime = st.st_mtime; ImageInfo->FileSize = st.st_size; } else { php_error(E_WARNING, "Can't get file statitics"); return FALSE; } } /* Scan the JPEG headers. */ ImageInfo->infile = infile; ret = exif_scan_FILE_header(ImageInfo, infile); if (!ret) { php_error(E_WARNING, "Invalid JPEG/TIFF file: '%s'", FileName); } fclose(infile); return ret; } /* }}} */ /* {{{ proto array|false read_exif_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]]) Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails */ PHP_FUNCTION(exif_read_data) { pval **p_name, **p_sections_needed, **p_sub_arrays, **p_read_thumbnail, **p_read_all; int i, len, ac = ZEND_NUM_ARGS(), ret, sections_needed=0, sub_arrays=0, read_thumbnail=0, read_all=0; image_info_type ImageInfo; char tmp[64], *sections_str, *s; memset(&ImageInfo, 0, sizeof(ImageInfo)); if ((ac < 1 || ac > 4) || zend_get_parameters_ex(ac, &p_name, &p_sections_needed, &p_sub_arrays, &p_read_thumbnail, &p_read_all) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(p_name); if(ac >= 2) { convert_to_string_ex(p_sections_needed); sections_str = emalloc(strlen(Z_STRVAL_PP(p_sections_needed))+3); sprintf(sections_str,",%s,",Z_STRVAL_PP(p_sections_needed)); /* sections_str DOES start with , and SPACES are NOT allowed in names */ s = sections_str; while(*++s) { if(*s==' ') *s = ','; } for (i=0; i= 3) { convert_to_long_ex(p_sub_arrays); sub_arrays = Z_LVAL_PP(p_sub_arrays); } if(ac >= 4) { convert_to_long_ex(p_read_thumbnail); read_thumbnail = Z_LVAL_PP(p_read_thumbnail); } if(ac >= 5) { convert_to_long_ex(p_read_all); read_all = Z_LVAL_PP(p_read_all); } /* parameters 3,4 will be working in later versions.... */ read_all = 0; /* just to make function work for 4.2 tree */ ret = php_exif_read_file(&ImageInfo, Z_STRVAL_PP(p_name), read_thumbnail, read_all TSRMLS_CC); sections_str = exif_get_sectionlist(ImageInfo.sections_found); #ifdef EXIF_DEBUG php_error(E_NOTICE,"Sections found: %s", sections_str[0] ? sections_str : "None"); #endif ImageInfo.sections_found |= FOUND_COMPUTED;/* do not inform about in debug*/ if (ret==FALSE || (sections_needed && !(sections_needed&ImageInfo.sections_found)) || array_init(return_value) == FAILURE) { /* array_init must be checked at last! otherwise the array must be freed if a later test fails. */ php_exif_discard_imageinfo(&ImageInfo); if ( sections_str) efree( sections_str); RETURN_FALSE; } #ifdef EXIF_DEBUG php_error(E_NOTICE,"Returning information"); #endif /*************************************************************************************************/ /* generic created information must use motorola/intel organisation from the executing processor */ i = 1; ImageInfo.motorola_intel = (*(char*)&i) ? 0 : 1; /* no more external processing from here */ /*************************************************************************************************/ /* now we can add our information */ exif_add_image_info( &ImageInfo, SECTION_FILE, "FileName", TAG_NONE, TAG_FMT_STRING, strlen(ImageInfo.FileName), ImageInfo.FileName); exif_iif_add_int( &ImageInfo, SECTION_FILE, "FileDateTime", ImageInfo.FileDateTime); exif_iif_add_int( &ImageInfo, SECTION_FILE, "FileSize", ImageInfo.FileSize); exif_add_image_info( &ImageInfo, SECTION_FILE, "SectionsFound", TAG_NONE, TAG_FMT_STRING, strlen(sections_str), sections_str); if (ImageInfo.Width>0 && ImageInfo.Height>0) { sprintf(tmp, "width=\"%d\" height=\"%d\"", ImageInfo.Width, ImageInfo.Height); exif_add_image_info( &ImageInfo, SECTION_COMPUTED, "html", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "Height", ImageInfo.Height); exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "Width", ImageInfo.Width); } exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "IsColor", ImageInfo.IsColor); if (ImageInfo.FocalLength) { sprintf(tmp, "%4.1fmm", ImageInfo.FocalLength); exif_add_image_info( &ImageInfo, SECTION_COMPUTED, "FocalLength", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); if(ImageInfo.CCDWidth) { sprintf(tmp, "%dmm", (int)(ImageInfo.FocalLength/ImageInfo.CCDWidth*35+0.5)); exif_add_image_info( &ImageInfo, SECTION_COMPUTED, "35mmFocalLength", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); } } if(ImageInfo.CCDWidth) { sprintf(tmp, "%dmm", (int)ImageInfo.CCDWidth); exif_add_image_info( &ImageInfo, SECTION_COMPUTED, "CCDWidth", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); } if(ImageInfo.ExposureTime>0) { if(ImageInfo.ExposureTime <= 0.5) { sprintf(tmp, "%0.3f s (1/%d)", ImageInfo.ExposureTime, (int)(0.5 + 1/ImageInfo.ExposureTime)); } else { sprintf(tmp, "%0.3f s", ImageInfo.ExposureTime); } exif_add_image_info( &ImageInfo, SECTION_COMPUTED, "ExposureTime", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); } if(ImageInfo.ApertureFNumber) { sprintf(tmp, "f/%.1f", ImageInfo.ApertureFNumber); exif_add_image_info( &ImageInfo, SECTION_COMPUTED, "ApertureFNumber", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); } if(ImageInfo.Distance) { if(ImageInfo.Distance<0) { sprintf(tmp,"%s","Infinite"); } else { sprintf(tmp, "%0.2fm", ImageInfo.Distance); } exif_add_image_info( &ImageInfo, SECTION_COMPUTED, "FocusDistance", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); } if (ImageInfo.UserComment) { /*exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "UserCommentLen", ImageInfo.UserCommentLen);*/ exif_add_image_info( &ImageInfo, SECTION_COMPUTED, "UserComment", TAG_NONE, TAG_FMT_UNDEFINED, ImageInfo.UserCommentLen, ImageInfo.UserComment); if ( (len=strlen(ImageInfo.UserCommentEncoding))) { exif_add_image_info( &ImageInfo, SECTION_COMPUTED, "UserCommentEncoding", TAG_NONE, TAG_FMT_STRING, len, ImageInfo.UserCommentEncoding); } } if ( read_thumbnail && ImageInfo.ThumbnailSize) { exif_add_image_info( &ImageInfo, SECTION_THUMBNAIL, "THUMBNAIL", TAG_NONE, TAG_FMT_UNDEFINED, ImageInfo.ThumbnailSize, ImageInfo.Thumbnail); } efree(sections_str); #ifdef EXIF_DEBUG php_error(E_NOTICE,"adding image infos"); #endif add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_FILE); add_assoc_image_info( return_value, 1, &ImageInfo, SECTION_COMPUTED); add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_ANY_TAG); add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_IFD0); add_assoc_image_info( return_value, 1, &ImageInfo, SECTION_THUMBNAIL); add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_COMMENT); add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_EXIF); add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_GPS); add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_INTEROP); add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_FPIX); add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_APP12); #ifdef EXIF_DEBUG php_error(E_NOTICE,"Discarding info"); #endif php_exif_discard_imageinfo(&ImageInfo); #ifdef EXIF_DEBUG php_error(E_NOTICE,"read_exif_data done"); #endif } /* }}} */ /* {{{ proto string|false read_exif_data(string filename) Reads the embedded thumbnail */ PHP_FUNCTION(exif_thumbnail) { pval **p_name; int ret, ac = ZEND_NUM_ARGS(); image_info_type ImageInfo; memset(&ImageInfo, 0, sizeof(ImageInfo)); if ( (ac != 1) || zend_get_parameters_ex(ac, &p_name) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(p_name); ret = php_exif_read_file(&ImageInfo, Z_STRVAL_PP(p_name), 1, 0 TSRMLS_CC); if (ret==FALSE) { php_exif_discard_imageinfo(&ImageInfo); RETURN_FALSE; } if ( !ImageInfo.Thumbnail || !ImageInfo.ThumbnailSize) { php_exif_discard_imageinfo(&ImageInfo); php_error(E_NOTICE,"No thumbnail data found"); RETURN_FALSE; } #ifdef EXIF_DEBUG php_error(E_NOTICE,"Returning thumbnail(%d)", ImageInfo.ThumbnailSize); #endif RETVAL_STRINGL(ImageInfo.Thumbnail, ImageInfo.ThumbnailSize, 1); #ifdef EXIF_DEBUG php_error(E_NOTICE,"Discarding info"); #endif php_exif_discard_imageinfo(&ImageInfo); #ifdef EXIF_DEBUG php_error(E_NOTICE,"exif_thumbnail done"); #endif } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 tw=78 fdm=marker * vim<600: sw=4 ts=4 tw=78 */ php-4.2.3/ext/exif/exif.dsp0100644000175200000240000001146007151257741014352 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="exif" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=exif - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "exif.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "exif.mak" CFG="exif - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "exif - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "exif - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "exif - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_EXIF" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXIF_EXPORTS" /D "COMPILE_DL_EXIF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_EXIF=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_exif.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" !ELSEIF "$(CFG)" == "exif - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_EXIF" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXIF_EXPORTS" /D "COMPILE_DL_EXIF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_EXIF=1 /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_exif.dll" /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "exif - Win32 Release_TS" # Name "exif - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\exif.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_exif.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project php-4.2.3/ext/exif/php_exif.h0100644000175200000240000000271207441360764014664 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Marcus Boerger | +----------------------------------------------------------------------+ */ /* $Id: php_exif.h,v 1.9 2025/03/06 09:31:32 helly Exp $ */ #if HAVE_EXIF extern zend_module_entry exif_module_entry; #define phpext_exif_ptr &exif_module_entry PHP_FUNCTION(exif_read_data); PHP_FUNCTION(exif_tagname); PHP_FUNCTION(exif_thumbnail); #endif php-4.2.3/ext/exif/test.php0100644000175200000240000000003507440611577014375 0ustar zeevstaffphp-4.2.3/ext/exif/test.txt0100644000175200000240000001720307441457076014435 0ustar zeevstaff\n"; echo "Thumbnail could not be extracted.\n"; echo "
"; } die(); } $possible = array(); /****************************************************************************/ // message function is used for debugging purpose: just to se what happens function message($msg) { error_log($msg,0); echo "$msg\n"; } function error_msg() { $ret = 'O.K.'; if (array_key_exists('php_errormsg',$GLOBALS) && strlen($GLOBALS['php_errormsg'])) { $ret = ''.$GLOBALS['php_errormsg'].''; $GLOBALS['php_errormsg'] = ''; } return $ret; } /****************************************************************************/ // private to function search_file() function _search_file($root,&$possible,$path='') { $sub = array(); //error_log("search_file($root,$path)",0); if ($dir = @opendir($root.$path.'/')) { while (($found = @readdir($dir)) !== false) { $type = @filetype($root.$path.'/'.$found); //error_log("search_file($root$path):$type=$found",0); switch( $type) { case 'file': $pos = strpos($found,'.'); if ( $pos !== false && ( strtolower(substr($found,$pos+1))=='jpg' || strtolower(substr($found,$pos+1))=='tif' ) ) { $possible[] = $root.$path.'/'.$found; //error_log("search_file($root$path) add:$path/$found",0); } break; case 'dir': if ( $found!='.' && $found!='..') { $sub[count($sub)] = $found; } break; } } @closedir($dir); foreach( $sub as $idx => $found) { _search_file($root,$possible,$path.'/'.$found); } } } /****************************************************************************/ // function: search_file($file,$ext) // // Searches for $file in document tree. The path is ignored. // function search_file() { global $argv; $possible = array(); if ( array_key_exists('SCRIPT_FILENAME',$_SERVER)) { $path = $_SERVER['SCRIPT_FILENAME']; //error_log("SCRIPT_FILENAME($path)",0); } else { $path = $argv[0]; //error_log("argv($path)",0); } if ( ($p=strpos($path,'?')) !== false) $path = substr($path,0,$p); if ( ($p=strrpos($path,'/')) < strlen($path)-1) $path = substr($path,0,$p); _search_file($path,$possible); return $possible; } /****************************************************************************/ // function: search_file($file,$ext) // // Searches for $file in document tree. The path is ignored. // function AddInfo($Name,$Value) { $Value = nl2br($Value); return "$Name$Value \n"; } $possible = search_file(); $title = "PHP module exif test page"; ?> <?=$title ?>

(c) Marcus Boerger, 2002

Images taken from www.exif.org, marcus-boerger.de all rights reserved by their authors and artists, see exif headers. The files can be downloaded here. To start the test you simple have to put all images into the same directory as this script. The test will work with all files in that directory and all subdirectories. To test private images just put them into that directory.

Youmay take a look at the test source here.

This test just prooves that some exif headers can be scanned. If all files produce a header in output the module might be o.k.

What to look for in detail:

  • kodak-dc4800-plus-acdsee.jpg
    • should provide a long comment 'by marcus börger<%04i>'*n
    • this file returns an array but it also produces an errormessage because ACDSee destroys the integrity of IFD directory (size of directory and offsets of entries following any edited entry maybe wrong).
  • hp-photosmart.jpg
    • should provide a two line copyright notice
  • olympus-d320l
    • should provide an APP12 infoset
  • unknown.jpg
    • should provide an empty comment, this is a comment section and not an IFD0, EXIF or GPS section
  • some images
    • have empty fields, that is the tag is present but no data is stored

function exif_tagname

\n"; } ?>
ImageWidth
JPEGProc
SceneType
false
function exif_tagname is not supported

function exif_read_data for images

$file) { $num++; $error = ''; $len = 4; $size = GetImageSize($file); $error = error_msg();// clear message if ( $size === false) { $getimagesize = 'GetImageSize returned false
'.$error; } else { $getimagesize = "[ $size[0], $size[1], $size[2], $size[3] ]"; } /**/ error_log("exif_read_data($file,'COMMENT,IFD0,EXIF,APP12', true);",0); $image = exif_read_data($file,'COMMENT,IFD0,EXIF,APP12',true); $error = error_msg();// clear message //error_log("exif_read_data($file)",0); $res = ''; if ( $image === false) { $error = 'exif_read_data returned false
'.$error; } else { // ah no!$error = error_msg(); // force o.k. foreach($image as $Name => $Value) { if ( $Name!='Thumbnail') { if ( is_array($Value)) { $len++; $res .= AddInfo($Name,'Array('.count($Value).')'); foreach( $Value as $idx => $Entry) { if ($idx=='Thumbnail') $Entry = '<data>'; $len++; $res .= AddInfo($Name.':'.$idx,$Entry); } } else { $len++; $res .= AddInfo($Name,$Value); } } } } echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo $res; } } else { echo "\n"; } ?>
$num
$file
GetImageSize$getimagesize
exif_read_data$error
function exif_read_data is not supported
php-4.2.3/ext/fbsql/0040755000175200000240000000000007535765574013102 5ustar zeevstaffphp-4.2.3/ext/fbsql/CREDITS0100644000175200000240000000002707253672636014107 0ustar zeevstaffFBSQL Frank M. Kromann php-4.2.3/ext/fbsql/Makefile.in0100644000175200000240000000037607253505007015126 0ustar zeevstaff LTLIBRARY_NAME = libfbsql.la LTLIBRARY_SOURCES = php_fbsql.c LTLIBRARY_LIBADD = $(FBSQL_LIBADD) LTLIBRARY_SHARED_NAME = fbsql.la LTLIBRARY_SHARED_LIBADD = $(FBSQL_SHARED_LIBADD) SUBDIRS = $(FBSQL_SUBDIRS) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/fbsql/Readme_w32.txt0100644000175200000240000000115607300044123015475 0ustar zeevstaffRules for building FBSQL ------------------------ The fbsql project contains 2 configurations. To build this extension you must first download and install FrontBase. The default instalation path would be c:\usr\FrontBase. If you install it in another location you need to change the include path in the project before compiling. Start Visual Studio, load php_modules.dsw, select the fbsql projects, configuration and build it. Finaly copy php_fbsql.dll to your extension directory and enable it by adding the following line tp php.ini extension=php_fbsql.dll or by calling dl() in each script dl("php_fbsql.dll");php-4.2.3/ext/fbsql/config.m40100644000175200000240000000242407401753425014570 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.7 2025/11/30 18:59:33 sniper Exp $ dnl PHP_ARG_WITH(fbsql, for FrontBase SQL92 (fbsql) support, [ --with-fbsql[=DIR] Include FrontBase support. DIR is the FrontBase base directory.]) if test "$PHP_FBSQL" != "no"; then AC_DEFINE(HAVE_FBSQL, 1, [Whether you have FrontBase]) PHP_EXTENSION(fbsql,$ext_shared) FBSQL_INSTALLATION_DIR="" if test "$PHP_FBSQL" = "yes"; then for i in /Local/Library /usr /usr/local /opt /Library; do if test -f $i/FrontBase/include/FBCAccess/FBCAccess.h; then FBSQL_INSTALLATION_DIR=$i/FrontBase break fi done if test -z "$FBSQL_INSTALLATION_DIR"; then AC_MSG_ERROR(Cannot find FrontBase in well know installation directories) fi elif test "$PHP_FBSQL" != "no"; then if test -f $PHP_FBSQL/include/FBCAccess/FBCAccess.h; then FBSQL_INSTALLATION_DIR=$PHP_FBSQL else AC_MSG_ERROR(Directory $PHP_FBSQL is not a FrontBase installation directory) fi fi if test -z "$FBSQL_INSTALLATION_DIR/lib/libFBCAccess.a"; then AC_MSG_ERROR(Could not find $FBSQL_INSTALLATION_DIR/lib/libFBCAccess.a) fi PHP_ADD_LIBRARY_WITH_PATH(FBCAccess, $FBSQL_INSTALLATION_DIR/lib, $FBSQL_INSTALLATION_DIR/lib) PHP_ADD_INCLUDE($FBSQL_INSTALLATION_DIR/include) fi php-4.2.3/ext/fbsql/fbsql.dsp0100644000175200000240000002045307407677601014711 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="fbsql" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=fbsql - Win32 Debug_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "fbsql.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "fbsql.mak" CFG="fbsql - Win32 Debug_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "fbsql - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "fbsql - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "fbsql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "fbsql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "fbsql - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "NDEBUG" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x40d /d "NDEBUG" # ADD RSC /l 0x40d /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4nts.lib /nologo /dll /machine:I386 /out:"Release/php_fbsql.dll" /libpath:"..\..\Release" !ELSEIF "$(CFG)" == "fbsql - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /FR /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x40d /d "_DEBUG" # ADD RSC /l 0x40d /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4nts_debug.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_fbsql.dll" /pdbtype:sept /libpath:"..\..\Debug" !ELSEIF "$(CFG)" == "fbsql - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /FR /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /FR /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x40d /d "_DEBUG" # ADD RSC /l 0x40d /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php4ts_debug.lib FBCAccess.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"LIBC" /out:"..\..\Debug_TS/php_fbsql.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"\usr\FrontBase\lib" !ELSEIF "$(CFG)" == "fbsql - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "NDEBUG" /D ZTS=1 /D ZEND_DEBUG=0 /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x40d /d "NDEBUG" # ADD RSC /l 0x40d /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib FBCAccess.lib wsock32.lib /nologo /dll /machine:I386 /nodefaultlib:"LIBC" /out:"..\..\Release_TS/php_fbsql.dll" /libpath:"..\..\Release_TS" /libpath:"\usr\FrontBase\lib" /libpath:"..\..\Release_TS_inline" !ENDIF # Begin Target # Name "fbsql - Win32 Release" # Name "fbsql - Win32 Debug" # Name "fbsql - Win32 Debug_TS" # Name "fbsql - Win32 Release_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\php_fbsql.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_fbsql.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # Begin Source File SOURCE=.\Readme_w32.txt # End Source File # End Target # End Project php-4.2.3/ext/fbsql/php_fbsql.c0100644000175200000240000027227307535302142015210 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http:/*www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Frank M. Kromann | +----------------------------------------------------------------------+ */ /* $Id: php_fbsql.c,v 1.76.2.1 2025/09/04 03:56:18 kalowsky Exp $ */ /* TODO: * * ? Safe mode implementation */ /* SB's list: - API for a more natural FB connect semantic - Connect & set session - Autoreconnect when disconnected - Comments and cleanup BUGS - Select db with no arguments - Query with everything defaulted */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_globals.h" #include "ext/standard/info.h" #include "ext/standard/php_string.h" #if WIN32|WINNT #include #else #include #include #if HAVE_SYS_TYPES_H #include #endif #include #include #endif #include "php_ini.h" #define HAVE_FBSQL 1 #if HAVE_FBSQL #include "php_fbsql.h" #include static int le_result, le_link, le_plink; struct PHPFBResult; typedef struct PHPFBResult PHPFBResult; struct PHPFBLink; typedef struct PHPFBLink PHPFBLink; /* The PHPFBLink structure represents a fbsql link. The lion is used for a connection to a machine, it may be persistent and is reference counted. The reason for refcounting is mostly to avoid to think, it work independent of any wierd and unforseen allocation deallocation order. The PHPFBDatabse structure implements to actual connection to a FrontBase server ot may be persistent is the link it is connected to is persistent, and refcounted for the same reasons as above. The PHPFBResult structure implements a result from the FrontBase server, and does all required buffereing from of results. In the PHP code the 3 above a data structures are referenced by means of integers in the range from 1 to som configurable maximum. You can put a limit to the number of links, databases and results. The integer identifications is implemented by insertion in the list, which is passed as an argument to all the functions, please note the list is polymorph. Database objects and link objects are all reused, base on the host name user name, host name database name user name. So connecting twice to the same database as the same user will return the same database id. We use the same coding for that as fbsql does, explioiting the underlying implementation of the lists. Persistent objects are put in the persistent list as well, but only by name, if you connect to a persistent object and it is not in the list it is simply added and get a new index, and refcounted. Tricky, tricky ... */ /* Some functions which should be exported from FBCAccess */ void* fbaObjectAtIndex(); void fbaRelease(); unsigned int fbaCount(); struct FBCAutoStartInfo { FBArray* infoLines; }; struct PHPFBResult { PHPFBLink* link; /* The link for the result, may be NULL if no link */ char* fetchHandle; /* The fetch handle, the id used by the server. */ FBCMetaData* metaData; /* The metadata describing the result */ FBCMetaData* ResultmetaData; /* The metadata describing the result */ FBCRowHandler* rowHandler; /* The row handler, the Frontbase structure used for accessing rows in the result */ unsigned int batchSize; /* The number of row to fetch when expanding the number of rows in the row handler */ unsigned int rowCount; /* The number of rows in the results set. The number of row is not in */ /* general known when the select is done, one typically needs to fetch all the row to figure out how many row you got. When the rowCount is unknown the value is 0x7ffffffff */ int columnCount; /* Number of columns in the row set. */ unsigned int rowIndex; /* The current row index. */ int columnIndex; /* The current column index */ void** row; /* The last row accessed */ FBArray* array; /* The link may return a result set, the database list, we implement that by the */ /* FBArray, just a list of strings. */ FBCPList* list; /* The same special kind result just for property list from extract, schema info. */ unsigned int selectResults; /* number of results in select */ unsigned int currentResult; /* current result number */ int lobMode; /* 0=Fetch data (default); 1=Fetch handle */ }; struct PHPFBLink { int persistent; /* persistent ? */ char* hostName; /* Host name */ char* userName; /* User name */ char* userPassword; /* User password */ char* databasePassword; /* Database password */ char* databaseName; /* The name of the database */ FBCExecHandler* execHandler; /* The exechandler, can be used for database operations */ FBCDatabaseConnection* connection; /* The connection to the database */ unsigned int affectedRows; /* Number of rows affected by the last SQL statement */ long autoCommit; /* Enable or disable autoCommit */ unsigned int errorNo; /* The latest error on the connection, 0 is ok. */ char* errorText; /* The error text */ unsigned int insert_id; /* The row index of the latest row inserted into the database */ }; #define FBSQL_ASSOC 1<<0 #define FBSQL_NUM 1<<1 #define FBSQL_BOTH (FBSQL_ASSOC|FBSQL_NUM) #define FBSQL_LOCK_DEFERRED 0 #define FBSQL_LOCK_OPTIMISTIC 1 #define FBSQL_LOCK_PESSIMISTIC 2 /* default */ #define FBSQL_ISO_READ_UNCOMMITTED 0 #define FBSQL_ISO_READ_COMMITTED 1 #define FBSQL_ISO_REPEATABLE_READ 2 #define FBSQL_ISO_SERIALIZABLE 3 /* default */ #define FBSQL_ISO_VERSIONED 4 #define FBSQL_LOB_DIRECT 0 /* default */ #define FBSQL_LOB_HANDLE 1 /* default */ /* {{{ fbsql_functions[] */ function_entry fbsql_functions[] = { PHP_FE(fbsql_connect, NULL) PHP_FE(fbsql_pconnect, NULL) PHP_FE(fbsql_close, NULL) PHP_FE(fbsql_select_db, NULL) PHP_FE(fbsql_create_db, NULL) PHP_FE(fbsql_drop_db, NULL) PHP_FE(fbsql_start_db, NULL) PHP_FE(fbsql_stop_db, NULL) PHP_FE(fbsql_db_status, NULL) PHP_FE(fbsql_query, NULL) PHP_FE(fbsql_db_query, NULL) PHP_FE(fbsql_list_dbs, NULL) PHP_FE(fbsql_list_tables, NULL) PHP_FE(fbsql_list_fields, NULL) PHP_FE(fbsql_error, NULL) PHP_FE(fbsql_errno, NULL) PHP_FE(fbsql_affected_rows, NULL) PHP_FE(fbsql_insert_id, NULL) PHP_FE(fbsql_result, NULL) PHP_FE(fbsql_next_result, NULL) PHP_FE(fbsql_num_rows, NULL) PHP_FE(fbsql_num_fields, NULL) PHP_FE(fbsql_fetch_row, NULL) PHP_FE(fbsql_fetch_array, NULL) PHP_FE(fbsql_fetch_assoc, NULL) PHP_FE(fbsql_fetch_object, NULL) PHP_FE(fbsql_data_seek, NULL) PHP_FE(fbsql_fetch_lengths, NULL) PHP_FE(fbsql_fetch_field, NULL) PHP_FE(fbsql_field_seek, NULL) PHP_FE(fbsql_free_result, NULL) PHP_FE(fbsql_field_name, NULL) PHP_FE(fbsql_field_table, NULL) PHP_FE(fbsql_field_len, NULL) PHP_FE(fbsql_field_type, NULL) PHP_FE(fbsql_field_flags, NULL) PHP_FE(fbsql_table_name, NULL) /* Fontbase additions: */ PHP_FE(fbsql_set_transaction, NULL) PHP_FE(fbsql_autocommit, NULL) PHP_FE(fbsql_commit, NULL) PHP_FE(fbsql_rollback, NULL) PHP_FE(fbsql_create_blob, NULL) PHP_FE(fbsql_create_clob, NULL) PHP_FE(fbsql_set_lob_mode, NULL) PHP_FE(fbsql_read_blob, NULL) PHP_FE(fbsql_read_clob, NULL) PHP_FE(fbsql_blob_size, NULL) PHP_FE(fbsql_clob_size, NULL) PHP_FE(fbsql_hostname, NULL) PHP_FE(fbsql_database, NULL) PHP_FE(fbsql_database_password, NULL) PHP_FE(fbsql_username, NULL) PHP_FE(fbsql_password, NULL) PHP_FE(fbsql_warnings, NULL) PHP_FE(fbsql_get_autostart_info, NULL) /* PHP_FE(fbsql_set_autostart_info, NULL) */ /* Aliases: */ PHP_FALIAS(fbsql, fbsql_db_query, NULL) PHP_FALIAS(fbsql_tablename, fbsql_table_name, NULL) {NULL, NULL, NULL} }; /* }}} */ zend_module_entry fbsql_module_entry = { STANDARD_MODULE_HEADER, "fbsql", fbsql_functions, PHP_MINIT(fbsql), PHP_MSHUTDOWN(fbsql), PHP_RINIT(fbsql), PHP_RSHUTDOWN(fbsql), PHP_MINFO(fbsql), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; ZEND_DECLARE_MODULE_GLOBALS(fbsql) #ifdef COMPILE_DL_FBSQL ZEND_GET_MODULE(fbsql) #endif #define CHECK_LINK(link) { \ if (link==-1) { \ if (FB_SQL_G(generateWarnings)) \ php_error(E_WARNING, "FrontBase: A link to the server could not be established"); \ RETURN_FALSE; \ } \ } static void phpfbReleaseResult (zend_rsrc_list_entry *rsrc TSRMLS_DC); static void phpfbReleaseLink (zend_rsrc_list_entry *rsrc TSRMLS_DC); static void phpfbReleasePLink (zend_rsrc_list_entry *rsrc TSRMLS_DC); static void phpfbReleaseResult(zend_rsrc_list_entry *rsrc TSRMLS_DC) { PHPFBResult* result = (PHPFBResult *)rsrc->ptr; if (result) { if (result->fetchHandle) { FBCMetaData *md = fbcdcCancelFetch(result->link->connection, result->fetchHandle); fbcmdRelease(md); } if (result->rowHandler) fbcrhRelease(result->rowHandler); if (result->ResultmetaData) fbcmdRelease(result->ResultmetaData); if (result->list) fbcplRelease(result->list); if (result->array) fbaRelease(result->array); efree(result); } } static void phpfbReleaseLink(zend_rsrc_list_entry *rsrc TSRMLS_DC) { PHPFBLink* link = (PHPFBLink *)rsrc->ptr; if (link) { if (link->hostName) free(link->hostName); if (link->userName) free(link->userName); if (link->userPassword) free(link->userPassword); if (link->databasePassword) free(link->databasePassword); if (link->databaseName) free(link->databaseName); if (link->errorText) free(link->errorText); if (link->connection) { fbcdcClose(link->connection); fbcdcRelease(link->connection); } if (link->execHandler) fbcehRelease(link->execHandler); efree(link); FB_SQL_G(linkCount)--; } } static void phpfbReleasePLink(zend_rsrc_list_entry *rsrc TSRMLS_DC) { PHPFBLink* link = (PHPFBLink *)rsrc->ptr; if (link) { if (link->hostName) free(link->hostName); if (link->userName) free(link->userName); if (link->userPassword) free(link->userPassword); if (link->databasePassword) free(link->databasePassword); if (link->databaseName) free(link->databaseName); if (link->errorText) free(link->errorText); if (link->connection) { fbcdcClose(link->connection); fbcdcRelease(link->connection); } if (link->execHandler) fbcehRelease(link->execHandler); free(link); FB_SQL_G(linkCount)--; FB_SQL_G(persistentCount)--; } } static void php_fbsql_set_default_link(int id TSRMLS_DC) { if (FB_SQL_G(linkIndex)!=-1) { zend_list_delete(FB_SQL_G(linkIndex)); } FB_SQL_G(linkIndex) = id; zend_list_addref(id); } static int php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAMETERS) { if (FB_SQL_G(linkIndex)==-1) { /* no link opened yet, implicitly open one */ ht = 0; php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } return FB_SQL_G(linkIndex); } static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link); /* {{{ PHP_INI */ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN ("fbsql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allowPersistent, zend_fbsql_globals, fbsql_globals) STD_PHP_INI_BOOLEAN ("fbsql.generate_warnings", "0", PHP_INI_SYSTEM, OnUpdateInt, generateWarnings, zend_fbsql_globals, fbsql_globals) STD_PHP_INI_BOOLEAN ("fbsql.autocommit", "1", PHP_INI_SYSTEM, OnUpdateInt, autoCommit, zend_fbsql_globals, fbsql_globals) STD_PHP_INI_ENTRY_EX ("fbsql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, maxPersistent, zend_fbsql_globals, fbsql_globals, display_link_numbers) STD_PHP_INI_ENTRY_EX ("fbsql.max_links", "128", PHP_INI_SYSTEM, OnUpdateInt, maxLinks, zend_fbsql_globals, fbsql_globals, display_link_numbers) STD_PHP_INI_ENTRY_EX ("fbsql.max_connections", "128", PHP_INI_SYSTEM, OnUpdateInt, maxConnections, zend_fbsql_globals, fbsql_globals, display_link_numbers) STD_PHP_INI_ENTRY_EX ("fbsql.max_results", "128", PHP_INI_SYSTEM, OnUpdateInt, maxResults, zend_fbsql_globals, fbsql_globals, display_link_numbers) STD_PHP_INI_ENTRY_EX ("fbsql.batchSize", "1000", PHP_INI_SYSTEM, OnUpdateInt, batchSize, zend_fbsql_globals, fbsql_globals, display_link_numbers) STD_PHP_INI_ENTRY ("fbsql.default_host", NULL, PHP_INI_SYSTEM, OnUpdateString, hostName, zend_fbsql_globals, fbsql_globals) STD_PHP_INI_ENTRY ("fbsql.default_user", "_SYSTEM", PHP_INI_SYSTEM, OnUpdateString, userName, zend_fbsql_globals, fbsql_globals) STD_PHP_INI_ENTRY ("fbsql.default_password", "", PHP_INI_SYSTEM, OnUpdateString, userPassword, zend_fbsql_globals, fbsql_globals) STD_PHP_INI_ENTRY ("fbsql.default_database", "", PHP_INI_SYSTEM, OnUpdateString, databaseName, zend_fbsql_globals, fbsql_globals) STD_PHP_INI_ENTRY ("fbsql.default_database_password", "", PHP_INI_SYSTEM, OnUpdateString, databasePassword, zend_fbsql_globals, fbsql_globals) PHP_INI_END() /* }}} */ static void php_fbsql_init_globals(zend_fbsql_globals *fbsql_globals) { fbsql_globals->persistentCount = 0; if (fbsql_globals->hostName==NULL) { char name[256]; gethostname(name, sizeof(name)); name[sizeof(name)-1] = 0; fbsql_globals->hostName = strdup(name); } fbsql_globals->persistentCount = 0; fbsql_globals->linkCount = 0; } PHP_MINIT_FUNCTION(fbsql) { ZEND_INIT_MODULE_GLOBALS(fbsql, php_fbsql_init_globals, NULL); REGISTER_INI_ENTRIES(); fbcInitialize(); le_result = zend_register_list_destructors_ex(phpfbReleaseResult, NULL, "fbsql result", module_number); le_link = zend_register_list_destructors_ex(phpfbReleaseLink, NULL, "fbsql link", module_number); le_plink = zend_register_list_destructors_ex(NULL, phpfbReleasePLink, "fbsql plink", module_number); Z_TYPE(fbsql_module_entry) = type; REGISTER_LONG_CONSTANT("FBSQL_ASSOC", FBSQL_ASSOC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_NUM", FBSQL_NUM, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_BOTH", FBSQL_BOTH, CONST_CS | CONST_PERSISTENT); /* Register Transaction constants */ REGISTER_LONG_CONSTANT("FBSQL_LOCK_DEFERRED", FBSQL_LOCK_DEFERRED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_LOCK_OPTIMISTIC", FBSQL_LOCK_OPTIMISTIC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_LOCK_PESSIMISTIC", FBSQL_LOCK_PESSIMISTIC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_ISO_READ_UNCOMMITTED", FBSQL_ISO_READ_UNCOMMITTED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_ISO_READ_COMMITTED", FBSQL_ISO_READ_COMMITTED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_ISO_REPEATABLE_READ", FBSQL_ISO_REPEATABLE_READ, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_ISO_SERIALIZABLE", FBSQL_ISO_SERIALIZABLE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_ISO_VERSIONED", FBSQL_ISO_VERSIONED, CONST_CS | CONST_PERSISTENT); /* Register Status constants */ REGISTER_LONG_CONSTANT("FBSQL_UNKNOWN", FBUnknownStatus, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_STOPPED", FBStopped, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_STARTING", FBStarting, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_RUNNING", FBRunning, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_STOPPING", FBStopping, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_NOEXEC", FBNoExec, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_LOB_DIRECT", FBSQL_LOB_DIRECT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FBSQL_LOB_HANDLE", FBSQL_LOB_HANDLE, CONST_CS | CONST_PERSISTENT); return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(fbsql) { UNREGISTER_INI_ENTRIES(); return SUCCESS; } PHP_RINIT_FUNCTION(fbsql) { FB_SQL_G(linkIndex) = -1; FB_SQL_G(linkCount) = FB_SQL_G(persistentCount); return SUCCESS; } PHP_RSHUTDOWN_FUNCTION(fbsql) { return SUCCESS; } PHP_MINFO_FUNCTION(fbsql) { char buf[32]; php_info_print_table_start(); php_info_print_table_header(2, "FrontBase support", "enabled"); php_info_print_table_row(2, "Client API version", "2.24"); if (FB_SQL_G(allowPersistent)) { sprintf(buf, "%ld", FB_SQL_G(persistentCount)); php_info_print_table_row(2, "Active Persistent Links", buf); } sprintf(buf, "%ld", FB_SQL_G(linkCount)); php_info_print_table_row(2, "Active Links", buf); /* sprintf(buf, "%ld", FB_SQL_G(resultCount)); php_info_print_table_row(2, "Active Results", buf); */ php_info_print_table_end(); DISPLAY_INI_ENTRIES(); } static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) { PHPFBLink* phpLink; list_entry *lep; char name[1024]; char *hostName = NULL, *userName = NULL, *userPassword = NULL; int argc = ZEND_NUM_ARGS(), create_new = 0; zval **argv[3]; if ((argc < 0) || (argc > 3)) WRONG_PARAM_COUNT; if (zend_get_parameters_ex(argc, &argv[0], &argv[1], &argv[2])==FAILURE) RETURN_FALSE; if (argc >= 1) { convert_to_string_ex(argv[0]); hostName = Z_STRVAL_PP(argv[0]); } if (argc >= 2) { convert_to_string_ex(argv[1]); userName = Z_STRVAL_PP(argv[1]); } if (argc == 3) { convert_to_string_ex(argv[2]); userPassword = Z_STRVAL_PP(argv[2]); } if (hostName == NULL) hostName = FB_SQL_G(hostName); if (userName == NULL) userName = FB_SQL_G(userName); if (userPassword == NULL) userPassword = FB_SQL_G(userPassword); sprintf(name, "fbsql_%s_%s_%s", hostName, userName, userPassword); if (!FB_SQL_G(allowPersistent)) { persistent=0; } if (persistent) { if (zend_hash_find(&EG(persistent_list), name, strlen(name) + 1, (void **)&lep) == SUCCESS) { phpLink = (PHPFBLink*)lep->ptr; } else { list_entry le; if ((FB_SQL_G(maxLinks) != -1 && FB_SQL_G(linkCount) == FB_SQL_G(maxLinks))) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "FrontBase link limit %d exceeded ", FB_SQL_G(maxLinks)); RETURN_FALSE; } if ((FB_SQL_G(maxPersistent) != -1 && FB_SQL_G(persistentCount) == FB_SQL_G(maxPersistent))) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "FrontBase persistent link limit %d exceeded ", FB_SQL_G(maxPersistent)); RETURN_FALSE; } phpLink = malloc(sizeof(PHPFBLink)); phpLink->persistent = persistent; phpLink->hostName = strdup(hostName); phpLink->userName = strdup(userName); phpLink->userPassword = strdup(userPassword); phpLink->databasePassword = strdup(FB_SQL_G(databasePassword)); phpLink->databaseName = NULL; phpLink->execHandler = fbcehHandlerForHost(hostName, 128); phpLink->affectedRows = 0; phpLink->autoCommit = FB_SQL_G(autoCommit); phpLink->errorNo = 0; phpLink->errorText = NULL; phpLink->connection = NULL; le.ptr = phpLink; Z_TYPE(le) = le_plink; if (zend_hash_update(&EG(persistent_list), name, strlen(name) + 1, &le, sizeof(le), NULL)==FAILURE) { free(phpLink->hostName); free(phpLink->userName); free(phpLink->userPassword); free(phpLink->databasePassword); free(phpLink); RETURN_FALSE; } FB_SQL_G(linkCount)++; FB_SQL_G(persistentCount)++; } ZEND_REGISTER_RESOURCE(return_value, phpLink, le_plink); } else { list_entry le; if ((FB_SQL_G(maxLinks) != -1 && FB_SQL_G(linkCount) == FB_SQL_G(maxLinks))) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "FrontBase link limit %d exceeded ", FB_SQL_G(maxLinks)); RETURN_FALSE; } if (zend_hash_find(&EG(regular_list), name, strlen(name) + 1, (void **)&lep) == SUCCESS) { int type, link; void *ptr; link = (int) lep->ptr; ptr = zend_list_find(link, &type); /* check if the link is still there */ if (ptr && (type==le_link || type==le_plink)) { zend_list_addref(link); Z_LVAL_P(return_value) = link; php_fbsql_set_default_link(link TSRMLS_CC); Z_TYPE_P(return_value) = IS_RESOURCE; return; } else { zend_hash_del(&EG(regular_list), name, strlen(name) + 1); } phpLink = (PHPFBLink*)lep->ptr; } phpLink = emalloc(sizeof(PHPFBLink)); phpLink->persistent = persistent; phpLink->hostName = strdup(hostName); phpLink->userName = strdup(userName); phpLink->userPassword = strdup(userPassword); phpLink->databasePassword = strdup(FB_SQL_G(databasePassword)); phpLink->databaseName = NULL; phpLink->execHandler = fbcehHandlerForHost(hostName, 128); phpLink->affectedRows = 0; phpLink->autoCommit = FB_SQL_G(autoCommit); phpLink->errorNo = 0; phpLink->errorText = NULL; phpLink->connection = NULL; ZEND_REGISTER_RESOURCE(return_value, phpLink, le_link); le.ptr = (void *)Z_LVAL_P(return_value); Z_TYPE(le) = le_index_ptr; if (zend_hash_update(&EG(regular_list), name, strlen(name) + 1, &le, sizeof(le), NULL)==FAILURE) { free(phpLink->hostName); free(phpLink->userName); free(phpLink->userPassword); free(phpLink->databasePassword); efree(phpLink); RETURN_FALSE; } FB_SQL_G(linkCount)++; } php_fbsql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC); } int phpfbFetchRow(PHPFBResult* result, unsigned int row) { if (result->rowHandler == NULL) { void *rawData = fbcdcFetch(result->link->connection, result->batchSize, result->fetchHandle); if (rawData == NULL) result->rowCount = 0; else result->rowHandler = fbcrhInitWith(rawData, result->metaData); } for (;;) { void *rawData; if (row >= result->rowCount && result->rowCount != 0x7fffffff) return 0; if (fbcrhRowCount(result->rowHandler) > (unsigned int)row) return 1; rawData = fbcdcFetch(result->link->connection, result->batchSize, result->fetchHandle); if (!fbcrhAddBatch(result->rowHandler, rawData)) result->rowCount = fbcrhRowCount(result->rowHandler); } return 0; } /* {{{ proto resource fbsql_connect([string hostname [, string username [, string password]]]) Create a connection to a database server */ PHP_FUNCTION(fbsql_connect) { php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto resource fbsql_pconnect([string hostname [, string username [, string password]]]) Create a persistant connection to a database server */ PHP_FUNCTION(fbsql_pconnect) { php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ proto int fbsql_close([resource link_identifier]) Close a connection to a database server */ PHP_FUNCTION(fbsql_close) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); if (id==-1) { /* explicit resource number */ zend_list_delete(Z_RESVAL_PP(fbsql_link_index)); } if (id!=-1 || (fbsql_link_index && Z_RESVAL_PP(fbsql_link_index)==FB_SQL_G(linkIndex))) { zend_list_delete(FB_SQL_G(linkIndex)); FB_SQL_G(linkIndex) = -1; } RETURN_TRUE; } /* }}} */ static int php_fbsql_select_db(char *databaseName, PHPFBLink *link TSRMLS_DC) { unsigned port; FBCDatabaseConnection* c; FBCMetaData* md; if (!link->databaseName || strcmp(link->databaseName, databaseName)) { port = atoi(databaseName); if (port>0 && port<65535) c = fbcdcConnectToDatabaseUsingPort(link->hostName, port, link->databasePassword); else c = fbcdcConnectToDatabase(databaseName, link->hostName, link->databasePassword); if (c == NULL) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, fbcdcClassErrorMessage()); return 0; } md = fbcdcCreateSession(c, "PHP", link->userName, link->userPassword, link->userName); if (fbcmdErrorsFound(md)) { FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md); char* emg = fbcemdAllErrorMessages(emd); if (FB_SQL_G(generateWarnings)) { if (emg) php_error(E_WARNING, emg); else php_error(E_WARNING, "No message"); } link->errorText = strdup(emg); link->errorNo = fbcemdErrorCodeAtIndex(emd, 0);; free(emg); fbcemdRelease(emd); fbcmdRelease(md); fbcdcClose(c); fbcdcRelease(c); return 0; } fbcmdRelease(md); if (c) { if (link->autoCommit) md = fbcdcExecuteDirectSQL(c, "SET COMMIT TRUE;"); else md = fbcdcExecuteDirectSQL(c, "SET COMMIT FALSE;"); fbcmdRelease(md); } fbcdcSetOutputCharacterSet(c, FBC_ISO8859_1); fbcdcSetInputCharacterSet(c, FBC_ISO8859_1); if (link->connection) { fbcdcClose(link->connection); fbcdcRelease(link->connection); } link->connection = c; if (link->databaseName) free(link->databaseName); link->databaseName = strdup(databaseName); } return 1; } void phpfbestrdup(const char * s, int* length, char** value) { int l = s?strlen(s):0; if (value) { char* r = emalloc(l+1); if (s) strcpy(r, s); else r[0] = 0; *value = r; } *length = l; } /* {{{ proto void fbsql_set_transaction(resource link_identifier, int locking, int isolation) Sets the transaction locking and isolation */ PHP_FUNCTION(fbsql_set_transaction) { PHPFBLink* phpLink = NULL; FBCMetaData* md; zval **fbsql_link_index = NULL, **Locking = NULL, **Isolation = NULL; char strSQL[1024]; char *strLocking[] = {"DEFERRED", "OPTIMISTIC", "PESSIMISTIC"}; char *strIsolation[] = {"READ UNCOMMITTED", "READ NCOMMITTED", "REPEATABLE READ", "SERIALIZABLE", "VERSIONED"}; switch (ZEND_NUM_ARGS()) { case 3: if (zend_get_parameters_ex(3, &fbsql_link_index, &Locking, &Isolation)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); sprintf(strSQL, "SET TRANSACTION LOCKING %s, ISOLATION %s;", strLocking[Z_LVAL_PP(Locking)], strIsolation[Z_LVAL_PP(Isolation)]); md = fbcdcExecuteDirectSQL(phpLink->connection, strSQL); fbcmdRelease(md); } /* }}} */ /* {{{ proto bool fbsql_autocommit(resource link_identifier [, bool OnOff]) Turns on auto-commit */ PHP_FUNCTION(fbsql_autocommit) { PHPFBLink* phpLink = NULL; FBCMetaData* md; zval **fbsql_link_index = NULL, **onoff = NULL; zend_bool OnOff; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_link_index, &onoff)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); if (onoff) { convert_to_boolean_ex(onoff); OnOff = Z_BVAL_PP(onoff); phpLink->autoCommit = OnOff; if (OnOff) md = fbcdcExecuteDirectSQL(phpLink->connection, "SET COMMIT TRUE;"); else md = fbcdcExecuteDirectSQL(phpLink->connection, "SET COMMIT FALSE;"); fbcmdRelease(md); } RETURN_BOOL(phpLink->autoCommit); } /* }}} */ /* {{{ proto bool fbsql_commit([resource link_identifier]) Commit the transaction */ PHP_FUNCTION(fbsql_commit) { PHPFBLink* phpLink = NULL; FBCMetaData* md; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); md = fbcdcCommit(phpLink->connection); if (md) { fbcmdRelease(md); RETURN_TRUE; } else RETURN_FALSE; } /* }}} */ /* {{{ proto int fbsql_rollback([resource link_identifier]) Rollback all statments since last commit */ PHP_FUNCTION(fbsql_rollback) { PHPFBLink* phpLink = NULL; FBCMetaData* md; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); md = fbcdcRollback(phpLink->connection); if (md) { fbcmdRelease(md); RETURN_TRUE; } else RETURN_FALSE; } /* }}} */ static void php_fbsql_create_lob(INTERNAL_FUNCTION_PARAMETERS, int lob_type) { PHPFBLink* phpLink = NULL; FBCBlobHandle *lobHandle; zval **lob_data, **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &lob_data)==FAILURE) { RETURN_FALSE; } id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 2: if (zend_get_parameters_ex(2, &lob_data, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(lob_data); switch (lob_type) { case 0 : /* BLOB */ lobHandle = fbcdcWriteBLOB(phpLink->connection, Z_STRVAL_PP(lob_data), Z_STRLEN_PP(lob_data)); break; case 1 : /* CLOB */ lobHandle = fbcdcWriteCLOB(phpLink->connection, Z_STRVAL_PP(lob_data)); break; } if (lobHandle) { RETURN_STRING(fbcbhDescription(lobHandle), 1); fbcbhRelease(lobHandle); } else RETURN_FALSE; } /* {{{ proto string fbsql_create_blob(string blob_data [, resource link_identifier]) Create a BLOB in the database for use with an insert or update statement */ PHP_FUNCTION(fbsql_create_blob) { php_fbsql_create_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto string fbsql_create_clob(string clob_data [, resource link_identifier]) Create a CLOB in the database for use with an insert or update statement */ PHP_FUNCTION(fbsql_create_clob) { php_fbsql_create_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ proto bool fbsql_set_lob_mode(resource result, int lob_mode) Sets the mode for how LOB data re retreived (actual data or a handle) */ PHP_FUNCTION(fbsql_set_lob_mode) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **lob_mode = NULL; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &lob_mode)==FAILURE) { RETURN_FALSE; } convert_to_long_ex(lob_mode); break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); result->lobMode = Z_LVAL_PP(lob_mode); RETURN_TRUE; } /* }}} */ static void php_fbsql_read_lob(INTERNAL_FUNCTION_PARAMETERS, int lob_type) { PHPFBLink* phpLink = NULL; zval **lob_handle, **fbsql_link_index = NULL; int id; long length = 0; char* value = NULL; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &lob_handle)==FAILURE) { RETURN_FALSE; } id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 2: if (zend_get_parameters_ex(2, &lob_handle, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(lob_handle); if (Z_STRLEN_PP(lob_handle) != 27 || Z_STRVAL_PP(lob_handle)[0] != '@') { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "The handle is invalid"); RETURN_FALSE; } length = fbcbhBlobSize((FBCBlobHandle *)Z_STRVAL_PP(lob_handle)); if (lob_type == 0) value = estrndup((char *)fbcdcReadBLOB(phpLink->connection, (FBCBlobHandle *)Z_STRVAL_PP(lob_handle)), length); else value = estrndup((char *)fbcdcReadCLOB(phpLink->connection, (FBCBlobHandle *)Z_STRVAL_PP(lob_handle)), length); if (value) { RETURN_STRINGL(value, length, 0); } else { RETURN_FALSE; } } /* {{{ proto string fbsql_read_blob(string blob_handle [, resource link_identifier]) Read the BLOB data identified by blob_handle */ PHP_FUNCTION(fbsql_read_blob) { php_fbsql_read_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto string fbsql_read_clob(string clob_handle [, resource link_identifier]) Read the CLOB data identified by clob_handle */ PHP_FUNCTION(fbsql_read_clob) { php_fbsql_read_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ static void php_fbsql_lob_size(INTERNAL_FUNCTION_PARAMETERS, int lob_type) { PHPFBLink* phpLink = NULL; zval **lob_handle, **fbsql_link_index = NULL; int id; char* value = NULL; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &lob_handle)==FAILURE) { RETURN_FALSE; } id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 2: if (zend_get_parameters_ex(2, &lob_handle, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(lob_handle); if (Z_STRLEN_PP(lob_handle) != 27 || Z_STRVAL_PP(lob_handle)[0] != '@') { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "The handle is invalid"); RETURN_FALSE; } RETURN_LONG(fbcbhBlobSize((FBCBlobHandle *)Z_STRVAL_PP(lob_handle))); } /* {{{ proto string fbsql_blob_size(string blob_handle [, resource link_identifier]) Get the size of a BLOB identified by blob_handle */ PHP_FUNCTION(fbsql_blob_size) { php_fbsql_lob_size(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto string fbsql_clob_size(string clob_handle [, resource link_identifier]) Get the size of a CLOB identified by clob_handle */ PHP_FUNCTION(fbsql_clob_size) { php_fbsql_lob_size(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ proto string fbsql_hostname(resource link_identifier [, string host_name]) Get or set the host name used with a connection */ PHP_FUNCTION(fbsql_hostname) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **host_name = NULL; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_link_index, &host_name)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); if (host_name) { convert_to_string_ex(host_name); if (phpLink->hostName) free(phpLink->hostName); phpLink->hostName = strdup(Z_STRVAL_PP(host_name)); } RETURN_STRING(phpLink->hostName, 1); } /* }}} */ /* {{{ proto string fbsql_database(resource link_identifier [, string database]) Get or set the database name used with a connection */ PHP_FUNCTION(fbsql_database) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **dbname = NULL; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_link_index, &dbname)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); if (dbname) { convert_to_string_ex(dbname); if (phpLink->databaseName) free(phpLink->databaseName); phpLink->databaseName = strdup(Z_STRVAL_PP(dbname)); } RETURN_STRING(phpLink->databaseName, 1); } /* }}} */ /* {{{ proto string fbsql_database_password(resource link_identifier [, string database_password]) Get or set the databsae password used with a connection */ PHP_FUNCTION(fbsql_database_password) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **db_password = NULL; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_link_index, &db_password)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); if (db_password) { convert_to_string_ex(db_password); if (phpLink->databasePassword) free(phpLink->databasePassword); phpLink->databasePassword = strdup(Z_STRVAL_PP(db_password)); } RETURN_STRING(phpLink->databasePassword, 1); } /* }}} */ /* {{{ proto string fbsql_username(resource link_identifier [, string username]) Get or set the host user used with a connection */ PHP_FUNCTION(fbsql_username) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **username = NULL; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_link_index, &username)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); if (username) { convert_to_string_ex(username); if (phpLink->userName) free(phpLink->userName); phpLink->userName = strdup(Z_STRVAL_PP(username)); } RETURN_STRING(phpLink->userName, 1); } /* }}} */ /* {{{ proto string fbsql_password(resource link_identifier [, string password]) Get or set the user password used with a connection */ PHP_FUNCTION(fbsql_password) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **password = NULL; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_link_index, &password)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); if (password) { convert_to_string_ex(password); if (phpLink->userPassword) free(phpLink->userPassword); phpLink->userPassword = strdup(Z_STRVAL_PP(password)); } RETURN_STRING(phpLink->userPassword, 1); } /* }}} */ /* {{{ proto bool fbsql_select_db([string database_name [, resource link_identifier]]) Select the database to open */ PHP_FUNCTION(fbsql_select_db) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **dbname; int id; char* name = NULL; switch (ZEND_NUM_ARGS()) { case 0: name = FB_SQL_G(databaseName); id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &dbname)==FAILURE) { RETURN_FALSE; } convert_to_string_ex(dbname); name = Z_STRVAL_PP(dbname); break; case 2: if (zend_get_parameters_ex(2, &dbname, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } convert_to_string_ex(dbname); name = Z_STRVAL_PP(dbname); id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); if (phpLink->execHandler == NULL) { int port = atoi(name); if (port == 0 || port > 64535) { if (FB_SQL_G(generateWarnings)) { php_error(E_WARNING, "Cannot connect to FBExec for database '%s'", name); php_error(E_WARNING, fbcehClassErrorMessage()); } RETURN_FALSE; } } if (!php_fbsql_select_db(name, phpLink TSRMLS_CC)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto int fbsql_change_user(string user, string password [, string database [, resource link_identifier]]) Change the user for a session */ PHP_FUNCTION(fbsql_change_user) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **user, **password, **database; int id; char *name = NULL, *userName, *userPassword; char buffer[1024]; switch (ZEND_NUM_ARGS()) { case 2: name = FB_SQL_G(databaseName); id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(2, &user, &password)==FAILURE) { RETURN_FALSE; } break; case 3: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(3, &user, &password, &database)==FAILURE) { RETURN_FALSE; } convert_to_string_ex(database); name = Z_STRVAL_PP(database); break; case 4: if (zend_get_parameters_ex(4, &user, &password, &database, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } convert_to_string_ex(database); name = Z_STRVAL_PP(database); id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(user); userName = Z_STRVAL_PP(user); convert_to_string_ex(password); userPassword = Z_STRVAL_PP(password); sprintf(buffer, "SET AUTHORIZATION %s;", userName); phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, buffer, phpLink); if (Z_LVAL_P(return_value)) { free(phpLink->userName); phpLink->userName = strdup(userName); } } /* }}} */ /* {{{ proto bool fbsql_create_db(string database_name [, resource link_identifier]) Create a new database on the server */ PHP_FUNCTION(fbsql_create_db) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; int i, status; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status != FBUnknownStatus) { char* txt = "Unknown status"; if (status == FBStopped ) txt = "stopped"; else if (status == FBStarting) txt = "starting"; else if (status == FBRunning ) txt = "running"; else if (status == FBStopping) txt = "stopping"; else if (status == FBNoExec ) txt = "no exec"; if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Could not create %s@%s, database is %s", databaseName, phpLink->hostName, txt); RETURN_FALSE; } if (!fbcehCreateDatabaseNamedWithOptions(phpLink->execHandler, databaseName, "")) { char* error = fbechErrorMessage(phpLink->execHandler); if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Could not create %s@%s. %s.", databaseName, phpLink->hostName, error); RETURN_FALSE; } for (i=0; i < 20; i++) { #ifdef PHP_WIN32 Sleep(1000); #else sleep(1); #endif status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status == FBRunning) break; } if (status != FBRunning) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Database %s@%s created -- status unknown", databaseName, phpLink->hostName); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto int fbsql_drop_db(string database_name [, resource link_identifier]) Drop a database on the server */ PHP_FUNCTION(fbsql_drop_db) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; int i, status; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status != FBStopped) { char* txt = "Unknown status"; if (status == FBStopped ) txt = "stopped"; else if (status == FBUnknownStatus) txt = "nonexisting"; else if (status == FBStarting ) txt = "starting"; else if (status == FBRunning ) txt = "running"; else if (status == FBStopping ) txt = "stopping"; else if (status == FBNoExec ) txt = "no exec"; if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Could not drop %s@%s, database is %s.", databaseName, phpLink->hostName, txt); RETURN_FALSE; } if (! fbcehDeleteDatabaseNamed (phpLink->execHandler, databaseName)) { char* error = fbechErrorMessage(phpLink->execHandler); if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Could not drop %s@%s. %s.", databaseName, phpLink->hostName, error); RETURN_FALSE; } for (i=0; i < 20; i++) { #ifdef PHP_WIN32 Sleep(1000); #else sleep(1); #endif status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status == FBUnknownStatus) break; } if (status != FBUnknownStatus) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Database %s@%s dropped -- status unknown", databaseName, phpLink->hostName); RETURN_FALSE; } } /* }}} */ /* {{{ proto bool fbsql_start_db(string database_name [, resource link_identifier]) Start a database on the server */ PHP_FUNCTION(fbsql_start_db) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; int i, status; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if ((status != FBStopped) && (status != FBRunning) && (status != FBStarting)) { char* txt = "Unknown status"; if (status == FBStopped ) txt = "stopped"; else if (status == FBStarting) txt = "starting"; else if (status == FBRunning ) txt = "running"; else if (status == FBStopping) txt = "stopping"; else if (status == FBNoExec ) txt = "no exec"; if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Could not start %s@%s, as database is %s.", databaseName, phpLink->hostName, txt); RETURN_FALSE; } if (status == FBStopped) { if (!fbcehStartDatabaseNamed (phpLink->execHandler, databaseName)) { char* error = fbechErrorMessage(phpLink->execHandler); if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Could not start %s@%s. %s.", databaseName, phpLink->hostName, error); RETURN_FALSE; } } for (i=0; i < 20; i++) { #ifdef PHP_WIN32 Sleep(1000); #else sleep(1); #endif status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status == FBRunning) break; } if (status != FBRunning) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Database %s@%s started -- status unknown", databaseName, phpLink->hostName); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool fbsql_stop_db(string database_name [, resource link_identifier]) Stop a database on the server */ PHP_FUNCTION(fbsql_stop_db) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; int i, status; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) { RETURN_FALSE; } /* printf("Stop db %x\n", phpDatabase->connection); */ if (!fbcdcStopDatabase(phpLink->connection)) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Cannot stop database %s@%s", databaseName, phpLink->hostName); RETURN_FALSE; } for (i=0; i < 20; i++) { status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); if (status == FBStopped) break; #ifdef PHP_WIN32 Sleep(1000); #else sleep(1); #endif } RETURN_TRUE; } /* }}} */ /* {{{ proto int fbsql_db_status(string database_name [, resource link_identifier]) Gets the status (Stopped, Starting, Running, Stopping) for a given database */ PHP_FUNCTION(fbsql_db_status) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); if (phpLink->execHandler) { RETURN_LONG(fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName)); } else { RETURN_FALSE; } } /* }}} */ /* {{{ mdOk */ int mdOk(PHPFBLink* link, FBCMetaData* md, char* sql) { FBCDatabaseConnection* c = link->connection; int result = 1; TSRMLS_FETCH(); link->errorNo = 0; if (link->errorText) { free(link->errorText); link->errorText = NULL; } if (md == NULL) { link->errorNo = 1; link->errorText = strdup("Connection to database server was lost"); if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, link->errorText); result = 0; } else if (fbcmdErrorsFound(md)) { FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md); char* emg = fbcemdAllErrorMessages(emd); if (FB_SQL_G(generateWarnings)) { if (emg) php_error(E_WARNING, "Error in statement: '%s' %s", sql, emg); else php_error(E_WARNING, "No message"); } link->errorText = strdup(emg); link->errorNo = fbcemdErrorCodeAtIndex(emd, 0);; free(emg); fbcemdRelease(emd); result = 0; } return result; } /* }}} */ static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link) { PHPFBResult* result = NULL; FBCMetaData* md, *meta; char* tp; char* fh; unsigned int sR = 1, cR = 0; meta = fbcdcExecuteDirectSQL(link->connection, sql); if (!mdOk(link, meta, sql)) { fbcmdRelease(meta); ZVAL_BOOL(return_value, 0) } else { if (fbcmdHasMetaDataArray(meta)) { sR = fbcmdMetaDataArrayCount(meta); md = (FBCMetaData*)fbcmdMetaDataAtIndex(meta, cR); } else md = meta; tp = fbcmdStatementType(md); if ((tp[0] == 'C') || (tp[0] == 'R')) { if (sR == 1 && md) fbcmdRelease(md); ZVAL_BOOL(return_value, 1) } else if ((fh = fbcmdFetchHandle(md)) || tp[0] == 'E' || (tp[0] == 'U' && fh)) { result = emalloc(sizeof(PHPFBResult)); result->link = link; result->fetchHandle = fh; result->ResultmetaData = meta; result->metaData = md; result->rowHandler = NULL; result->batchSize = FB_SQL_G(batchSize); result->rowCount = 0x7fffffff; result->columnCount = 0; result->rowIndex = 0; result->columnIndex = 0; result->row = NULL; result->array = NULL; result->list = NULL; result->selectResults = sR; result->currentResult = cR; result->lobMode = FBSQL_LOB_DIRECT; if (tp[0] != 'E') { result->columnCount = fbcmdColumnCount(md); result->fetchHandle = fh; result->batchSize = FB_SQL_G(batchSize); } else { char* r = fbcmdMessage(result->metaData); fbcrhConvertToOutputCharSet(fbcdcOutputCharacterSet(link->connection), (unsigned char *)r); if ((result->list = fbcplParse(r))) { result->rowCount = fbcplCount(result->list); result->columnCount = 7; } } ZEND_REGISTER_RESOURCE(return_value, result, le_result); } else if (tp[0] == 'I' || tp[0] == 'U') { if (tp[0] == 'I') link->insert_id = fbcmdRowIndex(md); if (sR == 1 && md) fbcmdRelease(md); ZVAL_BOOL(return_value, 1) } else if(tp[0] == 'A' || tp[0] == 'D') { if (sR == 1 && md) fbcmdRelease(md); ZVAL_BOOL(return_value, 1) } if (link) link->affectedRows = fbcmdRowCount(md); } } /* {{{ proto resource fbsql_query(string query [, resource link_identifier]) Send one or more SQL statements to the server and execute them */ PHP_FUNCTION(fbsql_query) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **query; int id; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &query)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &query, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(query); phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink); } /* }}} */ /* {{{ proto resource fbsql_db_query(string database_name, string query [, resource link_identifier]) Send one or more SQL statements to a specified database on the server */ PHP_FUNCTION(fbsql_db_query) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **dbname, **query; int id; switch (ZEND_NUM_ARGS()) { case 2: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(2, &dbname, &query)==FAILURE) { RETURN_FALSE; } break; case 3: if (zend_get_parameters_ex(3, &dbname, &query, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(query); convert_to_string_ex(dbname); if (php_fbsql_select_db(Z_STRVAL_PP(dbname), phpLink TSRMLS_CC)) { phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink); } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto resource fbsql_list_dbs([resource link_identifier]) Retreive a list of all databases on the server */ PHP_FUNCTION(fbsql_list_dbs) { PHPFBResult* phpResult; PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); phpResult = emalloc(sizeof(PHPFBResult)); phpResult->link = phpLink; phpResult->fetchHandle = NULL; phpResult->rowHandler = NULL; phpResult->ResultmetaData = NULL; phpResult->metaData = NULL; phpResult->batchSize = FB_SQL_G(batchSize); phpResult->columnCount = 1; phpResult->rowIndex = 0; phpResult->columnIndex = 0; phpResult->row = NULL; phpResult->array = fbcehAvailableDatabases(phpLink->execHandler); phpResult->rowCount = fbaCount(phpResult->array); phpResult->list = NULL; ZEND_REGISTER_RESOURCE(return_value, phpResult, le_result); } /* }}} */ /* {{{ proto resource fbsql_list_tables(string database [, int link_identifier]) Retreive a list of all tables from the specifoied database */ PHP_FUNCTION(fbsql_list_tables) { char* sql = "select t0.\"table_name\"from information_schema.tables t0, information_schema.SCHEMATA t1 where t0.schema_pk = t1.schema_pk and t1.\"schema_name\" = current_schema order by \"table_name\";"; PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name; int id; char *databaseName; switch (ZEND_NUM_ARGS()) { case 1: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(1, &database_name)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); if (databaseName == NULL) { php_fbsql_select_db(FB_SQL_G(databaseName), phpLink TSRMLS_CC); } else { php_fbsql_select_db(databaseName, phpLink TSRMLS_CC); } phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink); } /* }}} */ /* {{{ proto resource fbsql_list_fields(string database_name, string table_name [, resource link_identifier]) Retrieve a list of all fields for the specified database.table */ PHP_FUNCTION(fbsql_list_fields) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL, **database_name, **table_name; int id; char *databaseName, *tableName; char sql[1024]; switch (ZEND_NUM_ARGS()) { case 2: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); if (zend_get_parameters_ex(2, &database_name, &table_name)==FAILURE) { RETURN_FALSE; } break; case 3: if (zend_get_parameters_ex(3, &database_name, &table_name, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); convert_to_string_ex(database_name); databaseName = Z_STRVAL_PP(database_name); convert_to_string_ex(table_name); tableName = Z_STRVAL_PP(table_name); if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) { RETURN_FALSE; } sprintf(sql, "SELECT * FROM %s WHERE 1=0;", tableName); phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink); } /* }}} */ /* {{{ proto string fbsql_error([resource link_identifier]) Returns the last error string */ PHP_FUNCTION(fbsql_error) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); if (phpLink->errorText == NULL) { RETURN_FALSE; } else { RETURN_STRING(phpLink->errorText, 1); } } /* }}} */ /* {{{ proto int fbsql_errno([resource link_identifier]) Returns the last error code */ PHP_FUNCTION(fbsql_errno) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); RETURN_LONG(phpLink->errorNo); } /* }}} */ /* {{{ proto bool fbsql_warnings([int flag]) Enable or disable FrontBase warnings */ PHP_FUNCTION(fbsql_warnings) { int argc = ARG_COUNT(ht); zval **argv[1]; if ((argc < 0) || (argc > 1)) WRONG_PARAM_COUNT; if (zend_get_parameters_ex(argc, &argv[0])==FAILURE) RETURN_FALSE; if (argc >= 1) { convert_to_long_ex(argv[0]); FB_SQL_G(generateWarnings) = Z_LVAL_PP(argv[0]) != 0; } RETURN_BOOL(FB_SQL_G(generateWarnings)); } /* }}} */ /* {{{ proto int fbsql_affected_rows([resource link_identifier]) Get the number of rows affected by the last statement */ PHP_FUNCTION(fbsql_affected_rows) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); RETURN_LONG(phpLink->affectedRows); } /* }}} */ /* {{{ proto int fbsql_insert_id([resource link_identifier]) Get the internal index for the last insert statement */ PHP_FUNCTION(fbsql_insert_id) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); RETURN_LONG(phpLink->insert_id); } /* }}} */ /* {{{ phpSizeOfInt */ int phpSizeOfInt (int i) { int s = 1; if (i < 0) { s++; i = -i; } while ((i = i / 10)) s++; return s; } /* }}} */ void phpfbColumnAsString (PHPFBResult* result, int column, void* data , int* length, char** value) { FBCMetaData* md = result->metaData; const FBCDatatypeMetaData* dtmd = fbcmdDatatypeMetaDataAtIndex(md, column); unsigned dtc = fbcdmdDatatypeCode(dtmd); switch (dtc) { case FB_Boolean: { unsigned char v = *((unsigned char*)(data)); if (v == 255) phpfbestrdup("Unknown", length, value); else if (v == 0) phpfbestrdup("False", length, value); else phpfbestrdup("True", length, value); } break; case FB_PrimaryKey: case FB_Integer: { int v = *((int*)data); char b[128]; sprintf(b, "%d", v); phpfbestrdup(b, length, value); } break; case FB_SmallInteger: { short v = *((short*)data); char b[128]; sprintf(b, "%d", v); phpfbestrdup(b, length, value); } break; case FB_Float: case FB_Real: case FB_Double: case FB_Numeric: case FB_Decimal: { double v = *((double*)data); char b[128]; sprintf(b, "%f", v); phpfbestrdup(b, length, value); } break; case FB_Character: case FB_VCharacter: { char* v = (char*)data; phpfbestrdup(v, length, value); } break; case FB_Bit: case FB_VBit: { const FBCColumnMetaData* clmd = fbcmdColumnMetaDataAtIndex(md, column); struct bitValue { unsigned int nBytes; unsigned char* bytes; }; struct bitValue* ptr = data; unsigned nBits = ptr->nBytes * 8; if (dtc == FB_Bit) nBits = fbcdmdLength(fbccmdDatatype(clmd)); if (nBits %8 == 0) { unsigned i; unsigned int l = nBits / 8; *length = l*2+3+1; if (value) { char* r = emalloc(l*2+3+1); r[0] = 'X'; r[1] = '\''; for (i = 0; i < nBits / 8; i++) { char c[4]; sprintf(c, "%02x", ptr->bytes[i]); r[i*2+2] = c[0]; r[i*2+3] = c[1]; } r[i*2+2] = '\''; r[i*2+3] = 0; *value = r; } } else { unsigned i; unsigned int l = nBits; *length = l*2+3+1; if (value) { char* r = emalloc(l*2+3+1); r[0] = 'B'; r[1] = '\''; for (i = 0; i < nBits; i++) { int bit = 0; if (i/8 < ptr->nBytes) bit = ptr->bytes[i/8] & (1<<(7-(i%8))); r[i*2+2] = bit?'1':'0'; } r[i*2+2] = '\''; r[i*2+3] = 0; *value = r; } } } break; case FB_Date: case FB_Time: case FB_TimeTZ: case FB_Timestamp: case FB_TimestampTZ: { char* v = (char*)data; phpfbestrdup(v, length, value); } break; case FB_YearMonth: { char b[128]; int v = *((unsigned int*)data); sprintf(b, "%d", v); phpfbestrdup(b, length, value); } break; case FB_DayTime: { char b[128]; double seconds = *((double*)data); sprintf(b, "%f", seconds); phpfbestrdup(b, length, value); } break; case FB_CLOB: case FB_BLOB: { if (*((unsigned char*) data) == '\1') { /* Direct */ *length = ((FBCBlobDirect *)data)->blobSize; *value = estrndup((char *)((FBCBlobDirect *)data)->blobData, *length); } else { FBCBlobHandle *lobHandle; unsigned char *bytes = (unsigned char *)data; char *handle = (char *)(&bytes[1]); lobHandle = fbcbhInitWithHandle(handle); *length = fbcbhBlobSize(lobHandle); if (result->lobMode == FBSQL_LOB_HANDLE) { phpfbestrdup(fbcbhDescription(lobHandle), length, value); } else { if (dtc == FB_BLOB) *value = estrndup((char *)fbcdcReadBLOB(result->link->connection, lobHandle), *length); else *value = estrndup((char *)fbcdcReadCLOB(result->link->connection, lobHandle), *length); } fbcbhRelease(lobHandle); } } break; default: php_error(E_ERROR, "Unimplemented type"); break; } } /* {{{ phpfbSqlResult */ void phpfbSqlResult(INTERNAL_FUNCTION_PARAMETERS, PHPFBResult* result, int rowIndex, int columnIndex) { void** row; if (result->list) { FBCPList* columns = (FBCPList*)fbcplValueForKey(result->list, "COLUMNS"); FBCPList* column = (FBCPList*)fbcplValueAtIndex(columns, result->rowIndex); if (columnIndex == 0) { /* Name */ FBCPList* name = (FBCPList*)fbcplValueForKey(column, "NAME"); RETURN_STRING((char *)fbcplString((FBCPList*)name), 1); } else if (columnIndex == 2) { /* Length */ FBCPList* name = (FBCPList*)fbcplValueForKey(column, "WIDTH"); RETURN_STRING((char *)fbcplString((FBCPList*)name), 1); } else if (columnIndex == 1) { /* Type */ FBCPList* name = (FBCPList*)fbcplValueForKey(column, "DATATYPE"); RETURN_STRING((char *)fbcplString((FBCPList*)name), 1); } else if (columnIndex == 3) { /* Flags */ RETURN_STRING("", 1); } else { RETURN_STRING("", 1); } } else if (result->array) { /* Special case for get dbs */ RETURN_STRING(fbaObjectAtIndex(result->array, rowIndex), 1); } else if (!phpfbFetchRow(result, rowIndex)) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "No such row %d in result set %d", rowIndex, rowIndex); RETURN_FALSE; } else if (columnIndex >= result->columnCount) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "No such column %d in result set %d", columnIndex, rowIndex); RETURN_FALSE; } else { row = fbcrhRowAtIndex(result->rowHandler, rowIndex); if (row == NULL) { RETURN_FALSE; } else if (row[columnIndex]) { phpfbColumnAsString(result, columnIndex, row[columnIndex], &Z_STRLEN_P(return_value), &Z_STRVAL_P(return_value)); Z_TYPE_P(return_value) = IS_STRING; } else { RETURN_NULL(); } } } /* }}} */ /* {{{ proto mixed fbsql_result(int result [, int row [, mixed field]]) ??? */ PHP_FUNCTION(fbsql_result) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **row = NULL, **field = NULL; int rowIndex; int columnIndex; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &row)==FAILURE) { RETURN_FALSE; } break; case 3: if (zend_get_parameters_ex(3, &fbsql_result_index, &row, &field)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); rowIndex = result->rowIndex; if (row) { convert_to_long_ex(row); rowIndex = Z_LVAL_PP(row); } columnIndex = result->columnIndex; if (field) { if ((Z_TYPE_PP(field) == IS_STRING) && (result->metaData)) { for (columnIndex =0; columnIndex < result->columnCount; columnIndex ++) { const FBCColumnMetaData* cmd = fbcmdColumnMetaDataAtIndex(result->metaData, columnIndex); const char* lbl = fbccmdLabelName(cmd); if (strcmp((char*)lbl, Z_STRVAL_PP(field)) == 0) break; } if (columnIndex == result->columnCount) RETURN_FALSE; } else { convert_to_long_ex(field); columnIndex = Z_LVAL_PP(field); if (columnIndex < 0) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Illegal column index - %d", columnIndex); RETURN_FALSE; } } } phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, rowIndex, columnIndex); result->columnIndex++; if (result->columnIndex == result->columnCount) { result->rowIndex++; result->columnIndex = 0; } } /* }}} */ /* {{{ proto int fbsql_next_result(int result) Switch to the next result if multiple results are available */ PHP_FUNCTION(fbsql_next_result) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); result->currentResult++; if (result->currentResult < result->selectResults) { if (result->fetchHandle) { FBCMetaData *md = fbcdcCancelFetch(result->link->connection, result->fetchHandle); fbcmdRelease(md); } if (result->rowHandler) fbcrhRelease(result->rowHandler); result->metaData = (FBCMetaData*)fbcmdMetaDataAtIndex(result->ResultmetaData, result->currentResult); result->fetchHandle = fbcmdFetchHandle(result->metaData); result->rowHandler = NULL; result->batchSize = FB_SQL_G(batchSize); result->rowCount = 0x7fffffff; result->columnCount = fbcmdColumnCount(result->metaData);; result->rowIndex = 0; result->columnIndex = 0; result->row = NULL; result->array = NULL; result->list = NULL; if (result->link) result->link->affectedRows = fbcmdRowCount(result->metaData); RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto int fbsql_num_rows(int result) Get number of rows */ PHP_FUNCTION(fbsql_num_rows) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL; int rowCount; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); if (result->array) rowCount = result->rowCount; else { rowCount = fbcmdRowCount(result->metaData); if (rowCount == -1) { phpfbFetchRow(result, 0x7fffffff); rowCount = result->rowCount; } } RETURN_LONG(rowCount); } /* }}} */ /* {{{ proto int fbsql_num_fields(int result) Get number of fields in the result set */ PHP_FUNCTION(fbsql_num_fields) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); RETURN_LONG(result->columnCount); } /* }}} */ /* {{{ proto array fbsql_fetch_row(resource result) Fetch a row of data. Returns an indexed array */ PHP_FUNCTION(fbsql_fetch_row) { php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_NUM); } /* }}} */ /* {{{ proto object fbsql_fetch_assoc(resource result) Detch a row of data. Returns an assoc array */ PHP_FUNCTION(fbsql_fetch_assoc) { php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_ASSOC); } /* }}} */ /* {{{ proto object fbsql_fetch_object(resource result [, int result_type]) Fetch a row of data. Returns an object */ PHP_FUNCTION(fbsql_fetch_object) { php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_ASSOC); if (Z_TYPE_P(return_value)==IS_ARRAY) { object_and_properties_init(return_value, &zend_standard_class_def, Z_ARRVAL_P(return_value)); } } /* }}} */ /* {{{ proto array fbsql_fetch_array(resource result [, int result_type]) Fetches a result row as an array (associative, numeric or both)*/ PHP_FUNCTION(fbsql_fetch_array) { php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_BOTH); } /* }}} */ static void _parse_list(zval** return_value, FBCPList* list) { int count = fbcplCount(list); int i,j; for (i=0; irowIndex; if (((result_type & FBSQL_NUM) != FBSQL_NUM) && ((result_type & FBSQL_ASSOC) != FBSQL_ASSOC)) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Illegal result type use FBSQL_NUM, FBSQL_ASSOC, or FBSQL_BOTH."); RETURN_FALSE; } if (array_init(return_value)==FAILURE) { RETURN_FALSE; } if (result->fetchHandle == NULL) { if (result->array == NULL && result->list == NULL) { RETURN_FALSE; } if (result->rowIndex >= result->rowCount) { RETURN_FALSE; } if (result->list) { char* key; FBCPList* value; value = (FBCPList*)fbcplValueAtIndex(result->list, result->rowIndex); key = (char*)fbcplKeyAtIndex(result->list, result->rowIndex); if (key && key[0] == 2) key = NULL; if (fbcplIsDictionary(value)) { zval *value_array; MAKE_STD_ZVAL(value_array); array_init(value_array); _parse_list(&value_array, value); if (result_type & FBSQL_NUM || key == NULL) { add_index_zval(return_value, 0, value_array); } if (result_type & FBSQL_ASSOC && key != NULL) { add_assoc_zval(return_value, key, value_array); } } else if (fbcplIsArray(value)) { zval *value_array; int valcount = fbcplCount(value); int j; MAKE_STD_ZVAL(value_array); array_init(value_array); for (j=0; jarray, result->rowIndex)), 0); } if (result_type & FBSQL_ASSOC) { add_assoc_string(return_value, "Database", estrdup(fbaObjectAtIndex(result->array, result->rowIndex)), 0); } } } else { if (result->rowCount == 0) { RETURN_FALSE; } if (result->rowCount == 0x7fffffff) { if (!phpfbFetchRow(result, result->rowIndex)) { RETURN_FALSE; } } row = fbcrhRowAtIndex(result->rowHandler, rowIndex); if (row == NULL) { RETURN_FALSE; } for (i=0; i < result->columnCount; i++) { if (row[i]) { char* value; unsigned int length; unsigned int c = 0; phpfbColumnAsString(result, i, row[i], &length, &value); if (result_type & FBSQL_NUM) { add_index_stringl(return_value, i, value, length, c); c = 1; } if (result_type & FBSQL_ASSOC) { char* key = (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, i)); add_assoc_stringl(return_value, key, value, length, c); } } else { if (result_type & FBSQL_NUM) { add_index_unset(return_value, i); } if (result_type & FBSQL_ASSOC) { char* key = (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, i)); add_assoc_unset(return_value, key); } } } } result->rowIndex++; result->columnIndex = 0; } /* {{{ proto int fbsql_data_seek(int result, int row_number) Move the internal row counter to the specified row_number */ PHP_FUNCTION(fbsql_data_seek) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **row_number = NULL; unsigned int rowIndex; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &row_number)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); convert_to_long_ex(row_number); rowIndex = Z_LVAL_PP(row_number); if (rowIndex < 0) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Illegal row_index (%i)", rowIndex); RETURN_FALSE; } if (result->rowCount == 0x7fffffff) phpfbFetchRow(result, rowIndex); if (rowIndex > result->rowCount) RETURN_FALSE; result->rowIndex = rowIndex; result->columnIndex = 0; RETURN_TRUE; } /* }}} */ /* {{{ proto array fbsql_fetch_lengths(int result) Returns an array of the lengths of each column in the result set */ PHP_FUNCTION(fbsql_fetch_lengths) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL; int i; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); if (result->row == NULL) RETURN_FALSE; if (array_init(return_value)==FAILURE) RETURN_FALSE; for (i=0; i < result->columnCount; i++) { unsigned length = 0; if (result->row[i]) phpfbColumnAsString(result, i, result->row[i], &length, NULL); add_index_long(return_value, i, length); } } /* }}} */ /* {{{ proto object fbsql_fetch_field(int result [, int field_index]) Get the field properties for a specified field_index */ PHP_FUNCTION(fbsql_fetch_field) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **field_index = NULL; int column = -1; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); column = result->columnIndex; if (field_index) { convert_to_long_ex(field_index); column = Z_LVAL_PP(field_index); if (column < 0 || column >= result->columnCount) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "%d no such column in result", column); RETURN_FALSE; } } if (object_init(return_value)==FAILURE) { RETURN_FALSE; } add_property_string(return_value, "name", (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1); add_property_string(return_value, "table", (char*)fbccmdTableName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1); add_property_long(return_value, "max_length", fbcdmdLength(fbccmdDatatype(fbcmdColumnMetaDataAtIndex(result->metaData, column)))); add_property_string(return_value, "type", (char*)fbcdmdDatatypeString(fbcmdDatatypeMetaDataAtIndex(result->metaData, column)), 1); add_property_long(return_value, "not_null", !fbccmdIsNullable(fbcmdColumnMetaDataAtIndex(result->metaData, column))); /* Remember to add the rest */ /* add_property_long(return_value, "primary_key", IS_PRI_KEY(fbsql_field->flags)?1:0); */ /* add_property_long(return_value, "multiple_key", (fbsql_field->flags&MULTIPLE_KEY_FLAG?1:0)); */ /* add_property_long(return_value, "unique_key", (fbsql_field->flags&UNIQUE_KEY_FLAG?1:0)); */ /* add_property_long(return_value, "numeric", IS_NUM(Z_TYPE_P(fbsql_field))?1:0); */ /* add_property_long(return_value, "blob", IS_BLOB(fbsql_field->flags)?1:0); */ /* add_property_long(return_value, "unsigned", (fbsql_field->flags&UNSIGNED_FLAG?1:0)); */ /* add_property_long(return_value, "zerofill", (fbsql_field->flags&ZEROFILL_FLAG?1:0)); */ } /* }}} */ /* {{{ proto bool fbsql_field_seek(int result [, int field_index]) ??? */ PHP_FUNCTION(fbsql_field_seek) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **field_index = NULL; int column = -1; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); column = result->columnIndex; if (field_index) { convert_to_long_ex(field_index); column = Z_LVAL_PP(field_index); if (column < 0 || column >= result->columnCount) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "%d no such column in result", column); RETURN_FALSE; } } result->columnIndex = column; RETURN_TRUE; } /* }}} */ /* {{{ proto string fbsql_field_name(int result [, int field_index]) Get the column name for a specified field_index */ PHP_FUNCTION(fbsql_field_name) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **field_index = NULL; int column = -1; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); column = result->columnIndex; if (field_index) { convert_to_long_ex(field_index); column = Z_LVAL_PP(field_index); if (column < 0 || column >= result->columnCount) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "%d no such column in result", column); RETURN_FALSE; } } if (result->list) { phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 0); } else if (result->metaData) { RETURN_STRING((char *)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1); result->columnIndex = column; } } /* }}} */ /* {{{ proto string fbsql_field_table(int result [, int field_index]) Get the table name for a specified field_index */ PHP_FUNCTION(fbsql_field_table) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **field_index = NULL; int column = -1; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); column = result->columnIndex; if (field_index) { convert_to_long_ex(field_index); column = Z_LVAL_PP(field_index); if (column < 0 || column >= result->columnCount) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "%d no such column in result", column); RETURN_FALSE; } } RETURN_STRING((char *)fbccmdTableName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1); } /* }}} */ /* {{{ proto string fbsql_field_len(int result [, int field_index]) Get the column length for a specified field_index */ PHP_FUNCTION(fbsql_field_len) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **field_index = NULL; int column = -1; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); column = result->columnIndex; if (field_index) { convert_to_long_ex(field_index); column = Z_LVAL_PP(field_index); if (column < 0 || column >= result->columnCount) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "%d no such column in result", column); RETURN_FALSE; } } if (result->list) { phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 2); } else if (result->metaData) { RETURN_LONG(fbcdmdLength(fbccmdDatatype(fbcmdColumnMetaDataAtIndex(result->metaData, column)))); } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto string fbsql_field_type(int result [, int field_index]) Get the field type for a specified field_index */ PHP_FUNCTION(fbsql_field_type) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **field_index = NULL; int column = -1; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); column = result->columnIndex; if (field_index) { convert_to_long_ex(field_index); column = Z_LVAL_PP(field_index); if (column < 0 || column >= result->columnCount) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "%d no such column in result", column); RETURN_FALSE; } } if (result->list) { phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 1); } else if (result->metaData) { RETURN_STRING((char *)fbcdmdDatatypeString (fbcmdDatatypeMetaDataAtIndex(result->metaData, column)), 1); } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto string fbsql_field_flags(int result [, int field_index]) ??? */ PHP_FUNCTION(fbsql_field_flags) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **field_index = NULL; int column = -1; char buf[512]; int len; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); column = result->columnIndex; if (field_index) { convert_to_long_ex(field_index); column = Z_LVAL_PP(field_index); if (column < 0 || column >= result->columnCount) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "%d no such column in result", column); RETURN_FALSE; } } strcpy(buf, ""); if (!fbccmdIsNullable(fbcmdColumnMetaDataAtIndex(result->metaData, column))) { strcat(buf, "not_null "); } #if 0 if (IS_PRI_KEY(fbsql_field->flags)) { strcat(buf, "primary_key "); } if (fbsql_field->flags&UNIQUE_KEY_FLAG) { strcat(buf, "unique_key "); } if (fbsql_field->flags&MULTIPLE_KEY_FLAG) { strcat(buf, "multiple_key "); } if (IS_BLOB(fbsql_field->flags)) { strcat(buf, "blob "); } if (fbsql_field->flags&UNSIGNED_FLAG) { strcat(buf, "unsigned "); } if (fbsql_field->flags&ZEROFILL_FLAG) { strcat(buf, "zerofill "); } if (fbsql_field->flags&BINARY_FLAG) { strcat(buf, "binary "); } if (fbsql_field->flags&ENUM_FLAG) { strcat(buf, "enum "); } if (fbsql_field->flags&AUTO_INCREMENT_FLAG) { strcat(buf, "auto_increment "); } if (fbsql_field->flags&TIMESTAMP_FLAG) { strcat(buf, "timestamp "); } #endif len = strlen(buf); /* remove trailing space, if present */ if (len && buf[len-1] == ' ') { buf[len-1] = 0; len--; } RETURN_STRING(buf, 1); } /* }}} */ /* {{{ proto string fbsql_table_name(resource result, int index) Retreive the table name for index after a call to fbsql_list_tables() */ PHP_FUNCTION(fbsql_table_name) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL, **table_index; unsigned index; char* value; unsigned int length; void** row; switch (ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &fbsql_result_index, &table_index)==FAILURE) { RETURN_FALSE; } convert_to_long_ex(table_index); break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); index = Z_LVAL_PP(table_index); if (index < 0) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "Illegal index (%i)", index); RETURN_FALSE; } if (result->rowCount == 0x7fffffff) phpfbFetchRow(result, index); if (index > result->rowCount) RETURN_FALSE; result->rowIndex = index; result->columnIndex = 0; row = fbcrhRowAtIndex(result->rowHandler, index); phpfbColumnAsString(result, 0, row[0], &length, &value); RETURN_STRINGL(value, length, 1); } /* }}} */ /* {{{ proto bool fbsql_free_result(resource result) free the memory used to store a result */ PHP_FUNCTION(fbsql_free_result) { PHPFBResult* result = NULL; zval **fbsql_result_index = NULL; switch (ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { RETURN_FALSE; } break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); zend_list_delete(Z_LVAL_PP(fbsql_result_index)); RETURN_TRUE; } /* }}} */ /* {{{ proto array fbsql_get_autostart_info([resource link_identifier]) ??? */ PHP_FUNCTION(fbsql_get_autostart_info) { PHPFBLink* phpLink = NULL; zval **fbsql_link_index = NULL; int id; FBCAutoStartInfo* asInfo; switch (ZEND_NUM_ARGS()) { case 0: id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; } ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); if (phpLink->execHandler == NULL) { if (FB_SQL_G(generateWarnings)) php_error(E_WARNING, "No valid Exec handler available for this connection"); RETURN_FALSE; } else { array_init(return_value); asInfo = fbcehGetAutoStartInfo(phpLink->execHandler); if (asInfo != NULL) { unsigned i; for (i=0; iinfoLines); i++) { FBArray* infoLine = fbaObjectAtIndex(asInfo->infoLines, i); /* if (fbaCount(infoLine) == 2) { fbaObjectAtIndex(infoLine, 0); fbaObjectAtIndex(infoLine, 1); } else { */ add_index_string(return_value, i, fbaObjectAtIndex(infoLine, 0), 1); /* } */ } } } } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/fbsql/php_fbsql.h0100644000175200000240000001051707535303124015205 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Frank M. Kromann | +----------------------------------------------------------------------+ */ /* $Id: php_fbsql.h,v 1.20.2.1 2025/09/04 04:04:36 kalowsky Exp $ */ #define HAVE_FBSQL 1 #ifndef _PHP_FBSQL_H #define _PHP_FBSQL_H #if COMPILE_DL_FBSQL #undef HAVE_FBSQL #define HAVE_FBSQL 1 #endif #if HAVE_FBSQL extern zend_module_entry fbsql_module_entry; #define fbsql_module_ptr &fbsql_module_entry #include PHP_MINIT_FUNCTION(fbsql); PHP_MSHUTDOWN_FUNCTION(fbsql); PHP_RINIT_FUNCTION(fbsql); PHP_RSHUTDOWN_FUNCTION(fbsql); PHP_MINFO_FUNCTION(fbsql); PHP_FUNCTION(fbsql_connect); PHP_FUNCTION(fbsql_pconnect); PHP_FUNCTION(fbsql_close); PHP_FUNCTION(fbsql_select_db); PHP_FUNCTION(fbsql_change_user); PHP_FUNCTION(fbsql_create_db); PHP_FUNCTION(fbsql_drop_db); PHP_FUNCTION(fbsql_start_db); PHP_FUNCTION(fbsql_stop_db); PHP_FUNCTION(fbsql_db_status); PHP_FUNCTION(fbsql_query); PHP_FUNCTION(fbsql_db_query); PHP_FUNCTION(fbsql_list_dbs); PHP_FUNCTION(fbsql_list_tables); PHP_FUNCTION(fbsql_list_fields); PHP_FUNCTION(fbsql_error); PHP_FUNCTION(fbsql_errno); PHP_FUNCTION(fbsql_affected_rows); PHP_FUNCTION(fbsql_insert_id); PHP_FUNCTION(fbsql_result); PHP_FUNCTION(fbsql_next_result); PHP_FUNCTION(fbsql_num_rows); PHP_FUNCTION(fbsql_num_fields); PHP_FUNCTION(fbsql_fetch_row); PHP_FUNCTION(fbsql_fetch_array); PHP_FUNCTION(fbsql_fetch_assoc); PHP_FUNCTION(fbsql_fetch_object); PHP_FUNCTION(fbsql_data_seek); PHP_FUNCTION(fbsql_fetch_lengths); PHP_FUNCTION(fbsql_fetch_field); PHP_FUNCTION(fbsql_field_seek); PHP_FUNCTION(fbsql_free_result); PHP_FUNCTION(fbsql_field_name); PHP_FUNCTION(fbsql_field_table); PHP_FUNCTION(fbsql_field_len); PHP_FUNCTION(fbsql_field_type); PHP_FUNCTION(fbsql_field_flags); PHP_FUNCTION(fbsql_table_name); PHP_FUNCTION(fbsql_set_transaction); PHP_FUNCTION(fbsql_autocommit); PHP_FUNCTION(fbsql_commit); PHP_FUNCTION(fbsql_rollback); PHP_FUNCTION(fbsql_create_blob); PHP_FUNCTION(fbsql_create_clob); PHP_FUNCTION(fbsql_set_lob_mode); PHP_FUNCTION(fbsql_read_blob); PHP_FUNCTION(fbsql_read_clob); PHP_FUNCTION(fbsql_blob_size); PHP_FUNCTION(fbsql_clob_size); PHP_FUNCTION(fbsql_hostname); PHP_FUNCTION(fbsql_database); PHP_FUNCTION(fbsql_database_password); PHP_FUNCTION(fbsql_username); PHP_FUNCTION(fbsql_password); PHP_FUNCTION(fbsql_warnings); PHP_FUNCTION(fbsql_get_autostart_info); /* PHP_FUNCTION(fbsql_set_autostart_info); */ static void php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type); static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent); ZEND_BEGIN_MODULE_GLOBALS(fbsql) long allowPersistent; long generateWarnings; long autoCommit; long maxPersistent; long maxLinks; long maxConnections; long maxResults; long batchSize; char *hostName; char *databaseName; char *databasePassword; char *userName; char *userPassword; long persistentCount; long linkCount; long linkIndex; ZEND_END_MODULE_GLOBALS(fbsql) #ifdef ZTS # define FB_SQL_G(v) TSRMG(fbsql_globals_id, zend_fbsql_globals *, v) #else # define FB_SQL_G(v) (fbsql_globals.v) #endif /*#ifndef ZTS /* No need for external definitions */ /*extern fbsql_module* phpfbModule; */ /*#endif */ #else /* HAVE_FBSQL */ #define fbsql_module_ptr NULL #error not ok #endif /* HAVE_FBSQL */ #define phpext_fbsql_ptr fbsql_module_ptr #endif /* _PHP_FBSQL_H */ php-4.2.3/ext/fdf/0040755000175200000240000000000007535765574012532 5ustar zeevstaffphp-4.2.3/ext/fdf/CREDITS0100644000175200000240000000002207206176566013531 0ustar zeevstaffFDF Uwe Steinmann php-4.2.3/ext/fdf/Makefile.in0100644000175200000240000000026007413553673014560 0ustar zeevstaff LTLIBRARY_NAME = libfdf.la LTLIBRARY_SOURCES = fdf.c LTLIBRARY_SHARED_NAME = fdf.la LTLIBRARY_SHARED_LIBADD = $(FDFTK_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/fdf/config.m40100644000175200000240000000173607445755225014235 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.16.2.1 2025/03/20 00:40:53 sniper Exp $ dnl PHP_ARG_WITH(fdftk, for FDF support, [ --with-fdftk[=DIR] Include FDF support.]) if test "$PHP_FDFTK" != "no"; then for i in /usr /usr/local $PHP_FDFTK; do if test -r $i/include/FdfTk.h; then FDFTK_DIR=$i elif test -r $i/include/fdftk.h; then AC_DEFINE(HAVE_FDFTK_H_LOWER,1,[ ]) FDFTK_DIR=$i fi done if test -z "$FDFTK_DIR"; then AC_MSG_ERROR(FdfTk.h or fdftk.h not found. Please reinstall the fdftk distribution.) fi PHP_ADD_INCLUDE($FDFTK_DIR/include) FDFLIBRARY="" for i in fdftk FdfTk; do PHP_CHECK_LIBRARY($i, FDFOpen, [FDFLIBRARY=$i], [], [-L$FDFTK_DIR/lib -lm]) done if test -z "$FDFLIBRARY"; then AC_MSG_ERROR(fdftk module requires >= fdftk 2.0) fi AC_DEFINE(HAVE_FDFLIB,1,[ ]) PHP_ADD_LIBRARY_WITH_PATH($FDFLIBRARY, $FDFTK_DIR/lib, FDFTK_SHARED_LIBADD) PHP_SUBST(FDFTK_SHARED_LIBADD) PHP_EXTENSION(fdf, $ext_shared) fi php-4.2.3/ext/fdf/fdf.c0100644000175200000240000005202207405423111013401 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Uwe Steinmann | | Hartmut Holzgraefe | +----------------------------------------------------------------------+ */ /* $Id: fdf.c,v 1.63 2025/12/11 15:29:13 sebastian Exp $ */ /* FdfTk lib 2.0 is a Complete C/C++ FDF Toolkit available from http://beta1.adobe.com/ada/acrosdk/forms.html. */ /* Note that there is no code from the FdfTk lib in this file */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if HAVE_FDFLIB #include "SAPI.h" #include "ext/standard/info.h" #include "php_open_temporary_file.h" #include "php_variables.h" #include "php_fdf.h" static int le_fdf; SAPI_POST_HANDLER_FUNC(fdf_post_handler); /* {{{ fdf_functions[] */ function_entry fdf_functions[] = { PHP_FE(fdf_open, NULL) PHP_FE(fdf_create, NULL) PHP_FE(fdf_close, NULL) PHP_FE(fdf_save, NULL) PHP_FE(fdf_get_value, NULL) PHP_FE(fdf_set_value, NULL) PHP_FE(fdf_next_field_name, NULL) PHP_FE(fdf_set_ap, NULL) PHP_FE(fdf_set_status, NULL) PHP_FE(fdf_get_status, NULL) PHP_FE(fdf_set_file, NULL) PHP_FE(fdf_get_file, NULL) PHP_FE(fdf_add_template, NULL) PHP_FE(fdf_set_flags, NULL) PHP_FE(fdf_set_opt, NULL) PHP_FE(fdf_set_submit_form_action, NULL) PHP_FE(fdf_set_javascript_action, NULL) PHP_FE(fdf_set_encoding, NULL) {NULL, NULL, NULL} }; /* }}} */ zend_module_entry fdf_module_entry = { STANDARD_MODULE_HEADER, "fdf", fdf_functions, PHP_MINIT(fdf), PHP_MSHUTDOWN(fdf), NULL, NULL, PHP_MINFO(fdf), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_FDF ZEND_GET_MODULE(fdf) #endif static void phpi_FDFClose(zend_rsrc_list_entry *rsrc TSRMLS_DC) { FDFDoc fdf = (FDFDoc)rsrc->ptr; (void) FDFClose(fdf); } #define FDF_POST_CONTENT_TYPE "application/vnd.fdf" static sapi_post_entry php_fdf_post_entry = { FDF_POST_CONTENT_TYPE, sizeof(FDF_POST_CONTENT_TYPE)-1, sapi_read_standard_form_data, fdf_post_handler }; /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(fdf) { FDFErc err; le_fdf = zend_register_list_destructors_ex(phpi_FDFClose, NULL, "fdf", module_number); /* add handler for Acrobat FDF form post requests */ sapi_register_post_entry(&php_fdf_post_entry); /* Constants used by fdf_set_opt() */ REGISTER_LONG_CONSTANT("FDFValue", FDFValue, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFStatus", FDFStatus, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFFile", FDFFile, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFID", FDFID, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFFf", FDFFf, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFSetFf", FDFSetFf, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFClearFf", FDFClearFf, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFFlags", FDFFlags, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFSetF", FDFSetF, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFClrF", FDFClrF, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFAP", FDFAP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFAS", FDFAS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFAction", FDFAction, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFAA", FDFAA, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFAPRef", FDFAPRef, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFIF", FDFIF, CONST_CS | CONST_PERSISTENT); /* Constants used by fdf_set_javascript_action() */ REGISTER_LONG_CONSTANT("FDFEnter", FDFEnter, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFExit", FDFExit, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFDown", FDFDown, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFUp", FDFUp, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFFormat", FDFFormat, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFValidate", FDFValidate, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFKeystroke", FDFKeystroke, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FDFCalculate", FDFCalculate, CONST_CS | CONST_PERSISTENT); #ifdef PHP_WIN32 return SUCCESS; #endif if((err = FDFInitialize()) == FDFErcOK) return SUCCESS; return FAILURE; } /* }}} */ /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(fdf) { /* need to use a PHPAPI function here because it is external module in windows */ php_info_print_table_start(); php_info_print_table_row(2, "FDF Support", "enabled"); php_info_print_table_row(2, "FdfTk Version", FDFGetVersion() ); php_info_print_table_end(); } /* }}} */ /* {{{ PHP_MSHUTDOWN_FUNCTION */ PHP_MSHUTDOWN_FUNCTION(fdf) { FDFErc err; /* remove handler for Acrobat FDF form post requests */ sapi_unregister_post_entry(&php_fdf_post_entry); #ifdef PHP_WIN32 return SUCCESS; #endif if((err = FDFFinalize()) == FDFErcOK) return SUCCESS; return FAILURE; } /* }}} */ /* {{{ proto int fdf_open(string filename) Opens a new FDF document */ PHP_FUNCTION(fdf_open) { zval **file; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(file); err = FDFOpen(Z_STRVAL_PP(file), 0, &fdf); if(err != FDFErcOK || !fdf) { php_error(E_WARNING, "Could not open fdf document: %s", Z_STRVAL_PP(file)); RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf); } /* }}} */ /* {{{ proto int fdf_create(void) Creates a new FDF document */ PHP_FUNCTION(fdf_create) { FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 0) { WRONG_PARAM_COUNT; } err = FDFCreate(&fdf); if(err != FDFErcOK || !fdf) { php_error(E_WARNING, "Error creating new fdf document!"); RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf); } /* }}} */ /* {{{ proto bool fdf_close(int fdfdoc) Closes the FDF document */ PHP_FUNCTION(fdf_close) { zval **fdfp; FDFDoc fdf; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); zend_list_delete(Z_RESVAL_PP(fdfp)); } /* }}} */ /* {{{ proto string fdf_get_value(int fdfdoc, string fieldname) Gets the value of a field as string */ PHP_FUNCTION(fdf_get_value) { zval **fdfp, **fieldname; ASInt32 nr, size = 256; char *buffer; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &fieldname) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(fieldname); buffer = emalloc(size); err = FDFGetValue(fdf, Z_STRVAL_PP(fieldname), buffer, size-1, &nr); if(err == FDFErcBufTooShort && nr > 0 ) { buffer = erealloc(buffer, nr+1); err = FDFGetValue(fdf, Z_STRVAL_PP(fieldname), buffer, nr, &nr); } if(err != FDFErcOK) { php_error(E_WARNING, "Error getting value of %s", Z_STRVAL_PP(fieldname)); efree(buffer); RETURN_FALSE; } RETVAL_STRING(buffer, 1); efree(buffer); } /* }}} */ /* {{{ proto bool fdf_set_value(int fdfdoc, string fieldname, string value, int isname) Sets the value of a field */ PHP_FUNCTION(fdf_set_value) { zval **fdfp, **fieldname, **value, **isname; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &value, &isname) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(fieldname); convert_to_string_ex(value); convert_to_long_ex(isname); err = FDFSetValue(fdf, Z_STRVAL_PP(fieldname), Z_STRVAL_PP(value), (ASBool) Z_LVAL_PP(isname)); if(err != FDFErcOK) { php_error(E_WARNING, "Error setting field: %s to value: %s", Z_STRVAL_PP(fieldname), Z_STRVAL_PP(value)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto string fdf_next_field_name(int fdfdoc [, string fieldname]) Gets the name of the next field name or the first field name */ PHP_FUNCTION(fdf_next_field_name) { zval **fdfp, **field; int argc=ZEND_NUM_ARGS(); ASInt32 length=256, nr; char *buffer=NULL, *fieldname=NULL; FDFDoc fdf; FDFErc err; if (argc > 2 || argc < 1 || zend_get_parameters_ex(argc, &fdfp, &field) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); if(argc == 2) { convert_to_string_ex(field); fieldname = Z_STRVAL_PP(field); } buffer = emalloc(length); err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr); if(err == FDFErcBufTooShort && nr > 0 ) { buffer = erealloc(buffer, nr+1); err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr); } if(err != FDFErcOK) { efree(buffer); php_error(E_WARNING,"Error getting next fieldname!"); RETURN_FALSE; } RETVAL_STRING(buffer, 1); efree(buffer); } /* }}} */ /* {{{ proto bool fdf_set_ap(int fdfdoc, string fieldname, int face, string filename, int pagenr) Sets the appearence of a field */ PHP_FUNCTION(fdf_set_ap) { zval **fdfp, **fieldname, **face, **filename, **pagenr; FDFDoc fdf; FDFErc err; FDFAppFace facenr; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &face, &filename, &pagenr) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(fieldname); convert_to_long_ex(face); convert_to_string_ex(filename); convert_to_long_ex(pagenr); switch(Z_LVAL_PP(face)) { case 1: facenr = FDFNormalAP; break; case 2: facenr = FDFRolloverAP; break; case 3: facenr = FDFDownAP; break; default: facenr = FDFNormalAP; } err = FDFSetAP(fdf, Z_STRVAL_PP(fieldname), facenr, NULL, Z_STRVAL_PP(filename), (ASInt32) Z_LVAL_PP(pagenr)); /* This should be made more intelligent, ie. use switch() with the possible errors this function can return. Or create global error handler function. */ if(err != FDFErcOK) { php_error(E_WARNING,"Error setting appearence of field: %s", Z_STRVAL_PP(fieldname)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool fdf_set_status(int fdfdoc, string status) Sets the value of /Status key */ PHP_FUNCTION(fdf_set_status) { zval **fdfp, **status; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &status) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(status); err = FDFSetStatus(fdf, Z_STRVAL_PP(status)); if(err != FDFErcOK) { php_error(E_WARNING,"Error setting fdf document status key to: %s", Z_STRVAL_PP(status)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto string fdf_get_status(int fdfdoc) Gets the value of /Status key */ PHP_FUNCTION(fdf_get_status) { zval **fdfp; ASInt32 nr, size = 256; char *buf; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); buf = emalloc(size); err = FDFGetStatus(fdf, buf, size-1, &nr); if(err == FDFErcBufTooShort && nr > 0 ) { buf = erealloc(buf, nr+1); err = FDFGetStatus(fdf, buf, size-1, &nr); } if(err != FDFErcOK) { php_error(E_WARNING,"Error getting fdf document status key!"); efree(buf); RETURN_FALSE; } RETVAL_STRING(buf, 1); efree(buf); } /* }}} */ /* {{{ proto bool fdf_set_file(int fdfdoc, string filename) Sets the value of /F key */ PHP_FUNCTION(fdf_set_file) { zval **fdfp, **filename; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &filename) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(filename); err = FDFSetFile(fdf, Z_STRVAL_PP(filename)); if(err != FDFErcOK) { php_error(E_WARNING,"Error setting filename key to: %s", Z_STRVAL_PP(filename)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto string fdf_get_file(int fdfdoc) Gets the value of /F key */ PHP_FUNCTION(fdf_get_file) { zval **fdfp; ASInt32 nr, size = 256; char *buf; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); buf = emalloc(size); err = FDFGetFile(fdf, buf, size-1, &nr); if(err == FDFErcBufTooShort && nr > 0 ) { buf = erealloc(buf, nr+1); err = FDFGetFile(fdf, buf, size-1, &nr); } if(err != FDFErcOK) { php_error(E_WARNING,"Error getting fdf document filename key!"); efree(buf); RETURN_FALSE; } RETVAL_STRING(buf, 1); efree(buf); } /* }}} */ /* {{{ proto bool fdf_save(int fdfdoc, string filename) Writes out the FDF file */ PHP_FUNCTION(fdf_save) { zval **fdfp, **filename; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &filename) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(filename); err = FDFSave(fdf, Z_STRVAL_PP(filename)); if(err != FDFErcOK) { php_error(E_WARNING,"Error saving fdf document into filename: %s", Z_STRVAL_PP(filename)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool fdf_add_template(int fdfdoc, int newpage, string filename, string template, int rename) Adds a template into the FDF document */ PHP_FUNCTION(fdf_add_template) { zval **fdfp, **newpage, **filename, **template, **rename; FDFDoc fdf; FDFErc err; pdfFileSpecRec filespec; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &newpage, &filename, &template, &rename) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_long_ex(newpage); convert_to_string_ex(filename); convert_to_string_ex(template); convert_to_long_ex(rename); filespec.FS = NULL; filespec.F = Z_STRVAL_PP(filename); filespec.Mac = NULL; filespec.DOS = NULL; filespec.Unix = NULL; filespec.ID[0] = NULL; filespec.ID[1] = NULL; filespec.bVolatile = false; err = FDFAddTemplate(fdf, Z_LVAL_PP(newpage), &filespec, Z_STRVAL_PP(template), Z_LVAL_PP(rename)); if(err != FDFErcOK) { php_error(E_WARNING,"Error adding template: %s into fdf document", Z_STRVAL_PP(template)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool fdf_set_flags(int fdfdoc, string fieldname, int whichflags, int newflags) Sets flags for a field in the FDF document */ PHP_FUNCTION(fdf_set_flags) { zval **fdfp, **fieldname, **flags, **newflags; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &flags, &newflags) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(fieldname); convert_to_long_ex(flags); convert_to_long_ex(newflags); err=FDFSetFlags(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(flags), Z_LVAL_PP(newflags)); if(err != FDFErcOK) { php_error(E_WARNING,"Error setting flags for field: %s", Z_STRVAL_PP(fieldname)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool fdf_set_opt(int fdfdoc, string fieldname, int element, string value, string name) Sets a value in the opt array for a field */ PHP_FUNCTION(fdf_set_opt) { zval **fdfp, **fieldname, **element, **value, **name; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &element, &value, &name) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(fieldname); convert_to_long_ex(element); convert_to_string_ex(value); convert_to_string_ex(name); err = FDFSetOpt(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(element), Z_STRVAL_PP(value), Z_STRVAL_PP(name)); if(err != FDFErcOK) { php_error(E_WARNING,"Error setting FDF option for field: %s", Z_STRVAL_PP(fieldname)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool fdf_set_submit_form_action(int fdfdoc, string fieldname, int whichtrigger, string url, int flags) Sets the submit form action for a field */ PHP_FUNCTION(fdf_set_submit_form_action) { zval **fdfp, **fieldname, **trigger, **url, **flags; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &trigger, &url, &flags) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(fieldname); convert_to_long_ex(trigger); convert_to_string_ex(url); convert_to_long_ex(flags); err = FDFSetSubmitFormAction(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(trigger), Z_STRVAL_PP(url), Z_LVAL_PP(flags)); if(err != FDFErcOK) { php_error(E_WARNING,"Error setting FDF submit action for field: %s", Z_STRVAL_PP(fieldname)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool fdf_set_javascript_action(int fdfdoc, string fieldname, int whichtrigger, string script) Sets the javascript action for a field */ PHP_FUNCTION(fdf_set_javascript_action) { zval **fdfp, **fieldname, **trigger, **script; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &trigger, &script) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(fieldname); convert_to_long_ex(trigger); convert_to_string_ex(script); err = FDFSetJavaScriptAction(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(trigger), Z_STRVAL_PP(script)); if(err != FDFErcOK) { php_error(E_WARNING,"Error setting FDF javascript action for field: %s", Z_STRVAL_PP(fieldname)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool fdf_set_encoding(int fdf_document, string encoding) Sets FDF encoding (either "Shift-JIS" or "Unicode") */ PHP_FUNCTION(fdf_set_encoding) { zval **fdfp, **enc; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &enc) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(enc); err = FDFSetEncoding(fdf, Z_STRVAL_PP(enc)); if(err != FDFErcOK) { php_error(E_WARNING,"Error setting FDF encoding: %s", Z_STRVAL_PP(enc)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ SAPI_POST_HANDLER_FUNC * SAPI post handler for FDF forms */ SAPI_POST_HANDLER_FUNC(fdf_post_handler) { FILE *fp; FDFDoc theFDF; char *name=NULL, *value=NULL, *p, *data; int name_len=0, value_len=0; char *lastfieldname =NULL; char *filename = NULL; FDFErc err; ASInt32 nBytes; zval *array_ptr = (zval *) arg; fp=php_open_temporary_file(NULL, "fdfdata.", &filename TSRMLS_CC); if(!fp) { if(filename) efree(filename); return; } fwrite(SG(request_info).post_data, SG(request_info).post_data_length, 1, fp); fclose(fp); /* Set HTTP_FDF_DATA variable */ data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length); SET_VAR_STRINGL("HTTP_FDF_DATA", data, SG(request_info).post_data_length); err = FDFOpen(filename, 0, &theFDF); if(err==FDFErcOK){ name = emalloc(name_len=256); value= emalloc(value_len=256); while (1) { err = FDFNextFieldName(theFDF, lastfieldname, name, name_len-1, &nBytes); if(err == FDFErcBufTooShort && nBytes >0 ) { name = erealloc(name, name_len=(nBytes+1)); err = FDFNextFieldName(theFDF, lastfieldname, name, name_len-1, &nBytes); } if(err != FDFErcOK || nBytes == 0) break; if(lastfieldname) efree(lastfieldname); lastfieldname = estrdup(name); err = FDFGetValue(theFDF, name, NULL, 0, &nBytes); if(err != FDFErcOK && err != FDFErcNoValue ) break; if(value_len0) { err = FDFGetValue(theFDF, name, value, value_len-1, &nBytes); if(err == FDFErcOK && nBytes != 0) { for(p=value;*p;p++) if(*p=='\r') *p='\n'; if(lastfieldname) efree(lastfieldname); lastfieldname = estrdup(name); php_register_variable(name, value, array_ptr TSRMLS_CC); } } } FDFClose(theFDF); VCWD_UNLINK((const char *)filename); efree(filename); if(name) efree(name); if(value) efree(value); if(lastfieldname) efree(lastfieldname); } } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/fdf/fdf.dsp0100644000175200000240000001153607336535534013772 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="fdf" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=fdf - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "fdf.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "fdf.mak" CFG="fdf - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "fdf - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "fdf - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "fdf - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FDFLIB=1 /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts.lib fdftk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_fdf.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "fdf - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FDFLIB=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386 # ADD LINK32 php4ts_debug.lib fdftk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_fdf.dll" /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "fdf - Win32 Release_TS" # Name "fdf - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\fdf.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_fdf.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project php-4.2.3/ext/fdf/php_fdf.h0100644000175200000240000000422407445755225014300 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Uwe Steinmann | +----------------------------------------------------------------------+ */ /* $Id: php_fdf.h,v 1.15.2.1 2025/03/20 00:40:53 sniper Exp $ */ #ifndef PHP_FDF_H #define PHP_FDF_H #if HAVE_FDFLIB #ifdef PHP_WIN32 #else #define UNIX_DEV #endif #if HAVE_FDFTK_H_LOWER # include #else # include #endif extern zend_module_entry fdf_module_entry; #define fdf_module_ptr &fdf_module_entry PHP_MINIT_FUNCTION(fdf); PHP_MSHUTDOWN_FUNCTION(fdf); PHP_MINFO_FUNCTION(fdf); PHP_FUNCTION(fdf_open); PHP_FUNCTION(fdf_close); PHP_FUNCTION(fdf_create); PHP_FUNCTION(fdf_save); PHP_FUNCTION(fdf_get_value); PHP_FUNCTION(fdf_set_value); PHP_FUNCTION(fdf_next_field_name); PHP_FUNCTION(fdf_set_ap); PHP_FUNCTION(fdf_get_status); PHP_FUNCTION(fdf_set_status); PHP_FUNCTION(fdf_set_file); PHP_FUNCTION(fdf_get_file); PHP_FUNCTION(fdf_add_template); PHP_FUNCTION(fdf_set_flags); PHP_FUNCTION(fdf_set_opt); PHP_FUNCTION(fdf_set_submit_form_action); PHP_FUNCTION(fdf_set_javascript_action); PHP_FUNCTION(fdf_set_encoding); #else #define fdf_module_ptr NULL #endif #define phpext_fdf_ptr fdf_module_ptr #endif /* PHP_FDF_H */ php-4.2.3/ext/fdf/setup.stub0100644000175200000240000000051106707466221014546 0ustar zeevstaff# $Source: /repository/php4/ext/fdf/Attic/setup.stub,v $ # $Id: setup.stub,v 1.1 2025/04/22 00:25:53 ssb Exp $ define_option with-fdftk 'Acrobat Forms (Ftf Toolkit 2.0) support? ' yesnodir \ 'no /usr/local ftktk install' \ ' Whether to use the Ftf Toolkit support to write/read .fdf-files.\n Tested for version 2.0!' php-4.2.3/ext/filepro/0040755000175200000240000000000007535765574013433 5ustar zeevstaffphp-4.2.3/ext/filepro/CREDITS0100644000175200000240000000002607206176566014436 0ustar zeevstaffFilePro Chad Robinson php-4.2.3/ext/filepro/Makefile.in0100644000175200000240000000021307103455162015445 0ustar zeevstaff LTLIBRARY_NAME = libfilepro.la LTLIBRARY_SOURCES = filepro.c LTLIBRARY_SHARED_NAME = filepro.la include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/filepro/config.m40100644000175200000240000000057007401753426015122 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.5 2025/11/30 18:59:34 sniper Exp $ dnl AC_ARG_WITH(filepro,[],[enable_filepro=$withval]) PHP_ARG_ENABLE(filepro,whether to enable the bundled filePro support, [ --enable-filepro Enable the bundled read-only filePro support.]) if test "$PHP_FILEPRO" = "yes"; then AC_DEFINE(HAVE_FILEPRO, 1, [ ]) PHP_EXTENSION(filepro, $ext_shared) fi php-4.2.3/ext/filepro/filepro.c0100644000175200000240000003364307446151437015231 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Chad Robinson | +----------------------------------------------------------------------+ */ /* $Id: filepro.c,v 1.43.2.1 2025/03/20 18:21:19 sesser Exp $ */ /* filePro 4.x support developed by Chad Robinson, chadr@brttech.com Contact Chad Robinson at BRT Technical Services Corp. for details. filePro is a registered trademark by Fiserv, Inc. This file contains no code or information that is not freely available from the filePro web site at http://www.fileproplus.com/ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "safe_mode.h" #include "fopen_wrappers.h" #include #ifdef PHP_WIN32 #include #else #include #endif #include #include "php_globals.h" #include "php_filepro.h" #if HAVE_FILEPRO typedef struct fp_field { char *name; char *format; int width; struct fp_field *next; } FP_FIELD; #ifdef THREAD_SAFE DWORD FPTls; static int numthreads=0; typedef struct fp_global_struct{ char *fp_database; signed int fp_fcount; signed int fp_keysize; FP_FIELD *fp_fieldlist; }fp_global_struct; #define FP_GLOBAL(a) fp_globals->a #define FP_TLS_VARS \ fp_global_struct *fp_globals; \ fp_globals=TlsGetValue(FPTls); #else #define FP_GLOBAL(a) a #define FP_TLS_VARS static char *fp_database = NULL; /* Database directory */ static signed int fp_fcount = -1; /* Column count */ static signed int fp_keysize = -1; /* Size of key records */ static FP_FIELD *fp_fieldlist = NULL; /* List of fields */ #endif /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(filepro) { #ifdef THREAD_SAFE fp_global_struct *fp_globals; #ifdef COMPILE_DL_FILEPRO CREATE_MUTEX(fp_mutex,"FP_TLS"); SET_MUTEX(fp_mutex); numthreads++; if (numthreads==1){ if ((FPTls=TlsAlloc())==0xFFFFFFFF){ FREE_MUTEX(fp_mutex); return 0; }} FREE_MUTEX(fp_mutex); #endif fp_globals = (fp_global_struct *) LocalAlloc(LPTR, sizeof(fp_global_struct)); TlsSetValue(FPTls, (void *) fp_globals); #endif FP_GLOBAL(fp_database)=NULL; FP_GLOBAL(fp_fcount)=-1; FP_GLOBAL(fp_keysize)=-1; FP_GLOBAL(fp_fieldlist)=NULL; return SUCCESS; } /* }}} */ /* {{{ PHP_MSHUTDOWN_FUNCTION */ PHP_MSHUTDOWN_FUNCTION(filepro) { #ifdef THREAD_SAFE fp_global_struct *fp_globals; fp_globals = TlsGetValue(FPTls); if (fp_globals != 0) LocalFree((HLOCAL) fp_globals); #ifdef COMPILE_DL_FILEPRO SET_MUTEX(fp_mutex); numthreads--; if (!numthreads){ if (!TlsFree(FPTls)){ FREE_MUTEX(fp_mutex); return 0; } } FREE_MUTEX(fp_mutex); #endif #endif return SUCCESS; } /* }}} */ function_entry filepro_functions[] = { PHP_FE(filepro, NULL) PHP_FE(filepro_rowcount, NULL) PHP_FE(filepro_fieldname, NULL) PHP_FE(filepro_fieldtype, NULL) PHP_FE(filepro_fieldwidth, NULL) PHP_FE(filepro_fieldcount, NULL) PHP_FE(filepro_retrieve, NULL) {NULL, NULL, NULL} }; zend_module_entry filepro_module_entry = { STANDARD_MODULE_HEADER, "filepro", filepro_functions, PHP_MINIT(filepro), PHP_MSHUTDOWN(filepro), NULL, NULL, NULL, NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_FILEPRO ZEND_GET_MODULE(filepro) #if (WIN32|WINNT) && defined(THREAD_SAFE) /*NOTE: You should have an odbc.def file where you export DllMain*/ BOOL WINAPI DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch( ul_reason_for_call ) { case DLL_PROCESS_ATTACH: if ((FPTls=TlsAlloc())==0xFFFFFFFF) { return 0; } break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: if (!TlsFree(FPTls)) { return 0; } break; } return 1; } #endif #endif /* * LONG filePro(STRING directory) * * Read and verify the map file. We store the field count and field info * internally, which means we become unstable if you modify the table while * a user is using it! We cannot lock anything since Web connections don't * provide the ability to later unlock what we locked. Be smart, be safe. */ /* {{{ proto bool filepro(string directory) Read and verify the map file */ PHP_FUNCTION(filepro) { pval *dir; FILE *fp; char workbuf[MAXPATHLEN]; char readbuf[256]; char *strtok_buf = NULL; int i; FP_FIELD *new_field, *tmp, *next; FP_TLS_VARS; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dir) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string(dir); /* free memory */ if (FP_GLOBAL(fp_database) != NULL) { efree (FP_GLOBAL(fp_database)); } /* free linked list of fields */ tmp = FP_GLOBAL(fp_fieldlist); while (tmp != NULL) { next = tmp->next; efree(tmp); tmp = next; } /* init the global vars */ FP_GLOBAL(fp_database) = NULL; FP_GLOBAL(fp_fieldlist) = NULL; FP_GLOBAL(fp_fcount) = -1; FP_GLOBAL(fp_keysize) = -1; snprintf(workbuf, sizeof(workbuf), "%s/map", Z_STRVAL_P(dir)); if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) { RETURN_FALSE; } if (php_check_open_basedir(workbuf TSRMLS_CC)) { RETURN_FALSE; } if (!(fp = VCWD_FOPEN(workbuf, "r"))) { php_error(E_WARNING, "filePro: cannot open map: [%d] %s", errno, strerror(errno)); RETURN_FALSE; } if (!fgets(readbuf, sizeof(readbuf), fp)) { fclose(fp); php_error(E_WARNING, "filePro: cannot read map: [%d] %s", errno, strerror(errno)); RETURN_FALSE; } /* Get the field count, assume the file is readable! */ if (strcmp(php_strtok_r(readbuf, ":", &strtok_buf), "map")) { php_error(E_WARNING, "filePro: map file corrupt or encrypted"); RETURN_FALSE; } FP_GLOBAL(fp_keysize) = atoi(php_strtok_r(NULL, ":", &strtok_buf)); php_strtok_r(NULL, ":", &strtok_buf); FP_GLOBAL(fp_fcount) = atoi(php_strtok_r(NULL, ":", &strtok_buf)); /* Read in the fields themselves */ for (i = 0; i < FP_GLOBAL(fp_fcount); i++) { if (!fgets(readbuf, sizeof(readbuf), fp)) { fclose(fp); php_error(E_WARNING, "filePro: cannot read map: [%d] %s", errno, strerror(errno)); RETURN_FALSE; } new_field = emalloc(sizeof(FP_FIELD)); new_field->next = NULL; new_field->name = estrdup(php_strtok_r(readbuf, ":", &strtok_buf)); new_field->width = atoi(php_strtok_r(NULL, ":", &strtok_buf)); new_field->format = estrdup(php_strtok_r(NULL, ":", &strtok_buf)); /* Store in forward-order to save time later */ if (!FP_GLOBAL(fp_fieldlist)) { FP_GLOBAL(fp_fieldlist) = new_field; } else { for (tmp = FP_GLOBAL(fp_fieldlist); tmp; tmp = tmp->next) { if (!tmp->next) { tmp->next = new_field; tmp = new_field; } } } } fclose(fp); FP_GLOBAL(fp_database) = estrndup(Z_STRVAL_P(dir), Z_STRLEN_P(dir)); RETVAL_TRUE; } /* }}} */ /* * LONG filePro_rowcount(void) * * Count the used rows in the database. filePro just marks deleted records * as deleted; they are not removed. Since no counts are maintained we need * to go in and count records ourselves. * * Errors return false, success returns the row count. */ /* {{{ proto int filepro_rowcount(void) Find out how many rows are in a filePro database */ PHP_FUNCTION(filepro_rowcount) { FILE *fp; char workbuf[MAXPATHLEN]; char readbuf[256]; int recsize = 0, records = 0; FP_TLS_VARS; if (ZEND_NUM_ARGS() != 0) { WRONG_PARAM_COUNT; } if (!FP_GLOBAL(fp_database)) { php_error(E_WARNING, "filePro: must set database directory first!\n"); RETURN_FALSE; } recsize = FP_GLOBAL(fp_keysize) + 19; /* 20 bytes system info -1 to save time later */ /* Now read the records in, moving forward recsize-1 bytes each time */ snprintf(workbuf, sizeof(workbuf), "%s/key", FP_GLOBAL(fp_database)); if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) { RETURN_FALSE; } if (php_check_open_basedir(workbuf TSRMLS_CC)) { RETURN_FALSE; } if (!(fp = VCWD_FOPEN(workbuf, "r"))) { php_error(E_WARNING, "filePro: cannot open key: [%d] %s", errno, strerror(errno)); RETURN_FALSE; } while (!feof(fp)) { if (fread(readbuf, 1, 1, fp) == 1) { if (readbuf[0]) records++; fseek(fp, recsize, SEEK_CUR); } } fclose(fp); RETVAL_LONG(records); } /* }}} */ /* * STRING filePro_fieldname(LONG field_number) * * Errors return false, success returns the name of the field. */ /* {{{ proto string filepro_fieldname(int fieldnumber) Gets the name of a field */ PHP_FUNCTION(filepro_fieldname) { pval *fno; FP_FIELD *lp; int i; FP_TLS_VARS; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &fno) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(fno); if (!FP_GLOBAL(fp_database)) { php_error(E_WARNING, "filePro: must set database directory first!\n"); RETURN_FALSE; } for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) { if (i == Z_LVAL_P(fno)) { RETURN_STRING(lp->name, 1); } } php_error(E_WARNING, "filePro: unable to locate field number %d.\n", Z_LVAL_P(fno)); RETVAL_FALSE; } /* }}} */ /* * STRING filePro_fieldtype(LONG field_number) * * Errors return false, success returns the type (edit) of the field */ /* {{{ proto string filepro_fieldtype(int field_number) Gets the type of a field */ PHP_FUNCTION(filepro_fieldtype) { pval *fno; FP_FIELD *lp; int i; FP_TLS_VARS; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &fno) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(fno); if (!FP_GLOBAL(fp_database)) { php_error(E_WARNING, "filePro: must set database directory first!\n"); RETURN_FALSE; } for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) { if (i == Z_LVAL_P(fno)) { RETURN_STRING(lp->format, 1); } } php_error(E_WARNING, "filePro: unable to locate field number %d.\n", Z_LVAL_P(fno)); RETVAL_FALSE; } /* }}} */ /* * STRING filePro_fieldwidth(int field_number) * * Errors return false, success returns the character width of the field. */ /* {{{ proto int filepro_fieldwidth(int field_number) Gets the width of a field */ PHP_FUNCTION(filepro_fieldwidth) { pval *fno; FP_FIELD *lp; int i; FP_TLS_VARS; if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &fno) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(fno); if (!FP_GLOBAL(fp_database)) { php_error(E_WARNING, "filePro: must set database directory first!\n"); RETURN_FALSE; } for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) { if (i == Z_LVAL_P(fno)) { RETURN_LONG(lp->width); } } php_error(E_WARNING, "filePro: unable to locate field number %d.\n", Z_LVAL_P(fno)); RETVAL_FALSE; } /* }}} */ /* * LONG filePro_fieldcount(void) * * Errors return false, success returns the field count. */ /* {{{ proto int filepro_fieldcount(void) Find out how many fields are in a filePro database */ PHP_FUNCTION(filepro_fieldcount) { FP_TLS_VARS; if (ZEND_NUM_ARGS() != 0) { WRONG_PARAM_COUNT; } if (!FP_GLOBAL(fp_database)) { php_error(E_WARNING, "filePro: must set database directory first!\n"); RETURN_FALSE; } /* Read in the first line from the map file */ RETVAL_LONG(FP_GLOBAL(fp_fcount)); } /* }}} */ /* * STRING filePro_retrieve(int row_number, int field_number) * * Errors return false, success returns the datum. */ /* {{{ proto string filepro_retrieve(int row_number, int field_number) Retrieves data from a filePro database */ PHP_FUNCTION(filepro_retrieve) { pval *rno, *fno; FP_FIELD *lp; FILE *fp; char workbuf[MAXPATHLEN]; char *readbuf; int i, fnum, rnum; long offset; FP_TLS_VARS; if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &rno, &fno) == FAILURE) { WRONG_PARAM_COUNT; } if (!FP_GLOBAL(fp_database)) { php_error(E_WARNING, "filePro: must set database directory first!\n"); RETURN_FALSE; } convert_to_long(rno); convert_to_long(fno); fnum = Z_LVAL_P(fno); rnum = Z_LVAL_P(rno); if (rnum < 0 || fnum < 0 || fnum >= FP_GLOBAL(fp_fcount)) { php_error(E_WARNING, "filepro: parameters out of range"); RETURN_FALSE; } offset = (rnum + 1) * (FP_GLOBAL(fp_keysize) + 20) + 20; /* Record location */ for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp && i < fnum; lp = lp->next, i++) { offset += lp->width; } if (!lp) { php_error(E_WARNING, "filePro: cannot locate field"); RETURN_FALSE; } /* Now read the record in */ snprintf(workbuf, sizeof(workbuf), "%s/key", FP_GLOBAL(fp_database)); if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) { RETURN_FALSE; } if (php_check_open_basedir(workbuf TSRMLS_CC)) { RETURN_FALSE; } if (!(fp = VCWD_FOPEN(workbuf, "r"))) { php_error(E_WARNING, "filePro: cannot open key: [%d] %s", errno, strerror(errno)); fclose(fp); RETURN_FALSE; } fseek(fp, offset, SEEK_SET); readbuf = emalloc (lp->width+1); if (fread(readbuf, lp->width, 1, fp) != 1) { php_error(E_WARNING, "filePro: cannot read data: [%d] %s", errno, strerror(errno)); efree(readbuf); fclose(fp); RETURN_FALSE; } readbuf[lp->width] = '\0'; fclose(fp); RETURN_STRING(readbuf, 0); } /* }}} */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/filepro/filepro.dsp0100644000175200000240000001137007165406571015566 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="filepro" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=filepro - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "filepro.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "filepro.mak" CFG="filepro - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "filepro - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "filepro - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "filepro - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FILEPRO_EXPORTS" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FILEPRO=1 /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_filepro.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" !ELSEIF "$(CFG)" == "filepro - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FILEPRO_EXPORTS" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FILEPRO=1 /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_filepro.dll" /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "filepro - Win32 Release_TS" # Name "filepro - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\filepro.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_filepro.h # End Source File # End Group # End Target # End Project php-4.2.3/ext/filepro/php_filepro.h0100644000175200000240000000401207437364640016073 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Chad Robinson | +----------------------------------------------------------------------+ */ /* $Id: php_filepro.h,v 1.9 2025/02/28 08:26:08 sebastian Exp $ */ /* filePro 4.x support developed by Chad Robinson, chadr@brttech.com Contact Chad Robinson at BRT Technical Services Corp. for details. filePro is a registered trademark by Fiserv, Inc. This file contains no code or information that is not freely available from the filePro web site at http://www.fileproplus.com/ */ #ifndef PHP_FILEPRO_H #define PHP_FILEPRO_H #if HAVE_FILEPRO extern zend_module_entry filepro_module_entry; #define phpext_filepro_ptr &filepro_module_entry PHP_FUNCTION(filepro); PHP_FUNCTION(filepro_rowcount); PHP_FUNCTION(filepro_fieldname); PHP_FUNCTION(filepro_fieldtype); PHP_FUNCTION(filepro_fieldwidth); PHP_FUNCTION(filepro_fieldcount); PHP_FUNCTION(filepro_retrieve); PHP_MINIT_FUNCTION(filepro); PHP_MSHUTDOWN_FUNCTION(filepro); #else #define phpext_filepro_ptr NULL #endif #endif /* PHP_FILEPRO_H */ php-4.2.3/ext/filepro/setup.stub0100644000175200000240000000036306707445406015456 0ustar zeevstaff# $Source: /repository/php4/ext/filepro/Attic/setup.stub,v $ # $Id: setup.stub,v 1.1 2025/04/21 22:02:46 ssb Exp $ define_option with-filepro 'filePro support? ' yesno no \ ' Whether to use the bundled filePro library. Read-access only.' php-4.2.3/ext/fribidi/0040755000175200000240000000000007535765574013403 5ustar zeevstaffphp-4.2.3/ext/fribidi/CREDITS0100644000175200000240000000002407337657421014403 0ustar zeevstaffFRIBIDI Onn Ben-Zvi php-4.2.3/ext/fribidi/Makefile.in0100644000175200000240000000044207204007234015414 0ustar zeevstaff# $Id: Makefile.in,v 1.1 2025/11/13 15:54:04 onn Exp $ LTLIBRARY_NAME = libfribidi.la LTLIBRARY_SOURCES = fribidi.c LTLIBRARY_SHARED_NAME = fribidi.la LTLIBRARY_SHARED_LIBADD = $(FRIBIDI_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk EXTRA_INCLUDES = $(FRIBIDI_INCLUDE) php-4.2.3/ext/fribidi/README0100644000175200000240000000336107337657421014252 0ustar zeevstaffPurpose ======= This extension is basically a wrapper for the FriBidi implementation of the Unicode Bidi algorithm. The need for such an algorithm rises from the bidirectional language usage done by applications. Arabic/Hebrew embedded within English is such a case. Usage ===== The only function used is fribidi_log2vis (logical to visual). Input: 1) The Logical string. 2) Base direction of application - 'L' or 'R'. 3) The char code being used, which can be one of the following constants: a) FRIBIDI_CHARSET_UTF8 b) FRIBIDI_CHARSET_8859_6 c) FRIBIDI_CHARSET_8859_8 d) FRIBIDI_CHARSET_CP1255 e) FRIBIDI_CHARSET_CP1256 f) FRIBIDI_CHARSET_ISIRI_3342 Note: Currently, FriBidi supports the above Character Codes alone. Output: A Visual string. Compiling =========== 1) Static - ./configure --with-fribidi=base-directory-of-FriBidi-installation-path (defaults to /usr/local). 2) dl - same, just add shared, to get .... --with-fribidi=shared,base.... Prerequisites ============= 1) FriBidi version 0.9.0 or later must be installed. Latest version can be obtained thru http://fribidi.sourceforge.net/ 2) glib header files: glib.h and glibconfig.h. Note ===== The function fribidi_log2vis computes three more arrays which are currently not passed back as output. These arrays are: 1) mapping from the logical to the visual sting. 2) mapping from the visual to the logical string. 3) embedding level of characters as figured out by the FriBidi algorithm. The extension needs further implementation to support this. p.s. - If you don't understand this, you probably don't need it. php-4.2.3/ext/fribidi/config.m40100644000175200000240000000450007401753426015067 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.7 2025/11/30 18:59:34 sniper Exp $ dnl PHP_ARG_WITH(fribidi, for FriBidi support, [ --with-fribidi[=DIR] Include fribidi support (requires FriBidi >=0.1.12).]) if test "$PHP_FRIBIDI" != "no"; then dnl if module was requested with default path of fribidi installation then dnl $PHP_FRIBIDI will be "yes" if test "$PHP_FRIBIDI" = "yes"; then PHP_FRIBIDI=/usr/local fi dnl check for fribidi header files AC_MSG_CHECKING([for header files in "$PHP_FRIBIDI/include/fribidi"]) if test -f $PHP_FRIBIDI/include/fribidi/fribidi.h && test -f $PHP_FRIBIDI/include/fribidi/fribidi_types.h && test -f $PHP_FRIBIDI/include/fribidi/fribidi_char_sets.h; then FRIBIDI_INCDIR=$PHP_FRIBIDI/include/fribidi/ AC_MSG_RESULT([found all]) else AC_MSG_RESULT([missing]) fi dnl check for fribidi shared library AC_MSG_CHECKING([for libfribidi.so file in "$PHP_FRIBIDI/lib/"]) if test -f "$PHP_FRIBIDI/lib/libfribidi.so" ; then FRIBIDI_LIBDIR=$PHP_FRIBIDI/lib/ AC_MSG_RESULT([found]) else AC_MSG_RESULT([missing]) fi dnl check for glib header files AC_MSG_CHECKING([for glibconfig.h in "usr/lib/glib/include/"]) if test -f /usr/lib/glib/include/glibconfig.h ; then AC_MSG_RESULT([found]) GLIB_INCDIR=/usr/lib/glib/include/ else AC_MSG_RESULT([missing]) fi dnl check for fribidi version AC_MSG_CHECKING([for FriBidi version]) FRIBIDI_CONFIG=$PHP_FRIBIDI/bin/fribidi-config if test -x $FRIBIDI_CONFIG; then fribidi_version_full=`$FRIBIDI_CONFIG --version` fi fribidi_version=`echo ${fribidi_version_full} | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` if test "$fribidi_version" -ge 9000; then AC_MSG_RESULT([$fribidi_version_full]) else AC_MSG_ERROR(FriBidi version 0.9.0 or later is required to compile php with FriBidi support) fi AC_MSG_CHECKING([sanity to build extension]) if test -n "$FRIBIDI_INCDIR" && test -n "$FRIBIDI_LIBDIR" && test -n "$GLIB_INCDIR"; then AC_MSG_RESULT([yes]) PHP_ADD_INCLUDE("$FRIBIDI_INCDIR") PHP_ADD_INCLUDE("$GLIB_INCDIR") PHP_ADD_LIBRARY_WITH_PATH(fribidi,"$FRIBIDI_LIBDIR", FRIBIDI_SHARED_LIBADD) AC_DEFINE(HAVE_FRIBIDI, 1, [ ]) PHP_EXTENSION(fribidi, $ext_shared) PHP_SUBST(FRIBIDI_SHARED_LIBADD) else AC_MSG_RESULT([no]) fi fi php-4.2.3/ext/fribidi/fribidi.c0100755000175200000240000002015607437364640015151 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Onn Ben-Zvi | +----------------------------------------------------------------------+ */ /* $Id: fribidi.c,v 1.13 2025/02/28 08:26:08 sebastian Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "php_fribidi.h" #include "fribidi.h" /* You should tweak config.m4 so this symbol (or some else suitable) gets defined. */ #if HAVE_FRIBIDI /* If you declare any globals in php_fribidi.h uncomment this: ZEND_DECLARE_MODULE_GLOBALS(fribidi) */ /* True global resources - no need for thread safety here */ /* static int le_fribidi; */ /* Every user visible function must have an entry in fribidi_functions[]. */ function_entry fribidi_functions[] = { PHP_FE(fribidi_log2vis, NULL) {NULL, NULL, NULL} /* Must be the last line in fribidi_functions[] */ }; zend_module_entry fribidi_module_entry = { STANDARD_MODULE_HEADER, "fribidi", fribidi_functions, PHP_MINIT(fribidi), PHP_MSHUTDOWN(fribidi), NULL, NULL, PHP_MINFO(fribidi), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_FRIBIDI ZEND_GET_MODULE(fribidi) #endif /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(fribidi) { REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_UTF8", FRIBIDI_CHARSET_UTF8, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_8859_6", FRIBIDI_CHARSET_ISO8859_6, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_8859_8", FRIBIDI_CHARSET_ISO8859_8, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_CP1255", FRIBIDI_CHARSET_CP1255, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_CP1256", FRIBIDI_CHARSET_CP1256, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FRIBIDI_CHARSET_ISIRI_3342", FRIBIDI_CHARSET_ISIRI_3342, CONST_CS | CONST_PERSISTENT); return SUCCESS; } /* }}} */ /* {{{ PHP_MSHUTDOWN_FUNCTION */ PHP_MSHUTDOWN_FUNCTION(fribidi) { return SUCCESS; } /* }}} */ /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(fribidi) { php_info_print_table_start(); php_info_print_table_header(2, "fribidi support", "enabled"); php_info_print_table_end(); } /* }}} */ /*--------------------------------------------------------------*/ /* Name: fribidi_log2vis */ /* Purpose: convert a logical string to a visual one */ /* Input: 1) The logical string. */ /* 2) Base direction - */ /* Possible values: */ /* a) "L" - base language is left to right. */ /* b) "R" - base language is right to left. */ /* c) empty - base language is determined */ /* automatically by the FriBiDi algorithm */ /* 3) Character code being used - */ /* Possible values (i.e., char sets supported) */ /* FRIBIDI_CHARSET_UTF8 */ /* FRIBIDI_CHARSET_8859_6 */ /* FRIBIDI_CHARSET_8859_8 */ /* FRIBIDI_CHARSET_CP1255 */ /* FRIBIDI_CHARSET_CP1256 */ /* FRIBIDI_CHARSET_ISIRI_3342 */ /* */ /* Output: on success: The visual string. */ /* on failure: */ /*--------------------------------------------------------------*/ /* {{{ proto string fribidi_log2vis(string str, string direction, int charset) Convert a logical string to a visual one */ PHP_FUNCTION(fribidi_log2vis) { zval **parameter1, **parameter2, **parameter3; FriBidiChar *u_logical_str, *u_visual_str; /* unicode strings .... */ char *inString; guchar *outString; int len, alloc_len, utf8_len; FriBidiCharType base_dir; guint16 *position_L_to_V_list; guint16 *position_V_to_L_list; guint8 *embedding_level_list; /* get parameters from input */ if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, ¶meter1, ¶meter2, ¶meter3) == FAILURE) { WRONG_PARAM_COUNT; } /* convert input to expected type.... */ convert_to_string_ex(parameter1); convert_to_string_ex(parameter2); convert_to_long_ex(parameter3); /* allocate space and prepare all local variables */ len = Z_STRLEN_PP(parameter1); inString = estrndup(Z_STRVAL_PP(parameter1), len); alloc_len = len+1; u_logical_str = (FriBidiChar*) emalloc(sizeof(FriBidiChar)*alloc_len); u_visual_str = (FriBidiChar*) emalloc(sizeof(FriBidiChar)*alloc_len); position_L_to_V_list = (guint16*) emalloc(sizeof(guint16)*alloc_len); position_V_to_L_list = (guint16*) emalloc(sizeof(guint16)*alloc_len); embedding_level_list = (guint8*) emalloc(sizeof(guint8)*alloc_len); outString = (guchar*)emalloc(sizeof(guchar)*alloc_len); if(inString[len-1] == '\n') { inString[len-1] = '\0'; } switch(Z_LVAL_PP(parameter3)) { case FRIBIDI_CHARSET_UTF8: utf8_len=fribidi_utf8_to_unicode(inString, u_logical_str); break; case FRIBIDI_CHARSET_ISO8859_6: fribidi_iso8859_6_to_unicode(inString, u_logical_str); break; case FRIBIDI_CHARSET_ISO8859_8: fribidi_iso8859_8_to_unicode(inString, u_logical_str); break; case FRIBIDI_CHARSET_CP1255: fribidi_cp1255_to_unicode(inString, u_logical_str); break; case FRIBIDI_CHARSET_CP1256: fribidi_cp1256_to_unicode(inString, u_logical_str); break; case FRIBIDI_CHARSET_ISIRI_3342: fribidi_isiri_3342_to_unicode(inString, u_logical_str); break; default: zend_error(E_ERROR,"unknown character set %d
", Z_LVAL_PP(parameter3)); } /* visualize the logical.... */ if ((Z_STRVAL_PP(parameter2))[0] == 'R') { base_dir = FRIBIDI_TYPE_RTL; } else if (Z_STRVAL_PP(parameter2)[0] == 'L') base_dir = FRIBIDI_TYPE_LTR; else base_dir = FRIBIDI_TYPE_N; fribidi_log2vis(u_logical_str, len, &base_dir, u_visual_str, position_L_to_V_list, position_V_to_L_list, embedding_level_list); /* convert back to original char set */ switch(Z_LVAL_PP(parameter3)) { case FRIBIDI_CHARSET_UTF8: fribidi_unicode_to_utf8(u_visual_str, utf8_len , outString); break; case FRIBIDI_CHARSET_ISO8859_6: fribidi_unicode_to_iso8859_6(u_visual_str, len , outString); break; case FRIBIDI_CHARSET_ISO8859_8: fribidi_unicode_to_iso8859_8(u_visual_str, len , outString); break; case FRIBIDI_CHARSET_CP1255: fribidi_unicode_to_cp1255(u_visual_str, len , outString); break; case FRIBIDI_CHARSET_CP1256: fribidi_unicode_to_cp1256(u_visual_str, len , outString); break; case FRIBIDI_CHARSET_ISIRI_3342: fribidi_unicode_to_isiri_3342(u_visual_str, len , outString); break; default: zend_error(E_ERROR,"unknown character set %d
", Z_LVAL_PP(parameter3)); } efree(u_logical_str); efree(u_visual_str); efree(position_L_to_V_list); efree(position_V_to_L_list); efree(embedding_level_list); RETURN_STRING(outString, 1); } /* }}} */ #endif /* HAVE_FRIBIDI */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/fribidi/fribidi.php0100644000175200000240000000032507204007776015503 0ustar zeevstaff php-4.2.3/ext/fribidi/php_fribidi.h0100644000175200000240000000517307437364641016025 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Onn Ben-Zvi | +----------------------------------------------------------------------+ */ #ifndef PHP_FRIBIDI_H #define PHP_FRIBIDI_H #if HAVE_FRIBIDI #include "fribidi.h" #include "../standard/info.h" extern zend_module_entry fribidi_module_entry; #define phpext_fribidi_ptr &fribidi_module_entry typedef struct _php_fribidi_rsrc{ guint16 *position_L_to_V_list; guint16 *position_V_to_L_list; guint8 *embedding_level_list; guchar *out_string; } php_fribidi_rsrc; #ifdef PHP_WIN32 #define PHP_FRIBIDI_API __declspec(dllexport) #else #define PHP_FRIBIDI_API #endif PHP_MINIT_FUNCTION(fribidi); PHP_MSHUTDOWN_FUNCTION(fribidi); PHP_RINIT_FUNCTION(fribidi); PHP_RSHUTDOWN_FUNCTION(fribidi); PHP_MINFO_FUNCTION(fribidi); ZEND_FUNCTION(fribidi_log2vis); /*void php_fribidi_free_rsrc(php_fribidi_rsrc* p_rsrc);*/ /* Declare any global variables you may need between the BEGIN and END macros here: ZEND_BEGIN_MODULE_GLOBALS(fribidi) int global_variable; ZEND_END_MODULE_GLOBALS(fribidi) */ /* In every function that needs to use variables in php_fribidi_globals, do call FRIBIDILS_FETCH(); after declaring other variables used by that function, and always refer to them as FRIBIDIG(variable). You are encouraged to rename these macros something shorter, see examples in any other php module directory. */ #ifdef ZTS #define FRIBIDIG(v) TSRMG(fribidi_globals_id, php_fribidi_globals *, v) #else #define FRIBIDIG(v) (fribidi_globals.v) #endif #else #define phpext_fribidi_ptr NULL #endif #endif /* PHP_FRIBIDI_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/ftp/0040755000175200000240000000000007535765574012564 5ustar zeevstaffphp-4.2.3/ext/ftp/CREDITS0100644000175200000240000000002307206176572013561 0ustar zeevstaffFTP Andrew Skalski php-4.2.3/ext/ftp/Makefile.in0100644000175200000240000000021107103433452014572 0ustar zeevstaff LTLIBRARY_NAME = libftp.la LTLIBRARY_SOURCES = php_ftp.c ftp.c LTLIBRARY_SHARED_NAME = ftp.la include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/ftp/config.m40100644000175200000240000000044307401753426014252 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.6 2025/11/30 18:59:34 sniper Exp $ dnl PHP_ARG_ENABLE(ftp,whether to enable FTP support, [ --enable-ftp Enable FTP support]) if test "$PHP_FTP" = "yes"; then AC_DEFINE(HAVE_FTP,1,[Whether you want FTP support]) PHP_EXTENSION(ftp, $ext_shared) fi php-4.2.3/ext/ftp/ftp.c0100644000175200000240000005442507445472551013516 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Andrew Skalski | +----------------------------------------------------------------------+ */ /* $Id: ftp.c,v 1.44.2.2 2025/03/18 23:16:57 vlad Exp $ */ #include "php.h" #if HAVE_FTP #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #ifdef PHP_WIN32 #include #else #ifdef HAVE_SYS_TYPES_H #include #endif #include #include #include #include #endif #include #if HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif #include "ftp.h" #include "ext/standard/fsock.h" /* define closesocket macro for portability */ #ifndef PHP_WIN32 #undef closesocket #define closesocket close #endif /* sends an ftp command, returns true on success, false on error. * it sends the string "cmd args\r\n" if args is non-null, or * "cmd\r\n" if args is null */ static int ftp_putcmd( ftpbuf_t *ftp, const char *cmd, const char *args); /* wrapper around send/recv to handle timeouts */ static int my_send(ftpbuf_t *ftp, int s, void *buf, size_t len); static int my_recv(ftpbuf_t *ftp, int s, void *buf, size_t len); static int my_accept(ftpbuf_t *ftp, int s, struct sockaddr *addr, int *addrlen); /* reads a line the socket , returns true on success, false on error */ static int ftp_readline(ftpbuf_t *ftp); /* reads an ftp response, returns true on success, false on error */ static int ftp_getresp(ftpbuf_t *ftp); /* sets the ftp transfer type */ static int ftp_type(ftpbuf_t *ftp, ftptype_t type); /* opens up a data stream */ static databuf_t* ftp_getdata(ftpbuf_t *ftp); /* accepts the data connection, returns updated data buffer */ static databuf_t* data_accept(databuf_t *data, ftpbuf_t *ftp); /* closes the data connection, returns NULL */ static databuf_t* data_close(databuf_t *data); /* generic file lister */ static char** ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path); /* IP and port conversion box */ union ipbox { unsigned long l[2]; unsigned short s[4]; unsigned char c[8]; }; /* {{{ ftp_open */ ftpbuf_t* ftp_open(const char *host, short port, long timeout_sec) { ftpbuf_t *ftp; int size; /* alloc the ftp structure */ ftp = calloc(1, sizeof(*ftp)); if (ftp == NULL) { perror("calloc"); return NULL; } ftp->fd = php_hostconnect(host, (unsigned short) (port ? port : 21), SOCK_STREAM, (int) timeout_sec); if (ftp->fd == -1) { goto bail; } /* Default Settings */ ftp->timeout_sec = timeout_sec; size = sizeof(ftp->localaddr); memset(&ftp->localaddr, 0, size); if (getsockname(ftp->fd, (struct sockaddr*) &ftp->localaddr, &size) == -1) { perror("getsockname"); goto bail; } if (!ftp_getresp(ftp) || ftp->resp != 220) { goto bail; } return ftp; bail: if (ftp->fd != -1) closesocket(ftp->fd); free(ftp); return NULL; } /* }}} */ /* {{{ ftp_close */ ftpbuf_t* ftp_close(ftpbuf_t *ftp) { if (ftp == NULL) return NULL; if (ftp->fd != -1) closesocket(ftp->fd); ftp_gc(ftp); free(ftp); return NULL; } /* }}} */ /* {{{ ftp_gc */ void ftp_gc(ftpbuf_t *ftp) { if (ftp == NULL) return; free(ftp->pwd); ftp->pwd = NULL; free(ftp->syst); ftp->syst = NULL; } /* }}} */ /* {{{ ftp_quit */ int ftp_quit(ftpbuf_t *ftp) { if (ftp == NULL) return 0; if (!ftp_putcmd(ftp, "QUIT", NULL)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 221) return 0; free(ftp->pwd); ftp->pwd = NULL; return 1; } /* }}} */ /* {{{ ftp_login */ int ftp_login(ftpbuf_t *ftp, const char *user, const char *pass) { if (ftp == NULL) return 0; if (!ftp_putcmd(ftp, "USER", user)) return 0; if (!ftp_getresp(ftp)) return 0; if (ftp->resp == 230) return 1; if (ftp->resp != 331) return 0; if (!ftp_putcmd(ftp, "PASS", pass)) return 0; if (!ftp_getresp(ftp)) return 0; return (ftp->resp == 230); } /* }}} */ /* {{{ ftp_reinit */ int ftp_reinit(ftpbuf_t *ftp) { if (ftp == NULL) return 0; ftp_gc(ftp); if (!ftp_putcmd(ftp, "REIN", NULL)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 220) return 0; return 1; } /* }}} */ /* {{{ ftp_syst */ const char* ftp_syst(ftpbuf_t *ftp) { char *syst, *end; if (ftp == NULL) return NULL; /* default to cached value */ if (ftp->syst) return ftp->syst; if (!ftp_putcmd(ftp, "SYST", NULL)) return NULL; if (!ftp_getresp(ftp) || ftp->resp != 215) return NULL; syst = ftp->inbuf; if ((end = strchr(syst, ' '))) *end = 0; ftp->syst = strdup(syst); if (end) *end = ' '; return ftp->syst; } /* }}} */ /* {{{ ftp_pwd */ const char* ftp_pwd(ftpbuf_t *ftp) { char *pwd, *end; if (ftp == NULL) return NULL; /* default to cached value */ if (ftp->pwd) return ftp->pwd; if (!ftp_putcmd(ftp, "PWD", NULL)) return NULL; if (!ftp_getresp(ftp) || ftp->resp != 257) return NULL; /* copy out the pwd from response */ if ((pwd = strchr(ftp->inbuf, '"')) == NULL) return NULL; end = strrchr(++pwd, '"'); *end = 0; ftp->pwd = strdup(pwd); *end = '"'; return ftp->pwd; } /* }}} */ /* {{{ ftp_exec */ int ftp_exec(ftpbuf_t *ftp, const char *cmd) { if (ftp == NULL) return 0; if (!ftp_putcmd(ftp, "SITE EXEC", cmd)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 200) return 0; return 1; } /* }}} */ /* {{{ ftp_chdir */ int ftp_chdir(ftpbuf_t *ftp, const char *dir) { if (ftp == NULL) return 0; free(ftp->pwd); ftp->pwd = NULL; if (!ftp_putcmd(ftp, "CWD", dir)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 250) return 0; return 1; } /* }}} */ /* {{{ ftp_cdup */ int ftp_cdup(ftpbuf_t *ftp) { if (ftp == NULL) return 0; free(ftp->pwd); ftp->pwd = NULL; if (!ftp_putcmd(ftp, "CDUP", NULL)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 250) return 0; return 1; } /* }}} */ /* {{{ ftp_mkdir */ char* ftp_mkdir(ftpbuf_t *ftp, const char *dir) { char *mkd, *end; if (ftp == NULL) return NULL; if (!ftp_putcmd(ftp, "MKD", dir)) return NULL; if (!ftp_getresp(ftp) || ftp->resp != 257) return NULL; /* copy out the dir from response */ if ((mkd = strchr(ftp->inbuf, '"')) == NULL) { mkd = strdup(dir); return mkd; } end = strrchr(++mkd, '"'); *end = 0; mkd = strdup(mkd); *end = '"'; return mkd; } /* }}} */ /* {{{ ftp_rmdir */ int ftp_rmdir(ftpbuf_t *ftp, const char *dir) { if (ftp == NULL) return 0; if (!ftp_putcmd(ftp, "RMD", dir)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 250) return 0; return 1; } /* }}} */ /* {{{ ftp_nlist */ char** ftp_nlist(ftpbuf_t *ftp, const char *path) { return ftp_genlist(ftp, "NLST", path); } /* }}} */ /* {{{ ftp_list */ char** ftp_list(ftpbuf_t *ftp, const char *path) { return ftp_genlist(ftp, "LIST", path); } /* }}} */ /* {{{ ftp_type */ int ftp_type(ftpbuf_t *ftp, ftptype_t type) { char typechar[2] = "?"; if (ftp == NULL) return 0; if (type == Z_TYPE_P(ftp)) return 1; if (type == FTPTYPE_ASCII) typechar[0] = 'A'; else if (type == FTPTYPE_IMAGE) typechar[0] = 'I'; else return 0; if (!ftp_putcmd(ftp, "TYPE", typechar)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 200) return 0; Z_TYPE_P(ftp) = type; return 1; } /* }}} */ /* {{{ ftp_pasv */ int ftp_pasv(ftpbuf_t *ftp, int pasv) { char *ptr; union ipbox ipbox; unsigned long b[6]; int n; struct sockaddr *sa; struct sockaddr_in *sin; if (ftp == NULL) return 0; if (pasv && ftp->pasv == 2) return 1; ftp->pasv = 0; if (!pasv) return 1; n = sizeof(ftp->pasvaddr); memset(&ftp->pasvaddr, 0, n); sa = (struct sockaddr *) &ftp->pasvaddr; #ifdef HAVE_IPV6 if (getpeername(ftp->fd, sa, &n) < 0) return 0; if (sa->sa_family == AF_INET6) { struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa; char *endptr, delimiter; /* try EPSV first */ if (!ftp_putcmd(ftp, "EPSV", NULL)) return 0; if (!ftp_getresp(ftp)) return 0; if (ftp->resp == 229) { /* parse out the port */ for (ptr = ftp->inbuf; *ptr && *ptr != '('; ptr++); if (!*ptr) return 0; delimiter = *++ptr; for (n = 0; *ptr && n < 3; ptr++) { if (*ptr == delimiter) n++; } sin6->sin6_port = htons((unsigned short) strtol(ptr, &endptr, 10)); if (ptr == endptr || *endptr != delimiter) return 0; ftp->pasv = 2; return 1; } } /* fall back to PASV */ #endif if (!ftp_putcmd(ftp, "PASV", NULL)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 227) return 0; /* parse out the IP and port */ for (ptr = ftp->inbuf; *ptr && !isdigit(*ptr); ptr++); n = sscanf(ptr, "%lu,%lu,%lu,%lu,%lu,%lu", &b[0], &b[1], &b[2], &b[3], &b[4], &b[5]); if (n != 6) return 0; for (n=0; n<6; n++) ipbox.c[n] = (unsigned char) b[n]; sin = (struct sockaddr_in *) sa; sin->sin_family = AF_INET; sin->sin_addr.s_addr = ipbox.l[0]; sin->sin_port = ipbox.s[2]; ftp->pasv = 2; return 1; } /* }}} */ /* {{{ ftp_get */ int ftp_get(ftpbuf_t *ftp, FILE *outfp, const char *path, ftptype_t type) { databuf_t *data = NULL; char *ptr; int lastch; int rcvd; if (ftp == NULL) return 0; if (!ftp_type(ftp, type)) { goto bail; } if ((data = ftp_getdata(ftp)) == NULL) { goto bail; } if (!ftp_putcmd(ftp, "RETR", path)) { goto bail; } if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125)) { goto bail; } if ((data = data_accept(data, ftp)) == NULL) { goto bail; } lastch = 0; while ((rcvd = my_recv(ftp, data->fd, data->buf, FTP_BUFSIZE))) { if (rcvd == -1) { goto bail; } if (type == FTPTYPE_ASCII) { for (ptr = data->buf; rcvd; rcvd--, ptr++) { if (lastch == '\r' && *ptr != '\n') putc('\r', outfp); if (*ptr != '\r') putc(*ptr, outfp); lastch = *ptr; } } else { fwrite(data->buf, rcvd, 1, outfp); } } if (type == FTPTYPE_ASCII && lastch == '\r') putc('\r', outfp); data = data_close(data); if (ferror(outfp)) { goto bail; } if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) { goto bail; } return 1; bail: data_close(data); return 0; } /* }}} */ /* {{{ ftp_put */ int ftp_put(ftpbuf_t *ftp, const char *path, FILE *infp, int insocket, int issock, ftptype_t type) { databuf_t *data = NULL; int size; char *ptr; int ch; if (ftp == NULL) return 0; if (!ftp_type(ftp, type)) goto bail; if ((data = ftp_getdata(ftp)) == NULL) goto bail; if (!ftp_putcmd(ftp, "STOR", path)) goto bail; if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125)) goto bail; if ((data = data_accept(data, ftp)) == NULL) goto bail; size = 0; ptr = data->buf; while ((ch = FP_FGETC(insocket, infp, issock))!=EOF && !FP_FEOF(insocket, infp, issock)) { /* flush if necessary */ if (FTP_BUFSIZE - size < 2) { if (my_send(ftp, data->fd, data->buf, size) != size) goto bail; ptr = data->buf; size = 0; } if (ch == '\n' && type == FTPTYPE_ASCII) { *ptr++ = '\r'; size++; } *ptr++ = ch; size++; } if (size && my_send(ftp, data->fd, data->buf, size) != size) goto bail; if (!issock && ferror(infp)) goto bail; data = data_close(data); if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) goto bail; return 1; bail: data_close(data); return 0; } /* }}} */ /* {{{ ftp_size */ int ftp_size(ftpbuf_t *ftp, const char *path) { if (ftp == NULL) return -1; if (!ftp_type(ftp, FTPTYPE_IMAGE)) return -1; if (!ftp_putcmd(ftp, "SIZE", path)) return -1; if (!ftp_getresp(ftp) || ftp->resp != 213) return -1; return atoi(ftp->inbuf); } /* }}} */ /* {{{ ftp_mdtm */ time_t ftp_mdtm(ftpbuf_t *ftp, const char *path) { time_t stamp; struct tm *gmt, tmbuf; struct tm tm; char *ptr; int n; if (ftp == NULL) return -1; if (!ftp_putcmd(ftp, "MDTM", path)) return -1; if (!ftp_getresp(ftp) || ftp->resp != 213) return -1; /* parse out the timestamp */ for (ptr = ftp->inbuf; *ptr && !isdigit(*ptr); ptr++); n = sscanf(ptr, "%4u%2u%2u%2u%2u%2u", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec); if (n != 6) return -1; tm.tm_year -= 1900; tm.tm_mon--; tm.tm_isdst = -1; /* figure out the GMT offset */ stamp = time(NULL); gmt = php_gmtime_r(&stamp, &tmbuf); gmt->tm_isdst = -1; /* apply the GMT offset */ tm.tm_sec += stamp - mktime(gmt); tm.tm_isdst = gmt->tm_isdst; stamp = mktime(&tm); return stamp; } /* }}} */ /* {{{ ftp_delete */ int ftp_delete(ftpbuf_t *ftp, const char *path) { if (ftp == NULL) return 0; if (!ftp_putcmd(ftp, "DELE", path)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 250) return 0; return 1; } /* }}} */ /* {{{ ftp_rename */ int ftp_rename(ftpbuf_t *ftp, const char *src, const char *dest) { if (ftp == NULL) return 0; if (!ftp_putcmd(ftp, "RNFR", src)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 350) return 0; if (!ftp_putcmd(ftp, "RNTO", dest)) return 0; if (!ftp_getresp(ftp) || ftp->resp != 250) return 0; return 1; } /* }}} */ /* {{{ ftp_site */ int ftp_site(ftpbuf_t *ftp, const char *cmd) { if (ftp == NULL) return 0; if (!ftp_putcmd(ftp, "SITE", cmd)) return 0; if (!ftp_getresp(ftp) || ftp->resp < 200 || ftp->resp >= 300) return 0; return 1; } /* }}} */ /* static functions */ /* {{{ ftp_putcmd */ int ftp_putcmd(ftpbuf_t *ftp, const char *cmd, const char *args) { int size; char *data; /* build the output buffer */ if (args && args[0]) { /* "cmd args\r\n\0" */ if (strlen(cmd) + strlen(args) + 4 > FTP_BUFSIZE) return 0; size = sprintf(ftp->outbuf, "%s %s\r\n", cmd, args); } else { /* "cmd\r\n\0" */ if (strlen(cmd) + 3 > FTP_BUFSIZE) return 0; size = sprintf(ftp->outbuf, "%s\r\n", cmd); } data = ftp->outbuf; if (my_send(ftp, ftp->fd, data, size) != size) return 0; return 1; } /* }}} */ /* {{{ ftp_readline */ int ftp_readline(ftpbuf_t *ftp) { int size, rcvd; char *data, *eol; /* shift the extra to the front */ size = FTP_BUFSIZE; rcvd = 0; if (ftp->extra) { memmove(ftp->inbuf, ftp->extra, ftp->extralen); rcvd = ftp->extralen; } data = ftp->inbuf; do { size -= rcvd; for (eol = data; rcvd; rcvd--, eol++) { if (*eol == '\r') { *eol = 0; ftp->extra = eol + 1; if (rcvd > 1 && *(eol + 1) == '\n') { ftp->extra++; rcvd--; } if ((ftp->extralen = --rcvd) == 0) ftp->extra = NULL; return 1; } else if (*eol == '\n') { *eol = 0; ftp->extra = eol + 1; if ((ftp->extralen = --rcvd) == 0) ftp->extra = NULL; return 1; } } data = eol; if ((rcvd = my_recv(ftp, ftp->fd, data, size)) < 1) { return 0; } } while (size); return 0; } /* }}} */ /* {{{ ftp_getresp */ int ftp_getresp(ftpbuf_t *ftp) { char *buf; if (ftp == NULL) return 0; buf = ftp->inbuf; ftp->resp = 0; while (1) { if (!ftp_readline(ftp)) { return 0; } /* Break out when the end-tag is found */ if (isdigit(ftp->inbuf[0]) && isdigit(ftp->inbuf[1]) && isdigit(ftp->inbuf[2]) && ftp->inbuf[3] == ' ') { break; } } /* translate the tag */ if (!isdigit(ftp->inbuf[0]) || !isdigit(ftp->inbuf[1]) || !isdigit(ftp->inbuf[2])) { return 0; } ftp->resp = 100 * (ftp->inbuf[0] - '0') + 10 * (ftp->inbuf[1] - '0') + (ftp->inbuf[2] - '0'); memmove(ftp->inbuf, ftp->inbuf + 4, FTP_BUFSIZE - 4); return 1; } /* }}} */ /* {{{ my_send */ int my_send(ftpbuf_t *ftp, int s, void *buf, size_t len) { fd_set write_set; struct timeval tv; int n, size, sent; size = len; while (size) { tv.tv_sec = ftp->timeout_sec; tv.tv_usec = 0; FD_ZERO(&write_set); FD_SET(s, &write_set); n = select(s + 1, NULL, &write_set, NULL, &tv); if (n < 1) { #ifndef PHP_WIN32 if (n == 0) errno = ETIMEDOUT; #endif return -1; } sent = send(s, buf, size, 0); if (sent == -1) return -1; buf = (char*) buf + sent; size -= sent; } return len; } /* }}} */ /* {{{ my_recv */ int my_recv(ftpbuf_t *ftp, int s, void *buf, size_t len) { fd_set read_set; struct timeval tv; int n; tv.tv_sec = ftp->timeout_sec; tv.tv_usec = 0; FD_ZERO(&read_set); FD_SET(s, &read_set); n = select(s + 1, &read_set, NULL, NULL, &tv); if (n < 1) { #ifndef PHP_WIN32 if (n == 0) errno = ETIMEDOUT; #endif return -1; } return recv(s, buf, len, 0); } /* }}} */ /* {{{ my_accept */ int my_accept(ftpbuf_t *ftp, int s, struct sockaddr *addr, int *addrlen) { fd_set accept_set; struct timeval tv; int n; tv.tv_sec = ftp->timeout_sec; tv.tv_usec = 0; FD_ZERO(&accept_set); FD_SET(s, &accept_set); n = select(s + 1, &accept_set, NULL, NULL, &tv); if (n < 1) { #ifndef PHP_WIN32 if (n == 0) errno = ETIMEDOUT; #endif return -1; } return accept(s, addr, addrlen); } /* }}} */ /* {{{ ftp_getdata */ databuf_t* ftp_getdata(ftpbuf_t *ftp) { int fd = -1; databuf_t *data; php_sockaddr_storage addr; struct sockaddr *sa; int size; union ipbox ipbox; char arg[sizeof("255, 255, 255, 255, 255, 255")]; struct timeval tv; /* ask for a passive connection if we need one */ if (ftp->pasv && !ftp_pasv(ftp, 1)) return NULL; /* alloc the data structure */ data = calloc(1, sizeof(*data)); if (data == NULL) { perror("calloc"); return NULL; } data->listener = -1; data->fd = -1; Z_TYPE_P(data) = Z_TYPE_P(ftp); sa = (struct sockaddr *) &ftp->localaddr; /* bind/listen */ if ((fd = socket(sa->sa_family, SOCK_STREAM, 0)) == -1) { perror("socket"); goto bail; } /* passive connection handler */ if (ftp->pasv) { /* clear the ready status */ ftp->pasv = 1; /* connect */ /* Win 95/98 seems not to like size > sizeof(sockaddr_in) */ size = php_sockaddr_size(&ftp->pasvaddr); tv.tv_sec = ftp->timeout_sec; tv.tv_usec = 0; if (php_connect_nonb(fd, (struct sockaddr*) &ftp->pasvaddr, size, &tv) == -1) { perror("connect"); goto bail; } data->fd = fd; return data; } /* active (normal) connection */ /* bind to a local address */ php_any_addr(sa->sa_family, &addr, 0); size = php_sockaddr_size(&addr); if (bind(fd, (struct sockaddr*) &addr, size) == -1) { perror("bind"); goto bail; } if (getsockname(fd, (struct sockaddr*) &addr, &size) == -1) { perror("getsockname"); goto bail; } if (listen(fd, 5) == -1) { perror("listen"); goto bail; } data->listener = fd; #ifdef HAVE_IPV6 if (sa->sa_family == AF_INET6) { /* need to use EPRT */ char eprtarg[INET6_ADDRSTRLEN + sizeof("|x||xxxxx|")]; char out[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, &((struct sockaddr_in6*) sa)->sin6_addr, out, sizeof(out)); sprintf(eprtarg, "|2|%s|%hu|", out, ntohs(((struct sockaddr_in6 *) &addr)->sin6_port)); if (!ftp_putcmd(ftp, "EPRT", eprtarg)) goto bail; if (!ftp_getresp(ftp) || ftp->resp != 200) goto bail; return data; } #endif /* send the PORT */ ipbox.l[0] = ((struct sockaddr_in*) sa)->sin_addr.s_addr; ipbox.s[2] = ((struct sockaddr_in*) &addr)->sin_port; sprintf(arg, "%u,%u,%u,%u,%u,%u", ipbox.c[0], ipbox.c[1], ipbox.c[2], ipbox.c[3], ipbox.c[4], ipbox.c[5]); if (!ftp_putcmd(ftp, "PORT", arg)) goto bail; if (!ftp_getresp(ftp) || ftp->resp != 200) goto bail; return data; bail: if (fd != -1) closesocket(fd); free(data); return NULL; } /* }}} */ /* {{{ data_accept */ databuf_t* data_accept(databuf_t *data, ftpbuf_t *ftp) { php_sockaddr_storage addr; int size; if (data->fd != -1) return data; size = sizeof(addr); data->fd = my_accept(ftp, data->listener, (struct sockaddr*) &addr, &size); closesocket(data->listener); data->listener = -1; if (data->fd == -1) { free(data); return NULL; } return data; } /* }}} */ /* {{{ data_close */ databuf_t* data_close(databuf_t *data) { if (data == NULL) return NULL; if (data->listener != -1) closesocket(data->listener); if (data->fd != -1) closesocket(data->fd); free(data); return NULL; } /* }}} */ /* {{{ ftp_genlist */ char** ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path) { FILE *tmpfp = NULL; databuf_t *data = NULL; char *ptr; int ch, lastch; int size, rcvd; int lines; char **ret = NULL; char **entry; char *text; if ((tmpfp = tmpfile()) == NULL) return NULL; if (!ftp_type(ftp, FTPTYPE_ASCII)) goto bail; if ((data = ftp_getdata(ftp)) == NULL) goto bail; if (!ftp_putcmd(ftp, cmd, path)) goto bail; if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125)) goto bail; /* pull data buffer into tmpfile */ if ((data = data_accept(data, ftp)) == NULL) goto bail; size = 0; lines = 0; lastch = 0; while ((rcvd = my_recv(ftp, data->fd, data->buf, FTP_BUFSIZE))) { if (rcvd == -1) goto bail; fwrite(data->buf, rcvd, 1, tmpfp); size += rcvd; for (ptr = data->buf; rcvd; rcvd--, ptr++) { if (*ptr == '\n' && lastch == '\r') lines++; else size++; lastch = *ptr; } } data = data_close(data); if (ferror(tmpfp)) goto bail; rewind(tmpfp); ret = malloc((lines + 1) * sizeof(char**) + size * sizeof(char*)); if (ret == NULL) { perror("malloc"); goto bail; } entry = ret; text = (char*) (ret + lines + 1); *entry = text; lastch = 0; while ((ch = getc(tmpfp)) != EOF) { if (ch == '\n' && lastch == '\r') { *(text - 1) = 0; *++entry = text; } else { *text++ = ch; } lastch = ch; } *entry = NULL; if (ferror(tmpfp)) goto bail; fclose(tmpfp); if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) { free(ret); return NULL; } return ret; bail: data_close(data); fclose(tmpfp); free(ret); return NULL; } /* }}} */ #endif /* HAVE_FTP */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/ftp/ftp.h0100644000175200000240000001250207437364642013513 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrew Skalski | +----------------------------------------------------------------------+ */ /* $Id: ftp.h,v 1.21 2025/02/28 08:26:10 sebastian Exp $ */ #ifndef FTP_H #define FTP_H #include "php_network.h" #include #ifdef HAVE_NETINET_IN_H #include #endif #define FTP_DEFAULT_TIMEOUT 90 /* XXX this should be configurable at runtime XXX */ #define FTP_BUFSIZE 4096 typedef enum ftptype { FTPTYPE_ASCII, FTPTYPE_IMAGE } ftptype_t; typedef struct ftpbuf { int fd; /* control connection */ php_sockaddr_storage localaddr; /* local address */ int resp; /* last response code */ char inbuf[FTP_BUFSIZE]; /* last response text */ char *extra; /* extra characters */ int extralen; /* number of extra chars */ char outbuf[FTP_BUFSIZE]; /* command output buffer */ char *pwd; /* cached pwd */ char *syst; /* cached system type */ ftptype_t type; /* current transfer type */ int pasv; /* 0=off; 1=pasv; 2=ready */ php_sockaddr_storage pasvaddr; /* passive mode address */ long timeout_sec; /* User configureable timeout (seconds) */ } ftpbuf_t; typedef struct databuf { int listener; /* listener socket */ int fd; /* data connection */ ftptype_t type; /* transfer type */ char buf[FTP_BUFSIZE]; /* data buffer */ } databuf_t; /* open a FTP connection, returns ftpbuf (NULL on error) * port is the ftp port in network byte order, or 0 for the default */ ftpbuf_t* ftp_open(const char *host, short port, long timeout_sec); /* quits from the ftp session (it still needs to be closed) * return true on success, false on error */ int ftp_quit(ftpbuf_t *ftp); /* frees up any cached data held in the ftp buffer */ void ftp_gc(ftpbuf_t *ftp); /* close the FTP connection and return NULL */ ftpbuf_t* ftp_close(ftpbuf_t *ftp); /* logs into the FTP server, returns true on success, false on error */ int ftp_login(ftpbuf_t *ftp, const char *user, const char *pass); /* reinitializes the connection, returns true on success, false on error */ int ftp_reinit(ftpbuf_t *ftp); /* returns the remote system type (NULL on error) */ const char* ftp_syst(ftpbuf_t *ftp); /* returns the present working directory (NULL on error) */ const char* ftp_pwd(ftpbuf_t *ftp); /* exec a command [special features], return true on success, false on error */ int ftp_exec(ftpbuf_t *ftp, const char *cmd); /* changes directories, return true on success, false on error */ int ftp_chdir(ftpbuf_t *ftp, const char *dir); /* changes to parent directory, return true on success, false on error */ int ftp_cdup(ftpbuf_t *ftp); /* creates a directory, return the directory name on success, NULL on error. * the return value must be freed */ char* ftp_mkdir(ftpbuf_t *ftp, const char *dir); /* removes a directory, return true on success, false on error */ int ftp_rmdir(ftpbuf_t *ftp, const char *dir); /* returns a NULL-terminated array of filenames in the given path * or NULL on error. the return array must be freed (but don't * free the array elements) */ char** ftp_nlist(ftpbuf_t *ftp, const char *path); /* returns a NULL-terminated array of lines returned by the ftp * LIST command for the given path or NULL on error. the return * array must be freed (but don't * free the array elements) */ char** ftp_list(ftpbuf_t *ftp, const char *path); /* switches passive mode on or off * returns true on success, false on error */ int ftp_pasv(ftpbuf_t *ftp, int pasv); /* retrieves a file and saves its contents to outfp * returns true on success, false on error */ int ftp_get(ftpbuf_t *ftp, FILE *outfp, const char *path, ftptype_t type); /* stores the data from a file, socket, or process as a file on the remote server * returns true on success, false on error */ int ftp_put(ftpbuf_t *ftp, const char *path, FILE *infp, int insocket, int issock, ftptype_t type); /* returns the size of the given file, or -1 on error */ int ftp_size(ftpbuf_t *ftp, const char *path); /* returns the last modified time of the given file, or -1 on error */ time_t ftp_mdtm(ftpbuf_t *ftp, const char *path); /* renames a file on the server */ int ftp_rename(ftpbuf_t *ftp, const char *src, const char *dest); /* deletes the file from the server */ int ftp_delete(ftpbuf_t *ftp, const char *path); /* sends a SITE command to the server */ int ftp_site(ftpbuf_t *ftp, const char *cmd); #endif php-4.2.3/ext/ftp/php_ftp.c0100644000175200000240000004645707451215700014357 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrew Skalski | +----------------------------------------------------------------------+ */ /* $Id: php_ftp.c,v 1.53.2.1 2025/03/30 01:58:24 mfischer Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if HAVE_FTP #include "ext/standard/info.h" #include "ext/standard/file.h" #include "php_ftp.h" #include "ftp.h" static int le_ftpbuf; #define le_ftpbuf_name "FTP Buffer" function_entry php_ftp_functions[] = { PHP_FE(ftp_connect, NULL) PHP_FE(ftp_login, NULL) PHP_FE(ftp_pwd, NULL) PHP_FE(ftp_cdup, NULL) PHP_FE(ftp_chdir, NULL) PHP_FE(ftp_exec, NULL) PHP_FE(ftp_mkdir, NULL) PHP_FE(ftp_rmdir, NULL) PHP_FE(ftp_nlist, NULL) PHP_FE(ftp_rawlist, NULL) PHP_FE(ftp_systype, NULL) PHP_FE(ftp_pasv, NULL) PHP_FE(ftp_get, NULL) PHP_FE(ftp_fget, NULL) PHP_FE(ftp_put, NULL) PHP_FE(ftp_fput, NULL) PHP_FE(ftp_size, NULL) PHP_FE(ftp_mdtm, NULL) PHP_FE(ftp_rename, NULL) PHP_FE(ftp_delete, NULL) PHP_FE(ftp_site, NULL) PHP_FE(ftp_close, NULL) PHP_FE(ftp_set_option, NULL) PHP_FE(ftp_get_option, NULL) PHP_FALIAS(ftp_quit, ftp_close, NULL) {NULL, NULL, NULL} }; zend_module_entry php_ftp_module_entry = { STANDARD_MODULE_HEADER, "ftp", php_ftp_functions, PHP_MINIT(ftp), NULL, NULL, NULL, PHP_MINFO(ftp), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_FTP ZEND_GET_MODULE(php_ftp) #endif static void ftp_destructor_ftpbuf(zend_rsrc_list_entry *rsrc TSRMLS_DC) { ftpbuf_t *ftp = (ftpbuf_t *)rsrc->ptr; ftp_close(ftp); } PHP_MINIT_FUNCTION(ftp) { le_ftpbuf = zend_register_list_destructors_ex(ftp_destructor_ftpbuf, NULL, le_ftpbuf_name, module_number); REGISTER_LONG_CONSTANT("FTP_ASCII", FTPTYPE_ASCII, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_TEXT", FTPTYPE_ASCII, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_BINARY", FTPTYPE_IMAGE, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_IMAGE", FTPTYPE_IMAGE, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_TIMEOUT_SEC", PHP_FTP_OPT_TIMEOUT_SEC, CONST_PERSISTENT | CONST_CS); return SUCCESS; } PHP_MINFO_FUNCTION(ftp) { php_info_print_table_start(); php_info_print_table_row(2, "FTP support", "enabled"); php_info_print_table_end(); } #define XTYPE(xtype, mode) { \ if (mode != FTPTYPE_ASCII && mode != FTPTYPE_IMAGE) { \ php_error(E_WARNING, "%s(): mode must be FTP_ASCII or FTP_BINARY", get_active_function_name(TSRMLS_C)); \ RETURN_FALSE; \ } \ xtype = mode; \ } #define FILEP(fp, pval) ZEND_FETCH_RESOURCE(fp, FILE *, &pval, -1, "File-Handle", php_file_le_fopen()); /* {{{ proto resource ftp_connect(string host [, int port [, int timeout)]]) Opens a FTP stream */ PHP_FUNCTION(ftp_connect) { ftpbuf_t *ftp; char *host; int host_len, port = 0; long timeout_sec = FTP_DEFAULT_TIMEOUT; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &host, &host_len, &port, &timeout_sec) == FAILURE) { return; } if (timeout_sec <= 0) { php_error(E_WARNING, "%s(): timeout has to be greater than 0", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } /* connect */ ftp = ftp_open(host, (short)port, timeout_sec); if (ftp == NULL) { RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, ftp, le_ftpbuf); } /* }}} */ /* {{{ proto bool ftp_login(resource stream, string username, string password) Logs into the FTP server */ PHP_FUNCTION(ftp_login) { zval *z_ftp; ftpbuf_t *ftp; char *user, *pass; int user_len, pass_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &z_ftp, &user, &user_len, &pass, &pass_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* log in */ if (!ftp_login(ftp, user, pass)) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto string ftp_pwd(resource stream) Returns the present working directory */ PHP_FUNCTION(ftp_pwd) { zval *z_ftp; ftpbuf_t *ftp; const char *pwd; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); pwd = ftp_pwd(ftp); if (pwd == NULL) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_STRING((char*) pwd, 1); } /* }}} */ /* {{{ proto bool ftp_cdup(resource stream) Changes to the parent directory */ PHP_FUNCTION(ftp_cdup) { zval *z_ftp; ftpbuf_t *ftp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); if (!ftp_cdup(ftp)) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool ftp_chdir(resource stream, string directory) Changes directories */ PHP_FUNCTION(ftp_chdir) { zval *z_ftp; ftpbuf_t *ftp; char *dir; int dir_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* change directories */ if (!ftp_chdir(ftp, dir)) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool ftp_exec(resource stream, string command) Requests execution of a program on the FTP server */ PHP_FUNCTION(ftp_exec) { pval *z_ftp; ftpbuf_t *ftp; char *cmd; int cmd_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* execute serverside command */ if (!ftp_exec(ftp, cmd)) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto string ftp_mkdir(resource stream, string directory) Creates a directory and returns the absolute path for the new directory or false on error */ PHP_FUNCTION(ftp_mkdir) { zval *z_ftp; ftpbuf_t *ftp; char *dir, *tmp; int dir_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* create directorie */ if (NULL == (tmp = ftp_mkdir(ftp, dir))) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_STRING(tmp, 1); } /* }}} */ /* {{{ proto bool ftp_rmdir(resource stream, string directory) Removes a directory */ PHP_FUNCTION(ftp_rmdir) { zval *z_ftp; ftpbuf_t *ftp; char *dir; int dir_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* remove directorie */ if (!ftp_rmdir(ftp, dir)) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto array ftp_nlist(resource stream, string directory) Returns an array of filenames in the given directory */ PHP_FUNCTION(ftp_nlist) { zval *z_ftp; ftpbuf_t *ftp; char **nlist, **ptr, *dir; int dir_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* get list of files */ if (NULL == (nlist = ftp_nlist(ftp, dir))) { RETURN_FALSE; } array_init(return_value); for (ptr = nlist; *ptr; ptr++) add_next_index_string(return_value, *ptr, 1); free(nlist); } /* }}} */ /* {{{ proto array ftp_rawlist(resource stream, string directory) Returns a detailed listing of a directory as an array of output lines */ PHP_FUNCTION(ftp_rawlist) { zval *z_ftp; ftpbuf_t *ftp; char **llist, **ptr, *dir; int dir_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* get raw directory listing */ if (NULL == (llist = ftp_list(ftp, dir))) { RETURN_FALSE; } array_init(return_value); for (ptr = llist; *ptr; ptr++) add_next_index_string(return_value, *ptr, 1); free(llist); } /* }}} */ /* {{{ proto string ftp_systype(resource stream) Returns the system type identifier */ PHP_FUNCTION(ftp_systype) { zval *z_ftp; ftpbuf_t *ftp; const char *syst; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); syst = ftp_syst(ftp); if (NULL == (syst = ftp_syst(ftp))) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_STRING((char*) syst, 1); } /* }}} */ /* {{{ proto bool ftp_fget(resource stream, resource fp, string remote_file, int mode) Retrieves a file from the FTP server and writes it to an open file */ PHP_FUNCTION(ftp_fget) { zval *z_ftp, *z_file; ftpbuf_t *ftp; ftptype_t xtype; FILE *fp; char *file; int file_len, mode; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrsl", &z_ftp, &z_file, &file, &file_len, &mode) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); FILEP(fp, z_file); XTYPE(xtype, mode); if (!ftp_get(ftp, fp, file, xtype) || ferror(fp)) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } if (ferror(fp)) { php_error(E_WARNING, "%s(): error writing %s", get_active_function_name(TSRMLS_C), Z_STRVAL_P(z_file)); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool ftp_pasv(resource stream, bool pasv) Turns passive mode on or off */ PHP_FUNCTION(ftp_pasv) { zval *z_ftp; ftpbuf_t *ftp; zend_bool pasv; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &z_ftp, &pasv) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); if (!ftp_pasv(ftp, pasv ? 1 : 0)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool ftp_get(resource stream, string local_file, string remote_file, int mode) Retrieves a file from the FTP server and writes it to a local file */ PHP_FUNCTION(ftp_get) { zval *z_ftp; ftpbuf_t *ftp; ftptype_t xtype; FILE *outfp, *tmpfp; int ch; char *local, *remote; int local_len, remote_len, mode; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl", &z_ftp, &local, &local_len, &remote, &remote_len, &mode) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); XTYPE(xtype, mode); /* get to temporary file, so if there is an error, no existing * file gets clobbered */ if ((tmpfp = tmpfile()) == NULL) { php_error(E_WARNING, "%s(): error opening tmpfile", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } if (!ftp_get(ftp, tmpfp, remote, xtype) || ferror(tmpfp)) { fclose(tmpfp); php_error(E_WARNING, "ftp_get: %s", ftp->inbuf); RETURN_FALSE; } #ifdef PHP_WIN32 if ((outfp = VCWD_FOPEN(local, "wb")) == NULL) { #else if ((outfp = VCWD_FOPEN(local, "w")) == NULL) { #endif fclose(tmpfp); php_error(E_WARNING, "%s(): error opening %s", get_active_function_name(TSRMLS_C), local); RETURN_FALSE; } rewind(tmpfp); while ((ch = getc(tmpfp)) != EOF) putc(ch, outfp); if (ferror(tmpfp) || ferror(outfp)) { fclose(tmpfp); fclose(outfp); php_error(E_WARNING, "%s(): error writing %s", get_active_function_name(TSRMLS_C), local); RETURN_FALSE; } fclose(tmpfp); fclose(outfp); RETURN_TRUE; } /* }}} */ /* {{{ proto bool ftp_fput(resource stream, string remote_file, resource fp, int mode) Stores a file from an open file to the FTP server */ PHP_FUNCTION(ftp_fput) { zval *z_ftp, *z_file; ftpbuf_t *ftp; ftptype_t xtype; int type, mode, remote_len; void *rsrc; char *remote; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsrl", &z_ftp, &remote, &remote_len, &z_file, &mode) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); rsrc = zend_fetch_resource(&z_file TSRMLS_CC, -1, "File-Handle", &type, 3, php_file_le_fopen(), php_file_le_popen(), php_file_le_socket()); ZEND_VERIFY_RESOURCE(rsrc); XTYPE(xtype, mode); if (!ftp_put(ftp, remote, (FILE*)rsrc, *(int*) rsrc, (type==php_file_le_socket()), xtype)) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool ftp_put(resource stream, string remote_file, string local_file, int mode) Stores a file on the FTP server */ PHP_FUNCTION(ftp_put) { zval *z_ftp; ftpbuf_t *ftp; ftptype_t xtype; FILE *infp; char *remote, *local; int remote_len, local_len, mode; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl", &z_ftp, &remote, &remote_len, &local, &local_len, &mode) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); XTYPE(xtype, mode); #ifdef PHP_WIN32 if ((infp = VCWD_FOPEN(local, "rb")) == NULL) { #else if ((infp = VCWD_FOPEN(local, "r")) == NULL) { #endif php_error(E_WARNING, "%s(): error opening %s", get_active_function_name(TSRMLS_C), local); RETURN_FALSE; } if (!ftp_put(ftp, remote, infp, 0, 0, xtype) || ferror(infp)) { fclose(infp); php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } fclose(infp); RETURN_TRUE; } /* }}} */ /* {{{ proto int ftp_size(resource stream, string filename) Returns the size of the file, or -1 on error */ PHP_FUNCTION(ftp_size) { zval *z_ftp; ftpbuf_t *ftp; char *file; int file_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* get file size */ RETURN_LONG(ftp_size(ftp, file)); } /* }}} */ /* {{{ proto int ftp_mdtm(resource stream, string filename) Returns the last modification time of the file, or -1 on error */ PHP_FUNCTION(ftp_mdtm) { zval *z_ftp; ftpbuf_t *ftp; char *file; int file_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* get file mod time */ RETURN_LONG(ftp_mdtm(ftp, file)); } /* }}} */ /* {{{ proto bool ftp_rename(resource stream, string src, string dest) Renames the given file to a new path */ PHP_FUNCTION(ftp_rename) { zval *z_ftp; ftpbuf_t *ftp; char *src, *dest; int src_len, dest_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &z_ftp, &src, &src_len, &dest, &dest_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* rename the file */ if (!ftp_rename(ftp, src, dest)) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool ftp_delete(resource stream, string file) Deletes a file */ PHP_FUNCTION(ftp_delete) { zval *z_ftp; ftpbuf_t *ftp; char *file; int file_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* delete the file */ if (!ftp_delete(ftp, file)) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool ftp_site(resource stream, string cmd) Sends a SITE command to the server */ PHP_FUNCTION(ftp_site) { zval *z_ftp; ftpbuf_t *ftp; char *cmd; int cmd_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* send the site command */ if (!ftp_site(ftp, cmd)) { php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ftp->inbuf); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto void ftp_close(resource stream) Closes the FTP stream */ PHP_FUNCTION(ftp_close) { zval *z_ftp; ftpbuf_t *ftp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); zend_list_delete(Z_LVAL_P(z_ftp)); } /* }}} */ /* {{{ proto bool ftp_set_option(resource stream, int option, mixed value) Sets an FTP option */ PHP_FUNCTION(ftp_set_option) { zval *z_ftp, *z_value; long option; ftpbuf_t *ftp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz", &z_ftp, &option, &z_value) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); switch (option) { case PHP_FTP_OPT_TIMEOUT_SEC: if (Z_TYPE_P(z_value) != IS_LONG) { php_error(E_WARNING, "%s(): option TIMEOUT_SEC expects value of type long, %s given", get_active_function_name(TSRMLS_C), zend_zval_type_name(z_value)); RETURN_FALSE; } if (Z_LVAL_P(z_value) <= 0) { php_error(E_WARNING, "%s(): timeout has to be greater than 0", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } ftp->timeout_sec = Z_LVAL_P(z_value); RETURN_TRUE; break; default: php_error(E_WARNING, "%s(): unknown option '%d'", get_active_function_name(TSRMLS_C), option); RETURN_FALSE; break; } } /* }}} */ /* {{{ proto mixed ftp_get_option(resource stream, int option) Gets an FTP option */ PHP_FUNCTION(ftp_get_option) { zval *z_ftp; long option; ftpbuf_t *ftp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &z_ftp, &option) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); switch (option) { case PHP_FTP_OPT_TIMEOUT_SEC: RETURN_LONG(ftp->timeout_sec); break; default: php_error(E_WARNING, "%s(): unknown option '%d'", get_active_function_name(TSRMLS_C), option); RETURN_FALSE; break; } } /* }}} */ #endif /* HAVE_FTP */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: */ php-4.2.3/ext/ftp/php_ftp.h0100644000175200000240000000417707437364642014373 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Andrew Skalski | +----------------------------------------------------------------------+ */ /* $Id: php_ftp.h,v 1.17 2025/02/28 08:26:10 sebastian Exp $ */ #ifndef _INCLUDED_FTP_H #define _INCLUDED_FTP_H #if HAVE_FTP extern zend_module_entry php_ftp_module_entry; #define php_ftp_module_ptr &php_ftp_module_entry #define PHP_FTP_OPT_TIMEOUT_SEC 0 PHP_MINIT_FUNCTION(ftp); PHP_MINFO_FUNCTION(ftp); PHP_FUNCTION(ftp_connect); PHP_FUNCTION(ftp_login); PHP_FUNCTION(ftp_pwd); PHP_FUNCTION(ftp_cdup); PHP_FUNCTION(ftp_chdir); PHP_FUNCTION(ftp_exec); PHP_FUNCTION(ftp_mkdir); PHP_FUNCTION(ftp_rmdir); PHP_FUNCTION(ftp_nlist); PHP_FUNCTION(ftp_rawlist); PHP_FUNCTION(ftp_systype); PHP_FUNCTION(ftp_pasv); PHP_FUNCTION(ftp_get); PHP_FUNCTION(ftp_fget); PHP_FUNCTION(ftp_put); PHP_FUNCTION(ftp_fput); PHP_FUNCTION(ftp_size); PHP_FUNCTION(ftp_mdtm); PHP_FUNCTION(ftp_rename); PHP_FUNCTION(ftp_delete); PHP_FUNCTION(ftp_site); PHP_FUNCTION(ftp_close); PHP_FUNCTION(ftp_set_option); PHP_FUNCTION(ftp_get_option); #define phpext_ftp_ptr php_ftp_module_ptr #else #define php_ftp_module_ptr NULL #endif /* HAVE_FTP */ #endif php-4.2.3/ext/gd/0040755000175200000240000000000007535765574012365 5ustar zeevstaffphp-4.2.3/ext/gd/CREDITS0100644000175200000240000000010107206176572013357 0ustar zeevstaffGD imaging Rasmus Lerdorf, Stig Bakken, Jim Winstead, Jouni Ahto php-4.2.3/ext/gd/Makefile.in0100644000175200000240000000030507300466025014400 0ustar zeevstaff LTLIBRARY_NAME = libgd.la LTLIBRARY_SOURCES = gd.c gdcache.c gdttf.c gdt1.c LTLIBRARY_SHARED_NAME = gd.la LTLIBRARY_SHARED_LIBADD = $(GD_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/gd/config.m40100644000175200000240000002224207461365656014066 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.83.2.2 2025/04/23 23:18:06 sniper Exp $ dnl AC_DEFUN(PHP_GD_JPEG,[ PHP_ARG_WITH(jpeg-dir, for the location of libjpeg, [ --with-jpeg-dir=DIR GD: Set the path to libjpeg install prefix.]) if test "$PHP_JPEG_DIR" != "no"; then for i in /usr /usr/local $PHP_JPEG_DIR; do test -f $i/lib/libjpeg.$SHLIB_SUFFIX_NAME -o -f $i/lib/libjpeg.a && GD_JPEG_DIR=$i done if test -z "$GD_JPEG_DIR"; then AC_MSG_ERROR([libjpeg.(a|so) not found.]) fi PHP_CHECK_LIBRARY(jpeg,jpeg_read_header, [ PHP_ADD_LIBRARY_WITH_PATH(jpeg, $GD_JPEG_DIR/lib, GD_SHARED_LIBADD) ],[ AC_MSG_ERROR([Problem with libjpeg.(a|so). Please check config.log for more information.]) ],[ -L$GD_JPEG_DIR/lib ]) else AC_MSG_RESULT([If configure fails try --with-jpeg-dir=]) fi ]) AC_DEFUN(PHP_GD_PNG,[ PHP_ARG_WITH(png-dir, for the location of libpng, [ --with-png-dir=DIR GD: Set the path to libpng install prefix.]) if test "$PHP_PNG_DIR" != "no"; then for i in /usr /usr/local $PHP_PNG_DIR; do test -f $i/lib/libpng.$SHLIB_SUFFIX_NAME -o -f $i/lib/libpng.a && GD_PNG_DIR=$i done if test -z "$GD_PNG_DIR"; then AC_MSG_ERROR([libpng.(a|so) not found.]) fi if test "$PHP_ZLIB_DIR" = "no"; then AC_MSG_ERROR([PNG support requires ZLIB. Use --with-zlib-dir=]) fi PHP_CHECK_LIBRARY(png,png_write_image, [ PHP_ADD_LIBRARY_WITH_PATH(z, $PHP_ZLIB_DIR/lib, GD_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(png, $GD_PNG_DIR/lib, GD_SHARED_LIBADD) ],[ AC_MSG_ERROR([Problem with libpng.(a|so) or libz.(a|so). Please check config.log for more information.]) ],[ -L$PHP_ZLIB_DIR/lib -lz -L$GD_PNG_DIR/lib ]) else AC_MSG_RESULT([If configure fails try --with-png-dir= and --with-zlib-dir=]) fi ]) AC_DEFUN(PHP_GD_XPM,[ PHP_ARG_WITH(xpm-dir, for the location of libXpm, [ --with-xpm-dir=DIR GD: Set the path to libXpm install prefix.]) if test "$PHP_XPM_DIR" != "no"; then for i in /usr /usr/local /usr/X11R6 $PHP_XPM_DIR; do test -f $i/lib/libXpm.$SHLIB_SUFFIX_NAME -o -f $i/lib/libXpm.a && GD_XPM_DIR=$i done if test -z "$GD_XPM_DIR"; then AC_MSG_ERROR([libXpm.(a|so) not found.]) fi PHP_CHECK_LIBRARY(Xpm,XpmFreeXpmImage, [ PHP_ADD_LIBRARY_WITH_PATH(Xpm, $GD_XPM_DIR/lib, GD_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(X11, $GD_XPM_DIR/lib, GD_SHARED_LIBADD) ],[ AC_MSG_ERROR([Problem with libXpm.(a|so) or libX11.(a|so). Please check config.log for more information.]) ],[ -L$GD_XPM_DIR/lib -lX11 ]) else AC_MSG_RESULT(If configure fails try --with-xpm-dir=) fi ]) AC_DEFUN(PHP_GD_FREETYPE1,[ PHP_ARG_WITH(ttf,for FreeType 1.x support, [ --with-ttf[=DIR] GD: Include FreeType 1.x support]) if test "$PHP_TTF" != "no"; then if test "$PHP_FREETYPE_DIR" = "no" -o "$PHP_FREETYPE_DIR" = ""; then if test -n "$PHP_TTF" ; then for i in /usr /usr/local $PHP_TTF; do if test -f "$i/include/freetype.h" ; then TTF_DIR=$i unset TTF_INC_DIR fi if test -f "$i/include/freetype/freetype.h"; then TTF_DIR=$i TTF_INC_DIR=$i/include/freetype fi done fi if test -n "$TTF_DIR" ; then AC_DEFINE(HAVE_LIBTTF,1,[ ]) PHP_ADD_LIBRARY_WITH_PATH(ttf, $TTF_DIR/lib, GD_SHARED_LIBADD) fi if test -z "$TTF_INC_DIR"; then TTF_INC_DIR=$TTF_DIR/include fi PHP_ADD_INCLUDE($TTF_INC_DIR) else AC_MSG_RESULT([no - FreeType 2.x is to be used instead]) fi fi ]) AC_DEFUN(PHP_GD_FREETYPE2,[ PHP_ARG_WITH(freetype-dir, for freetype(2), [ --with-freetype-dir=DIR GD: Set the path to freetype2 install prefix.]) if test "$PHP_FREETYPE_DIR" != "no"; then for i in /usr /usr/local $PHP_FREETYPE_DIR; do if test -f "$i/include/freetype2/freetype/freetype.h"; then FREETYPE2_DIR=$i FREETYPE2_INC_DIR=$i/include/freetype2/freetype fi done if test -n "$FREETYPE2_DIR" ; then PHP_ADD_LIBRARY_WITH_PATH(freetype, $FREETYPE2_DIR/lib, GD_SHARED_LIBADD) PHP_ADD_INCLUDE($FREETYPE2_INC_DIR) AC_DEFINE(USE_GD_IMGSTRTTF, 1, [ ]) AC_DEFINE(HAVE_LIBFREETYPE,1,[ ]) else AC_MSG_ERROR([freetype2 not found!]) fi else AC_MSG_RESULT([If configure fails try --with-freetype-dir=]) fi ]) AC_DEFUN(PHP_GD_T1LIB,[ PHP_ARG_WITH(t1lib, for T1lib support, [ --with-t1lib[=DIR] GD: Include T1lib support.]) if test "$PHP_T1LIB" != "no"; then for i in /usr /usr/local $PHP_T1LIB; do test -f "$i/include/t1lib.h" && GD_T1_DIR=$i done if test -z "$GD_T1_DIR"; then AC_MSG_ERROR([Your t1lib distribution is not installed correctly. Please reinstall it.]) fi PHP_CHECK_LIBRARY(t1, T1_LoadFont, [ AC_DEFINE(HAVE_LIBT1,1,[ ]) PHP_ADD_INCLUDE("$GD_T1_DIR/include") PHP_ADD_LIBRARY_WITH_PATH(t1, "$GD_T1_DIR/lib", GD_SHARED_LIBADD) ],[ AC_MSG_ERROR([Problem with libt1.(a|so). Please check config.log for more information.]) ],[ -L$GD_T1_DIR/lib ]) fi ]) AC_DEFUN(PHP_GD_TTSTR,[ PHP_ARG_ENABLE(gd-native-ttf, whether to enable truetype string function in GD, [ --enable-gd-native-ttf GD: Enable TrueType string function.]) if test "$PHP_GD_NATIVE_TTF" = "yes"; then AC_DEFINE(USE_GD_IMGSTRTTF, 1, [ ]) fi ]) AC_DEFUN(PHP_GD_CHECK_VERSION,[ PHP_CHECK_LIBRARY(gd, gdImageString16, [AC_DEFINE(HAVE_LIBGD13, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImagePaletteCopy, [AC_DEFINE(HAVE_LIBGD15, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageCreateFromPng, [AC_DEFINE(HAVE_GD_PNG, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageCreateFromGif, [AC_DEFINE(HAVE_GD_GIF_READ, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageGif, [AC_DEFINE(HAVE_GD_GIF_CREATE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageWBMP, [AC_DEFINE(HAVE_GD_WBMP, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageCreateFromJpeg, [AC_DEFINE(HAVE_GD_JPG, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageCreateFromXpm, [AC_DEFINE(HAVE_GD_XPM, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageCreateFromGd2, [AC_DEFINE(HAVE_GD_GD2, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageCreateTrueColor, [AC_DEFINE(HAVE_LIBGD20, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageSetTile, [AC_DEFINE(HAVE_GD_IMAGESETTILE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageSetBrush, [AC_DEFINE(HAVE_GD_IMAGESETBRUSH, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageStringTTF, [AC_DEFINE(HAVE_GD_STRINGTTF, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageStringFT, [AC_DEFINE(HAVE_GD_STRINGFT, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageStringFTEx, [AC_DEFINE(HAVE_GD_STRINGFTEX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageColorClosestHWB, [AC_DEFINE(HAVE_COLORCLOSESTHWB, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageColorResolve, [AC_DEFINE(HAVE_GDIMAGECOLORRESOLVE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageGifCtx, [AC_DEFINE(HAVE_GD_GIF_CTX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) ]) PHP_ARG_WITH(gd, for GD support, [ --with-gd[=DIR] Include GD support (DIR is GD's install dir).]) if test "$PHP_GD" != "no"; then PHP_EXTENSION(gd, $ext_shared) PHP_SUBST(GD_SHARED_LIBADD) dnl Various checks for GD features PHP_SHLIB_SUFFIX_NAME PHP_GD_TTSTR PHP_GD_JPEG PHP_GD_PNG PHP_GD_XPM PHP_GD_FREETYPE2 PHP_GD_FREETYPE1 PHP_GD_T1LIB if test "$PHP_GD" = "yes"; then GD_SEARCH_PATHS="/usr/local /usr" else GD_SEARCH_PATHS=$PHP_GD fi for j in $GD_SEARCH_PATHS; do for i in include/gd1.3 include/gd include gd1.3 gd ""; do test -f $j/$i/gd.h && GD_INCLUDE=$j/$i done for i in lib/gd1.3 lib/gd lib gd1.3 gd ""; do test -f $j/$i/libgd.$SHLIB_SUFFIX_NAME -o -f $j/$i/libgd.a && GD_LIB=$j/$i done done if test -n "$GD_INCLUDE" -a -n "$GD_LIB" ; then PHP_ADD_LIBRARY_WITH_PATH(gd, $GD_LIB, GD_SHARED_LIBADD) AC_DEFINE(HAVE_LIBGD,1,[ ]) PHP_GD_CHECK_VERSION else AC_MSG_ERROR([Unable to find libgd.(a|so) anywhere under $GD_SEARCH_PATHS]) fi dnl NetBSD package structure if test -f /usr/pkg/include/gd/gd.h -a -z "$GD_INCLUDE" ; then GD_INCLUDE=/usr/pkg/include/gd fi dnl SuSE 6.x package structure if test -f /usr/include/gd/gd.h -a -z "$GD_INCLUDE" ; then GD_INCLUDE=/usr/include/gd fi PHP_EXPAND_PATH($GD_INCLUDE, GD_INCLUDE) PHP_ADD_INCLUDE($GD_INCLUDE) fi php-4.2.3/ext/gd/gd.c0100644000175200000240000030163007535132211013073 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Stig Bakken | | Jim Winstead | +----------------------------------------------------------------------+ */ /* $Id: gd.c,v 1.179.2.3 2025/09/03 13:09:29 sniper Exp $ */ /* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center, Cold Spring Harbor Labs. */ /* Note that there is no code from the gd package in this file */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "ext/standard/head.h" #include #include "SAPI.h" #include "php_gd.h" #include "ext/standard/info.h" #if HAVE_SYS_WAIT_H # include #endif #if HAVE_UNISTD_H # include #endif #ifdef PHP_WIN32 # include # include #endif #if HAVE_LIBGD static int le_gd, le_gd_font; #if HAVE_LIBT1 static int le_ps_font, le_ps_enc; #endif #include #include /* 1 Tiny font */ #include /* 2 Small font */ #include /* 3 Medium bold font */ #include /* 4 Large font */ #include /* 5 Giant font */ #ifdef ENABLE_GD_TTF # include "gdttf.h" #endif #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #ifdef ENABLE_GD_TTF static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int, int); #endif #if HAVE_LIBGD15 /* it's >= 1.5, i.e. has IOCtx */ #define USE_GD_IOCTX 1 #else #undef USE_GD_IOCTX #endif #ifdef USE_GD_IOCTX #include "gd_ctx.c" #else #define gdImageCreateFromGdCtx NULL #define gdImageCreateFromGd2Ctx NULL #define gdImageCreateFromGd2partCtx NULL #define gdImageCreateFromGifCtx NULL #define gdImageCreateFromJpegCtx NULL #define gdImageCreateFromPngCtx NULL #define gdImageCreateFromWBMPCtx NULL typedef FILE gdIOCtx; #define CTX_PUTC(c, fp) fputc(c, fp) #endif static gdImagePtr _php_image_create_from_string (zval **Data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC); static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)()); static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)()); static int _php_image_type ( char data[8] ); static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type); static void _php_image_bw_convert(gdImagePtr im_org, gdIOCtx *out, int threshold); /* {{{ gd_functions[] */ function_entry gd_functions[] = { PHP_FE(imagearc, NULL) PHP_FE(imagechar, NULL) PHP_FE(imagecharup, NULL) PHP_FE(imagecolorallocate, NULL) PHP_FE(imagepalettecopy, NULL) PHP_FE(imagecolorat, NULL) PHP_FE(imagecolorclosest, NULL) PHP_FE(imagecolorclosesthwb, NULL) PHP_FE(imagecolordeallocate, NULL) PHP_FE(imagecolorresolve, NULL) PHP_FE(imagecolorexact, NULL) PHP_FE(imagecolorset, NULL) PHP_FE(imagecolortransparent, NULL) PHP_FE(imagecolorstotal, NULL) PHP_FE(imagecolorsforindex, NULL) PHP_FE(imagecopy, NULL) PHP_FE(imagecopymerge, NULL) PHP_FE(imagecopyresized, NULL) PHP_FE(imagecreate, NULL) PHP_FE(imagecreatetruecolor, NULL) PHP_FE(imagetruecolortopalette, NULL) PHP_FE(imagesetthickness, NULL) PHP_FE(imageellipse, NULL) PHP_FE(imagefilledellipse, NULL) PHP_FE(imagefilledarc, NULL) PHP_FE(imagealphablending, NULL) PHP_FE(imagecolorresolvealpha, NULL) PHP_FE(imagecolorclosestalpha, NULL) PHP_FE(imagecolorexactalpha, NULL) PHP_FE(imagecopyresampled, NULL) PHP_FE(imagesettile, NULL) PHP_FE(imagesetbrush, NULL) PHP_FE(imagesetstyle, NULL) PHP_FE(imagecopymergegray, NULL) PHP_FE(imagecreatefromstring, NULL) #ifdef HAVE_GD_PNG PHP_FE(imagecreatefrompng, NULL) #endif #ifdef HAVE_GD_GIF_READ PHP_FE(imagecreatefromgif, NULL) #endif #ifdef HAVE_GD_JPG PHP_FE(imagecreatefromjpeg, NULL) #endif #ifdef HAVE_GD_WBMP PHP_FE(imagecreatefromwbmp, NULL) #endif #ifdef HAVE_GD_XBM PHP_FE(imagecreatefromxbm, NULL) #endif #ifdef HAVE_GD_XPM PHP_FE(imagecreatefromxpm, NULL) #endif PHP_FE(imagecreatefromgd, NULL) #ifdef HAVE_GD_GD2 PHP_FE(imagecreatefromgd2, NULL) PHP_FE(imagecreatefromgd2part, NULL) #endif #ifdef HAVE_GD_PNG PHP_FE(imagepng, NULL) #endif #ifdef HAVE_GD_GIF_CREATE PHP_FE(imagegif, NULL) #endif #ifdef HAVE_GD_JPG PHP_FE(imagejpeg, NULL) #endif #ifdef HAVE_GD_WBMP PHP_FE(imagewbmp, NULL) #endif PHP_FE(imagegd, NULL) #ifdef HAVE_GD_GD2 PHP_FE(imagegd2, NULL) #endif PHP_FE(imagedestroy, NULL) PHP_FE(imagegammacorrect, NULL) PHP_FE(imagefill, NULL) PHP_FE(imagefilledpolygon, NULL) PHP_FE(imagefilledrectangle, NULL) PHP_FE(imagefilltoborder, NULL) PHP_FE(imagefontwidth, NULL) PHP_FE(imagefontheight, NULL) PHP_FE(imageinterlace, NULL) PHP_FE(imageline, NULL) PHP_FE(imageloadfont, NULL) PHP_FE(imagepolygon, NULL) PHP_FE(imagerectangle, NULL) PHP_FE(imagesetpixel, NULL) PHP_FE(imagestring, NULL) PHP_FE(imagestringup, NULL) PHP_FE(imagesx, NULL) PHP_FE(imagesy, NULL) PHP_FE(imagedashedline, NULL) #ifdef ENABLE_GD_TTF PHP_FE(imagettfbbox, NULL) PHP_FE(imagettftext, NULL) PHP_FE(imageftbbox, NULL) PHP_FE(imagefttext, NULL) #endif #ifdef HAVE_LIBT1 PHP_FE(imagepsloadfont, NULL) /* PHP_FE(imagepscopyfont, NULL) */ PHP_FE(imagepsfreefont, NULL) PHP_FE(imagepsencodefont, NULL) PHP_FE(imagepsextendfont, NULL) PHP_FE(imagepsslantfont, NULL) PHP_FE(imagepstext, NULL) PHP_FE(imagepsbbox, NULL) #endif PHP_FE(imagetypes, NULL) #if defined(HAVE_GD_JPG) && defined(HAVE_GD_WBMP) PHP_FE(jpeg2wbmp, NULL) #endif #if defined(HAVE_GD_PNG) && defined(HAVE_GD_WBMP) PHP_FE(png2wbmp, NULL) #endif #ifdef HAVE_GD_WBMP PHP_FE(image2wbmp, NULL) #endif {NULL, NULL, NULL} }; /* }}} */ zend_module_entry gd_module_entry = { STANDARD_MODULE_HEADER, "gd", gd_functions, PHP_MINIT(gd), NULL, NULL, NULL, PHP_MINFO(gd), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_GD ZEND_GET_MODULE(gd) #endif /* {{{ php_free_gd_image */ static void php_free_gd_image(zend_rsrc_list_entry *rsrc TSRMLS_DC) { gdImageDestroy((gdImagePtr)rsrc->ptr); } /* }}} */ /* {{{ php_free_gd_font */ static void php_free_gd_font(zend_rsrc_list_entry *rsrc TSRMLS_DC) { gdFontPtr fp = (gdFontPtr)rsrc->ptr; if (fp->data) { efree(fp->data); } efree(fp); } /* }}} */ /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(gd) { le_gd = zend_register_list_destructors_ex(php_free_gd_image, NULL, "gd", module_number); le_gd_font = zend_register_list_destructors_ex(php_free_gd_font, NULL, "gd font", module_number); #if HAVE_LIBT1 T1_SetBitmapPad(8); T1_InitLib(NO_LOGFILE|IGNORE_CONFIGFILE|IGNORE_FONTDATABASE); T1_SetLogLevel(T1LOG_DEBUG); le_ps_font = zend_register_list_destructors_ex(php_free_ps_font, NULL, "gd PS font", module_number); le_ps_enc = zend_register_list_destructors_ex(php_free_ps_enc, NULL, "gd PS encoding", module_number); #endif REGISTER_LONG_CONSTANT("IMG_GIF", 1, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_JPG", 2, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_JPEG", 2, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_PNG", 4, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_WBMP", 8, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_XPM", 16, CONST_CS | CONST_PERSISTENT); #ifdef gdTiled /* special colours for gd */ REGISTER_LONG_CONSTANT("IMG_COLOR_TILED", gdTiled, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_COLOR_STYLED", gdStyled, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_COLOR_BRUSHED", gdBrushed, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_COLOR_STYLEDBRUSHED", gdStyledBrushed, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_COLOR_TRANSPARENT", gdTransparent, CONST_CS | CONST_PERSISTENT); #endif #if HAVE_LIBGD20 /* for imagefilledarc */ REGISTER_LONG_CONSTANT("IMG_ARC_ROUNDED", gdArc, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_ARC_PIE", gdPie, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_ARC_CHORD", gdChord, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_ARC_NOFILL", gdNoFill, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_ARC_EDGED", gdEdged, CONST_CS | CONST_PERSISTENT); #endif return SUCCESS; } /* }}} */ /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(gd) { php_info_print_table_start(); php_info_print_table_row(2, "GD Support", "enabled"); /* need to use a PHPAPI function here because it is external module in windows */ #if HAVE_LIBGD20 php_info_print_table_row(2, "GD Version", "2.0 or higher"); #elif HAVE_GDIMAGECOLORRESOLVE php_info_print_table_row(2, "GD Version", "1.6.2 or higher"); #elif HAVE_LIBGD13 php_info_print_table_row(2, "GD Version", "between 1.3 and 1.6.1"); #else php_info_print_table_row(2, "GD Version", "1.2"); #endif #ifdef ENABLE_GD_TTF php_info_print_table_row(2, "FreeType Support", "enabled"); #if HAVE_LIBFREETYPE php_info_print_table_row(2, "FreeType Linkage", "with freetype"); #elif HAVE_LIBTTF php_info_print_table_row(2, "FreeType Linkage", "with TTF library"); #else php_info_print_table_row(2, "FreeType Linkage", "with unknown library"); #endif #endif #ifdef HAVE_LIBT1 php_info_print_table_row(2, "T1Lib Support", "enabled"); #endif /* this next part is stupid ... if I knew better, I'd put them all on one row (cmv) */ #ifdef HAVE_GD_GIF_READ php_info_print_table_row(2, "GIF Read Support", "enabled"); #endif #ifdef HAVE_GD_GIF_CREATE php_info_print_table_row(2, "GIF Create Support", "enabled"); #endif #ifdef HAVE_GD_JPG php_info_print_table_row(2, "JPG Support", "enabled"); #endif #ifdef HAVE_GD_PNG php_info_print_table_row(2, "PNG Support", "enabled"); #endif #ifdef HAVE_GD_WBMP php_info_print_table_row(2, "WBMP Support", "enabled"); #endif #ifdef HAVE_GD_XBM php_info_print_table_row(2, "XBM Support", "enabled"); #endif php_info_print_table_end(); } /* }}} */ /* Need this for cpdf. See also comment in file.c php3i_get_le_fp() */ PHP_GD_API int phpi_get_le_gd(void) { return le_gd; } #ifndef HAVE_GDIMAGECOLORRESOLVE /* {{{ gdImageColorResolve */ /********************************************************************/ /* gdImageColorResolve is a replacement for the old fragment: */ /* */ /* if ((color=gdImageColorExact(im,R,G,B)) < 0) */ /* if ((color=gdImageColorAllocate(im,R,G,B)) < 0) */ /* color=gdImageColorClosest(im,R,G,B); */ /* */ /* in a single function */ int gdImageColorResolve(gdImagePtr im, int r, int g, int b) { int c; int ct = -1; int op = -1; long rd, gd, bd, dist; long mindist = 3*255*255; /* init to max poss dist */ for (c = 0; c < im->colorsTotal; c++) { if (im->open[c]) { op = c; /* Save open slot */ continue; /* Color not in use */ } rd = (long)(im->red [c] - r); gd = (long)(im->green[c] - g); bd = (long)(im->blue [c] - b); dist = rd * rd + gd * gd + bd * bd; if (dist < mindist) { if (dist == 0) { return c; /* Return exact match color */ } mindist = dist; ct = c; } } /* no exact match. We now know closest, but first try to allocate exact */ if (op == -1) { op = im->colorsTotal; if (op == gdMaxColors) { /* No room for more colors */ return ct; /* Return closest available color */ } im->colorsTotal++; } im->red [op] = r; im->green[op] = g; im->blue [op] = b; im->open [op] = 0; return op; /* Return newly allocated color */ } /* }}} */ #endif #define FLIPWORD(a) (((a & 0xff000000) >> 24) | ((a & 0x00ff0000) >> 8) | ((a & 0x0000ff00) << 8) | ((a & 0x000000ff) << 24)) /* {{{ proto int imageloadfont(string filename) Load a new font */ PHP_FUNCTION(imageloadfont) { zval **file; int hdr_size = sizeof(gdFont) - sizeof(char *); int ind, body_size, n=0, b, i, body_size_check; gdFontPtr font; FILE *fp; int issock=0, socketd=0; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex(file); #ifdef PHP_WIN32 fp = VCWD_FOPEN(Z_STRVAL_PP(file), "rb"); #else fp = php_fopen_wrapper(Z_STRVAL_PP(file), "r", IGNORE_PATH|IGNORE_URL_WIN, &issock, &socketd, NULL TSRMLS_CC); #endif if (fp == NULL) { php_error(E_WARNING, "ImageFontLoad: unable to open file"); RETURN_FALSE; } /* Only supports a architecture-dependent binary dump format * at the moment. * The file format is like this on machines with 32-byte integers: * * byte 0-3: (int) number of characters in the font * byte 4-7: (int) value of first character in the font (often 32, space) * byte 8-11: (int) pixel width of each character * byte 12-15: (int) pixel height of each character * bytes 16-: (char) array with character data, one byte per pixel * in each character, for a total of * (nchars*width*height) bytes. */ font = (gdFontPtr)emalloc(sizeof(gdFont)); b = 0; while (b < hdr_size && (n = fread(&font[b], 1, hdr_size - b, fp))) b += n; if (!n) { fclose(fp); efree(font); if (feof(fp)) { php_error(E_WARNING, "ImageFontLoad: end of file while reading header"); } else { php_error(E_WARNING, "ImageFontLoad: error while reading header"); } RETURN_FALSE; } i = ftell(fp); fseek(fp, 0, SEEK_END); body_size_check = ftell(fp) - hdr_size; fseek(fp, i, SEEK_SET); body_size = font->w * font->h * font->nchars; if (body_size != body_size_check) { font->w = FLIPWORD(font->w); font->h = FLIPWORD(font->h); font->nchars = FLIPWORD(font->nchars); body_size = font->w * font->h * font->nchars; } if (body_size != body_size_check) { php_error(E_WARNING, "ImageFontLoad: error reading font"); efree(font); RETURN_FALSE; } font->data = emalloc(body_size); b = 0; while (b < body_size && (n = fread(&font->data[b], 1, body_size - b, fp))) b += n; if (!n) { fclose(fp); efree(font->data); efree(font); if (feof(fp)) { php_error(E_WARNING, "ImageFontLoad: end of file while reading body"); } else { php_error(E_WARNING, "ImageFontLoad: error while reading body"); } RETURN_FALSE; } fclose(fp); /* Adding 5 to the font index so we will never have font indices * that overlap with the old fonts (with indices 1-5). The first * list index given out is always 1. */ ind = 5 + zend_list_insert(font, le_gd_font); RETURN_LONG(ind); } /* }}} */ /* {{{ proto void imagesetstyle(resource im, array styles) Set the line drawing styles for use with imageline and IMG_COLOR_STYLED. */ PHP_FUNCTION(imagesetstyle) { zval **IM, **styles; gdImagePtr im; int * stylearr; int index; HashPosition pos; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &styles) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_array_ex(styles); /* copy the style values in the stylearr */ stylearr = emalloc(sizeof(int) * zend_hash_num_elements(HASH_OF(*styles))); zend_hash_internal_pointer_reset_ex(HASH_OF(*styles), &pos); for (index=0;; zend_hash_move_forward_ex(HASH_OF(*styles), &pos)) { zval ** item; if (zend_hash_get_current_data_ex(HASH_OF(*styles), (void**)&item, &pos) == FAILURE) break; convert_to_long_ex(item); stylearr[index++] = Z_LVAL_PP(item); } gdImageSetStyle(im, stylearr, index); efree(stylearr); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagecreatetruecolor(int x_size, int y_size) Create a new true color image */ PHP_FUNCTION(imagecreatetruecolor) { #if HAVE_LIBGD20 zval **x_size, **y_size; gdImagePtr im; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x_size, &y_size) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_long_ex(x_size); convert_to_long_ex(y_size); im = gdImageCreateTrueColor(Z_LVAL_PP(x_size), Z_LVAL_PP(y_size)); ZEND_REGISTER_RESOURCE(return_value, im, le_gd); #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted) Convert a true colour image to a palette based image with a number of colours, optionally using dithering. */ PHP_FUNCTION(imagetruecolortopalette) { #if HAVE_LIBGD20 zval **IM, **dither, **ncolors; gdImagePtr im; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &IM, &dither, &ncolors) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_boolean_ex(dither); convert_to_long_ex(ncolors); gdImageTrueColorToPalette(im, Z_LVAL_PP(dither), Z_LVAL_PP(ncolors)); RETURN_TRUE; #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto void imagesetthickness(resource im, int thickness) Set line thickness for drawing lines, ellipses, rectangles, polygons etc. */ PHP_FUNCTION(imagesetthickness) { #if HAVE_LIBGD20 zval **IM, **thick; gdImagePtr im; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &thick) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(thick); gdImageSetThickness(im, Z_LVAL_PP(thick)); RETURN_TRUE; #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto void imageellipse(resource im, int cx, int cy, int w, int h, int color) Draw an ellipse */ PHP_FUNCTION(imageellipse) { #if 0 && HAVE_LIBGD20 /* this function is missing from GD 2.0.1 */ zval **IM, **cx, **cy, **w, **h, **color; gdImagePtr im; if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &cx, &cy, &w, &h, &color) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(cx); convert_to_long_ex(cy); convert_to_long_ex(w); convert_to_long_ex(h); convert_to_long_ex(color); gdImageEllipse(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), Z_LVAL_PP(color)); RETURN_TRUE; #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto void imagefilledellipse(resource im, int cx, int cy, int w, int h, int color) Draw an ellipse */ PHP_FUNCTION(imagefilledellipse) { #if HAVE_LIBGD20 zval **IM, **cx, **cy, **w, **h, **color; gdImagePtr im; if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &cx, &cy, &w, &h, &color) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(cx); convert_to_long_ex(cy); convert_to_long_ex(w); convert_to_long_ex(h); convert_to_long_ex(color); gdImageFilledEllipse(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), Z_LVAL_PP(color)); RETURN_TRUE; #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto int imagefilledarc(int im, int cx, int cy, int w, int h, int s, int e, int col, int style) Draw a filled partial ellipse */ PHP_FUNCTION(imagefilledarc) { #if HAVE_LIBGD20 zval **IM, **cx, **cy, **w, **h, **ST, **E, **col, **style; gdImagePtr im; int e, st; if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &IM, &cx, &cy, &w, &h, &ST, &E, &col, &style) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(cx); convert_to_long_ex(cy); convert_to_long_ex(w); convert_to_long_ex(h); convert_to_long_ex(ST); convert_to_long_ex(E); convert_to_long_ex(col); convert_to_long_ex(style); e = Z_LVAL_PP(E); st = Z_LVAL_PP(ST); if (e < 0) e %= 360; if (st < 0) st %= 360; gdImageFilledArc(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), st, e, Z_LVAL_PP(col), Z_LVAL_PP(style)); RETURN_TRUE; #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto void imagealphablending(resource im, bool on) Turn alpha blending mode on or off for the given image */ PHP_FUNCTION(imagealphablending) { #if HAVE_LIBGD20 zval **IM, **blend; gdImagePtr im; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &blend) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_boolean_ex(blend); gdImageAlphaBlending(im, Z_LVAL_PP(blend)); RETURN_TRUE; #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha) Resolve/Allocate a colour with an alpha level. Works for true colour and palette based images */ PHP_FUNCTION(imagecolorresolvealpha) { #if HAVE_LIBGD20 zval **IM, ** red, **green, **blue, **alpha; gdImagePtr im; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(red); convert_to_long_ex(green); convert_to_long_ex(blue); convert_to_long_ex(alpha); RETURN_LONG(gdImageColorResolveAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue), Z_LVAL_PP(alpha))); #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha) Find the closest matching colour with alpha transparency */ PHP_FUNCTION(imagecolorclosestalpha) { #if HAVE_LIBGD20 zval **IM, ** red, **green, **blue, **alpha; gdImagePtr im; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(red); convert_to_long_ex(green); convert_to_long_ex(blue); convert_to_long_ex(alpha); RETURN_LONG(gdImageColorClosestAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue), Z_LVAL_PP(alpha))); #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha) Find exact match for colour with transparency */ PHP_FUNCTION(imagecolorexactalpha) { #if HAVE_LIBGD20 zval **IM, **red, **green, **blue, **alpha; gdImagePtr im; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(red); convert_to_long_ex(green); convert_to_long_ex(blue); convert_to_long_ex(alpha); RETURN_LONG(gdImageColorExactAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue), Z_LVAL_PP(alpha))); #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto int imagecopyresampled(int dst_im, int src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h) Copy and resize part of an image using resampling to help ensure clarity */ PHP_FUNCTION(imagecopyresampled) { #if HAVE_LIBGD20 zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **DW, **DH; gdImagePtr im_dst, im_src; int srcH, srcW, dstH, dstW, srcY, srcX, dstY, dstX; if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &DIM, &SIM, &DX, &DY, &SX, &SY, &DW, &DH, &SW, &SH) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd); ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd); convert_to_long_ex(SX); convert_to_long_ex(SY); convert_to_long_ex(SW); convert_to_long_ex(SH); convert_to_long_ex(DX); convert_to_long_ex(DY); convert_to_long_ex(DW); convert_to_long_ex(DH); srcX = Z_LVAL_PP(SX); srcY = Z_LVAL_PP(SY); srcH = Z_LVAL_PP(SH); srcW = Z_LVAL_PP(SW); dstX = Z_LVAL_PP(DX); dstY = Z_LVAL_PP(DY); dstH = Z_LVAL_PP(DH); dstW = Z_LVAL_PP(DW); gdImageCopyResampled(im_dst, im_src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH); RETURN_TRUE; #else zend_error(E_WARNING, "%s(): requires GD 2.0 or later", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto int imagesettile(resource image, resource tile) Set the tile image to $tile when filling $image with the "IMG_COLOR_TILED" color */ PHP_FUNCTION(imagesettile) { #if HAVE_GD_IMAGESETTILE zval **IM, **TILE; gdImagePtr im, tile; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &TILE) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); ZEND_FETCH_RESOURCE(tile, gdImagePtr, TILE, -1, "Image", le_gd); gdImageSetTile(im, tile); RETURN_TRUE; #else zend_error(E_WARNING, "%s(): requires a more recent version of GD", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto int imagesetbrush(resource image, resource brush) Set the brush image to $brush when filling $image with the "IMG_COLOR_BRUSHED" color */ PHP_FUNCTION(imagesetbrush) { #if HAVE_GD_IMAGESETBRUSH zval **IM, **TILE; gdImagePtr im, tile; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &TILE) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); ZEND_FETCH_RESOURCE(tile, gdImagePtr, TILE, -1, "Image", le_gd); gdImageSetBrush(im, tile); RETURN_TRUE; #else zend_error(E_WARNING, "%s(): requires a more recent version of GD", get_active_function_name(TSRMLS_C)); #endif } /* }}} */ /* {{{ proto int imagecreate(int x_size, int y_size) Create a new image */ PHP_FUNCTION(imagecreate) { zval **x_size, **y_size; gdImagePtr im; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x_size, &y_size) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_long_ex(x_size); convert_to_long_ex(y_size); im = gdImageCreate(Z_LVAL_PP(x_size), Z_LVAL_PP(y_size)); ZEND_REGISTER_RESOURCE(return_value, im, le_gd); } /* }}} */ /* {{{ proto int imagetypes(void) Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM */ PHP_FUNCTION(imagetypes) { int ret=0; #ifdef HAVE_GD_GIF_CREATE ret = 1; #endif #ifdef HAVE_GD_JPG ret |= 2; #endif #ifdef HAVE_GD_PNG ret |= 4; #endif #ifdef HAVE_GD_WBMP ret |= 8; #endif #ifdef HAVE_GD_XPM ret |= 16; #endif if (ZEND_NUM_ARGS() != 0) { WRONG_PARAM_COUNT; } RETURN_LONG(ret); } /* }}} */ /* {{{ _php_image_type */ static const char php_sig_gd2[3] = {'g', 'd', '2'}; static int _php_image_type (char data[8]) { #ifdef HAVE_LIBGD15 /* Based on ext/standard/images.c */ if (data == NULL) return -1; if (!memcmp(data, php_sig_gd2, 3)) return PHP_GDIMG_TYPE_GD2; else if (!memcmp(data, php_sig_jpg, 3)) return PHP_GDIMG_TYPE_JPG; else if (!memcmp(data, php_sig_png, 3)) { if (!memcmp(data, php_sig_png, 8)) return PHP_GDIMG_TYPE_PNG; } else if (!memcmp(data, php_sig_gif, 3)) return PHP_GDIMG_TYPE_GIF; #ifdef HAVE_GD_WBMP else { gdIOCtx *io_ctx; io_ctx = gdNewDynamicCtx (8, data); if (io_ctx) { if (getmbi(gdGetC, io_ctx) == 0 && skipheader(gdGetC, io_ctx) == 0 ) { io_ctx->free(io_ctx); return PHP_GDIMG_TYPE_WBM; } else io_ctx->free(io_ctx); } } #endif return -1; #endif } /* }}} */ /* {{{ _php_image_create_from_string */ gdImagePtr _php_image_create_from_string(zval **data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC) { #ifdef HAVE_LIBGD15 gdImagePtr im; gdIOCtx *io_ctx; io_ctx = gdNewDynamicCtx (Z_STRLEN_PP(data), Z_STRVAL_PP(data)); if(!io_ctx) { return NULL; } im = (*ioctx_func_p)(io_ctx); if (!im) { php_error(E_WARNING, "%s: Passed data is not in '%s' format", get_active_function_name(TSRMLS_C), tn); return NULL; } return im; #else return NULL; #endif } /* }}} */ /* {{{ proto int imagecreatefromstring(string image) Create a new image from the image stream in the string */ PHP_FUNCTION(imagecreatefromstring) { #ifdef HAVE_LIBGD15 zval **data; gdImagePtr im; int imtype; char sig[8]; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &data) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex(data); memcpy(sig, Z_STRVAL_PP(data), 8); imtype = _php_image_type (sig); switch (imtype) { case PHP_GDIMG_TYPE_JPG: #ifdef HAVE_GD_JPG im = _php_image_create_from_string (data, "JPEG", gdImageCreateFromJpegCtx TSRMLS_CC); #else php_error(E_WARNING, "No JPEG support in this PHP build"); RETURN_FALSE; #endif break; case PHP_GDIMG_TYPE_PNG: #ifdef HAVE_GD_PNG im = _php_image_create_from_string (data, "PNG", gdImageCreateFromPngCtx TSRMLS_CC); #else php_error(E_WARNING, "No PNG support in this PHP build"); RETURN_FALSE; #endif break; case PHP_GDIMG_TYPE_GIF: #ifdef HAVE_GD_GIF_READ im = _php_image_create_from_string (data, "GIF", gdImageCreateFromGifCtx TSRMLS_CC); #else php_error(E_WARNING, "No GIF support in this PHP build"); RETURN_FALSE; #endif break; case PHP_GDIMG_TYPE_WBM: #ifdef HAVE_GD_WBMP im = _php_image_create_from_string (data, "WBMP", gdImageCreateFromWBMPCtx TSRMLS_CC); #else php_error(E_WARNING, "No WBMP support in this PHP build"); RETURN_FALSE; #endif break; case PHP_GDIMG_TYPE_GD2: #ifdef HAVE_GD_GD2 im = _php_image_create_from_string (data, "GD2", gdImageCreateFromGd2Ctx TSRMLS_CC); #else php_error(E_WARNING, "No GD2 support in this PHP build"); RETURN_FALSE; #endif break; default: php_error(E_WARNING, "Data is not in a recognized format."); RETURN_FALSE; } if (!im) { php_error(E_WARNING, "Couldn't create GD Image Stream out of Data"); RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, im, le_gd); #else php_error(E_WARNING, "ImageCreateFromString: Only available with GD 1.5+"); #endif } /* }}} */ size_t php_fread_all(char **buf, int socket, FILE *fp, int issock); /* {{{ _php_image_create_from */ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)()) { zval **file, **srcx, **srcy, **width, **height; gdImagePtr im; char *fn=NULL; FILE *fp; int issock=0, socketd=0; int argc=ZEND_NUM_ARGS(); if ((image_type == PHP_GDIMG_TYPE_GD2PART && argc != 5) || (image_type != PHP_GDIMG_TYPE_GD2PART && argc != 1) || zend_get_parameters_ex(argc, &file, &srcx, &srcy, &width, &height) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex(file); if (argc == 4 && image_type == PHP_GDIMG_TYPE_GD2PART) { multi_convert_to_long_ex(4, srcx, srcy, width, height); } fn = Z_STRVAL_PP(file); #ifdef PHP_WIN32 fp = VCWD_FOPEN(fn, "rb"); #else fp = php_fopen_wrapper(fn, "r", IGNORE_PATH|IGNORE_URL_WIN, &issock, &socketd, NULL TSRMLS_CC); #endif if (!fp && !socketd) { php_strip_url_passwd(fn); php_error(E_WARNING, "%s: Unable to open '%s' for reading", get_active_function_name(TSRMLS_C), fn); RETURN_FALSE; } #ifndef USE_GD_IOCTX ioctx_func_p = NULL; /* don't allow sockets without IOCtx */ #endif if(issock && !ioctx_func_p) { php_error(E_WARNING, "%s: Sockets are not supported for image type '%s'", get_active_function_name(TSRMLS_C), tn); RETURN_FALSE; } if(issock && socketd) { #ifdef USE_GD_IOCTX gdIOCtx* io_ctx; size_t buff_size; char *buff, *buff_em; buff_size = php_fread_all(&buff_em, socketd, fp, issock); if(!buff_size) { php_error(E_WARNING,"%s: Cannot read image data", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } buff = malloc(buff_size); /* Should be malloc! GD uses free */ memcpy(buff, buff_em, buff_size); efree(buff_em); io_ctx = gdNewDynamicCtx(buff_size, buff); if(!io_ctx) { php_error(E_WARNING,"%s: Cannot allocate GD IO context", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } if (image_type == PHP_GDIMG_TYPE_GD2PART) { im = (*ioctx_func_p)(io_ctx, Z_LVAL_PP(srcx), Z_LVAL_PP(srcy), Z_LVAL_PP(width), Z_LVAL_PP(height)); } else { im = (*ioctx_func_p)(io_ctx); } io_ctx->free(io_ctx); #endif } else { if (image_type == PHP_GDIMG_TYPE_GD2PART) { im = (*func_p)(fp, Z_LVAL_PP(srcx), Z_LVAL_PP(srcy), Z_LVAL_PP(width), Z_LVAL_PP(height)); } else { im = (*func_p)(fp); } fflush(fp); fclose(fp); } if (!im) { php_error(E_WARNING,"%s: '%s' is not a valid %s file", get_active_function_name(TSRMLS_C), fn, tn); RETURN_FALSE; } ZEND_REGISTER_RESOURCE(return_value, im, le_gd); } /* }}} */ /* {{{ proto int imagecreatefromgif(string filename) Create a new image from GIF file or URL */ PHP_FUNCTION(imagecreatefromgif) { #ifdef HAVE_GD_GIF_READ _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageCreateFromGif, gdImageCreateFromGifCtx); #else /* HAVE_GD_GIF_READ */ php_error(E_WARNING, "ImageCreateFromGif: No GIF read support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_GIF_READ */ } /* }}} */ /* {{{ proto int imagecreatefromjpeg(string filename) Create a new image from JPEG file or URL */ PHP_FUNCTION(imagecreatefromjpeg) { #ifdef HAVE_GD_JPG _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageCreateFromJpeg, gdImageCreateFromJpegCtx); #else /* HAVE_GD_JPG */ php_error(E_WARNING, "ImageCreateFromJpeg: No JPEG support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_JPG */ } /* }}} */ /* {{{ proto int imagecreatefrompng(string filename) Create a new image from PNG file or URL */ PHP_FUNCTION(imagecreatefrompng) { #ifdef HAVE_GD_PNG _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImageCreateFromPng, gdImageCreateFromPngCtx); #else /* HAVE_GD_PNG */ php_error(E_WARNING, "ImageCreateFromPng: No PNG support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_PNG */ } /* }}} */ /* {{{ proto int imagecreatefromxbm(string filename) Create a new image from XBM file or URL */ PHP_FUNCTION(imagecreatefromxbm) { #ifdef HAVE_GD_XBM _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XBM, "XBM", gdImageCreateFromXbm, NULL); #else /* HAVE_GD_XBM */ php_error(E_WARNING, "ImageCreateFromXbm: No XBM support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_XBM */ } /* }}} */ /* {{{ proto int imagecreatefromxpm(string filename) Create a new image from XPM file or URL */ PHP_FUNCTION(imagecreatefromxpm) { /* #ifdef HAVE_GD_XPM _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XPM, "XPM", gdImageCreateFromXpm, NULL); #else */ php_error(E_WARNING, "ImageCreateFromXpm: No XPM support in this PHP build"); RETURN_FALSE; /* #endif */ } /* }}} */ /* {{{ proto int imagecreatefromwbmp(string filename) Create a new image from WBMP file or URL */ PHP_FUNCTION(imagecreatefromwbmp) { #ifdef HAVE_GD_WBMP _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageCreateFromWBMP, gdImageCreateFromWBMPCtx); #else /* HAVE_GD_WBMP */ php_error(E_WARNING, "ImageCreateFromWBMP: No WBMP support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_WBMP */ } /* }}} */ /* {{{ proto int imagecreatefromgd(string filename) Create a new image from GD file or URL */ PHP_FUNCTION(imagecreatefromgd) { _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD, "GD", gdImageCreateFromGd, gdImageCreateFromGdCtx); } /* }}} */ /* {{{ proto int imagecreatefromgd2(string filename) Create a new image from GD2 file or URL */ PHP_FUNCTION(imagecreatefromgd2) { #ifdef HAVE_GD_GD2 _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2, "GD2", gdImageCreateFromGd2, gdImageCreateFromGd2Ctx); #else /* HAVE_GD_GD2 */ php_error(E_WARNING, "ImageCreateFromGd2: No GD2 support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_GD2 */ } /* }}} */ /* {{{ proto int imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height) Create a new image from a given part of GD2 file or URL */ PHP_FUNCTION(imagecreatefromgd2part) { #ifdef HAVE_GD_GD2 _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2PART, "GD2", gdImageCreateFromGd2Part, gdImageCreateFromGd2PartCtx); #else /* HAVE_GD_GD2 */ php_error(E_WARNING, "ImageCreateFromGd2Part: No GD2 support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_GD2 */ } /* }}} */ /* {{{ _php_image_output */ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)()) { zval **imgind, **file, **quality; gdImagePtr im; char *fn = NULL; FILE *fp; int argc = ZEND_NUM_ARGS(); int q = -1, i; /* The quality parameter for Wbmp stands for the threshold when called from image2wbmp() */ /* When called from imagewbmp() the quality parameter stands for the foreground color. Default: black. */ if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &imgind, &file, &quality) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, imgind, -1, "Image", le_gd); if (argc > 1) { convert_to_string_ex(file); fn = Z_STRVAL_PP(file); if (argc == 3) { convert_to_long_ex(quality); q = Z_LVAL_PP(quality); } } if ((argc == 2) || (argc == 3 && Z_STRLEN_PP(file))) { if (!fn || fn == empty_string || php_check_open_basedir(fn TSRMLS_CC)) { php_error(E_WARNING, "%s: invalid filename '%s'", get_active_function_name(TSRMLS_C), fn); RETURN_FALSE; } fp = VCWD_FOPEN(fn, "wb"); if (!fp) { php_error(E_WARNING, "%s: unable to open '%s' for writing", get_active_function_name(TSRMLS_C), fn); RETURN_FALSE; } switch(image_type) { case PHP_GDIMG_CONVERT_WBM: if(q<0||q>255) { php_error(E_WARNING, "%s: invalid threshold value '%d'. It must be between 0 and 255", get_active_function_name(TSRMLS_C), q); } case PHP_GDIMG_TYPE_JPG: (*func_p)(im, fp, q); break; case PHP_GDIMG_TYPE_WBM: for(i=0; i < gdImageColorsTotal(im); i++) { if(gdImageRed(im, i) == 0) break; } (*func_p)(im, i, fp); break; default: (*func_p)(im, fp); break; } fflush(fp); fclose(fp); } else { int b; FILE *tmp; char buf[4096]; tmp = tmpfile(); if (tmp == NULL) { php_error(E_WARNING, "%s: unable to open temporary file", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } switch(image_type) { case PHP_GDIMG_CONVERT_WBM: if(q<0||q>255) { php_error(E_WARNING, "%s: invalid threshold value '%d'. It must be between 0 and 255", get_active_function_name(TSRMLS_C), q); } case PHP_GDIMG_TYPE_JPG: (*func_p)(im, tmp, q); break; case PHP_GDIMG_TYPE_WBM: for(i=0; i < gdImageColorsTotal(im); i++) { if(gdImageRed(im, i) == 0) break; } (*func_p)(im, q, tmp); break; default: (*func_p)(im, tmp); break; } fseek(tmp, 0, SEEK_SET); #if APACHE && defined(CHARSET_EBCDIC) /* XXX this is unlikely to work any more thies@thieso.net */ /* This is a binary file already: avoid EBCDIC->ASCII conversion */ ap_bsetflag(php3_rqst->connection->client, B_EBCDIC2ASCII, 0); #endif while ((b = fread(buf, 1, sizeof(buf), tmp)) > 0) { php_write(buf, b TSRMLS_CC); } fclose(tmp); /* the temporary file is automatically deleted */ } RETURN_TRUE; } /* }}} */ /* {{{ proto int imagegif(int im [, string filename]) Output GIF image to browser or file */ PHP_FUNCTION(imagegif) { #ifdef HAVE_GD_GIF_CREATE #ifdef HAVE_GD_GIF_CTX _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageGifCtx); #else _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageGif); #endif #else /* HAVE_GD_GIF_CREATE */ php_error(E_WARNING, "ImageGif: No GIF create support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_GIF_CREATE */ } /* }}} */ /* {{{ proto int imagepng(int im [, string filename]) Output PNG image to browser or file */ PHP_FUNCTION(imagepng) { #ifdef HAVE_GD_PNG #ifdef USE_GD_IOCTX _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImagePngCtx); #else _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImagePng); #endif #else /* HAVE_GD_PNG */ php_error(E_WARNING, "ImagePng: No PNG support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_PNG */ } /* }}} */ /* {{{ proto int imagejpeg(int im [, string filename [, int quality]]) Output JPEG image to browser or file */ PHP_FUNCTION(imagejpeg) { #ifdef HAVE_GD_JPG #ifdef USE_GD_IOCTX _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageJpegCtx); #else _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageJpeg); #endif #else /* HAVE_GD_JPG */ php_error(E_WARNING, "ImageJpeg: No JPG support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_JPG */ } /* }}} */ /* {{{ proto int imagewbmp(int im [, string filename, [, int foreground]]) Output WBMP image to browser or file */ PHP_FUNCTION(imagewbmp) { #ifdef HAVE_GD_WBMP #ifdef USE_GD_IOCTX _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageWBMPCtx); #else _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageWBMP); #endif #else /* HAVE_GD_WBMP */ php_error(E_WARNING, "ImageWBMP: No WBMP support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_WBMP */ } /* }}} */ /* {{{ proto int imagegd(int im [, string filename]) Output GD image to browser or file */ PHP_FUNCTION(imagegd) { _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD, "GD", gdImageGd); } /* }}} */ /* {{{ proto int imagegd2(int im [, string filename]) Output GD2 image to browser or file */ PHP_FUNCTION(imagegd2) { #ifdef HAVE_GD_GD2 _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2, "GD2", gdImageGd2); #else /* HAVE_GD_GD2 */ php_error(E_WARNING, "ImageGd2: No GD2 support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_GD2 */ } /* }}} */ /* {{{ proto int imagedestroy(int im) Destroy an image */ PHP_FUNCTION(imagedestroy) { zval **IM; gdImagePtr im; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); zend_list_delete(Z_LVAL_PP(IM)); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagecolorallocate(int im, int red, int green, int blue) Allocate a color for an image */ PHP_FUNCTION(imagecolorallocate) { zval **IM, **red, **green, **blue; gdImagePtr im; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(red); convert_to_long_ex(green); convert_to_long_ex(blue); RETURN_LONG(gdImageColorAllocate(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue))); } /* }}} */ /* {{{ proto int imagepalettecopy(int dst, int src) Copy the palette from the src image onto the dst image */ PHP_FUNCTION(imagepalettecopy) { #if HAVE_LIBGD15 zval **dstim, **srcim; gdImagePtr dst, src; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dstim, &srcim) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(dst, gdImagePtr, dstim, -1, "Image", le_gd); ZEND_FETCH_RESOURCE(src, gdImagePtr, srcim, -1, "Image", le_gd); gdImagePaletteCopy(dst, src); #else php_error(E_WARNING, "Sorry ImagePaletteCopy was introduced in GD version 1.5"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto int imagecolorat(int im, int x, int y) Get the index of the color of a pixel */ PHP_FUNCTION(imagecolorat) { zval **IM, **x, **y; gdImagePtr im; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &IM, &x, &y) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(x); convert_to_long_ex(y); #if HAVE_LIBGD20 if(gdImageTrueColor(im)) { if (im->tpixels && gdImageBoundsSafe(im, Z_LVAL_PP(x), Z_LVAL_PP(y))) { RETURN_LONG(gdImageTrueColorPixel(im, Z_LVAL_PP(x), Z_LVAL_PP(y))); } else { php_error(E_NOTICE, "%ld,%ld is out of bounds",Z_LVAL_PP(x), Z_LVAL_PP(y)); RETURN_FALSE; } } else { #endif if (im->pixels && gdImageBoundsSafe(im, Z_LVAL_PP(x), Z_LVAL_PP(y))) { #if HAVE_LIBGD13 RETURN_LONG(im->pixels[Z_LVAL_PP(y)][Z_LVAL_PP(x)]); #else RETURN_LONG(im->pixels[Z_LVAL_PP(x)][Z_LVAL_PP(y)]); #endif } else { php_error(E_NOTICE, "%ld,%ld is out of bounds",Z_LVAL_PP(x), Z_LVAL_PP(y)); RETURN_FALSE; } #if HAVE_LIBGD20 } #endif } /* }}} */ /* {{{ proto int imagecolorclosest(int im, int red, int green, int blue) Get the index of the closest color to the specified color */ PHP_FUNCTION(imagecolorclosest) { zval **IM, **red, **green, **blue; gdImagePtr im; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(red); convert_to_long_ex(green); convert_to_long_ex(blue); RETURN_LONG(gdImageColorClosest(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue))); } /* }}} */ /* {{{ proto int imagecolorclosesthwb(int im, int red, int green, int blue) Get the index of the color which has the hue, white and blackness nearest to the given color */ PHP_FUNCTION(imagecolorclosesthwb) { #if HAVE_COLORCLOSESTHWB zval **IM, **red, **green, **blue; gdImagePtr im; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(red); convert_to_long_ex(green); convert_to_long_ex(blue); RETURN_LONG(gdImageColorClosestHWB(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue))); #else php_error(E_WARNING, "ImageColorClosestHWB functionality was added in GD 1.8"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto int imagecolordeallocate(int im, int index) De-allocate a color for an image */ PHP_FUNCTION(imagecolordeallocate) { zval **IM, **index; int col; gdImagePtr im; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &index) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(index); col = Z_LVAL_PP(index); if (col >= 0 && col < gdImageColorsTotal(im)) { gdImageColorDeallocate(im, col); RETURN_TRUE; } else { php_error(E_WARNING, "Color index out of range"); RETURN_FALSE; } } /* }}} */ /* {{{ proto int imagecolorresolve(int im, int red, int green, int blue) Get the index of the specified color or its closest possible alternative */ PHP_FUNCTION(imagecolorresolve) { zval **IM, **red, **green, **blue; gdImagePtr im; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(red); convert_to_long_ex(green); convert_to_long_ex(blue); RETURN_LONG(gdImageColorResolve(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue))); } /* }}} */ /* {{{ proto int imagecolorexact(int im, int red, int green, int blue) Get the index of the specified color */ PHP_FUNCTION(imagecolorexact) { zval **IM, **red, **green, **blue; gdImagePtr im; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(red); convert_to_long_ex(green); convert_to_long_ex(blue); RETURN_LONG(gdImageColorExact(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue))); } /* }}} */ /* {{{ proto int imagecolorset(int im, int col, int red, int green, int blue) Set the color for the specified palette index */ PHP_FUNCTION(imagecolorset) { zval **IM, **color, **red, **green, **blue; int col; gdImagePtr im; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &color, &red, &green, &blue) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(color); convert_to_long_ex(red); convert_to_long_ex(green); convert_to_long_ex(blue); col = Z_LVAL_PP(color); if (col >= 0 && col < gdImageColorsTotal(im)) { im->red[col] = Z_LVAL_PP(red); im->green[col] = Z_LVAL_PP(green); im->blue[col] = Z_LVAL_PP(blue); } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto array imagecolorsforindex(int im, int col) Get the colors for an index */ PHP_FUNCTION(imagecolorsforindex) { zval **IM, **index; int col; gdImagePtr im; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &index) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(index); col = Z_LVAL_PP(index); #if HAVE_LIBGD20 if ((col >= 0 && gdImageTrueColor(im)) || (!gdImageTrueColor(im) && col >= 0 && col < gdImageColorsTotal(im))) { if (array_init(return_value) == FAILURE) { RETURN_FALSE; } add_assoc_long(return_value,"red", gdImageRed(im,col)); add_assoc_long(return_value,"green", gdImageGreen(im,col)); add_assoc_long(return_value,"blue", gdImageBlue(im,col)); add_assoc_long(return_value,"alpha", gdImageAlpha(im,col)); } #else if (col >= 0 && col < gdImageColorsTotal(im)) { if (array_init(return_value) == FAILURE) { RETURN_FALSE; } add_assoc_long(return_value,"red", im->red[col]); add_assoc_long(return_value,"green", im->green[col]); add_assoc_long(return_value,"blue", im->blue[col]); } #endif else { php_error(E_WARNING, "Color index out of range"); RETURN_FALSE; } } /* }}} */ /* {{{ proto int imagegammacorrect(int im, float inputgamma, float outputgamma) Apply a gamma correction to a GD image */ PHP_FUNCTION(imagegammacorrect) { zval **IM, **inputgamma, **outputgamma; gdImagePtr im; int i; double input, output; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &IM, &inputgamma, &outputgamma) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_double_ex(inputgamma); convert_to_double_ex(outputgamma); input = Z_DVAL_PP(inputgamma); output = Z_DVAL_PP(outputgamma); ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); #if HAVE_LIBGD20 if (gdImageTrueColor(im)) { int x, y, c; for (y = 0; y < gdImageSY(im); y++) { for (x = 0; x < gdImageSX(im); x++) { c = gdImageGetPixel(im, x, y); gdImageSetPixel(im, x, y, gdTrueColor( (int)((pow((pow((gdTrueColorGetRed(c) / 255.0), input)), 1.0 / output) * 255)+.5), (int)((pow((pow((gdTrueColorGetGreen(c) / 255.0), input)), 1.0 / output) * 255)+.5), (int)((pow((pow((gdTrueColorGetBlue(c) / 255.0), input)), 1.0 / output) * 255)+.5) ) ); } } RETURN_TRUE; } #endif for (i = 0; i < gdImageColorsTotal(im); i++) { im->red[i] = (int)((pow((pow((im->red[i] / 255.0), input)), 1.0 / output) * 255)+.5); im->green[i] = (int)((pow((pow((im->green[i] / 255.0), input)), 1.0 / output) * 255)+.5); im->blue[i] = (int)((pow((pow((im->blue[i] / 255.0), input)), 1.0 / output) * 255)+.5); } RETURN_TRUE; } /* }}} */ /* {{{ proto int imagesetpixel(int im, int x, int y, int col) Set a single pixel */ PHP_FUNCTION(imagesetpixel) { zval **IM, **x, **y, **col; gdImagePtr im; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &x, &y, &col) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(x); convert_to_long_ex(y); convert_to_long_ex(col); gdImageSetPixel(im, Z_LVAL_PP(x), Z_LVAL_PP(y), Z_LVAL_PP(col)); RETURN_TRUE; } /* }}} */ /* {{{ proto int imageline(int im, int x1, int y1, int x2, int y2, int col) Draw a line */ PHP_FUNCTION(imageline) { zval **IM, **x1, **y1, **x2, **y2, **col; gdImagePtr im; if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(x1); convert_to_long_ex(y1); convert_to_long_ex(x2); convert_to_long_ex(y2); convert_to_long_ex(col); gdImageLine(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col)); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagedashedline(int im, int x1, int y1, int x2, int y2, int col) Draw a dashed line */ PHP_FUNCTION(imagedashedline) { zval **IM, **x1, **y1, **x2, **y2, **col; gdImagePtr im; if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(x1); convert_to_long_ex(y1); convert_to_long_ex(x2); convert_to_long_ex(y2); convert_to_long_ex(col); gdImageDashedLine(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col)); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagerectangle(int im, int x1, int y1, int x2, int y2, int col) Draw a rectangle */ PHP_FUNCTION(imagerectangle) { zval **IM, **x1, **y1, **x2, **y2, **col; gdImagePtr im; if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(x1); convert_to_long_ex(y1); convert_to_long_ex(x2); convert_to_long_ex(y2); convert_to_long_ex(col); gdImageRectangle(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col)); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagefilledrectangle(int im, int x1, int y1, int x2, int y2, int col) Draw a filled rectangle */ PHP_FUNCTION(imagefilledrectangle) { zval **IM, **x1, **y1, **x2, **y2, **col; gdImagePtr im; if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(x1); convert_to_long_ex(y1); convert_to_long_ex(x2); convert_to_long_ex(y2); convert_to_long_ex(col); gdImageFilledRectangle(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col)); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagearc(int im, int cx, int cy, int w, int h, int s, int e, int col) Draw a partial ellipse */ PHP_FUNCTION(imagearc) { zval **IM, **cx, **cy, **w, **h, **ST, **E, **col; gdImagePtr im; int e, st; if (ZEND_NUM_ARGS() != 8 || zend_get_parameters_ex(8, &IM, &cx, &cy, &w, &h, &ST, &E, &col) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(cx); convert_to_long_ex(cy); convert_to_long_ex(w); convert_to_long_ex(h); convert_to_long_ex(ST); convert_to_long_ex(E); convert_to_long_ex(col); e = Z_LVAL_PP(E); st = Z_LVAL_PP(ST); if (e < 0) e %= 360; if (st < 0) st %= 360; gdImageArc(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), st, e, Z_LVAL_PP(col)); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagefilltoborder(int im, int x, int y, int border, int col) Flood fill to specific color */ PHP_FUNCTION(imagefilltoborder) { zval **IM, **x, **y, **border, **col; gdImagePtr im; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &x, &y, &border, &col) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(x); convert_to_long_ex(y); convert_to_long_ex(border); convert_to_long_ex(col); gdImageFillToBorder(im, Z_LVAL_PP(x), Z_LVAL_PP(y), Z_LVAL_PP(border), Z_LVAL_PP(col)); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagefill(int im, int x, int y, int col) Flood fill */ PHP_FUNCTION(imagefill) { zval **IM, **x, **y, **col; gdImagePtr im; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &x, &y, &col) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(x); convert_to_long_ex(y); convert_to_long_ex(col); gdImageFill(im, Z_LVAL_PP(x), Z_LVAL_PP(y), Z_LVAL_PP(col)); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagecolorstotal(int im) Find out the number of colors in an image's palette */ PHP_FUNCTION(imagecolorstotal) { zval **IM; gdImagePtr im; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); RETURN_LONG(gdImageColorsTotal(im)); } /* }}} */ /* {{{ proto int imagecolortransparent(int im [, int col]) Define a color as transparent */ PHP_FUNCTION(imagecolortransparent) { zval **IM, **COL; gdImagePtr im; switch(ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &IM) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } break; case 2: if (zend_get_parameters_ex(2, &IM, &COL) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_long_ex(COL); break; default: ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); if (ZEND_NUM_ARGS() > 1) { gdImageColorTransparent(im, Z_LVAL_PP(COL)); } RETURN_LONG(gdImageGetTransparent(im)); } /* }}} */ /* {{{ proto int imageinterlace(int im [, int interlace]) Enable or disable interlace */ PHP_FUNCTION(imageinterlace) { zval **IM, **INT; gdImagePtr im; switch(ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &IM) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } break; case 2: if (zend_get_parameters_ex(2, &IM, &INT) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_long_ex(INT); break; default: ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); if (ZEND_NUM_ARGS() > 1) { gdImageInterlace(im, Z_LVAL_PP(INT)); } RETURN_LONG(gdImageGetInterlaced(im)); } /* }}} */ /* {{{ php_imagepolygon arg = 0 normal polygon arg = 1 filled polygon */ /* im, points, num_points, col */ static void php_imagepolygon(INTERNAL_FUNCTION_PARAMETERS, int filled) { zval **IM, **POINTS, **NPOINTS, **COL; pval **var = NULL; gdImagePtr im; gdPointPtr points; int npoints, col, nelem, i; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &POINTS, &NPOINTS, &COL) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(NPOINTS); convert_to_long_ex(COL); npoints = Z_LVAL_PP(NPOINTS); col = Z_LVAL_PP(COL); if (Z_TYPE_PP(POINTS) != IS_ARRAY) { php_error(E_WARNING, "2nd argument to imagepolygon not an array"); RETURN_FALSE; } nelem = zend_hash_num_elements(Z_ARRVAL_PP(POINTS)); if (nelem < 6) { php_error(E_WARNING, "you must have at least 3 points in your array"); RETURN_FALSE; } if (nelem < npoints * 2) { php_error(E_WARNING, "trying to use %d points in array with only %d points", npoints, nelem/2); RETURN_FALSE; } points = (gdPointPtr) emalloc(npoints * sizeof(gdPoint)); for (i = 0; i < npoints; i++) { if (zend_hash_index_find(Z_ARRVAL_PP(POINTS), (i * 2), (void **) &var) == SUCCESS) { SEPARATE_ZVAL((var)); convert_to_long(*var); points[i].x = Z_LVAL_PP(var); } if (zend_hash_index_find(Z_ARRVAL_PP(POINTS), (i * 2) + 1, (void **) &var) == SUCCESS) { SEPARATE_ZVAL(var); convert_to_long(*var); points[i].y = Z_LVAL_PP(var); } } if (filled) { gdImageFilledPolygon(im, points, npoints, col); } else { gdImagePolygon(im, points, npoints, col); } efree(points); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagepolygon(int im, array point, int num_points, int col) Draw a polygon */ PHP_FUNCTION(imagepolygon) { php_imagepolygon(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto int imagefilledpolygon(int im, array point, int num_points, int col) Draw a filled polygon */ PHP_FUNCTION(imagefilledpolygon) { php_imagepolygon(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ php_find_gd_font */ static gdFontPtr php_find_gd_font(int size) { gdFontPtr font; int ind_type; TSRMLS_FETCH(); switch (size) { case 1: font = gdFontTiny; break; case 2: font = gdFontSmall; break; case 3: font = gdFontMediumBold; break; case 4: font = gdFontLarge; break; case 5: font = gdFontGiant; break; default: font = zend_list_find(size - 5, &ind_type); if (!font || ind_type != le_gd_font) { if (size < 1) { font = gdFontTiny; } else { font = gdFontGiant; } } break; } return font; } /* }}} */ /* {{{ php_imagefontsize * arg = 0 ImageFontWidth * arg = 1 ImageFontHeight */ static void php_imagefontsize(INTERNAL_FUNCTION_PARAMETERS, int arg) { zval **SIZE; gdFontPtr font; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &SIZE) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_long_ex(SIZE); font = php_find_gd_font(Z_LVAL_PP(SIZE)); RETURN_LONG(arg ? font->h : font->w); } /* }}} */ /* {{{ proto int imagefontwidth(int font) Get font width */ PHP_FUNCTION(imagefontwidth) { php_imagefontsize(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto int imagefontheight(int font) Get font height */ PHP_FUNCTION(imagefontheight) { php_imagefontsize(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ php_gdimagecharup * workaround for a bug in gd 1.2 */ static void php_gdimagecharup(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color) { int cx, cy, px, py, fline; cx = 0; cy = 0; if ((c < f->offset) || (c >= (f->offset + f->nchars))) { return; } fline = (c - f->offset) * f->h * f->w; for (py = y; (py > (y - f->w)); py--) { for (px = x; (px < (x + f->h)); px++) { if (f->data[fline + cy * f->w + cx]) { gdImageSetPixel(im, px, py, color); } cy++; } cy = 0; cx++; } } /* }}} */ /* {{{ php_imagechar * arg = 0 ImageChar * arg = 1 ImageCharUp * arg = 2 ImageString * arg = 3 ImageStringUp */ static void php_imagechar(INTERNAL_FUNCTION_PARAMETERS, int mode) { zval **IM, **SIZE, **X, **Y, **C, **COL; gdImagePtr im; int ch = 0, col, x, y, size, i, l = 0; unsigned char *str = NULL; gdFontPtr font; if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &SIZE, &X, &Y, &C, &COL) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); convert_to_long_ex(SIZE); convert_to_long_ex(X); convert_to_long_ex(Y); convert_to_string_ex(C); convert_to_long_ex(COL); col = Z_LVAL_PP(COL); if (mode < 2) { ch = (int)((unsigned char)*(Z_STRVAL_PP(C))); } else { str = (unsigned char *) estrndup(Z_STRVAL_PP(C), Z_STRLEN_PP(C)); l = strlen(str); } y = Z_LVAL_PP(Y); x = Z_LVAL_PP(X); size = Z_LVAL_PP(SIZE); font = php_find_gd_font(size); switch(mode) { case 0: gdImageChar(im, font, x, y, ch, col); break; case 1: php_gdimagecharup(im, font, x, y, ch, col); break; case 2: for (i = 0; (i < l); i++) { gdImageChar(im, font, x, y, (int)((unsigned char)str[i]), col); x += font->w; } break; case 3: { for (i = 0; (i < l); i++) { /* php_gdimagecharup(im, font, x, y, (int)str[i], col); */ gdImageCharUp(im, font, x, y, (int)str[i], col); y -= font->w; } break; } } if (str) { efree(str); } RETURN_TRUE; } /* }}} */ /* {{{ proto int imagechar(int im, int font, int x, int y, string c, int col) Draw a character */ PHP_FUNCTION(imagechar) { php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto int imagecharup(int im, int font, int x, int y, string c, int col) Draw a character rotated 90 degrees counter-clockwise */ PHP_FUNCTION(imagecharup) { php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ proto int imagestring(int im, int font, int x, int y, string str, int col) Draw a string horizontally */ PHP_FUNCTION(imagestring) { php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2); } /* }}} */ /* {{{ proto int imagestringup(int im, int font, int x, int y, string str, int col) Draw a string vertically - rotated 90 degrees counter-clockwise */ PHP_FUNCTION(imagestringup) { php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3); } /* }}} */ /* {{{ proto int imagecopy(int dst_im, int src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h) Copy part of an image */ PHP_FUNCTION(imagecopy) { zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY; gdImagePtr im_dst, im_src; int srcH, srcW, srcY, srcX, dstY, dstX; if (ZEND_NUM_ARGS() != 8 || zend_get_parameters_ex(8, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd); ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd); convert_to_long_ex(SX); convert_to_long_ex(SY); convert_to_long_ex(SW); convert_to_long_ex(SH); convert_to_long_ex(DX); convert_to_long_ex(DY); srcX = Z_LVAL_PP(SX); srcY = Z_LVAL_PP(SY); srcH = Z_LVAL_PP(SH); srcW = Z_LVAL_PP(SW); dstX = Z_LVAL_PP(DX); dstY = Z_LVAL_PP(DY); gdImageCopy(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagecopymerge(int src_im, int dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct) Merge one part of an image with another */ PHP_FUNCTION(imagecopymerge) { #if HAVE_LIBGD15 zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **PCT; gdImagePtr im_dst, im_src; int srcH, srcW, srcY, srcX, dstY, dstX, pct; if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH, &PCT) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd); ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd); convert_to_long_ex(SX); convert_to_long_ex(SY); convert_to_long_ex(SW); convert_to_long_ex(SH); convert_to_long_ex(DX); convert_to_long_ex(DY); convert_to_long_ex(PCT); srcX = Z_LVAL_PP(SX); srcY = Z_LVAL_PP(SY); srcH = Z_LVAL_PP(SH); srcW = Z_LVAL_PP(SW); dstX = Z_LVAL_PP(DX); dstY = Z_LVAL_PP(DY); pct = Z_LVAL_PP(PCT); gdImageCopyMerge(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH, pct); RETURN_TRUE; #else php_error(E_WARNING, "ImageCopyMerge was introduced in GD version 1.5"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto int imagecopymergegray(int src_im, int dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct) Merge one part of an image with another */ PHP_FUNCTION(imagecopymergegray) { #if HAVE_LIBGD15 zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **PCT; gdImagePtr im_dst, im_src; int srcH, srcW, srcY, srcX, dstY, dstX, pct; if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH, &PCT) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd); ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd); convert_to_long_ex(SX); convert_to_long_ex(SY); convert_to_long_ex(SW); convert_to_long_ex(SH); convert_to_long_ex(DX); convert_to_long_ex(DY); convert_to_long_ex(PCT); srcX = Z_LVAL_PP(SX); srcY = Z_LVAL_PP(SY); srcH = Z_LVAL_PP(SH); srcW = Z_LVAL_PP(SW); dstX = Z_LVAL_PP(DX); dstY = Z_LVAL_PP(DY); pct = Z_LVAL_PP(PCT); gdImageCopyMergeGray(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH, pct); RETURN_TRUE; #else php_error(E_WARNING, "%s(): was introduced in GD version 1.5", get_active_function_name(TSRMLS_C)); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto int imagecopyresized(int dst_im, int src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h) Copy and resize part of an image */ PHP_FUNCTION(imagecopyresized) { zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **DW, **DH; gdImagePtr im_dst, im_src; int srcH, srcW, dstH, dstW, srcY, srcX, dstY, dstX; if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &DIM, &SIM, &DX, &DY, &SX, &SY, &DW, &DH, &SW, &SH) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd); ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd); convert_to_long_ex(SX); convert_to_long_ex(SY); convert_to_long_ex(SW); convert_to_long_ex(SH); convert_to_long_ex(DX); convert_to_long_ex(DY); convert_to_long_ex(DW); convert_to_long_ex(DH); srcX = Z_LVAL_PP(SX); srcY = Z_LVAL_PP(SY); srcH = Z_LVAL_PP(SH); srcW = Z_LVAL_PP(SW); dstX = Z_LVAL_PP(DX); dstY = Z_LVAL_PP(DY); dstH = Z_LVAL_PP(DH); dstW = Z_LVAL_PP(DW); gdImageCopyResized(im_dst, im_src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH); RETURN_TRUE; } /* }}} */ /* {{{ proto int imagesx(int im) Get image width */ PHP_FUNCTION(imagesx) { zval **IM; gdImagePtr im; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); RETURN_LONG(gdImageSX(im)); } /* }}} */ /* {{{ proto int imagesy(int im) Get image height */ PHP_FUNCTION(imagesy) { zval **IM; gdImagePtr im; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); RETURN_LONG(gdImageSY(im)); } /* }}} */ #ifdef ENABLE_GD_TTF #define TTFTEXT_DRAW 0 #define TTFTEXT_BBOX 1 #endif /* {{{ proto array imageftbbox(int size, int angle, string font_file, string text[, array extrainfo]) Give the bounding box of a text using fonts via freetype2 */ PHP_FUNCTION(imageftbbox) { #if HAVE_LIBGD20 && HAVE_LIBFREETYPE # if HAVE_GD_STRINGFTEX php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_BBOX, 1); # else php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_BBOX, 0); # endif #else php_error(E_WARNING, "%s(): No FreeType 2 support in this PHP build", get_active_function_name(TSRMLS_C)); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto array imagefttext(int im, int size, int angle, int x, int y, int col, string font_file, string text, [array extrainfo]) Write text to the image using fonts via freetype2 */ PHP_FUNCTION(imagefttext) { #if HAVE_LIBGD20 && HAVE_LIBFREETYPE # if HAVE_GD_STRINGFTEX php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_DRAW, 1); # else php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_DRAW, 0); # endif #else php_error(E_WARNING, "%s(): No FreeType 2 support in this PHP build", get_active_function_name(TSRMLS_C)); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto array imagettfbbox(int size, int angle, string font_file, string text) Give the bounding box of a text using TrueType fonts */ PHP_FUNCTION(imagettfbbox) { #ifdef ENABLE_GD_TTF php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_BBOX, 0); #else php_error(E_WARNING, "ImageTtfBBox: No TTF support in this PHP build"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto array imagettftext(int im, int size, int angle, int x, int y, int col, string font_file, string text) Write text to the image using a TrueType font */ PHP_FUNCTION(imagettftext) { #ifdef ENABLE_GD_TTF php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_DRAW, 0); #else php_error(E_WARNING, "ImageTtfText: No TTF support in this PHP build"); RETURN_FALSE; #endif } /* }}} */ #ifdef ENABLE_GD_TTF /* {{{ php_imagettftext_common */ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int extended) { zval **IM, **PTSIZE, **ANGLE, **X, **Y, **C, **FONTNAME, **COL, **EXT = NULL; gdImagePtr im=NULL; int col, x, y, l=0, i, brect[8]; double ptsize, angle; unsigned char *str = NULL, *fontname = NULL; char *error; int argc; #if HAVE_GD_STRINGFTEX gdFTStringExtra strex; #endif #if !HAVE_GD_STRINGFTEX if (extended) { zend_error(E_WARNING, "%s(): gdImageStringFTEx not supported in this PHP build", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } #endif argc = ZEND_NUM_ARGS(); if (mode == TTFTEXT_BBOX) { if ((extended && argc != 5) || (!extended && argc != 4) || zend_get_parameters_ex(argc, &PTSIZE, &ANGLE, &FONTNAME, &C, &EXT) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } } else { if ((extended && argc != 9) || (!extended && argc != 8) || zend_get_parameters_ex(argc, &IM, &PTSIZE, &ANGLE, &X, &Y, &COL, &FONTNAME, &C, &EXT) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd); } convert_to_double_ex(PTSIZE); convert_to_double_ex(ANGLE); convert_to_string_ex(FONTNAME); convert_to_string_ex(C); if (mode == TTFTEXT_BBOX) { im = NULL; col = x = y = -1; } else { convert_to_long_ex(X); convert_to_long_ex(Y); convert_to_long_ex(COL); col = Z_LVAL_PP(COL); y = Z_LVAL_PP(Y); x = Z_LVAL_PP(X); #if HAVE_GD_STRINGFTEX if (EXT) { /* parse extended info */ HashPosition pos; convert_to_array_ex(EXT); memset(&strex, 0, sizeof(strex)); /* walk the assoc array */ zend_hash_internal_pointer_reset_ex(HASH_OF(*EXT), &pos); do { zval ** item; char * key; if (zend_hash_get_current_key_ex(HASH_OF(*EXT), &key, NULL, NULL, 0, &pos) == FAILURE) continue; if (zend_hash_get_current_data_ex(HASH_OF(*EXT), (void**)&item, &pos) == FAILURE) continue; if (strcmp("linespacing", key) == 0) { convert_to_double_ex(item); strex.flags |= gdFTEX_LINESPACE; strex.linespacing = Z_DVAL_PP(item); } } while(zend_hash_move_forward_ex(HASH_OF(*EXT), &pos) == SUCCESS); } #endif } ptsize = Z_DVAL_PP(PTSIZE); angle = Z_DVAL_PP(ANGLE) * (M_PI/180); /* convert to radians */ str = (unsigned char *) Z_STRVAL_PP(C); l = strlen(str); #ifdef VIRTUAL_DIR if(virtual_filepath(Z_STRVAL_PP(FONTNAME), &fontname TSRMLS_CC)) { fontname = (unsigned char*)Z_STRVAL_PP(FONTNAME); } #else fontname = (unsigned char*)Z_STRVAL_PP(FONTNAME); #endif #ifdef USE_GD_IMGSTRTTF # if HAVE_GD_STRINGFTEX if (extended) { error = gdImageStringFTEx(im, brect, col, fontname, ptsize, angle, x, y, str, &strex); } else # endif # if HAVE_GD_STRINGFT error = gdImageStringFT(im, brect, col, fontname, ptsize, angle, x, y, str); # elif HAVE_GD_STRINGTTF error = gdImageStringTTF(im, brect, col, fontname, ptsize, angle, x, y, str); # endif #else /* !USE_GD_IMGSTRTTF */ error = gdttf(im, brect, col, fontname, ptsize, angle, x, y, str); #endif if (error) { php_error(E_WARNING, "%s", error); RETURN_FALSE; } if (array_init(return_value) == FAILURE) { RETURN_FALSE; } /* return array with the text's bounding box */ for (i = 0; i < 8; i++) { add_next_index_long(return_value, brect[i]); } } /* }}} */ #endif /* ENABLE_GD_TTF */ #if HAVE_LIBT1 /* {{{ php_free_ps_font */ void php_free_ps_font(zend_rsrc_list_entry *rsrc TSRMLS_DC) { int *font = (int *)rsrc->ptr; T1_DeleteFont(*font); efree(font); } /* }}} */ /* {{{ php_free_ps_enc */ void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC) { char **enc = (char **)rsrc->ptr; T1_DeleteEncoding(enc); } /* }}} */ #endif /* {{{ proto int imagepsloadfont(string pathname) Load a new font from specified file */ PHP_FUNCTION(imagepsloadfont) { #if HAVE_LIBT1 zval **file; int f_ind, *font; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex(file); f_ind = T1_AddFont(Z_STRVAL_PP(file)); if (f_ind < 0) { switch (f_ind) { case -1: php_error(E_WARNING, "Couldn't find the font file"); RETURN_FALSE; break; case -2: case -3: php_error(E_WARNING, "Memory allocation fault in t1lib"); RETURN_FALSE; break; default: php_error(E_WARNING, "An unknown error occurred in t1lib"); RETURN_FALSE; break; } } if (T1_LoadFont(f_ind)) { php_error(E_WARNING, "Couldn't load the font"); RETURN_FALSE; } font = (int *) emalloc(sizeof(int)); *font = f_ind; ZEND_REGISTER_RESOURCE(return_value, font, le_ps_font); #else php_error(E_WARNING, "ImagePsLoadFont: No T1lib support in this PHP build"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto int imagepscopyfont(int font_index) Make a copy of a font for purposes like extending or reenconding */ /* The function in t1lib which this function uses seem to be buggy... PHP_FUNCTION(imagepscopyfont) { #if HAVE_LIBT1 zval **fnt; int l_ind, type; gd_ps_font *nf_ind, *of_ind; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fnt) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_long_ex(fnt); of_ind = zend_list_find(Z_LVAL_PP(fnt), &type); if (type != le_ps_font) { php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_PP(fnt)); RETURN_FALSE; } nf_ind = emalloc(sizeof(gd_ps_font)); nf_ind->font_id = T1_CopyFont(of_ind->font_id); if (nf_ind->font_id < 0) { l_ind = nf_ind->font_id; efree(nf_ind); switch (l_ind) { case -1: php_error(E_WARNING, "FontID %d is not loaded in memory", l_ind); RETURN_FALSE; break; case -2: php_error(E_WARNING, "Tried to copy a logical font"); RETURN_FALSE; break; case -3: php_error(E_WARNING, "Memory allocation fault in t1lib"); RETURN_FALSE; break; default: php_error(E_WARNING, "An unknown error occurred in t1lib"); RETURN_FALSE; break; } } nf_ind->extend = 1; l_ind = zend_list_insert(nf_ind, le_ps_font); RETURN_LONG(l_ind); #else php_error(E_WARNING, "ImagePsCopyFont: No T1lib support in this PHP build"); RETURN_FALSE; #endif } */ /* }}} */ /* {{{ proto bool imagepsfreefont(int font_index) Free memory used by a font */ PHP_FUNCTION(imagepsfreefont) { #if HAVE_LIBT1 zval **fnt; int *f_ind; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fnt) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font); zend_list_delete(Z_LVAL_PP(fnt)); RETURN_TRUE; #else php_error(E_WARNING, "ImagePsFreeFont: No T1lib support in this PHP build"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto bool imagepsencodefont(int font_index, string filename) To change a fonts character encoding vector */ PHP_FUNCTION(imagepsencodefont) { #if HAVE_LIBT1 zval **fnt, **enc; char **enc_vector; int *f_ind; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &enc) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex(enc); ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font); if ((enc_vector = T1_LoadEncoding(Z_STRVAL_PP(enc))) == NULL) { php_error(E_WARNING, "Couldn't load encoding vector from %s", Z_STRVAL_PP(enc)); RETURN_FALSE; } T1_DeleteAllSizes(*f_ind); if (T1_ReencodeFont(*f_ind, enc_vector)) { T1_DeleteEncoding(enc_vector); php_error(E_WARNING, "Couldn't reencode font"); RETURN_FALSE; } zend_list_insert(enc_vector, le_ps_enc); RETURN_TRUE; #else php_error(E_WARNING, "ImagePsEncodeFont: No T1lib support in this PHP build"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto bool imagepsextendfont(int font_index, float extend) Extend or or condense (if extend < 1) a font */ PHP_FUNCTION(imagepsextendfont) { #if HAVE_LIBT1 zval **fnt, **ext; int *f_ind; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &ext) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_double_ex(ext); ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font); if (T1_ExtendFont(*f_ind, Z_DVAL_PP(ext)) != 0) RETURN_FALSE; RETURN_TRUE; #else php_error(E_WARNING, "ImagePsExtendFont: No T1lib support in this PHP build"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto bool imagepsslantfont(int font_index, float slant) Slant a font */ PHP_FUNCTION(imagepsslantfont) { #if HAVE_LIBT1 zval **fnt, **slt; int *f_ind; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &slt) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_double_ex(slt); ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font); if (T1_SlantFont(*f_ind, Z_DVAL_PP(slt)) != 0) RETURN_FALSE; RETURN_TRUE; #else php_error(E_WARNING, "ImagePsSlantFont: No T1lib support in this PHP build"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto array imagepstext(int image, string text, int font, int size, int xcoord, int ycoord [, int space, int tightness, float angle, int antialias]) Rasterize a string over an image */ PHP_FUNCTION(imagepstext) { #if HAVE_LIBT1 zval **img, **str, **fnt, **sz, **fg, **bg, **sp, **px, **py, **aas, **wd, **ang; int i, j, x, y; int space; int *f_ind; int h_lines, v_lines, c_ind; int rd, gr, bl, fg_rd, fg_gr, fg_bl, bg_rd, bg_gr, bg_bl, _fg, _bg; int aa[16], aa_steps; int width, amount_kern, add_width; double angle, extend; unsigned long aa_greys[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; gdImagePtr bg_img; GLYPH *str_img; T1_OUTLINE *char_path, *str_path; T1_TMATRIX *transform = NULL; char *_str; switch(ZEND_NUM_ARGS()) { case 8: if (zend_get_parameters_ex(8, &img, &str, &fnt, &sz, &fg, &bg, &px, &py) == FAILURE) { RETURN_FALSE; } space = 0; aa_steps = 4; width = 0; angle = 0; break; case 12: if (zend_get_parameters_ex(12, &img, &str, &fnt, &sz, &fg, &bg, &px, &py, &sp, &wd, &ang, &aas) == FAILURE) { RETURN_FALSE; } convert_to_long_ex(sp); convert_to_long_ex(aas); convert_to_long_ex(wd); convert_to_double_ex(ang); space = Z_LVAL_PP(sp); aa_steps = Z_LVAL_PP(aas); width = Z_LVAL_PP(wd); angle = Z_DVAL_PP(ang); break; default: ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(bg_img, gdImagePtr, img, -1, "Image", le_gd); ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font); x = Z_LVAL_PP(px); y = Z_LVAL_PP(py); _fg = Z_LVAL_PP(fg); _bg = Z_LVAL_PP(bg); fg_rd = gdImageRed (bg_img, _fg); fg_gr = gdImageGreen(bg_img, _fg); fg_bl = gdImageBlue (bg_img, _fg); bg_rd = gdImageRed (bg_img, _bg); bg_gr = gdImageGreen(bg_img, _bg); bg_bl = gdImageBlue (bg_img, _bg); for (i = 0; i < aa_steps; i++) { rd = bg_rd+(double)(fg_rd-bg_rd)/aa_steps*(i+1); gr = bg_gr+(double)(fg_gr-bg_gr)/aa_steps*(i+1); bl = bg_bl+(double)(fg_bl-bg_bl)/aa_steps*(i+1); aa[i] = gdImageColorResolve(bg_img, rd, gr, bl); } T1_AASetBitsPerPixel(8); switch (aa_steps) { case 4: T1_AASetGrayValues(0, 1, 2, 3, 4); T1_AASetLevel(T1_AA_LOW); break; case 16: T1_AAHSetGrayValues(aa_greys); T1_AASetLevel(T1_AA_HIGH); break; default: php_error(E_WARNING, "Invalid value %d as number of steps for antialiasing", aa_steps); RETURN_FALSE; } if (angle) { transform = T1_RotateMatrix(NULL, angle); } _str = Z_STRVAL_PP(str); if (width) { extend = T1_GetExtend(*f_ind); str_path = T1_GetCharOutline(*f_ind, _str[0], Z_LVAL_PP(sz), transform); for (i = 1; i < Z_STRLEN_PP(str); i++) { amount_kern = (int) T1_GetKerning(*f_ind, _str[i-1], _str[i]); amount_kern += _str[i-1] == ' ' ? space : 0; add_width = (int) (amount_kern+width)/extend; char_path = T1_GetMoveOutline(*f_ind, add_width, 0, 0, Z_LVAL_PP(sz), transform); str_path = T1_ConcatOutlines(str_path, char_path); char_path = T1_GetCharOutline(*f_ind, _str[i], Z_LVAL_PP(sz), transform); str_path = T1_ConcatOutlines(str_path, char_path); } str_img = T1_AAFillOutline(str_path, 0); } else { str_img = T1_AASetString(*f_ind, _str, Z_STRLEN_PP(str), space, T1_KERNING, Z_LVAL_PP(sz), transform); } if (T1_errno) { php_error(E_WARNING, "libt1 returned error %d", T1_errno); RETURN_FALSE; } h_lines = str_img->metrics.ascent - str_img->metrics.descent; v_lines = str_img->metrics.rightSideBearing - str_img->metrics.leftSideBearing; for (i = 0; i < v_lines; i++) { for (j = 0; j < h_lines; j++) { switch (str_img->bits[j*v_lines+i]) { case 0: break; default: c_ind = aa[str_img->bits[j*v_lines+i]-1]; gdImageSetPixel(bg_img, x+str_img->metrics.leftSideBearing+i, y-str_img->metrics.ascent+j, c_ind); } } } if (array_init(return_value) == FAILURE) { php_error(E_WARNING, "Couldn't initialize array for returning bounding box"); RETURN_FALSE; } add_next_index_long(return_value, str_img->metrics.leftSideBearing); add_next_index_long(return_value, str_img->metrics.descent); add_next_index_long(return_value, str_img->metrics.rightSideBearing); add_next_index_long(return_value, str_img->metrics.ascent); #else php_error(E_WARNING, "ImagePsText: No T1lib support in this PHP build"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto array imagepsbbox(string text, int font, int size [, int space, int tightness, int angle]) Return the bounding box needed by a string if rasterized */ PHP_FUNCTION(imagepsbbox) { #if HAVE_LIBT1 zval **str, **fnt, **sz, **sp, **wd, **ang; int i, space, add_width = 0, char_width, amount_kern; int cur_x, cur_y, dx, dy; int x1, y1, x2, y2, x3, y3, x4, y4; int *f_ind; int per_char = 0; double angle, sin_a = 0, cos_a = 0; BBox char_bbox, str_bbox = {0, 0, 0, 0}; switch(ZEND_NUM_ARGS()) { case 3: if (zend_get_parameters_ex(3, &str, &fnt, &sz) == FAILURE) { RETURN_FALSE; } space = 0; break; case 6: if (zend_get_parameters_ex(6, &str, &fnt, &sz, &sp, &wd, &ang) == FAILURE) { RETURN_FALSE; } convert_to_long_ex(sp); convert_to_long_ex(wd); convert_to_double_ex(ang); space = Z_LVAL_PP(sp); add_width = Z_LVAL_PP(wd); angle = Z_DVAL_PP(ang) * M_PI / 180; sin_a = sin(angle); cos_a = cos(angle); per_char = add_width || angle ? 1 : 0; break; default: ZEND_WRONG_PARAM_COUNT(); } ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font); convert_to_string_ex(str); convert_to_long_ex(sz); #define max(a, b) (a > b ? a : b) #define min(a, b) (a < b ? a : b) #define new_x(a, b) (int) ((a) * cos_a - (b) * sin_a) #define new_y(a, b) (int) ((a) * sin_a + (b) * cos_a) if (per_char) { space += T1_GetCharWidth(*f_ind, ' '); cur_x = cur_y = 0; for (i = 0; i < Z_STRLEN_PP(str); i++) { if (Z_STRVAL_PP(str)[i] == ' ') { char_bbox.llx = char_bbox.lly = char_bbox.ury = 0; char_bbox.urx = char_width = space; } else { char_bbox = T1_GetCharBBox(*f_ind, Z_STRVAL_PP(str)[i]); char_width = T1_GetCharWidth(*f_ind, Z_STRVAL_PP(str)[i]); } amount_kern = i ? T1_GetKerning(*f_ind, Z_STRVAL_PP(str)[i-1], Z_STRVAL_PP(str)[i]) : 0; /* Transfer character bounding box to right place */ x1 = new_x(char_bbox.llx, char_bbox.lly) + cur_x; y1 = new_y(char_bbox.llx, char_bbox.lly) + cur_y; x2 = new_x(char_bbox.llx, char_bbox.ury) + cur_x; y2 = new_y(char_bbox.llx, char_bbox.ury) + cur_y; x3 = new_x(char_bbox.urx, char_bbox.ury) + cur_x; y3 = new_y(char_bbox.urx, char_bbox.ury) + cur_y; x4 = new_x(char_bbox.urx, char_bbox.lly) + cur_x; y4 = new_y(char_bbox.urx, char_bbox.lly) + cur_y; /* Find min & max values and compare them with current bounding box */ str_bbox.llx = min(str_bbox.llx, min(x1, min(x2, min(x3, x4)))); str_bbox.lly = min(str_bbox.lly, min(y1, min(y2, min(y3, y4)))); str_bbox.urx = max(str_bbox.urx, max(x1, max(x2, max(x3, x4)))); str_bbox.ury = max(str_bbox.ury, max(y1, max(y2, max(y3, y4)))); /* Move to the next base point */ dx = new_x(char_width + add_width + amount_kern, 0); dy = new_y(char_width + add_width + amount_kern, 0); cur_x += dx; cur_y += dy; /* printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", x1, y1, x2, y2, x3, y3, x4, y4, char_bbox.llx, char_bbox.lly, char_bbox.urx, char_bbox.ury, char_width, amount_kern, cur_x, cur_y, dx, dy); */ } } else { str_bbox = T1_GetStringBBox(*f_ind, Z_STRVAL_PP(str), Z_STRLEN_PP(str), space, T1_KERNING); } if (T1_errno) RETURN_FALSE; if (array_init(return_value) == FAILURE) { RETURN_FALSE; } /* printf("%d %d %d %d\n", str_bbox.llx, str_bbox.lly, str_bbox.urx, str_bbox.ury); */ add_next_index_long(return_value, (int) ceil(((double) str_bbox.llx)*Z_LVAL_PP(sz)/1000)); add_next_index_long(return_value, (int) ceil(((double) str_bbox.lly)*Z_LVAL_PP(sz)/1000)); add_next_index_long(return_value, (int) ceil(((double) str_bbox.urx)*Z_LVAL_PP(sz)/1000)); add_next_index_long(return_value, (int) ceil(((double) str_bbox.ury)*Z_LVAL_PP(sz)/1000)); #else php_error(E_WARNING, "ImagePsBBox: No T1lib support in this PHP build"); RETURN_FALSE; #endif } /* }}} */ /* {{{ proto int image2wbmp(int im [, string filename [, int threshold]]) Output WBMP image to browser or file */ PHP_FUNCTION(image2wbmp) { #ifdef HAVE_GD_WBMP _php_image_output (INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_CONVERT_WBM, "WBMP", _php_image_bw_convert); #else /* HAVE_GD_WBMP */ php_error(E_WARNING, "Image2Wbmp: No WBMP support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_WBMP */ } /* }}} */ /* {{{ proto void jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold) Convert JPEG image to WBMP image */ PHP_FUNCTION(jpeg2wbmp) { #ifdef HAVE_GD_JPG #ifdef HAVE_GD_WBMP _php_image_convert (INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG); #else /* HAVE_GD_WBMP */ php_error(E_WARNING, "jpeg2wbmp: No WBMP support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_WBMP */ #else /* HAVE_GD_JPG */ php_error(E_WARNING, "jpeg2wbmp: No JPG support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_JPG */ } /* }}} */ /* {{{ proto void png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold) Convert PNG image to WBMP image */ PHP_FUNCTION(png2wbmp) { #ifdef HAVE_GD_PNG #ifdef HAVE_GD_WBMP _php_image_convert (INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG); #else /* HAVE_GD_WBMP */ php_error(E_WARNING, "png2wbmp: No WBMP support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_WBMP */ #else /* HAVE_GD_PNG */ php_error(E_WARNING, "png2wbmp: No PNG support in this PHP build"); RETURN_FALSE; #endif /* HAVE_GD_PNG */ } /* }}} */ #ifdef HAVE_GD_WBMP /* {{{ _php_image_bw_convert * It converts a gd Image to bw using a threshold value */ static void _php_image_bw_convert( gdImagePtr im_org, gdIOCtx *out, int threshold) { gdImagePtr im_dest; int white, black; int color, color_org, median; int dest_height = gdImageSY (im_org); int dest_width = gdImageSX (im_org); int x, y; TSRMLS_FETCH(); im_dest = gdImageCreate (dest_width, dest_height); if (im_dest == NULL) { php_error (E_WARNING, "%s: unable to allocate temporary buffer", get_active_function_name(TSRMLS_C)); return; } white = gdImageColorAllocate (im_dest, 255, 255, 255); if( white == -1) { php_error (E_WARNING, "%s: unable to allocate the colors for the destination buffer", get_active_function_name(TSRMLS_C)); return; } black = gdImageColorAllocate (im_dest, 0, 0, 0); if (black == -1) { php_error (E_WARNING, "%s: unable to allocate the colors for the destination buffer", get_active_function_name(TSRMLS_C)); return; } for (y = 0; y < dest_height; y++) { for (x = 0; x < dest_width; x++) { color_org = gdImageGetPixel (im_org, x, y); median = (im_org->red[color_org] + im_org->green[color_org] + im_org->blue[color_org]) / 3; if (median < threshold) { color = black; } else { color = white; } gdImageSetPixel (im_dest, x, y, color); } } #ifdef USE_GD_IOCTX gdImageWBMPCtx (im_dest, black, out); #else gdImageWBMP (im_dest, black, out); #endif } /* }}} */ /* {{{ _php_image_convert * _php_image_convert converts jpeg/png images to wbmp and resizes them as needed */ static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type ) { zval **f_org, **f_dest, **height, **width, **threshold; gdImagePtr im_org, im_dest, im_tmp; char *fn_org = NULL; char *fn_dest = NULL; FILE *org, *dest; int argc; int dest_height = -1; int dest_width = -1; int org_height, org_width; int white, black; int color, color_org, median; int int_threshold; int x, y; float x_ratio, y_ratio; argc = ZEND_NUM_ARGS(); if (argc != 5 || zend_get_parameters_ex(argc, &f_org, &f_dest, &height, &width, &threshold) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex (f_org); convert_to_string_ex (f_dest); fn_org = Z_STRVAL_PP(f_org); fn_dest = Z_STRVAL_PP(f_dest); convert_to_long_ex(height); dest_height = Z_LVAL_PP(height); convert_to_long_ex(width); dest_width = Z_LVAL_PP(width); convert_to_long_ex(threshold); int_threshold = Z_LVAL_PP(threshold); /* Check threshold value */ if( int_threshold < 0 || int_threshold > 8 ) { php_error (E_WARNING, "Invalid threshold value '%d' in %s", int_threshold, get_active_function_name(TSRMLS_C)); RETURN_FALSE; } /* Check origin file */ if (!fn_org || fn_org == empty_string || php_check_open_basedir(fn_org TSRMLS_CC)) { php_error (E_WARNING, "%s: invalid origin filename '%s'", get_active_function_name(TSRMLS_C), fn_org); RETURN_FALSE; } /* Check destination file */ if (!fn_dest || fn_dest == empty_string || php_check_open_basedir(fn_dest TSRMLS_CC)) { php_error (E_WARNING, "%s: invalid destination filename '%s'", get_active_function_name(TSRMLS_C), fn_dest); RETURN_FALSE; } /* Open origin file */ org = VCWD_FOPEN(fn_org, "rb"); if (!org) { php_error (E_WARNING, "%s: unable to open '%s' for reading", get_active_function_name(TSRMLS_C), fn_org); RETURN_FALSE; } /* Open destination file */ dest = VCWD_FOPEN(fn_dest, "wb"); if (!dest) { php_error (E_WARNING, "%s: unable to open '%s' for writing", get_active_function_name(TSRMLS_C), fn_dest); RETURN_FALSE; } switch (image_type) { #ifdef HAVE_GD_GIF_READ case PHP_GDIMG_TYPE_GIF: im_org = gdImageCreateFromGif (org); if (im_org == NULL) { php_error (E_WARNING, "%s: unable to open '%s' Not a valid GIF file", get_active_function_name(TSRMLS_C), fn_dest); RETURN_FALSE; } break; #endif /* HAVE_GD_GIF_READ */ #ifdef HAVE_GD_JPG case PHP_GDIMG_TYPE_JPG: im_org = gdImageCreateFromJpeg (org); if (im_org == NULL) { php_error (E_WARNING, "%s: unable to open '%s' Not a valid JPEG file", get_active_function_name(TSRMLS_C), fn_dest); RETURN_FALSE; } break; #endif /* HAVE_GD_JPG */ #ifdef HAVE_GD_PNG case PHP_GDIMG_TYPE_PNG: im_org = gdImageCreateFromPng(org); if (im_org == NULL) { php_error (E_WARNING, "%s: unable to open '%s' Not a valid PNG file", get_active_function_name(TSRMLS_C), fn_dest); RETURN_FALSE; } break; #endif /* HAVE_GD_PNG */ default: php_error(E_WARNING, "%s: Format not supported", get_active_function_name(TSRMLS_C)); RETURN_FALSE; break; } org_width = gdImageSX (im_org); org_height = gdImageSY (im_org); x_ratio = (float) org_width / (float) dest_width; y_ratio = (float) org_height / (float) dest_height; if (x_ratio > 1 && y_ratio > 1) { if (y_ratio > x_ratio) { x_ratio = y_ratio; } else { y_ratio = x_ratio; } dest_width = (int)(org_width / x_ratio); dest_height = (int)(org_height / y_ratio); } else { x_ratio = (float) dest_width / (float) org_width; y_ratio = (float) dest_height / (float) org_height; if (y_ratio < x_ratio) { x_ratio = y_ratio; } else { y_ratio = x_ratio; } dest_width = (int)(org_width * x_ratio); dest_height = (int)(org_height * y_ratio); } im_tmp = gdImageCreate (dest_width, dest_height); if (im_tmp == NULL ) { php_error(E_WARNING, "%s: unable to allocate temporary buffer", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } gdImageCopyResized (im_tmp, im_org, 0, 0, 0, 0, dest_width, dest_height, org_width, org_height); gdImageDestroy(im_org); fclose(org); im_dest = gdImageCreate(dest_width, dest_height); if (im_dest == NULL) { php_error(E_WARNING, "%s: unable to allocate destination buffer", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } white = gdImageColorAllocate(im_dest, 255, 255, 255); if (white == -1) { php_error(E_WARNING, "%s: unable to allocate the colors for the destination buffer", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } black = gdImageColorAllocate(im_dest, 0, 0, 0); if (black == -1) { php_error(E_WARNING, "%s: unable to allocate the colors for the destination buffer", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } int_threshold = int_threshold * 32; for (y = 0; y < dest_height; y++) { for(x = 0; x < dest_width; x++) { color_org = gdImageGetPixel (im_tmp, x, y); median = (im_tmp->red[color_org] + im_tmp->green[color_org] + im_tmp->blue[color_org]) / 3; if (median < int_threshold) { color = black; } else { color = white; } gdImageSetPixel (im_dest, x, y, color); } } gdImageDestroy (im_tmp ); gdImageWBMP (im_dest, black , dest); fflush(dest); fclose(dest); gdImageDestroy( im_dest ); RETURN_TRUE; } /* }}} */ #endif /* HAVE_GD_WBMP */ #endif /* HAVE_LIBGD */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/gd/gd.dsp0100644000175200000240000002620007357142277013453 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="gd" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=gd - Win32 Release_TS GD2 !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "gd.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "gd.mak" CFG="gd - Win32 Release_TS GD2" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "gd - Win32 Release_TS GD2" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "gd - Win32 Release_TS GD1" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "gd - Win32 Debug_TS GD2" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "gd - Win32 Debug_TS GD1" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "gd - Win32 Release_TS GD2" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "gd___Win32_Release_TS_GD2" # PROP BASE Intermediate_Dir "gd___Win32_Release_TS_GD2" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD=1 /D HAVE_LIBGD13=1 /D HAVE_LIBGD15=1 /D HAVE_LIBGD20=1 /D "USE_GD_IOCTX" /D HAVE_LIBFREETYPE=1 /D "USE_GD_IMGSTRTTF" /D HAVE_GD_STRINGTTF=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 php4ts.lib freetype.lib gd.lib libjpeg.lib libtiff.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gd.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT BASE LINK32 /pdb:none # ADD LINK32 php4ts.lib freetype2.lib gd.lib libjpeg.lib libtiff.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gd.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "gd - Win32 Release_TS GD1" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "gd___Win32_Release_TS_GD1" # PROP BASE Intermediate_Dir "gd___Win32_Release_TS_GD1" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 php4ts.lib freetype.lib gd.lib libjpeg.lib libtiff.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gd.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT BASE LINK32 /pdb:none # ADD LINK32 php4ts.lib freetype.lib gd.lib libjpeg.lib libtiff.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gd.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "gd___Win32_Debug_TS_GD2" # PROP BASE Intermediate_Dir "gd___Win32_Debug_TS_GD2" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD=1 /D HAVE_LIBGD13=1 /D "HAVE_LIBGD15" /D HAVE_LIBGD20=1 /D "USE_GD_IOCTX" /D HAVE_LIBFREETYPE=1 /D "USE_GD_IMGSTRTTF" /D HAVE_GD_STRINGTTF=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 php4ts_debug.lib gd.lib libjpeg.lib freetype.lib libtiff.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_gd.dll" /libpath:"..\..\Debug_TS" # SUBTRACT BASE LINK32 /pdb:none # ADD LINK32 php4ts_debug.lib gd.lib libjpeg.lib freetype2.lib libtiff.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_gd.dll" /libpath:"..\..\Debug_TS" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD1" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "gd___Win32_Debug_TS_GD1" # PROP BASE Intermediate_Dir "gd___Win32_Debug_TS_GD1" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GDIMAGECOLORRESOLVE=1 /D HAVE_LIBTTF=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 php4ts_debug.lib gd.lib libjpeg.lib freetype.lib libtiff.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_gd.dll" /libpath:"..\..\Debug_TS" # SUBTRACT BASE LINK32 /pdb:none # ADD LINK32 php4ts_debug.lib gd.lib libjpeg.lib freetype.lib libtiff.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_gd.dll" /libpath:"..\..\Debug_TS" # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "gd - Win32 Release_TS GD2" # Name "gd - Win32 Release_TS GD1" # Name "gd - Win32 Debug_TS GD2" # Name "gd - Win32 Debug_TS GD1" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\gd.c # End Source File # Begin Source File SOURCE=.\gdcache.c # End Source File # Begin Source File SOURCE=.\gdt1.c # End Source File # Begin Source File SOURCE=.\gdttf.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\gdcache.h # End Source File # Begin Source File SOURCE=.\gdt1.h # End Source File # Begin Source File SOURCE=.\gdttf.h # End Source File # Begin Source File SOURCE=.\php_gd.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project php-4.2.3/ext/gd/gd_ctx.c0100644000175200000240000000476007333271211013755 0ustar zeevstaff#include "php_gd.h" #define CTX_PUTC(c,ctx) ctx->putC(ctx, c) static void _php_image_output_putc(struct gdIOCtx *ctx, int c) { TSRMLS_FETCH(); php_write(&c, 1 TSRMLS_CC); } static int _php_image_output_putbuf(struct gdIOCtx *ctx, const void* buf, int l) { TSRMLS_FETCH(); return php_write((void *)buf, l TSRMLS_CC); } static void _php_image_output_ctxfree(struct gdIOCtx *ctx) { if(ctx) { efree(ctx); } } static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)()) { zval **imgind, **file, **quality; gdImagePtr im; char *fn = NULL; FILE *fp = NULL; int argc = ZEND_NUM_ARGS(); int q = -1, i; gdIOCtx *ctx; /* The quality parameter for Wbmp stands for the threshold when called from image2wbmp() */ if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &imgind, &file, &quality) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(im, gdImagePtr, imgind, -1, "Image", phpi_get_le_gd()); if (argc > 1) { convert_to_string_ex(file); fn = Z_STRVAL_PP(file); if (argc == 3) { convert_to_long_ex(quality); q = Z_LVAL_PP(quality); } } if ((argc == 2) || (argc == 3 && Z_STRLEN_PP(file))) { if (!fn || fn == empty_string || php_check_open_basedir(fn TSRMLS_CC)) { php_error(E_WARNING, "%s: invalid filename '%s'", get_active_function_name(TSRMLS_C), fn); RETURN_FALSE; } fp = VCWD_FOPEN(fn, "wb"); if (!fp) { php_error(E_WARNING, "%s: unable to open '%s' for writing", get_active_function_name(TSRMLS_C), fn); RETURN_FALSE; } ctx = gdNewFileCtx(fp); } else { ctx = emalloc(sizeof(gdIOCtx)); ctx->putC = _php_image_output_putc; ctx->putBuf = _php_image_output_putbuf; ctx->free = _php_image_output_ctxfree; #if APACHE && defined(CHARSET_EBCDIC) /* XXX this is unlikely to work any more thies@thieso.net */ /* This is a binary file already: avoid EBCDIC->ASCII conversion */ ap_bsetflag(php3_rqst->connection->client, B_EBCDIC2ASCII, 0); #endif } switch(image_type) { case PHP_GDIMG_CONVERT_WBM: if(q<0||q>255) { php_error(E_WARNING, "%s: invalid threshold value '%d'. It must be between 0 and 255",get_active_function_name(TSRMLS_C), q); } case PHP_GDIMG_TYPE_JPG: (*func_p)(im, ctx, q); break; case PHP_GDIMG_TYPE_WBM: for(i=0; i < gdImageColorsTotal(im); i++) { if(gdImageRed(im, i) == 0) break; } (*func_p)(im, i, ctx); break; default: (*func_p)(im, ctx); break; } ctx->free(ctx); if(fp) { fflush(fp); fclose(fp); } RETURN_TRUE; } php-4.2.3/ext/gd/gdcache.c0100644000175200000240000001147206756722347014104 0ustar zeevstaff/* * $Id: gdcache.c,v 1.4 2025/08/19 06:32:07 rasmus Exp $ * * Caches of pointers to user structs in which the least-recently-used * element is replaced in the event of a cache miss after the cache has * reached a given size. * * John Ellson (ellson@lucent.com) Oct 31, 2025 * * Test this with: * gcc -o gdcache -g -Wall -DTEST gdcache.c * * The cache is implemented by a singly-linked list of elements * each containing a pointer to a user struct that is being managed by * the cache. * * The head structure has a pointer to the most-recently-used * element, and elements are moved to this position in the list each * time they are used. The head also contains pointers to three * user defined functions: * - a function to test if a cached userdata matches some keydata * - a function to provide a new userdata struct to the cache * if there has been a cache miss. * - a function to release a userdata struct when it is * no longer being managed by the cache * * In the event of a cache miss the cache is allowed to grow up to * a specified maximum size. After the maximum size is reached then * the least-recently-used element is discarded to make room for the * new. The most-recently-returned value is always left at the * beginning of the list after retrieval. * * In the current implementation the cache is traversed by a linear * search from most-recent to least-recent. This linear search * probably limits the usefulness of this implementation to cache * sizes of a few tens of elements. */ /* This just seems unessacary */ #if (WIN32|WINNT) #define ENABLE_GD_TTF #else #include "php_config.h" #endif #if HAVE_LIBTTF|HAVE_LIBFREETYPE #include "gdcache.h" /*********************************************************/ /* implementation */ /*********************************************************/ /* create a new cache */ gdCache_head_t * gdCacheCreate( int size, gdCacheTestFn_t gdCacheTest, gdCacheFetchFn_t gdCacheFetch, gdCacheReleaseFn_t gdCacheRelease ) { gdCache_head_t *head; head = (gdCache_head_t *)malloc(sizeof(gdCache_head_t)); head->mru = NULL; head->size = size; head->gdCacheTest = gdCacheTest; head->gdCacheFetch = gdCacheFetch; head->gdCacheRelease = gdCacheRelease; return head; } void gdCacheDelete( gdCache_head_t *head ) { gdCache_element_t *elem, *prev; elem = head->mru; while(elem) { (*(head->gdCacheRelease))(elem->userdata); prev = elem; elem = elem->next; free((char *)prev); } free((char *)head); } void * gdCacheGet( gdCache_head_t *head, void *keydata ) { int i=0; gdCache_element_t *elem, *prev = NULL, *prevprev = NULL; void *userdata; elem = head->mru; while(elem) { if ((*(head->gdCacheTest))(elem->userdata, keydata)) { if (i) { /* if not already most-recently-used */ /* relink to top of list */ prev->next = elem->next; elem->next = head->mru; head->mru = elem; } return elem->userdata; } prevprev = prev; prev = elem; elem = elem->next; i++; } userdata = (*(head->gdCacheFetch))(&(head->error), keydata); if (! userdata) { /* if there was an error in the fetch then don't cache */ return NULL; } if (i < head->size) { /* cache still growing - add new elem */ elem = (gdCache_element_t *)malloc(sizeof(gdCache_element_t)); } else { /* cache full - replace least-recently-used */ /* preveprev becomes new end of list */ prevprev->next = NULL; elem = prev; (*(head->gdCacheRelease))(elem->userdata); } /* relink to top of list */ elem->next = head->mru; head->mru = elem; elem->userdata = userdata; return userdata; } /*********************************************************/ /* test stub */ /*********************************************************/ #ifdef GDCACHE_TEST #include typedef struct { int key; int value; } key_value_t; static int cacheTest( void *map, void *key ) { return (((key_value_t *)map)->key == *(int *)key); } static void * cacheFetch( char **error, void *key ) { key_value_t *map; map = (key_value_t *)malloc(sizeof(key_value_t)); map->key = *(int *)key; map->value = 3; *error = NULL; return (void *)map; } static void cacheRelease( void *map) { free( (char *)map ); } int main(char *argv[], int argc) { gdCache_head_t *cacheTable; int elem, key; cacheTable = gdCacheCreate(3, cacheTest, cacheFetch, cacheRelease); key = 20; elem = *(int *)gdCacheGet(cacheTable, &key); key = 30; elem = *(int *)gdCacheGet(cacheTable, &key); key = 40; elem = *(int *)gdCacheGet(cacheTable, &key); key = 50; elem = *(int *)gdCacheGet(cacheTable, &key); key = 30; elem = *(int *)gdCacheGet(cacheTable, &key); key = 30; elem = *(int *)gdCacheGet(cacheTable, &key); gdCacheDelete(cacheTable); return 0; } #endif #endif /* ENABLE_GD_TTF */ php-4.2.3/ext/gd/gdcache.h0100644000175200000240000000544207226032555014075 0ustar zeevstaff/* * $Id: gdcache.h,v 1.2 2025/01/07 09:22:53 sniper Exp $ * * Caches of pointers to user structs in which the least-recently-used * element is replaced in the event of a cache miss after the cache has * reached a given size. * * John Ellson (ellson@lucent.com) Oct 31, 2025 * * Test this with: * gcc -o gdcache -g -Wall -DTEST gdcache.c * * The cache is implemented by a singly-linked list of elements * each containing a pointer to a user struct that is being managed by * the cache. * * The head structure has a pointer to the most-recently-used * element, and elements are moved to this position in the list each * time they are used. The head also contains pointers to three * user defined functions: * - a function to test if a cached userdata matches some keydata * - a function to provide a new userdata struct to the cache * if there has been a cache miss. * - a function to release a userdata struct when it is * no longer being managed by the cache * * In the event of a cache miss the cache is allowed to grow up to * a specified maximum size. After the maximum size is reached then * the least-recently-used element is discarded to make room for the * new. The most-recently-returned value is always left at the * beginning of the list after retrieval. * * In the current implementation the cache is traversed by a linear * search from most-recent to least-recent. This linear search * probably limits the usefulness of this implementation to cache * sizes of a few tens of elements. */ /*********************************************************/ /* header */ /*********************************************************/ #if (!defined _OSD_POSIX) && HAVE_MALLOC_H #include #else #include /* BS2000/OSD defines malloc() & friends in stdlib.h */ #endif #ifndef NULL #define NULL (void *)0 #endif /* user defined function templates */ typedef int (*gdCacheTestFn_t)(void *userdata, void *keydata); typedef void *(*gdCacheFetchFn_t)(char **error, void *keydata); typedef void (*gdCacheReleaseFn_t)(void *userdata); /* element structure */ typedef struct gdCache_element_s gdCache_element_t; struct gdCache_element_s { gdCache_element_t *next; void *userdata; }; /* head structure */ typedef struct gdCache_head_s gdCache_head_t; struct gdCache_head_s { gdCache_element_t *mru; int size; char *error; gdCacheTestFn_t gdCacheTest; gdCacheFetchFn_t gdCacheFetch; gdCacheReleaseFn_t gdCacheRelease; }; /* function templates */ gdCache_head_t * gdCacheCreate( int size, gdCacheTestFn_t gdCacheTest, gdCacheFetchFn_t gdCacheFetch, gdCacheReleaseFn_t gdCacheRelease ); void gdCacheDelete( gdCache_head_t *head ); void * gdCacheGet( gdCache_head_t *head, void *keydata ); php-4.2.3/ext/gd/gdt1.c0100644000175200000240000003566007437364644013371 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jouni Ahto | +----------------------------------------------------------------------+ */ /* $Id: gdt1.c,v 1.16 2025/02/28 08:26:12 sebastian Exp $ */ #if 0 /* Moved currently back to gd.c */ #include "php.h" #include "php_gd.h" #if HAVE_LIBT1 void php_free_ps_font(int font_id) { T1_DeleteFont(font_id); } void php_free_ps_enc(char **enc) { T1_DeleteEncoding(enc); } /* {{{ proto int imagepsloadfont(string pathname) Load a new font from specified file */ PHP_FUNCTION(imagepsloadfont) { zval **file; int f_ind, l_ind; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(file); f_ind = T1_AddFont(Z_STRVAL_PP(file)); if (f_ind < 0) { switch (f_ind) { case -1: php_error(E_WARNING, "Couldn't find the font file"); RETURN_FALSE; break; case -2: case -3: php_error(E_WARNING, "Memory allocation fault in t1lib"); RETURN_FALSE; break; default: php_error(E_WARNING, "An unknown error occurred in t1lib"); RETURN_FALSE; break; } } T1_LoadFont(f_ind); /* l_ind = zend_list_insert(f_ind, T1_GLOBAL(le_ps_font)); RETURN_LONG(l_ind); */ zend_list_addref(f_ind); RETURN_LONG(f_ind); } /* }}} */ /* {{{ The function in t1lib which this function uses seem to be buggy... proto int imagepscopyfont(int font_index) Make a copy of a font for purposes like extending or reenconding */ /* PHP_FUNCTION(imagepscopyfont) { pval *fnt; int l_ind, type; gd_ps_font *nf_ind, *of_ind; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters(ht, 1, &fnt) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(fnt); of_ind = zend_list_find(Z_LVAL_P(fnt), &type); if (type != GD_GLOBAL(le_ps_font)) { php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_P(fnt)); RETURN_FALSE; } nf_ind = emalloc(sizeof(gd_ps_font)); nf_ind->font_id = T1_CopyFont(of_ind->font_id); if (nf_ind->font_id < 0) { l_ind = nf_ind->font_id; efree(nf_ind); switch (l_ind) { case -1: php_error(E_WARNING, "FontID %d is not loaded in memory", l_ind); RETURN_FALSE; break; case -2: php_error(E_WARNING, "Tried to copy a logical font"); RETURN_FALSE; break; case -3: php_error(E_WARNING, "Memory allocation fault in t1lib"); RETURN_FALSE; break; default: php_error(E_WARNING, "An unknown error occurred in t1lib"); RETURN_FALSE; break; } } nf_ind->extend = 1; l_ind = zend_list_insert(nf_ind, GD_GLOBAL(le_ps_font)); RETURN_LONG(l_ind); } */ /* }}} */ /* {{{ proto bool imagepsfreefont(int font_index) Free memory used by a font */ PHP_FUNCTION(imagepsfreefont) { zval **fnt; int type; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fnt) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(fnt); zend_list_find(Z_LVAL_PP(fnt), &type); if (type != T1_GLOBAL(le_ps_font)) { php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_PP(fnt)); RETURN_FALSE; } zend_list_delete(Z_LVAL_PP(fnt)); RETURN_TRUE; } /* }}} */ /* {{{ proto bool imagepsencodefont(int font_index, string filename) To change a fonts character encoding vector */ PHP_FUNCTION(imagepsencodefont) { zval **fnt, **enc; char **enc_vector; int type; int f_ind; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &enc) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(fnt); convert_to_string_ex(enc); f_ind = zend_list_find(Z_LVAL_PP(fnt), &type); if (type != T1_GLOBAL(le_ps_font)) { php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_PP(fnt)); RETURN_FALSE; } if ((enc_vector = T1_LoadEncoding(Z_STRVAL_PP(enc))) == NULL) { php_error(E_WARNING, "Couldn't load encoding vector from %s", Z_STRVAL_PP(enc)); RETURN_FALSE; } T1_DeleteAllSizes(f_ind); if (T1_ReencodeFont(f_ind, enc_vector)) { T1_DeleteEncoding(enc_vector); php_error(E_WARNING, "Couldn't reencode font"); RETURN_FALSE; } zend_list_insert(enc_vector, T1_GLOBAL(le_ps_enc)); RETURN_TRUE; } /* }}} */ /* {{{ proto bool imagepsextendfont(int font_index, float extend) Extend or or condense (if extend < 1) a font */ PHP_FUNCTION(imagepsextendfont) { zval **fnt, **ext; int type; int f_ind; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &ext) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(fnt); convert_to_double_ex(ext); f_ind = zend_list_find(Z_LVAL_PP(fnt), &type); if (type != T1_GLOBAL(le_ps_font)) { php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_PP(fnt)); RETURN_FALSE; } if (T1_ExtendFont(f_ind, Z_DVAL_PP(ext)) != 0) RETURN_FALSE; /* f_ind->extend = Z_DVAL_P(ext); */ RETURN_TRUE; } /* }}} */ /* {{{ proto bool imagepsslantfont(int font_index, float slant) Slant a font */ PHP_FUNCTION(imagepsslantfont) { zval **fnt, **slt; int type; int f_ind; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &slt) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(fnt); convert_to_double_ex(slt); f_ind = zend_list_find(Z_LVAL_PP(fnt), &type); if (type != T1_GLOBAL(le_ps_font)) { php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_PP(fnt)); RETURN_FALSE; } if (T1_SlantFont(f_ind, Z_DVAL_PP(slt)) != 0) RETURN_FALSE; RETURN_TRUE; } /* }}} */ /* {{{ proto array imagepstext(int image, string text, int font, int size, int xcoord, int ycoord [, int space, int tightness, float angle, int antialias]) Rasterize a string over an image */ PHP_FUNCTION(imagepstext) { zval **img, **str, **fnt, **sz, **fg, **bg, **sp, **px, **py, **aas, **wd, **ang; int i, j, x, y; int space, type; int f_ind; int h_lines, v_lines, c_ind; int rd, gr, bl, fg_rd, fg_gr, fg_bl, bg_rd, bg_gr, bg_bl; int aa[16], aa_steps; int width, amount_kern, add_width; double angle; unsigned long aa_greys[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; gdImagePtr bg_img; GLYPH *str_img; T1_OUTLINE *char_path, *str_path; T1_TMATRIX *transform = NULL; switch(ZEND_NUM_ARGS()) { case 8: if (zend_get_parameters_ex(8, &img, &str, &fnt, &sz, &fg, &bg, &px, &py) == FAILURE) { RETURN_FALSE; } convert_to_string_ex(str); convert_to_long_ex(fnt); convert_to_long_ex(sz); convert_to_long_ex(fg); convert_to_long_ex(bg); convert_to_long_ex(px); convert_to_long_ex(py); x = Z_LVAL_PP(px); y = Z_LVAL_PP(py); space = 0; aa_steps = 4; width = 0; angle = 0; break; case 12: if (zend_get_parameters_ex(12, &img, &str, &fnt, &sz, &fg, &bg, &px, &py, &sp, &wd, &ang, &aas) == FAILURE) { RETURN_FALSE; } convert_to_string_ex(str); convert_to_long_ex(fnt); convert_to_long_ex(sz); convert_to_long_ex(sp); convert_to_long_ex(fg); convert_to_long_ex(bg); convert_to_long_ex(px); convert_to_long_ex(py); x = Z_LVAL_PP(px); y = Z_LVAL_PP(py); convert_to_long_ex(sp); space = Z_LVAL_PP(sp); convert_to_long_ex(aas); aa_steps = Z_LVAL_PP(aas); convert_to_long_ex(wd); width = Z_LVAL_PP(wd); convert_to_double_ex(ang); angle = Z_DVAL_PP(ang); break; default: WRONG_PARAM_COUNT; } bg_img = zend_list_find(Z_LVAL_PP(img), &type); if (!bg_img || type != GD_GLOBAL(le_gd)) { php_error(E_WARNING, "Unable to find image pointer"); RETURN_FALSE; } f_ind = zend_list_find(Z_LVAL_P(fnt), &type); if (!f_ind || type != GD_GLOBAL(le_ps_font)) { php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_P(fnt)); RETURN_FALSE; } fg_rd = gdImageRed(bg_img, Z_LVAL_P(fg)); fg_gr = gdImageGreen(bg_img, Z_LVAL_P(fg)); fg_bl = gdImageBlue(bg_img, Z_LVAL_P(fg)); bg_rd = gdImageRed(bg_img, Z_LVAL_P(bg)); bg_gr = gdImageGreen(bg_img, Z_LVAL_P(bg)); bg_bl = gdImageBlue(bg_img, Z_LVAL_P(bg)); for (i = 0; i < aa_steps; i++) { rd = bg_rd+(double)(fg_rd-bg_rd)/aa_steps*(i+1); gr = bg_gr+(double)(fg_gr-bg_gr)/aa_steps*(i+1); bl = bg_bl+(double)(fg_bl-bg_bl)/aa_steps*(i+1); aa[i] = gdImageColorResolve(bg_img, rd, gr, bl); } T1_AASetBitsPerPixel(8); switch (aa_steps) { case 4: T1_AASetGrayValues(0, 1, 2, 3, 4); T1_AASetLevel(T1_AA_LOW); break; case 16: T1_AAHSetGrayValues(aa_greys); T1_AASetLevel(T1_AA_HIGH); break; default: php_error(E_WARNING, "Invalid value %d as number of steps for antialiasing", aa_steps); RETURN_FALSE; } if (angle) { transform = T1_RotateMatrix(NULL, angle); } if (width) { #ifdef HAVE_LIBT1_OUTLINE str_path = T1_GetCharOutline(f_ind->font_id, Z_STRVAL_P(str)[0], Z_LVAL_P(sz), transform); for (i = 1; i < Z_STRLEN_P(str); i++) { amount_kern = (int) T1_GetKerning(f_ind->font_id, Z_STRVAL_P(str)[i-1], Z_STRVAL_P(str)[i]); amount_kern += Z_STRVAL_P(str)[i-1] == ' ' ? space : 0; add_width = (int) (amount_kern+width)/f_ind->extend; char_path = T1_GetMoveOutline(f_ind->font_id, add_width, 0, 0, Z_LVAL_P(sz), transform); str_path = T1_ConcatOutlines(str_path, char_path); char_path = T1_GetCharOutline(f_ind->font_id, Z_STRVAL_P(str)[i], Z_LVAL_P(sz), transform); str_path = T1_ConcatOutlines(str_path, char_path); } str_img = T1_AAFillOutline(str_path, 0); #else php_error(E_WARNING, "Setting space between characters in function ImagePSText is supported only with t1lib version 0.9 or above"); RETURN_FALSE; #endif } else { str_img = T1_AASetString(f_ind->font_id, Z_STRVAL_P(str), Z_STRLEN_P(str), space, T1_KERNING, Z_LVAL_P(sz), transform); } if (T1_errno) RETURN_FALSE; h_lines = str_img->metrics.ascent - str_img->metrics.descent; v_lines = str_img->metrics.rightSideBearing - str_img->metrics.leftSideBearing; for (i = 0; i < v_lines; i++) { for (j = 0; j < h_lines; j++) { switch (str_img->bits[j*v_lines+i]) { case 0: break; default: c_ind = aa[str_img->bits[j*v_lines+i]-1]; gdImageSetPixel(bg_img, x+str_img->metrics.leftSideBearing+i, y-str_img->metrics.ascent+j, c_ind); } } } if (array_init(return_value) == FAILURE) { RETURN_FALSE; } add_next_index_long(return_value, str_img->metrics.leftSideBearing); add_next_index_long(return_value, str_img->metrics.descent); add_next_index_long(return_value, str_img->metrics.rightSideBearing); add_next_index_long(return_value, str_img->metrics.ascent); } /* }}} */ /* {{{ proto array imagepsbbox(string text, int font, int size [, int space, int tightness, int angle]) Return the bounding box needed by a string if rasterized */ PHP_FUNCTION(imagepsbbox) { pval *str, *fnt, *sz, *sp, *wd, *ang; int i, space, add_width, char_width, amount_kern, type; int cur_x, cur_y, dx, dy; int x1, y1, x2, y2, x3, y3, x4, y4; gd_ps_font *f_ind; int per_char = 0; double angle, sin_a, cos_a; BBox char_bbox, str_bbox = {0, 0, 0, 0}; switch(ZEND_NUM_ARGS()) { case 3: if (zend_get_parameters(ht, 3, &str, &fnt, &sz) == FAILURE) { RETURN_FALSE; } convert_to_string(str); convert_to_long(fnt); convert_to_long(sz); space = 0; break; case 6: if (zend_get_parameters(ht, 6, &str, &fnt, &sz, &sp, &wd, &ang) == FAILURE) { RETURN_FALSE; } convert_to_string(str); convert_to_long(fnt); convert_to_long(sz); convert_to_long(sp); space = Z_LVAL_P(sp); convert_to_long(wd); add_width = Z_LVAL_P(wd); convert_to_double(ang); angle = Z_DVAL_P(ang) * M_PI / 180; sin_a = sin(angle); cos_a = cos(angle); per_char = add_width || angle ? 1 : 0; break; default: WRONG_PARAM_COUNT; } f_ind = zend_list_find(Z_LVAL_P(fnt), &type); if (type != GD_GLOBAL(le_ps_font)) { php_error(E_WARNING, "%d is not a Type 1 font index", Z_LVAL_P(fnt)); RETURN_FALSE; } #define max(a, b) (a > b ? a : b) #define min(a, b) (a < b ? a : b) #define new_x(a, b) (int) ((a) * cos_a - (b) * sin_a) #define new_y(a, b) (int) ((a) * sin_a + (b) * cos_a) if (per_char) { space += T1_GetCharWidth(f_ind->font_id, ' '); cur_x = cur_y = 0; for (i = 0; i < Z_STRLEN_P(str); i++) { if (Z_STRVAL_P(str)[i] == ' ') { char_bbox.llx = char_bbox.lly = char_bbox.ury = 0; char_bbox.urx = char_width = space; } else { char_bbox = T1_GetCharBBox(f_ind->font_id, Z_STRVAL_P(str)[i]); char_width = T1_GetCharWidth(f_ind->font_id, Z_STRVAL_P(str)[i]); } amount_kern = i ? T1_GetKerning(f_ind->font_id, Z_STRVAL_P(str)[i-1], Z_STRVAL_P(str)[i]) : 0; /* Transfer character bounding box to right place */ x1 = new_x(char_bbox.llx, char_bbox.lly) + cur_x; y1 = new_y(char_bbox.llx, char_bbox.lly) + cur_y; x2 = new_x(char_bbox.llx, char_bbox.ury) + cur_x; y2 = new_y(char_bbox.llx, char_bbox.ury) + cur_y; x3 = new_x(char_bbox.urx, char_bbox.ury) + cur_x; y3 = new_y(char_bbox.urx, char_bbox.ury) + cur_y; x4 = new_x(char_bbox.urx, char_bbox.lly) + cur_x; y4 = new_y(char_bbox.urx, char_bbox.lly) + cur_y; /* Find min & max values and compare them with current bounding box */ str_bbox.llx = min(str_bbox.llx, min(x1, min(x2, min(x3, x4)))); str_bbox.lly = min(str_bbox.lly, min(y1, min(y2, min(y3, y4)))); str_bbox.urx = max(str_bbox.urx, max(x1, max(x2, max(x3, x4)))); str_bbox.ury = max(str_bbox.ury, max(y1, max(y2, max(y3, y4)))); /* Move to the next base point */ dx = new_x(char_width + add_width + amount_kern, 0); dy = new_y(char_width + add_width + amount_kern, 0); cur_x += dx; cur_y += dy; /* printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", x1, y1, x2, y2, x3, y3, x4, y4, char_bbox.llx, char_bbox.lly, char_bbox.urx, char_bbox.ury, char_width, amount_kern, cur_x, cur_y, dx, dy); */ } } else { str_bbox = T1_GetStringBBox(f_ind->font_id, Z_STRVAL_P(str), Z_STRLEN_P(str), space, T1_KERNING); } if (T1_errno) RETURN_FALSE; if (array_init(return_value) == FAILURE) { RETURN_FALSE; } /* printf("%d %d %d %d\n", str_bbox.llx, str_bbox.lly, str_bbox.urx, str_bbox.ury); */ add_next_index_long(return_value, (int) ceil(((double) str_bbox.llx)*Z_LVAL_P(sz)/1000)); add_next_index_long(return_value, (int) ceil(((double) str_bbox.lly)*Z_LVAL_P(sz)/1000)); add_next_index_long(return_value, (int) ceil(((double) str_bbox.urx)*Z_LVAL_P(sz)/1000)); add_next_index_long(return_value, (int) ceil(((double) str_bbox.ury)*Z_LVAL_P(sz)/1000)); } /* }}} */ #endif /* HAVE_LIBT1 */ #endif /* 0 */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/gd/gdt1.h0100644000175200000240000000267007437364644013371 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jouni Ahto | +----------------------------------------------------------------------+ */ /* $Id: gdt1.h,v 1.11 2025/02/28 08:26:12 sebastian Exp $ */ #if HAVE_LIBT1 #include extern void php_free_ps_font(zend_rsrc_list_entry *rsrc TSRMLS_DC); extern void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/gd/gdttf.c0100644000175200000240000005511607335257606013634 0ustar zeevstaff/* gd interface to freetype library */ /* */ /* John Ellson ellson@lucent.com */ /* $Id: gdttf.c,v 1.16 2025/08/11 16:38:30 zeev Exp $ */ #include "php.h" #if PHP_WIN32 #include "config.w32.h" #else #include "php_config.h" #endif #if HAVE_LIBTTF && !defined(USE_GD_IMGSTRTTF) #include #include #include #include #include #include "gdttf.h" #include "gdcache.h" #include #ifndef HAVE_GDIMAGECOLORRESOLVE extern int gdImageColorResolve(gdImagePtr, int, int, int); #endif /* number of fonts cached before least recently used is replaced */ #define FONTCACHESIZE 6 /* number of character glyphs cached per font before least-recently-used is replaced */ #define GLYPHCACHESIZE 120 /* number of bitmaps cached per glyph before least-recently-used is replaced */ #define BITMAPCACHESIZE 8 /* number of antialias color lookups cached */ #define TWEENCOLORCACHESIZE 32 /* ptsize below which anti-aliasing is ineffective */ #define MINANTIALIASPTSIZE 0 /* display resolution - (Not really. This has to be 72 or hinting is wrong) */ #define RESOLUTION 72 /* Number of colors used for anti-aliasing */ #undef NUMCOLORS #define NUMCOLORS 4 /* Line separation as a factor of font height. No space between if LINESPACE = 1.00 Line separation will be rounded up to next pixel row*/ #define LINESPACE 1.05 #ifndef TRUE #define FALSE 0 #define TRUE !FALSE #endif #ifndef MAX #define MAX(a, b) ((a)>(b)?(a):(b)) #endif #ifndef MIN #define MIN(a, b) ((a)<(b)?(a):(b)) #endif typedef struct { char *fontname; /* key */ double ptsize; /* key */ double angle; /* key */ double sin_a, cos_a; TT_Engine *engine; TT_Face face; TT_Face_Properties properties; TT_Instance instance; TT_CharMap char_map_Unicode; TT_CharMap char_map_Big5; TT_CharMap char_map_Roman; int have_char_map_Unicode; int have_char_map_Big5; int have_char_map_Roman; TT_Matrix matrix; TT_Instance_Metrics imetrics; gdCache_head_t *glyphCache; } font_t; typedef struct { char *fontname; /* key */ double ptsize; /* key */ double angle; /* key */ TT_Engine *engine; } fontkey_t; typedef struct { int character; /* key */ int hinting; /* key */ TT_Glyph glyph; TT_Glyph_Metrics metrics; TT_Outline outline; TT_Pos oldx, oldy; TT_Raster_Map Bit; int gray_render; int xmin, xmax, ymin, ymax; gdCache_head_t *bitmapCache; } glyph_t; typedef struct { int character; /* key */ int hinting; /* key */ int gray_render; font_t *font; } glyphkey_t; typedef struct { int xoffset; /* key */ int yoffset; /* key */ char *bitmap; } bitmap_t; typedef struct { int xoffset; /* key */ int yoffset; /* key */ glyph_t *glyph; } bitmapkey_t; typedef struct { unsigned char pixel; /* key */ unsigned char bgcolor; /* key */ int fgcolor; /* key */ /* -ve means no antialias */ gdImagePtr im; /* key */ unsigned char tweencolor; } tweencolor_t; typedef struct { unsigned char pixel; /* key */ unsigned char bgcolor; /* key */ int fgcolor; /* key */ /* -ve means no antialias */ gdImagePtr im; /* key */ } tweencolorkey_t; /* forward declarations so that glyphCache can be initialized by font code */ static int glyphTest ( void *element, void *key ); static void *glyphFetch ( char **error, void *key ); static void glyphRelease( void *element ); /* forward declarations so that bitmapCache can be initialized by glyph code */ static int bitmapTest ( void *element, void *key ); static void *bitmapFetch ( char **error, void *key ); static void bitmapRelease( void *element ); /* local prototype */ char *gdttfchar(gdImage *im, int fg, font_t *font, int x, int y, TT_F26Dot6 x1, TT_F26Dot6 y1, TT_F26Dot6 *advance, TT_BBox **bbox, char **next); /******************************************************************** * gdTcl_UtfToUniChar is borrowed from ... */ /* * tclUtf.c -- * * Routines for manipulating UTF-8 strings. * * Copyright (c) 1997-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * SCCS: @(#) tclUtf.c 1.25 98/01/28 18:02:43 */ /* *--------------------------------------------------------------------------- * * gdTcl_UtfToUniChar -- * * Extract the Tcl_UniChar represented by the UTF-8 string. Bad * UTF-8 sequences are converted to valid Tcl_UniChars and processing * continues. Equivalent to Plan 9 chartorune(). * * The caller must ensure that the source buffer is long enough that * this routine does not run off the end and dereference non-existent * memory looking for trail bytes. If the source buffer is known to * be '\0' terminated, this cannot happen. Otherwise, the caller * should call Tcl_UtfCharComplete() before calling this routine to * ensure that enough bytes remain in the string. * * Results: * *chPtr is filled with the Tcl_UniChar, and the return value is the * number of bytes from the UTF-8 string that were consumed. * * Side effects: * None. * *--------------------------------------------------------------------------- */ #ifndef CHARSET_EBCDIC #define ASC(ch) (ch) #else /*CHARSET_EBCDIC*/ #define ASC(ch) os_toascii[(unsigned char) (ch)] #endif /*CHARSET_EBCDIC*/ #define Tcl_UniChar int #define TCL_UTF_MAX 3 static int gdTcl_UtfToUniChar(char *str, Tcl_UniChar *chPtr) /* str is the UTF8 next character pointer */ /* chPtr is the int for the result */ { int byte; /* HTML4.0 entities in decimal form, e.g. Å */ byte = *((unsigned char *) str); if (byte == '&') { int i, n=0; byte = *((unsigned char *) (str+1)); if (byte == '#') { for (i = 2; i < 8; i++) { byte = *((unsigned char *) (str+i)); if (byte >= '0' && byte <= '9') { n = (n * 10) + (byte - '0'); } else break; } if (byte == ';') { *chPtr = (Tcl_UniChar) n; return ++i; } } } /* * Unroll 1 to 3 byte UTF-8 sequences, use loop to handle longer ones. */ byte = ASC(*((unsigned char *) str)); if (byte < 0xC0) { /* * Handles properly formed UTF-8 characters between 0x01 and 0x7F. * Also treats \0 and naked trail bytes 0x80 to 0xBF as valid * characters representing themselves. */ *chPtr = (Tcl_UniChar) byte; return 1; } else if (byte < 0xE0) { if ((ASC(str[1]) & 0xC0) == 0x80) { /* * Two-byte-character lead-byte followed by a trail-byte. */ *chPtr = (Tcl_UniChar) (((byte & 0x1F) << 6) | (ASC(str[1]) & 0x3F)); return 2; } /* * A two-byte-character lead-byte not followed by trail-byte * represents itself. */ *chPtr = (Tcl_UniChar) byte; return 1; } else if (byte < 0xF0) { if (((ASC(str[1]) & 0xC0) == 0x80) && ((ASC(str[2]) & 0xC0) == 0x80)) { /* * Three-byte-character lead byte followed by two trail bytes. */ *chPtr = (Tcl_UniChar) (((byte & 0x0F) << 12) | ((ASC(str[1]) & 0x3F) << 6) | (ASC(str[2]) & 0x3F)); return 3; } /* * A three-byte-character lead-byte not followed by two trail-bytes * represents itself. */ *chPtr = (Tcl_UniChar) byte; return 1; } #if TCL_UTF_MAX > 3 else { int ch, total, trail; total = totalBytes[byte]; trail = total - 1; if (trail > 0) { ch = byte & (0x3F >> trail); do { str++; if ((ASC(*str) & 0xC0) != 0x80) { *chPtr = byte; return 1; } ch <<= 6; ch |= (ASC(*str) & 0x3F); trail--; } while (trail > 0); *chPtr = ch; return total; } } #endif *chPtr = (Tcl_UniChar) byte; return 1; } /********************************************************************/ /* font cache functions */ static int fontTest ( void *element, void *key ) { font_t *a=(font_t *)element; fontkey_t *b=(fontkey_t *)key; return ( strcmp(a->fontname, b->fontname) == 0 && a->ptsize == b->ptsize && a->angle == b->angle); } static void * fontFetch ( char **error, void *key ) { TT_Error err; font_t *a; fontkey_t *b=(fontkey_t *)key; int i, n, map_found; short platform, encoding; TSRMLS_FETCH(); a = (font_t *)malloc(sizeof(font_t)); #ifdef VIRTUAL_DIR /* a->fontname will be freed in fontRelease() later on */ if (virtual_filepath(b->fontname, &a->fontname TSRMLS_CC)) { *error = "Could not find/open font"; return NULL; } #else a->fontname = (char *)malloc(strlen(b->fontname) + 1); strcpy(a->fontname, b->fontname); #endif a->ptsize = b->ptsize; a->angle = b->angle; a->sin_a = sin(a->angle); a->cos_a = cos(a->angle); a->engine = b->engine; if ((err = TT_Open_Face(*b->engine, a->fontname, &a->face))) { if (err == TT_Err_Could_Not_Open_File) { *error = "Could not find/open font"; } else { *error = "Could not read font"; } return NULL; } /* get face properties and allocate preload arrays */ TT_Get_Face_Properties(a->face, &a->properties); /* create instance */ if (TT_New_Instance(a->face, &a->instance)) { *error = "Could not create face instance"; return NULL; } if (TT_Set_Instance_Resolutions(a->instance, RESOLUTION, RESOLUTION)) { *error = "Could not set device resolutions"; return NULL; map_found = 0; a->have_char_map_Unicode = 0; a->have_char_map_Big5 = 0; a->have_char_map_Roman = 0; } if (TT_Set_Instance_CharSize(a->instance, (TT_F26Dot6)(a->ptsize*64))) { *error = "Could not set character size"; return NULL; } TT_Get_Instance_Metrics(a->instance, &a->imetrics); /* First, look for a Unicode charmap */ n = TT_Get_CharMap_Count(a->face); for (i = 0; i < n; i++) { TT_Get_CharMap_ID(a->face, i, &platform, &encoding); if ((platform == 3 && encoding == 1) /* Windows Unicode */ || (platform == 2 && encoding == 1) || (platform == 0)) { /* ?? Unicode */ TT_Get_CharMap(a->face, i, &a->char_map_Unicode); a->have_char_map_Unicode = 1; map_found++; } else if (platform == 3 && encoding == 4) { /* Windows Big5 */ TT_Get_CharMap(a->face, i, &a->char_map_Big5); a->have_char_map_Big5 = 1; map_found++; } else if (platform == 1 && encoding == 0) { /* Apple Roman */ TT_Get_CharMap(a->face, i, &a->char_map_Roman); a->have_char_map_Roman = 1; map_found++; } } if (! map_found) { *error = "Unable to find a CharMap that I can handle"; return NULL; } a->matrix.xx = (TT_Fixed) (a->cos_a * (1<<16)); a->matrix.yx = (TT_Fixed) (a->sin_a * (1<<16)); a->matrix.xy = - a->matrix.yx; a->matrix.yy = a->matrix.xx; a->glyphCache = gdCacheCreate( GLYPHCACHESIZE, glyphTest, glyphFetch, glyphRelease); return (void *)a; } static void fontRelease( void *element ) { font_t *a=(font_t *)element; gdCacheDelete(a->glyphCache); TT_Done_Instance(a->instance); TT_Close_Face(a->face); free(a->fontname); free( (char *)element ); } /********************************************************************/ /* glyph cache functions */ static int glyphTest ( void *element, void *key ) { glyph_t *a=(glyph_t *)element; glyphkey_t *b=(glyphkey_t *)key; return (a->character == b->character && a->hinting == b->hinting && a->gray_render == b->gray_render); } static void * glyphFetch ( char **error, void *key ) { glyph_t *a; glyphkey_t *b=(glyphkey_t *)key; short glyph_code; int flags, err; int crect[8], xmin, xmax, ymin, ymax; double cos_a, sin_a; a = (glyph_t *)malloc(sizeof(glyph_t)); a->character = b->character; a->hinting = b->hinting; a->gray_render = b->gray_render; a->oldx = a->oldy = 0; /* create glyph container */ if ((TT_New_Glyph(b->font->face, &a->glyph))) { *error = "Could not create glyph container"; return NULL; } flags = TTLOAD_SCALE_GLYPH; if (a->hinting && b->font->angle == 0.0) { flags |= TTLOAD_HINT_GLYPH; } if (b->font->have_char_map_Unicode) { glyph_code = TT_Char_Index(b->font->char_map_Unicode, a->character); } else if (a->character < 161 && b->font->have_char_map_Roman) { glyph_code = TT_Char_Index(b->font->char_map_Roman, a->character); } else if ( b->font->have_char_map_Big5) { glyph_code = TT_Char_Index(b->font->char_map_Big5, a->character); } if ((err=TT_Load_Glyph(b->font->instance, a->glyph, glyph_code, flags))) { *error = "TT_Load_Glyph problem"; return NULL; } TT_Get_Glyph_Metrics(a->glyph, &a->metrics); if (b->font->angle != 0.0) { TT_Get_Glyph_Outline(a->glyph, &a->outline); TT_Transform_Outline(&a->outline, &b->font->matrix); } /* calculate bitmap size */ xmin = a->metrics.bbox.xMin -64; ymin = a->metrics.bbox.yMin -64; xmax = a->metrics.bbox.xMax +64; ymax = a->metrics.bbox.yMax +64; cos_a = b->font->cos_a; sin_a = b->font->sin_a; crect[0] = (int)(xmin * cos_a - ymin * sin_a); crect[1] = (int)(xmin * sin_a + ymin * cos_a); crect[2] = (int)(xmax * cos_a - ymin * sin_a); crect[3] = (int)(xmax * sin_a + ymin * cos_a); crect[4] = (int)(xmax * cos_a - ymax * sin_a); crect[5] = (int)(xmax * sin_a + ymax * cos_a); crect[6] = (int)(xmin * cos_a - ymax * sin_a); crect[7] = (int)(xmin * sin_a + ymax * cos_a); a->xmin = MIN(MIN(crect[0], crect[2]), MIN(crect[4], crect[6])); a->xmax = MAX(MAX(crect[0], crect[2]), MAX(crect[4], crect[6])); a->ymin = MIN(MIN(crect[1], crect[3]), MIN(crect[5], crect[7])); a->ymax = MAX(MAX(crect[1], crect[3]), MAX(crect[5], crect[7])); /* allocate bitmap large enough for character */ a->Bit.rows = (a->ymax - a->ymin + 32 + 64) / 64; a->Bit.width = (a->xmax - a->xmin + 32 + 64) / 64; a->Bit.flow = TT_Flow_Up; if (a->gray_render) { a->Bit.cols = a->Bit.width; /* 1 byte per pixel */ } else { a->Bit.cols = (a->Bit.width + 7) / 8; /* 1 bit per pixel */ } a->Bit.cols = (a->Bit.cols + 3) & ~3; /* pad to 32 bits */ a->Bit.size = a->Bit.rows * a->Bit.cols; /* # of bytes in buffer */ a->Bit.bitmap = NULL; a->bitmapCache = gdCacheCreate( BITMAPCACHESIZE, bitmapTest, bitmapFetch, bitmapRelease); return (void *)a; } static void glyphRelease( void *element ) { glyph_t *a=(glyph_t *)element; gdCacheDelete(a->bitmapCache); TT_Done_Glyph( a->glyph ); free( (char *)element ); } /********************************************************************/ /* bitmap cache functions */ static int bitmapTest ( void *element, void *key ) { bitmap_t *a=(bitmap_t *)element; bitmapkey_t *b=(bitmapkey_t *)key; if (a->xoffset == b->xoffset && a->yoffset == b->yoffset) { b->glyph->Bit.bitmap = a->bitmap; return TRUE; } return FALSE; } static void * bitmapFetch ( char **error, void *key ) { bitmap_t *a; bitmapkey_t *b=(bitmapkey_t *)key; a = (bitmap_t *)malloc(sizeof(bitmap_t)); a->xoffset = b->xoffset; a->yoffset = b->yoffset; b->glyph->Bit.bitmap = a->bitmap = (char *)malloc(b->glyph->Bit.size); memset(a->bitmap, 0, b->glyph->Bit.size); /* render glyph */ if (b->glyph->gray_render) { TT_Get_Glyph_Pixmap(b->glyph->glyph, &b->glyph->Bit, a->xoffset, a->yoffset); } else { TT_Get_Glyph_Bitmap(b->glyph->glyph, &b->glyph->Bit, a->xoffset, a->yoffset); } return (void *)a; } static void bitmapRelease( void *element ) { bitmap_t *a=(bitmap_t *)element; free( a->bitmap ); free( (char *)element ); } /********************************************************************/ /* tweencolor cache functions */ static int tweenColorTest (void *element, void *key) { tweencolor_t *a=(tweencolor_t *)element; tweencolorkey_t *b=(tweencolorkey_t *)key; return (a->pixel == b->pixel && a->bgcolor == b->bgcolor && a->fgcolor == b->fgcolor && a->im == b->im); } static void * tweenColorFetch (char **error, void *key) { tweencolor_t *a; tweencolorkey_t *b=(tweencolorkey_t *)key; int pixel, npixel, bg, fg; gdImagePtr im; a = (tweencolor_t *)malloc(sizeof(tweencolor_t)); pixel = a->pixel = b->pixel; bg = a->bgcolor = b->bgcolor; fg = a->fgcolor = b->fgcolor; im = b->im; /* if fg is specified by a negative color idx, then don't antialias */ if (fg <0) { a->tweencolor = -fg; } else { npixel = NUMCOLORS - pixel; a->tweencolor = gdImageColorResolve(im, (pixel * im->red [fg] + npixel * im->red [bg]) / NUMCOLORS, (pixel * im->green[fg] + npixel * im->green[bg]) / NUMCOLORS, (pixel * im->blue [fg] + npixel * im->blue [bg]) / NUMCOLORS); } *error = NULL; return (void *)a; } static void tweenColorRelease(void *element) { free((char *)element); } /********************************************************************/ /* gdttfchar - render one character onto a gd image */ static int OneTime=0; static gdCache_head_t *tweenColorCache; char * gdttfchar(gdImage *im, int fg, font_t *font, int x, int y, /* string start pos in pixels */ TT_F26Dot6 x1, TT_F26Dot6 y1, /* char start offset (*64) from x,y */ TT_F26Dot6 *advance, TT_BBox **bbox, char **next) { int pc, ch, len; int row, col; int x2, y2; /* char start pos in pixels */ int x3, y3; /* current pixel pos */ unsigned char *pixel; glyph_t *glyph; glyphkey_t glyphkey; bitmapkey_t bitmapkey; tweencolor_t *tweencolor; tweencolorkey_t tweencolorkey; /****** set up tweenColorCache on first call ************/ if (! OneTime) { tweenColorCache = gdCacheCreate(TWEENCOLORCACHESIZE, tweenColorTest, tweenColorFetch, tweenColorRelease); OneTime++; } /**************/ if (font->have_char_map_Unicode) { /* use UTF-8 mapping from ASCII */ len = gdTcl_UtfToUniChar(*next, &ch); *next += len; } else { /* * Big 5 mapping: * use "JIS-8 half-width katakana" coding from 8-bit characters. Ref: * ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/japan.inf-032092.sjs */ ch = (**next) & 255; /* don't extend sign */ (*next)++; if (ch >= 161 /* first code of JIS-8 pair */ && **next) { /* don't advance past '\0' */ ch = (ch * 256) + **next; (*next)++; } } glyphkey.character = ch; glyphkey.hinting = 1; /* if fg is specified by a negative color idx, then don't antialias */ glyphkey.gray_render = ((font->ptsize < MINANTIALIASPTSIZE) || (fg <0))?FALSE:TRUE; glyphkey.font = font; glyph = (glyph_t *)gdCacheGet(font->glyphCache, &glyphkey); if (! glyph) return font->glyphCache->error; *bbox = &glyph->metrics.bbox; *advance = glyph->metrics.advance; /* if null *im, or invalid color, then assume user just wants brect */ if (!im || fg > 255 || fg < -255) return (char *)NULL; /* render (via cache) a bitmap for the current fractional offset */ bitmapkey.xoffset = ((x1+32) & 63) - 32 - ((glyph->xmin+32) & -64); bitmapkey.yoffset = ((y1+32) & 63) - 32 - ((glyph->ymin+32) & -64); bitmapkey.glyph = glyph; gdCacheGet(glyph->bitmapCache, &bitmapkey); /* copy to gif, mapping colors */ x2 = x + (((glyph->xmin+32) & -64) + ((x1+32) & -64)) / 64; y2 = y - (((glyph->ymin+32) & -64) + ((y1+32) & -64)) / 64; tweencolorkey.fgcolor = fg; tweencolorkey.im = im; for (row = 0; row < glyph->Bit.rows; row++) { if (glyph->gray_render) pc = row * glyph->Bit.cols; else pc = row * glyph->Bit.cols * 8; y3 = y2 - row; if (y3 >= im->sy || y3 < 0) continue; for (col = 0; col < glyph->Bit.width; col++, pc++) { if (glyph->gray_render) { tweencolorkey.pixel = *((unsigned char *)(glyph->Bit.bitmap) + pc); } else { tweencolorkey.pixel = (((*((unsigned char *)(glyph->Bit.bitmap) + pc/8)) <<(pc%8))&128)?4:0; } /* if not background */ if (tweencolorkey.pixel > 0) { x3 = x2 + col; if (x3 >= im->sx || x3 < 0) continue; #if HAVE_LIBGD13 pixel = &im->pixels[y3][x3]; #else pixel = &im->pixels[x3][y3]; #endif tweencolorkey.bgcolor = *pixel; tweencolor = (tweencolor_t *)gdCacheGet( tweenColorCache, &tweencolorkey); *pixel = tweencolor->tweencolor; } } } return (char *)NULL; } /********************************************************************/ /* gdttf - render a utf8 string onto a gd image */ char * gdttf(gdImage *im, int *brect, int fg, char *fontname, double ptsize, double angle, int x, int y, char *str) { TT_F26Dot6 ur_x=0, ur_y=0, ll_x=0, ll_y=0; TT_F26Dot6 advance_x, advance_y, advance, x1, y1; TT_BBox *bbox; double sin_a, cos_a; int i=0, ch; font_t *font; fontkey_t fontkey; char *error, *next; /****** initialize font engine on first call ************/ static gdCache_head_t *fontCache; static TT_Engine engine; if (! fontCache) { if (TT_Init_FreeType(&engine)) { return "Failure to initialize font engine"; } fontCache = gdCacheCreate( FONTCACHESIZE, fontTest, fontFetch, fontRelease); } /**************/ /* get the font (via font cache) */ fontkey.fontname = fontname; fontkey.ptsize = ptsize; fontkey.angle = angle; fontkey.engine = &engine; font = (font_t *)gdCacheGet(fontCache, &fontkey); if (! font) { return fontCache->error; } sin_a = font->sin_a; cos_a = font->cos_a; advance_x = advance_y = 0; next=str; while (*next) { ch = *next; /* carriage returns */ if (ch == '\r') { advance_x = 0; next++; continue; } /* newlines */ if (ch == '\n') { advance_y -= (TT_F26Dot6)(font->imetrics.y_ppem * LINESPACE * 64); advance_y = (advance_y-32) & -64; /* round to next pixel row */ next++; continue; } x1 = (TT_F26Dot6)(advance_x * cos_a - advance_y * sin_a); y1 = (TT_F26Dot6)(advance_x * sin_a + advance_y * cos_a); if ((error=gdttfchar(im, fg, font, x, y, x1, y1, &advance, &bbox, &next))) return error; if (! i++) { /* if first character, init BB corner values */ ll_x = bbox->xMin; ll_y = bbox->yMin; ur_x = bbox->xMax; ur_y = bbox->yMax; } else { if (! advance_x) ll_x = MIN(bbox->xMin, ll_x); ll_y = MIN(advance_y + bbox->yMin, ll_y); ur_x = MAX(advance_x + bbox->xMax, ur_x); if (! advance_y) ur_y = MAX(bbox->yMax, ur_y); } advance_x += advance; } /* rotate bounding rectangle */ brect[0] = (int)(ll_x * cos_a - ll_y * sin_a); brect[1] = (int)(ll_x * sin_a + ll_y * cos_a); brect[2] = (int)(ur_x * cos_a - ll_y * sin_a); brect[3] = (int)(ur_x * sin_a + ll_y * cos_a); brect[4] = (int)(ur_x * cos_a - ur_y * sin_a); brect[5] = (int)(ur_x * sin_a + ur_y * cos_a); brect[6] = (int)(ll_x * cos_a - ur_y * sin_a); brect[7] = (int)(ll_x * sin_a + ur_y * cos_a); /* scale, round and offset brect */ i = 0; while (i<8) { brect[i] = x + (brect[i] + 32) / 64; i++; brect[i] = y - (brect[i] + 32) / 64; i++; } return (char *)NULL; } #endif /* HAVE_LIBTTF */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/gd/gdttf.h0100644000175200000240000000071507055643222013624 0ustar zeevstaff/* $Id: gdttf.h,v 1.3 2025/02/26 03:20:50 zeev Exp $ */ #ifdef _OSD_POSIX #ifndef APACHE #error On this EBCDIC platform, PHP is only supported as an Apache module. #else /*APACHE*/ #ifndef CHARSET_EBCDIC #define CHARSET_EBCDIC /* this machine uses EBCDIC, not ASCII! */ #endif #include "ebcdic.h" #endif /*APACHE*/ #endif /*_OSD_POSIX*/ char * gdttf(gdImage *im, int *brect, int fg, char *fontname, double ptsize, double angle, int x, int y, char *str); php-4.2.3/ext/gd/php_gd.h0100644000175200000240000001215507437364644013772 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Stig Bakken | +----------------------------------------------------------------------+ */ /* $Id: php_gd.h,v 1.38 2025/02/28 08:26:12 sebastian Exp $ */ #ifndef PHP_GD_H #define PHP_GD_H #define HAVE_GDIMAGECREATEFROMPNG 1 #if HAVE_LIBTTF|HAVE_LIBFREETYPE #define ENABLE_GD_TTF #endif #if HAVE_LIBGD #include #if HAVE_LIBT1 #include "gdt1.h" #endif #define PHP_GDIMG_TYPE_GIF 1 #define PHP_GDIMG_TYPE_PNG 2 #define PHP_GDIMG_TYPE_JPG 3 #define PHP_GDIMG_TYPE_WBM 4 #define PHP_GDIMG_TYPE_XBM 5 #define PHP_GDIMG_TYPE_XPM 6 #define PHP_GDIMG_CONVERT_WBM 7 #define PHP_GDIMG_TYPE_GD 8 #define PHP_GDIMG_TYPE_GD2 9 #define PHP_GDIMG_TYPE_GD2PART 10 #ifdef PHP_WIN32 #define PHP_GD_API __declspec(dllexport) #else #define PHP_GD_API #endif PHPAPI extern const char php_sig_gif[3]; PHPAPI extern const char php_sig_jpg[3]; PHPAPI extern const char php_sig_png[3]; extern zend_module_entry gd_module_entry; #define phpext_gd_ptr &gd_module_entry /* gd.c functions */ PHP_MINFO_FUNCTION(gd); PHP_MINIT_FUNCTION(gd); PHP_MSHUTDOWN_FUNCTION(gd); #ifndef HAVE_GDIMAGECOLORRESOLVE static int gdImageColorResolve(gdImagePtr, int, int, int); #endif PHP_FUNCTION(imagearc); PHP_FUNCTION(imagechar); PHP_FUNCTION(imagecharup); PHP_FUNCTION(imagecolorallocate); PHP_FUNCTION(imagepalettecopy); PHP_FUNCTION(imagecolorat); PHP_FUNCTION(imagecolorclosest); PHP_FUNCTION(imagecolorclosesthwb); PHP_FUNCTION(imagecolordeallocate); PHP_FUNCTION(imagecolorresolve); PHP_FUNCTION(imagecolorexact); PHP_FUNCTION(imagecolorset); PHP_FUNCTION(imagecolorstotal); PHP_FUNCTION(imagecolorsforindex); PHP_FUNCTION(imagecolortransparent); PHP_FUNCTION(imagecopy); PHP_FUNCTION(imagecopymerge); PHP_FUNCTION(imagecopyresized); PHP_FUNCTION(imagetypes); PHP_FUNCTION(imagecreate); PHP_FUNCTION(imageftbbox); PHP_FUNCTION(imagefttext); PHP_FUNCTION(imagecreatetruecolor); PHP_FUNCTION(imagetruecolortopalette); PHP_FUNCTION(imagesetthickness); PHP_FUNCTION(imageellipse); PHP_FUNCTION(imagefilledellipse); PHP_FUNCTION(imagefilledarc); PHP_FUNCTION(imagealphablending); PHP_FUNCTION(imagecolorresolvealpha); PHP_FUNCTION(imagecolorclosestalpha); PHP_FUNCTION(imagecolorexactalpha); PHP_FUNCTION(imagecopyresampled); PHP_FUNCTION(imagesetthickness); PHP_FUNCTION(imagesettile); PHP_FUNCTION(imagecopymergegray); PHP_FUNCTION(imagesetbrush); PHP_FUNCTION(imagesettile); PHP_FUNCTION(imagesetstyle); PHP_FUNCTION(imagecreatefromstring); PHP_FUNCTION(imagecreatefromgif); PHP_FUNCTION(imagecreatefromjpeg); PHP_FUNCTION(imagecreatefromxbm); PHP_FUNCTION(imagecreatefromxpm); PHP_FUNCTION(imagecreatefrompng); PHP_FUNCTION(imagecreatefromwbmp); PHP_FUNCTION(imagecreatefromgd); PHP_FUNCTION(imagecreatefromgd2); PHP_FUNCTION(imagecreatefromgd2part); PHP_FUNCTION(imagegammacorrect); PHP_FUNCTION(imagedestroy); PHP_FUNCTION(imagefill); PHP_FUNCTION(imagefilledpolygon); PHP_FUNCTION(imagefilledrectangle); PHP_FUNCTION(imagefilltoborder); PHP_FUNCTION(imagefontwidth); PHP_FUNCTION(imagefontheight); PHP_FUNCTION(imagegif ); PHP_FUNCTION(imagejpeg ); PHP_FUNCTION(imagepng); PHP_FUNCTION(imagewbmp); PHP_FUNCTION(imagegd); PHP_FUNCTION(imagegd2); PHP_FUNCTION(imageinterlace); PHP_FUNCTION(imageline); PHP_FUNCTION(imageloadfont); PHP_FUNCTION(imagepolygon); PHP_FUNCTION(imagerectangle); PHP_FUNCTION(imagesetpixel); PHP_FUNCTION(imagestring); PHP_FUNCTION(imagestringup); PHP_FUNCTION(imagesx); PHP_FUNCTION(imagesy); PHP_FUNCTION(imagedashedline); PHP_FUNCTION(imagettfbbox); PHP_FUNCTION(imagettftext); PHP_FUNCTION(imagepsloadfont); /* PHP_FUNCTION(imagepscopyfont); */ PHP_FUNCTION(imagepsfreefont); PHP_FUNCTION(imagepsencodefont); PHP_FUNCTION(imagepsextendfont); PHP_FUNCTION(imagepsslantfont); PHP_FUNCTION(imagepstext); PHP_FUNCTION(imagepsbbox); PHP_FUNCTION(jpeg2wbmp); PHP_FUNCTION(png2wbmp); PHP_FUNCTION(image2wbmp); PHP_GD_API int phpi_get_le_gd(void); /* This is missing from gd.h */ #if HAVE_COLORCLOSESTHWB int gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b); #endif #else #define phpext_gd_ptr NULL #endif #endif /* PHP_GD_H */ php-4.2.3/ext/gd/setup.stub0100644000175200000240000000053006705753662014410 0ustar zeevstaffdefine_option with-gd 'GD support?' yesnodir \ "yes /usr GD install" \ ' Whether to include GD support. If PHP can find the GD libraries\n on your system, it will be included automatically. You should enter\n something here if you do not want to include GD support or if you\n have installed GD in some unusual directory.' php-4.2.3/ext/gettext/0040755000175200000240000000000007535765574013457 5ustar zeevstaffphp-4.2.3/ext/gettext/CREDITS0100644000175200000240000000002607206176572014457 0ustar zeevstaffGetText Alex Plotnick php-4.2.3/ext/gettext/Makefile.in0100644000175200000240000000027607112602653015501 0ustar zeevstaff LTLIBRARY_NAME = libgettext.la LTLIBRARY_SOURCES = gettext.c LTLIBRARY_SHARED_NAME = gettext.la LTLIBRARY_SHARED_LIBADD = $(GETTEXT_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/gettext/config.m40100644000175200000240000000267007401753430015144 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.10 2025/11/30 18:59:36 sniper Exp $ dnl PHP_ARG_WITH(gettext,for GNU gettext support, [ --with-gettext[=DIR] Include GNU gettext support.]) if test "$PHP_GETTEXT" != "no"; then for i in /usr /usr/local $PHP_GETTEXT; do if test -r $i/include/libintl.h; then GETTEXT_DIR=$i fi done if test -z "$GETTEXT_DIR"; then AC_MSG_ERROR(Cannot locate header file libintl.h) fi GETTEXT_LIBDIR=$GETTEXT_DIR/lib GETTEXT_INCDIR=$GETTEXT_DIR/include O_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -L$GETTEXT_LIBDIR" AC_CHECK_LIB(intl, bindtextdomain, [ GETTEXT_LIBS=intl GETTEXT_CHECK_IN_LIB=intl ], AC_CHECK_LIB(c, bindtextdomain, [ GETTEXT_LIBS= GETTEXT_CHECK_IN_LIB=c ],[ AC_MSG_ERROR(Unable to find required gettext library) ]) ) LDFLAGS=$O_LDFLAGS AC_DEFINE(HAVE_LIBINTL,1,[ ]) PHP_EXTENSION(gettext, $ext_shared) PHP_SUBST(GETTEXT_SHARED_LIBADD) if test -n "$GETTEXT_LIBS"; then PHP_ADD_LIBRARY_WITH_PATH($GETTEXT_LIBS, $GETTEXT_LIBDIR, GETTEXT_SHARED_LIBADD) fi PHP_ADD_INCLUDE($GETTEXT_INCDIR) AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, ngettext, [AC_DEFINE(HAVE_NGETTEXT, 1, [ ])]) AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, dngettext, [AC_DEFINE(HAVE_DNGETTEXT, 1, [ ])]) AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, dcngettext, [AC_DEFINE(HAVE_DCNGETTEXT, 1, [ ])]) AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, bind_textdomain_codeset, [AC_DEFINE(HAVE_BIND_TEXTDOMAIN_CODESET, 1, [ ])]) fi php-4.2.3/ext/gettext/gettext.c0100644000175200000240000001751707406656303015301 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Alex Plotnick | +----------------------------------------------------------------------+ */ /* $Id: gettext.c,v 1.38 2025/12/15 14:22:59 hholzgra Exp $ */ #include #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_gettext.h" #if HAVE_LIBINTL #include #include "ext/standard/info.h" /* {{{ php_gettext_functions[] */ function_entry php_gettext_functions[] = { PHP_FE(textdomain, NULL) PHP_FE(gettext, NULL) PHP_FALIAS(_, gettext, NULL) PHP_FE(dgettext, NULL) PHP_FE(dcgettext, NULL) PHP_FE(bindtextdomain, NULL) #if HAVE_NGETTEXT PHP_FE(ngettext, NULL) #endif #if HAVE_DNGETTEXT PHP_FE(dngettext, NULL) #endif #if HAVE_DCNGETTEXT PHP_FE(dcngettext, NULL) #endif #if HAVE_BIND_TEXTDOMAIN_CODESET PHP_FE(bind_textdomain_codeset, NULL) #endif {NULL, NULL, NULL} }; /* }}} */ zend_module_entry php_gettext_module_entry = { STANDARD_MODULE_HEADER, "gettext", php_gettext_functions, NULL, NULL, NULL, NULL, PHP_MINFO(gettext), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_GETTEXT ZEND_GET_MODULE(php_gettext) #endif PHP_MINFO_FUNCTION(gettext) { php_info_print_table_start(); php_info_print_table_row(2, "GetText Support", "enabled"); php_info_print_table_end(); } /* {{{ proto string textdomain(string domain) Set the textdomain to "domain". Returns the current domain */ PHP_FUNCTION(textdomain) { zval **domain; char *domain_name, *retval; char *val; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &domain) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain); val = Z_STRVAL_PP(domain); if (strcmp(val, "") && strcmp(val, "0")) { domain_name = val; } else { domain_name = NULL; } retval = textdomain(domain_name); RETURN_STRING(retval, 1); } /* }}} */ /* {{{ proto string gettext(string msgid) Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist */ PHP_FUNCTION(gettext) { zval **msgid; char *msgstr; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &msgid) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(msgid); msgstr = gettext(Z_STRVAL_PP(msgid)); RETURN_STRING(msgstr, 1); } /* }}} */ /* {{{ proto string dgettext(string domain_name, string msgid) Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist */ PHP_FUNCTION(dgettext) { zval **domain_name, **msgid; char *msgstr; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain_name, &msgid) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain_name); convert_to_string_ex(msgid); msgstr = dgettext(Z_STRVAL_PP(domain_name), Z_STRVAL_PP(msgid)); RETURN_STRING(msgstr, 1); } /* }}} */ /* {{{ proto string dcgettext(string domain_name, string msgid, long category) Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist */ PHP_FUNCTION(dcgettext) { zval **domain_name, **msgid, **category; char *msgstr; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &domain_name, &msgid, &category) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain_name); convert_to_string_ex(msgid); convert_to_long_ex(category); msgstr = dcgettext(Z_STRVAL_PP(domain_name), Z_STRVAL_PP(msgid), Z_LVAL_PP(category)); RETURN_STRING(msgstr, 1); } /* }}} */ /* {{{ proto string bindtextdomain(string domain_name, string dir) Bind to the text domain domain_name, looking for translations in dir. Returns the current domain */ PHP_FUNCTION(bindtextdomain) { zval **domain_name, **dir; char *retval, dir_name[MAXPATHLEN]; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain_name, &dir) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain_name); convert_to_string_ex(dir); if (strcmp(Z_STRVAL_PP(dir), "") && strcmp(Z_STRVAL_PP(dir), "0")) { VCWD_REALPATH(Z_STRVAL_PP(dir), dir_name); } else { VCWD_GETCWD(dir_name, MAXPATHLEN); } retval = bindtextdomain(Z_STRVAL_PP(domain_name), dir_name); RETURN_STRING(retval, 1); } /* }}} */ #if HAVE_NGETTEXT /* {{{ proto string ngettext(string MSGID1, string MSGID2, int N) Plural version of gettext() */ PHP_FUNCTION(ngettext) { zval **msgid1, **msgid2, **count; char *msgstr; RETVAL_FALSE; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &msgid1, &msgid2, &count) == FAILURE) { WRONG_PARAM_COUNT; } else { convert_to_string_ex(msgid1); convert_to_string_ex(msgid2); convert_to_long_ex(count); msgstr = ngettext(Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count)); if (msgstr) { RETVAL_STRING (msgstr, 1); } } } /* }}} */ #endif #if HAVE_DNGETTEXT /* {{{ proto string dngettext (string domain, string msgid1, string msgid2, int count) Plural version of dgettext() */ PHP_FUNCTION(dngettext) { zval **domain, **msgid1, **msgid2, **count; RETVAL_FALSE; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &domain, &msgid1, &msgid2, &count) == FAILURE) { WRONG_PARAM_COUNT; } else { char *msgstr; convert_to_string_ex(domain); convert_to_string_ex(msgid1); convert_to_string_ex(msgid2); convert_to_long_ex(count); msgstr = dngettext(Z_STRVAL_PP(domain), Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count)); if (msgstr) { RETVAL_STRING(msgstr, 1); } } } /* }}} */ #endif #if HAVE_DCNGETTEXT /* {{{ proto string dcngettext (string domain, string msgid1, string msgid2, int n, int category) Plural version of dcgettext() */ PHP_FUNCTION(dcngettext) { zval **domain, **msgid1, **msgid2, **count, **category; RETVAL_FALSE; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(4, &domain, &msgid1, &msgid2, &count, &category) == FAILURE) { WRONG_PARAM_COUNT; } else { char* msgstr = NULL; convert_to_string_ex(domain); convert_to_string_ex(msgid1); convert_to_string_ex(msgid2); convert_to_long_ex(count); convert_to_long_ex(category); msgstr = dcngettext(Z_STRVAL_PP(domain), Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count), Z_LVAL_PP(category)); if (msgstr) { RETVAL_STRING(msgstr, 1); } } } /* }}} */ #endif #if HAVE_BIND_TEXTDOMAIN_CODESET /* {{{ proto string bind_textdomain_codeset (string domain, string codeset) Specify the character encoding in which the messages from the DOMAIN message catalog will be returned. */ PHP_FUNCTION(bind_textdomain_codeset) { zval **domain, **codeset; char *retval; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain, &codeset) == FAILURE) { WRONG_PARAM_COUNT; } else { convert_to_string_ex(domain); convert_to_string_ex(codeset); retval = bind_textdomain_codeset(Z_STRVAL_PP(domain), Z_STRVAL_PP(codeset)); RETURN_STRING(retval, 1); } } /* }}} */ #endif #endif /* HAVE_LIBINTL */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/gettext/gettext.dsp0100644000175200000240000001215707150772446015643 0ustar zeevstaff# Microsoft Developer Studio Project File - Name="gettext" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=gettext - Win32 Release_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "gettext.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "gettext.mak" CFG="gettext - Win32 Release_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "gettext - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "gettext - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "gettext - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "GETTEXT_EXPORTS" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /D HAVE_LIBINTL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gettext.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" # ADD LINK32 php4ts.lib gnu_gettext.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gettext.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" !ELSEIF "$(CFG)" == "gettext - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /YX /FD /c # ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GETTEXT_EXPORTS" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBINTL=1 /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"../../Debug_TS/php_gettext.dll" /libpath:"..\..\Debug_TS" # ADD LINK32 php4ts_debug.lib gnu_gettext.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"../../Debug_TS/php_gettext.dll" /libpath:"..\..\Debug_TS" !ENDIF # Begin Target # Name "gettext - Win32 Release_TS" # Name "gettext - Win32 Debug_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\gettext.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\php_gettext.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project php-4.2.3/ext/gettext/php_gettext.h0100644000175200000240000000366207405423124016141 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Alex Plotnick | +----------------------------------------------------------------------+ */ /* $Id: php_gettext.h,v 1.15 2025/12/11 15:29:24 sebastian Exp $ */ #ifndef PHP_GETTEXT_H #define PHP_GETTEXT_H #if HAVE_LIBINTL #ifndef INIT_FUNC_ARGS #include "zend_modules.h" #endif extern zend_module_entry php_gettext_module_entry; #define gettext_module_ptr &php_gettext_module_entry PHP_MINFO_FUNCTION(gettext); PHP_FUNCTION(textdomain); PHP_FUNCTION(gettext); PHP_FUNCTION(dgettext); PHP_FUNCTION(dcgettext); PHP_FUNCTION(bindtextdomain); #if HAVE_NGETTEXT PHP_FUNCTION(ngettext); #endif #if HAVE_DNGETTEXT PHP_FUNCTION(dngettext); #endif #if HAVE_DCNGETTEXT PHP_FUNCTION(dcngettext); #endif #if HAVE_BIND_TEXTDOMAIN_CODESET PHP_FUNCTION(bind_textdomain_codeset); #endif #else #define gettext_module_ptr NULL #endif /* HAVE_LIBINTL */ #define phpext_gettext_ptr gettext_module_ptr #endif /* PHP_GETTEXT_H */ php-4.2.3/ext/gettext/setup.stub0100644000175200000240000000026306707405070015472 0ustar zeevstaff# $Id: setup.stub,v 1.1 2025/04/21 17:26:16 sas Exp $ define_option with-gettext 'gettext support?' yesnodir \ "yes /usr/local" \ ' Whether to include gettext support.' php-4.2.3/ext/gmp/0040755000175200000240000000000007535765574012556 5ustar zeevstaffphp-4.2.3/ext/gmp/tests/0040755000175200000240000000000007535765574013720 5ustar zeevstaffphp-4.2.3/ext/gmp/tests/001.phpt0100644000175200000240000000103707215715774015103 0ustar zeevstaff--TEST-- Check for gmp presence --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- gmp extension is availablephp-4.2.3/ext/gmp/tests/002.phpt0100644000175200000240000000545207221424570015075 0ustar zeevstaff--TEST-- GMP functionality test - factorial --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 php-4.2.3/ext/gmp/tests/003.phpt0100644000175200000240000000174307431577241015104 0ustar zeevstaff--TEST-- Check for number base recognition --SKIPIF-- --POST-- --GET-- --FILE-- --EXPECT-- 1234 1234 10011010010 1234 1234 1234 2322 1234 1234 1234 1234 1234 0 1234 php-4.2.3/ext/gmp/CREDITS0100644000175200000240000000004307324560760013552 0ustar zeevstaffGNU GMP support Stanislav Malyshev php-4.2.3/ext/gmp/Makefile.in0100644000175200000240000000042107210254040014560 0ustar zeevstaff# $Id: Makefile.in,v 1.1 2025/11/26 18:36:16 stas Exp $ LTLIBRARY_NAME = libgmp.la LTLIBRARY_SOURCES = gmp.c LTLIBRARY_SHARED_NAME = gmp.la LTLIBRARY_LIBADD = $(GMP_LIBADD) LTLIBRARY_SHARED_LIBADD = $(GMP_SHARED_LIBADD) include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/gmp/README0100644000175200000240000000041407222627141013406 0ustar zeevstaffArbitrary length number support with GNU MP library. Please see the PGP manual for more documentation. See also GNU MP home page at http://www.swox.com/gmp/. GNU MP library is available under the tems of GNU LGPL license. Please see http://www.swox.com/gmp/lgpl.html php-4.2.3/ext/gmp/TODO0100644000175200000240000000041207211222576013215 0ustar zeevstaffmpz_mul_2exp mpz_[ft]div_[qr]_2exp V 3: mpz_nextprime mpz_addmul mpz_root mpz_perfect_power_p mpz_lcm mpz_si_kronecker mpz_kronecker_si mpz_remove mpz_bin_ui mpz_fib_ui mpz_cmpabs mpz_xor mpz_tstbit mpz_urandom[bm] mpz_fits_slong_p mpz_mul_si mpz_odd_p mpz_even_p php-4.2.3/ext/gmp/config.m40100644000175200000240000000110707505550164014241 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.5.2.1 2025/06/24 07:55:32 derick Exp $ dnl PHP_ARG_WITH(gmp, for GNU MP support, [ --with-gmp Include GNU MP support]) if test "$PHP_GMP" != "no"; then for i in /usr/local /usr $PHP_GMP; do if test -f $i/include/gmp.h; then GMP_DIR=$i fi done if test -z "$GMP_DIR"; then AC_MSG_ERROR(Unable to locate gmp.h) fi PHP_ADD_INCLUDE($GMP_DIR/include) PHP_EXTENSION(gmp, $ext_shared) AC_DEFINE(HAVE_GMP, 1, [ ]) PHP_SUBST(GMP_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(gmp, $GMP_DIR/lib, GMP_SHARED_LIBADD) fi php-4.2.3/ext/gmp/gmp.c0100644000175200000240000007422007454646270013476 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Stanislav Malyshev | +----------------------------------------------------------------------+ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "php_gmp.h" #include "ext/standard/info.h" #if HAVE_GMP #include /* If you declare any globals in php_gmp.h uncomment this: ZEND_DECLARE_MODULE_GLOBALS(gmp) */ /* True global resources - no need for thread safety here */ static int le_gmp; static unsigned char first_of_two_force_ref[] = { 2, BYREF_FORCE, BYREF_NONE }; /* {{{ gmp_functions[] */ function_entry gmp_functions[] = { ZEND_FE(gmp_init, NULL) ZEND_FE(gmp_intval, NULL) ZEND_FE(gmp_strval, NULL) ZEND_FE(gmp_add, NULL) ZEND_FE(gmp_sub, NULL) ZEND_FE(gmp_mul, NULL) ZEND_FE(gmp_div_qr, NULL) ZEND_FE(gmp_div_q, NULL) ZEND_FE(gmp_div_r, NULL) ZEND_FALIAS(gmp_div, gmp_div_q, NULL) ZEND_FE(gmp_mod, NULL) ZEND_FE(gmp_divexact, NULL) ZEND_FE(gmp_neg, NULL) ZEND_FE(gmp_abs, NULL) ZEND_FE(gmp_fact, NULL) ZEND_FE(gmp_sqrt, NULL) ZEND_FE(gmp_sqrtrem, NULL) ZEND_FE(gmp_pow, NULL) ZEND_FE(gmp_powm, NULL) ZEND_FE(gmp_perfect_square, NULL) ZEND_FE(gmp_prob_prime, NULL) ZEND_FE(gmp_gcd, NULL) ZEND_FE(gmp_gcdext, NULL) ZEND_FE(gmp_invert, NULL) ZEND_FE(gmp_jacobi, NULL) ZEND_FE(gmp_legendre, NULL) ZEND_FE(gmp_cmp, NULL) ZEND_FE(gmp_sign, NULL) ZEND_FE(gmp_random, NULL) ZEND_FE(gmp_and, NULL) ZEND_FE(gmp_or, NULL) ZEND_FE(gmp_com, NULL) ZEND_FE(gmp_xor, NULL) ZEND_FE(gmp_setbit, first_of_two_force_ref) ZEND_FE(gmp_clrbit, first_of_two_force_ref) ZEND_FE(gmp_scan0, NULL) ZEND_FE(gmp_scan1, NULL) ZEND_FE(gmp_popcount, NULL) ZEND_FE(gmp_hamdist, NULL) {NULL, NULL, NULL} /* Must be the last line in gmp_functions[] */ }; /* }}} */ /* {{{ gmp_module_entry */ zend_module_entry gmp_module_entry = { STANDARD_MODULE_HEADER, "gmp", gmp_functions, ZEND_MODULE_STARTUP_N(gmp), ZEND_MODULE_SHUTDOWN_N(gmp), NULL, NULL, ZEND_MODULE_INFO_N(gmp), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; /* }}} */ #ifdef COMPILE_DL_GMP ZEND_GET_MODULE(gmp) #endif static void _php_gmpnum_free(zend_rsrc_list_entry *rsrc TSRMLS_DC); #define GMP_RESOURCE_NAME "GMP integer" #define GMP_ROUND_ZERO 0 #define GMP_ROUND_PLUSINF 1 #define GMP_ROUND_MINUSINF 2 /* {{{ gmp_emalloc */ static void *gmp_emalloc(size_t size) { return emalloc(size); } /* }}} */ /* {{{ gmp_erealloc */ static void *gmp_erealloc(void *ptr, size_t old_size, size_t new_size) { return erealloc(ptr, new_size); } /* }}} */ /* {{{ gmp_efree */ static void gmp_efree(void *ptr, size_t size) { efree(ptr); } /* }}} */ /* {{{ ZEND_MINIT_FUNCTION */ ZEND_MODULE_STARTUP_D(gmp) { le_gmp = zend_register_list_destructors_ex(_php_gmpnum_free, NULL, GMP_RESOURCE_NAME, module_number); REGISTER_LONG_CONSTANT("GMP_ROUND_ZERO", GMP_ROUND_ZERO, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GMP_ROUND_PLUSINF", GMP_ROUND_PLUSINF, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GMP_ROUND_MINUSINF", GMP_ROUND_MINUSINF, CONST_CS | CONST_PERSISTENT); mp_set_memory_functions(gmp_emalloc, gmp_erealloc, gmp_efree); return SUCCESS; } /* }}} */ /* {{{ ZEND_MSHUTDOWN_FUNCTION */ ZEND_MODULE_SHUTDOWN_D(gmp) { return SUCCESS; } /* }}} */ /* {{{ ZEND_MINFO_FUNCTION */ ZEND_MODULE_INFO_D(gmp) { php_info_print_table_start(); php_info_print_table_header(2, "gmp support", "enabled"); php_info_print_table_end(); /* Remove comments if you have entries in php.ini DISPLAY_INI_ENTRIES(); */ } /* }}} */ /* Fetch zval to be GMP number. Initially, zval can be also number or string */ #define FETCH_GMP_ZVAL(gmpnumber, zval) \ if(Z_TYPE_PP(zval) == IS_RESOURCE) { \ ZEND_FETCH_RESOURCE(gmpnumber, mpz_t *, zval, -1, GMP_RESOURCE_NAME, le_gmp);\ } else {\ if(convert_to_gmp(&gmpnumber, zval, 0) == FAILURE) {\ RETURN_FALSE;\ }\ ZEND_REGISTER_RESOURCE(NULL, gmpnumber, le_gmp);\ } /* create a new initialized GMP number */ #define INIT_GMP_NUM(gmpnumber) { gmpnumber=emalloc(sizeof(mpz_t)); mpz_init(*gmpnumber); } #define FREE_GMP_NUM(gmpnumber) { mpz_clear(*gmpnumber); efree(gmpnumber); } /* {{{ convert_to_gmp * Convert zval to be gmp number */ static int convert_to_gmp(mpz_t * *gmpnumber, zval **val, int base) { int ret = 0; int skip_lead = 0; *gmpnumber = emalloc(sizeof(mpz_t)); switch(Z_TYPE_PP(val)) { case IS_LONG: case IS_BOOL: case IS_CONSTANT: { convert_to_long_ex(val); mpz_init_set_si(**gmpnumber, Z_LVAL_PP(val)); } break; case IS_STRING: { char *numstr = Z_STRVAL_PP(val); if (Z_STRLEN_PP(val) > 2) { if (numstr[0] == '0') { if (numstr[1] == 'x' || numstr[1] == 'X') { base = 16; skip_lead = 1; } else if (base != 16 && (numstr[1] == 'b' || numstr[1] == 'B')) { base = 2; skip_lead = 1; } } } ret = mpz_init_set_str(**gmpnumber, (skip_lead ? &numstr[2] : numstr), base); } break; default: zend_error(E_WARNING,"Unable to convert variable to GMP - wrong type"); efree(*gmpnumber); return FAILURE; } if (ret) { FREE_GMP_NUM(*gmpnumber); return FAILURE; } return SUCCESS; } /* }}} */ /* {{{ typedefs */ typedef void (*gmp_unary_op_t)(mpz_ptr, mpz_srcptr); typedef int (*gmp_unary_opl_t)(mpz_srcptr); typedef void (*gmp_unary_ui_op_t)(mpz_ptr, unsigned long); typedef void (*gmp_binary_op_t)(mpz_ptr, mpz_srcptr, mpz_srcptr); typedef int (*gmp_binary_opl_t)(mpz_srcptr, mpz_srcptr); typedef unsigned long (*gmp_binary_ui_op_t)(mpz_ptr, mpz_srcptr, unsigned long); typedef void (*gmp_binary_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); typedef unsigned long (*gmp_binary_ui_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long); /* }}} */ #define gmp_zval_binary_ui_op(r, a, b, o, u) gmp_zval_binary_ui_op_ex(r, a, b, o, u, 0 TSRMLS_CC) #define gmp_zval_binary_ui_op2(r, a, b, o, u) gmp_zval_binary_ui_op2_ex(r, a, b, o, u, 0 TSRMLS_CC) #define gmp_binary_ui_op(op, uop) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, uop) #define gmp_binary_op(op) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, NULL) #define gmp_binary_opl(op) _gmp_binary_opl(INTERNAL_FUNCTION_PARAM_PASSTHRU, op) /* Unary operations */ #define gmp_unary_op(op) _gmp_unary_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op) #define gmp_unary_opl(op) _gmp_unary_opl(INTERNAL_FUNCTION_PARAM_PASSTHRU, op) #define gmp_unary_ui_op(op) _gmp_unary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op) /* {{{ gmp_zval_binary_ui_op_ex Execute GMP binary operation. May return GMP resource or long if operation allows this */ static inline void gmp_zval_binary_ui_op_ex(zval *return_value, zval **a_arg, zval **b_arg, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op, int allow_ui_return TSRMLS_DC) { mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result; unsigned long long_result=0; int use_ui=0; FETCH_GMP_ZVAL(gmpnum_a, a_arg); if(gmp_ui_op && Z_TYPE_PP(b_arg) == IS_LONG && Z_LVAL_PP(b_arg) >= 0) { use_ui=1; } else { FETCH_GMP_ZVAL(gmpnum_b, b_arg); } INIT_GMP_NUM(gmpnum_result); if(use_ui && gmp_ui_op) { if(allow_ui_return) { long_result = gmp_ui_op(*gmpnum_result, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg)); } else { gmp_ui_op(*gmpnum_result, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg)); } } else { gmp_op(*gmpnum_result, *gmpnum_a, *gmpnum_b); } if(use_ui && allow_ui_return) { FREE_GMP_NUM(gmpnum_result); RETURN_LONG((long)long_result); } else { ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp); } } /* }}} */ /* {{{ gmp_zval_binary_ui_op2_ex Execute GMP binary operation which returns 2 values. May return GMP resources or longs if operation allows this. */ static inline void gmp_zval_binary_ui_op2_ex(zval *return_value, zval **a_arg, zval **b_arg, gmp_binary_op2_t gmp_op, gmp_binary_ui_op2_t gmp_ui_op, int allow_ui_return TSRMLS_DC) { mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result1, *gmpnum_result2; zval r; int use_ui=0; unsigned long long_result; FETCH_GMP_ZVAL(gmpnum_a, a_arg); if(gmp_ui_op && Z_TYPE_PP(b_arg) == IS_LONG && Z_LVAL_PP(b_arg) >= 0) { /* use _ui function */ use_ui=1; } else { FETCH_GMP_ZVAL(gmpnum_b, b_arg); } INIT_GMP_NUM(gmpnum_result1); INIT_GMP_NUM(gmpnum_result2); if(use_ui && gmp_ui_op) { if(allow_ui_return) { long_result = gmp_ui_op(*gmpnum_result1, *gmpnum_result2, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg)); } else { gmp_ui_op(*gmpnum_result1, *gmpnum_result2, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg)); } } else { gmp_op(*gmpnum_result1, *gmpnum_result2, *gmpnum_a, *gmpnum_b); } array_init(return_value); ZEND_REGISTER_RESOURCE(&r, gmpnum_result1, le_gmp); add_index_resource(return_value, 0, Z_LVAL(r)); if(use_ui && allow_ui_return) { mpz_clear(*gmpnum_result2); add_index_long(return_value, 1, long_result); } else { ZEND_REGISTER_RESOURCE(&r, gmpnum_result2, le_gmp); add_index_resource(return_value, 1, Z_LVAL(r)); } } /* }}} */ /* {{{ _gmp_binary_ui_op */ static inline void _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAMETERS, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op) { zval **a_arg, **b_arg; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){ WRONG_PARAM_COUNT; } gmp_zval_binary_ui_op(return_value, a_arg, b_arg, gmp_op, gmp_ui_op); } /* }}} */ /* Unary operations */ /* {{{ gmp_zval_unary_op */ static inline void gmp_zval_unary_op(zval *return_value, zval **a_arg, gmp_unary_op_t gmp_op TSRMLS_DC) { mpz_t *gmpnum_a, *gmpnum_result; FETCH_GMP_ZVAL(gmpnum_a, a_arg); INIT_GMP_NUM(gmpnum_result); gmp_op(*gmpnum_result, *gmpnum_a); ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp); } /* }}} */ /* {{{ gmp_zval_unary_ui_op */ static inline void gmp_zval_unary_ui_op(zval *return_value, zval **a_arg, gmp_unary_ui_op_t gmp_op) { mpz_t *gmpnum_result; convert_to_long_ex(a_arg); INIT_GMP_NUM(gmpnum_result); gmp_op(*gmpnum_result, Z_LVAL_PP(a_arg)); ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp); } /* }}} */ /* {{{ _gmp_unary_ui_op Execute GMP unary operation. */ static inline void _gmp_unary_ui_op(INTERNAL_FUNCTION_PARAMETERS, gmp_unary_ui_op_t gmp_op) { zval **a_arg; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){ WRONG_PARAM_COUNT; } gmp_zval_unary_ui_op(return_value, a_arg, gmp_op); } /* }}} */ /* {{{ _gmp_unary_op */ static inline void _gmp_unary_op(INTERNAL_FUNCTION_PARAMETERS, gmp_unary_op_t gmp_op) { zval **a_arg; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){ WRONG_PARAM_COUNT; } gmp_zval_unary_op(return_value, a_arg, gmp_op TSRMLS_CC); } /* }}} */ /* {{{ _gmp_unary_opl */ static inline void _gmp_unary_opl(INTERNAL_FUNCTION_PARAMETERS, gmp_unary_opl_t gmp_op) { zval **a_arg; mpz_t *gmpnum_a; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); RETURN_LONG(gmp_op(*gmpnum_a)); } /* }}} */ /* {{{ _gmp_binary_opl */ static inline void _gmp_binary_opl(INTERNAL_FUNCTION_PARAMETERS, gmp_binary_opl_t gmp_op) { zval **a_arg, **b_arg; mpz_t *gmpnum_a, *gmpnum_b; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); FETCH_GMP_ZVAL(gmpnum_b, a_arg); RETURN_LONG(gmp_op(*gmpnum_a, *gmpnum_b)); } /* }}} */ /* {{{ proto resource gmp_init(mixed number [, int base]) Initializes GMP number */ ZEND_FUNCTION(gmp_init) { zval **number_arg, **base_arg; mpz_t * gmpnumber; int argc; int base=0; argc = ZEND_NUM_ARGS(); if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &number_arg, &base_arg) == FAILURE){ WRONG_PARAM_COUNT; } if (argc==2) { convert_to_long_ex(base_arg); base = Z_LVAL_PP(base_arg); if(base < 2 || base > 36) { zend_error(E_WARNING, "Bad base for conversion: %d (should be between 2 and 36)", base); RETURN_FALSE; } } if(convert_to_gmp(&gmpnumber, number_arg, base) == FAILURE) { RETURN_FALSE; } /* Write your own code here to handle argument number. */ ZEND_REGISTER_RESOURCE(return_value, gmpnumber, le_gmp); } /* }}} */ /* {{{ proto int gmp_intval(resource gmpnumber) Gets signed long value of GMP number */ ZEND_FUNCTION(gmp_intval) { zval **gmpnumber_arg; mpz_t * gmpnum; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &gmpnumber_arg) == FAILURE){ WRONG_PARAM_COUNT; } if(Z_TYPE_PP(gmpnumber_arg) == IS_RESOURCE) { ZEND_FETCH_RESOURCE(gmpnum, mpz_t *, gmpnumber_arg, -1, GMP_RESOURCE_NAME, le_gmp); RETVAL_LONG(mpz_get_si(*gmpnum)); } else { convert_to_long_ex(gmpnumber_arg); RETVAL_LONG(Z_LVAL_PP(gmpnumber_arg)); } } /* }}} */ /* {{{ proto string gmp_strval(resource gmpnumber [, int base]) Gets string representation of GMP number */ ZEND_FUNCTION(gmp_strval) { zval **gmpnumber_arg, **base_arg; int base=10, num_len, argc; mpz_t * gmpnum; char *out_string; argc = ZEND_NUM_ARGS(); if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &gmpnumber_arg, &base_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum, gmpnumber_arg); switch (argc) { case 2: convert_to_long_ex(base_arg); base = Z_LVAL_PP(base_arg); break; case 1: base = 10; break; } if(base < 2 || base > 36) { zend_error(E_WARNING, "Bad base for conversion: %d", base); RETURN_FALSE; } num_len = mpz_sizeinbase(*gmpnum, base); out_string = emalloc(num_len+2); if(mpz_sgn(*gmpnum) < 0) { num_len++; } mpz_get_str(out_string, base, *gmpnum); /* From GMP documentation for mpz_sizeinbase(): The returned value will be exact or 1 too big. If base is a power of 2, the returned value will always be exact. So let's check to see if we already have a \0 byte... */ if (out_string[num_len-1] == '\0') num_len--; else out_string[num_len] = '\0'; RETVAL_STRINGL(out_string, num_len, 0); } /* }}} */ /* {{{ proto resource gmp_add(resource a, resource b) Add a and b */ ZEND_FUNCTION(gmp_add) { gmp_binary_ui_op(mpz_add, (gmp_binary_ui_op_t)mpz_add_ui); } /* }}} */ /* {{{ proto resource gmp_sub(resource a, resource b) Subtract b from a */ ZEND_FUNCTION(gmp_sub) { gmp_binary_ui_op(mpz_sub, (gmp_binary_ui_op_t)mpz_sub_ui); } /* }}} */ /* {{{ proto resource gmp_mul(resource a, resource b) Multiply a and b */ ZEND_FUNCTION(gmp_mul) { gmp_binary_ui_op(mpz_mul, (gmp_binary_ui_op_t)mpz_mul_ui); } /* }}} */ /* {{{ proto array gmp_div_qr(resource a, resource b [, int round]) Divide a by b, returns quotient and reminder */ ZEND_FUNCTION(gmp_div_qr) { zval **a_arg, **b_arg, **round_arg; int round=GMP_ROUND_ZERO, argc; argc = ZEND_NUM_ARGS(); if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &b_arg, &round_arg) == FAILURE){ WRONG_PARAM_COUNT; } switch (argc) { case 3: convert_to_long_ex(round_arg); round = Z_LVAL_PP(round_arg); break; case 2: round = GMP_ROUND_ZERO; break; } switch(round) { case GMP_ROUND_ZERO: gmp_zval_binary_ui_op2(return_value, a_arg, b_arg, mpz_tdiv_qr, (gmp_binary_ui_op2_t)mpz_tdiv_qr_ui); break; case GMP_ROUND_PLUSINF: gmp_zval_binary_ui_op2(return_value, a_arg, b_arg, mpz_cdiv_qr, (gmp_binary_ui_op2_t)mpz_cdiv_qr_ui); break; case GMP_ROUND_MINUSINF: gmp_zval_binary_ui_op2(return_value, a_arg, b_arg, mpz_fdiv_qr, (gmp_binary_ui_op2_t)mpz_fdiv_qr_ui); break; } } /* }}} */ /* {{{ proto resource gmp_div_r(resource a, resource b [, int round]) Divide a by b, returns reminder only */ ZEND_FUNCTION(gmp_div_r) { zval **a_arg, **b_arg, **round_arg; int round=GMP_ROUND_ZERO, argc; argc = ZEND_NUM_ARGS(); if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &b_arg, &round_arg) == FAILURE){ WRONG_PARAM_COUNT; } switch (argc) { case 3: convert_to_long_ex(round_arg); round = Z_LVAL_PP(round_arg); break; case 2: round = GMP_ROUND_ZERO; break; } switch(round) { case GMP_ROUND_ZERO: gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_r, (gmp_binary_ui_op_t)mpz_tdiv_r_ui, 1 TSRMLS_CC); break; case GMP_ROUND_PLUSINF: gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_r, (gmp_binary_ui_op_t)mpz_cdiv_r_ui, 1 TSRMLS_CC); break; case GMP_ROUND_MINUSINF: gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_r, (gmp_binary_ui_op_t)mpz_fdiv_r_ui, 1 TSRMLS_CC); break; } } /* }}} */ /* {{{ proto resource gmp_div_q(resource a, resource b [, int round]) Divide a by b, returns quotient only */ ZEND_FUNCTION(gmp_div_q) { zval **a_arg, **b_arg, **round_arg; int round=GMP_ROUND_ZERO, argc; argc = ZEND_NUM_ARGS(); if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &b_arg, &round_arg) == FAILURE){ WRONG_PARAM_COUNT; } switch (argc) { case 3: convert_to_long_ex(round_arg); round = Z_LVAL_PP(round_arg); break; case 2: round = GMP_ROUND_ZERO; break; } switch(round) { case GMP_ROUND_ZERO: gmp_zval_binary_ui_op(return_value, a_arg, b_arg, mpz_tdiv_q, (gmp_binary_ui_op_t)mpz_tdiv_q_ui); break; case GMP_ROUND_PLUSINF: gmp_zval_binary_ui_op(return_value, a_arg, b_arg, mpz_cdiv_q, (gmp_binary_ui_op_t)mpz_cdiv_q_ui); break; case GMP_ROUND_MINUSINF: gmp_zval_binary_ui_op(return_value, a_arg, b_arg, mpz_fdiv_q, (gmp_binary_ui_op_t)mpz_fdiv_q_ui); break; } } /* }}} */ /* {{{ proto resource gmp_mod(resource a, resource b) Computes a modulo b */ ZEND_FUNCTION(gmp_mod) { zval **a_arg, **b_arg; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){ WRONG_PARAM_COUNT; } gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_mod, (gmp_binary_ui_op_t)mpz_mod_ui, 1 TSRMLS_CC); } /* }}} */ /* {{{ proto resource gmp_divexact(resource a, resource b) Divide a by b using exact division algorithm */ ZEND_FUNCTION(gmp_divexact) { gmp_binary_op(mpz_divexact); } /* }}} */ /* {{{ proto resource gmp_neg(resource a) Negates a number */ ZEND_FUNCTION(gmp_neg) { gmp_unary_op(mpz_neg); } /* }}} */ /* {{{ proto resource gmp_abs(resource a) Calculates absolute value */ ZEND_FUNCTION(gmp_abs) { gmp_unary_op(mpz_abs); } /* }}} */ /* {{{ proto resource gmp_fact(int a) Calculates factorial function */ ZEND_FUNCTION(gmp_fact) { gmp_unary_ui_op(mpz_fac_ui); } /* }}} */ /* {{{ proto resource gmp_pow(resource base, int exp) Raise base to power exp */ ZEND_FUNCTION(gmp_pow) { zval **base_arg, **exp_arg; mpz_t *gmpnum_result, *gmpnum_base; int use_ui=0; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &base_arg, &exp_arg) == FAILURE){ WRONG_PARAM_COUNT; } if(Z_TYPE_PP(base_arg) == IS_LONG && Z_LVAL_PP(base_arg) >= 0) { use_ui=1; } else { FETCH_GMP_ZVAL(gmpnum_base, base_arg); } convert_to_long_ex(exp_arg); if(Z_LVAL_PP(exp_arg) < 0) { zend_error(E_WARNING,"Negative exponent not supported"); RETURN_FALSE; } INIT_GMP_NUM(gmpnum_result); if(use_ui) { mpz_ui_pow_ui(*gmpnum_result, Z_LVAL_PP(base_arg), Z_LVAL_PP(exp_arg)); } else { mpz_pow_ui(*gmpnum_result, *gmpnum_base, Z_LVAL_PP(exp_arg)); } ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp); } /* }}} */ /* {{{ proto resource gmp_powm(resource base, resource exp, resource mod) Raise base to power exp and take result modulo mod */ ZEND_FUNCTION(gmp_powm) { zval **base_arg, **exp_arg, **mod_arg; mpz_t *gmpnum_base, *gmpnum_exp, *gmpnum_mod, *gmpnum_result; int use_ui=0; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &base_arg, &exp_arg, &mod_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_base, base_arg); if(Z_TYPE_PP(exp_arg) == IS_LONG && Z_LVAL_PP(exp_arg) >= 0) { use_ui=1; } else { FETCH_GMP_ZVAL(gmpnum_exp, exp_arg); } FETCH_GMP_ZVAL(gmpnum_mod, mod_arg); INIT_GMP_NUM(gmpnum_result); if(use_ui) { mpz_powm_ui(*gmpnum_result, *gmpnum_base, (unsigned long)Z_LVAL_PP(exp_arg), *gmpnum_mod); } else { mpz_powm(*gmpnum_result, *gmpnum_base, *gmpnum_exp, *gmpnum_mod); } ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp); } /* }}} */ /* {{{ proto resource gmp_sqrt(resource a) Takes integer part of square root of a */ ZEND_FUNCTION(gmp_sqrt) { gmp_unary_op(mpz_sqrt); } /* }}} */ /* {{{ proto array gmp_sqrtrem(resource a) Square root with remainder */ ZEND_FUNCTION(gmp_sqrtrem) { zval **a_arg; mpz_t *gmpnum_a, *gmpnum_result1, *gmpnum_result2; zval r; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); INIT_GMP_NUM(gmpnum_result1); INIT_GMP_NUM(gmpnum_result2); mpz_sqrtrem(*gmpnum_result1, *gmpnum_result2, *gmpnum_a); array_init(return_value); ZEND_REGISTER_RESOURCE(&r, gmpnum_result1, le_gmp); add_index_resource(return_value, 0, Z_LVAL(r)); ZEND_REGISTER_RESOURCE(&r, gmpnum_result2, le_gmp); add_index_resource(return_value, 1, Z_LVAL(r)); } /* }}} */ /* {{{ proto bool gmp_perfect_square(resource a) Checks if a is an exact square */ ZEND_FUNCTION(gmp_perfect_square) { zval **a_arg; mpz_t *gmpnum_a; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); RETURN_BOOL((mpz_perfect_square_p(*gmpnum_a)!=0)); } /* }}} */ /* {{{ proto int gmp_prob_prime(resource a[, int reps]) Checks if a is "probably prime" */ ZEND_FUNCTION(gmp_prob_prime) { zval **gmpnumber_arg, **reps_arg; mpz_t *gmpnum_a; int argc, reps=10; argc = ZEND_NUM_ARGS(); if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &gmpnumber_arg, &reps_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, gmpnumber_arg); switch (argc) { case 2: convert_to_long_ex(reps_arg); reps = Z_LVAL_PP(reps_arg); break; case 1: reps = 10; break; } RETURN_LONG(mpz_probab_prime_p(*gmpnum_a, reps)); } /* }}} */ /* {{{ proto resource gmp_gcd(resource a, resource b) Computes greatest common denominator (gcd) of a and b */ ZEND_FUNCTION(gmp_gcd) { zval **a_arg, **b_arg; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){ WRONG_PARAM_COUNT; } gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_gcd, (gmp_binary_ui_op_t)mpz_gcd_ui, 1 TSRMLS_CC); } /* }}} */ /* {{{ proto array gmp_gcdext(resource a, resource b) Computes G, S, and T, such that AS + BT = G = `gcd' (A, B) */ ZEND_FUNCTION(gmp_gcdext) { zval **a_arg, **b_arg; mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_t, *gmpnum_s, *gmpnum_g; zval r; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); FETCH_GMP_ZVAL(gmpnum_b, a_arg); INIT_GMP_NUM(gmpnum_g); INIT_GMP_NUM(gmpnum_s); INIT_GMP_NUM(gmpnum_t); mpz_gcdext(*gmpnum_g, *gmpnum_s, *gmpnum_t, *gmpnum_a, *gmpnum_b); array_init(return_value); ZEND_REGISTER_RESOURCE(&r, gmpnum_g, le_gmp); add_assoc_resource(return_value, "g", Z_LVAL(r)); ZEND_REGISTER_RESOURCE(&r, gmpnum_s, le_gmp); add_assoc_resource(return_value, "s", Z_LVAL(r)); ZEND_REGISTER_RESOURCE(&r, gmpnum_t, le_gmp); add_assoc_resource(return_value, "t", Z_LVAL(r)); } /* }}} */ /* {{{ proto resource gmp_invert(resource a, resource b) Computes the inverse of a modulo b */ ZEND_FUNCTION(gmp_invert) { zval **a_arg, **b_arg; mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); FETCH_GMP_ZVAL(gmpnum_b, b_arg); INIT_GMP_NUM(gmpnum_result); if(mpz_invert(*gmpnum_result, *gmpnum_a, *gmpnum_b)) { ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp); } else { FREE_GMP_NUM(gmpnum_result); RETURN_FALSE; } } /* }}} */ /* {{{ proto int gmp_jacobi(resource a, resource b) Computes Jacobi symbol */ ZEND_FUNCTION(gmp_jacobi) { gmp_binary_opl(mpz_jacobi); } /* }}} */ /* {{{ proto int gmp_legendre(resource a, resource b) Computes Legendre symbol */ ZEND_FUNCTION(gmp_legendre) { gmp_binary_opl(mpz_legendre); } /* }}} */ /* {{{ proto int gmp_cmp(resource a, resource b) Compares two numbers */ ZEND_FUNCTION(gmp_cmp) { zval **a_arg, **b_arg; mpz_t *gmpnum_a, *gmpnum_b; int use_si=0, res; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); if(Z_TYPE_PP(b_arg) == IS_LONG) { use_si=1; } else { FETCH_GMP_ZVAL(gmpnum_b, b_arg); } if(use_si) { res = mpz_cmp_si(*gmpnum_a, Z_LVAL_PP(b_arg)); } else { res = mpz_cmp(*gmpnum_a, *gmpnum_b); } RETURN_LONG(res); } /* }}} */ /* {{{ proto int gmp_sign(resource a) Gets the sign of the number */ ZEND_FUNCTION(gmp_sign) { zval **a_arg; mpz_t *gmpnum_a; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); RETURN_LONG(mpz_sgn(*gmpnum_a)); } /* }}} */ /* {{{ proto resource gmp_random([int limiter]) Gets random number */ ZEND_FUNCTION(gmp_random) { zval **limiter_arg; int limiter, argc; mpz_t *gmpnum_result; argc = ZEND_NUM_ARGS(); if (argc < 0 || argc > 1 || zend_get_parameters_ex(1, &limiter_arg) == FAILURE){ WRONG_PARAM_COUNT; } if(argc) { convert_to_long_ex(limiter_arg); limiter = Z_LVAL_PP(limiter_arg); } else { limiter = 20; } INIT_GMP_NUM(gmpnum_result); mpz_random(*gmpnum_result, limiter); ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp); } /* }}} */ /* {{{ proto resource gmp_and(resource a, resource b) Calculates logical AND of a and b */ ZEND_FUNCTION(gmp_and) { gmp_binary_op(mpz_and); } /* }}} */ /* {{{ proto resource gmp_or(resource a, resource b) Calculates logical OR of a and b */ ZEND_FUNCTION(gmp_or) { gmp_binary_op(mpz_ior); } /* }}} */ /* {{{ proto resource gmp_com(resource a) Calculates one's complement of a */ ZEND_FUNCTION(gmp_com) { gmp_unary_op(mpz_com); } /* }}} */ /* {{{ proto resource gmp_xor(resource a, resource b) Calculates logical exclusive OR of a and b */ ZEND_FUNCTION(gmp_xor) { /* use formula: a^b = (a|b)&^(a&b) */ zval **a_arg, **b_arg; mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result, *gmpnum_t; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); FETCH_GMP_ZVAL(gmpnum_b, b_arg); INIT_GMP_NUM(gmpnum_result); INIT_GMP_NUM(gmpnum_t); mpz_and(*gmpnum_t, *gmpnum_a, *gmpnum_b); mpz_com(*gmpnum_t, *gmpnum_t); mpz_ior(*gmpnum_result, *gmpnum_a, *gmpnum_b); mpz_and(*gmpnum_result, *gmpnum_result, *gmpnum_t); FREE_GMP_NUM(gmpnum_t); ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp); } /* }}} */ /* {{{ proto void gmp_setbit(resource &a, int index[, bool set_clear]) Sets or clear bit in a */ ZEND_FUNCTION(gmp_setbit) { zval **a_arg, **ind_arg, **set_c_arg; int argc, index, set=1; mpz_t *gmpnum_a; argc = ZEND_NUM_ARGS(); if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &ind_arg, &set_c_arg) == FAILURE){ WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(gmpnum_a, mpz_t *, a_arg, -1, GMP_RESOURCE_NAME, le_gmp); convert_to_long_ex(ind_arg); index = Z_LVAL_PP(ind_arg); switch (argc) { case 3: convert_to_long_ex(set_c_arg); set = Z_LVAL_PP(set_c_arg); break; case 2: set = 1; break; } if(set) { mpz_setbit(*gmpnum_a, index); } else { mpz_clrbit(*gmpnum_a, index); } } /* }}} */ /* {{{ proto void gmp_clrbit(resource &a, int index) Clears bit in a */ ZEND_FUNCTION(gmp_clrbit) { zval **a_arg, **ind_arg; int index; mpz_t *gmpnum_a; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &ind_arg) == FAILURE){ WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(gmpnum_a, mpz_t *, a_arg, -1, GMP_RESOURCE_NAME, le_gmp); convert_to_long_ex(ind_arg); index = Z_LVAL_PP(ind_arg); mpz_clrbit(*gmpnum_a, index); } /* }}} */ /* {{{ proto int gmp_popcount(resource a) Calculates the population count of a */ ZEND_FUNCTION(gmp_popcount) { zval **a_arg; mpz_t *gmpnum_a; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); RETURN_LONG(mpz_popcount(*gmpnum_a)); } /* }}} */ /* {{{ proto int gmp_hamdist(resource a, resource b) Calculates hamming distance between a and b */ ZEND_FUNCTION(gmp_hamdist) { zval **a_arg, **b_arg; mpz_t *gmpnum_a, *gmpnum_b; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(1, &a_arg, &b_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); FETCH_GMP_ZVAL(gmpnum_b, b_arg); RETURN_LONG(mpz_hamdist(*gmpnum_a, *gmpnum_b)); } /* }}} */ /* {{{ proto int gmp_scan0(resource a, int start) Finds first zero bit */ ZEND_FUNCTION(gmp_scan0) { zval **a_arg, **start_arg; mpz_t *gmpnum_a; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &start_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); convert_to_long_ex(start_arg); RETURN_LONG(mpz_scan0(*gmpnum_a, Z_LVAL_PP(start_arg))); } /* }}} */ /* {{{ proto int gmp_scan1(resource a, int start) Finds first non-zero bit */ ZEND_FUNCTION(gmp_scan1) { zval **a_arg, **start_arg; mpz_t *gmpnum_a; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &start_arg) == FAILURE){ WRONG_PARAM_COUNT; } FETCH_GMP_ZVAL(gmpnum_a, a_arg); convert_to_long_ex(start_arg); RETURN_LONG(mpz_scan1(*gmpnum_a, Z_LVAL_PP(start_arg))); } /* }}} */ /* {{{ _php_gmpnum_free */ static void _php_gmpnum_free(zend_rsrc_list_entry *rsrc TSRMLS_DC) { mpz_t *gmpnum = (mpz_t *)rsrc->ptr; FREE_GMP_NUM(gmpnum); } /* }}} */ #endif /* HAVE_GMP */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ php-4.2.3/ext/gmp/php_gmp.h0100644000175200000240000000633207437364646014356 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Stanislav Malyshev | +----------------------------------------------------------------------+ */ #ifndef PHP_GMP_H #define PHP_GMP_H /* You should tweak config.m4 so this symbol (or some else suitable) gets defined. */ #if HAVE_GMP extern zend_module_entry gmp_module_entry; #define phpext_gmp_ptr &gmp_module_entry #ifdef ZEND_WIN32 #define GMP_API __declspec(dllexport) #else #define GMP_API #endif ZEND_MODULE_STARTUP_D(gmp); ZEND_MODULE_SHUTDOWN_D(gmp); ZEND_MODULE_INFO_D(gmp); ZEND_FUNCTION(gmp_init); ZEND_FUNCTION(gmp_intval); ZEND_FUNCTION(gmp_strval); ZEND_FUNCTION(gmp_add); ZEND_FUNCTION(gmp_sub); ZEND_FUNCTION(gmp_mul); ZEND_FUNCTION(gmp_div_qr); ZEND_FUNCTION(gmp_div_q); ZEND_FUNCTION(gmp_div_r); ZEND_FUNCTION(gmp_mod); ZEND_FUNCTION(gmp_divexact); ZEND_FUNCTION(gmp_neg); ZEND_FUNCTION(gmp_abs); ZEND_FUNCTION(gmp_fact); ZEND_FUNCTION(gmp_sqrt); ZEND_FUNCTION(gmp_pow); ZEND_FUNCTION(gmp_powm); ZEND_FUNCTION(gmp_sqrtrem); ZEND_FUNCTION(gmp_perfect_square); ZEND_FUNCTION(gmp_prob_prime); ZEND_FUNCTION(gmp_gcd); ZEND_FUNCTION(gmp_gcdext); ZEND_FUNCTION(gmp_invert); ZEND_FUNCTION(gmp_jacobi); ZEND_FUNCTION(gmp_legendre); ZEND_FUNCTION(gmp_cmp); ZEND_FUNCTION(gmp_sign); ZEND_FUNCTION(gmp_and); ZEND_FUNCTION(gmp_or); ZEND_FUNCTION(gmp_com); ZEND_FUNCTION(gmp_xor); ZEND_FUNCTION(gmp_random); ZEND_FUNCTION(gmp_setbit); ZEND_FUNCTION(gmp_clrbit); ZEND_FUNCTION(gmp_scan0); ZEND_FUNCTION(gmp_scan1); ZEND_FUNCTION(gmp_popcount); ZEND_FUNCTION(gmp_hamdist); /* Declare any global variables you may need between the BEGIN and END macros here: ZEND_BEGIN_MODULE_GLOBALS(gmp) int global_variable; ZEND_END_MODULE_GLOBALS(gmp) */ /* In every function that needs to use variables in php_gmp_globals, do call GMPLS_FETCH(); after declaring other variables used by that function, and always refer to them as GMPG(variable). You are encouraged to rename these macros something shorter, see examples in any other php module directory. */ #ifdef ZTS #define GMPG(v) TSRMG(gmp_globals_id, php_gmp_globals *, v) #else #define GMPG(v) (gmp_globals.v) #endif #else #define phpext_gmp_ptr NULL #endif #endif /* PHP_GMP_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ php-4.2.3/ext/hyperwave/0040755000175200000240000000000007535765574014005 5ustar zeevstaffphp-4.2.3/ext/hyperwave/CREDITS0100644000175200000240000000003007206176573015001 0ustar zeevstaffHyperWave Uwe Steinmann php-4.2.3/ext/hyperwave/Makefile.in0100644000175200000240000000015707103403544016023 0ustar zeevstaff LTLIBRARY_NAME = libhyperwave.la LTLIBRARY_SOURCES = hw.c hg_comm.c include $(top_srcdir)/build/dynlib.mk php-4.2.3/ext/hyperwave/config.m40100644000175200000240000000065107401753431015470 0ustar zeevstaffdnl dnl $Id: config.m4,v 1.3 2025/11/30 18:59:37 sniper Exp $ dnl AC_MSG_CHECKING(for Hyperwave support) AC_ARG_WITH(hyperwave, [ --with-hyperwave Include Hyperwave support], [ if test "$withval" != "no"; then AC_DEFINE(HYPERWAVE,1,[ ]) AC_MSG_RESULT(yes) PHP_EXTENSION(hyperwave) else AC_DEFINE(HYPERWAVE,0,[ ]) AC_MSG_RESULT(no) fi ],[ AC_DEFINE(HYPERWAVE,0,[ ]) AC_MSG_RESULT(no) ]) php-4.2.3/ext/hyperwave/debug.h0100644000175200000240000001466307335257606015241 0ustar zeevstaff/**************************************************************************** * * Copyright (C) 1991 Kendall Bennett. * All rights reserved. * * Filename: $RCSfile: debug.h,v $ * Version: $Revision: 1.3 $ * * Language: ANSI C * Environment: any * * Description: General header file for portable code. * * $Id: debug.h,v 1.3 2025/08/11 16:38:30 zeev Exp $ * * Revision History: * ----------------- * * $Log: debug.h,v $ * Revision 1.3 2025/08/11 16:38:30 zeev * Whitespace * * Revision 1.2 2025/07/02 23:46:41 sas * Change header protection macros to conform to standard. * * Draft 3 of IEEE 1003.1 200x, "2.2 The Compilation Environment" * * All identifiers that begin with an underscore and either an uppercase * letter or another underscore are always reserved for any use by the * implementation. * * Revision 1.1 2025/04/21 23:37:47 ssb * moved db * * Revision 1.1.1.1 2025/04/07 21:03:29 zeev * PHP 4.0 * * Revision 1.1.1.1 2025/03/17 04:29:10 andi * PHP4 * * Revision 1.1.1.1 2024/12/21 07:56:22 andi * Trying to start the zend CVS tree * * Revision 1.1 2025/08/12 09:29:16 steinm * First version of Hyperwave module. * * Revision 1.6 92/03/15 12:51:48 kjb * Added MK_FP macro and ushort typedef. * * Revision 1.5 91/10/28 03:17:33 kjb * Ported to the Iris. * * Revision 1.4 91/09/26 15:29:02 kjb * Added stuff for the SGI Iris 4D. * * Revision 1.3 91/09/26 10:07:04 kjb * Added general typedef stuff. * * Revision 1.2 91/09/03 18:19:14 ROOT_DOS * Added a few defines that are supplied by for UNIX compatibility. * * Revision 1.1 91/08/16 13:19:06 ROOT_DOS * Initial revision * ****************************************************************************/ #ifndef DEBUG_H #define DEBUG_H #ifdef DEBUG # define D(x) x #else # define D(x) #endif #define PRIVATE static #define PUBLIC #ifdef __MSDOS__ /* Compiling for MSDOS */ # define MS(x) x # define UX(x) # define IR(x) # define _8086 /* We know we have an 8086 type processor */ #if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__) # define LDATA # define NULL 0L #else # define NULL 0 #endif #else __MSDOS__ #ifdef __IRIS4D__ /* Compiling for the SGI Iris 4D */ # define MS(x) # define UX(x) x /* The Iris is a UNIX machine */ # define IR(x) x # define O_BINARY 0 /* no binary input mode in UNIX open() */ # define MAXFILE 255 /* These are defined in , but */ # define MAXDIR 255 /* on UNIX machines, we just define */ # define MAXPATH 255 /* them all to be the same size */ # define far /* Near and far do not exist under */ # define near /* UNIX or the Iris. */ # define NULL ((void *)0) #else __IRIS4D__ /* Assume UNIX compilation */ # define MS(x) # define UX(x) x # define IR(x) # define O_BINARY 0 /* no binary input mode in UNIX open() */ # define MAXFILE 255 /* These are defined in , but */ # define MAXDIR 255 /* on UNIX machines, we just define */ # define MAXPATH 255 /* them all to be the same size */ # define far /* Near and far do not exist under */ # define near /* UNIX or the Iris. */ # ifndef NULL # define NULL ((void *)0) # endif #endif __IRIS4D__ #endif __MSDOS__ /**************************************************************************** * * SEG(p) Evaluates to the segment portion of an 8086 address. * OFF(p) Evaluates to the offset portion of an 8086 address. * FP(s,o) Creates a far pointer given a segment offset pair. * PHYS(p) Evaluates to a long holding a physical address * ****************************************************************************/ #ifdef _8086 # define SEG(p) ( ((unsigned *)&(void far *)(p))[1] ) # define OFF(p) ( (unsigned)(p) ) # define FP(s,o) ( (void far *)( ((unsigned long)s << 16) + \ (unsigned long)o )) # define PHYS(p) ( (unsigned long)OFF(p) + \ ((unsigned long)SEG(p) << 4)) #else # define PHYS(p) (p) #endif _8086 /**************************************************************************** * * NUMELE(array) Evaluates to the array size in elements * LASTELE(array) Evaluates to a pointer to the last element * INBOUNDS(array,p) Evaluates to true if p points into the array * RANGE(a,b,c) Evaluates to true if a <= b <= c * max(a,b) Evaluates to a or b, whichever is larger * min(a,b) Evaluates to a or b, whichever is smaller * ABS(a) Evaluates to the absolute value of a * NBITS(type) Returns the number of bits in a variable of the * indicated type * MAXINT Evaluates to the value of the largest signed integer * ****************************************************************************/ #define NUMELE(a) (sizeof(a)/sizeof(*(a))) #define LASTELE(a) ((a) + (NUMELE(a)-1)) #ifdef LDATA #define TOOHIGH(a, p) ((long)PHYS(p) - (long)PHYS(a) > (long)(NUMELE(a)-1)) #define TOOLOW(a, p) ((long)PHYS(p) - (long)PHYS(a) < 0) #else #define TOOHIGH(a, p) ((long)(p) - (long)(a) > (long)(NUMELE(a)-1)) #define TOOLOW(a, p) ((long)(p) - (long)(a) < 0) #endif #define INBOUNDS(a, p) ( ! (TOOHIGH(a, p) || TOOLOW(a, p)) ) #define _IS(t, x) (((t)1 << (x)) != 0) /* Evaluates true if the width of */ /* variable of type t is < x. */ /* The != 0 assures that the */ /* answer is 1 or 0 */ #define NBITS(t) (4 * (1 + _IS(t, 4) + _IS(t, 8) + _IS(t, 12) + _IS(t, 16) \ + _IS(t, 20) + _IS(t, 24) + _IS(t, 28) + _IS(t, 32))) #define MAXINT (((unsigned)~0) >> 1) #ifndef MAX # define MAX(a, b) ( ((a) > (b)) ? (a) : (b)) #endif #ifndef MIN # define MIN(a, b) ( ((a) < (b)) ? (a) : (b)) #endif #ifndef ABS # define ABS(a) ((a) >= 0 ? (a) : -(a)) #endif #define RANGE(a, b, c) ( (a) <= (b) && (b) <= (c) ) /* General typedefs */ #ifndef __GENDEFS #define __GENDEFS typedef void *ptr; typedef void near *nearptr; typedef void far *farptr; /*typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint; typedef unsigned long ulong;*/ typedef int bool; #endif __GENDEFS /* Boolean truth values */ #define false 0 #define true 1 #define FALSE 0 #define TRUE 1 #define NO 0 #define YES 1 #endif /* DEBUG_H */ php-4.2.3/ext/hyperwave/hg_comm.c0100644000175200000240000042661607437364646015572 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Uwe Steinmann | +----------------------------------------------------------------------+ */ /* $Id: hg_comm.c,v 1.52 2025/02/28 08:26:14 sebastian Exp $ */ /* #define HW_DEBUG */ #include #include "php.h" #include "php_globals.h" #include "SAPI.h" #if HYPERWAVE #include #include #include #ifdef PHP_WIN32 # include # define EWOULDBLOCK WSAEWOULDBLOCK # define ETIMEDOUT WSAETIMEDOUT # define bcopy memcpy # define bzero(a, b) memset(a, 0, b) #else # include # include # include # include # include #endif #include #include #include "hg_comm.h" #include "ext/standard/head.h" /* Defining hw_optimize does optimize the send_objectbyidquery() function. Instead of getting the complete return message including the objectrecords with recv_hg_msg(), only the header of the return message is fetched. The object records itself are fetched as they are needed straight from the socket. This method requires less memory and is twice as fast because reading from the net seems to be a bottleneck which has less impact if the processing of the data is done in parallel. */ #define hw_optimize /* Define hw_less_server_stress does reduce the stress on the hw server, by using send_objectbyidquery() instead of send_getobject() multiple times. send_objectbyidquery() gets a bunch of object records with one message. This also reduced the number of lines in the servers log files. Unfortunately this is not faster unless hw_optimize is defined, because getting object records with multiple send_getobject() is already optimized. First all request messages for each object are send and the the answers are read. This gives the server the possibility to answer request already while more request are comming in. */ #define hw_less_server_stress static int set_nonblocking(int fd); /* static int set_blocking(int fd); */ static int hg_read_exact(int sockfd, char *buf, int size); /* static int hg_read(int sockfd, char *buf, int size); */ static int hg_write(int sockfd, char *buf, int size); static int send_hg_msg(int sockfd, hg_msg *msg, int length); static void build_msg_header(hg_msg *msg, int length, int version_msgid, int msg_type); static char *build_msg_int(char *buf, int val); static char *build_msg_str(char *buf, char *str); static int swap(int val); int version = HW_VERSION; /* F_DISTRIBUTED has the effect that all object ids are virtual. This means whenever an object is requested a new id is generated for this session. Wavemaster and Harmony set this flag. How do I know? tcpdump tells a lot if the output is investigated. The bit is also need to allow access on other server through the local server. The hw_mapid() function won't work unless you set F_DISTRIBUTED */ /* int version = HW_VERSION | F_DISTRIBUTED; */ /* int version = HW_VERSION | F_DISTRIBUTED | F_COMPRESSED; */ static int msgid = 1; static int sock_flags = -1; static int non_blocking = 0; static int swap_on = 0; static int rtimeout = 40; static int wtimeout = 40; static int lowerror = 0; /*********************************************************************** * Function fnInsStr() * * * * Insert string in string at position. The old string will be freed * * with efree!!! The new string is allocated with malloc. * * Parameter: string *str: string in which insstr is to be inserted * * int pos: Position where string is to inserted (0=first) * * string *insstr: string to be inserted * * Return: pointer to new string or NULL. If NULL is returned the * * memory for the old string has not been freed. * ***********************************************************************/ char *fnInsStr(char *str, int pos, char *insstr) { char *newstr, *ptr; if((str == NULL) || (insstr == NULL)) return NULL; if(pos > (int)strlen(str)) return NULL; if(insstr[0] == '\0') return str; if(NULL == (newstr = malloc(strlen(str) + strlen(insstr) + 1))) { lowerror = LE_MALLOC; return NULL; } ptr = newstr; memcpy(newstr, str, pos); ptr += pos; strcpy(ptr, insstr); ptr += strlen(insstr); strcpy(ptr, str+pos); free(str); return newstr; } /*********************************************************************** * Function fnAddAnchor() * * * * Inserts new anchor into anchor list. * * Parameter: DLIST pList: Anchor list * * int objectID: object ID of Anchor * * int start: start position * * int end: end position * * Return: Pointer to new anchor, NULL if error * ***********************************************************************/ #ifdef newlist ANCHOR *fnAddAnchor(zend_llist *pAnchorList, int objectID, int start, int end) #else ANCHOR *fnAddAnchor(DLIST *pAnchorList, int objectID, int start, int end) #endif { ANCHOR *cur_ptr; #ifdef newlist ANCHOR **ptr; if(NULL == (cur_ptr = (ANCHOR *) emalloc(sizeof(ANCHOR)))) return NULL; #else if((cur_ptr = (ANCHOR *) dlst_newnode(sizeof(ANCHOR))) == NULL) { return NULL; } #endif memset(cur_ptr, 0, sizeof(ANCHOR)); cur_ptr->start = start; cur_ptr->end = end; cur_ptr->id = objectID; cur_ptr->destdocname = NULL; cur_ptr->nameanchor = NULL; cur_ptr->link = NULL; cur_ptr->tagattr = NULL; cur_ptr->htmlattr = NULL; cur_ptr->codebase = NULL; cur_ptr->code = NULL; cur_ptr->keyword = NULL; cur_ptr->fragment = NULL; #ifdef newlist zend_llist_prepend_element(pAnchorList, &cur_ptr); ptr = (ANCHOR **) zend_llist_get_first(pAnchorList); #else dlst_insertafter(pAnchorList, cur_ptr, PHP_DLST_HEAD(pAnchorList)); #endif return(cur_ptr); } /*********************************************************************** * Function fnDeleteAnchor() * * * * Inserts new anchor into anchor list. * * Parameter: ptr: pointer to node * * Return: void * ***********************************************************************/ #ifdef newlist void fnDeleteAnchor(void *ptr1) #else void fnDeleteAnchor(ANCHOR *ptr) #endif { #ifdef newlist ANCHOR **ptr2, *ptr; ptr2 = (ANCHOR **) ptr1; ptr = *ptr2; #endif if(ptr->destdocname) efree(ptr->destdocname); if(ptr->nameanchor) efree(ptr->nameanchor); if(ptr->link) efree(ptr->link); if(ptr->tagattr) efree(ptr->tagattr); if(ptr->htmlattr) efree(ptr->htmlattr); if(ptr->codebase) efree(ptr->codebase); if(ptr->code) efree(ptr->code); if(ptr->keyword) efree(ptr->keyword); if(ptr->fragment) efree(ptr->fragment); #ifdef newlist efree(ptr); #else dlst_freenode(ptr); #endif } /*********************************************************************** * Function fnListAnchor() * * * * Lists all anchors in anchor list. * * Parameter: ptr: pointer to list * * Return: void * ***********************************************************************/ #ifdef newlist void fnListAnchor(zend_llist *pAnchorList) #else void fnListAnchor(DLIST *pAnchorList) #endif { #ifdef newlist ANCHOR *cur_ptr, **ptr; ptr = (ANCHOR **) zend_llist_get_last(pAnchorList); if(ptr) cur_ptr = *ptr; while(ptr) { fprintf(stderr, "0x%X->0x%X ", (int) ptr, (int) cur_ptr); #else ANCHOR *cur_ptr; cur_ptr = (ANCHOR *) dlst_last(pAnchorList); while(cur_ptr) { fprintf(stderr, "0x%X ", (int) cur_ptr); #endif fprintf(stderr, "%d, %d, %s, %s, %s, %s %s\n", cur_ptr->start, cur_ptr->end, cur_ptr->tanchor == 1 ? "src" : "dest", cur_ptr->destdocname, cur_ptr->nameanchor, cur_ptr->link, cur_ptr->tagattr); #ifdef newlist ptr = (ANCHOR **) zend_llist_get_prev(pAnchorList); if(ptr) cur_ptr = *ptr; #else cur_ptr = (ANCHOR *) dlst_prev(cur_ptr); #endif } } /*********************************************************************** * Function fnCmpAnchors() * * * * Compares to Anchors by its start position * * Parameter: ANCHOR a1: First Anchor * * ANCHOR a2: Second Anchor * * Return: As strcmp * ***********************************************************************/ #ifdef newlist int fnCmpAnchors(const void *e1, const void *e2 TSRMLS_DC) { ANCHOR *a1, **aa1, *a2, **aa2; zend_llist_element **ee1, **ee2; ee1 = (zend_llist_element **) e1; ee2 = (zend_llist_element **) e2; aa1 = (ANCHOR **) (*ee1)->data; aa2 = (ANCHOR **) (*ee2)->data; a1 = *aa1; a2 = *aa2; #else int fnCmpAnchors(ANCHOR *a1, ANCHOR *a2 TSRMLS_DC) { #endif if(a1->start < a2->start) return -1; if(a1->start == a2->start) { /* It's importent to check this case as well, because a link with a bigger end has to be inserted first. */ if(a1->end < a2->end) return -1; /* If both start and end are equal (yes, it is possible) we will Src Anchor before a Dest anchor. There has been a case where an IMG was surrounded by a NAME which was surrounded by a HREF. In such a case the HREF doesn't work. */ if(a1->end == a2->end) { if(a1->tanchor > a2->tanchor) return -1; } } return 1; } /*********************************************************************** * Function fnCreateAnchorList() * * Uses either docofanchorrec or reldestrec to create a list of anchors * * depending on anchormode * * * * Returns a list of Anchors converted from an object record * * Parameter: int objectID: the object for which the list is created * * char **anchors: object records of anchors * * char **docofanchorrec: Name of destination absolut * * char **reldestrec: Name of destination relativ to current * * object * * int ancount: number of anchors * * int anchormode: 0 = use absolut dest, else rel. dest * * Return: List of Anchors, NULL if error * ***********************************************************************/ #ifdef newlist zend_llist *fnCreateAnchorList(hw_objectID objID, char **anchors, char **docofanchorrec, char **reldestrec, int ancount, int anchormode) #else DLIST *fnCreateAnchorList(hw_objectID objID, char **anchors, char **docofanchorrec, char **reldestrec, int ancount, int anchormode) #endif { int start, end, i, destid, anchordestid, objectID; ANCHOR *cur_ptr = NULL; #ifdef newlist zend_llist *pAnchorList; pAnchorList = (zend_llist *) emalloc(sizeof(zend_llist)); zend_llist_init(pAnchorList, sizeof(char *), fnDeleteAnchor, 0); #else DLIST *pAnchorList = dlst_init(); #endif for(i=ancount-1; i>=0; i--) { char *object = NULL; char *docofanchorptr = NULL; char *reldestptr = NULL; char *str, *str1, link[200]; if(NULL != anchors[i]) { object = anchors[i]; docofanchorptr = docofanchorrec[i]; if(reldestrec) /* FIXME reldestrec may only be NULL if anchormode != 0 */ reldestptr = reldestrec[i]; /* Determine Position. Doesn't matter if Src or Dest The Position field should always be there. Though there are case in which the position has no meaning, e.g. if a document is annotated and the annotation text doesn't contain a link of type annotation, In such a case the Position has the value 'invisible' */ str = strstr(object, "Position"); str += 9; if(((int) str != 9) && (0 != strncmp(str, "invisible", 9))) { sscanf(str, "0x%X 0x%X", &start, &end); /* Determine ObjectID */ objectID = 0; if(NULL != (str = strstr(object, "ObjectID"))) { str += 9; sscanf(str, "0x%X", &objectID); } cur_ptr = fnAddAnchor(pAnchorList, objectID, start, end); /* Determine Type of Anchor */ str = strstr(object, "TAnchor"); str += 8; if(*str == 'S') { char destdocname[200]; char nameanchor[200]; cur_ptr->tanchor = 1; cur_ptr->destdocname = NULL; if(NULL != (str = strstr(object, "Dest"))) { char *tempptr; /* No need to care about the value of Dest, because we take the info from docofanchorptr. Since the anchor has a destination there are two possibilities. 1. The destination is an anchor or 2. or the destination is a document already. In both cases docofanchorptr has the proper info because GETDOCBYANCHOR is such a nice message. */ switch(anchormode) { case 0: tempptr = docofanchorptr; break; default: tempptr = reldestptr; } if(NULL != tempptr) { destid = 0; if(NULL != (str = strstr(tempptr, "ObjectID="))) { str += 9; sscanf(str, "0x%X", &destid); } /* This is basically for NAME tags. There is no need to add the destname if it is the document itself. */ /* if(destid == objID) { cur_ptr->destdocname = NULL; } else { */ /* It's always nice to deal with names, so let's first check for a name. If there is none we take the ObjectID. */ if(NULL != (str = strstr(tempptr, "Name="))) { str += 5; } else if(NULL != (str = strstr(tempptr, "ObjectID="))) { str += 9; } if(sscanf(str, "%s\n", destdocname)) { cur_ptr->destdocname = estrdup(destdocname); } /* } */ } } /* Get the Id of the anchor destination and the document id that belongs to that anchor. We need that soon in order to determine if the anchor points to a document or a dest anchor in a document. */ anchordestid = 0; if(NULL != (str = strstr(object, "Dest="))) { str += 5; sscanf(str, "0x%X", &anchordestid); } /* if anchordestid != destid then the destination is an anchor in a document whose name (objectID) is already in destdocname. We will have to extend the link by '#...' */ cur_ptr->nameanchor = NULL; if(anchordestid != destid) { if(NULL != (str = strstr(object, "Dest="))) { str += 5; if(sscanf(str, "%s\n", nameanchor)) cur_ptr->nameanchor = estrdup(nameanchor); } } if(!cur_ptr->destdocname) { cur_ptr->link = NULL; if(NULL != (str = strstr(object, "Hint=URL:"))) { str += 9; if(sscanf(str, "%s\n", link)) cur_ptr->link = estrdup(link); } else if(NULL != (str = strstr(object, "Hint="))) { str += 5; if(sscanf(str, "%s\n", link)) cur_ptr->link = estrdup(link); } } cur_ptr->fragment = NULL; if(NULL != (str = strstr(object, "Fragment="))) { str += 9; if(sscanf(str, "%s\n", link)) cur_ptr->fragment = estrdup(link); } { char *htmlattr, *str2; int offset; str1 = object; htmlattr = emalloc(strlen(object)); /* alloc mem big enough for htmlattr */ htmlattr[0] = '\0'; offset = 0; while(NULL != (str = strstr(str1, "HtmlAttr="))) { str += 9; str1 = str; while((*str1 != '\n') && (*str1 != '\0')) str1++; /* Find the '=' in the HTML attr and make sure it is part of the attr and not somewhere in the objrec. */ if((NULL != (str2 = strchr(str, '='))) && (str2 < str1)) { str2++; strncpy(&htmlattr[offset], str, str2 - str); offset = offset + (str2 - str); htmlattr[offset++] = '"'; strncpy(&htmlattr[offset], str2, str1 - str2); offset = offset + (str1 - str2); htmlattr[offset++] = '"'; htmlattr[offset++] = ' '; htmlattr[offset] = '\0'; } } if(offset){ /* remove last space */ htmlattr[offset-1] = '\0'; cur_ptr->htmlattr = estrdup(htmlattr); } efree(htmlattr); } if(NULL != (str = strstr(object, "LinkType="))) { str += 9; if(strncmp(str, "background", 10) == 0) cur_ptr->linktype=HW_BACKGROUND_LINK; else if(strncmp(str, "intagnodel", 10) == 0) { /* New type introduced by Uwe Steinmann 16.03.2025 */ cur_ptr->linktype=HW_INTAGNODEL_LINK; cur_ptr->tagattr = NULL; if(NULL != (str = strstr(object, "TagAttr="))) { str += 8; str1 = str; while((*str1 != '\n') && (*str1 != '\0')) str1++; cur_ptr->tagattr = emalloc(str1 - str + 1); memcpy(cur_ptr->tagattr, str, str1 - str); cur_ptr->tagattr[str1 - str] = '\0'; } } else if(strncmp(str, "intag", 5) == 0) { cur_ptr->linktype=HW_INTAG_LINK; cur_ptr->tagattr = NULL; if(NULL != (str = strstr(object, "TagAttr="))) { str += 8; str1 = str; while((*str1 != '\n') && (*str1 != '\0')) str1++; cur_ptr->tagattr = emalloc(str1 - str + 1); memcpy(cur_ptr->tagattr, str, str1 - str); cur_ptr->tagattr[str1 - str] = '\0'; } } else if(strncmp(str, "applet", 6) == 0) { cur_ptr->linktype=HW_APPLET_LINK; cur_ptr->codebase = NULL; if(NULL != (str = strstr(object, "CodeBase="))) { str += 9; str1 = str; while((*str1 != '\n') && (*str1 != '\0')) str1++; cur_ptr->codebase = emalloc(str1 - str + 1); memcpy(cur_ptr->codebase, str, str1 - str); cur_ptr->codebase[str1 - str] = '\0'; } cur_ptr->code = NULL; if(NULL != (str = strstr(object, "Code="))) { str += 5; str1 = str; while((*str1 != '\n') && (*str1 != '\0')) str1++; cur_ptr->code = emalloc(str1 - str + 1); memcpy(cur_ptr->code, str, str1 - str); cur_ptr->code[str1 - str] = '\0'; } } else cur_ptr->linktype=HW_DEFAULT_LINK; } else cur_ptr->linktype=HW_DEFAULT_LINK; } else { /* Destination Anchor */ char nameanchor[200]; cur_ptr->tanchor = 2; cur_ptr->link = NULL; /* Here is the only additional info for the name attribute */ cur_ptr->nameanchor = NULL; if(NULL != (str = strstr(object, "ObjectID="))) { str += 9; if(sscanf(str, "%s\n", nameanchor)) cur_ptr->nameanchor = estrdup(nameanchor); } cur_ptr->keyword = NULL; if(NULL != (str = strstr(object, "Keyword="))) { str += 8; if(sscanf(str, "%s\n", nameanchor)) cur_ptr->keyword = estrdup(nameanchor); } } } /* free memory even if it is an invisible anchor */ efree(anchors[i]); if(docofanchorrec[i]) efree(docofanchorrec[i]); if(reldestrec) if(reldestrec[i]) efree(reldestrec[i]); } } return pAnchorList; } /*********************************************************************** * Function fnInsAnchorsIntoText() * * * * Returns the text document with all anchors inserted form list * * Parameter: char *text: text without anchors * * DList *pAnchorList: list of anchors * * Return: Text with anchors * ***********************************************************************/ #define BUFFERLEN 200 #ifdef newlist char *fnInsAnchorsIntoText(char *text, zend_llist *pAnchorList, char **bodytag, char **urlprefix) { ANCHOR **ptr; #else char *fnInsAnchorsIntoText(char *text, DLIST *pAnchorList, char **bodytag, char **urlprefix) { #endif ANCHOR *cur_ptr; char bgstr[BUFFERLEN], istr[BUFFERLEN]; char **scriptname; char *newtext; int offset = 0; int laststart=0; char emptystring[BUFFERLEN]; int i; TSRMLS_FETCH(); emptystring[0] = '\0'; /* The following is very tricky and depends on how rewriting is setup on your webserver. If you skip the scriptname in the url you will have to map each hyperwave name to http://. This may not always be a good idea. The best solution is probably to provide a prefix for such a case which is an optional parameter to hw_gettext() or hw_pipedocument(). FIXME: Currently, the variable SCRIPT_NAME is empty thouht SCRIPT_URL is not. In our case this is OK, since as mentioned above it is better to have no SCRIPT_NAME than to have if rewriting is on. */ if(urlprefix) { scriptname = urlprefix; } else { zval **script_name; scriptname = emalloc(5*sizeof(char *)); if (zend_hash_find(&EG(symbol_table), "SCRIPT_NAME", sizeof("SCRIPT_NAME"), (void **) &script_name)==FAILURE) for(i=0; i<5; i++) scriptname[i] = &emptystring; else { convert_to_string_ex(script_name); for(i=0; i<5; i++) scriptname[i] = Z_STRVAL_PP(script_name); } #if 0 #if APACHE { int j; array_header *arr = table_elts(((request_rec *) SG(server_context))->subprocess_env); table_entry *elts = (table_entry *)arr->elts; for (j=0; j < arr->nelts; j++) { if((0 == strcmp(elts[j].key, "SCRIPT_NAME")) || (0 == strcmp(elts[j].key, "SCRIPT_URL"))) break; } scriptname = elts[j].val; } #else scriptname = getenv("SCRIPT_FILENAME"); #endif #endif } newtext = text; bgstr[0] = '\0'; #ifdef newlist zend_llist_sort(pAnchorList, fnCmpAnchors TSRMLS_CC); ptr = (ANCHOR **) zend_llist_get_last(pAnchorList); if(ptr) cur_ptr = *ptr; while(NULL != ptr) { #else dlst_mergesort(pAnchorList, fnCmpAnchors); cur_ptr = (ANCHOR *) dlst_last(pAnchorList); while(NULL != cur_ptr) { #endif istr[0] = '\0'; if(cur_ptr->tanchor == 1) { /* Src Anchor */ if(laststart >= cur_ptr->end) offset = 0; if((cur_ptr->link != NULL) && (cur_ptr->link[0] != '\0')) { /* The link is only set if the Link points to an external document */ switch(cur_ptr->linktype) { case HW_BACKGROUND_LINK: snprintf(istr, BUFFERLEN, " background='%s'", cur_ptr->link); break; case HW_INTAG_LINK: snprintf(istr, BUFFERLEN, " %s='%s'", cur_ptr->tagattr, cur_ptr->link); offset -= 4; /* because there is no closing tag */ /* laststart = cur_ptr->start; */ break; case HW_INTAGNODEL_LINK: snprintf(istr, BUFFERLEN, "%s", cur_ptr->link); offset -= 4; /* because there is no closing tag */ /* laststart = cur_ptr->start; */ break; case HW_APPLET_LINK: if(cur_ptr->codebase) snprintf(istr, BUFFERLEN, " CODEBASE='%s' CODE='%s'", cur_ptr->codebase, cur_ptr->code); else snprintf(istr, BUFFERLEN, " CODEBASE='/' CODE='%s'", cur_ptr->code); break; default: newtext = fnInsStr(newtext, cur_ptr->end+offset, ""); if(cur_ptr->fragment) snprintf(istr, BUFFERLEN, "link, cur_ptr->fragment); else snprintf(istr, BUFFERLEN, "link); if(cur_ptr->htmlattr) { strncat(istr, " ", BUFFERLEN - 1 - strlen(istr)); strncat(istr, cur_ptr->htmlattr, BUFFERLEN - 1 - strlen(istr)); } strncat(istr, ">", BUFFERLEN - 1 - strlen(istr)); } } else { switch(cur_ptr->linktype) { case HW_BACKGROUND_LINK: if(NULL != cur_ptr->destdocname) { snprintf(istr, BUFFERLEN, " background='%s/%s'", scriptname[HW_BACKGROUND_LINK], cur_ptr->destdocname); } else istr[0] = '\0'; break; case HW_INTAG_LINK: if(cur_ptr->fragment) snprintf(istr, BUFFERLEN, " %s='#%s'", cur_ptr->tagattr, cur_ptr->fragment); else snprintf(istr, BUFFERLEN, " %s='%s/%s'", cur_ptr->tagattr, scriptname[HW_INTAG_LINK], cur_ptr->destdocname); offset -= 4; /* because there is no closing tag */ break; case HW_INTAGNODEL_LINK: snprintf(istr, BUFFERLEN, "%s", cur_ptr->destdocname); offset -= 4; /* because there is no closing tag */ break; case HW_APPLET_LINK: if(cur_ptr->codebase) /* snprintf(istr, BUFFERLEN, " CODEBASE='%s%s' CODE='%s'", scriptname == NULL ? "" : scriptname, cur_ptr->codebase, cur_ptr->code); */ snprintf(istr, BUFFERLEN, " CODEBASE='%s%s' CODE='%s'", scriptname[HW_APPLET_LINK], cur_ptr->codebase, cur_ptr->code); else snprintf(istr, BUFFERLEN, " CODEBASE='/' CODE='%s'", cur_ptr->code); break; default: newtext = fnInsStr(newtext, cur_ptr->end+offset, ""); if(cur_ptr->nameanchor) snprintf(istr, BUFFERLEN, "destdocname, cur_ptr->nameanchor); else if(cur_ptr->fragment) snprintf(istr, BUFFERLEN, "destdocname, cur_ptr->fragment); else snprintf(istr, BUFFERLEN, "destdocname); if(cur_ptr->htmlattr) { strncat(istr, " ", BUFFERLEN - 1 - strlen(istr)); strncat(istr, cur_ptr->htmlattr, BUFFERLEN - 1 - strlen(istr)); } strncat(istr, ">", BUFFERLEN - 1 - strlen(istr)); } } } else { if(laststart >= cur_ptr->end) offset = 0; newtext = fnInsStr(newtext, cur_ptr->end+offset, ""); /* If we have a keyword, we assume we had a fragment which has been used instead of the destdocname */ if(cur_ptr->keyword) snprintf(istr, BUFFERLEN, "", cur_ptr->keyword); else if(cur_ptr->nameanchor) snprintf(istr, BUFFERLEN, "", cur_ptr->nameanchor); } newtext = fnInsStr(newtext, cur_ptr->start, istr); /* In case there are several TAGS nested, we accumulate the offset You wonder what the 4 means? It's the length of */ offset += strlen(istr) + 4; laststart = cur_ptr->start; #ifdef newlist ptr = (ANCHOR **) zend_llist_get_prev(pAnchorList); if(ptr) cur_ptr = *ptr; #else cur_ptr = (ANCHOR *) dlst_prev(cur_ptr); #endif } snprintf(istr, BUFFERLEN, "", bgstr); *bodytag = estrdup(istr); /* if(scriptname != urlprefix) efree(scriptname); */ if(scriptname != NULL) efree(scriptname); return(newtext); } #undef BUFFERLEN /*********************************************************************** * Function fnAttributeValue() * * * * Returns the value of an attribute * * Parameter: char *object: object record * * char *attrname: attribute name * * Return: char*: attribute value, NULL if name not found * ***********************************************************************/ char *fnAttributeValue(char *object, char *attrname) { char *str, *str1, *attrvalue; int len; str = strstr(object, attrname); if(NULL == str) return(NULL); str += strlen(attrname); str++; str1 = str; while((*str1 != '\0') && (*str1 != '\n')) str1++; len = str1 - str; if(NULL == (attrvalue = emalloc(len+1))) { lowerror = LE_MALLOC; return NULL; } memcpy(attrvalue, str, len); attrvalue[len] = '\0'; return(attrvalue); } /*********************************************************************** * Function fnAttributeCompare() * * * * Checks if an attribute in an objrec has a certain value * * Parameter: char *object: object record * * char *attrname: attribute name * * char *value: value of attribute * * Return: char*: as strcmp * ***********************************************************************/ int fnAttributeCompare(char *object, char *attrname, char *value) { char *str, *str1; int len; if((NULL == object) || (NULL == attrname) || (NULL == value)) return -2; /* Find the attribute Name and make sure it is followed by a '=' sign and preceded by a '\n'; */ str = strstr(object, attrname); if((NULL == str) || (str[strlen(attrname)] != '=') || (str[-1] != '\n')) { return(-2); } str += strlen(attrname); /* skip the attribute name */ str++; /* skip the equal sign */ /* Search for end of attribute value */ str1 = str; while((*str1 != '\0') && (*str1 != '\n')) str1++; len = str1 - str; return(strncmp(str, value, len)); } /********************************************************************* * Function fnCOpenDataCon() * * * * Opens data connection on client side. This function is called * * right after the client has requested any data from the server * * Parameter: int sockfd: socket of control connection * * int *port: port of control und data connection * * Return : sockfd on success, <0 if error * *********************************************************************/ static int fnCOpenDataCon(int sockfd, int *port) { int fd; struct sockaddr_in serv_addr; int len; int option = 1; /* len = sizeof(com_addr); if(getsockname(sockfd, (struct sockaddr *) &com_addr, &len) < 0) { return(-1); } *port = htons(com_addr.sin_port); */ /* ** Open a TCP socket (an Internet stream socket) */ if((fd = socket(AF_INET, SOCK_STREAM, 0)) == SOCK_ERR) { return(-1); } /* ** Make sure that address may be reused */ #if defined(SUN) || defined(PHP_WIN32) setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&option, sizeof(option)); #else setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); #endif /* ** Open connection aktiv ** Let bind() select a port number */ bzero((char *) &serv_addr, sizeof(serv_addr)); if(bind(fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { return(-1); } /* ** Get the port number bind selected */ len = sizeof (serv_addr); if(getsockname(fd, (struct sockaddr *)&serv_addr, &len) < 0) { return(-1); } *port = ntohs(serv_addr.sin_port); listen(fd, 5); return(fd); } /*====================================================================== * * Read/write routines with timeout detection. * * Usage: write_to(fd, buffer, n, timeout) * read_to(fd, buffer, n, timeout) * * David Chavez * Engineering Services & Software * 7841 New Salem Street * San Diego, CA 92126 * USA * * dec@essw.com * *====================================================================*/ #ifdef PHP_WIN32 #include #else #include #include #include #endif #include #include #ifndef PHP_WIN32 static sigset_t newmask, oldmask, zeromask; #endif static int set_noblock(int fd) { #ifdef PHP_WIN32 u_long argp=1; return ioctlsocket (fd, FIONBIO , &argp); #else sigemptyset(&zeromask); sigemptyset(&newmask); sigaddset(&newmask, SIGHUP); sigaddset(&newmask, SIGUSR1); sigaddset(&newmask, SIGUSR2); if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0) return -1; return fcntl(fd, F_SETFL, O_NONBLOCK | O_NDELAY /* | FNBIO*/); #endif } int write_to(int fd, void *buffer, int n, int timeout) { int nrem, nw=0; char *bptr; int error=0; #if defined(SYSV) || defined(PHP_WIN32) int width = 20; #else int width = getdtablesize(); #endif fd_set writefds; struct timeval select_timeout; select_timeout.tv_sec = timeout; #ifdef PHP_WIN32 select_timeout.tv_usec = 0; #else /* is this just a typo? */ select_timeout.tv_usec = 0.; #endif /* Set fd to non-blocking */ if (set_noblock(fd) != 0) return -1; /* Write to fd until no more can be written */ FD_ZERO(&writefds); FD_SET((unsigned int)fd, &writefds); for( nrem = n, bptr = buffer; nrem;) { if(( error = select(width, (fd_set *) 0, &writefds, (fd_set *) 0, &select_timeout)) <= 0 && errno != EINTR) break; if(errno != EINTR && ( nw = write(fd, bptr, nrem)) <= 0) { /* * check for error number - and keep trying to * write */ if(errno == EWOULDBLOCK || errno == EAGAIN || errno == EINTR) { continue; } else { error = nw; break; } } else { nrem -= nw; bptr += nw; } } #ifndef PHP_WIN32 if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) return -1; #endif if( ! error ) { errno = ETIMEDOUT; return(-2); } else if (error < 0) { return(error); } else { return(n); } } int read_to(int fd, char *buffer, int n, int timeout) { int nrem, nread, nr=0; char *bptr; int error=0; #if defined(SYSV) || defined(PHP_WIN32) int width = 20; #else int width = getdtablesize(); #endif fd_set readfds; struct timeval select_timeout; select_timeout.tv_sec = timeout; #ifdef PHP_WIN32 select_timeout.tv_usec = 0; #else select_timeout.tv_usec = 0.; #endif /* Set fd to non-blocking */ if (set_noblock(fd) != 0) return -1; FD_ZERO(&readfds); FD_SET((unsigned int)fd, &readfds); for( nrem = n, bptr = buffer, nread = 0; nrem;) { if(( error = select(width, &readfds, (fd_set *) 0, (fd_set *) 0, &select_timeout)) <= 0 && errno != EINTR) break; if(errno != EINTR && (nr = read (fd, bptr, nrem)) < 0) { /* * check for error number - and keep trying to * read */ if(errno == EWOULDBLOCK || errno == EAGAIN || errno == EINTR) { continue; } else { error = nr; break; } } else if(nr == 0) { break; } else { nread += nr; bptr += nr; nrem -= nr; } } #ifndef PHP_WIN32 if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) return -1; #endif if( ! error ) { errno = ETIMEDOUT; return(-2); } else if ( error < 0) { return(-1); } else { return(nread); } } void set_swap(int do_swap) { swap_on = do_swap; } /*********************************************************************** * Function open_hg_connection() * * * ***********************************************************************/ int open_hg_connection(char *server_name, int port) { int sockfd; int option = 1; struct sockaddr_in server_addr; struct hostent *hp; if ( NULL == server_name ) return(-1); if ( (hp = gethostbyname(server_name)) == NULL ) { return(-2); } bzero((char *)&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; if ( port != 0 ) server_addr.sin_port = htons(port); else server_addr.sin_port = htons(HG_SERVER_PORT); /* bcopy(hp->h_addr, (char *) &server_addr.sin_addr, hp->h_length); */ server_addr.sin_addr = *(struct in_addr *) hp->h_addr; if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) == SOCK_ERR ) { return(-3); } #if defined(SUN) || defined(PHP_WIN32) setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&option, sizeof(option)); #else setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); #endif /* SUN */ if (connect(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) { HWSOCK_FCLOSE(sockfd); return(-4); } #ifndef PHP_WIN32 if ( (sock_flags = fcntl(sockfd, F_GETFL, 0)) == -1 ) #endif if ( set_nonblocking(sockfd) == -1 ) { HWSOCK_FCLOSE(sockfd); return(-5); } return(sockfd); } /*********************************************************************** * Function initialize_hg_connection() * * * ***********************************************************************/ int initialize_hg_connection(int sockfd, int *do_swap, int *version, char **userdata, char **server_string, char *username, char *password) { char buf, c; char *tmp; hg_msg *ready_msg, *retmsg, msg; int i = 0x01; int length; *do_swap = 0; buf = 'T'; if ( hg_write(sockfd, &buf, 1) == -1 ) { return(-2); } if ( hg_read_exact(sockfd, &buf, 1) == -1 ) { return(-3); } if ( buf == 'F' ) { return(-4); } if ( buf != 'T' ) { return(-5); } buf = c = ( *(char *)&i ) ? 'l' : 'B'; if ( hg_write(sockfd, &buf, 1) == -1 ) { return(-6); } if ( hg_read_exact(sockfd, &buf, 1) == -1 ) { return(-7); } if ( c != buf ) { swap_on = 1; *do_swap = 1; } else { swap_on = 0; *do_swap = 0; } if ( send_ready(sockfd) == -1) { return(-8); } /* Receive return from Ready message */ if ( (ready_msg = recv_ready(sockfd)) == NULL ) { return(-9); } if ((ready_msg->version_msgid & F_VERSION) < HW_VERSION) return(-8); *version = ready_msg->version_msgid; *server_string = strdup(ready_msg->buf+4); efree(ready_msg->buf); efree(ready_msg); /* If we have a username and password then do the identification. */ if((NULL != username) && (NULL != password)) { length = HEADER_LENGTH + sizeof(int) + strlen(username) + 1 + strlen(password) + 1; build_msg_header(&msg, length, msgid++, IDENTIFY_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, 0); tmp = build_msg_str(tmp, username); tmp = build_msg_str(tmp, password); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-10); } efree(msg.buf); } if((NULL != username) && (NULL != password)) { /* Receive return form identify message */ retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-11); *userdata = retmsg->buf; efree(retmsg); } return(0); } static int set_nonblocking(int fd) { #ifdef PHP_WIN32 unsigned int argp=0; /* if ( sock_flags == -1 ) getsockopt (fd, SOL_SOCKET, optname, optval, optlen); */ if(ioctlsocket (fd, FIONBIO , &argp) == -1) return(-1); #else if ( sock_flags == -1 ) sock_flags = fcntl(fd, F_GETFL, 0); if ( fcntl(fd, F_SETFL, O_NONBLOCK) == -1 ) return(-1); #endif non_blocking = 1; return(0); } /* static int set_blocking(int fd) { #ifdef PHP_WIN32 unsigned int argp=1; if(ioctlsocket (fd, FIONBIO , &argp) == -1) return(-1); #else if ( fcntl(fd, F_SETFL, sock_flags) == -1 ) return(-1); #endif return(0); } */ static int hg_read_exact(int sockfd, char *buf, int size) { int len = 0; len = read_to(sockfd, (void *) buf, size, rtimeout); if ( len < 0 ) return -1; return(len); } /* static int hg_read(int sockfd, char *buf, int size) { int try = 0; int len = 0; if ( !non_blocking ) set_nonblocking(sockfd); while ( len == 0 ) { len = recv(sockfd, (void *) buf, size, 0); if ( len == -1 ) { if ( (errno == EAGAIN) || (errno == EWOULDBLOCK) ) { if ( ++try > 5 ) return(-1); php_sleep(1); } else return(-1); } } return(len); } */ static int hg_write(int sockfd, char *buf, int size) { int try = 0; int len = 0; if ( !non_blocking ) set_nonblocking(sockfd); while ( size > 0 ) { len = send(sockfd, (void *) buf, size, 0); if ( len == -1 ) { if ( (errno == EAGAIN) || (errno == EWOULDBLOCK) ) { if ( ++try > 5 ) return(-1); php_sleep(1); } else return(-1); } else { size -= len; buf += len; try = 0; } } return(0); } hg_msg *recv_hg_msg_head(int sockfd) { hg_msg *msg; if ( (msg = (hg_msg *)emalloc(sizeof(hg_msg))) == NULL ) { lowerror = LE_MALLOC; return(NULL); } if ( hg_read_exact(sockfd, (char *)&(msg->length), 4) == -1 ) { efree(msg); return(NULL); } if ( hg_read_exact(sockfd, (char *)&(msg->version_msgid), 4) == -1 ) { efree(msg); return(NULL); } if ( hg_read_exact(sockfd, (char *)&(msg->msg_type), 4) == -1 ) { efree(msg); return(NULL); } #ifdef HW_DEBUG php_printf(" Recv msg: type = %d -- id = %d
\n", msg->msg_type, msg->version_msgid); #endif return(msg); } hg_msg *recv_hg_msg(int sockfd) { hg_msg *msg; if ( (msg = (hg_msg *)emalloc(sizeof(hg_msg))) == NULL ) { /* php_printf("recv_hg_msg"); */ lowerror = LE_MALLOC; return(NULL); } if ( hg_read_exact(sockfd, (char *)&(msg->length), 4) == -1 ) { /* php_printf("recv_hg_msg: hg_read (1) returned -1\n"); */ efree(msg); return(NULL); } if ( hg_read_exact(sockfd, (char *)&(msg->version_msgid), 4) == -1 ) { /* php_printf("recv_hg_msg: hg_read (2) returned -1\n"); */ efree(msg); return(NULL); } if ( hg_read_exact(sockfd, (char *)&(msg->msg_type), 4) == -1 ) { /* php_printf("recv_hg_msg: hg_read (3) returned -1\n"); */ efree(msg); return(NULL); } if ( msg->length > HEADER_LENGTH ) { if ( (msg->buf = (char *) emalloc(msg->length-HEADER_LENGTH)) == NULL ) { /* php_printf("recv_hg_msg"); */ lowerror = LE_MALLOC; efree(msg); return(NULL); } if ( hg_read_exact(sockfd, msg->buf, msg->length-HEADER_LENGTH) == -1 ) { /* php_printf("recv_hg_msg: hg_read (4) returned -1\n"); */ efree(msg->buf); efree(msg); return(NULL); } } else msg->buf = NULL; #ifdef HW_DEBUG php_printf(" Recv msg: type = %d -- id = %d
\n", msg->msg_type, msg->version_msgid); #endif return(msg); } hg_msg *recv_ready(int sockfd) { hg_msg *ready_msg; if ( (ready_msg = recv_hg_msg(sockfd)) == NULL ) { /* php_printf("recv_ready: recv_hg_msg returned NULL\n"); */ return(NULL); } if ( ready_msg->msg_type != READY_MESSAGE ) { /* php_printf("recv_ready: recv_hg_msg returned wrong message: %d, %d \n", ready_msg->length, ready_msg->msg_type); */ efree(ready_msg); return(NULL); } return(ready_msg); } hg_msg *recv_command(int sockfd) { hg_msg *comm_msg; if ( (comm_msg = recv_hg_msg(sockfd)) == NULL ) { /* fprintf(stderr, "recv_command: recv_hg_msg returned NULL\n"); */ return(NULL); } if ( comm_msg->msg_type != COMMAND_MESSAGE ) { /* fprintf(stderr, "recv_command: recv_hg_msg returned wrong message\n"); */ return(NULL); } return(comm_msg); } int send_dummy(int sockfd, hw_objectID objectID, int msgid, char **attributes) { hg_msg msg, *retmsg; int length, error; char *tmp; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, msgid); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { *attributes = NULL; return(-1); } if(0 == (int) *(retmsg->buf)) { *attributes = estrdup(retmsg->buf+sizeof(int)); efree(retmsg->buf); efree(retmsg); } else { error = *((int *) retmsg->buf); *attributes = NULL; efree(retmsg->buf); efree(retmsg); return error; } return(0); } static int bh_send_deleteobject(int sockfd, hw_objectID objectID) { hg_msg msg; int length; char *tmp; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, DELETEOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); return(msgid-1); } static int uh_send_deleteobject(int sockfd) { hg_msg *retmsg; int error; retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-1); } if(NULL == retmsg->buf) { efree(retmsg); return -1; } error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return(error); } int send_deleteobject(int sockfd, hw_objectID objectID) { if(0 > bh_send_deleteobject(sockfd, objectID)) return -1; return(uh_send_deleteobject(sockfd)); } static int bh_send_changeobject(int sockfd, hw_objectID objectID, char *mod) { hg_msg msg; int length; char *tmp; length = HEADER_LENGTH + sizeof(hw_objectID) + strlen(mod) + 1; build_msg_header(&msg, length, msgid++, CHANGEOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); tmp = build_msg_str(tmp, mod); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); return(msgid-1); } static int uh_send_changeobject(int sockfd) { hg_msg *retmsg; int error; retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-1); } error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return(error); } int send_changeobject(int sockfd, hw_objectID objectID, char *modification) { if(0 > bh_send_changeobject(sockfd, objectID, modification)) return -1; return(uh_send_changeobject(sockfd)); } int send_groupchangeobject(int sockfd, hw_objectID objectID, char *modification) { hw_objectID *childIDs; int count, i, error; if(0 == (error = send_lock(sockfd, objectID))) { send_changeobject(sockfd, objectID, modification); send_unlock(sockfd, objectID); }/* else fprintf(stderr, "Could not lock 0x%X (error = %d)\n", objectID, error); */ if(0 == send_children(sockfd, objectID, &childIDs, &count)) { /* fprintf(stderr, "Changing Children of 0x%X\n", objectID); */ for(i=0; i send_groupchangeobject(sockfd, childIDs[i], modification)) /* fprintf(stderr, "Cannot change 0x%X\n", objectID) */; if(childIDs) efree(childIDs); }/* else fprintf(stderr, "No Children of 0x%X\n", objectID); */ return(0); } static int bh_send_getobject(int sockfd, hw_objectID objectID) { hg_msg msg; int length; char *tmp; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); return(msgid-1); } static int uh_send_getobject(int sockfd, char **attributes) { hg_msg *retmsg; int error; retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { *attributes = NULL; return(-1); } if(0 == (int) *(retmsg->buf)) { *attributes = estrdup(retmsg->buf+sizeof(int)); efree(retmsg->buf); efree(retmsg); } else { error = *((int *) retmsg->buf); *attributes = NULL; efree(retmsg->buf); efree(retmsg); return error; } return(0); } int send_getobject(int sockfd, hw_objectID objectID, char **attributes) { if(0 > bh_send_getobject(sockfd, objectID)) return -1; return(uh_send_getobject(sockfd, attributes)); } int send_getandlock(int sockfd, hw_objectID objectID, char **attributes) { hg_msg msg, *retmsg; int length, error; char *tmp; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETANDLOCK_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { *attributes = NULL; return(-1); } if(0 == (error = (int) *(retmsg->buf))) { *attributes = estrdup(retmsg->buf+sizeof(int)); } else { *attributes = NULL; } efree(retmsg->buf); efree(retmsg); return error; } int send_lock(int sockfd, hw_objectID objectID) { hg_msg msg, *retmsg; int length, error; char *tmp; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETANDLOCK_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-1); } error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } int send_insertobject(int sockfd, char *objrec, char *parms, hw_objectID *objectID) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr; length = HEADER_LENGTH + strlen(objrec) + 1 + strlen(parms) + 1; build_msg_header(&msg, length, msgid++, INSERTOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, objrec); tmp = build_msg_str(tmp, parms); /*fprintf(stderr, "objrec = %s, parms = %s\n", objrec, parms); */ if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { *objectID = 0; return(-1); } ptr = (int *) retmsg->buf; if(0 == (error = *ptr)) { ptr++; *objectID = *ptr; } else { *objectID = 0; } efree(retmsg->buf); efree(retmsg); return error; } int send_unlock(int sockfd, hw_objectID objectID) { hg_msg msg; int length; char *tmp; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, UNLOCK_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); return 0; } int send_incollections(int sockfd, int retcol, int cobjids, hw_objectID *objectIDs, int ccollids, hw_objectID *collIDs, int *count, hw_objectID **retIDs) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr, *ptr1, i; length = HEADER_LENGTH + sizeof(hw_objectID) + (cobjids + ccollids) * sizeof(hw_objectID) + 2 * sizeof(int); build_msg_header(&msg, length, msgid++, INCOLLECTIONS_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-3); } tmp = build_msg_int(msg.buf, retcol); tmp = build_msg_int(tmp, cobjids); for(i=0; ibuf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr; ptr++; if(NULL != (*retIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *retIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); if(retmsg->buf) efree(retmsg->buf); if(retmsg) efree(retmsg); return error; } return(0); } int send_inscoll(int sockfd, hw_objectID objectID, char *objrec, hw_objectID *new_objectID) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr; length = HEADER_LENGTH + sizeof(hw_objectID) + strlen(objrec) + 1; build_msg_header(&msg, length, msgid++, INSCOLL_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-3); } tmp = build_msg_int(msg.buf, objectID); tmp = build_msg_str(tmp, objrec); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-2); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if(retmsg == NULL) { return(-1); } ptr = (int *) retmsg->buf; if(0 != (error = *ptr)) { efree(retmsg->buf); efree(retmsg); *new_objectID = 0; return error; } ptr++; *new_objectID = *ptr; efree(retmsg->buf); efree(retmsg); return 0; } int send_insdoc(int sockfd, hw_objectID objectID, char *objrec, char *text, hw_objectID *new_objectID) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr; length = HEADER_LENGTH + sizeof(hw_objectID) + strlen(objrec) + 1; if(text) { length += strlen(text); length++; } build_msg_header(&msg, length, msgid++, INSDOC_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-3); } tmp = build_msg_int(msg.buf, objectID); tmp = build_msg_str(tmp, objrec); if(text) tmp = build_msg_str(tmp, text); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-2); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if(retmsg == NULL) { return(-1); } ptr = (int *) retmsg->buf; if(0 != (error = *ptr)) { efree(retmsg->buf); efree(retmsg); *new_objectID = 0; return error; } ptr++; *new_objectID = *ptr; efree(retmsg->buf); efree(retmsg); return 0; } int send_getdestforanchorsobj(int sockfd, char **anchorrec, char ***destrec, int count); int send_getreldestforanchorsobj(int sockfd, char **anchorrec, char ***reldestrec, int count, int rootID, int thisID); int send_gettext(int sockfd, hw_objectID objectID, int mode, int rootid, char **objattr, char **bodytag, char **text, int *count, char *urlprefix) { hg_msg msg, *retmsg; int length, *ptr, ancount, error; char *tmp, *attributes, *documenttype; char **anchors; int i; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if(retmsg == NULL) { attributes = NULL; return(-1); } ptr = (int *) retmsg->buf; if(*ptr == 0) { attributes = estrdup(retmsg->buf+sizeof(int)); efree(retmsg->buf); efree(retmsg); } else { error = *ptr; attributes = NULL; efree(retmsg->buf); efree(retmsg); return error; } length = HEADER_LENGTH + strlen(attributes) + 1; build_msg_header(&msg, length, msgid++, GETTEXT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, attributes); documenttype = fnAttributeValue(attributes, "DocumentType"); *objattr = strdup(attributes); efree(attributes); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if (retmsg == NULL) { *text = NULL; return(-1); } ptr = (int *) retmsg->buf; if(*ptr == 0) { ptr++; *count = retmsg->length-HEADER_LENGTH-sizeof(int); if(NULL != (*text = malloc(*count + 1))) { memcpy(*text, retmsg->buf+sizeof(int), *count); /* *text[*count] = 0; */ } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *ptr; efree(retmsg->buf); efree(retmsg); *text = NULL; return(error); } efree(retmsg->buf); efree(retmsg); if((documenttype != NULL) && (strcmp(documenttype, "Image") != 0)) { if(send_getanchorsobj(sockfd, objectID, &anchors, &ancount) == 0) { char **destrec, **reldestrec; #ifdef newlist zend_llist *pAnchorList; #else DLIST *pAnchorList; #endif /* Get dest as relative and absolut path */ send_getdestforanchorsobj(sockfd, anchors, &destrec, ancount); send_getreldestforanchorsobj(sockfd, anchors, &reldestrec, ancount, rootid, objectID); pAnchorList = fnCreateAnchorList(objectID, anchors, destrec, reldestrec, ancount, mode); /* Free only the array, the objrecs has been freed in fnCreateAnchorList() */ if(anchors) efree(anchors); if(destrec) efree(destrec); if(reldestrec) efree(reldestrec); if(pAnchorList != NULL) { char *newtext; char *body = NULL; char **prefixarray; prefixarray = emalloc(5*sizeof(char *)); for(i=0; i<5; i++) prefixarray[i] = urlprefix; newtext = fnInsAnchorsIntoText(*text, pAnchorList, &body, prefixarray); efree(prefixarray); #ifdef newlist zend_llist_destroy(pAnchorList); efree(pAnchorList); #else dlst_kill(pAnchorList, fnDeleteAnchor); #endif *bodytag = strdup(body); if(body) efree(body); *text = newtext; *count = strlen(newtext); } } } if(documenttype) efree(documenttype); return(0); } int send_insertanchors(char **text, int *count, char **anchors, char **destrec, int ancount, char **urlprefix, char **bodytag) { char **reldestrec = NULL; int mode = 0; hw_objectID objectID = 0; #ifdef newlist zend_llist *pAnchorList = NULL; #else DLIST *pAnchorList = NULL; #endif pAnchorList = fnCreateAnchorList(objectID, anchors, destrec, reldestrec, ancount, mode); /* Free only the array, the objrecs has been freed in fnCreateAnchorList() */ if(anchors) efree(anchors); if(destrec) efree(destrec); if(reldestrec) efree(reldestrec); if(pAnchorList != NULL) { char *newtext; char *body = NULL; newtext = fnInsAnchorsIntoText(*text, pAnchorList, &body, urlprefix); #ifdef newlist zend_llist_destroy(pAnchorList); efree(pAnchorList); #else dlst_kill(pAnchorList, fnDeleteAnchor); #endif *bodytag = strdup(body); if(body) efree(body); *text = newtext; *count = strlen(newtext); } return 0; } int send_edittext(int sockfd, char *objattr, char *text) { hg_msg msg, *retmsg; int length, *ptr, error; char *tmp, *path, *objid; hw_objectID objectID; objid = fnAttributeValue(objattr, "ObjectID"); if(objid == NULL) return(-1); if(!sscanf(objid, "0x%x", &objectID)) return(-2); path = fnAttributeValue(objattr, "Path"); if(path == NULL) return(-3); length = HEADER_LENGTH + sizeof(hw_objectID) + strlen(path) + 1 + 1 + strlen(text) + 1; build_msg_header(&msg, length, msgid++, EDITTEXT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-4); } tmp = build_msg_int(msg.buf, objectID); tmp = build_msg_str(tmp, path); tmp = build_msg_str(tmp, ""); tmp = build_msg_str(tmp, text); if(path) efree(path); if(objid) efree(objid); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-5); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if (retmsg == NULL) { *text = '\0'; return(-6); } ptr = (int *) retmsg->buf; error = *ptr; efree(retmsg->buf); efree(retmsg); return(error); } int send_getcgi(int sockfd, hw_objectID objectID, char *cgi_env_str, char **objattr, char **text, int *count) { hg_msg msg, *retmsg; int length, *ptr, error, new_attr_len; char *tmp, *attributes, *new_attr; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if(retmsg == NULL) { attributes = NULL; return(-1); } ptr = (int *) retmsg->buf; if(*ptr == 0) { attributes = estrdup(retmsg->buf+sizeof(int)); efree(retmsg->buf); efree(retmsg); } else { error = *ptr; attributes = NULL; efree(retmsg->buf); efree(retmsg); return error; } new_attr_len = strlen(attributes) + strlen(cgi_env_str) + 2; new_attr = malloc(new_attr_len); strcpy(new_attr, attributes); strcat(new_attr, cgi_env_str); length = HEADER_LENGTH + strlen(new_attr) + 1 + sizeof(int); build_msg_header(&msg, length, msgid++, GETCGI_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, new_attr); tmp = build_msg_int(tmp, 0); *objattr = strdup(attributes); efree(attributes); free(new_attr); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if (retmsg == NULL) { *text = NULL; return(-1); } /* Attention: It looks like the documentation is not quite right. According to the docs the buffer starts with an integer which is followed by the output of the cgi script. This seems not to be true. There is another integer right after the error. The output of the cgi script is also preceded by the 'Content-type' header. */ ptr = (int *) retmsg->buf; if(*ptr++ == 1024) { *count = *ptr++; if(NULL != (*text = malloc(*count + 1))) { memcpy(*text, ptr, *count); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *ptr + 1024; /* move errors to >2024 */ efree(retmsg->buf); efree(retmsg); *text = NULL; return(error); } efree(retmsg->buf); efree(retmsg); return(0); } int send_getremote(int sockfd, hw_objectID objectID, char **objattr, char **text, int *count) { hg_msg msg, *retmsg; int length, *ptr, error; char *tmp, *attributes; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if(retmsg == NULL) { attributes = NULL; return(-1); } ptr = (int *) retmsg->buf; if(*ptr == 0) { attributes = estrdup(retmsg->buf+sizeof(int)); efree(retmsg->buf); efree(retmsg); } else { error = *ptr; attributes = NULL; efree(retmsg->buf); efree(retmsg); return error; } length = HEADER_LENGTH + strlen(attributes) + 1 + sizeof(int); build_msg_header(&msg, length, msgid++, GETREMOTE_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, attributes); tmp = build_msg_int(tmp, 0); *objattr = strdup(attributes); efree(attributes); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if (retmsg == NULL) { *text = NULL; return(-1); } ptr = (int *) retmsg->buf; if(*ptr == 1024) { *count = retmsg->length-HEADER_LENGTH-sizeof(int)-sizeof(int); if(NULL != (*text = malloc(*count + 1))) { memcpy(*text, ptr+2, *count); /* *text[*count] = 0; */ } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *ptr + 1024; /* move errors to >2024 */ efree(retmsg->buf); efree(retmsg); *text = NULL; return(error); } efree(retmsg->buf); efree(retmsg); return(0); } int send_getremotechildren(int sockfd, char *attributes, char **text, int **childIDs, int *count) { hg_msg msg, *retmsg; int length, *ptr, *ptr1, error; char *tmp; /* length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if(retmsg == NULL) { attributes = NULL; return(-1); } ptr = (int *) retmsg->buf; if(*ptr == 0) { attributes = estrdup(retmsg->buf+sizeof(int)); efree(retmsg->buf); efree(retmsg); } else { error = *ptr; attributes = NULL; efree(retmsg->buf); efree(retmsg); return error; } */ length = HEADER_LENGTH + strlen(attributes) + 1 + sizeof(int); build_msg_header(&msg, length, msgid++, GETREMOTECHILDREN_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, attributes); tmp = build_msg_int(tmp, 0); /* efree(attributes); */ if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if (retmsg == NULL) { *childIDs = NULL; return(-1); } ptr = (int *) retmsg->buf; if(*ptr++ == 1024) { int i, remlen, sum; *count = *ptr; ptr++; if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *childIDs; sum = 0; for(i=0; i<*count; ptr++, i++) { ptr1[i] = *ptr; sum += *ptr; } } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } remlen = retmsg->length - HEADER_LENGTH - *count * sizeof(int) - 2 * sizeof(int); /*ptr1[i-1] = remlen; */ /*ptr1[i-2] = sum; */ /*ptr1[i-3] = *count; */ if(NULL != (*text = emalloc(remlen + 1))) { memcpy(*text, ptr, remlen); } else { efree(childIDs); efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } efree(retmsg->buf); efree(retmsg); } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); *childIDs = NULL; *text = NULL; return error; } return(0); } int send_mvcpdocscollscoll(int sockfd, hw_objectID *objectIDs, int count, int from, int dest, int cpmv, int doccoll) { hg_msg msg, *retmsg; int length, i, error; char *tmp; if(count <= 0) return 0; /* HEADER_LENGTH + cpmv + from + dest + count + nr of obj */ length = HEADER_LENGTH + sizeof(hw_objectID) + sizeof(hw_objectID) + sizeof(hw_objectID) + sizeof(hw_objectID) + count * sizeof(hw_objectID); switch(doccoll) { case DOCUMENT: build_msg_header(&msg, length, msgid++, MVCPDOCSCOLL_MESSAGE); break; case COLLECTION: build_msg_header(&msg, length, msgid++, MVCPCOLLSCOLL_MESSAGE); break; } if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, cpmv); tmp = build_msg_int(tmp, from); tmp = build_msg_int(tmp, dest); tmp = build_msg_int(tmp, count); for(i=0; ibuf); efree(retmsg->buf); efree(retmsg); return(error); } int send_docbyanchor(int sockfd, hw_objectID objectID, hw_objectID *anchorID) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETDOCBYANCHOR_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-1); } ptr = (int *) retmsg->buf; error = *ptr++; if(error == 0) { *anchorID = *ptr; } else { *anchorID = 0; } efree(retmsg->buf); efree(retmsg); return error; } int send_docbyanchorobj(int sockfd, hw_objectID objectID, char **objrec) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr, anchorID; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETDOCBYANCHOR_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-1); } ptr = (int *) retmsg->buf; error = *ptr++; if(error == 0) { anchorID = *ptr; } else { anchorID = 0; } efree(retmsg->buf); efree(retmsg); if(0 > bh_send_getobject(sockfd, anchorID)) return -1; return(uh_send_getobject(sockfd, objrec)); } int send_children(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count) { hg_msg msg, *retmsg; int length, i, error; char *tmp; int *ptr, *ptr1; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, CHILDREN_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if (-1 == send_hg_msg(sockfd, &msg, length)) { efree(msg.buf); return(-2); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-3); } ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr++; if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *childIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } return(0); } int send_childrenobj(int sockfd, hw_objectID objectID, char ***childrec, int *count) { hg_msg msg, *retmsg; int length, i, error; char *tmp; int *childIDs = NULL; int *ptr; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, CHILDREN_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-1); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr++; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { for(i=0; i<*count; ptr++, i++) childIDs[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } /* Now get for each child collection the object record */ #ifdef hw_less_server_stress if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) { efree(childIDs); return -2; } efree(childIDs); #else for(i=0; i<*count; i++) { length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { efree(childIDs); lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, childIDs[i]); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(childIDs); efree(msg.buf); return(-1); } efree(msg.buf); } efree(childIDs); if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) { /* if emalloc fails, get at least all remaining messages from server */ for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); efree(retmsg->buf); efree(retmsg); } *childrec = NULL; lowerror = LE_MALLOC; return(-1); } else { *childrec = objptr; for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { if(0 == (int) *(retmsg->buf)) { *objptr = estrdup(retmsg->buf+sizeof(int)); objptr++; efree(retmsg->buf); efree(retmsg); } else { *objptr = NULL; objptr++; efree(retmsg->buf); efree(retmsg); } } } } #endif return(0); } int send_getchildcoll(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr, i, *ptr1; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETCHILDCOLL_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-1); } ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr++; if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *childIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } return(0); } int send_getchildcollobj(int sockfd, hw_objectID objectID, char ***childrec, int *count) { hg_msg msg, *retmsg; int length, i, error; char *tmp; int *childIDs = NULL; int *ptr; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETCHILDCOLL_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-1); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr++; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { for(i=0; i<*count; ptr++, i++) childIDs[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } /* Now get for each child collection the object record */ #ifdef hw_less_server_stress if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) { efree(childIDs); return -2; } efree(childIDs); #else for(i=0; i<*count; i++) { length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { efree(childIDs); lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, childIDs[i]); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(childIDs); efree(msg.buf); return(-1); } efree(msg.buf); } efree(childIDs); if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) { /* if emalloc fails, get at least all remaining messages from server */ for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); efree(retmsg->buf); efree(retmsg); } *childrec = NULL; lowerror = LE_MALLOC; return(-1); } else { *childrec = objptr; for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { if(0 == (int) *(retmsg->buf)) { *objptr = estrdup(retmsg->buf+sizeof(int)); objptr++; efree(retmsg->buf); efree(retmsg); } else { *objptr = NULL; objptr++; efree(retmsg->buf); efree(retmsg); } } } } #endif return(0); } int send_getchilddoccoll(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count) { hg_msg msg, *retmsg; int length, error; char *tmp; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETCHILDDOCCOLL_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } else { efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { int *ptr, i, *ptr1; ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr++; if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *childIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } } } return(0); } int send_getchilddoccollobj(int sockfd, hw_objectID objectID, hw_objrec ***childrec, int *count) { hg_msg msg, *retmsg; int length, error; char *tmp; int *childIDs = NULL; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETCHILDDOCCOLL_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { int *ptr, i; ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg->buf) efree(retmsg->buf); return -1; } if(*ptr++ == 0) { *count = *ptr++; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { for(i=0; i<*count; ptr++, i++) childIDs[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } } /* Now get for each child collection the object record */ #ifdef hw_less_server_stress if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) { efree(childIDs); return -2; } efree(childIDs); #else for(i=0; i<*count; i++) { length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, childIDs[i]); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); } if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) { /* if emalloc fails, get at least all remaining messages from server */ for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); efree(retmsg->buf); efree(retmsg); } *childrec = NULL; lowerror = LE_MALLOC; return(-1); } else { *childrec = objptr; for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { if(0 == (int) *(retmsg->buf)) { *objptr = estrdup(retmsg->buf+sizeof(int)); objptr++; efree(retmsg->buf); efree(retmsg); } else { *objptr = NULL; objptr++; efree(retmsg->buf); efree(retmsg); } } } } #endif return(0); } int send_getanchors(int sockfd, hw_objectID objectID, int **anchorIDs, int *count) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr, i, *ptr1; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETANCHORS_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); if (NULL == (retmsg = recv_hg_msg(sockfd))) return(-1); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr++; if(NULL != (*anchorIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *anchorIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } return(0); } int send_getanchorsobj(int sockfd, hw_objectID objectID, char ***childrec, int *count) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr, i, *ptr1; int *anchorIDs = NULL; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, 50, GETANCHORS_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); if (NULL == (retmsg = recv_hg_msg(sockfd))) return(-1); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr++; if(NULL != (anchorIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = anchorIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } /* Now get for each anchor the object record */ #ifdef hw_less_server_stress if(0 != send_objectbyidquery(sockfd, anchorIDs, count, NULL, childrec)) { efree(anchorIDs); return -2; } efree(anchorIDs); #else for(i=0; i<*count; i++) { length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, anchorIDs[i], GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, anchorIDs[i]); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); } if(anchorIDs) efree(anchorIDs); if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) { /* if emalloc fails, get at least all remaining messages from server */ for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); efree(retmsg->buf); efree(retmsg); } *childrec = NULL; lowerror = LE_MALLOC; return(-1); } else { *childrec = objptr; for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { if(0 == (int) *(retmsg->buf)) { *objptr = estrdup(retmsg->buf+sizeof(int)); objptr++; efree(retmsg->buf); efree(retmsg); } else { *objptr = NULL; objptr++; efree(retmsg->buf); efree(retmsg); } } } } #endif return(0); } int send_getdestforanchorsobj(int sockfd, char **anchorrec, char ***destrec, int count) { int i; char *objptr, **destptr; char *str; int objectID; if(NULL == (destptr = (char **) emalloc(count * sizeof(hw_objrec *)))) { lowerror = LE_MALLOC; return -1; } /* Now get for each anchor the object record of its destination */ for(i=0; i send_docbyanchorobj(sockfd, objectID, &objptr)) { efree(destptr); return -1; } destptr[i] = objptr; /* if we can't get the object rec of the dest, than this document is probably not accessible for us. For later functions simply set anchorrec[i] to NULL */ if(destptr[i] == NULL) { if(anchorrec[i]) efree(anchorrec[i]); anchorrec[i] = NULL; } } else { destptr[i] = NULL; } } *destrec = destptr; return(0); } int send_getreldestforanchorsobj(int sockfd, char **anchorrec, char ***reldestrec, int count, int rootID, int thisID) { int i; char *docofanchorptr, **reldestptr; char *str; int destobjectID; if(NULL == (reldestptr = (char **) emalloc(count * sizeof(char *)))) { lowerror = LE_MALLOC; return -1; } /* Now get for each anchor the object record of its destination */ for(i=0; i send_docbyanchorobj(sockfd, destobjectID, &docofanchorptr)) { efree(reldestptr); return -1; } reldestptr[i] = docofanchorptr; /* if we can't get the object rec of the dest, than this document is probably not accessible for us. For later functions simply set anchorrec[i] to NULL */ if(reldestptr[i] == NULL) { if(anchorrec[i]) efree(anchorrec[i]); anchorrec[i] = NULL; } else { int j, *retthisIDs, *retdestIDs, equaltill, mincount, countthis, countdest, destdocid; char destdocname[200]; char anchorstr[300]; char temp[200]; char *strptr; if(NULL != (str = strstr(docofanchorptr, "Name="))) { str += 5; sscanf(str, "%s\n", destdocname); } if(NULL != (str = strstr(docofanchorptr, "ObjectID="))) { str += 9; sscanf(str, "0x%X", &destdocid); } send_incollections(sockfd, 1, 1, &thisID, 1, &rootID, &countthis, &retthisIDs); send_incollections(sockfd, 1, 1, &destdocid, 1, &rootID, &countdest, &retdestIDs); /* fprintf(stderr, "%d: ", thisID); for(k=0; k= 0) && (pcount != 0) && (parentIDs != NULL) && (pid != 0)) { /*fprintf(stderr, "Get parents for %d\n", pid); */ if(0 != send_getparents(sockfd, pid, &parentIDs, &pcount)) { efree(pathIDs); return -1; } pid = 0; for(i=0; i 5 -> 4 -> 20 ** (this means: 20 is child of 4, 4 is child of 5, 5 is child ** of 1) it will return 1, 4, 5 instead of 1, 5, 4 ** Consequently, we have to create the correct path, by checking ** for the parents and identifying it in the list. ** But there is another problem. If the id for which the list of ** of collection is generated is a colletion itself, it will ** show up in the list as well. In order to make the algorithmn ** work proberly it has to be the last member of the list. */ for(i=0; ibuf; efree(retmsg); return(0); } int send_objectbyidquery(int sockfd, hw_objectID *IDs, int *count, char *query, char ***objrecs) { hg_msg msg, *retmsg; int length; char *tmp, *str; int *ptr, i; int *offsets, *childIDs; char **childrec; if(*count <= 0) { *objrecs = emalloc(0); return(0); } length = HEADER_LENGTH + sizeof(int) + sizeof(int) + *count * sizeof(hw_objectID); if(query) length = length + strlen(query) + 1; build_msg_header(&msg, length, msgid++, OBJECTBYIDQUERY_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, 1); tmp = build_msg_int(tmp, *count); for(i=0; i<*count; i++) tmp = build_msg_int(tmp, IDs[i]); if(query) tmp = build_msg_str(tmp, query); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); #ifdef hw_optimize { int hg_error; int c, allc; allc = 0; retmsg = recv_hg_msg_head(sockfd); if ( retmsg == NULL ) return(-1); /* read error field */ if ( (c = hg_read_exact(sockfd, (char *) &hg_error, 4)) == -1 ) { if(retmsg) efree(retmsg); return(-2); } allc += c; if(hg_error) { if(retmsg) efree(retmsg); return(-3); } /* read count field */ if ( (c = hg_read_exact(sockfd, (char *) count, 4)) == -1 ) { if(retmsg) efree(retmsg); return(-2); } allc += c; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { if((c = hg_read_exact(sockfd, (char *) childIDs, *count * sizeof(hw_objectID))) == -1) { efree(childIDs); if(retmsg) efree(retmsg); return(-3); } } else { efree(retmsg); lowerror = LE_MALLOC; return(-4); } allc += c; if(NULL != (offsets = emalloc(*count * sizeof(int)))) { if((c = hg_read_exact(sockfd, (char *) offsets, *count * sizeof(int))) == -1) { efree(childIDs); efree(offsets); if(retmsg) efree(retmsg); return(-5); } } else { efree(retmsg); efree(childIDs); lowerror = LE_MALLOC; return(-6); } allc += c; str = (char *)ptr; if(NULL == (childrec = (char **) emalloc(*count * sizeof(hw_objrec *)))) { efree(offsets); efree(childIDs); efree(retmsg); lowerror = LE_MALLOC; return(-1); } else { for(i=0; i<*count; i++) { char *ptr; childrec[i] = emalloc(offsets[i] + 1); ptr = childrec[i]; c = hg_read_exact(sockfd, (char *) ptr, offsets[i]); ptr[c] = '\0'; allc += c; } /* Reading the trailing '\0' */ c = hg_read_exact(sockfd, (char *) &hg_error, 1); *objrecs = childrec; } } #else retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-1); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ != 0) { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } *count = *ptr++; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = childIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; if(NULL != (offsets = emalloc(*count * sizeof(int)))) { ptr1 = offsets; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; } else { efree(retmsg->buf); efree(retmsg); efree(childIDs); lowerror = LE_MALLOC; return(-1); } } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } str = (char *)ptr; if(NULL == (childrec = (char **) emalloc(*count * sizeof(hw_objrec *)))) { efree(offsets); efree(childIDs); efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } else { for(i=0; i<*count; i++) { char *ptr; childrec[i] = emalloc(offsets[i] + 1); ptr = childrec[i]; memcpy(ptr, str, offsets[i]); ptr[offsets[i]] = '\0'; str += offsets[i]; } *objrecs = childrec; } efree(retmsg->buf); #endif efree(retmsg); efree(childIDs); efree(offsets); return(0); } int send_getobjbyquery(int sockfd, char *query, int maxhits, hw_objectID **childIDs, int *count) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr, i, *ptr1; length = HEADER_LENGTH + strlen(query) + 1; build_msg_header(&msg, length, msgid++, GETOBJBYQUERY_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, query); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-1); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = (*ptr < maxhits) ? *ptr : maxhits; ptr++; if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *childIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } return(0); } int send_getobjbyqueryobj(int sockfd, char *query, int maxhits, char ***childrec, int *count) { hg_msg msg, *retmsg; int length, i, error; char *tmp; int *childIDs = NULL; int *ptr, *ptr1; length = HEADER_LENGTH + strlen(query) + 1; build_msg_header(&msg, length, msgid++, GETOBJBYQUERY_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, query); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-2); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-3); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -4; } if(*ptr++ == 0) { *count = (*ptr < maxhits) ? *ptr : maxhits; ptr++; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = childIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-5); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } /* Now get for each child collection the object record */ #ifdef hw_less_server_stress if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) { efree(childIDs); return -2; } efree(childIDs); #else for(i=0; i<*count; i++) { length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ efree(childIDs); lowerror = LE_MALLOC; return(-6); } tmp = build_msg_int(msg.buf, childIDs[i]); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); efree(childIDs); return(-7); } efree(msg.buf); } efree(childIDs); if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) { /* if emalloc fails, get at least all remaining messages from server */ for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); efree(retmsg->buf); efree(retmsg); } *childrec = NULL; lowerror = LE_MALLOC; return(-8); } else { *childrec = objptr; for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { if(0 == (int) *(retmsg->buf)) { *objptr = estrdup(retmsg->buf+sizeof(int)); objptr++; efree(retmsg->buf); efree(retmsg); } else { *objptr = NULL; objptr++; efree(retmsg->buf); efree(retmsg); } } } } #endif return(0); } int send_getobjbyquerycoll(int sockfd, hw_objectID collID, char *query, int maxhits, hw_objectID **childIDs, int *count) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr, i, *ptr1; length = HEADER_LENGTH + strlen(query) + 1 + sizeof(int) + sizeof(collID); build_msg_header(&msg, length, msgid++, GETOBJBYQUERYCOLL_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, 1); tmp = build_msg_int(tmp, collID); tmp = build_msg_str(tmp, query); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-1); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = (*ptr < maxhits) ? *ptr : maxhits; ptr++; if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *childIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } return(0); } int send_getobjbyquerycollobj(int sockfd, hw_objectID collID, char *query, int maxhits, char ***childrec, int *count) { hg_msg msg, *retmsg; int length, i, error; char *tmp; hw_objectID *childIDs = NULL; int *ptr, *ptr1; length = HEADER_LENGTH + strlen(query) + 1 + sizeof(int) + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETOBJBYQUERYCOLL_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, 1); tmp = build_msg_int(tmp, collID); tmp = build_msg_str(tmp, query); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return -1; ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = (*ptr < maxhits) ? *ptr : maxhits; ptr++; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = childIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } /* Now get for each child collection the object record */ #ifdef hw_less_server_stress if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) { if(childIDs) efree(childIDs); return -2; } if(childIDs) efree(childIDs); #else for(i=0; i<*count; i++) { length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ efree(childIDs); lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, childIDs[i]); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); efree(childIDs); return(-1); } efree(msg.buf); } efree(childIDs); if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) { /* if emalloc fails, get at least all remaining messages from server */ for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); efree(retmsg->buf); efree(retmsg); } *childrec = NULL; lowerror = LE_MALLOC; return(-1); } else { *childrec = objptr; for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { if(0 == (int) *(retmsg->buf)) { *objptr = estrdup(retmsg->buf+sizeof(int)); objptr++; efree(retmsg->buf); efree(retmsg); } else { *objptr = NULL; objptr++; efree(retmsg->buf); efree(retmsg); } } } } #endif return(0); } int send_getobjbyftquery(int sockfd, char *query, int maxhits, hw_objectID **childIDs, float **weights, int *count) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr, i, *ptr1; float *ptr2; length = HEADER_LENGTH + strlen(query) + 1; build_msg_header(&msg, length, msgid++, GETOBJBYFTQUERY_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, query); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-1); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { char *cptr, tmp[20]; float weight; int j; *count = (*ptr < maxhits) ? *ptr : maxhits; ptr++; if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *childIDs; if(NULL != (*weights = emalloc(*count * sizeof(float)))) { ptr2 = *weights; for(i=0; i<*count; i++) { ptr1[i] = *ptr++; /* Object id */ cptr = (char *) ptr; j = 0; while(*cptr != ' ') { tmp[j++] = *cptr++; } cptr++; /* Skip space after weight */ tmp[j] = '\0'; sscanf(tmp, "%f", &weight); ptr2[i] = weight; ptr = (int *) cptr; ptr++; /* Skip 0-Integer after weight string */ } efree(retmsg->buf); efree(retmsg); } else { efree(*childIDs); efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } return(0); } int send_getobjbyftqueryobj(int sockfd, char *query, int maxhits, char ***childrec, float **weights, int *count) { hg_msg msg, *retmsg; int length, i, error; char *tmp; int *childIDs = NULL; int *ptr, *ptr1; float *ptr2; length = HEADER_LENGTH + strlen(query) + 1; build_msg_header(&msg, length, msgid++, GETOBJBYFTQUERY_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, query); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-2); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-3); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -4; } if(*ptr++ == 0) { char *cptr, tmp[20]; float weight; int j; *count = (*ptr < maxhits) ? *ptr : maxhits; ptr++; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = childIDs; if(NULL != (*weights = emalloc(*count * sizeof(float)))) { ptr2 = *weights; for(i=0; i<*count; i++) { ptr1[i] = *ptr++; /* Object id */ cptr = (char *) ptr; j = 0; while(*cptr != ' ') { tmp[j++] = *cptr++; } cptr++; /* Skip space after weight */ tmp[j] = '\0'; sscanf(tmp, "%f", &weight); ptr2[i] = weight; ptr = (int *) cptr; ptr++; /* Skip 0-Integer after weight string */ } efree(retmsg->buf); efree(retmsg); } else { efree(childIDs); efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-5); } } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-5); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } /* Now get for each child collection the object record */ #ifdef hw_less_server_stress if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) { efree(childIDs); efree(*weights); return -2; } efree(childIDs); #else for(i=0; i<*count; i++) { length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { efree(childIDs); efree(*weights); lowerror = LE_MALLOC; return(-6); } tmp = build_msg_int(msg.buf, childIDs[i]); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); efree(childIDs); efree(*weights); return(-7); } efree(msg.buf); } efree(childIDs); if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) { /* if emalloc fails, get at least all remaining messages from server */ for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); efree(retmsg->buf); efree(retmsg); } *childrec = NULL; lowerror = LE_MALLOC; return(-8); } else { *childrec = objptr; for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { if(0 == (int) *(retmsg->buf)) { *objptr = estrdup(retmsg->buf+sizeof(int)); objptr++; efree(retmsg->buf); efree(retmsg); } else { *objptr = NULL; objptr++; efree(retmsg->buf); efree(retmsg); } } } } #endif return(0); } int send_getobjbyftquerycoll(int sockfd, hw_objectID collID, char *query, int maxhits, hw_objectID **childIDs, float **weights, int *count) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr, i, *ptr1; float *ptr2; length = HEADER_LENGTH + strlen(query) + 1 + sizeof(int) + sizeof(collID); build_msg_header(&msg, length, msgid++, GETOBJBYFTQUERYCOLL_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, 1); tmp = build_msg_int(tmp, collID); tmp = build_msg_str(tmp, query); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-1); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { char *cptr, tmp[20]; float weight; int j; *count = (*ptr < maxhits) ? *ptr : maxhits; ptr++; if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *childIDs; if(NULL != (*weights = emalloc(*count * sizeof(float)))) { ptr2 = *weights; for(i=0; i<*count; i++) { ptr1[i] = *ptr++; /* Object id */ cptr = (char *) ptr; j = 0; while(*cptr != ' ') { tmp[j++] = *cptr++; } cptr++; /* Skip space after weight */ tmp[j] = '\0'; sscanf(tmp, "%f", &weight); ptr2[i] = weight; ptr = (int *) cptr; ptr++; /* Skip 0-Integer after weight string */ } } else { efree(*childIDs); efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } return(0); } int send_getobjbyftquerycollobj(int sockfd, hw_objectID collID, char *query, int maxhits, char ***childrec, float **weights, int *count) { hg_msg msg, *retmsg; int length, i, error; char *tmp; hw_objectID *childIDs = NULL; int *ptr, *ptr1; float *ptr2; length = HEADER_LENGTH + strlen(query) + 1 + sizeof(int) + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETOBJBYFTQUERYCOLL_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, 1); tmp = build_msg_int(tmp, collID); tmp = build_msg_str(tmp, query); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return -1; ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { char *cptr, tmp[20]; float weight; int j; *count = (*ptr < maxhits) ? *ptr : maxhits; ptr++; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = childIDs; if(NULL != (*weights = emalloc(*count * sizeof(float)))) { ptr2 = *weights; for(i=0; i<*count; i++) { ptr1[i] = *ptr++; /* Object id */ cptr = (char *) ptr; j = 0; while(*cptr != ' ') { tmp[j++] = *cptr++; } cptr++; /* Skip space after weight */ tmp[j] = '\0'; sscanf(tmp, "%f", &weight); ptr2[i] = weight; ptr = (int *) cptr; ptr++; /* Skip 0-Integer after weight string */ } efree(retmsg->buf); efree(retmsg); } else { efree(childIDs); efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } /* Now get for each child collection the object record */ #ifdef hw_less_server_stress if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) { if(childIDs) efree(childIDs); if(*weights) efree(weights); return -2; } if(childIDs) efree(childIDs); #else for(i=0; i<*count; i++) { length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ efree(childIDs); efree(*weights); lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, childIDs[i]); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); efree(childIDs); efree(*weights); return(-1); } efree(msg.buf); } efree(childIDs); if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) { /* if emalloc fails, get at least all remaining messages from server */ for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); efree(retmsg->buf); efree(retmsg); } *childrec = NULL; lowerror = LE_MALLOC; return(-1); } else { *childrec = objptr; for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { if(0 == (int) *(retmsg->buf)) { *objptr = estrdup(retmsg->buf+sizeof(int)); objptr++; efree(retmsg->buf); efree(retmsg); } else { *objptr = NULL; objptr++; efree(retmsg->buf); efree(retmsg); } } } } #endif return(0); } int send_getparents(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count) { hg_msg msg, *retmsg; int length, i, error; char *tmp; int *ptr, *ptr1; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETPARENT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if (-1 == send_hg_msg(sockfd, &msg, length)) { efree(msg.buf); return(-2); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-3); } ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr++; if(NULL != (*childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = *childIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } return(0); } int send_getparentsobj(int sockfd, hw_objectID objectID, char ***childrec, int *count) { hg_msg msg, *retmsg; int length, i, error; char *tmp; hw_objectID *childIDs = NULL; int *ptr; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETPARENT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if (-1 == send_hg_msg(sockfd, &msg, length)) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-1); } ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr++; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { for(i=0; i<*count; ptr++, i++) childIDs[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } /* Now get for each parent the object record */ #ifdef hw_less_server_stress if(0 != send_objectbyidquery(sockfd, childIDs, count, NULL, childrec)) { efree(childIDs); return -2; } efree(childIDs); #else for(i=0; i<*count; i++) { length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, childIDs[i]); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); } efree(childIDs); if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) { /* if emalloc fails, get at least all remaining messages from server */ for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); efree(retmsg->buf); efree(retmsg); } *childrec = NULL; lowerror = LE_MALLOC; return(-1); } else { *childrec = objptr; for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { if(0 == (int) *(retmsg->buf)) { *objptr = estrdup(retmsg->buf+sizeof(int)); objptr++; efree(retmsg->buf); efree(retmsg); } else { *objptr = NULL; objptr++; efree(retmsg->buf); efree(retmsg); } } } } #endif return(0); } int send_pipedocument(int sockfd, char *host, hw_objectID objectID, int mode, int rootid, char **objattr, char **bodytag, char **text, int *count, char **urlprefix) { hg_msg msg, *retmsg; int length, len; char *tmp, header[80], *head_ptr, *sizestr; struct sockaddr_in serv_addr; struct hostent *hostptr; char *hostip = NULL; char *attributes = NULL; char *documenttype; char **anchors; int newfd, fd, port, size, error, ancount; int *ptr; if(-1 == (fd = fnCOpenDataCon(sockfd, &port))) { /* not set yet efree(msg.buf); */ return(-1); } /* ** Get information about host */ if(host) { if((hostptr = gethostbyname(host)) == NULL) { HWSOCK_FCLOSE(fd); return(-2); } } else { HWSOCK_FCLOSE(fd); return(-2); } switch(hostptr->h_addrtype) { struct in_addr *ptr1; char *ptr; case AF_INET: ptr = hostptr->h_addr_list[0]; ptr1 = (struct in_addr *) ptr; hostip = inet_ntoa(*ptr1); break; default: HWSOCK_FCLOSE(fd); return(-3); break; } /* Bottom half of send_getobject */ if(0 > bh_send_getobject(sockfd, objectID)) { HWSOCK_FCLOSE(fd); return -4; } /* Upper half of send_getobject */ if(0 > (error = uh_send_getobject(sockfd, &attributes))) { HWSOCK_FCLOSE(fd); return error; } length = HEADER_LENGTH + sizeof(hw_objectID) + sizeof(int) + strlen(hostip) + 1 + strlen("Refno=0x12345678") + 1; build_msg_header(&msg, length, msgid++, PIPEDOCUMENT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { if(attributes) efree(attributes); lowerror = LE_MALLOC; return(-5); } tmp = build_msg_int(msg.buf, objectID); tmp = build_msg_int(tmp, port); tmp = build_msg_str(tmp, hostip); tmp = build_msg_str(tmp, "Refno=0x12345678"); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { if(attributes) efree(attributes); efree(msg.buf); HWSOCK_FCLOSE(fd); return(-6); } efree(msg.buf); /* Just check if the command was understood */ retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { if(attributes) efree(attributes); HWSOCK_FCLOSE(fd); return(-7); } ptr = (int *) retmsg->buf; if((ptr == NULL) || (*ptr != 0)) { error = *ptr; if(retmsg->buf) efree(retmsg->buf); efree(retmsg); if(attributes) efree(attributes); HWSOCK_FCLOSE(fd); return(error); } efree(retmsg->buf); efree(retmsg); /* passively open the data connection. The HG server is probably already waiting for us. */ len = sizeof(serv_addr); if((newfd = accept(fd, (struct sockaddr *) &serv_addr, &len)) < 0) { /* php_printf("client: can't open data connection to server\n"); */ if(attributes) efree(attributes); HWSOCK_FCLOSE(fd); return(-8); } else { HWSOCK_FCLOSE(fd); } /* First of all read the header */ head_ptr = header; while((read_to(newfd, head_ptr, 1, rtimeout) == 1) && (*head_ptr != '\0')) { head_ptr++; } /* Let's see how big the document is and read it into var text */ sizestr = strstr(header, "sz="); if(sizestr) { sizestr += 3; sscanf(sizestr, "%d\n", &size); *count = size; if((size != 0) && (NULL != (*text = malloc(size+1)))) { read_to(newfd, *text, size, rtimeout); (*text)[size] = '\0'; } } else { *text = NULL; } /* close the data connection */ HWSOCK_FCLOSE(newfd); documenttype = fnAttributeValue(attributes, "DocumentType"); /* Make a copy with strdup (not estrdup), because we want to keep the attributes in hw_document struct. */ *objattr = strdup(attributes); efree(attributes); if((documenttype != NULL) && (!strcmp(documenttype, "text") != 0)) { if(send_getanchorsobj(sockfd, objectID, &anchors, &ancount) == 0) { char **destrec, **reldestrec; #ifdef newlist zend_llist *pAnchorList = NULL; #else DLIST *pAnchorList = NULL; #endif /* Get dest as relative and absolut path */ send_getdestforanchorsobj(sockfd, anchors, &destrec, ancount); send_getreldestforanchorsobj(sockfd, anchors, &reldestrec, ancount, rootid, objectID); pAnchorList = fnCreateAnchorList(objectID, anchors, destrec, reldestrec, ancount, mode); /* Free only the array, the objrecs has been freed in fnCreateAnchorList() */ if(anchors) efree(anchors); if(destrec) efree(destrec); if(reldestrec) efree(reldestrec); if(pAnchorList != NULL) { char *newtext; char *body = NULL; newtext = fnInsAnchorsIntoText(*text, pAnchorList, &body, urlprefix); #ifdef newlist zend_llist_destroy(pAnchorList); efree(pAnchorList); #else dlst_kill(pAnchorList, fnDeleteAnchor); #endif *bodytag = strdup(body); if(body) efree(body); *text = newtext; *count = strlen(newtext); } } } else { *bodytag = NULL; } if(documenttype) efree(documenttype); return(0); } int send_pipecgi(int sockfd, char *host, hw_objectID objectID, char *cgi_env_str, char **objattr, char **text, int *count) { hg_msg msg, *retmsg; int length, len, new_attr_len; char *tmp, header[80], *head_ptr, *sizestr; struct sockaddr_in serv_addr; struct hostent *hostptr; char *hostip = NULL; char *attributes = NULL; char *documenttype, *new_attr; int newfd, fd, port, size, error; int *ptr; if(-1 == (fd = fnCOpenDataCon(sockfd, &port))) { /* not set yet? efree(msg.buf); */ return(-1); } /* ** Get information about host */ if(host) { if((hostptr = gethostbyname(host)) == NULL) { HWSOCK_FCLOSE(fd); return(-1); } } else { HWSOCK_FCLOSE(fd); return(-1); } switch(hostptr->h_addrtype) { struct in_addr *ptr1; char *ptr; case AF_INET: ptr = hostptr->h_addr_list[0]; ptr1 = (struct in_addr *) ptr; hostip = inet_ntoa(*ptr1); break; default: /* php_printf(stderr, "unknown address type\n"); */ break; } /* Bottom half of send_getobject */ if(0 > bh_send_getobject(sockfd, objectID)) { HWSOCK_FCLOSE(fd); return -1; } /* Upper half of send_getobject */ if(0 > (error = uh_send_getobject(sockfd, &attributes))) { HWSOCK_FCLOSE(fd); return error; } new_attr_len = strlen(attributes) + strlen(cgi_env_str) + 2; new_attr = malloc(new_attr_len); strcpy(new_attr, attributes); strcat(new_attr, cgi_env_str); length = HEADER_LENGTH + strlen(new_attr) + 1 + sizeof(int) + strlen(hostip) + 1 + sizeof(int) + sizeof(int); build_msg_header(&msg, length, msgid++, PIPECGI_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { if(attributes) efree(attributes); lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, hostip); tmp = build_msg_int(tmp, port); tmp = build_msg_str(tmp, new_attr); tmp = build_msg_int(tmp, 1); tmp = build_msg_int(tmp, 0x12345678); free(new_attr); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { if(attributes) efree(attributes); efree(msg.buf); HWSOCK_FCLOSE(fd); return(-1); } efree(msg.buf); /* Just check if the command was understood */ retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { if(attributes) efree(attributes); HWSOCK_FCLOSE(fd); return(-1); } ptr = (int *) retmsg->buf; if((ptr == NULL) || (*ptr != 0)) { if(retmsg->buf) efree(retmsg->buf); efree(retmsg); if(attributes) efree(attributes); HWSOCK_FCLOSE(fd); return(-1); } efree(retmsg->buf); efree(retmsg); /* passively open the data connection. The HG server is probably already waiting for us. */ len = sizeof(serv_addr); if((newfd = accept(fd, (struct sockaddr *) &serv_addr, &len)) < 0) { if(attributes) efree(attributes); HWSOCK_FCLOSE(fd); return(-1); } else { HWSOCK_FCLOSE(fd); } /* First of all read the header */ head_ptr = header; while((read_to(newfd, head_ptr, 1, rtimeout) == 1) && (*head_ptr != '\0')) { head_ptr++; } /* Let's see how big the document is and read it into var text */ sizestr = strstr(header, "sz="); if(sizestr) { sizestr += 3; sscanf(sizestr, "%d\n", &size); *count = size; if((size != 0) && (NULL != (*text = malloc(size+1)))) { read_to(newfd, *text, size, rtimeout); } } else { *text = NULL; } /* close the data connection */ HWSOCK_FCLOSE(newfd); documenttype = fnAttributeValue(attributes, "DocumentType"); /* Make a copy with strdup (not estrdup), because we want to keep the attributes in hw_document struct. */ *objattr = strdup(attributes); efree(attributes); if(documenttype) efree(documenttype); return(0); } int send_putdocument(int sockfd, char *host, hw_objectID parentID, char *objectRec, char *text, int count, hw_objectID *objectID) { hg_msg msg, *retmsg; int length, len; char *tmp, header[80], parms[30], *head_ptr; struct sockaddr_in serv_addr; struct hostent *hostptr; char *hostip = NULL; int newfd, fd, port, error; int *ptr; /* First of all we have to insert the document record */ sprintf(parms, "Parent=0x%x", parentID); length = HEADER_LENGTH + strlen(objectRec) + 1 + strlen(parms) + 1; build_msg_header(&msg, length, msgid++, INSERTOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_str(msg.buf, objectRec); tmp = build_msg_str(tmp, parms); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-2); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-3); } ptr = (int *) retmsg->buf; if(0 == (error = *ptr)) { ptr++; *objectID = *ptr; } else { if(retmsg->buf) efree(retmsg->buf); efree(retmsg); return(error); } efree(retmsg->buf); efree(retmsg); /* ** Get information about host */ if(host) { if((hostptr = gethostbyname(host)) == NULL) { /* close(fd); fd is not set yet */ return(-4); } } else { /* close(fd); fd is not set yet */ return(-5); } switch(hostptr->h_addrtype) { struct in_addr *ptr1; char *ptr; case AF_INET: ptr = hostptr->h_addr_list[0]; ptr1 = (struct in_addr *) ptr; hostip = inet_ntoa(*ptr1); break; default: /* fprintf(stderr, "unknown address type\n"); */ break; } if(-1 == (fd = fnCOpenDataCon(sockfd, &port))) { efree(msg.buf); return(-6); } /* Start building the PUTDOCUMENT message. I works even if the Refno is skipped. I guess the path can be omitted too. */ length = HEADER_LENGTH + sizeof(hw_objectID) + sizeof(int) + strlen(hostip) + 1 + strlen("Hyperwave") + 1+ strlen("Refno=0x12345678") + 1; build_msg_header(&msg, length, msgid++, PUTDOCUMENT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-7); } tmp = build_msg_int(msg.buf, *objectID); tmp = build_msg_int(tmp, port); tmp = build_msg_str(tmp, hostip); tmp = build_msg_str(tmp, "Hyperwave"); tmp = build_msg_str(tmp, "Refno=0x12345678"); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); HWSOCK_FCLOSE(fd); return(-8); } efree(msg.buf); /* passively open the data connection. The HG server is probably already waiting for us. */ len = sizeof(serv_addr); if((newfd = accept(fd, (struct sockaddr *) &serv_addr, &len)) < 0) { HWSOCK_FCLOSE(fd); return(-9); } else { HWSOCK_FCLOSE(fd); } /* First of all write the header. According to the documentation there should be a header first. Well, after some investigation with tcpdump I found out, that Harmony and wavemaster don't sent it. The also do not sent the Refno in the PUTDOCUMENT msg. Anyway, we sent both. */ head_ptr = header; sprintf(header, "HGHDR\nsz=%d\nref=12345678\n", count); len = strlen(header) + 1; if(len != write_to(newfd, header, len, wtimeout)) { HWSOCK_FCLOSE(newfd); return(-10); } /* And now the document */ if(count != write_to(newfd, text, count, wtimeout)) { HWSOCK_FCLOSE(newfd); return(-11); } /* The data connection has to be close before the return msg can be read. The server will not sent it before. */ HWSOCK_FCLOSE(newfd); /* Just check if the command was understood */ retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { HWSOCK_FCLOSE(fd); return(-12); } ptr = (int *) retmsg->buf; if((ptr == NULL) || (*ptr != 0)) { if(retmsg->buf) efree(retmsg->buf); efree(retmsg); HWSOCK_FCLOSE(fd); return(-13); } efree(retmsg->buf); efree(retmsg); return(0); } int send_getsrcbydest(int sockfd, hw_objectID objectID, char ***childrec, int *count) { hg_msg msg, *retmsg; int length, i, error; char *tmp; int *childIDs = NULL; char **objptr; int *ptr, *ptr1; length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, GETSRCBYDEST_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, objectID); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(msg.buf); return(-1); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) return(-1); ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *count = *ptr; ptr++; if(NULL != (childIDs = emalloc(*count * sizeof(hw_objectID)))) { ptr1 = childIDs; for(i=0; i<*count; ptr++, i++) ptr1[i] = *ptr; efree(retmsg->buf); efree(retmsg); } else { efree(retmsg->buf); efree(retmsg); lowerror = LE_MALLOC; return(-1); } } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } /* Now get for each source the object record */ for(i=0; i<*count; i++) { length = HEADER_LENGTH + sizeof(hw_objectID); build_msg_header(&msg, length, childIDs[i], GETOBJECT_MESSAGE); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ efree(childIDs); lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, childIDs[i]); if ( send_hg_msg(sockfd, &msg, length) == -1 ) { efree(childIDs); efree(msg.buf); return(-1); } efree(msg.buf); } efree(childIDs); if(NULL == (objptr = (char **) emalloc(*count * sizeof(hw_objrec *)))) { /* if emalloc fails, get at least all remaining messages from server */ for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); efree(retmsg->buf); efree(retmsg); } *childrec = NULL; lowerror = LE_MALLOC; return(-1); } else { *childrec = objptr; for(i=0; i<*count; i++) { retmsg = recv_hg_msg(sockfd); if ( retmsg != NULL ) { if(0 == (int) *(retmsg->buf)) { *objptr = estrdup(retmsg->buf+sizeof(int)); objptr++; efree(retmsg->buf); efree(retmsg); } else { *objptr = NULL; objptr++; efree(retmsg->buf); efree(retmsg); } } } } return(0); } int send_mapid(int sockfd, int servid, hw_objectID id, int *virtid) { hg_msg msg, *retmsg; int length, error; char *tmp; int *ptr; length = HEADER_LENGTH + 2 * sizeof(hw_objectID); build_msg_header(&msg, length, msgid++, HG_MAPID); if ( (msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(msg.buf, servid); tmp = build_msg_int(tmp, id); if (-1 == send_hg_msg(sockfd, &msg, length)) { efree(msg.buf); return(-2); } efree(msg.buf); retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-3); } ptr = (int *) retmsg->buf; if(ptr == NULL) { if(retmsg) efree(retmsg); return -1; } if(*ptr++ == 0) { *virtid = *ptr; } else { error = *((int *) retmsg->buf); efree(retmsg->buf); efree(retmsg); return error; } return(0); } #define BUFFERLEN 200 char *get_hw_info(hw_connection *conn) { char temp[BUFFERLEN]; int len; struct sockaddr_in serv_addr; len = sizeof (serv_addr); if(getsockname(conn->socket, (struct sockaddr *)&serv_addr, &len) < 0) return(NULL); snprintf(temp, BUFFERLEN, "%s, %s, %d, %s, %d, %d", conn->server_string, conn->hostname, conn->version, conn->username, serv_addr.sin_port, conn->swap_on); return(estrdup(temp)); } #undef BUFFERLEN static int send_hg_msg(int sockfd, hg_msg *msg, int length) { char *buf, *tmp; #ifdef HW_DEBUG php_printf("Sending msg: type = %d -- id = %d
\n", msg->msg_type, msg->version_msgid); #endif if ( length < HEADER_LENGTH ) { /* fprintf(stderr, "send_hg_msg: bad msg\n"); */ return(-1); } if ( (tmp = buf = (char *)emalloc(length)) == NULL ) { /* perror("send_hg_msg"); */ lowerror = LE_MALLOC; return(-1); } memcpy(tmp, (char *) &(msg->length), 4); tmp += 4; memcpy(tmp, (char *) &(msg->version_msgid), 4); tmp += 4; memcpy(tmp, (char *) &(msg->msg_type), 4); if ( msg->length > HEADER_LENGTH ) { tmp += 4; memcpy(tmp, msg->buf, length-HEADER_LENGTH); } if ( hg_write(sockfd, buf, length) == -1 ) { efree(buf); return(-1); } efree(buf); return(0); } int send_ready(int sockfd) { hg_msg ready_msg; build_msg_header(&ready_msg, HEADER_LENGTH, version, READY_MESSAGE); ready_msg.buf = NULL; if ( send_hg_msg(sockfd, &ready_msg, HEADER_LENGTH) == -1 ) { return(-1); } return(0); } int send_command(int sockfd, int command, char **answer) { hg_msg comm_msg, *retmsg; char *comm_str, *tmp; int respond = 1; int length; if ( command == STAT_COMMAND ) comm_str = STAT_COMMAND_STR; else comm_str = WHO_COMMAND_STR; length = HEADER_LENGTH + sizeof(respond) + strlen(comm_str) + 1; build_msg_header(&comm_msg, length, msgid++, COMMAND_MESSAGE); if ( (comm_msg.buf = (char *)emalloc(length-HEADER_LENGTH)) == NULL ) { /* perror("send_command"); */ lowerror = LE_MALLOC; return(-1); } tmp = build_msg_int(comm_msg.buf, respond); tmp = build_msg_str(tmp, comm_str); if ( send_hg_msg(sockfd, &comm_msg, length) == -1 ) { efree(comm_msg.buf); return(-1); } efree(comm_msg.buf); /* Just check if the command was understood */ retmsg = recv_hg_msg(sockfd); if ( retmsg == NULL ) { return(-1); } *answer = retmsg->buf; efree(retmsg); return(0); } static void build_msg_header(hg_msg *msg, int length, int version_msgid, int msg_type) { if ( swap_on ) { msg->length = swap(length); msg->version_msgid = swap(version_msgid); msg->msg_type = swap(msg_type); } else { msg->length = length; msg->version_msgid = version_msgid; msg->msg_type = msg_type; } } static char *build_msg_int(char *buf, int val) { int tmp; #ifdef HW_DEBUG php_printf(" Added int to header: %d
\n", val); #endif tmp = swap_on ? swap(val) : val; memcpy(buf, (char *)&tmp, 4); return(buf+4); } static char *build_msg_str(char *buf, char *str) { int len = strlen(str)+1; #ifdef HW_DEBUG php_printf(" Added str to header: %s (%d)
\n", str, strlen(str)); #endif memcpy(buf, str, len); return(buf+len); } static int swap(int val) { int tmp; ((char*)&tmp)[0] = ((char*)&val)[3]; ((char*)&tmp)[1] = ((char*)&val)[2]; ((char*)&tmp)[2] = ((char*)&val)[1]; ((char*)&tmp)[3] = ((char*)&val)[0]; return(tmp); } void close_hg_connection(int sockfd) { shutdown(sockfd, 2); HWSOCK_FCLOSE(sockfd); } #endif /* * Local variables: * tab-width: 4 * End: */ php-4.2.3/ext/hyperwave/hg_comm.h0100644000175200000240000002700607437364647015566 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ /* $Id: hg_comm.h,v 1.19 2025/02/28 08:26:15 sebastian Exp $ */ #ifndef HG_COMM_H #define HG_COMM_H #if HYPERWAVE #define newlist #include "hw_error.h" #ifdef newlist #else #include "dlist.h" #endif #define HG_SERVER_PORT 418 #define F_DISTRIBUTED 0x80000000 #define F_COMPRESSED 0x40000000 #define F_VERSION 0x00003fff #define HW_VERSION 717L /* 7.17 */ #define HEADER_LENGTH 12 #define STAT_COMMAND_STR "stat" #define WHO_COMMAND_STR "who" #define STAT_COMMAND 1 #define WHO_COMMAND 2 #define GETDOCBYANCHOR_MESSAGE 2 #define GETCHILDCOLL_MESSAGE 3 #define GETPARENT_MESSAGE 4 #define GETCHILDDOCCOLL_MESSAGE 5 #define GETOBJECT_MESSAGE 7 #define GETANCHORS_MESSAGE 8 #define GETOBJBYQUERY_MESSAGE 9 #define GETOBJBYQUERYCOLL_MESSAGE 10 #define OBJECTBYIDQUERY_MESSAGE 11 #define GETTEXT_MESSAGE 12 #define INSDOC_MESSAGE 14 #define INSCOLL_MESSAGE 17 #define GETSRCBYDEST_MESSAGE 19 #define MVCPDOCSCOLL_MESSAGE 22 #define MVCPCOLLSCOLL_MESSAGE 23 #define IDENTIFY_MESSAGE 24 #define READY_MESSAGE 25 #define COMMAND_MESSAGE 26 #define CHANGEOBJECT_MESSAGE 27 #define EDITTEXT_MESSAGE 28 #define GETANDLOCK_MESSAGE 29 #define UNLOCK_MESSAGE 30 #define INCOLLECTIONS_MESSAGE 31 #define INSERTOBJECT_MESSAGE 32 #define GETOBJBYFTQUERY_MESSAGE 34 #define GETOBJBYFTQUERYCOLL_MESSAGE 35 #define PIPEDOCUMENT_MESSAGE 36 #define DELETEOBJECT_MESSAGE 37 #define PUTDOCUMENT_MESSAGE 38 #define GETREMOTE_MESSAGE 39 #define GETREMOTECHILDREN_MESSAGE 40 #define HG_MAPID 43 #define CHILDREN_MESSAGE 44 #define GETCGI_MESSAGE 45 #define PIPECGI_MESSAGE 46 #define HW_DEFAULT_LINK 0 #define HW_IMAGE_LINK 1 #define HW_BACKGROUND_LINK 2 #define HW_INTAG_LINK 3 #define HW_APPLET_LINK 4 #define HW_INTAGNODEL_LINK 5 #define COPY 0 #define MOVE 1 #define DOCUMENT 0 #define COLLECTION 1 #ifdef PHP_WIN32 # define SOCK_ERR INVALID_SOCKET # define SOCK_CONN_ERR SOCKET_ERROR # define HWSOCK_FCLOSE(s) closesocket(s) #else # define SOCK_ERR -1 # define SOCK_CONN_ERR -1 # define HWSOCK_FCLOSE(s) close(s) #endif /* Low error messages */ #define LE_MALLOC -1 typedef struct { int id; /* object ID of anchor */ int tanchor; /* Type of anchor. Can be 1=Src, 2=Dest */ int start; /* start of anchor */ int end; /* end of anchor */ char *nameanchor; /* name tag attribute of destination document */ /* if anchor is of type Src the following are used as well */ char *destdocname; /* name of destination document */ char *link; /* url for external destination */ int linktype; /* type of link. see above */ char *tagattr; /* more attributes of tag, like Border=0 */ char *htmlattr; /* */ char *codebase; /* codebase of applet */ char *code; /* code of applet */ char *fragment; /* name link of Src */ /* if anchor is of type Dest the following are used as well */ char *keyword; /* name link of Dest */ } ANCHOR; typedef struct { int length; int version_msgid; int msg_type; char *buf; } hg_msg; typedef struct { int socket; int swap_on; int version; char *server_string; char *hostname; char *username; int lasterror; int linkroot; } hw_connection; typedef int hw_objectID; typedef char hw_objrec; typedef float hw_float; #ifdef newlist void fnDeleteAnchor(void *ptr1); void fnListAnchor(zend_llist *pAnchorList); zend_llist *fnCreateAnchorList(hw_objectID objID, char **anchors, char **docofanchorrec, char **reldestrec, int ancount, int anchormode); char *fnInsAnchorsIntoText(char *text, zend_llist *pAnchorList, char **bodytag, char **urlprefix); int fnCmpAnchors(const void *e1, const void *e2 TSRMLS_DC); ANCHOR *fnAddAnchor(zend_llist *pAnchorList, int objectID, int start, int end); #else void fnDeleteAnchor(ANCHOR *ptr); void fnListAnchor(DLIST *pAnchorList); DLIST *fnCreateAnchorList(hw_objectID objID, char **anchors, char **docofanchorrec, char **reldestrec, int ancount, int anchormode); char *fnInsAnchorsIntoText(char *text, DLIST *pAnchorList, char **bodytag, char **urlprefix); int fnCmpAnchors(ANCHOR *a1, ANCHOR *a2 TSRMLS_DC); ANCHOR *fnAddAnchor(DLIST *pAnchorList, int objectID, int start, int end); #endif extern void set_swap(int do_swap); extern int open_hg_connection(char *server_name, int port); extern void close_hg_connection(int sockfd); extern int initialize_hg_connection(int sockfd, int *do_swap, int *version, char **userdata, char **server_string, char *username, char *password); extern int send_ready(int sockfd); extern int send_command(int sockfd, int command, char **answer); extern hg_msg *recv_hg_msg(int sockfd); extern hg_msg *recv_ready(int sockfd); extern hg_msg *recv_command(int sockfd); extern char *fnInsStr(char *str, int pos, char *insstr); extern int fnAttributeCompare(char *object, char *attrname, char *value); extern char *fnAttributeValue(char *object, char *attrname); extern int getrellink(int sockfd, int rootID, int thisID, int destID, char **reldesstr); extern int send_deleteobject(int sockfd, hw_objectID objectID); extern int send_changeobject(int sockfd, hw_objectID objectID, char *mod); extern int send_groupchangeobject(int sockfd, hw_objectID objectID, char *mod); extern int send_getobject(int sockfd, hw_objectID objectID, char **attributes); extern int send_getandlock(int sockfd, hw_objectID objectID, char **attributes); extern int send_lock(int sockfd, hw_objectID objectID); extern int send_unlock(int sockfd, hw_objectID objectID); extern int send_gettext(int sockfd, hw_objectID objectID, int mode, int rootid, char **objattr, char **bodytag, char **text, int *count, char *urlprefix); extern int send_edittext(int sockfd, char *objattr, char *text); extern int send_getcgi(int sockfd, hw_objectID objectID, char *cgi_env_str, char **objattr, char **text, int *count); extern int send_getremote(int sockfd, hw_objectID objectID, char **objattr, char **text, int *count); extern int send_getremotechildren(int sockfd, char *attributes, char **text, int **childIDs, int *count); extern int send_docbyanchor(int sockfd, hw_objectID objectID, hw_objectID *anchorID); extern int send_docbyanchorobj(int sockfd, hw_objectID objectID, char **objrec); extern int send_mvcpdocscollscoll(int sockfd, hw_objectID *objectIDs, int count, int from, int dest, int cpmv, int docscoll); extern int send_childrenobj(int sockfd, hw_objectID objectID, char ***childrec, int *count); extern int send_getchildcoll(int sockfd, int objectID, hw_objectID **childIDs, int *count); extern int send_getchildcollobj(int sockfd, hw_objectID objectID, hw_objrec ***childrec, int *count); extern int send_getchilddoccoll(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count); extern int send_getchilddoccollobj(int sockfd, hw_objectID objectID, hw_objrec ***childrec, int *count); extern int send_getanchors(int sockfd, hw_objectID objectID, hw_objectID **anchorIDs, int *count); extern int send_getanchorsobj(int sockfd, hw_objectID objectID, char ***childrec, int *count); extern int send_objectbyidquery(int sockfd, hw_objectID *IDs, int *count, char *query, char ***objrecs); extern int send_getobjbyquery(int sockfd, char *query, int maxhits, hw_objectID **childIDs, int *count); extern int send_getobjbyqueryobj(int sockfd, char *query, int maxhits, char ***childrec, int *count); extern int send_getobjbyquerycoll(int sockfd, hw_objectID collID, char *query, int maxhits, hw_objectID **childIDs, int *count); extern int send_getobjbyquerycollobj(int sockfd, hw_objectID collID, char *query, int maxhits, char ***childrec, int *count); extern int send_getobjbyftquery(int sockfd, char *query, int maxhits, hw_objectID **childIDs, float **weights, int *count); extern int send_getobjbyftqueryobj(int sockfd, char *query, int maxhits, char ***childrec, float **weights, int *count); extern int send_getobjbyftquerycoll(int sockfd, hw_objectID collID, char *query, int maxhits, hw_objectID **childIDs, float **weight, int *count); extern int send_getobjbyftquerycollobj(int sockfd, hw_objectID collID, char *query, int maxhits, char ***childrec, float **weight, int *count); extern int send_identify(int sockfd, char *name, char *passwd, char **userdata); extern int send_getparents(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count); extern int send_children(int sockfd, hw_objectID objectID, hw_objectID **childIDs, int *count); extern int send_getparentsobj(int sockfd, hw_objectID objectID, char ***childrec, int *count); extern int send_pipedocument(int sockfd, char *hostname, hw_objectID objectID, int mode, int rootid, char** objattr, char **bodytag, char **text, int *count, char **urlprefix); extern int send_pipecgi(int sockfd, char *host, hw_objectID objectID, char *cgi_env_str, char **objattr, char **text, int *count); extern int send_putdocument(int sockfd, char *hostname, hw_objectID parentID, char *objectRec, char *text, int count, hw_objectID *objectID); extern int send_inscoll(int sockfd, hw_objectID objectID, char *objrec, hw_objectID *new_objectID); extern int send_insertobject(int sockfd, char *objrec, char *parms, hw_objectID *objectID); extern int send_insdoc(int sockfd, hw_objectID objectID, char *objrec, char *text, hw_objectID *new_objectID); extern int send_incollections(int sockfd, int retcol, int cobjids, hw_objectID *objectIDs, int ccollids, hw_objectID *collIDs, int *count, hw_objectID **retIDs); extern int send_getsrcbydest(int sockfd, hw_objectID objid, char ***childrec, int *count); extern int send_mapid(int sockfd, int servid, hw_objectID id, int *virtid); extern int send_dummy(int sockfd, hw_objectID objectID, int msgid, char **attributes); extern int send_insertanchors(char **text, int *count, char **anchors, char **destrec, int ancount, char **urlprefix, char **bodytag); extern char *get_hw_info(hw_connection *conn); #define send_mvcpdocscoll(sockfd, objectIDs, count, from, dest, mvcp) \ send_mvcpdocscollscoll(sockfd, objectIDs, count, from, dest, mvcp, DOCUMENT) #define send_mvcpcollscoll(sockfd, objectIDs, count, from, dest, mvcp) \ send_mvcpdocscollscoll(sockfd, objectIDs, count, from, dest, mvcp, COLLECTION) #endif #endif php-4.2.3/ext/hyperwave/hw.c0100644000175200000240000035273707437364647014602 0ustar zeevstaff/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Uwe Steinmann | +----------------------------------------------------------------------+ */ /* $Id: hw.c,v 1.103 2025/02/28 08:26:15 sebastian Exp $ */ #include #include #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_globals.h" #include "ext/standard/php_standard.h" #include "ext/standard/head.h" #include "ext/standard/info.h" #include "fopen_wrappers.h" #include "SAPI.h" #ifdef PHP_WIN32 #include #else #include "build-defs.h" #endif #ifdef HAVE_MMAP #include #endif #if HYPERWAVE #include "php_ini.h" #include "php_hyperwave.h" static int le_socketp, le_psocketp, le_document; /*hw_module php_hw_module;*/ #define HW_ATTR_NONE 1 #define HW_ATTR_LANG 2 #define HW_ATTR_NR 3 function_entry hw_functions[] = { PHP_FE(hw_connect, NULL) PHP_FE(hw_pconnect, NULL) PHP_FE(hw_close, NULL) PHP_FE(hw_root, NULL) PHP_FE(hw_info, NULL) PHP_FE(hw_connection_info, NULL) PHP_FE(hw_error, NULL) PHP_FE(hw_errormsg, NULL) PHP_FE(hw_getparentsobj, NULL) PHP_FE(hw_getparents, NULL) PHP_FE(hw_children, NULL) PHP_FE(hw_childrenobj, NULL) PHP_FE(hw_getchildcoll, NULL) PHP_FE(hw_getchildcollobj, NULL) PHP_FE(hw_getobject, NULL) PHP_FE(hw_getandlock, NULL) PHP_FE(hw_unlock, NULL) PHP_FE(hw_gettext, NULL) PHP_FE(hw_edittext, NULL) PHP_FE(hw_getcgi, NULL) PHP_FE(hw_getremote, NULL) PHP_FE(hw_getremotechildren, NULL) PHP_FE(hw_pipedocument, NULL) PHP_FE(hw_pipecgi, NULL) PHP_FE(hw_insertdocument, NULL) PHP_FE(hw_mv, NULL) PHP_FE(hw_cp, NULL) PHP_FE(hw_deleteobject, NULL) PHP_FE(hw_changeobject, NULL) PHP_FE(hw_modifyobject, NULL) PHP_FE(hw_docbyanchor, NULL) PHP_FE(hw_docbyanchorobj, NULL) PHP_FE(hw_getobjectbyquery, NULL) PHP_FE(hw_getobjectbyqueryobj, NULL) PHP_FE(hw_getobjectbyquerycoll, NULL) PHP_FE(hw_getobjectbyquerycollobj, NULL) PHP_FE(hw_getobjectbyftquery, NULL) PHP_FE(hw_getobjectbyftqueryobj, NULL) PHP_FE(hw_getobjectbyftquerycoll, NULL) PHP_FE(hw_getobjectbyftquerycollobj, NULL) PHP_FE(hw_getchilddoccoll, NULL) PHP_FE(hw_getchilddoccollobj, NULL) PHP_FE(hw_getanchors, NULL) PHP_FE(hw_getanchorsobj, NULL) PHP_FE(hw_getusername, NULL) PHP_FE(hw_setlinkroot, NULL) PHP_FE(hw_identify, NULL) PHP_FE(hw_free_document, NULL) PHP_FE(hw_new_document, NULL) PHP_FE(hw_new_document_from_file, NULL) PHP_FE(hw_output_document, NULL) PHP_FE(hw_document_size, NULL) PHP_FE(hw_document_attributes, NULL) PHP_FE(hw_document_bodytag, NULL) PHP_FE(hw_document_content, NULL) PHP_FE(hw_document_setcontent, NULL) PHP_FE(hw_objrec2array, NULL) PHP_FE(hw_array2objrec, NULL) PHP_FE(hw_incollections, NULL) PHP_FE(hw_inscoll, NULL) PHP_FE(hw_insertobject, NULL) PHP_FE(hw_insdoc, NULL) PHP_FE(hw_getsrcbydestobj, NULL) PHP_FE(hw_insertanchors, NULL) PHP_FE(hw_getrellink, NULL) PHP_FE(hw_who, NULL) PHP_FE(hw_stat, NULL) PHP_FE(hw_mapid, NULL) PHP_FE(hw_dummy, NULL) {NULL, NULL, NULL} }; zend_module_entry hw_module_entry = { STANDARD_MODULE_HEADER, "hyperwave", hw_functions, PHP_MINIT(hw), PHP_MSHUTDOWN(hw), NULL, NULL, PHP_MINFO(hw), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; /* #ifdef ZTS int hw_globals_id; #else PHP_HW_API php_hw_globals hw_globals; #endif */ ZEND_DECLARE_MODULE_GLOBALS(hw) #ifdef COMPILE_DL_HYPERWAVE ZEND_GET_MODULE(hw) #endif void print_msg(hg_msg *msg, char *str, int txt); void _close_hw_link(zend_rsrc_list_entry *rsrc TSRMLS_DC) { hw_connection *conn = (hw_connection *)rsrc->ptr; if(conn->hostname) free(conn->hostname); if(conn->username) free(conn->username); close(conn->socket); free(conn); HwSG(num_links)--; } void _close_hw_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC) { hw_connection *conn = (hw_connection *)rsrc->ptr; if(conn->hostname) free(conn->hostname); if(conn->username) free(conn->username); close(conn->socket); free(conn); HwSG(num_links)--; HwSG(num_persistent)--; } void _free_hw_document(zend_rsrc_list_entry *rsrc TSRMLS_DC) { hw_document *doc = (hw_document *)rsrc->ptr; if(doc->data) free(doc->data); if(doc->attributes) free(doc->attributes); if(doc->bodytag) free(doc->bodytag); free(doc); } static void php_hw_init_globals(zend_hw_globals *hw_globals) { hw_globals->num_persistent = 0; } static PHP_INI_MH(OnHyperwavePort) { if (new_value==NULL) { HwSG(default_port) = HG_SERVER_PORT; } else { HwSG(default_port) = atoi(new_value); } return SUCCESS; } PHP_INI_BEGIN() STD_PHP_INI_ENTRY("hyerwave.allow_persistent", "0", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_hw_globals, hw_globals) PHP_INI_ENTRY("hyperwave.default_port", "418", PHP_INI_ALL, OnHyperwavePort) PHP_INI_END() PHP_MINIT_FUNCTION(hw) { ZEND_INIT_MODULE_GLOBALS(hw, php_hw_init_globals, NULL); REGISTER_INI_ENTRIES(); le_socketp = zend_register_list_destructors_ex(_close_hw_link, NULL, "hyperwave link", module_number); le_psocketp = zend_register_list_destructors_ex(NULL, _close_hw_plink, "hyperwave link persistent", module_number); le_document = zend_register_list_destructors_ex(_free_hw_document, NULL, "hyperwave document", module_number); Z_TYPE(hw_module_entry) = type; REGISTER_LONG_CONSTANT("HW_ATTR_LANG", HW_ATTR_LANG, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_ATTR_NR", HW_ATTR_NR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("HW_ATTR_NONE", HW_ATTR_NONE, CONST_CS | CONST_PERSISTENT); return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(hw) { UNREGISTER_INI_ENTRIES(); return SUCCESS; } /* {{{ make_return_objrec * creates an array in return value and frees all memory * Also adds as an assoc. array at the end of the return array with * statistics. */ int make_return_objrec(pval **return_value, char **objrecs, int count) { zval *stat_arr; int i; int hidden, collhead, fullcollhead, total; int collheadnr, fullcollheadnr; if (array_init(*return_value) == FAILURE) { /* Ups, failed! Let's at least free the memory */ for(i=0; i