summaryrefslogtreecommitdiff
path: root/refreshexecutableunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'refreshexecutableunit.pas')
-rw-r--r--refreshexecutableunit.pas67
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.
+