root/trunk/IssBuilderServiceClass.pas

Revision 158, 12.9 kB (checked in by sagrer, 5 months ago)
  1. Поправлены параметры запуска VerRevUpdater? через IDE
  2. Прикручена локализация в FlistFormat?.pas, IssFormat?.pas, SconfFormat.pas, PascalCodeModifier?.pas
  3. Прикручена локализация к IssBuilder?.
  4. Добавлен перевод на русский для IssBuilder?
  5. Выполнен #34
  • Property svnmailer:content-charset set to cp1251
Line 
1 ///////////////////////////////////////////////////////////
2 //                     GGBuildTools                      //
3 //    Набор утилит для сборки проектов Gipat Group       //
4 //             Copyright (C) 2007 Gipat Group            //
5 //              Распространяется на условиях             //
6 //    Gipat Group's opened EI-editor-utility license     //
7 //                      версии 1.0                       //
8 //                                                       //
9 //                  www.gipatgroup.org                   //
10 ///////////////////////////////////////////////////////////
11
12 //К работе над данным файлом приложили руки, ноги.... короче аффтары:
13 // 1) Sagrer (sagrer@yandex.ru)
14
15 ////////////////////////////////////////////////////////////////////////
16
17 ////////////////////////////////////////////////////////////
18 //             Служебный класс для IssBuilder             //
19 ////////////////////////////////////////////////////////////
20
21 unit IssBuilderServiceClass;
22
23 {$mode objfpc}{$H+}
24
25 interface
26
27 uses
28   Classes, SysUtils, Forms, ExtraFunctionsLcl, GGConsUtilServiceClass, GGBuildToolsShared, ExtraFileUtilsLCL,
29   IssBuilderLogic, TranslManager;
30  
31 const
32   GGBT_IssBuilderAppName = ' - Inno Setup builder';
33  
34 type
35   TIssBuilderServiceClass = class (TGGConsUtilServiceClass)       //Класс с основным функционалом и данными IssBuilder
36   private
37   protected
38     LogicClass : TIssBuilderLogic;
39
40     //Защищенные методы.
41     procedure PostExternalMessage(const TextMessage : AnsiString);    //Функция для вывода мессаги другими объектами.
42   public
43     //Переменные
44     SconfFilename : AnsiString;
45
46     //Конструкторы-деструкторы...
47     constructor Create; override;
48     destructor Destroy; override;
49
50     //Открытые методы...
51     procedure ProcessParameters;  override;     //Проверить параметры командной строки.
52     procedure DoWork;        override;          //Выполнить боевую задачу %).
53     procedure ShowDescription; override;        //Вывести описание утилиты.
54     procedure ShowOptions;  override;           //Вывести справку по использованию тулсы.
55     procedure ProcessExtraSconfParams;          //Прочитать параметры, перекрывающие настройки sconf.
56   end;
57
58 var
59   IssBuilderServClass : TIssBuilderServiceClass;
60
61 implementation
62
63 /////////////////////////////////////////////
64 //         TIssBuilderServiceClass         //
65 /////////////////////////////////////////////
66
67 //-----------------------------------------//
68 //        Конструкторы-деструкторы...      //
69 //-----------------------------------------//
70
71 constructor TIssBuilderServiceClass.Create;
72 begin
73   //Проставить дефолтные значения...
74   SconfFilename := '';
75
76   //Создать вложенные объекты классов...
77   LogicClass := TIssBuilderLogic.Create;
78
79   //Вбить имя приложения.
80   Self.GGConsAppName := GGBT_IssBuilderAppName;
81
82   //Выполнить конструктор предка...
83   inherited;
84 end;
85
86 destructor TIssBuilderServiceClass.Destroy;
87 begin
88   //Выкидываем мусор
89   LogicClass.Free;
90
91   //Выполнить унаследованный деструктор
92   inherited;
93 end;
94
95 //------------------------------------------//
96 //           Защищенные методы...           //
97 //------------------------------------------//
98
99 procedure TIssBuilderServiceClass.PostExternalMessage(const TextMessage : AnsiString);
100 //Функция для вывода мессаги другими объектами.
101 begin
102   Writeln(TextMessage);
103 end;
104
105 //------------------------------------------//
106 //            Открытые методы...            //
107 //------------------------------------------//
108
109 procedure TIssBuilderServiceClass.ProcessParameters;
110 //Проверить параметры командной строки.
111 begin
112   //Выполнить унаследованную функцию
113   inherited;
114
115   if Application.HasOption('filepath') then begin
116     //Прочитать имя файла проекта.
117     Self.SconfFilename := Application.GetOptionValue('filepath');
118   end;
119  
120   if Application.HasOption('nocachewrite') or Application.HasOption('n') then begin
121     //Запрещаем записывать что-либо в кеш.
122     Self.LogicClass.NoCacheWrite := true;
123   end;
124  
125   //Параметры, переопределяющие настройки из sconf обрабатываются отдельно. См код в DoWork().
126 end;
127
128 procedure TIssBuilderServiceClass.DoWork;
129 //Выполнить боевую задачу %).
130 var
131   AllOk : Boolean;
132 begin
133   //Выполнить нужно одну из задач - по её завершении ProcessFurther := false
134   //и дальше нифига не выполняется.
135
136   //Выполнить унаследованную функцию
137   inherited;
138  
139   //Дополнительная инициализация.
140   AllOk := true;
141
142   //Если ничего до сих пор не выполнилось - то выполняем боевую задачу....
143   if ProcessFurther = true then begin
144     //Блокировка других веток
145     ProcessFurther := false;
146     //Работаем....
147     if Application.HasOption('filepath') = true then begin
148       //Собсно выполняем боевую задачу.
149       //Выводим версию софтины...
150       Self.ShowVersion();
151       Writeln('');
152       //Превращаем локальный путь в глобальный.
153       Self.SconfFilename := ResolveLocalPath(Self.SconfFilename,GetCurrentDir);
154
155       //В данный момент у нас должен быть глобальный путь. Проверим существует ли файл.
156       if FileExists(Self.SconfFilename) = true then begin
157         //Существует.
158        
159         //Читаем Sconf.
160         Writeln(_('Reading sconf from ')+Self.SconfFilename);
161         AllOk := Self.LogicClass.ProjectSconf.Load(Self.SconfFilename);
162         Self.LogicClass.SconfFilePath := Self.SconfFilename;
163        
164         if AllOk = true then begin
165           //Прочитали.
166           Writeln(_('Readed.'));
167          
168           //Теперь надо перекрыть настройки в sconf перекрывающими параметрами из командной строки, если они там такие есть.
169           Self.ProcessExtraSconfParams;
170          
171           //Ок. Ну, а теперь, собсно гря, настраиваем и запускаем в работу логику.
172           Self.LogicClass.PostExternalMessage := @Self.PostExternalMessage;
173           AllOk := Self.LogicClass.ProcessSconf();
174          
175           //Если фсеок - то выводим сообщение что типо увсе зделано.
176           if AllOk = true then begin
177             //Фсеок.
178             Writeln(_('Done.'));
179             Writeln('');
180           end
181           else begin
182             //Был какой-то обломс.
183             Writeln(_('Error. IssBuilding stopped.'));
184             Writeln('');
185           end;
186         end;
187        
188       end
189       else begin
190         //Облом. Сообщаем про ошибк.
191         Writeln(_('Error! Project sconf file is not exists! : '));
192         Writeln(Self.SconfFilename);
193         Writeln('');
194       end;
195     end
196     else begin
197       //Обломс. Нехватает опции которая обязательна для работы софтины.
198       Self.ShowHelp();
199       Writeln(_('Error!!! "--filepath=<value>" option is required!'));
200       Writeln('');
201     end;
202   end;
203
204 end;
205
206 procedure TIssBuilderServiceClass.ShowDescription;
207 //Вывести описание утилиты.
208 begin
209   inherited;
210   Writeln(_('Description:'));
211   Writeln(_('             Generates *.iss Inno Setup scripts for your program''s installs,'));
212   Writeln(_('             then launching Inno Setup compiler to create an installation'));
213   Writeln(_('             package.'));
214 end;
215
216 procedure TIssBuilderServiceClass.ShowOptions;
217 //Вывести справку по использованию тулсы.
218 begin
219   //Вызвать унаследованную функцию...
220   inherited;
221
222   //И собсно запостить нашенские дополнения %).
223   Writeln(_('          --filepath=<value> : sets path to the project''s configuration file.'));
224   Writeln(_('          -n, --nocachewrite : don''t save anything into cache, ignoring'));
225   Writeln(_('            project''s configuration file options.'));
226   Writeln('          ');
227   Writeln(_('Options to redeclare [IssBuilder] section''s elements from project''s'));
228   Writeln(_('configuration file:'));
229   Writeln('          ');
230   Writeln(_('          --FilesDir=<value> : path (relative to project''s root or absolute)'));
231   Writeln(_('            to directory with files for installation. All paths may be relative'));
232   Writeln(_('            to project''s root or they may be absolute.'));
233   Writeln(_('          --DefaultIssName=<value> : name of default *.iss file.'));
234   Writeln(_('          --OutputDir=<value> : directory, where to put compiled installs.'));
235   Writeln(_('          --VersionsCacheDir=<value> : directory for versions cache.'));
236   Writeln(_('          --SaveToCache=<value> : value is 0 or 1. If 1 - saves all version''s'));
237   Writeln(_('            files into cache (from FilesDir), not only *.iss and *.flist files.'));
238   Writeln(_('          --CreateFull=<value> : value is 0 or 1. If 1 - creates a full'));
239   Writeln(_('            installation package (full version and may be updates).'));
240   Writeln(_('          --CreateFull_AllowUpdate=<value> : value is 0 or 1. If 1 - gives full'));
241   Writeln(_('            installation an ability to update previous versions without they '));
242   Writeln(_('            uninstallation.'));
243   Writeln(_('          --CreateFull_UpdVers=<value> : What previous versions to make'));
244   Writeln(_('            updatable - if value is "All" - all previous versions which are'));
245   Writeln(_('            exists in a cache will be updatable. If value is "From:X", where X'));
246   Writeln(_('            is a ver number (4 nubers, delimited by dots) - all versions from'));
247   Writeln(_('            X (including it), which are exists in a cache will be updatable. If'));
248   Writeln(_('            value is a number - last value number of versions, which are exists'));
249   Writeln(_('            in a cache will be updatable.'));
250   Writeln(_('          --CreateSeparateUpds=<value> : value is 0 or 1. If 1 - separate'));
251   Writeln(_('            update installs, which can only update a speciefic one version'));
252   Writeln(_('            will be created.'));
253   Writeln(_('          --CreateSeparateUpds_UpdVers=<value> : same as CreateFull_UpdVers.'));
254   Writeln(_('          --CreateCumulateUpdate=<value> : value is 0 or 1. If 1 - cumulative'));
255   Writeln(_('            update install, which can update a number of different versions'));
256   Writeln(_('            will be compilled.'));
257   Writeln(_('          --CreateCumulateUpdate_UpdVers=<value> : same as CreateFull_UpdVers.'));
258 end;
259
260 procedure TIssBuilderServiceClass.ProcessExtraSconfParams;
261 //Прочитать параметры, перекрывающие настройки sconf.
262 begin
263
264   if Application.HasOption('FilesDir') then begin
265     Self.LogicClass.ProjectSconf.IssBuilderSection.FilesDir := Application.GetOptionValue('FilesDir');
266   end;
267  
268   if Application.HasOption('DefaultIssName') then begin
269     Self.LogicClass.ProjectSconf.IssBuilderSection.DefaultIssName := Application.GetOptionValue('DefaultIssName');
270   end;
271  
272   if Application.HasOption('OutputDir') then begin
273     Self.LogicClass.ProjectSconf.IssBuilderSection.OutputDir := Application.GetOptionValue('OutputDir');
274   end;
275  
276   if Application.HasOption('VersionsCacheDir') then begin
277     Self.LogicClass.ProjectSconf.IssBuilderSection.VersionsCacheDir := Application.GetOptionValue('VersionsCacheDir');
278   end;
279  
280   if Application.HasOption('SaveToCache') then begin
281     Self.LogicClass.ProjectSconf.IssBuilderSection.SaveToCache := StrToBool(Application.GetOptionValue('SaveToCache'));
282   end;
283  
284   if Application.HasOption('CreateFull') then begin
285     Self.LogicClass.ProjectSconf.IssBuilderSection.CreateFull := StrToBool(Application.GetOptionValue('CreateFull'));
286   end;
287  
288   if Application.HasOption('CreateFull_AllowUpdate') then begin
289     Self.LogicClass.ProjectSconf.IssBuilderSection.CreateFull_AllowUpdate := StrToBool(Application.GetOptionValue('CreateFull_AllowUpdate'));
290   end;
291  
292   if Application.HasOption('CreateFull_UpdVers') then begin
293     Self.LogicClass.ProjectSconf.IssBuilderSection.CreateFull_UpdVers := Application.GetOptionValue('CreateFull_UpdVers');
294   end;
295  
296   if Application.HasOption('CreateSeparateUpds') then begin
297     Self.LogicClass.ProjectSconf.IssBuilderSection.CreateSeparateUpds := StrToBool(Application.GetOptionValue('CreateSeparateUpds'));
298   end;
299  
300   if Application.HasOption('CreateSeparateUpds_UpdVers') then begin
301     Self.LogicClass.ProjectSconf.IssBuilderSection.CreateSeparateUpds_UpdVers := Application.GetOptionValue('CreateSeparateUpds_UpdVers');
302   end;
303  
304   if Application.HasOption('CreateCumulateUpdate') then begin
305     Self.LogicClass.ProjectSconf.IssBuilderSection.CreateCumulateUpdate := StrToBool(Application.GetOptionValue('CreateCumulateUpdate'));
306   end;
307  
308   if Application.HasOption('CreateCumulateUpdate_UpdVers') then begin
309     Self.LogicClass.ProjectSconf.IssBuilderSection.CreateCumulateUpdate_UpdVers := Application.GetOptionValue('CreateCumulateUpdate_UpdVers');
310   end;
311
312 end;
313
314 /////////////////////////////////
315 initialization
316
317 //Инициализация %). Выделим память, создадим всякую херню... как обычно в общем %)
318 begin
319   IssBuilderServClass := TIssBuilderServiceClass.Create;
320   //Включим перевод с языка по умолчанию.
321   TranslMan.SetMODir(ResolveLocalPath('..\Languages',ExtractFilePath(Application.ExeName)));
322   TranslMan.EnableLanguageDefault;
323 end;
324
325 finalization
326 //Мочим все лишнее...
327 begin
328   IssBuilderServClass.Free;
329 end;
330
331 end.
Note: See TracBrowser for help on using the browser.