Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
98f4e39e
Commit
98f4e39e
authored
Jan 13, 2012
by
Antoine Pitrou
Browse files
Options
Browse Files
Download
Plain Diff
Issue #13764: remove outdated script Misc/build.sh
parents
bc3b6829
fffbfbd3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
281 deletions
+0
-281
Misc/build.sh
Misc/build.sh
+0
-281
No files found.
Misc/build.sh
deleted
100755 → 0
View file @
bc3b6829
#!/bin/sh
## Script to build and test the latest python from svn. It basically
## does this:
## svn up ; ./configure ; make ; make test ; make install ; cd Doc ; make
##
## Logs are kept and rsync'ed to the webhost. If there are test failure(s),
## information about the failure(s) is mailed.
##
## The user must be a member of the webmaster group locally and on webhost.
##
## This script is run on the PSF's machine as user neal via crontab.
##
## Yes, this script would probably be easier in python, but then
## there's a bootstrap problem. What if Python doesn't build?
##
## This script should be fairly clean Bourne shell, ie not too many
## bash-isms. We should try to keep it portable to other Unixes.
## Even though it will probably only run on Linux. I'm sure there are
## several GNU-isms currently (date +%s and readlink).
##
## Perhaps this script should be broken up into 2 (or more) components.
## Building doc is orthogonal to the rest of the python build/test.
##
## FIXME: we should detect test hangs (eg, if they take more than 45 minutes)
## FIXME: we should run valgrind
## FIXME: we should run code coverage
## Utilities invoked in this script include:
## basename, date, dirname, expr, grep, readlink, uname
## cksum, make, mutt, rsync, svn
## remember where did we started from
DIR
=
`
dirname
$0
`
if
[
"
$DIR
"
=
""
]
;
then
DIR
=
"."
fi
## make directory absolute
DIR
=
`
readlink
-f
$DIR
`
FULLPATHNAME
=
"
$DIR
/
`
basename
$0
`
"
## we want Misc/..
DIR
=
`
dirname
$DIR
`
## Configurable options
FAILURE_SUBJECT
=
"Python Regression Test Failures"
#FAILURE_MAILTO="YOUR_ACCOUNT@gmail.com"
FAILURE_MAILTO
=
"python-checkins@python.org"
#FAILURE_CC="optional--uncomment and set to desired address"
REMOTE_SYSTEM
=
"neal@dinsdale.python.org"
REMOTE_DIR
=
"/data/ftp.python.org/pub/docs.python.org/dev/py3k"
RESULT_FILE
=
"
$DIR
/build/index.html"
INSTALL_DIR
=
"/tmp/python-test-3.2/local"
RSYNC_OPTS
=
"-C -e ssh -rlogD"
# Always run the installed version of Python.
PYTHON
=
$INSTALL_DIR
/bin/python
# Python options and regression test program that should always be run.
REGRTEST_ARGS
=
"-E
$INSTALL_DIR
/lib/python3.0/test/regrtest.py"
REFLOG
=
"build/reflog.txt.out"
# These tests are not stable and falsely report leaks sometimes.
# The entire leak report will be mailed if any test not in this list leaks.
# Note: test_XXX (none currently) really leak, but are disabled
# so we don't send spam. Any test which really leaks should only
# be listed here if there are also test cases under Lib/test/leakers.
LEAKY_TESTS
=
"test_(asynchat|cmd_line|docxmlrpc|dumbdbm|file|ftplib|httpservers|imaplib|popen2|socket|smtplib|sys|telnetlib|threadedtempfile|threading|threadsignals|xmlrpc)"
# These tests always fail, so skip them so we don't get false positives.
_ALWAYS_SKIP
=
""
ALWAYS_SKIP
=
"-x
$_ALWAYS_SKIP
"
# Skip these tests altogether when looking for leaks. These tests
# do not need to be stored above in LEAKY_TESTS too.
# test_logging causes hangs, skip it.
# KBK 21Apr09: test_httpservers causes hangs, skip for now.
LEAKY_SKIPS
=
"-x test_compiler test_logging test_httpservers"
# Change this flag to "yes" for old releases to only update/build the docs.
BUILD_DISABLED
=
"no"
## utility functions
current_time
()
{
date
+%s
}
update_status
()
{
now
=
`
current_time
`
time
=
`
expr
$now
-
$3
`
echo
"<li><a href=
\"
$2
\"
>
$1
</a> <font size=
\"
-1
\"
>(
$time
seconds)</font></li>"
>>
$RESULT_FILE
}
place_summary_first
()
{
testf
=
$1
sed
-n
'/^[0-9][0-9]* tests OK\./,$p'
<
$testf
\
| egrep
-v
'\[[0-9]+ refs\]'
>
$testf
.tmp
echo
""
>>
$testf
.tmp
cat
$testf
>>
$testf
.tmp
mv
$testf
.tmp
$testf
}
count_failures
()
{
testf
=
$1
n
=
`
grep
-ic
" failed:"
$testf
`
if
[
$n
-eq
1
]
;
then
n
=
`
grep
" failed:"
$testf
|
sed
-e
's/ .*//'
`
fi
echo
$n
}
mail_on_failure
()
{
if
[
"
$NUM_FAILURES
"
!=
"0"
]
;
then
dest
=
$FAILURE_MAILTO
# FAILURE_CC is optional.
if
[
"
$FAILURE_CC
"
!=
""
]
;
then
dest
=
"
$dest
-c
$FAILURE_CC
"
fi
if
[
"x
$3
"
!=
"x"
]
;
then
(
echo
"More important issues:"
echo
"----------------------"
egrep
-v
"
$3
"
<
$2
echo
""
echo
"Less important issues:"
echo
"----------------------"
egrep
"
$3
"
<
$2
)
else
cat
$2
fi
| mutt
-s
"
$FAILURE_SUBJECT
$1
(
$NUM_FAILURES
)"
$dest
fi
}
## setup
cd
$DIR
make clobber
>
/dev/null 2>&1
cp
-p
Modules/Setup.dist Modules/Setup
# But maybe there was no Makefile - we are only building docs. Clear build:
rm
-rf
build/
mkdir
-p
build
rm
-rf
$INSTALL_DIR
## get the path we are building
repo_path
=
$(
grep
"url="
.svn/entries |
sed
-e
s/
\\
W
*
url
=
//
-e
s/
\"
//g
)
## create results file
TITLE
=
"Automated Python Build Results"
echo
"<html>"
>>
$RESULT_FILE
echo
" <head>"
>>
$RESULT_FILE
echo
" <title>
$TITLE
</title>"
>>
$RESULT_FILE
echo
" <meta http-equiv=
\"
refresh
\"
content=
\"
43200
\"
>"
>>
$RESULT_FILE
echo
" </head>"
>>
$RESULT_FILE
echo
"<body>"
>>
$RESULT_FILE
echo
"<h2>Automated Python Build Results</h2>"
>>
$RESULT_FILE
echo
"<table>"
>>
$RESULT_FILE
echo
" <tr>"
>>
$RESULT_FILE
echo
" <td>Built on:</td><td>
`
date
`
</td>"
>>
$RESULT_FILE
echo
" </tr><tr>"
>>
$RESULT_FILE
echo
" <td>Hostname:</td><td>
`
uname
-n
`
</td>"
>>
$RESULT_FILE
echo
" </tr><tr>"
>>
$RESULT_FILE
echo
" <td>Platform:</td><td>
`
uname
-srmpo
`
</td>"
>>
$RESULT_FILE
echo
" </tr><tr>"
>>
$RESULT_FILE
echo
" <td>URL:</td><td>
$repo_path
</td>"
>>
$RESULT_FILE
echo
" </tr>"
>>
$RESULT_FILE
echo
"</table>"
>>
$RESULT_FILE
echo
"<ul>"
>>
$RESULT_FILE
## update, build, and test
ORIG_CHECKSUM
=
`
cksum
$FULLPATHNAME
`
F
=
svn-update.out
start
=
`
current_time
`
svn update
>
& build/
$F
err
=
$?
update_status
"Updating"
"
$F
"
$start
if
[
$err
=
0
-a
"
$BUILD_DISABLED
"
!=
"yes"
]
;
then
## FIXME: we should check if this file has changed.
## If it has changed, we should re-run the script to pick up changes.
if
[
"
$ORIG_CHECKSUM
"
!=
"
$ORIG_CHECKSUM
"
]
;
then
exec
$FULLPATHNAME
$@
fi
F
=
svn-stat.out
start
=
`
current_time
`
svn
stat
>
& build/
$F
## ignore some of the diffs
NUM_DIFFS
=
`
egrep
-vc
'^. (@test|db_home|Lib/test/(regrtest\.py|db_home))$'
build/
$F
`
update_status
"svn stat (
$NUM_DIFFS
possibly important diffs)"
"
$F
"
$start
F
=
configure.out
start
=
`
current_time
`
./configure
--prefix
=
$INSTALL_DIR
--with-pydebug
>
& build/
$F
err
=
$?
update_status
"Configuring"
"
$F
"
$start
if
[
$err
=
0
]
;
then
F
=
make.out
start
=
`
current_time
`
make
>
& build/
$F
err
=
$?
warnings
=
`
grep
warning build/
$F
| egrep
-vc
"te?mpnam(_r|)' is dangerous,"
`
update_status
"Building (
$warnings
warnings)"
"
$F
"
$start
if
[
$err
=
0
]
;
then
## make install
F
=
make-install.out
start
=
`
current_time
`
make
install
>
& build/
$F
update_status
"Installing"
"
$F
"
$start
if
[
!
-x
$PYTHON
]
;
then
ln
-s
${
PYTHON
}
3.
*
$PYTHON
fi
## make and run basic tests
F
=
make-test.out
start
=
`
current_time
`
$PYTHON
$REGRTEST_ARGS
-W
-u
urlfetch
>
& build/
$F
NUM_FAILURES
=
`
count_failures build/
$F
`
place_summary_first build/
$F
update_status
"Testing basics (
$NUM_FAILURES
failures)"
"
$F
"
$start
mail_on_failure
"basics"
build/
$F
F
=
make-test-opt.out
start
=
`
current_time
`
$PYTHON
-O
$REGRTEST_ARGS
-W
-u
urlfetch
>
& build/
$F
NUM_FAILURES
=
`
count_failures build/
$F
`
place_summary_first build/
$F
update_status
"Testing opt (
$NUM_FAILURES
failures)"
"
$F
"
$start
mail_on_failure
"opt"
build/
$F
## run the tests looking for leaks
F
=
make-test-refleak.out
start
=
`
current_time
`
## ensure that the reflog exists so the grep doesn't fail
touch
$REFLOG
$PYTHON
$REGRTEST_ARGS
-R
4:3:
$REFLOG
-u
network
$LEAKY_SKIPS
>
& build/
$F
LEAK_PAT
=
"(
$LEAKY_TESTS
|sum=0)"
NUM_FAILURES
=
`
egrep
-vc
"
$LEAK_PAT
"
$REFLOG
`
place_summary_first build/
$F
update_status
"Testing refleaks (
$NUM_FAILURES
failures)"
"
$F
"
$start
mail_on_failure
"refleak"
$REFLOG
"
$LEAK_PAT
"
## now try to run all the tests
F
=
make-testall.out
start
=
`
current_time
`
## skip curses when running from cron since there's no terminal
## skip sound since it's not setup on the PSF box (/dev/dsp)
$PYTHON
$REGRTEST_ARGS
-W
-uall
-x
test_curses test_linuxaudiodev test_ossaudiodev &_ALWAYS_SKIP
>
& build/
$F
NUM_FAILURES
=
`
count_failures build/
$F
`
place_summary_first build/
$F
update_status
"Testing all except curses and sound (
$NUM_FAILURES
failures)"
"
$F
"
$start
mail_on_failure
"all"
build/
$F
fi
fi
fi
## make doc
cd
$DIR
/Doc
F
=
"make-doc.out"
start
=
`
current_time
`
make clean
>
../build/
$F
2>&1
make checkout html
>>
../build/
$F
2>&1
err
=
$?
update_status
"Making doc"
"
$F
"
$start
if
[
$err
!=
0
]
;
then
NUM_FAILURES
=
1
mail_on_failure
"doc"
../build/
$F
fi
echo
"</ul>"
>>
$RESULT_FILE
echo
"</body>"
>>
$RESULT_FILE
echo
"</html>"
>>
$RESULT_FILE
## copy results
## (not used anymore, the daily build is now done directly on the server)
#chgrp -R webmaster build/html
#chmod -R g+w build/html
#rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR
#cd ../build
#rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment