source: trunk/devel/run @ 1122

Last change on this file since 1122 was 1122, checked in by moo, 2 years ago

devel: cleanup run

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