source: trunk/devel/run @ 1159

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

fix build inside build dir for devel

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