Hi, I had major linking problems building DBD::Oracle on our DEC platforms, which after a while I diagnosed to a missing -L entry in the link path. I then diagnosed the reason why this was missing -- there was a problem when Makefile.PL called oracle build scripts. It creates an empty .o file (DBD_ORA_OBJ.o), which, on the DEC platform (OSF4, ld version 3.11) caused ld to choke, therefore the Makefile.PL couldn't follow the oracle link rules, and had to guess (an in my case, guessed wrong). I made a simple fix to the Makefile.PL so it can get past this step and use the oracle build properly -- instead of creating an empty DBD_ORA_OBJ.o, I have it compile a trivial program so this file is in the proper format. Thus, ld works, Makefile.PL can properly parse the oracle build commands, and the package builds, links, tests, installs fine. I have attached a context diff of the original (1.06) Makefile.PL and the fixed one -- perhaps this fix can make it into future releases and save others the headaches I had... -Jonathan -- Jonathan Segal Principal Software Engineer, Bioinformatics Genome Therapeutics Corp. [EMAIL PROTECTED] (781) 398-2579
*** Makefile.PL Thu Apr 12 13:36:31 2001 --- Makefile.PL.orig Thu Apr 12 11:44:25 2001 *************** *** 266,275 **** print "\n"; my $rules = join "\n", '', @{ $mk_target_rules{build} }; my $DBD_ORA_OBJ = "DBD_ORA_OBJ.o"; ! open DBD_ORA_C, ">DBD_ORA_OBJ.c" or die; ! print DBD_ORA_C "main () {}\n"; ! close DBD_ORA_C; ! system ("$MK{CC} -c DBD_ORA_OBJ.c -o $DBD_ORA_OBJ"); my $make = "$Config{make} -f $mkfile build " ."ECHODO=true ECHO=echo GENCLNTSH='echo genclntsh' " ."EXE=DBD_ORA_EXE OBJS=$DBD_ORA_OBJ"; --- 266,273 ---- print "\n"; my $rules = join "\n", '', @{ $mk_target_rules{build} }; my $DBD_ORA_OBJ = "DBD_ORA_OBJ.o"; ! open DBD_ORA_OBJ, ">$DBD_ORA_OBJ" or die; ! close DBD_ORA_OBJ; my $make = "$Config{make} -f $mkfile build " ."ECHODO=true ECHO=echo GENCLNTSH='echo genclntsh' " ."EXE=DBD_ORA_EXE OBJS=$DBD_ORA_OBJ"; *************** *** 277,284 **** print "by executing:\n$make\n" if $::opt_v; my @cmds = map { chop; $_ } grep { !m/^\s*$/ } `$make 2>&1`; warn "Warning: Oracle build rule discovery failed ($?)\n" if $?; ! unlink $DBD_ORA_OBJ || warn "couldn't unlink DBD_ORA_OBJ.o\n"; ! unlink "DBD_ORA_OBJ.c"; my $prev = ''; @cmds = grep { my $skip = $prev eq "echo $_"; $prev=$_; !$skip } @cmds; my @prolog; push @prolog, shift @cmds while @cmds && $cmds[0] !~ /DBD_ORA_EXE/; --- 275,281 ---- print "by executing:\n$make\n" if $::opt_v; my @cmds = map { chop; $_ } grep { !m/^\s*$/ } `$make 2>&1`; warn "Warning: Oracle build rule discovery failed ($?)\n" if $?; ! unlink $DBD_ORA_OBJ; my $prev = ''; @cmds = grep { my $skip = $prev eq "echo $_"; $prev=$_; !$skip } @cmds; my @prolog; push @prolog, shift @cmds while @cmds && $cmds[0] !~ /DBD_ORA_EXE/;