source: trunk/devel/run

Last change on this file was 1579, checked in by moo, 5 weeks ago

revert wrong change

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