--- ./lib/ExtUtils/MM_Unix.pm.orig	Tue Oct 28 20:16:48 2003
+++ ./lib/ExtUtils/MM_Unix.pm	Thu Oct 30 21:11:48 2003
@@ -431,11 +431,12 @@ Prints out macros for lots of constants.
 
 sub constants {
     my($self) = @_;
-    my @m = ();
+    my @m = ("EMPTY_STRING =\n");
 
     for my $macro (qw(
 
               AR_STATIC_ARGS DIRFILESEP
+	      AR_PRE_TARGET AR_OBJECT CC_PRE_TARGET
               NAME NAME_SYM 
               VERSION    VERSION_MACRO    VERSION_SYM DEFINE_VERSION
               XS_VERSION XS_VERSION_MACRO             XS_DEFINE_VERSION
@@ -1667,7 +1668,8 @@ sub init_DIRFILESEP {
 
 =item init_main
 
-Initializes AR, AR_STATIC_ARGS, BASEEXT, CONFIG, DISTNAME, DLBASE,
+Initializes AR, AR_PRE_TARGET, AR_OBJECT, AR_STATIC_ARGS, BASEEXT,
+CC_PRE_TARGET, CONFIG, DISTNAME, DLBASE,
 EXE_EXT, FULLEXT, FULLPERL, FULLPERLRUN, FULLPERLRUNINST, INST_*,
 INSTALL*, INSTALLDIRS, LIB_EXT, LIBPERL_A, MAP_TARGET, NAME,
 OBJ_EXT, PARENT_NAME, PERL, PERL_ARCHLIB, PERL_INC, PERL_LIB,
@@ -1868,6 +1870,9 @@ usually solves this kind of problem.
 # But I leave it as a placeholder
 
     $self->{AR_STATIC_ARGS} ||= "cr";
+    $self->{AR_PRE_TARGET}  ||= 'cr $(EMPTY_STRING)';
+    $self->{AR_OBJECT}      ||= '$(OBJECT)';
+    $self->{CC_PRE_TARGET}  ||= '-o $(EMPTY_STRING)';
 
     # These should never be needed
     $self->{OBJ_EXT} ||= '.o';
@@ -3707,7 +3712,7 @@ MAKE_FRAG
         $ar = 'AR';
     }
     push @m, sprintf <<'MAKE_FRAG', $ar;
-	$(%s) $(AR_STATIC_ARGS) $@ $(OBJECT) && $(RANLIB) $@
+	$(%s) $(EXTRA_AR_OPT) $(AR_PRE_TARGET)$@ $(AR_OBJECT) && $(RANLIB) $@
 	$(CHMOD) $(PERM_RWX) $@
 	$(NOECHO) $(ECHO) "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
 MAKE_FRAG
