2012-07-17 08:35:45 +00:00
#!/bin/bash
# this script is for developers only
2012-08-04 03:06:15 +00:00
2012-08-04 03:44:07 +00:00
set -e
MAKE=/usr/bin/make
true() { # {{{1
return 0
}
hi() { # {{{1
2014-11-07 19:17:52 +00:00
local colors=(4 2 3 5 6 7 8 9)
local re=()
local i=0
2012-08-04 03:44:07 +00:00
for r in "$@"; do
((color=$i % ${#colors[@]})) || true
color=${colors[$color]}
r="${r/\#/\\#}"
r="s#$r# [4${color}m [31m\0 [0m#g"
re[$i]="-e$r"
((i=i+1))
done
sed -ur "${re[@]}"
}
hiecho() { # {{{1
echo " [32m""$@"" [0m"
}
# }}}
2012-08-04 03:06:15 +00:00
stopfpm() { # {{{1
2012-08-04 03:44:07 +00:00
if [[ -f $1 ]]; then
local pid=`cat $1 2>/dev/null || true`
2012-08-04 02:19:15 +00:00
if [[ $pid -gt 0 ]]; then
2012-08-04 03:44:07 +00:00
hiecho Stopping fpm $pid @ $1
2012-08-04 02:19:15 +00:00
kill $pid || true
fi
fi
}
2012-08-04 03:06:15 +00:00
xtest() { # {{{1
2014-11-08 07:38:45 +00:00
$MAKE ${MAKEOPTS} -f devel/test.mak clean all
2012-08-04 03:06:15 +00:00
}
2012-07-17 08:35:45 +00:00
2012-08-04 03:06:15 +00:00
prep() { # {{{1
2013-07-12 02:21:31 +00:00
$MAKE ${MAKEOPTS} -f devel/prepare.mak "$@"
2012-08-04 03:06:15 +00:00
}
2012-08-01 04:26:43 +00:00
2012-08-04 03:06:15 +00:00
mergepo() { # {{{1
prep
local i
2012-08-01 08:00:21 +00:00
find htdocs -iname '*.po' | while read -r i; do
if [[ -f $i-merged ]]; then
mv $i-merged $i
fi
done
2012-08-04 03:06:15 +00:00
}
po2php() { # {{{1
mergepo
local phpfile
find htdocs -iname '*.po' | while read -r i; do
phpfile=${i/.po/.php}
devel/po2php.awk < $i > $phpfile.tmp
mv $phpfile.tmp $phpfile
done
}
updatedeps() { # {{{1
2014-11-08 19:07:05 +00:00
local pwd=$(readlink -f "$(pwd)")
local builddirname=${xcachesrcdir}-${phpbasename}
local builddir=$(readlink -f $builddirname)
2012-07-20 03:26:55 +00:00
if [[ -z $builddir ]]; then
2014-11-08 19:07:05 +00:00
hiecho required $builddirname not found
2012-07-20 03:26:55 +00:00
return 1
fi
2014-11-08 19:07:05 +00:00
local sourceFile
local sourceFilename
2013-09-26 07:47:59 +00:00
find . -iname \*.c | LANG=C sort | while read -r sourceFile; do
2014-11-08 19:07:05 +00:00
sourceFilename=${sourceFile#./}
2012-08-10 01:58:24 +00:00
{
2014-11-08 19:07:05 +00:00
case "$sourceFilename" in
2012-08-10 01:58:24 +00:00
includes.c)
echo '$(XCACHE_INCLUDES_I)'
2012-07-20 03:26:55 +00:00
;;
esac
2014-11-08 19:07:05 +00:00
echo ${sourceFilename%.c}.lo '$(builddir)/'${sourceFilename%.c}.lo:
hiecho "Checking $sourceFilename ..." >&2
2013-07-15 02:29:46 +00:00
for dependency in $(gcc -DHAVE_XCACHE_TEST -DHAVE_XCACHE_DPRINT -DXCACHE_DEBUG -MM $sourceFile -I$PHPSDIR/$phpbasename/include/php/{,main,Zend,TSRM} -I. -I${builddir} -MG | sed 's#.*:##g' | sed 's#\\##g'); do
2012-08-10 01:58:24 +00:00
dependency=$(readlink -f "$dependency")
case "$dependency" in
$pwd/*)
dependency=${dependency#$pwd/}
;;
$builddir/*)
dependency="\$(builddir)/"${dependency#$builddir/}
;;
esac
case "$dependency" in
2013-07-08 08:00:36 +00:00
*xc_const_string_opcodes_php*)
for dependency in xcache/xc_const_string_*.h; do
echo '$(srcdir)/'$dependency
done
;;
2012-08-10 01:58:24 +00:00
/*) ;;
2014-11-08 19:07:05 +00:00
$sourceFilename) ;;
2012-08-10 01:58:24 +00:00
2013-07-16 02:23:42 +00:00
xc_processor.h|\$\(builddir\)/xc_processor.h)
2012-08-10 01:58:24 +00:00
echo '$(XCACHE_PROC_H)'
;;
2013-07-16 02:23:42 +00:00
xc_processor.c.h|\$\(builddir\)/xc_processor.c.h)
2012-08-10 01:58:24 +00:00
echo '$(XCACHE_PROC_C)'
;;
*)
if [[ -r $dependency ]]; then
echo '$(srcdir)/'$dependency
else
hiecho "$dependency not found" >&2
fi
esac
2013-09-26 07:47:59 +00:00
done | LANG=C sort | uniq
2012-08-10 01:58:24 +00:00
} | xargs
2012-07-20 03:26:55 +00:00
done > Makefile.frag.deps
2012-08-04 03:06:15 +00:00
}
# }}}1
2012-08-04 03:44:07 +00:00
hiecho "Loading config devel/run.cfg"
2012-08-04 03:06:15 +00:00
. devel/run.cfg
PHPSDIR=${PHPSDIR:-$HOME/test}
if [[ $# -eq 0 ]]; then
2013-11-06 15:45:19 +00:00
set -- "${args[@]}"
2012-08-04 03:06:15 +00:00
fi
2012-08-09 02:51:46 +00:00
basename=$(basename $(pwd))
case "$basename" in
*-*)
# in build dir, starts from src dir
2012-10-31 13:59:46 +00:00
dirs="${basename#*-}"
2012-08-09 02:51:46 +00:00
xcachesrcdir=../${basename%%-*}
cd $xcachesrcdir
;;
*)
# in src dir
dirs=${dirs:-php5-debug-zts}
xcachesrcdir=../$basename
;;
2012-08-04 02:19:15 +00:00
esac
2012-08-09 02:51:46 +00:00
touch devel.pid
# ==========================
2012-08-04 03:44:07 +00:00
do_phpize() { # {{{1
2012-08-04 03:06:15 +00:00
if [[ ! -x $PHPSDIR/$phpbasename/bin/phpize ]]; then
2012-08-04 03:44:07 +00:00
hiecho $PHPSDIR/$phpbasename/bin/phpize not found
2012-08-04 03:06:15 +00:00
exit
fi
export PATH=$PHPSDIR/$phpbasename/bin:$PATH
2012-08-04 03:57:00 +00:00
local pedantic=
case $phpbasename in
php5|php5.4) pedantic=-pedantic-errors;;
*) pedantic=-pedantic;;
esac
2012-08-04 03:06:15 +00:00
phpize --clean \
&& phpize \
2015-04-18 09:28:26 +00:00
&& CFLAGS="$CFLAGS -Dinline= -g -O0 $pedantic -Wno-variadic-macros -Wno-long-long -Wall -Wno-unused-parameter -Wno-unused-function -W -Wshadow -Werror=implicit-function-declaration -std=c89 -D_GNU_SOURCE -D_POSIX_SOURCE -Dinline=" ./configure \
2012-08-04 03:06:15 +00:00
--enable-xcache-cacher \
--enable-xcache-optimizer \
--enable-xcache-encoder \
--enable-xcache-decoder \
--enable-xcache-disassembler \
2013-09-29 02:51:38 +00:00
--enable-xcache-assembler \
2012-08-04 03:06:15 +00:00
--enable-xcache-coverager \
--enable-xcache-test \
2013-07-10 04:49:20 +00:00
--enable-xcache-dprint \
2012-08-04 03:06:15 +00:00
--enable-xcache-constant
}
2012-08-04 03:44:07 +00:00
do_make() { # {{{1
if [[ ! -f Makefile ]]; then
do_phpize
fi
2012-08-04 03:06:15 +00:00
LANG=C $MAKE $MAKEOPTS "$@" 2>&1 \
| sed -ur \
-e 's#Werror=implicit-function-declaration#We/rror=i/mplicit-function-declaration#' \
-e 's#-pedantic-errors#-pedantic-e/rrors#' \
-e 's#\./xc_processor\.h#'$PWD'/xc_processor.h#' \
-e 's#\./xc_processor\.c\.h#'$PWD'/xc_processor.c.h#' \
| hi error implicit warn FAIL
ret=${PIPESTATUS[0]}
if [[ $ret -ne 0 ]]; then
exit $ret
fi
}
2012-08-09 02:51:46 +00:00
cleanfpm() { # {{{1
echo
stopfpm $pidfile
}
2012-08-04 03:06:15 +00:00
# }}}
2012-08-04 03:44:07 +00:00
run() {
pidfile=$xcachesrcdir/devel.pid
2012-07-19 02:27:53 +00:00
2012-08-04 03:44:07 +00:00
# prepare {{{1
2012-08-09 02:51:46 +00:00
case "$1" in
2012-08-04 03:44:07 +00:00
phpize)
if [[ -r Makefile ]]; then
2013-07-12 02:21:31 +00:00
$MAKE $MAKEOPTS xcachesvnclean || true
2012-08-04 03:44:07 +00:00
fi
;;
esac
2012-07-19 03:57:56 +00:00
2012-08-04 03:44:07 +00:00
rm -f php-src
2012-12-12 03:51:34 +00:00
find -L . -type d -print0 | xargs -0 rmdir -p 2>/dev/null || true
2012-12-12 03:48:33 +00:00
find -L . -type l -print0 | xargs -0 rm -fv
2012-08-04 03:44:07 +00:00
lndir "$xcachesrcdir" >/dev/null || true
2012-12-12 03:48:33 +00:00
find . -iname .\*.swp -print0 | xargs -0 rm -f
2013-03-25 06:11:01 +00:00
ln -snf ~/src/php/${phpbasename%%-*} php-src
2012-08-04 03:44:07 +00:00
for i in ~/src/php/$phpbasename/sapi/cgi/php{,-cgi}; do
if [[ -r $i ]]; then
ln -snf "$i" php-cgi
fi
done
ln -snf ~/src/php/$phpbasename/sapi/cli/php php-cli
2013-07-19 10:13:01 +00:00
f=~/src/php/$phpbasename/sapi/cli/php; [ -f "$f" ] && ln -snf "$f" php-cli
f=~/src/php/$phpbasename/sapi/fpm/php-fpm; [ -f "$f" ] && ln -snf "$f" php-fpm
2012-07-19 03:57:56 +00:00
2012-08-09 02:51:46 +00:00
case "$1" in
2014-09-12 04:50:11 +00:00
phpized) CFLAGS=-DXCACHE_DEBUG do_phpize; return $?;;
2013-07-16 02:19:50 +00:00
phpize) do_phpize; return $?;;
make) shift; do_make "$@"; return $?;;
2012-08-04 03:44:07 +00:00
*) do_make;;
esac
# }}}1
2012-07-17 08:35:45 +00:00
2012-08-04 03:44:07 +00:00
if [[ -z $1 ]]; then
2013-11-06 15:45:19 +00:00
set -- devel/sample.cpp.php
2012-08-04 03:44:07 +00:00
fi
2012-08-01 04:29:42 +00:00
2012-08-04 03:44:07 +00:00
cmd=()
2013-11-06 15:45:19 +00:00
phpApp=()
2012-08-04 03:44:07 +00:00
tracer=()
2012-08-04 03:06:15 +00:00
2012-08-04 03:44:07 +00:00
# run utils {{{1
2012-08-09 02:51:46 +00:00
case "$1" in
2012-08-04 03:44:07 +00:00
retest)
2012-08-09 02:51:46 +00:00
shift
2013-09-26 07:47:59 +00:00
lastResult=$(ls php_test_results_*.txt | LANG=C sort | tail -n1)
$MAKE $MAKEOPTS xcachetest "$@" TESTS="$(grep '^/.*\.phpt$' $lastResult | uniq | xargs)"
2012-08-04 03:44:07 +00:00
return
;;
test)
2012-08-09 02:51:46 +00:00
shift
2012-08-04 03:44:07 +00:00
case "$1" in
*.phpt)
2013-07-12 02:21:31 +00:00
$MAKE $MAKEOPTS xcachetest TEST_ARGS=-v TESTS="$*"
2012-08-04 03:44:07 +00:00
return
;;
*/)
2013-07-12 02:21:31 +00:00
$MAKE $MAKEOPTS xcachetest TESTS="$*"
2012-08-04 03:44:07 +00:00
return
;;
*)
2013-07-12 02:21:31 +00:00
$MAKE $MAKEOPTS xcachetest
2012-08-04 03:44:07 +00:00
return
;;
esac
2012-08-04 03:06:15 +00:00
;;
esac
2012-08-04 03:44:07 +00:00
# }}}
2012-08-09 02:51:46 +00:00
# pick tracer {{{1
case "$1" in
ltr*)
shift
export USE_ZEND_ALLOC=0
tracer=(ltrace -s1024 -e malloc,realloc,free,write)
;;
str*)
shift
tracer=(strace -s1024 -T)
;;
gdb)
shift
#USE_ZEND_ALLOC=0
tracer=(gdb --args)
;;
val*)
shift
export USE_ZEND_ALLOC=0
2013-09-22 12:53:32 +00:00
export ZEND_DONT_UNLOAD_MODULES=1
tracer=(valgrind -v --gen-suppressions=all)
2012-08-09 02:51:46 +00:00
;;
esac
2012-08-04 03:44:07 +00:00
# pick sapi {{{1
2012-10-31 13:59:46 +00:00
case "$phpbasename" in
2012-08-04 03:44:07 +00:00
*-apache1*)
cmd=($HOME/apache1/bin/httpd -X)
2012-07-25 13:34:12 +00:00
;;
2012-08-04 03:44:07 +00:00
*-apache*)
2012-08-09 02:51:46 +00:00
echo "Don't know how to run apache"
2012-08-04 03:44:07 +00:00
exit 1
2012-07-25 13:34:12 +00:00
;;
*)
2012-08-04 03:44:07 +00:00
case "$1" in
2013-11-06 15:45:19 +00:00
dc)
shift
cmd=(./php-cli -c devel.ini)
phpApp=(./bin/phpdc.phpr)
;;
2015-06-23 10:52:29 +00:00
dboth)
shift
cmd=(./php-cli -c devel.ini)
phpApp=(./bin/phpdc.phpr)
set -- -c -d "$@"
;;
2013-06-25 04:52:40 +00:00
dop)
shift
cmd=(./php-cli -c devel.ini)
2015-06-04 17:18:39 +00:00
phpApp=(./bin/phpdc.phpr)
2015-06-23 10:52:29 +00:00
set -- -c -d "$@"
2013-06-25 04:52:40 +00:00
;;
2012-08-04 03:44:07 +00:00
fcgi)
2012-08-09 02:51:46 +00:00
shift
2012-08-04 03:44:07 +00:00
cmd=(./php-cgi -q -c devel.ini)
set -- -b 1026
;;
fpm)
2012-08-09 02:51:46 +00:00
shift
2012-08-04 03:44:07 +00:00
cmd=(./php-fpm -c devel.ini -y devel.fpm -g $(readlink -f $pidfile))
set --
;;
*)
cmd=(./php-cgi -q -c devel.ini)
;;
esac
2014-11-13 09:36:36 +00:00
"${cmd[@]}" -v || true
2012-08-04 03:44:07 +00:00
esac
2012-07-17 08:35:45 +00:00
2013-11-06 15:45:19 +00:00
# hack sample.cpp.php {{{1
case "$1" in
*.cpp.php)
< "$1" \
sed -r -e 's#__#____#g' \
2015-04-18 09:28:26 +00:00
| cpp -C -P -traditional-cpp -undef -ffreestanding -DPHP_VERSION=$phpVersion \
2015-06-28 07:05:00 +00:00
| sed -r -e 's#^ +##g' -e 's#\t +#\t#g' -e 's#____#__#g' > devel.php.tmp || exit $?
if [[ ! -e devel.php ]] || ! cmp devel.php.tmp devel.php >/dev/null; then
cat devel.php.tmp > devel.php
else
rm -f devel.php.tmp
fi
2013-11-06 15:45:19 +00:00
shift
set -- devel.php "$@"
;;
esac
2012-08-04 03:44:07 +00:00
# run {{{1
2013-11-06 15:45:19 +00:00
set -- "${tracer[@]}" "${cmd[@]}" "${phpApp[@]}" "$@"
2012-07-17 08:35:45 +00:00
2012-08-04 03:44:07 +00:00
case "${cmd[0]}" in
*php-fpm*)
2012-08-09 02:51:46 +00:00
stopfpm
2013-11-06 15:45:19 +00:00
hiecho Starting fpm "$@" ...
"$@" | tee output.php
2012-08-09 02:51:46 +00:00
echo -n "Ctrl-C to stop"
trap cleanfpm SIGINT SIGTERM exit
cat > /dev/null || true
stopfpm
2013-11-06 15:45:19 +00:00
return
2012-08-04 03:44:07 +00:00
;;
*)
2013-11-06 15:45:19 +00:00
hiecho "$@"
2014-05-27 04:53:19 +00:00
case "${tracer[@]}" in
gdb*|val*)
"$@"
;;
*)
"$@" | tee output.php
2015-07-03 04:41:17 +00:00
ret=${PIPESTATUS[0]}
echo exit = $ret >&2
return $ret
2014-05-27 04:53:19 +00:00
;;
esac
2012-08-04 03:44:07 +00:00
;;
esac
# }}}
}
2012-08-04 02:19:15 +00:00
2012-08-09 02:51:46 +00:00
for phpbasename in "${dirs[@]}"; do
2013-07-19 05:03:07 +00:00
phpVersion=${phpbasename%%-*}
phpVersion=${phpVersion##php}
phpVersion=${phpVersion/./}
case "$phpVersion" in
??) phpVersion="${phpVersion}0";;
?) phpVersion="${phpVersion}00";;
esac
2013-07-15 02:29:46 +00:00
# devel actions
case "$1" in
prep*) shift; prep "$@"; exit;;
tags) shift; rm -f tags; prep tags "$@"; exit;;
po2php) po2php; exit;;
mergepo) mergepo; exit;;
dep*) updatedeps; exit;;
xtest) xtest; exit;;
stopfpm) stopfpm devel.pid; exit;;
esac
2012-10-31 13:59:46 +00:00
mkdir -p ${xcachesrcdir}-${phpbasename}
cd ${xcachesrcdir}-${phpbasename} || exit
2012-08-09 02:51:46 +00:00
lndir ${xcachesrcdir} >/dev/null || true
2012-08-04 03:44:07 +00:00
2012-08-09 02:51:46 +00:00
pwd
run "$@"
done