source: trunk/devel/run @ 1138

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

refactor: clean up code

  • Property svn:executable set to *
File size: 6.6 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#./}
[1015]79        case "$sourceFile" in
80        includes.c)
81            echo -n "\$(XCACHE_INCLUDES_I) "
82            ;;
83        esac
[1011]84        echo -n "\$(builddir)/${sourceFile%.c}.lo:"
[1096]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
[1011]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
[1123]109                    hiecho "$dependency not found" >&2
[1011]110                fi
111            esac
112        done
113        echo
114    done > Makefile.frag.deps
[1122]115}
116# }}}1
117
[1123]118hiecho "Loading config devel/run.cfg"
[1122]119. devel/run.cfg
120PHPSDIR=${PHPSDIR:-$HOME/test}
121
122if [[ $# -eq 0 ]]; then
[1138]123    set -- $action "${args[@]}"
[1122]124fi
125
126# devel actions
[1128]127case "$1" in
128prep*) shift; prep "$@"; exit;;
129tags) shift; rm -f tags; prep tags "$@"; exit;;
[1122]130po2php) po2php; exit;;
131mergepo) mergepo; exit;;
132dep*) updatedeps; exit;;
133xtest) xtest; exit;;
[1128]134stopfpm) stopfpm devel.pid; exit;;
[988]135esac
136
[1128]137basename=$(basename $(pwd))
138case "$basename" in
139*-*)
140    # in build dir, starts from src dir
141    dirs="$basename"
142    xcachesrcdir=../${basename%%-*}
143    cd $xcachesrcdir
144    ;;
145*)
146    # in src dir
147    dirs=${dirs:-php5-debug-zts}
148    xcachesrcdir=../$basename
149    ;;
[1119]150esac
151
[1128]152touch devel.pid
153svn propget svn:ignore . > .svnignore
154
155# ==========================
156
[1123]157do_phpize() { # {{{1
[1122]158    if [[ ! -x $PHPSDIR/$phpbasename/bin/phpize ]]; then
[1123]159        hiecho $PHPSDIR/$phpbasename/bin/phpize not found
[1122]160        exit
161    fi
162    export PATH=$PHPSDIR/$phpbasename/bin:$PATH
[1124]163    local pedantic=
164    case $phpbasename in
165    php5|php5.4) pedantic=-pedantic-errors;;
166    *) pedantic=-pedantic;;
167    esac
[1122]168    phpize --clean \
169    && phpize \
[1124]170    && 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 \
[1122]171        --enable-xcache-cacher \
172        --enable-xcache-optimizer \
173        --enable-xcache-encoder \
174        --enable-xcache-decoder \
175        --enable-xcache-disassembler \
176        --enable-xcache-coverager \
177        --enable-xcache-test \
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
208            $MAKE xcachesvnclean || true
209        fi
210        ;;
211    esac
[998]212
[1123]213    rm -f php-src
214    find -L . -type l | xargs rm -fv
215    lndir "$xcachesrcdir" >/dev/null || true
216    find . -iname .\*.swp | xargs rm -f
217    ln -snf ~/src/php/$phpbasename php-src
218    for i in ~/src/php/$phpbasename/sapi/cgi/php{,-cgi}; do
219        if [[ -r $i ]]; then
220            ln -snf "$i" php-cgi
221        fi
222    done
223    ln -snf ~/src/php/$phpbasename/sapi/cli/php php-cli
224    ln -snf ~/src/php/$phpbasename/sapi/fpm/php-fpm php-fpm
[998]225
[1128]226    case "$1" in
[1123]227    phpize) do_phpize; exit;;
[1130]228    make) shift; do_make "$@"; exit;;
[1123]229    *) do_make;;
230    esac
231    # }}}1
[980]232
[1123]233    if [[ -z $1 ]]; then
234        set -- devel.php
235    fi
[980]236
[1123]237    cmd=()
238    tracer=()
[1122]239
[1123]240    # run utils {{{1
[1128]241    case "$1" in
[1123]242    dc)
[1128]243        shift
[1123]244        ./php-cli -c devel.ini ./bin/phpdc.phpr $@ | tee decompiled.php
245        return
[1122]246        ;;
[1123]247    dop)
[1128]248        shift
[1123]249        ./php-cli -c devel.ini ./bin/phpdop.phpr $@
250        return
[1122]251        ;;
[1123]252    retest)
[1128]253        shift
[1123]254        $MAKE xcachetest "$@" TESTS="`grep '^/.*\.phpt$' php_test_results_*.txt | uniq | xargs`"
255        return
[1122]256        ;;
[1123]257    test)
[1128]258        shift
[1123]259        case "$1" in
260        *.phpt)
261            $MAKE xcachetest TEST_ARGS=-v TESTS="$*"
262            return
263            ;;
264        */)
265            $MAKE xcachetest TESTS="$*"
266            return
267            ;;
268        *)
269            $MAKE xcachetest
270            return
271            ;;
272        esac
273        ;;
[1122]274    esac
[1123]275    # }}}
[1128]276    # pick tracer {{{1
277    case "$1" in
278    ltr*)
279        shift
280        export USE_ZEND_ALLOC=0
281        tracer=(ltrace -s1024 -e malloc,realloc,free,write)
282        ;;
283    str*)
284        shift
285        tracer=(strace -s1024 -T)
286        ;;
287    gdb)
288        shift
289        #USE_ZEND_ALLOC=0
290        tracer=(gdb --args)
291        ;;
292    val*)
293        shift
294        export USE_ZEND_ALLOC=0
295        tracer=(valgrind --gen-suppressions=all)
296        ;;
297    esac
298
[1123]299    # pick sapi {{{1
300    case "$basename" in
301    *-apache1*)
302        cmd=($HOME/apache1/bin/httpd -X)
[1048]303        ;;
[1123]304    *-apache*)
[1128]305        echo "Don't know how to run apache"
[1123]306        exit 1
[1048]307        ;;
308    *)
[1123]309        case "$1" in
310        fcgi)
[1128]311            shift
[1123]312            cmd=(./php-cgi -q -c devel.ini)
313            set -- -b 1026
314            ;;
315        fpm)
[1128]316            shift
[1123]317            cmd=(./php-fpm -c devel.ini -y devel.fpm -g $(readlink -f $pidfile))
318            set --
319            ;;
320        *)
321            cmd=(./php-cgi -q -c devel.ini)
322            ;;
323        esac
324
325        "${cmd[@]}" -v || true
326    esac
[1048]327
[1123]328    # run {{{1
329    commandLine=("${tracer[@]}" "${cmd[@]}" "$@")
[977]330
[1123]331    case "${cmd[0]}" in
332    *php-fpm*)
[1128]333        stopfpm
[1138]334        hiecho Starting fpm "${commandLine[@]}" ...
[1123]335        "${commandLine[@]}"
[1128]336        echo -n "Ctrl-C to stop"
337        trap cleanfpm SIGINT SIGTERM exit
338        cat > /dev/null || true
339        stopfpm
[1123]340        ;;
341    *)
[1138]342        hiecho "${commandLine[@]}"
[1123]343        "${commandLine[@]}"
344        ;;
345    esac
346    # }}}
347}
[1119]348
[1128]349for phpbasename in "${dirs[@]}"; do
350    mkdir -p ../${basename}-${phpbasename}
351    cd ../${basename}-${phpbasename} || exit
352    lndir ${xcachesrcdir} >/dev/null || true
353
354    pwd
[1123]355    run "$@"
[1128]356done
Note: See TracBrowser for help on using the repository browser.