summaryrefslogtreecommitdiff
path: root/refreshexecutableunit.pas
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2015-12-09 12:59:37 +0100
committerErich Eckner <git@eckner.net>2015-12-09 12:59:37 +0100
commitde3564b370141744197501fc6aa645eddf84fc23 (patch)
tree29e55001b71e30b54f8e20e4eb8ce4a0ca31755b /refreshexecutableunit.pas
parent92dd95e43f55bed097ff1f57c41b4462640b083a (diff)
downloadunits-de3564b370141744197501fc6aa645eddf84fc23.tar.xz
refreshexecutableunit.pas neu und in gitupdateunit.pas verwendet
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.
+