source: trunk/devel/run

Last change on this file was 1532, checked in by moo, 6 weeks ago

define XCACHE_DEBUG in phpized

  • Property svn:executable set to *
File size: 8.0 KB
RevLine 
[977]1#!/bin/bash
2# this script is for developers only
[1122]3
[1123]4set -e
5MAKE=/usr/bin/make
6
7true() { # {{{1
8    return 0
9}
10
11hi() { # {{{1
12    colors=(4 2 3 5 6 7 8 9)
13    re=()
14    i=0
15    for r in "$@"; do
16        ((color=$i % ${#colors[@]})) || true
17        color=${colors[$color]}
18        r="${r/\#/\\#}"
19        r="s#$r#[4${color}m[31m\0[0m#g"
20        re[$i]="-e$r"
21        ((i=i+1))
22    done
23    sed -ur "${re[@]}"
24}
25hiecho() { # {{{1
26    echo "[32m""$@""[0m"
27}
28
29# }}}
30
[1122]31stopfpm() { # {{{1
[1123]32    if [[ -f $1 ]]; then
33        local pid=`cat $1 2>/dev/null || true`
[1119]34        if [[ $pid -gt 0 ]]; then
[1123]35            hiecho Stopping fpm $pid @ $1
[1119]36            kill $pid || true
37        fi
38    fi
39}
40
[1122]41xtest() { # {{{1
[1294]42    $MAKE ${MAKEOPTS} -f devel/test.mak
[1122]43}
[977]44
[1122]45prep() { # {{{1
[1294]46    $MAKE ${MAKEOPTS} -f devel/prepare.mak "$@"
[1122]47}
[998]48
[1122]49mergepo() { # {{{1
50    prep
51    local i
[1101]52    find htdocs -iname '*.po' | while read -r i; do
[1122]53        if [[ -f $i-merged ]]; then
54            mv $i-merged $i
55        fi
56    done
57}
58
59po2php() { # {{{1
60    mergepo
61
62    local phpfile
63    find htdocs -iname '*.po' | while read -r i; do
[1102]64        phpfile=${i/.po/.php}
[1103]65        devel/po2php.awk < $i > $phpfile.tmp
[1102]66        mv $phpfile.tmp $phpfile
[1101]67    done
[1122]68}
69
70updatedeps() { # {{{1
[1011]71    pwd=$(readlink -f "$(pwd)")
[1096]72    builddir=$(readlink -f ../trunk-php5-debug-zts)
[1011]73    if [[ -z $builddir ]]; then
[1123]74        hiecho required ../trunk-php5-debug-zts not found
[1011]75        return 1
76    fi
[1403]77    find . -iname \*.c | LANG=C sort | while read -r sourceFile; do
[1011]78        sourceFile=${sourceFile#./}
[1141]79        {
80            case "$sourceFile" in
81            includes.c)
82                echo '$(XCACHE_INCLUDES_I)'
[1011]83                ;;
84            esac
[1160]85            echo ${sourceFile%.c}.lo '$(builddir)/'${sourceFile%.c}.lo:
[1141]86            hiecho "Checking $sourceFile ..." >&2
[1312]87            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
[1141]88                dependency=$(readlink -f "$dependency")
89                case "$dependency" in
90                $pwd/*)
91                    dependency=${dependency#$pwd/}
92                    ;;
93                $builddir/*)
94                    dependency="\$(builddir)/"${dependency#$builddir/}
95                    ;;
96                esac
[1011]97
[1141]98                case "$dependency" in
[1281]99                *xc_const_string_opcodes_php*)
100                    for dependency in xcache/xc_const_string_*.h; do
101                        echo '$(srcdir)/'$dependency
102                    done
103                    ;;
104
[1141]105                /*) ;;
106                $sourceFile) ;;
107
[1324]108                xc_processor.h|\$\(builddir\)/xc_processor.h)
[1141]109                    echo '$(XCACHE_PROC_H)'
110                    ;;
[1324]111                xc_processor.c.h|\$\(builddir\)/xc_processor.c.h)
[1141]112                    echo '$(XCACHE_PROC_C)'
113                    ;;
114                *)
115                    if [[ -r $dependency ]]; then
116                        echo '$(srcdir)/'$dependency
117                    else
118                        hiecho "$dependency not found" >&2
119                    fi
120                esac
[1403]121            done | LANG=C sort | uniq
[1141]122        } | xargs
[1011]123    done > Makefile.frag.deps
[1122]124}
125# }}}1
126
[1123]127hiecho "Loading config devel/run.cfg"
[1122]128. devel/run.cfg
129PHPSDIR=${PHPSDIR:-$HOME/test}
130
131if [[ $# -eq 0 ]]; then
[1441]132    set -- "${args[@]}"
[1122]133fi
134
[1128]135basename=$(basename $(pwd))
136case "$basename" in
137*-*)
138    # in build dir, starts from src dir
[1159]139    dirs="${basename#*-}"
[1128]140    xcachesrcdir=../${basename%%-*}
141    cd $xcachesrcdir
142    ;;
143*)
144    # in src dir
145    dirs=${dirs:-php5-debug-zts}
146    xcachesrcdir=../$basename
147    ;;
[1119]148esac
149
[1128]150touch devel.pid
151svn propget svn:ignore . > .svnignore
152
153# ==========================
154
[1123]155do_phpize() { # {{{1
[1122]156    if [[ ! -x $PHPSDIR/$phpbasename/bin/phpize ]]; then
[1123]157        hiecho $PHPSDIR/$phpbasename/bin/phpize not found
[1122]158        exit
159    fi
160    export PATH=$PHPSDIR/$phpbasename/bin:$PATH
[1124]161    local pedantic=
162    case $phpbasename in
163    php5|php5.4) pedantic=-pedantic-errors;;
164    *) pedantic=-pedantic;;
165    esac
[1122]166    phpize --clean \
167    && phpize \
[1216]168    && CFLAGS="$CFLAGS -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 \
[1122]169        --enable-xcache-cacher \
170        --enable-xcache-optimizer \
171        --enable-xcache-encoder \
172        --enable-xcache-decoder \
173        --enable-xcache-disassembler \
[1416]174        --enable-xcache-assembler \
[1122]175        --enable-xcache-coverager \
176        --enable-xcache-test \
[1283]177        --enable-xcache-dprint \
[1122]178        --enable-xcache-constant
179}
[1123]180do_make() { # {{{1
181    if [[ ! -f Makefile ]]; then
182        do_phpize
183    fi
[1122]184    LANG=C $MAKE $MAKEOPTS "$@" 2>&1 \
185    | sed -ur \
186        -e 's#Werror=implicit-function-declaration#We/rror=i/mplicit-function-declaration#' \
187        -e 's#-pedantic-errors#-pedantic-e/rrors#' \
188        -e 's#\./xc_processor\.h#'$PWD'/xc_processor.h#' \
189        -e 's#\./xc_processor\.c\.h#'$PWD'/xc_processor.c.h#' \
190    | hi error implicit warn FAIL
191    ret=${PIPESTATUS[0]}
192    if [[ $ret -ne 0 ]]; then
193        exit $ret
194    fi
195}
[1128]196cleanfpm() { # {{{1
197    echo
198    stopfpm $pidfile
199}
[1122]200# }}}
[1123]201run() {
202    pidfile=$xcachesrcdir/devel.pid
[977]203
[1123]204    # prepare {{{1
[1128]205    case "$1" in
[1123]206    phpize)
207        if [[ -r Makefile ]]; then
[1294]208            $MAKE $MAKEOPTS xcachesvnclean || true
[1123]209        fi
210        ;;
211    esac
[998]212
[1123]213    rm -f php-src
[1193]214    find -L . -type d -print0 | xargs -0 rmdir -p 2>/dev/null || true
[1191]215    find -L . -type l -print0 | xargs -0 rm -fv
[1123]216    lndir "$xcachesrcdir" >/dev/null || true
[1191]217    find . -iname .\*.swp -print0 | xargs -0 rm -f
[1233]218    ln -snf ~/src/php/${phpbasename%%-*} php-src
[1123]219    for i in ~/src/php/$phpbasename/sapi/cgi/php{,-cgi}; do
220        if [[ -r $i ]]; then
221            ln -snf "$i" php-cgi
222        fi
223    done
224    ln -snf ~/src/php/$phpbasename/sapi/cli/php php-cli
[1337]225    f=~/src/php/$phpbasename/sapi/cli/php; [ -f "$f" ] && ln -snf "$f" php-cli
226    f=~/src/php/$phpbasename/sapi/fpm/php-fpm; [ -f "$f" ] && ln -snf "$f" php-fpm
[998]227
[1128]228    case "$1" in
[1532]229    phpized) CFLAGS=-DXCACHE_DEBUG do_phpize; return $?;;
[1323]230    phpize) do_phpize; return $?;;
231    make) shift; do_make "$@"; return $?;;
[1123]232    *) do_make;;
233    esac
234    # }}}1
[980]235
[1123]236    if [[ -z $1 ]]; then
[1441]237        set -- devel/sample.cpp.php
[1123]238    fi
[980]239
[1123]240    cmd=()
[1441]241    phpApp=()
[1123]242    tracer=()
[1122]243
[1123]244    # run utils {{{1
[1128]245    case "$1" in
[1123]246    retest)
[1128]247        shift
[1403]248        lastResult=$(ls php_test_results_*.txt | LANG=C sort | tail -n1)
249        $MAKE $MAKEOPTS xcachetest "$@" TESTS="$(grep '^/.*\.phpt$' $lastResult | uniq | xargs)"
[1123]250        return
[1122]251        ;;
[1123]252    test)
[1128]253        shift
[1123]254        case "$1" in
255        *.phpt)
[1294]256            $MAKE $MAKEOPTS xcachetest TEST_ARGS=-v TESTS="$*"
[1123]257            return
258            ;;
259        */)
[1294]260            $MAKE $MAKEOPTS xcachetest TESTS="$*"
[1123]261            return
262            ;;
263        *)
[1294]264            $MAKE $MAKEOPTS xcachetest
[1123]265            return
266            ;;
267        esac
268        ;;
[1122]269    esac
[1123]270    # }}}
[1128]271    # pick tracer {{{1
272    case "$1" in
273    ltr*)
274        shift
275        export USE_ZEND_ALLOC=0
276        tracer=(ltrace -s1024 -e malloc,realloc,free,write)
277        ;;
278    str*)
279        shift
280        tracer=(strace -s1024 -T)
281        ;;
282    gdb)
283        shift
284        #USE_ZEND_ALLOC=0
285        tracer=(gdb --args)
286        ;;
287    val*)
288        shift
289        export USE_ZEND_ALLOC=0
[1377]290        export ZEND_DONT_UNLOAD_MODULES=1
291        tracer=(valgrind -v --gen-suppressions=all)
[1128]292        ;;
293    esac
294
[1123]295    # pick sapi {{{1
[1159]296    case "$phpbasename" in
[1123]297    *-apache1*)
298        cmd=($HOME/apache1/bin/httpd -X)
[1048]299        ;;
[1123]300    *-apache*)
[1128]301        echo "Don't know how to run apache"
[1123]302        exit 1
[1048]303        ;;
304    *)
[1123]305        case "$1" in
[1441]306        dc)
307            shift
308            cmd=(./php-cli -c devel.ini)
309            phpApp=(./bin/phpdc.phpr)
310            ;;
[1273]311        dop)
312            shift
313            cmd=(./php-cli -c devel.ini)
[1441]314            phpApp=(./bin/phpdop.phpr)
[1273]315            ;;
[1123]316        fcgi)
[1128]317            shift
[1123]318            cmd=(./php-cgi -q -c devel.ini)
319            set -- -b 1026
320            ;;
321        fpm)
[1128]322            shift
[1123]323            cmd=(./php-fpm -c devel.ini -y devel.fpm -g $(readlink -f $pidfile))
324            set --
325            ;;
326        *)
327            cmd=(./php-cgi -q -c devel.ini)
328            ;;
329        esac
330
331        "${cmd[@]}" -v || true
332    esac
[1048]333
[1441]334    # hack sample.cpp.php {{{1
335    case "$1" in
336    *.cpp.php)
337        < "$1" \
338        sed -r -e 's#__#____#g' \
339        | cpp -C -P -traditional-cpp -DPHP_VERSION=$phpVersion \
340        | sed -r -e 's#^ +##g' -e 's#\t +#\t#g' -e 's#____#__#g' > devel.php || exit $?
341        shift
342        set -- devel.php "$@"
343        ;;
344    esac
345
[1123]346    # run {{{1
[1441]347    set -- "${tracer[@]}" "${cmd[@]}" "${phpApp[@]}" "$@"
[977]348
[1123]349    case "${cmd[0]}" in
350    *php-fpm*)
[1128]351        stopfpm
[1441]352        hiecho Starting fpm "$@" ...
353        "$@" | tee output.php
[1128]354        echo -n "Ctrl-C to stop"
355        trap cleanfpm SIGINT SIGTERM exit
356        cat > /dev/null || true
357        stopfpm
[1441]358        return
[1123]359        ;;
360    *)
[1441]361        hiecho "$@"
[1485]362        case "${tracer[@]}" in
363        gdb*|val*)
364            "$@"
365            ;;
366        *)
367            "$@" | tee output.php
368            ;;
369        esac
[1123]370        ;;
371    esac
372    # }}}
373}
[1119]374
[1128]375for phpbasename in "${dirs[@]}"; do
[1334]376    phpVersion=${phpbasename%%-*}
377    phpVersion=${phpVersion##php}
378    phpVersion=${phpVersion/./}
379    case "$phpVersion" in
380    ??) phpVersion="${phpVersion}0";;
381    ?) phpVersion="${phpVersion}00";;
382    esac
383
[1312]384    # devel actions
385    case "$1" in
386    prep*) shift; prep "$@"; exit;;
387    tags) shift; rm -f tags; prep tags "$@"; exit;;
388    po2php) po2php; exit;;
389    mergepo) mergepo; exit;;
390    dep*) updatedeps; exit;;
391    xtest) xtest; exit;;
392    stopfpm) stopfpm devel.pid; exit;;
393    esac
394
[1159]395    mkdir -p ${xcachesrcdir}-${phpbasename}
396    cd ${xcachesrcdir}-${phpbasename} || exit
[1128]397    lndir ${xcachesrcdir} >/dev/null || true
398
399    pwd
[1123]400    run "$@"
[1128]401done
Note: See TracBrowser for help on using the repository browser.