source: trunk/devel/run @ 1125

Last change on this file since 1125 was 1125, checked in by moo, 21 months ago

move api warning to diagnosis

  • Property svn:executable set to *
File size: 6.5 KB
Line 
1#!/bin/bash
2# this script is for developers only
3
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
31stopfpm() { # {{{1
32    if [[ -f $1 ]]; then
33        local pid=`cat $1 2>/dev/null || true`
34        if [[ $pid -gt 0 ]]; then
35            hiecho Stopping fpm $pid @ $1
36            kill $pid || true
37        fi
38    fi
39}
40
41xtest() { # {{{1
42    $MAKE -f devel/test.mak
43}
44
45prep() { # {{{1
46    $MAKE -f devel/prepare.mak "$@"
47}
48
49mergepo() { # {{{1
50    prep
51    local i
52    find htdocs -iname '*.po' | while read -r i; do
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
64        phpfile=${i/.po/.php}
65        devel/po2php.awk < $i > $phpfile.tmp
66        mv $phpfile.tmp $phpfile
67    done
68}
69
70updatedeps() { # {{{1
71    pwd=$(readlink -f "$(pwd)")
72    builddir=$(readlink -f ../trunk-php5-debug-zts)
73    if [[ -z $builddir ]]; then
74        hiecho required ../trunk-php5-debug-zts not found
75        return 1
76    fi
77    find . -iname \*.c | sort | while read -r sourceFile; do
78        sourceFile=${sourceFile#./}
79        case "$sourceFile" in
80        includes.c)
81            echo -n "\$(XCACHE_INCLUDES_I) "
82            ;;
83        esac
84        echo -n "\$(builddir)/${sourceFile%.c}.lo:"
85        for dependency in $(gcc -M $sourceFile -I$HOME/test/php5-debug-zts/include/php/{,main,Zend,TSRM} -I. -I${builddir} -MG | sed 's#.*:##g' | sed 's#\\##g'); do
86            dependency=$(readlink -f "$dependency")
87            case "$dependency" in
88            $pwd/*)
89                dependency=${dependency#$pwd/}
90                ;;
91            $builddir/*)
92                dependency="\$(builddir)/"${dependency#$builddir/}
93                ;;
94            esac
95
96            case "$dependency" in
97            /*) ;;
98            $sourceFile) ;;
99            \$\(builddir\)/xc_processor.h)
100                echo -n " \$(XCACHE_PROC_H)"
101                ;;
102            \$\(builddir\)/xc_processor.c.h)
103                echo -n " \$(XCACHE_PROC_C)"
104                ;;
105            *)
106                if [[ -r $dependency ]]; then
107                    echo -n " \$(srcdir)/$dependency"
108                else
109                    hiecho "$dependency not found" >&2
110                fi
111            esac
112        done
113        echo
114    done > Makefile.frag.deps
115}
116# }}}1
117
118hiecho "Loading config devel/run.cfg"
119. devel/run.cfg
120PHPSDIR=${PHPSDIR:-$HOME/test}
121
122if [[ $# -eq 0 ]]; then
123    set -- "$action" "${args[@]}"
124fi
125
126if [[ $# -gt 0 ]]; then
127    action=$1
128    shift
129fi
130
131# devel actions
132case "$action" in
133prep*) prep "$@"; exit;;
134tags) rm -f tags; prep tags "$@"; exit;;
135po2php) po2php; exit;;
136mergepo) mergepo; exit;;
137dep*) updatedeps; exit;;
138xtest) xtest; exit;;
139esac
140
141case "$1" in
142fpm) stopfpm devel.pid;;
143stopfpm) stopfpm devel.pid; exit;;
144esac
145
146do_phpize() { # {{{1
147    if [[ ! -x $PHPSDIR/$phpbasename/bin/phpize ]]; then
148        hiecho $PHPSDIR/$phpbasename/bin/phpize not found
149        exit
150    fi
151    export PATH=$PHPSDIR/$phpbasename/bin:$PATH
152    local pedantic=
153    case $phpbasename in
154    php5|php5.4) pedantic=-pedantic-errors;;
155    *) pedantic=-pedantic;;
156    esac
157    phpize --clean \
158    && phpize \
159    && CFLAGS="-g -O0 $pedanti -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 \
160        --enable-xcache-cacher \
161        --enable-xcache-optimizer \
162        --enable-xcache-encoder \
163        --enable-xcache-decoder \
164        --enable-xcache-disassembler \
165        --enable-xcache-coverager \
166        --enable-xcache-test \
167        --enable-xcache-constant
168}
169do_make() { # {{{1
170    if [[ ! -f Makefile ]]; then
171        do_phpize
172    fi
173    LANG=C $MAKE $MAKEOPTS "$@" 2>&1 \
174    | sed -ur \
175        -e 's#Werror=implicit-function-declaration#We/rror=i/mplicit-function-declaration#' \
176        -e 's#-pedantic-errors#-pedantic-e/rrors#' \
177        -e 's#\./xc_processor\.h#'$PWD'/xc_processor.h#' \
178        -e 's#\./xc_processor\.c\.h#'$PWD'/xc_processor.c.h#' \
179    | hi error implicit warn FAIL
180    ret=${PIPESTATUS[0]}
181    if [[ $ret -ne 0 ]]; then
182        exit $ret
183    fi
184}
185# }}}
186run() {
187    pidfile=$xcachesrcdir/devel.pid
188
189    # prepare {{{1
190    case "$action" in
191    phpize)
192        if [[ -r Makefile ]]; then
193            $MAKE xcachesvnclean || true
194        fi
195        ;;
196    esac
197
198    rm -f php-src
199    find -L . -type l | xargs rm -fv
200    lndir "$xcachesrcdir" >/dev/null || true
201    find . -iname .\*.swp | xargs rm -f
202    ln -snf ~/src/php/$phpbasename php-src
203    for i in ~/src/php/$phpbasename/sapi/cgi/php{,-cgi}; do
204        if [[ -r $i ]]; then
205            ln -snf "$i" php-cgi
206        fi
207    done
208    ln -snf ~/src/php/$phpbasename/sapi/cli/php php-cli
209    ln -snf ~/src/php/$phpbasename/sapi/fpm/php-fpm php-fpm
210
211    case "$action" in
212    phpize) do_phpize; exit;;
213    make) do_make "$@"; exit;;
214    *) do_make;;
215    esac
216    # }}}1
217
218    if [[ -z $1 ]]; then
219        set -- devel.php
220    fi
221
222    cmd=()
223    tracer=()
224
225    # run utils {{{1
226    case "$action" in
227    dc)
228        ./php-cli -c devel.ini ./bin/phpdc.phpr $@ | tee decompiled.php
229        return
230        ;;
231    dop)
232        ./php-cli -c devel.ini ./bin/phpdop.phpr $@
233        return
234        ;;
235    retest)
236        $MAKE xcachetest "$@" TESTS="`grep '^/.*\.phpt$' php_test_results_*.txt | uniq | xargs`"
237        return
238        ;;
239    test)
240        case "$1" in
241        *.phpt)
242            $MAKE xcachetest TEST_ARGS=-v TESTS="$*"
243            return
244            ;;
245        */)
246            $MAKE xcachetest TESTS="$*"
247            return
248            ;;
249        *)
250            $MAKE xcachetest
251            return
252            ;;
253        esac
254        ;;
255    esac
256    # }}}
257    # pick sapi {{{1
258    case "$basename" in
259    *-apache1*)
260        cmd=($HOME/apache1/bin/httpd -X)
261        ;;
262    *-apache*)
263        exit 1
264        ;;
265    *)
266        case "$1" in
267        fcgi)
268            cmd=(./php-cgi -q -c devel.ini)
269            set -- -b 1026
270            ;;
271        fpm)
272            cmd=(./php-fpm -c devel.ini -y devel.fpm -g $(readlink -f $pidfile))
273            set --
274            ;;
275        *)
276            cmd=(./php-cgi -q -c devel.ini)
277            ;;
278        esac
279
280        "${cmd[@]}" -v || true
281    esac
282    # }}}
283    # pick action {{{1
284    case "$action" in
285    ltr*)
286        export USE_ZEND_ALLOC=0
287        tracer=(ltrace -s1024 -e malloc,realloc,free,write)
288        ;;
289    str*)
290        tracer=(strace -s1024 -T)
291        ;;
292    gdb)
293        #USE_ZEND_ALLOC=0
294        tracer=(gdb --args)
295        ;;
296    val*)
297        export USE_ZEND_ALLOC=0
298        tracer=(valgrind --gen-suppressions=all)
299        ;;
300    esac
301
302    # run {{{1
303    commandLine=("${tracer[@]}" "${cmd[@]}" "$@")
304
305    case "${cmd[0]}" in
306    *php-fpm*)
307        hiecho Starting fpm ...
308        "${commandLine[@]}"
309        # echo -n "Ctrl-C to stop"
310    cleanfpm() {
311        echo
312        stopfpm $pidfile
313    }
314        # trap stopfpm SIGINT SIGTERM exit
315        # cat > /dev/null || true
316        # stopfpm
317        ;;
318    *)
319        "${commandLine[@]}"
320        ;;
321    esac
322    # }}}
323}
324
325# process each $dirs
326basename=$(basename $(pwd))
327if echo $basename | grep -- - >/dev/null; then
328    phpbasename=${basename#*-}
329    xcachesrcdir=../${basename%%-*}
330    run "$@"
331else
332    svn propget svn:ignore . > .svnignore
333
334    dirs=${dirs:-php5-debug-zts}
335    xcachesrcdir=../$basename
336    for phpbasename in $dirs; do
337        mkdir -p ../${basename}-${phpbasename}
338        cd ../${basename}-${phpbasename} || exit
339        lndir ${xcachesrcdir} >/dev/null || true
340
341        pwd
342        run "$@"
343    done
344fi
Note: See TracBrowser for help on using the repository browser.