summaryrefslogtreecommitdiff
path: root/Porting/bisect-runner.pl
Commit message (Collapse)AuthorAgeFilesLines
* Remove references to GNU DLD from Configure and config.sh scripts.Nicholas Clark2013-09-051-1/+1
| | | | | Specifically eliminated i_dld, a variable indicating that <dld.h> should be included, and remove dld from the list of wanted libraries.
* The bisect tool now takes test scripts as targets, and runs them with t/TESTNicholas Clark2013-09-041-8/+62
| | | | This makes it easier to bisect when test scripts started failing.
* Update the Porting/bisect.pl documentation.Nicholas Clark2013-08-071-8/+15
| | | | | | | As of commit c8fde7fafa0a9cec (merged to blead with commit 4724da031eae31b4) bisect.pl can be run in-place if the checkout is clean. The most recent stable release that it will try is now v5.18.0.
* bisect.pl now accepts repeated -e options, just like perl.Nicholas Clark2013-07-171-3/+4
|
* Add -q to git clean in bisect-runner.plNicholas Clark2013-05-281-1/+1
| | | | | | This makes the output considerably less verbose. In particular, it becomes a lot easier to spot the "revisions left to test after this" status message from git bisect.
* Three Configure fixups so that bisect-runner.pl can build 1997-era 5.004Nicholas Clark2013-05-281-0/+27
| | | | Specifically, so that it can build revisions near 15f0808c5d67b362.
* bisect-runner.pl should match patches with directory 'b' before 'a'.Nicholas Clark2013-05-281-1/+1
| | | | | | | The pattern to extract the file for diagnostics should a patch not apply was failing to match (and generating a legitimate used of uninitialized value warning) for the case where the patch was specified as --- b/ +++ a/ The pattern was only expecting --- a/ +++ b/
* Add a 'none' target to bisect-runner.plNicholas Clark2013-05-281-1/+12
| | | | | | This runs the user's test case directly against a clean checkout. Using this gives a couple of features that a plain git bisect run can't offer - automatic start revision detection, and test case timeouts.
* bisect.pl can now optionally timeout the user's test case.Nicholas Clark2013-05-281-6/+57
| | | | | | | This permits bisection to locate the cause (or cure) of bugs which cause programs to hang. When using a timeout, bisect-runner.pl defaults to running the test case in its own process group, and tries hard to ensure that all processes in that process group are killed if the timeout fires.
* Add an option to bisect.pl to run the user testcase in its own process group.Nicholas Clark2013-05-281-2/+14
|
* In bisect-runner.pl, run_report_and_exit() now uses run_with_options().Nicholas Clark2013-05-281-1/+1
|
* In bisect-runner.pl, extract the Configure running into run_with_options().Nicholas Clark2013-05-281-15/+27
| | | | | | | Configure is run using explicit fork, exec and waitpid so that it can be run with with STDIN from /dev/null, but without going through the shell (to avoid having to worry about quoting command line arguments). This code will be useful for adding optional timeouts when running the user test case.
* In bisect-runner.pl, invert the first parameter to report_and_exit().Nicholas Clark2013-05-281-9/+9
| | | | | A true first parameter now means "good". Previously the first parameter was assumed to be a return value from system, and hence true meant "bad".
* In bisect-runner.pl, refactor the calls to system @ARGV into a function.Nicholas Clark2013-05-281-5/+7
| | | | This will permit the addition of timeouts when running the test user's case.
* Add --gold option to bisect.pl for the revision to use for "recent" files.Nicholas Clark2013-05-281-2/+11
| | | | | | | | Historically when bisect-runner.pl wanted to check out a known good recent version of a file (such as makedepend.SH) it would check out the revision from blead. However, that may not be wise as blead isn't guaranteed always to be stable and therefore "known good". So default to using the most recent tagged stable release.
* bisect-runner.pl always needs to pass paths gleaned from gcc to Configure.Nicholas Clark2013-05-281-3/+7
| | | | | | | | | | | | Commits fdbac266ba9ef2a6 and 599ee4f7809ae508 ensure that /usr/local/lib, /lib and /usr/lib are searched on all platforms for shared libraries, and that multiarch library locations gleaned from gcc are searched on x86_64. However, on other Linux architectures it fails to pass the multiarch locations to Configure. Version (just) prior to 5.14.0 do not contain the logic to ask gcc, so they fail to build on multiarch setups. This commit ensures that the correct library locations are available on all platforms.
* When bisecting, use `git tag -l` to get the list of stable releases.Nicholas Clark2013-05-281-10/+13
| | | | | | | Previously bisect.pl was using a hard coded list, which (obviously) will become stale. Also, note in the docs that we only use .0 stable releases, and why.
* bisect-runner.pl needs to probe DB_File.xs before running ConfigureNicholas Clark2013-05-281-9/+17
| | | | | | | | | | | Commit f2f0a0ff7250e0ba (in Nov 2011), consolidated all the code that patches extensions. As a side effect, it moved all extension patching after Configure is run. Unfortunately this introduced a bug, because one test of DB_File.xs was to change the arguments to Configure to skip building DB_File at all if it's too old. Return this logic to before when Configure is run, so that bisect-runner.pl can once again build 5.005 and earlier on machines with the Berkley DB headers installed, by forcibly skipping the build of DB_File there.
* bisect-runner.pl needs another minor fixup to build 5.004_05 on Linux.Nicholas Clark2013-05-281-1/+16
| | | | | | | | | | | bisect-runner.pl already reverts a sequence of commits to doio.c related to special case handling of union semun on Linux and Solaris, which cause the build to fail on current Linux. The last of these, 9b599b2a63d2324d is described as "[win32] merge change#887 from maintbranch". However, it uses __sun__ and __svr4__ instead of the __sun and __SVR4 of the maint branch commit 6cdf74fe31f049dc. Hence the code in bisect-runner.pl needs to be taught about this variation in the maint-5.004 branch, so that it can also unwind the problematic code in doio.c there.
* bisect-runner.pl should fix 5.7.x to export Perl_cxinc on AIX.Nicholas Clark2013-05-281-0/+10
| | | | | | | Without this, about 60 commits in a key area of history fail to build, between the upgrade of Scalar-List-Utils to 1.03, and the commit that amends makedef.pl to export Perl_cxinc, which Utils.xs indirectly started using (via a macro).
* bisect-runner.pl should fix a typo in the Solaris hints file.Nicholas Clark2013-05-281-0/+5
| | | | | Without this typo fix about 700 revisions from 5.13.10 to 5.14.0-RC1 can't be built on Solaris with Sun's compiler.
* Add a --valgrind option to bisect.pl, to run the test program with valgrind.Nicholas Clark2013-05-281-1/+34
| | | | | | Specifically this option prepends valgrind --error-exitcode=124 to the command line, so that git bisect run will treat this revision as a failure if valgrind finds any problems.
* bisect-runner.pl will now invoke with ./perl -Ilib if it sees a #!./perl lineNicholas Clark2013-05-281-7/+22
| | | | | | | | | | If the first argument of the test case given to bisect-runner.pl is a readable file with a #! line of ./perl or ./miniperl (only), bisect-runner.pl with prepend ./perl -Ilib or ./miniperl -Ilib to the command sent to system. This increases flexibility somewhat, and will avoid problems with inconsistencies between directly running system(...), and running system('valgrind', ...). The former accepts a #!./perl line, the latter sends it to /bin/sh.
* bisect-runner.pl should fix Makefile.SH to remove remove GNU make-isms.Nicholas Clark2013-05-281-0/+23
| | | | | | | | Commit c7b956bbbaff0c46 inadvertently added a GNU (and BSD) make specific construction to the *nix Makefile, which other platforms' makes choke on. It was corrected with commit cfe76a0a8e5b6f21 (and 0961731461727bea), but those changes are not the simplest way to get things passing again, so use a simpler custom patch here.
* Add --early-fixup and --late-fixup to bisect.pl, for user-controlled patching.Nicholas Clark2013-05-281-1/+119
| | | | | | | | | These provide a way to run code or to conditionally or unconditionally apply patches for each revision tested during git bisect. This is very useful when for the commit range, operating system and configuration options tested, the behaviour otherwise would be to fail to build for a wide range of revisions, and hence the bisect would finish without finding culprit commit due to getting bogged down in 'skipped' revisions.
* Add --all-fixups to bisect.pl, to apply all patches and fixups.Nicholas Clark2013-05-281-3/+25
| | | | | | | | | bisect-runner.pl will minimally patch various files on a platform and version dependent basis to get the build to complete. Normally it defers doing this as long as possible - .SH files aren't patched until after Configure is run, and C and XS code isn't patched until after miniperl is built. If --all-fixups is specified, all the fixups are done before running Configure.
* bisect-runner.pl should always exit fatally with 255, to abort the bisect.Nicholas Clark2013-05-281-40/+58
| | | | | | | Don't use die or croak, as these will exit with the value of $! or $? instead of 255, and git bisect doesn't treat these as fatal errors, but ploughs on before inevitably failing messily for some other reason, concealing the true error message.
* In bisect-runner.pl, refactor the system ... and die; into system_or_die().Nicholas Clark2013-05-281-4/+8
|
* bisect-runner.pl should search for lib*.a as well as lib*.soNicholas Clark2013-05-281-1/+7
| | | | | | | | | When forcing the library list on earlier perls to avoid versioned shared objects, also look for static libraries. Also, ensure bisect-runner.pl searches additional library paths given to it via -Alibpth Without this, one can't test build against static libraries in non-standard locations.
* bisect-runner.pl should use ".$Config{dlext}" instead of hard-coding ".so".Nicholas Clark2013-05-281-1/+1
|
* Teach bisect-runner.pl that on HP-UX, _filbuf() is named __filbuf().Nicholas Clark2013-05-281-0/+20
| | | | | This is all that is needed to build 5.003 and earlier. bisect.pl can validate all stable versions from blead back to 5.002
* bisect-runner.pl needs to know how to identify HP-UX's patch.Nicholas Clark2013-05-281-0/+4
| | | | | | | | | | Unlike AIX, HP-UX patch offers no meaningful clue as to its upstream version: $ patch -v $Header: patch.c,v 76.1.1.2.1.3 2001/12/03 12:24:52 abhinav Exp $ Patch level: 0 But it ignores unified diffs, so assume the worst and feed it context diffs.
* On HP-UX, bisect without any -j option as the system make is "special".Nicholas Clark2013-05-281-4/+5
| | | | | HP-UX system make offers parallelism with -P not -j. (But doesn't deliver on it, so we're not going to attempt to work round its crankiness and failings.)
* In bisect{,-runner}.pl, refactor the code for CPU probing and make jobs.Nicholas Clark2013-05-281-14/+2
| | | | | | | | | | | | | | | Move the code that attempts various ways to probe for the number of CPUs from bisect-runner.pl to bisect.pl. Skip the probe entirely if a -j (--jobs) options is passed to bisect.pl. For --jobs=0 (or -j0) entirely skip adding -j to the make command line. (For heretical versions of make which don't use -j for parallelism). Previously the probe code always ran for each call to bisect-runner.pl, which is completely redundant if bisect-runner.pl is being called for argument validation or help text, and inefficient even when building, as the number of CPUs rarely changes during a bisect run. Additionally there was no way to avoid a -j in the make command line, which isn't going to fly on systems where the make utility doesn't have a -j option.
* typo fixes for porting scriptsDavid Steinbrunner2013-05-241-2/+2
|
* bisect-runner.pl: clarify -D,-U,-A args in docsDavid Mitchell2013-05-081-4/+10
| | | | | Based on http://www.perlmonks.org/?node_id=1032501, these arguments could be confusing.
* bisect-runner.pl: Reword some pod examplesKarl Williamson2013-02-041-3/+3
| | | | | I found myself better able to understand what's really happening given this rewording.
* add a few comments to bisect-runner.pl docsJesse Luehrs2012-06-271-4/+8
| | | | | | ./perl -Ilib t/op/sort.t won't do what you want, because tests that don't use Test::More don't set an error code on their own, you need to run it under the harness
* Add two missing "file"s to the documentation of Porting/bisect.plNicholas Clark2012-03-191-2/+2
|
* bisect-runner.pl should detect ccache with -V, not --versionNicholas Clark2012-03-191-2/+2
| | | | | ccache 2.4 doesn't support the --version parameter, only -V. ccache 3 supports both.
* In bisect-runner.pl, don't set $defines{cc} if printing usage messages.Nicholas Clark2012-02-051-1/+9
| | | | | | ccache isn't needed to print a usage message. The current heuristic for detecting ccache is noisy if it fails, which interferes with any usage or error output.
* bisect.pl --help should show the full documentation, not just the usage.Nicholas Clark2012-02-051-1/+1
| | | | | | | The initial paragraphs of documentation are actually more useful than most of the options documentation. So show them too. Suggested by David Leadbeater.
* Add -c option to bisect-runner.pl, for use with -eNicholas Clark2012-02-031-5/+12
| | | | | This allows one to easily bisect to find when a something became, or stopped being, a (compile-time) syntax error.
* bisect.pl now exits with 0 for success for --helpNicholas Clark2012-02-011-1/+1
| | | | | | | bisect.pl --help now exits with 0 for success. The "that took" timing message is no longer shown after the help text. The sanity test for "are we running from the current checkout" is now moved after the argument checking, so that bisect.pl --help will always show the help text.
* Add --no-match to bisect.pl, equivalent to --expect-fail --matchNicholas Clark2012-02-011-7/+17
|
* bisect.pl now treats the command line as files to match with --match.Nicholas Clark2012-02-011-10/+43
| | | | | | | | Previously with --match it would ignore the command line options, and search in all distribution files (no --target given), or the build products only (--target given). These remain the defaults if there are no command line arguments. But now if command line arguments are given, this are used as glob patterns to give the list of files to match against.
* Correct the Pod used to block comment a section of git log output.Nicholas Clark2011-12-221-1/+3
| | | | | | | | | Commit 31940c077ae95db7 added some git log output. To avoid the need to re-indent it, it was "commented out" using Pod. However, the Pod used was buggy. It used a =for, when it should have used a =begin/=end pair. Without this, Pod renderers display the "comment" as if it is part of the documentation, which isn't desired.
* bisect-runner.pl should only dump out a failed patch once by default.Nicholas Clark2011-12-171-1/+2
| | | | | Only show the "converted to a context diff" version if it was actually converted to one before (attempted) application.
* Teach bisect-runner.pl how to work around various 5.005_5x build problems.Nicholas Clark2011-12-171-0/+54
| | | | | | | | | | | | | | | | | | | | This area of history is particularly hairy because of all the back-and-forth merging between //depot/perl and //depot/cfgperl, which confuses bisect. It's also potentially interesting, as it's the start of the 5.6.0 development series, so many new features arrive in quick succession, making it a likely spot for regressions to appear. In particular, we can now build perl for this commit: commit 4592e6caefc41a75573f112714d170071892a537 Author: Nick Ing-Simmons <nik@tiuk.ti.com> Date: Sat May 8 14:16:30 1999 +0000 Implement OPEN, EOF, SEEK, TELL, BINMODE and FILENO as TIEHANDLE methods. Provide Tie::StdHandle Basic update of docs. p4raw-id: //depot/perl@3330
* bisect-runner.pl must not be fooled by a t/test that symlinks to ../miniperlNicholas Clark2011-12-171-0/+17
| | | | | | | It had merely been testing that the target file was +x For t/test it must also check that t/perl wasn't a symlink to miniperl created as a side effect of make miniperl failing. To add to the fun, for some revisions the symlink is to '.././perl', not '../perl'.