Subject: | Makefile.PL: avoid picking up libct_cu.so |
Here's my situation:
* Linux server
* /usr/lib contains libct_cu.so
* /usr/lib64 contains libct.so & FreeTDS in general
configure() gets confused: it calls checkLib which checks /usr/lib for the existence of /libct|libsybct/i, which libct_cu.so satisfies. It then reports that /usr/lib contains FreeTDS.
Further down, we call getLibVersion, which greps /usr/lib more strictly, using /lib(syb)?ct(64)?\./ finding no SO file. It then crashes on the open(undef) call.
The patch unifies the two regular expressions, making them
* stricter so as not to match libct_cu
* case insensitive (because one of them was like that already; presumably due to Windows)
==== //depot/QA/Toolbox/main.br/CPAN/DBD-Sybase/1.15/src/Makefile.PL#7 - /ns/build/users/ferencis/0toolbox/main.br/CPAN/DBD-Sybase/1.15/src/Makefile.PL ====
--- /tmp/tmp.29302.57 2014-01-24 17:55:55.000000000 +0000
+++ /ns/build/users/ferencis/0toolbox/main.br/CPAN/DBD-Sybase/1.15/src/Makefile.PL 2014-01-24 17:55:10.000000000 +0000
@@ -19,6 +19,8 @@
$LINKTYPE = 'dynamic';
$written_pwd_file = 'PWD';
+my $libct_re = qr/\blib(syb)?ct(64)?\./i;
+
my $file;
my $chained;
my $threaded_libs;
@@ -342,7 +344,7 @@
opendir( DIR, $lib );
# reverse to pick up libsybct before libct...
- my @files = reverse( grep( /lib(syb)?ct(64)?\./, readdir(DIR) ) );
+ my @files = reverse( grep( $libct_re, readdir(DIR) ) );
closedir(DIR);
my $file;
foreach (@files) {
@@ -410,7 +412,7 @@
my $dir = shift;
opendir( DIR, $dir ) || die "Can't access $dir: $!";
- my @files = grep( /libct|libsybct/i, readdir(DIR) );
+ my @files = grep( $libct_re, readdir(DIR) );
closedir(DIR);
if ( grep( /libsybct/, @files ) ) {
$newlibnames = 1;