source: trunk/devel/run @ 1283

Last change on this file since 1283 was 1283, checked in by moo, 18 months ago

add dependency for test/dprint/debug

  • Property svn:executable set to *
File size: 7.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
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
42    $MAKE -f devel/test.mak
43}
[977]44
[1122]45prep() { # {{{1
46    $MAKE -f devel/prepare.mak "$@"
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
[1018]77    find . -iname \*.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
[1283]87            for dependency in $(gcc -DHAVE_XCACHE_TEST -DHAVE_XCACHE_DPRINT -DXCACHE_DEBUG -MM $sourceFile -I$HOME/test/php5-debug-zts/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
108                \$\(builddir\)/xc_processor.h)
109                    echo '$(XCACHE_PROC_H)'
110                    ;;
111                \$\(builddir\)/xc_processor.c.h)
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
121            done | sort | uniq
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
[1138]132    set -- $action "${args[@]}"
[1122]133fi
134
135# devel actions
[1128]136case "$1" in
137prep*) shift; prep "$@"; exit;;
138tags) shift; rm -f tags; prep tags "$@"; exit;;
[1122]139po2php) po2php; exit;;
140mergepo) mergepo; exit;;
141dep*) updatedeps; exit;;
142xtest) xtest; exit;;
[1128]143stopfpm) stopfpm devel.pid; exit;;
[988]144esac
145
[1128]146basename=$(basename $(pwd))
147case "$basename" in
148*-*)
149    # in build dir, starts from src dir
[1159]150    dirs="${basename#*-}"
[1128]151    xcachesrcdir=../${basename%%-*}
152    cd $xcachesrcdir
153    ;;
154*)
155    # in src dir
156    dirs=${dirs:-php5-debug-zts}
157    xcachesrcdir=../$basename
158    ;;
[1119]159esac
160
[1128]161touch devel.pid
162svn propget svn:ignore . > .svnignore
163
164# ==========================
165
[1123]166do_phpize() { # {{{1
[1122]167    if [[ ! -x $PHPSDIR/$phpbasename/bin/phpize ]]; then
[1123]168        hiecho $PHPSDIR/$phpbasename/bin/phpize not found
[1122]169        exit
170    fi
171    export PATH=$PHPSDIR/$phpbasename/bin:$PATH
[1124]172    local pedantic=
173    case $phpbasename in
174    php5|php5.4) pedantic=-pedantic-errors;;
175    *) pedantic=-pedantic;;
176    esac
[1122]177    phpize --clean \
178    && phpize \
[1216]179    && 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]180        --enable-xcache-cacher \
181        --enable-xcache-optimizer \
182        --enable-xcache-encoder \
183        --enable-xcache-decoder \
184        --enable-xcache-disassembler \
185        --enable-xcache-coverager \
186        --enable-xcache-test \
[1283]187        --enable-xcache-dprint \
[1122]188        --enable-xcache-constant
189}
[1123]190do_make() { # {{{1
191    if [[ ! -f Makefile ]]; then
192        do_phpize
193    fi
[1122]194    LANG=C $MAKE $MAKEOPTS "$@" 2>&1 \
195    | sed -ur \
196        -e 's#Werror=implicit-function-declaration#We/rror=i/mplicit-function-declaration#' \
197        -e 's#-pedantic-errors#-pedantic-e/rrors#' \
198        -e 's#\./xc_processor\.h#'$PWD'/xc_processor.h#' \
199        -e 's#\./xc_processor\.c\.h#'$PWD'/xc_processor.c.h#' \
200    | hi error implicit warn FAIL
201    ret=${PIPESTATUS[0]}
202    if [[ $ret -ne 0 ]]; then
203        exit $ret
204    fi
205}
[1128]206cleanfpm() { # {{{1
207    echo
208    stopfpm $pidfile
209}
[1122]210# }}}
[1123]211run() {
212    pidfile=$xcachesrcdir/devel.pid
[977]213
[1123]214    # prepare {{{1
[1128]215    case "$1" in
[1123]216    phpize)
217        if [[ -r Makefile ]]; then
218            $MAKE xcachesvnclean || true
219        fi
220        ;;
221    esac
[998]222
[1123]223    rm -f php-src
[1193]224    find -L . -type d -print0 | xargs -0 rmdir -p 2>/dev/null || true
[1191]225    find -L . -type l -print0 | xargs -0 rm -fv
[1123]226    lndir "$xcachesrcdir" >/dev/null || true
[1191]227    find . -iname .\*.swp -print0 | xargs -0 rm -f
[1233]228    ln -snf ~/src/php/${phpbasename%%-*} php-src
[1123]229    for i in ~/src/php/$phpbasename/sapi/cgi/php{,-cgi}; do
230        if [[ -r $i ]]; then
231            ln -snf "$i" php-cgi
232        fi
233    done
234    ln -snf ~/src/php/$phpbasename/sapi/cli/php php-cli
235    ln -snf ~/src/php/$phpbasename/sapi/fpm/php-fpm php-fpm
[998]236
[1128]237    case "$1" in
[1123]238    phpize) do_phpize; exit;;
[1130]239    make) shift; do_make "$@"; exit;;
[1123]240    *) do_make;;
241    esac
242    # }}}1
[980]243
[1123]244    if [[ -z $1 ]]; then
245        set -- devel.php
246    fi
[980]247
[1123]248    cmd=()
249    tracer=()
[1122]250
[1123]251    # run utils {{{1
[1128]252    case "$1" in
[1123]253    dc)
[1128]254        shift
[1123]255        ./php-cli -c devel.ini ./bin/phpdc.phpr $@ | tee decompiled.php
256        return
[1122]257        ;;
[1123]258    retest)
[1128]259        shift
[1123]260        $MAKE xcachetest "$@" TESTS="`grep '^/.*\.phpt$' php_test_results_*.txt | uniq | xargs`"
261        return
[1122]262        ;;
[1123]263    test)
[1128]264        shift
[1123]265        case "$1" in
266        *.phpt)
267            $MAKE xcachetest TEST_ARGS=-v TESTS="$*"
268            return
269            ;;
270        */)
271            $MAKE xcachetest TESTS="$*"
272            return
273            ;;
274        *)
275            $MAKE xcachetest
276            return
277            ;;
278        esac
279        ;;
[1122]280    esac
[1123]281    # }}}
[1128]282    # pick tracer {{{1
283    case "$1" in
284    ltr*)
285        shift
286        export USE_ZEND_ALLOC=0
287        tracer=(ltrace -s1024 -e malloc,realloc,free,write)
288        ;;
289    str*)
290        shift
291        tracer=(strace -s1024 -T)
292        ;;
293    gdb)
294        shift
295        #USE_ZEND_ALLOC=0
296        tracer=(gdb --args)
297        ;;
298    val*)
299        shift
300        export USE_ZEND_ALLOC=0
301        tracer=(valgrind --gen-suppressions=all)
302        ;;
303    esac
304
[1123]305    # pick sapi {{{1
[1159]306    case "$phpbasename" in
[1123]307    *-apache1*)
308        cmd=($HOME/apache1/bin/httpd -X)
[1048]309        ;;
[1123]310    *-apache*)
[1128]311        echo "Don't know how to run apache"
[1123]312        exit 1
[1048]313        ;;
314    *)
[1123]315        case "$1" in
[1273]316        dop)
317            shift
318            cmd=(./php-cli -c devel.ini)
319            set -- ./bin/phpdop.phpr "$@"
320            ;;
[1123]321        fcgi)
[1128]322            shift
[1123]323            cmd=(./php-cgi -q -c devel.ini)
324            set -- -b 1026
325            ;;
326        fpm)
[1128]327            shift
[1123]328            cmd=(./php-fpm -c devel.ini -y devel.fpm -g $(readlink -f $pidfile))
329            set --
330            ;;
331        *)
332            cmd=(./php-cgi -q -c devel.ini)
333            ;;
334        esac
335
336        "${cmd[@]}" -v || true
337    esac
[1048]338
[1123]339    # run {{{1
340    commandLine=("${tracer[@]}" "${cmd[@]}" "$@")
[977]341
[1123]342    case "${cmd[0]}" in
343    *php-fpm*)
[1128]344        stopfpm
[1138]345        hiecho Starting fpm "${commandLine[@]}" ...
[1123]346        "${commandLine[@]}"
[1128]347        echo -n "Ctrl-C to stop"
348        trap cleanfpm SIGINT SIGTERM exit
349        cat > /dev/null || true
350        stopfpm
[1123]351        ;;
352    *)
[1138]353        hiecho "${commandLine[@]}"
[1123]354        "${commandLine[@]}"
355        ;;
356    esac
357    # }}}
358}
[1119]359
[1128]360for phpbasename in "${dirs[@]}"; do
[1159]361    mkdir -p ${xcachesrcdir}-${phpbasename}
362    cd ${xcachesrcdir}-${phpbasename} || exit
[1128]363    lndir ${xcachesrcdir} >/dev/null || true
364
365    pwd
[1123]366    run "$@"
[1128]367done
Note: See TracBrowser for help on using the repository browser.