From 5fceabf37802cb6e9aa4c0cdde30378472046822 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Fri, 7 Oct 2011 22:23:57 +0200 Subject: [PATCH] bisect-runner.pl should add db4 compatibility to DB_File.xs where possible. Without this it won't build if db.h is found, but it's "too new" for the checked-out vintage XS code. Tweak apply_patch() to print out any patch that fails to apply. This helps with debugging patches generated dynamically by bisect-runner.pl --- Porting/bisect-runner.pl | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/Porting/bisect-runner.pl b/Porting/bisect-runner.pl index cc98c9a..287a77b 100755 --- a/Porting/bisect-runner.pl +++ b/Porting/bisect-runner.pl @@ -408,7 +408,9 @@ sub apply_patch { my ($file) = $patch =~ qr!^diff.*a/(\S+) b/\1!; open my $fh, '|-', 'patch', '-p1' or die "Can't run patch: $!"; print $fh $patch; - close $fh or die "Can't patch $file: $?, $!"; + return if close $fh; + print STDERR "Patch is <<'EOPATCH'\n${patch}EOPATCH\n"; + die "Can't patch $file: $?, $!"; } sub clean { @@ -907,6 +909,43 @@ index 03c4d48..3c814a2 100644 EOPATCH } +if ($major < 10 + && extract_from_file('ext/DB_File/DB_File.xs', + qr!^#else /\* Berkeley DB Version > 2 \*/$!) + && !extract_from_file('ext/DB_File/DB_File.xs', + qr/^#ifdef AT_LEAST_DB_4_1$/)) { + # This line is changed by commit 3245f0580c13b3ab + my $line = extract_from_file('ext/DB_File/DB_File.xs', + qr/^( status = \(?RETVAL->dbp->open\)?\(RETVAL->dbp, name, NULL, RETVAL->type, $)/); + apply_patch(<<"EOPATCH"); +diff --git a/ext/DB_File/DB_File.xs b/ext/DB_File/DB_File.xs +index 489ba96..fba8ded 100644 +--- a/ext/DB_File/DB_File.xs ++++ b/ext/DB_File/DB_File.xs +\@\@ -183,4 +187,8 \@\@ + #endif + ++#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1) ++# define AT_LEAST_DB_4_1 ++#endif ++ + /* map version 2 features & constants onto their version 1 equivalent */ + +\@\@ -1334,7 +1419,12 \@\@ SV * sv ; + #endif + ++#ifdef AT_LEAST_DB_4_1 ++ status = (RETVAL->dbp->open)(RETVAL->dbp, NULL, name, NULL, RETVAL->type, ++ Flags, mode) ; ++#else + $line + Flags, mode) ; ++#endif + /* printf("open returned %d %s\\n", status, db_strerror(status)) ; */ + +EOPATCH +} + if ($major < 10 and -f 'ext/IPC/SysV/SysV.xs') { edit_file('ext/IPC/SysV/SysV.xs', sub { my $xs = shift; -- 2.7.4