static int CompLink( void ) /***************************/ { int rc; char *p; char *file; char *path; list *itm; char errors_found; tool_type utl; int i; if( Flags.be_quiet ) { Fputnl( "option quiet", Fp ); } fputs( DebugOptions[DebugFlag], Fp ); if( StackSize != NULL ) { fputs( "option stack=", Fp ); Fputnl( StackSize, Fp ); } if( Flags.link_for_sys ) { fputs( "system ", Fp ); Fputnl( SystemName, Fp ); } else if( Flags.is32bit ) { #if defined(__OS2__) Fputnl( "system os2v2", Fp ); #elif defined(__NT__) Fputnl( "system nt", Fp ); #elif defined(__LINUX__) Fputnl( "system linux", Fp ); if( !Flags.strip_all ) Fputnl( "option exportall", Fp ); #else Fputnl( "system dos4g", Fp ); #endif } else { if( Flags.windows ) { /* 15-mar-90 */ Fputnl( "system windows", Fp ); } else if( Flags.tiny_model ) { Fputnl( "system com", Fp ); } else { #if defined(__OS2__) Fputnl( "system os2", Fp ); #else Fputnl( "system dos", Fp ); #endif } } for( itm = Directive_List; itm != NULL; itm = itm->next ) { Fputnl( itm->item, Fp ); } Word = MemAlloc( MAX_CMD ); errors_found = 0; for( itm = Files_List; itm != NULL; itm = itm->next ) { strcpy( Word, itm->item ); utl = SrcName( Word ); /* if no extension, assume .c */ file = GetName( Word ); /* get first matching filename */ path = MakePath( Word ); /* isolate path portion of filespec */ while( file != NULL ) { /* while more filenames: */ strcpy( Word, path ); strcat( Word, file ); if( !FileExtension( Word, OBJ_EXT ) && // if not .obj or .o, compile !FileExtension( Word, OBJ_EXT_SECONDARY ) ) { rc = tool_exec( utl, Word, CC_Opts ); if( rc != 0 ) { errors_found = 1; } p = strrchr( file, '.' ); if( p != NULL ) { *p = '\0'; } strcpy( Word, file ); } AddName( Word, Fp ); if( Obj_List != NULL && Flags.do_disas ) { char *sfile; char *ofile; ofile = MemAlloc( strlen( file ) + 6 ); strcpy( ofile, file ); if( Exe_Name[0] != '\0' ) { /* have "-S -o output.name" */ sfile = Exe_Name; } else { if( FileExtension( Word, OBJ_EXT ) || FileExtension( Word, OBJ_EXT_SECONDARY ) ) { p = strrchr( file, '.' ); if( p != NULL ) { *p = '\0'; } strcpy( Word, file ); } else { /* wdis needs extension */ strcat( ofile, Obj_Name ); } sfile = Word; strcat( Word, ".s" ); } memmove( sfile + 3, sfile, strlen( sfile ) + 1 ); sfile[0] = '-'; sfile[1] = 'l'; sfile[2] = '='; rc = tool_exec( TYPE_DIS, ofile, sfile ); MemFree( ofile ); } if( Exe_Name[0] == '\0' ) { #ifdef __UNIX__ strcpy( Exe_Name, OUTPUTFILE ); Flags.keep_exename = 1; #else p = strrchr( Word, '.' ); if( p != NULL ) { *p = '\0'; } strcpy( Exe_Name, Word ); #endif } #ifdef __UNIX__ MemFree( file ); #endif file = GetName( NULL ); /* get next filename */ } MemFree( path ); } if( errors_found ) { rc = 1; } else { rc = 0; BuildLinkFile(); if(( Obj_List != NULL || Flags.do_link ) && Flags.no_link == FALSE ) { rc = tool_exec( TYPE_LINK, "@" TEMPFILE, NULL ); if( rc == 0 && Flags.do_cvpack ) { rc = tool_exec( TYPE_PACK, Exe_Name, NULL ); } if( rc != 0 ) { rc = 2; /* return 2 to show Temp_File already closed */ } } } if( Word != NULL ) { MemFree( Word ); Word = NULL; } for( i = 0; i < TYPE_MAX; ++i ) { if( tools[i].path != NULL ) { MemFree( tools[i].path ); tools[i].path = NULL; } } return( rc ); }
static int CompLink( void ) /***************************/ { int rc; char *p; char *file; char *path; list *itm; char errors_found; void *tmp_env; tool_type utl; int i; if( Flags.be_quiet ) { Fputnl( "option quiet", Fp ); } fputs( DebugOptions[DebugFlag], Fp ); if( StackSize != NULL ) { fputs( "option stack=", Fp ); Fputnl( StackSize, Fp ); } if( Flags.link_for_sys ) { /* 10-jun-91 */ fputs( "system ", Fp ); Fputnl( SystemName, Fp ); } else { #if defined( WCLAXP ) Fputnl( "system ntaxp", Fp ); #elif defined( WCLPPC ) #if defined( __LINUX__ ) Fputnl( "system linuxppc", Fp ); #else Fputnl( "system ntppc", Fp ); #endif #elif defined( WCLMPS ) Fputnl( "system linuxmips", Fp ); #elif defined( WCL386 ) #if defined( __OS2__ ) Fputnl( "system os2v2", Fp ); /* 04-feb-92 */ #elif defined( __NT__ ) Fputnl( "system nt", Fp ); #elif defined( __LINUX__ ) Fputnl( "system linux", Fp ); #else Fputnl( "system dos4g", Fp ); #endif #else if( Flags.windows ) { /* 15-mar-90 */ Fputnl( "system windows", Fp ); } else if( Flags.tiny_model ) { Fputnl( "system com", Fp ); } else if( Flags.link_for_dos ) { Fputnl( "system dos", Fp ); } else if( Flags.link_for_os2 ) { Fputnl( "system os2", Fp ); } else { #if defined( __OS2__ ) Fputnl( "system os2", Fp ); #else Fputnl( "system dos", Fp ); #endif } #endif } /* pass given resources to linker */ for( itm = Res_List; itm != NULL; itm = itm->next ) { fputs( "option resource=", Fp ); FputnlQuoted( itm->item, Fp ); } /* pass given directives to linker */ for( itm = Directive_List; itm != NULL; itm = itm->next ) { Fputnl( itm->item, Fp ); } tmp_env = NULL; if( via_environment && strlen( CC_Opts ) >= 20 ) // 20 to allow wclxxxxx=y tmp_env = makeTmpEnv( CC_Opts ); errors_found = 0; for( itm = Files_List; itm != NULL; itm = itm->next ) { strcpy( Word, itm->item ); utl = SrcName( Word ); /* if no extension, assume .c */ file = GetName( Word ); /* get first matching filename */ path = MakePath( Word ); /* isolate path portion of filespec */ while( file != NULL ) { /* while more filenames: */ strcpy( Word, path ); strcat( Word, file ); if( !FileExtension( Word, OBJ_EXT ) && /* if not .obj or .o, compile */ !FileExtension( Word, OBJ_EXT_SECONDARY ) ) { rc = tool_exec( utl, Word, CC_Opts ); if( rc != 0 ) { errors_found = 1; } p = strrchr( file, '.' ); if( p != NULL ) *p = '\0'; strcpy( Word, file ); } AddName( Word, Fp ); if( Exe_Name[0] == '\0' ) { p = strrchr( Word, '.' ); if( p != NULL ) *p = '\0'; strcpy( Exe_Name, Word ); } #ifdef __UNIX__ MemFree( file ); #endif file = GetName( NULL ); /* get next filename */ } MemFree( path ); } if( tmp_env != NULL ) killTmpEnv( tmp_env ); if( errors_found ) { rc = 1; } else { rc = 0; BuildLinkFile(); if(( Obj_List != NULL || Flags.do_link ) && Flags.no_link == FALSE ) { rc = tool_exec( TYPE_LINK, "@" TEMPFILE, NULL ); if( rc == 0 && Flags.do_cvpack ) { rc = tool_exec( TYPE_PACK, Exe_Name, NULL ); } if( rc != 0 ) { rc = 2; /* return 2 to show Temp_File already closed */ } } } for( i = 0; i < TYPE_MAX; ++i ) { if( tools[i].path != NULL ) { MemFree( tools[i].path ); tools[i].path = NULL; } } return( rc ); }