Selaa lähdekoodia

Merge remote-tracking branch 'origin/same_cmd'

Martijn Laan 10 vuotta sitten
vanhempi
commit
9da63f6fe8

+ 1 - 1
Projects/CompTypes.pas

@@ -6,7 +6,7 @@ unit CompTypes;
   Portions by Martijn Laan
   For conditions of distribution and use, see LICENSE.TXT.
 
-  Types and functions used by both IDE, ISCC and ISPPCC units
+  Types and functions used by both IDE and ISCC units
 }
 
 interface

+ 180 - 19
Projects/ISCC.dpr

@@ -32,10 +32,23 @@ type
     Next: PScriptLine;
   end;
 
+  TOptionID = 0..25;
+
+  TOptions = packed set of TOptionID;
+
+  TIsppOptions = packed record
+    ParserOptions: TOptions;
+    Options: TOptions;
+    VerboseLevel: Byte;
+    InlineStart: string[7];
+    InlineEnd: string[7];
+    SpanSymbol: AnsiChar;
+  end;
+
 var
   StdOutHandle, StdErrHandle: THandle;
   ScriptFilename: String;
-  Output, OutputPath, OutputFilename, SignTool: String;
+  IncludePath, Definitions, Output, OutputPath, OutputFilename, SignTool: String;
   ScriptLines, NextScriptLine: PScriptLine;
   CurLine: String;
   StartTime, EndTime: DWORD;
@@ -43,6 +56,8 @@ var
   SignTools: TStringList;
   ProgressPoint: TPoint;
   LastProgress: String;
+  IsppOptions: TIsppOptions;
+  IsppMode: Boolean;
 
 procedure WriteToStdHandle(const H: THandle; S: AnsiString);
 var
@@ -125,7 +140,7 @@ begin
     try
       L.LineText := F.ReadLine;
       if Pos(#0, L.LineText) <> 0 then
-        raise Exception.CreateFmt('Illegal null character on line %d', [LineNumber]); 
+        raise Exception.CreateFmt('Illegal null character on line %d', [LineNumber]);
       L.Next := nil;
     except
       Dispose(L);
@@ -249,11 +264,89 @@ end;
 
 procedure ProcessCommandLine;
 
+  procedure SetOption(var Options: TOptions; Option: Char; Value: Boolean);
+  begin
+    if Value then
+      Include(Options, Ord(UpCase(Option)) - Ord('A'))
+    else
+      Exclude(Options, Ord(UpCase(Option)) - Ord('A'))
+  end;
+
+  procedure InitIsppOptions(var Opt: TIsppOptions; var Definitions, IncludePath: String);
+  begin
+    with Opt do begin
+      SetOption(Options, 'C', True);
+      SetOption(ParserOptions, 'B', True);
+      SetOption(ParserOptions, 'P', True);
+      VerboseLevel := 0;
+      InlineStart := '{#';
+      InlineEnd := '}';
+    end;
+
+    Definitions := 'ISPPCC_INVOKED';
+    IncludePath := ExtractFileDir(NewParamStr(0));
+  end;
+
+  procedure ReadOptionsParam(var Options: TOptions; Symbol: Char);
+  var
+    I: Integer;
+    S: String;
+  begin
+    for I := 1 to NewParamCount do
+    begin
+      S := NewParamStr(I);
+      if Length(S) = 4 then
+        if ((S[1] = '/') or (S[1] = '-')) and (UpCase(S[2]) = Symbol) then
+          case S[4] of
+            '-': SetOption(Options, S[3], False);
+            '+': SetOption(Options, S[3], True)
+          else
+            raise Exception.CreateFmt('Invalid command line option: %s', [S]);
+          end;
+    end;
+  end;
+
+  function IsParam(const S: String): Boolean;
+  begin
+    Result := (Length(S) >= 2) and ((S[1] = '/') or (S[1] = '-'));
+  end;
+
+  function GetParam(var S: String; Symbols: String): Boolean;
+  begin
+    Result := IsParam(S) and
+      (CompareText(Copy(S, 2, Length(Symbols)), Symbols) = 0);
+    if Result then
+      S := Copy(S, 2 + Length(Symbols), MaxInt);
+  end;
+
+  function FindParam(var Index: Integer; Symbols: String): String;
+  var
+    I: Integer;
+    S: String;
+  begin
+    for I := Index to NewParamCount do
+    begin
+      S := NewParamStr(I);
+      if IsParam(S) and (CompareText(Copy(S, 2, Length(Symbols)), Symbols) = 0) then
+      begin
+        Result := Copy(S, 2 + Length(Symbols), MaxInt);
+        Index := I + 1;
+        Exit;
+      end;
+    end;
+    Index := MaxInt;
+    Result := '';
+  end;
+
   procedure ShowBanner;
   begin
     WriteStdOut('Inno Setup 5 Command-Line Compiler');
     WriteStdOut('Copyright (C) 1997-2014 Jordan Russell. All rights reserved.');
     WriteStdOut('Portions Copyright (C) 2000-2014 Martijn Laan');
+    if IsppMode then begin
+      WriteStdOut('Inno Setup Preprocessor');
+      WriteStdOut('Copyright (C) 2001-2004 Alex Yackimoff. All rights reserved.');
+    end;
     WriteStdOut('');
   end;
 
@@ -268,36 +361,70 @@ procedure ProcessCommandLine;
     WriteStdErr('  /S<name>=<command> Sets a SignTool with the specified name and command');
     WriteStdErr('  /Q                 Quiet compile (print error messages only)');
     WriteStdErr('  /Qp                Enable quiet compile while still displaying progress');
+    if IsppMode then begin
+      WriteStdErr('  /D<name>[=<value>] Emulate #define public <name> <value>');
+      WriteStdErr('  /$<letter>(+|-)    Emulate #pragma option -<letter>(+|-)');
+      WriteStdErr('  /P<letter>(+|-)    Emulate #pragma parseroption -<letter>(+|-)');
+      WriteStdErr('  /I<paths>          Emulate #pragma include <paths>');
+      WriteStdErr('  /{#<string>        Emulate #pragma inlinestart <string>');
+      WriteStdErr('  /}<string>         Emulate #pragma inlineend <string>');
+      WriteStdErr('  /V<number>         Emulate #pragma verboselevel <number>');
+    end;
     WriteStdErr('  /?                 Show this help screen');
+    if IsppMode then begin
+      WriteStdErr('');
+      WriteStdErr('Example: iscc /$c- /Pu+ "/DLic=Trial Lic.txt" /IC:\INC;D:\INC scriptfile.iss');
+      WriteStdErr('');
+    end;
   end;
 
 var
   I: Integer;
   S: String;
 begin
+  if IsppMode then begin
+    InitIsppOptions(IsppOptions, Definitions, IncludePath);
+    ReadOptionsParam(IsppOptions.Options, '$');
+    ReadOptionsParam(IsppOptions.ParserOptions, 'p');
+  end;
+
   for I := 1 to NewParamCount do begin
     S := NewParamStr(I);
-    if (S = '') or (S[1] = '/') then begin
-      if CompareText(Copy(S, 1, 2), '/Q') = 0 then
-      begin
+    if (S = '') or IsParam(S) then begin
+      if GetParam(S, 'Q') then begin
         Quiet := True;
-        ShowProgress := CompareText(Copy(S, 3, MaxInt), 'P') = 0;
+        ShowProgress := CompareText(S, 'P') = 0;
       end
-      else if CompareText(Copy(S, 1, 3), '/O-') = 0 then
-        Output := 'no'
-      else if CompareText(Copy(S, 1, 3), '/O+') = 0 then
-        Output := 'yes'
-      else if CompareText(Copy(S, 1, 2), '/O') = 0 then
-        OutputPath := Copy(S, 3, MaxInt)
-      else if CompareText(Copy(S, 1, 2), '/F') = 0 then
-        OutputFilename := Copy(S, 3, MaxInt)
-      else if CompareText(Copy(S, 1, 2), '/S') = 0 then begin
-        SignTool := Copy(S, 3, MaxInt);
+      else if GetParam(S, 'O') then begin
+        if S = '-' then Output := 'no'
+        else if S = '+' then Output := 'yes'
+        else OutputPath := S;
+      end
+      else if GetParam(S, 'F') then
+        OutputFilename := S
+      else if GetParam(S, 'S') then begin
+        SignTool := S;
         if Pos('=', SignTool) = 0 then begin
           ShowBanner;
           WriteStdErr('Invalid option: ' + S);
           Halt(1);
         end;
+      end else if IsppMode and GetParam(S, 'D') then begin
+        if (Pos(';', S) > 0) or (Pos(' ', S) > 0) then
+          S := AddQuotes(S);
+        Definitions := Definitions + ';' + S;
+      end
+      else if IsppMode and GetParam(S, 'I') then begin
+        IncludePath := IncludePath + ';' + S;
+      end
+      else if IsppMode and GetParam(S, '{#') then begin
+        if S <> '' then IsppOptions.InlineStart := AnsiString(S);
+      end
+      else if IsppMode and GetParam(S, '}') then begin
+        if S <> '' then IsppOptions.InlineEnd := AnsiString(S);
+      end
+      else if IsppMode and GetParam(S, 'V') then begin
+        if S <> '' then IsppOptions.VerboseLevel := StrToIntDef(S, 0);
       end
       else if S = '/?' then begin
         ShowBanner;
@@ -332,6 +459,36 @@ begin
 end;
 
 procedure Go;
+
+  procedure AppendOption(var Opts: String; const OptName, OptValue: String);
+  begin
+    Opts := Opts + OptName + '=' + OptValue + #0;
+  end;
+
+  function ConvertOptionsToString(const Options: TOptions): String;
+  var
+    I: TOptionID;
+  begin
+    Result := '';
+    for I := 0 to 25 do
+      if I in Options then
+        Result := Result + Chr(Ord('a') + I);
+  end;
+
+  procedure IsppOptionsToString(var S: String; Opt: TIsppOptions; Definitions, IncludePath: String);
+  begin
+    with Opt do begin
+      AppendOption(S, 'ISPP:ParserOptions', ConvertOptionsToString(ParserOptions));
+      AppendOption(S, 'ISPP:Options', ConvertOptionsToString(Options));
+      AppendOption(S, 'ISPP:VerboseLevel', IntToStr(VerboseLevel));
+      AppendOption(S, 'ISPP:InlineStart', String(InlineStart));
+      AppendOption(S, 'ISPP:InlineEnd', String(InlineEnd));
+    end;
+
+    AppendOption(S, 'ISPP:IncludePath', IncludePath);
+    AppendOption(S, 'ISPP:Definitions', Definitions);
+  end;
+
 var
   ScriptPath: String;
   ExitCode: Integer;
@@ -388,11 +545,11 @@ begin
     Params.CallbackProc := CompilerCallbackProc;
     Options := '';
     if Output <> '' then
-      Options := Options + 'Output=' + Output + #0;
+      AppendOption(Options, 'Output', Output);
     if OutputPath <> '' then
-      Options := Options + 'OutputDir=' + OutputPath + #0;
+      AppendOption(Options, 'OutputDir', OutputPath);
     if OutputFilename <> '' then
-      Options := Options + 'OutputBaseFilename=' + OutputFilename + #0;
+      AppendOption(Options, 'OutputBaseFilename', OutputFilename);
 
     ReadSignTools(SignTools);
     for I := 0 to SignTools.Count-1 do
@@ -401,6 +558,9 @@ begin
     if SignTool <> '' then
       Options := Options + AddSignToolParam(SignTool);
 
+    if IsppMode then
+      IsppOptionsToString(Options, IsppOptions, Definitions, IncludePath);
+
     Params.Options := PChar(Options);
 
     StartTime := GetTickCount;
@@ -433,6 +593,7 @@ begin
   StdErrHandle := GetStdHandle(STD_ERROR_HANDLE);
   SetConsoleCtrlHandler(@ConsoleCtrlHandler, True);
   try
+    IsppMode := FileExists(ExtractFilePath(NewParamStr(0)) + 'ispp.dll');
     ProcessCommandLine;
     Go;
   except

+ 0 - 136
Projects/ISPP/ISPPCC.dof

@@ -1,136 +0,0 @@
-[FileVersion]
-Version=7.0
-[Compiler]
-A=8
-B=0
-C=1
-D=1
-E=0
-F=0
-G=1
-H=1
-I=1
-J=0
-K=0
-L=1
-M=0
-N=1
-O=1
-P=1
-Q=0
-R=0
-S=0
-T=0
-U=0
-V=1
-W=0
-X=1
-Y=1
-Z=1
-ShowHints=1
-ShowWarnings=1
-UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-NamespacePrefix=
-SymbolDeprecated=1
-SymbolLibrary=1
-SymbolPlatform=1
-UnitLibrary=1
-UnitPlatform=1
-UnitDeprecated=1
-HResultCompat=1
-HidingMember=1
-HiddenVirtual=1
-Garbage=1
-BoundsError=1
-ZeroNilCompat=1
-StringConstTruncated=1
-ForLoopVarVarPar=1
-TypedConstVarPar=1
-AsgToTypedConst=1
-CaseLabelRange=1
-ForVariable=1
-ConstructingAbstract=1
-ComparisonFalse=1
-ComparisonTrue=1
-ComparingSignedUnsigned=1
-CombiningSignedUnsigned=1
-UnsupportedConstruct=1
-FileOpen=1
-FileOpenUnitSrc=1
-BadGlobalSymbol=1
-DuplicateConstructorDestructor=1
-InvalidDirective=1
-PackageNoLink=1
-PackageThreadVar=1
-ImplicitImport=1
-HPPEMITIgnored=1
-NoRetVal=1
-UseBeforeDef=1
-ForLoopVarUndef=1
-UnitNameMismatch=1
-NoCFGFileFound=1
-MessageDirective=1
-ImplicitVariants=1
-UnicodeToLocale=1
-LocaleToUnicode=1
-ImagebaseMultiple=1
-SuspiciousTypecast=1
-PrivatePropAccessor=1
-UnsafeType=0
-UnsafeCode=0
-UnsafeCast=0
-[Linker]
-MapFile=0
-OutputObjs=0
-ConsoleApp=1
-DebugInfo=0
-RemoteSymbols=0
-MinStackSize=16384
-MaxStackSize=1048576
-ImageBase=4194304
-ExeDescription=
-[Directories]
-OutputDir=
-UnitOutputDir=
-PackageDLLOutputDir=
-PackageDCPOutputDir=
-SearchPath=
-Packages=vcl;rtl;vclx;indy;vclie;xmlrtl;inetdbbde;inet;inetdbxpress;dbrtl;soaprtl;dsnap;VclSmp;dbexpress;vcldb;dbxcds;inetdb;bdertl;vcldbx;adortl;teeui;teedb;tee;ibxpress;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP
-Conditionals=IS_ALLOWD7;PS_MINIVCL;PS_NOWIDESTRING;PS_NOINT64;PS_NOGRAPHCONST
-DebugSourceDirs=
-UsePackages=0
-[Parameters]
-RunParams=
-HostApplication=
-Launcher=
-UseLauncher=0
-DebugCWD=
-[Language]
-ActiveLang=
-ProjectLang=
-RootDir=
-[Version Info]
-IncludeVerInfo=1
-AutoIncBuild=0
-MajorVer=0
-MinorVer=0
-Release=0
-Build=0
-Debug=0
-PreRelease=0
-Special=0
-Private=0
-DLL=0
-Locale=1033
-CodePage=1252
-[Version Info Keys]
-CompanyName=Jordan Russell
-FileDescription=Inno Setup Preprocessor Command-Line Compiler
-FileVersion=0.0.0.0
-InternalName=
-LegalCopyright=Copyright (C) 1997-2010 Jordan Russell. Portions Copyright (C) 2000-2010 Martijn Laan. Copyright © 2001-2004 Alex Yackimoff.
-LegalTrademarks=
-OriginalFilename=
-ProductName=Inno Setup
-ProductVersion=0.0.0.0
-Comments=Inno Setup home page: http://www.innosetup.com

+ 0 - 534
Projects/ISPP/ISPPCC.dpr

@@ -1,534 +0,0 @@
-{
-  Inno Setup Preprocessor
-  Copyright (C) 2001-2002 Alex Yackimoff
-  $Id: ISPPCC.dpr,v 1.29 2011/03/16 08:43:35 mlaan Exp $
-}
-
-program ISPPCC;
-{$APPTYPE CONSOLE}
-
-{
-  Inno Setup
-  Copyright (C) 1997-2014 Jordan Russell
-  Portions by Martijn Laan
-  For conditions of distribution and use, see LICENSE.TXT.
-
-  Command-line compiler
-
-  $xId: ISCC.dpr,v 1.8 2002/04/11 00:06:52 jr Exp $
-}
-
-uses
-  SafeDLLPath in '..\SafeDLLPath.pas',
-  Windows,
-  SysUtils,
-  Classes,
-  PathFunc in '..\..\Components\PathFunc.pas',
-  CmnFunc2 in '..\CmnFunc2.pas',
-  FileClass in '..\FileClass.pas',
-  IsppIntf in 'IsppIntf.pas',
-  IsppBase in 'IsppBase.pas',
-  CompInt in '..\CompInt.pas',
-  Int64Em in '..\Int64Em.pas',
-  CompTypes in '..\CompTypes.pas';
-
-{$R *.res}
-{$R ISPPCC.manifest.res}
-
-{$I ..\VERSION.INC}
-
-type
-  PScriptLine = ^TScriptLine;
-  TScriptLine = record
-    LineText: String;
-    Next: PScriptLine;
-  end;
-
-var
-  StdOutHandle, StdErrHandle: THandle;
-  ScriptFilename: String;
-  ScriptLines, NextScriptLine: PScriptLine;
-  CurLine: String;
-  StartTime, EndTime: DWORD;
-  Quiet, ShowProgress, WantAbort: Boolean;
-  Options: TIsppOptions;
-  SignTools: TStringList;
-  ProgressPoint: TPoint;
-  LastProgress: String;
-
-procedure WriteToStdHandle(const H: THandle; S: AnsiString);
-var
-  BytesWritten: DWORD;
-begin
-  if Copy(S, 1, 1) <> #13 then S := S + #13#10;
-  WriteFile(H, S[1], Length(S), BytesWritten, nil);
-end;
-
-procedure WriteStdOut(const S: String);
-begin
-  WriteToStdHandle(StdOutHandle, AnsiString(S));
-end;
-
-procedure WriteStdErr(const S: String);
-begin
-  WriteToStdHandle(StdErrHandle, AnsiString(S));
-end;
-
-function GetCursorPos: TPoint;
-var
-  CSBI: TConsoleScreenBufferInfo;
-begin
-  if not GetConsoleScreenBufferInfo(StdOutHandle, CSBI) then
-    Exit;
-  Result.X := CSBI.dwCursorPosition.X;
-  Result.Y := CSBI.dwCursorPosition.Y;
-end;
-
-procedure SetCursorPos(const P: TPoint);
-var
-  Coords: TCoord;
-  CSBI: TConsoleScreenBufferInfo;
-begin
-  if not GetConsoleScreenBufferInfo(StdOutHandle, CSBI) then
-    Exit;
-  if P.X < 0 then Exit;
-  if P.Y < 0 then Exit;
-  if P.X > CSBI.dwSize.X then Exit;
-  if P.Y > CSBI.dwSize.Y then Exit;
-  Coords.X := P.X;
-  Coords.Y := P.Y;
-  SetConsoleCursorPosition(StdOutHandle, Coords);
-end;
-
-procedure WriteProgress(const S: String);
-var
-  CSBI: TConsoleScreenBufferInfo;
-  Str: String;
-begin
-  if GetConsoleScreenBufferInfo(StdOutHandle, CSBI) then
-  begin
-    if Length(S) > CSBI.dwSize.X then
-      Str := Copy(S, 1, CSBI.dwSize.X)
-    else
-      Str := Format('%-' + IntToStr(CSBI.dwSize.X) + 's', [S]);
-  end
-  else
-    Str := S;
-
-  WriteToStdHandle(StdOutHandle, AnsiString(Str));
-end;
-
-function ConsoleCtrlHandler(dwCtrlType: DWORD): BOOL; stdcall;
-begin
-  { Abort gracefully when Ctrl+C/Break is pressed }
-  WantAbort := True;
-  Result := True;
-end;
-
-procedure ReadScriptLines(const F: TTextFileReader);
-var
-  LineNumber: Integer;
-  PrevLine, L: PScriptLine;
-begin
-  LineNumber := 1;
-  PrevLine := nil;
-  while not F.Eof do begin
-    New(L);
-    try
-      L.LineText := F.ReadLine;
-      if Pos(#0, L.LineText) <> 0 then
-        raise Exception.CreateFmt('Illegal null character on line %d', [LineNumber]); 
-      L.Next := nil;
-    except
-      Dispose(L);
-      raise;
-    end;
-    if Assigned(PrevLine) then
-      PrevLine.Next := L
-    else begin
-      ScriptLines := L;
-      NextScriptLine := L;
-    end;
-    PrevLine := L;
-    Inc(LineNumber);
-  end;
-end;
-
-procedure FreeScriptLines;
-var
-  L, NextLine: PScriptLine;
-begin
-  L := ScriptLines;
-  ScriptLines := nil;
-  NextScriptLine := nil;
-  while Assigned(L) do begin
-    NextLine := L.Next;
-    Dispose(L);
-    L := NextLine;
-  end;
-end;
-
-function CompilerCallbackProc(Code: Integer; var Data: TCompilerCallbackData;
-  AppData: Longint): Integer; stdcall;
-
-  procedure PrintProgress(Progress: String);
-  var
-    Pt: TPoint;
-  begin
-    if (Progress = '') or (LastProgress = Progress) then
-      Exit;
-
-    Pt := GetCursorPos;
-
-    if Pt.Y <= ProgressPoint.Y then
-      Exit
-    else if ProgressPoint.X < 0 then begin
-      ProgressPoint := Pt;
-      WriteStdOut('');
-      Pt := GetCursorPos;
-    end;
-
-    SetCursorPos(ProgressPoint);
-    WriteProgress(#13 + Progress);
-    LastProgress := Progress;
-    SetCursorPos(Pt);
-  end;
-
-var
-  S, BytesCompressedPerSecond, SecondsRemaining: String;
-begin
-  if WantAbort then begin
-    Result := iscrRequestAbort;
-    Exit;
-  end;
-  Result := iscrSuccess;
-  case Code of
-    iscbReadScript: begin
-        { Note: In Inno Setup 3.0.1 and later we can ignore Data.Reset since
-          it is only True once (when reading the first line). }
-        if Assigned(NextScriptLine) then begin
-          CurLine := NextScriptLine.LineText;
-          NextScriptLine := NextScriptLine.Next;
-          Data.LineRead := PChar(CurLine);
-        end;
-      end;
-    iscbNotifyStatus:
-      if not Quiet then
-        WriteStdOut(Data.StatusMsg)
-      else if ShowProgress then
-        PrintProgress(Trim(Data.StatusMsg));
-    iscbNotifySuccess: begin
-        EndTime := GetTickCount;
-        if not Quiet then begin
-          WriteStdOut('');
-          if Data.OutputExeFilename <> '' then begin
-            WriteStdOut(Format('Successful compile (%.3f sec). ' +
-              'Resulting Setup program filename is:',
-              [(EndTime - StartTime) / 1000]));
-            WriteStdOut(Data.OutputExeFilename);
-          end else
-            WriteStdOut(Format('Successful compile (%.3f sec). ' +
-              'Output was disabled.',
-              [(EndTime - StartTime) / 1000]));
-        end;
-      end;
-    iscbNotifyError:
-      if Assigned(Data.ErrorMsg) then begin
-        S := 'Error';
-        if Data.ErrorLine <> 0 then
-          S := S + Format(' on line %d', [Data.ErrorLine]);
-        if Assigned(Data.ErrorFilename) then
-          S := S + ' in ' + Data.ErrorFilename
-        else if ScriptFilename <> '' then
-          S := S + ' in ' + ScriptFilename;
-        S := S + ': ' + Data.ErrorMsg;
-        WriteStdErr(S);
-      end;
-    iscbNotifyIdle:
-      if ShowProgress and (Data.CompressProgress <> 0) then begin
-        if Data.BytesCompressedPerSecond <> 0 then
-          BytesCompressedPerSecond := Format(' at %.2f kb/s', [Data.BytesCompressedPerSecond / 1024])
-        else
-          BytesCompressedPerSecond := '';
-        if Data.SecondsRemaining <> -1 then
-          SecondsRemaining := Format(', %d seconds remaining', [Data.SecondsRemaining])
-        else
-          SecondsRemaining := '';
-        PrintProgress(Format('Compressing: %.2f%% done%s%s', [Data.CompressProgress / Data.CompressProgressMax * 100, BytesCompressedPerSecond, SecondsRemaining]));
-      end;
-  end;
-end;
-
-procedure PopulateOptions(var Options: TOptions; Symbol: Char);
-var
-  I: Integer;
-  S: string;
-begin
-  for I := 1 to ParamCount do
-  begin
-    S := ParamStr(I);
-    if Length(S) = 4 then
-    if ((S[1] = '/') or (S[1] = '-')) and (UpCase(S[2]) = Symbol) then
-      case S[4] of
-        '-': SetOption(Options, S[3], False);
-        '+': SetOption(Options, S[3], True)
-      else
-        raise Exception.CreateFmt('Invalid command line option: %s', [S]);
-      end;
-  end;
-end;
-
-function IsParam(const S: String): Boolean;
-begin
-  Result := (Length(S) >= 2) and ((S[1] = '/') or (S[1] = '-'));
-end;
-
-function FindParam(var Index: Integer; Symbols: String): String;
-var
-  I: Integer;
-  S: string;
-begin
-  for I := Index to ParamCount do
-  begin
-    S := ParamStr(I);
-    if IsParam(S) and (CompareText(Copy(S, 2, Length(Symbols)), Symbols) = 0) then
-    begin
-      Result := Copy(S, 2 + Length(Symbols), MaxInt);
-      Index := I + 1;
-      Exit;
-    end;
-  end;
-  Index := MaxInt;
-  Result := '';
-end;
-
-function ConvertOptionsToString(const Options: TOptions): String;
-var
-  I: TOptionID;
-begin
-  Result := '';
-  for I := 0 to 25 do
-    if I in Options then
-      Result := Result + Chr(Ord('a') + I);
-end;
-
-procedure AppendOption(var Opts: String; const OptName, OptValue: String);
-begin
-  Opts := Opts + OptName + '=' + OptValue + #0;
-end;
-
-procedure Go;
-
-  procedure ShowBanner;
-  begin
-    WriteStdOut('Inno Setup 5 Command-Line Compiler');
-    WriteStdOut('Copyright (C) 1997-2014 Jordan Russell. All rights reserved.');
-    WriteStdOut('Portions Copyright (C) 2000-2014 Martijn Laan');
-    WriteStdOut('Inno Setup Preprocessor');
-    WriteStdOut('Copyright (C) 2001-2004 Alex Yackimoff. All rights reserved.');
-    WriteStdOut('');
-  end;
-
-  procedure ShowUsage;
-  begin
-    WriteStdErr('Usage:  iscc [options] scriptfile.iss');
-    WriteStdErr('or to read from standard input:  iscc [options] -');
-    WriteStdErr('Options:');
-    WriteStdErr('  /O(+|-)            Enable or disable output (overrides Output)');
-    WriteStdErr('  /O<path>           Output files to specified path (overrides OutputDir)');
-    WriteStdErr('  /F<filename>       Overrides OutputBaseFilename with the specified filename');
-    WriteStdErr('  /S<name>=<command> Sets a SignTool with the specified name and command');
-    WriteStdErr('  /Q                 Quiet compile (print error messages only)');
-    WriteStdErr('  /Qp                Enable quiet compile while still displaying progress');
-    WriteStdErr('  /D<name>[=<value>] Emulate #define public <name> <value>');
-    WriteStdErr('  /$<letter>(+|-)    Emulate #pragma option -<letter>(+|-)');
-    WriteStdErr('  /P<letter>(+|-)    Emulate #pragma parseroption -<letter>(+|-)');
-    WriteStdErr('  /I<paths>          Emulate #pragma include <paths>');
-    WriteStdErr('  /{#<string>        Emulate #pragma inlinestart <string>');
-    WriteStdErr('  /}<string>         Emulate #pragma inlineend <string>');
-    WriteStdErr('  /V<number>         Emulate #pragma verboselevel <number>');
-    WriteStdErr('  /?                 Show this help screen');
-    WriteStdErr('');
-    WriteStdErr('Example: iscc /$c- /Pu+ "/DLic=Trial Lic.txt" /IC:\INC;D:\INC scriptfile.iss');
-  end;
-
-var
-  ScriptPath: String;
-  ExitCode: Integer;
-  Ver: PCompilerVersionInfo;
-  F: TTextFileReader;
-  Params: TCompileScriptParamsEx;
-  I: Integer;
-  S, IncludePath, Definitions, Output, OutputPath, OutputFilename, SignTool: string;
-  Res: Integer;
-begin
-  I := 1;
-  ShowProgress := 'P' = UpperCase(FindParam(I, 'Q')) ;
-  Quiet := I <> MaxInt;
-
-  if (ParamCount < 1) or (ParamStr(1) = '/?') then begin
-    ShowBanner;
-    ShowUsage;
-    Halt(1);
-  end;
-
-  if not Quiet then
-    ShowBanner;
-
-  ScriptFilename := '';
-
-  for I := 1 to ParamCount do begin
-    S := ParamStr(I);
-    if not IsParam(S) then begin
-      if ScriptFilename <> '' then
-        raise Exception.Create('Script file name specified more than once');
-      ScriptFileName := S;
-    end;
-  end;
-
-  if ScriptFilename = '' then
-    raise Exception.Create('Script file name not specified');
-
-  if ScriptFilename <> '-' then begin
-    ScriptFilename := PathExpand(ScriptFilename);
-    ScriptPath := PathExtractPath(ScriptFilename);
-  end
-  else begin
-    { Read from standard input }
-    ScriptFilename := '<stdin>';
-    ScriptPath := GetCurrentDir;
-  end;
-
-  Ver := ISDllGetVersion;
-  if Ver.BinVersion < $05000500 then begin
-    { 5.0.5 or later is required since we use TCompileScriptParamsEx }
-    WriteStdErr('Incompatible compiler engine version.');
-    Halt(1);
-  end;
-
-  SetOption(Options.Options, 'C', True);
-  SetOption(Options.ParserOptions.Options, 'B', True);
-  SetOption(Options.ParserOptions.Options, 'P', True);
-  Options.VerboseLevel := 0;
-  Options.InlineStart := '{#';
-  Options.InlineEnd := '}';
-
-  PopulateOptions(Options.Options, '$');
-  PopulateOptions(Options.ParserOptions.Options, 'p');
-
-  I := 1;
-  Definitions := 'ISPPCC_INVOKED';
-  S := FindParam(I, 'D');
-  while S <> '' do
-  begin
-    if (Pos(';', S) > 0) or (Pos(' ', S) > 0) then
-      S := AnsiQuotedStr(S, '"');
-    Definitions := Definitions + ';' + S;
-    S := FindParam(I, 'D')
-  end;
-  I := 1;
-  IncludePath := ExtractFileDir(ParamStr(0));
-  S := FindParam(I, 'I');
-  while S <> '' do
-  begin
-    IncludePath := IncludePath + ';' + S;
-    S := FindParam(I, 'I');
-  end;
-  I := 1; S := FindParam(I, '{#');
-  if S <> '' then Options.InlineStart := AnsiString(S);
-  I := 1; S := FindParam(I, '}');
-  if S <> '' then Options.InlineEnd := AnsiString(S);
-  I := 1; S := FindParam(I, 'V');
-  if S <> '' then Options.VerboseLevel := StrToIntDef(S, 0);
-  I := 1; S := FindParam(I, 'O');
-  while S <> '' do
-  begin
-    if S = '-' then Output := 'no'
-    else if S = '+' then Output := 'yes'
-    else OutputPath := S;
-    S := FindParam(I, 'O');
-  end;
-  I := 1; OutputFileName := FindParam(I, 'F');
-  I := 1; SignTool := FindParam(I, 'S');
-
-  SignTools := TStringList.Create;
-  ProgressPoint.X := -1;
-  ExitCode := 0;
-  try
-    if ScriptFilename <> '<stdin>' then
-      F := TTextFileReader.Create(ScriptFilename, fdOpenExisting, faRead, fsRead)
-    else
-      F := TTextFileReader.CreateWithExistingHandle(GetStdHandle(STD_INPUT_HANDLE));
-    try
-      ReadScriptLines(F);
-    finally
-      F.Free;
-    end;
-
-    if not Quiet then begin
-      WriteStdOut('Compiler engine version: ' + String(Ver.Title) + ' ' + String(Ver.Version));
-      WriteStdOut('');
-    end;
-
-    FillChar(Params, SizeOf(Params), 0);
-    Params.Size := SizeOf(Params);
-    Params.SourcePath := PChar(ScriptPath);
-    Params.CallbackProc := CompilerCallbackProc;
-    S := '';
-    if Output <> '' then
-      AppendOption(S, 'Output', Output);
-    if OutputPath <> '' then
-      AppendOption(S, 'OutputDir', OutputPath);
-    if OutputFilename <> '' then
-      AppendOption(S, 'OutputBaseFilename', OutputFilename);
-
-    ReadSignTools(SignTools);
-    for I := 0 to SignTools.Count-1 do
-      if (SignTool = '') or (Pos(UpperCase(SignTools.Names[I]) + '=', UpperCase(SignTool)) = 0) then
-        S := S + AddSignToolParam(SignTools[I]);
-    if SignTool <> '' then
-      S := S + AddSignToolParam(SignTool);
-
-    AppendOption(S, 'ISPP:ParserOptions', ConvertOptionsToString(Options.ParserOptions.Options));
-    AppendOption(S, 'ISPP:Options', ConvertOptionsToString(Options.Options));
-    AppendOption(S, 'ISPP:VerboseLevel', IntToStr(Options.VerboseLevel));
-    AppendOption(S, 'ISPP:InlineStart', String(Options.InlineStart));
-    AppendOption(S, 'ISPP:InlineEnd', String(Options.InlineEnd));
-    AppendOption(S, 'ISPP:IncludePath', IncludePath);
-    AppendOption(S, 'ISPP:Definitions', Definitions);
-    Params.Options := PChar(S);
-
-    StartTime := GetTickCount;
-    Res := ISDllCompileScript(Params);
-    case Res of
-      isceNoError: ;
-      isceCompileFailure: begin
-          ExitCode := 2;
-          WriteStdErr('Compile aborted.');
-        end;
-    else
-      ExitCode := 1;
-      WriteStdErr(Format('Internal error: ISDllCompileScript returned ' +
-        'unexpected result (%d).', [Res]));
-    end;
-  finally
-    SignTools.Free;
-    FreeScriptLines;
-  end;
-  if ExitCode <> 0 then
-    Halt(ExitCode);
-end;
-
-begin
-  StdOutHandle := GetStdHandle(STD_OUTPUT_HANDLE);
-  StdErrHandle := GetStdHandle(STD_ERROR_HANDLE);
-  SetConsoleCtrlHandler(@ConsoleCtrlHandler, True);
-  try
-    Go;
-  except
-    { Show a friendlier exception message. (By default, Delphi prints out
-      the exception class and address.) }
-    WriteStdErr(GetExceptMessage);
-    Halt(2);
-  end;
-end.

+ 0 - 1
Projects/ISPP/ISPPCC.manifest.rc

@@ -1 +0,0 @@
-1 24 ISPPCC.manifest.txt

BIN
Projects/ISPP/ISPPCC.manifest.res


+ 0 - 19
Projects/ISPP/ISPPCC.manifest.txt

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
-<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
-    <security>
-        <requestedPrivileges>
-            <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
-        </requestedPrivileges>
-    </security>
-</trustInfo>
-<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
-    <application>
-        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
-        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
-        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
-        <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
-        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
-    </application>
-</compatibility>
-</assembly>

BIN
Projects/ISPP/ISPPCC.res


+ 2 - 5
README.md

@@ -167,9 +167,6 @@ performs all (un)installation-related tasks.
 Setup program into the user's TEMP directory and runs it from there. It also
 displays the "This will install..." and /HELP message boxes.
 
-**ISPP\ISPPCC** - This is Inno Setup's ISCC command-line front-end with extra
-preprocessor related parameters added.
-
 **ISPP\ISPP** - This is a DLL implementing Inno Setup's preprocessor interface
 
 How do the projects link together?
@@ -183,7 +180,7 @@ How do the projects link together?
   clauses of the projects and units if you aren't sure if a project uses a
   particular unit.
 
-- ISPP and ISPPCC use various copies of other Inno Setup files. To synch these
+- ISPP uses various copies of other Inno Setup files. To synch these
   run synch-isfiles.bat.
 
 5. Source code tips
@@ -279,4 +276,4 @@ Compiled by Visual Studio 2005 from the Examples\MyProg directory.
 
 - When mentioning something the user would type in a script, e.g. "MinVersion",
   surround it by `<tt></tt>` so that it's displayed in the Courier New font. This is
-  a convention used throughout the help file. Example: `<tt>MinVersion</tt>`
+  a convention used throughout the help file. Example: `<tt>MinVersion</tt>`

+ 2 - 2
build.bat

@@ -55,7 +55,7 @@ echo - Setup.exe
 if exist .\setup-sign.bat (
   call .\setup-sign.bat
 ) else (
-  files\isppcc setup.iss /q /DNOSIGNTOOL
+  files\iscc setup.iss /q /DNOSIGNTOOL
 )
 if errorlevel 1 goto failed
 echo - Copying ISCC for ISPack
@@ -79,7 +79,7 @@ echo - Setup.exe
 if exist .\setup-sign.bat (
   call .\setup-sign.bat
 ) else (
-  files\isppcc setup.iss /q /DNOSIGNTOOL
+  files\iscc setup.iss /q /DNOSIGNTOOL
 )
 if errorlevel 1 goto failed
 echo - Copying ISCC for ISPack

+ 0 - 4
compile-unicode.bat

@@ -34,10 +34,6 @@ if errorlevel 1 goto exit
 cd ISPP
 if errorlevel 1 goto failed
 
-echo - ISPPCC.dpr
-"%DELPHI2009ROOT%\bin\dcc32.exe" --no-config --peflags:1 --string-checks:off -Q -B -H -W %1 -U"%DELPHI2009ROOT%\lib" -E..\..\Files ISPPCC.dpr
-if errorlevel 1 goto failed
-
 echo - ISPP.dpr
 "%DELPHI2009ROOT%\bin\dcc32.exe" --no-config --string-checks:off -Q -B -H -W %1 -U"%DELPHI2009ROOT%\lib" -E..\..\Files ISPP.dpr
 if errorlevel 1 goto failed

+ 1 - 6
compile.bat

@@ -40,10 +40,6 @@ if errorlevel 1 goto exit
 cd ISPP
 if errorlevel 1 goto failed
 
-echo - ISPPCC.dpr
-"%DELPHI7ROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHI7ROOT%\lib" -E..\..\Files ISPPCC.dpr -DIS_ALLOWD7
-if errorlevel 1 goto failed
-
 echo - ISPP.dpr
 "%DELPHI7ROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHI7ROOT%\lib" -E..\..\Files ISPP.dpr -DIS_ALLOWD7
 if errorlevel 1 goto failed
@@ -57,7 +53,6 @@ if errorlevel 1 goto failed
 echo - ISCC.dpr
 "%DELPHIROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHIROOT%\lib;..\Components;..\Components\Ps\Source" -E..\Files -DPS_MINIVCL;PS_NOWIDESTRING;PS_NOINT64;PS_NOGRAPHCONST ISCC.dpr
 if errorlevel 1 goto failed
-
 echo - ISCmplr.dpr
 "%DELPHIROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHIROOT%\lib;..\Components;..\Components\Ps\Source" -E..\Files -DPS_MINIVCL;PS_NOWIDESTRING;PS_NOINT64;PS_NOGRAPHCONST ISCmplr.dpr
 if errorlevel 1 goto failed
@@ -79,7 +74,7 @@ move Setup.exe Setup.e32
 if errorlevel 1 goto failed
 
 echo - StripReloc'ing
-stripreloc /b- Compil32.exe ISCC.exe SetupLdr.e32 Setup.e32 ISPPCC.exe
+stripreloc /b- Compil32.exe ISCC.exe SetupLdr.e32 Setup.e32
 if errorlevel 1 goto failed
 
 echo Success!

+ 1 - 1
ishelp/compile.bat

@@ -34,7 +34,7 @@ if errorlevel 1 goto failed
 echo.
 echo Running help compiler:
 echo.
-del Staging\isetup.chm
+if exist Staging\isetup.chm del Staging\isetup.chm
 if exist Staging\isetup.chm goto failed
 "%HHCEXE%" Staging\hh_project.hhp
 if %errorlevel% neq 1 goto failed

+ 1 - 2
setup.iss

@@ -95,7 +95,7 @@ Source: "license.txt"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "ishelp\Staging\ISetup.chm"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\Compil32.exe"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\isscint.dll"; DestDir: "{app}"; Flags: ignoreversion touch
-Source: "files\ISCC.exe"; DestDir: "{app}"; Flags: ignoreversion touch; Check: not ISPPCheck
+Source: "files\ISCC.exe"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\ISCmplr.dll"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\Setup.e32"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\SetupLdr.e32"; DestDir: "{app}"; Flags: ignoreversion touch
@@ -171,7 +171,6 @@ Source: "Examples\ISPPExample1.iss"; DestDir: "{app}\Examples"; Flags: ignorever
 Source: "Examples\ISPPExample1License.txt"; DestDir: "{app}\Examples"; Flags: ignoreversion touch
 ; ISPP files
 Source: "Projects\ISPP\Help\Staging\ISPP.chm"; DestDir: "{app}"; Flags: ignoreversion touch
-Source: "files\ISPPCC.exe"; DestDir: "{app}"; DestName: "ISCC.exe"; Flags: ignoreversion touch; Check: ISPPCheck
 Source: "files\ISPP.dll"; DestDir: "{app}"; Flags: ignoreversion touch; Check: ISPPCheck
 Source: "files\ISPPBuiltins.iss"; DestDir: "{app}"; Flags: ignoreversion touch; Check: ISPPCheck