@@ -60,16 +60,19 @@ char *searchlib(char *, char*);
6060void
6161main (int argc , char * argv [])
6262{
63- char * s , * suf , * ccpath , * lib ;
63+ char * s , * suf , * ccpath , * lib , * prog ;
6464 char * oname , * objext ;
6565 int haveoname = 0 ;
6666 int i , cppn , ccn ;
6767 Objtype * ot ;
6868
6969 ot = findoty ();
70- oname = "a.out" ;
71- /* cc produces .o (for configure compat); pcc uses arch-native .$O */
72- objext = (strcmp (argv [0 ], "cc" ) == 0 ) ? "o" : ot -> o ;
70+ prog = utfrrune (argv [0 ], '/' );
71+ prog = prog ? prog + 1 : argv [0 ];
72+ /* cc: POSIX mode (.o objects, a.out output, clean up intermediates)
73+ * pcc: Plan9 native mode (.$O objects, $O.out output, keep objects) */
74+ objext = (strcmp (prog , "cc" ) == 0 ) ? "o" : ot -> o ;
75+ oname = (strcmp (prog , "cc" ) == 0 ) ? "a.out" : smprint ("%s.out" , ot -> o );
7376 append (& cpp , "cpp" );
7477 append (& cpp , "-D__STDC__=1" ); /* ANSI says so */
7578 append (& cpp , "-D_POSIX_SOURCE=" );
@@ -221,8 +224,8 @@ main(int argc, char *argv[])
221224 append (& ld , objs .strings [i ]);
222225 append (& ld , smprint ("/%s/lib/ape/libap.a" , ot -> name ));
223226 doexec (smprint ("/bin/%s" , ot -> ld ), & ld );
224- if (objs .n == 1 )
225- remove (objs .strings [0 ]);
227+ if (objs .n == 1 && strcmp ( objext , "o" ) == 0 )
228+ remove (objs .strings [0 ]); /* cc mode only: clean up .o intermediate */
226229 if (gflag ) {
227230 /* post-link: convert a.out + .dwtypes sidecars to ELF64 */
228231 memset (& dw2elf_cmd , 0 , sizeof dw2elf_cmd );
0 commit comments