mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 23:10:09 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| {$APPTYPE CONSOLE}
 | |
| program FPimpdef;
 | |
| {$DEFINE STANDALONE}
 | |
| uses
 | |
|  DOS,
 | |
|  ImpDef;
 | |
| var
 | |
| binname:string;
 | |
| function Ofound(const short,full:string):longint;
 | |
| var
 | |
|   i:longint;
 | |
| begin
 | |
|   Ofound:=-1;
 | |
|   for i:=1 to ParamCount do
 | |
|    if(paramstr(i)=short)or(paramstr(i)=full)then
 | |
|     begin
 | |
|      Ofound:=i;
 | |
|      exit;
 | |
|     end;
 | |
| end;
 | |
| function GetOption(const short,full:string):string;
 | |
| var
 | |
|   i:longint;
 | |
| begin
 | |
|   i:=Ofound(short,full);
 | |
|   if i>0 then
 | |
|    GetOption:=paramstr(succ(i))
 | |
|   else
 | |
|    GetOption:='';
 | |
| end;
 | |
| procedure help_info;
 | |
| var
 | |
|   fn:string[255];
 | |
|   jj:cardinal;
 | |
| begin
 | |
|   fn:=paramstr(0);
 | |
|   for jj:=length(fn)downto 1 do
 | |
|    if fn[jj] in [':','\','/']then
 | |
|     begin
 | |
|      fn:=copy(fn,succ(jj),255);
 | |
|      break;
 | |
|     end;
 | |
|   writeln('Usage: ',fn,' [options]');
 | |
|   writeln('Options:');
 | |
|   writeln('-i | --input     <file> - set input file;');
 | |
|   writeln('-o | --output    <file> - set output .def file');
 | |
|   writeln('-l | --library   <file> - set output static library');
 | |
|   writeln('-s | --assembler <name> - use <name> for assembler (default asw)');
 | |
|   writeln('-r | --archiver  <name> - use <name> for archiver (default arw)');
 | |
|   writeln('-h | --help             - show this screen');
 | |
|   halt;
 | |
| end;
 | |
| {$ifndef UNIX}
 | |
| procedure AddExt(var s:string);
 | |
|  var
 | |
|   s1:string;
 | |
|   i:longint;
 | |
|  begin
 | |
|   s1:=copy(s,length(s)-3,4);
 | |
|   for i:=1 to length(s1)do
 | |
|    s1[i]:=upcase(s1[i]);
 | |
|   if s1<>'.EXE'then
 | |
|    s:=s+'.EXE';
 | |
|  end;
 | |
| {$endif}
 | |
| var
 | |
|  EnvPath:string;
 | |
| begin
 | |
| binname:=GetOption('-i','--input');
 | |
| if(binname='')or(Ofound('-h','--help')>0)then
 | |
|   help_info;
 | |
|  as_name:=GetOption('-s','--assembler');
 | |
|  if as_name='' then
 | |
|   as_name:='as';
 | |
|  ar_name:=GetOption('-r','--archiver');
 | |
|  if ar_name='' then
 | |
|   ar_name:='ar';
 | |
| {$ifndef UNIX}
 | |
|  AddExt(as_name);
 | |
|  AddExt(ar_name);
 | |
| {$endif}
 | |
|  EnvPath:=GetEnv('Path');
 | |
|  if EnvPath='' then
 | |
|   EnvPath:=GetEnv('PATH');
 | |
|  as_name:=FSearch(as_name,EnvPath);
 | |
|  ar_name:=FSearch(ar_name,EnvPath);
 | |
| if not makedef(binname,GetOption('-o','--output'),GetOption('-l','--library'))then
 | |
|   begin
 | |
|    writeln('Export names not found');
 | |
|    halt(1);
 | |
|   end;
 | |
| end.
 | 
