diff options
Diffstat (limited to 'refreshexecutableunit.pas')
-rw-r--r-- | refreshexecutableunit.pas | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/refreshexecutableunit.pas b/refreshexecutableunit.pas new file mode 100644 index 0000000..1ce9655 --- /dev/null +++ b/refreshexecutableunit.pas @@ -0,0 +1,67 @@ +unit refreshexecutableunit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils; + +procedure refreshExecutable(myDir: string); + +implementation + +uses baseunix, systemunit, process, lowLevelUnit; + +procedure refreshExecutable(myDir: string); +var + tmpDir,output,summeEins: string; + args: array of string; +begin + output:=''; + tmpDir:=mkTemp('-d /tmp/fpc.XXXXXX'); + mkdir(tmpDir+'/lib'); + setlength(args,15); + args[0]:='-MObjFPC'; + args[1]:='-Scghi'; + args[2]:='-Cg'; + args[3]:='-CirotR'; + args[4]:='-O1'; + args[5]:='-g'; + args[6]:='-gl'; + args[7]:='-l'; + args[8]:='-vewnhibq'; + args[9]:='-Fi'+tmpDir+'/lib'; + args[10]:='-Fu../units'; + args[11]:='-Fu.'; + args[12]:='-FU'+tmpDir+'/lib'; + args[13]:=myDir+extractFileName(paramstr(0)); + if fileexists(args[13]+'.lpr') then + args[13]:=args[13]+'.lpr' + else + args[13]:=args[13]+'.pas'; + args[14]:='-o'+tmpDir+'/output'; + if runCommandInDir(myDir,'fpc',args,output) then begin + setlength(args,2); + args[0]:=tmpDir+'/output'; + args[1]:=paramstr(0); + if runCommand('sha512sum',args,output) then begin + summeEins:=erstesArgument(output,#10); + if erstesArgument(summeEins)<>erstesArgument(output) then begin + deletefile(paramstr(0)); + if runCommand('mv',args,output) then begin + setlength(args,2); + args[0]:='-rf'; + args[1]:=tmpDir; + if runCommand('rm',args,output) then begin + fpExecVe(paramstr(0),argv,envp); + raise exception.create('Fehler beim Ersetzen der Executable!'); + end; + end; + end; + end; + end; +end; + +end. + |