source: trunk/devel/run @ 1120

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

devel: update run

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