Thanks.
Tim.
On Thu, Jun 05, 2003 at 03:23:12PM +0200, Steffen Goeldner wrote:
> While installing e.g. DBD-Oracle-1.14, dmake aborts with:
>
> dmake.exe: Error -- Multiply defined recipe for target C
>
> Dmake doesn't like what the current DBI::DBD::dbd_postamble generates:
>
> # --- MakeMaker postamble section:
>
> # --- This section was generated by DBI::DBD::dbd_postamble()
> DBI_INST_DIR=C:/opt/perl/site/lib
> DBI_INSTARCH_DIR=C:/opt/perl/site/lib/auto/DBI
> DBI_DRIVER_XST=$(DBI_INSTARCH_DIR)/Driver.xst
>
> # The main dependancy (technically correct but probably not used)
> $(BASEEXT).c: $(BASEEXT).xsi
>
> # This dependancy is needed since MakeMaker uses the .xs.o rule
> $(BASEEXT)$(OBJ_EXT): $(BASEEXT).xsi
>
> $(BASEEXT).xsi: $(DBI_DRIVER_XST) $(DBI_INSTARCH_DIR)/Driver_xst.h
> $(PERL) -p -e "s/~DRIVER~/$(BASEEXT)/g" < $(DBI_DRIVER_XST) > $(BASEEXT).xsi
>
> # these two keep make -j4 working
> $(DBI_DRIVER_XST) :: pm_to_blib
> $(NOECHO) $(NOOP)
>
> $(DBI_INSTARCH_DIR)/Driver_xst.h :: pm_to_blib
> $(NOECHO) $(NOOP)
>
> # ---
>
>
> # End.
>
> The problem is the colon in the absolute paths.
> >From the dmake doc:
>
> Since the rule operator begins
> with a `:', traditional versions of make do not allow the
> `:' character to form a valid target name. dmake allows
> `:' to be present in target/prerequisite names as long as
> the entire target/prerequisite name is quoted. For exam-
> ple:
>
> a:fred : test
>
> would be parsed as TARGET = a, PREREQUISITES={fred, :,
> test}, which is not what was intended. To fix this you
> must write:
>
> "a:fred" : test
>
> Which will be parsed as expected.
>
> It seems that quoted targets are sufficient.
> Attached is a possible patch for DBI::DBD.
>
>
> Steffen
> *** DBD.orig Wed May 14 13:10:54 2003
> --- DBD.pm Thu Jun 05 14:57:26 2003
> ***************
> *** 3622,3627 ****
> --- 3622,3628 ----
> my $xstdir = dbd_dbi_arch_dir();
> my $xstfile= '$(DBI_INSTARCH_DIR)/Driver.xst';
> my $xstf_h = '$(DBI_INSTARCH_DIR)/Driver_xst.h';
> + my $QQ = ( $Config{make} eq 'dmake') ? '"' : '';
> if ($^O eq 'VMS') {
> $dbidir = vmsify($dbidir.'/');
> $xstdir = vmsify($xstdir.'/') unless $is_dbi;
> ***************
> *** 3646,3655 ****
> $(PERL) -p -e "s/~DRIVER~/$(BASEEXT)/g" < $(DBI_DRIVER_XST) > $(BASEEXT).xsi
>
> # these two keep make -j4 working
> ! $(DBI_DRIVER_XST) :: pm_to_blib
> $(NOECHO) $(NOOP)
>
> ! '.$xstf_h.' :: pm_to_blib
> $(NOECHO) $(NOOP)
>
> # ---
> --- 3647,3656 ----
> $(PERL) -p -e "s/~DRIVER~/$(BASEEXT)/g" < $(DBI_DRIVER_XST) > $(BASEEXT).xsi
>
> # these two keep make -j4 working
> ! '.$QQ.'$(DBI_DRIVER_XST)'.$QQ.' :: pm_to_blib
> $(NOECHO) $(NOOP)
>
> ! '.$QQ.$xstf_h.$QQ.' :: pm_to_blib
> $(NOECHO) $(NOOP)
>
> # ---