Commit 9ed47432fcb8412a311f310dea315b5c99bfcdc0

[SPEC] Imported IPS/Control specs

* Switched to newer SVN version of Lazarus
* Merged IPS1.0 specs
  
1===== IPS 1.0 Specification =====
2
3**Specifications for IPS Installation-Package-Source files version 1.0**
4
5==== General Layout ====
6
7One IPS file contains a definition part which describes basic information about the package. It contains information about the application name, descriptions, translations etc.
8The second part contains all information about the files which should be installed.
9The IPS script can be commented by using the # symbol.
10If you have to include a longer text into the IPS script, you can use the //include// command. The include element can assign every textfile to a IPS-element. This code example loads the package description from an external textfile:
11<code ips>
12Description: include:"./desc.txt"
13</code>
14The include command can also be used to include MO-Coded translations. The .mo files can be used as alternative way to load translations, Listaller will automatically use the included .mo file to translate all available strings.
15
16
17Each IPS1.0 file has to contain the line //IPK-Standard-Version: 1.0// at the beginning of the document. The line is followed by an empty line.
18
19After this, the details of the new package are defined by entries. Normal IPS/IPK entries have a name and end with a colon, like **Name:** After a space follows the value of the type. If the entry has a special target, it contains the specification in brackets, e.g. The element **SDesc** defines a short description of the package, if the element is specified it looks like this: **SDesc[de]** This element specifies a short German description of the package. (SDesc is specified by the German language code in brackets)
20
21If a value of an entry needs more than one line, the following lines should start with a space.
22E.g:
23<code ips>
24Description: This application does something.
25 It can help you to do work faster...
26 ...with more lines.
27 And understand the uncomplicated
28 IPS/IPK syntax.
29</code>
30After the empty line which follows the header entry, every new line has to start with a keyword to define a specific aspect of the package. (Until the Files-part is reached or if some values need more line or if an include: command is present)
31
32==== IPS-Files for "standard" IPK packages ====
33
34=== Overview ===
35
36An IPS1.0 file to build an IPK file on type "normal" can look like this:
37<file ips example.ips>
38IPK-Standard-Version: 1.0
39
40include:"../locale/setup-es.mo"
41
42Type: linstall
43Name: FooBar
44Version: 1.0-a
45License: include:"../COPYING"
46Description: include:"./desc.txt"
47Icon: ../graphics/foobar-icon.png
48SDesc: A new foo-ish bar
49SDesc[de]: Einen neue foo-bar
50Group: Development
51Author: Foobar Project
52Maintainer: Pete Foo (
53 petefoo@example.org This e-mail address is being protected from spambots. You need JavaScript enabled to view it
54 )
55USource: http://fooproject.org/repo/ipk/updates
56Disallow: ioNothing
57Profile[0]: Standard
58AppCMD: $INST/foo/foobar
59Architectures: i386
60PkName: foobar-1.0a-ipk
61DSupport: Ubuntu,openSUSE
62Dependencies[DEB]:
63 lynx
64 http://example.org/chd/dnd/package.deb (pkgname)
65Dependencies[RPM]:
66 lynx-rpm
67 http://example.org/chd/dnd/rpm/package.rpm (pkgname)
68Dependencies[Ubuntu]:
69 http://dfn.dl.sourceforge.net/sourceforge/listaller/listaller_0.1.16a_i386.deb (listaller)
70Dependencies[openSUSE]:
71 http://dfn.dl.sourceforge.net/sourceforge/listaller/listaller_0.1.16a_i386.rpm (listaller)
72Dependencies:
73 libc6.so
74 library2.so
75 /usr/lib/libnagra.so.4
76
77!-Files ~0
78>$INST/foo
79../bin/foobar
80195f7bd6242782f35819a9600dbb74aa
81../graphics/foobar-icon.png
82aa0b5d7a5dab287a422f06c121ed8cf0
83>$APP/
84../foo/data/foobar.desktop
850351ef79d187dbed8599f612c0a2012c
86</file>
87(Some files and dependencies are missing to keep the example clear)
88
89=== The definition part ===
90
91The order of the entries does not matter, but the following order is recommended: First, we have the **Type:** entry. It defines the type of the resulting IPK package. Possible values for the type attribute are //linstall// for an normal installation, //dlink// for an DepGET package and //container// for packages that contain binary setups. If an entry named **Patch: true** exists, the package will not be registered as an single application and the installer will overwrite every file on the installation-directory. This option is dangerous, use it only for patches! The option to accept patches has to be enabled manually in Listallers preferences.
92
93IPS1.0 supports the following elements:
94^ Element name ^ Required? ^ Function ^
95| **Architecture** | Sometimes | This element contains the supported architectures of the application which has to be installed. Possible values: "all" "i386" "x68_64" and every other architecture which is supported by Listaller. If the script builds the application from scratch, the Architecture entry should not exist. If it does, it will override the current architecture and the package builder may not set the correct architecture.\\ If there is no build-element avilable, this is a required element. |
96| **PkName** | Yes | The entry contains one unique name for the package to identify the application. It is usual to use the lower-cased application name followed by the application version number without dots.\\ E.g: if the application name is "SampleApp 1.0.2" the **PkName** element should have the value //sampleapp-102// |
97| **Disallow** | No | The entry is used to disallow some installation types. Every type that is disallowed is delimited from the others with an comma. Possible values are:
98 ioTest: Disallow testmode (execution without installing)
99 ioLocal: Disallow installation into $HOME
100 ioBase: Disallow normal installation into /
101If you want to combine the values, divide them with a comma: , |
102| **Maintainer** | Sometimes | The element contains the name of the package creator. This element is an essential for the "unibuild" feature and it is recommendet for packages to have a maintainer. (But normal IPK packages do not need this element) |
  
11<?xml version="1.0"?>
22<CONFIG>
33 <ProjectOptions>
4 <Version Value="7"/>
4 <Version Value="8"/>
55 <General>
66 <SessionStorage Value="InProjectDir"/>
77 <MainUnit Value="0"/>
6262 </Units>
6363 </ProjectOptions>
6464 <CompilerOptions>
65 <Version Value="8"/>
65 <Version Value="9"/>
6666 <Target>
6767 <Filename Value="../build/libinstaller.so.0.4.0"/>
6868 </Target>
7272 <UnitOutputDirectory Value="../build/lib_$(TargetCPU)-$(TargetOS)"/>
7373 <LCLWidgetType Value="nogui"/>
7474 </SearchPaths>
75 <Parsing>
76 <SyntaxOptions>
77 <UseAnsiStrings Value="False"/>
78 </SyntaxOptions>
79 </Parsing>
7580 <Linking>
7681 <Options>
7782 <ExecutableType Value="Library"/>
8585 <Other>
8686 <CompilerMessages>
8787 <IgnoredMessages idx5024="True"/>
88 <UseMsgFile Value="True"/>
8889 </CompilerMessages>
8990 <CustomOptions Value="-fPIC
9091"/>
  
11<?xml version="1.0"?>
22<CONFIG>
33 <ProjectOptions>
4 <Version Value="7"/>
4 <Version Value="8"/>
55 <General>
66 <SessionStorage Value="InProjectDir"/>
77 <MainUnit Value="0"/>
8282 </Units>
8383 </ProjectOptions>
8484 <CompilerOptions>
85 <Version Value="8"/>
85 <Version Value="9"/>
8686 <Target>
8787 <Filename Value="../../build/listallmgr"/>
8888 </Target>
9393 <UnitOutputDirectory Value="../../build/$(TargetCPU)-$(TargetOS)"/>
9494 <LCLWidgetType Value="qt"/>
9595 </SearchPaths>
96 <Parsing>
97 <SyntaxOptions>
98 <UseAnsiStrings Value="False"/>
99 </SyntaxOptions>
100 </Parsing>
96101 <CodeGeneration>
97102 <SmartLinkUnit Value="True"/>
98103 </CodeGeneration>
112112 <Other>
113113 <CompilerMessages>
114114 <IgnoredMessages idx5024="True" idx5026="True"/>
115 <UseMsgFile Value="True"/>
115116 </CompilerMessages>
116117 <CustomOptions Value="-dOpbCompat
117118-dUSE_QT_45
  
319319 LCLVersion = '0.9.29'
320320 object LeftBar: TPanel
321321 Left = 0
322 Height = 516
322 Height = 538
323323 Top = 0
324324 Width = 108
325325 Align = alLeft
326326 AutoSize = True
327327 BevelOuter = bvNone
328 ClientHeight = 516
328 ClientHeight = 538
329329 ClientWidth = 108
330330 TabOrder = 0
331331 object BtnPanel: TPanel
332332 Left = 0
333 Height = 484
333 Height = 506
334334 Top = 32
335335 Width = 108
336336 Align = alBottom
337337 Anchors = [akTop, akLeft, akRight, akBottom]
338338 BevelOuter = bvNone
339 ClientHeight = 484
339 ClientHeight = 506
340340 ClientWidth = 108
341341 Constraints.MinWidth = 108
342342 TabOrder = 0
343343 object SettingsButton: TSpeedButton
344344 Left = 8
345345 Height = 80
346 Top = 313
346 Top = 329
347347 Width = 96
348348 Anchors = [akLeft]
349349 Caption = 'Settings'
361361 object InstAppButton: TSpeedButton
362362 Left = 8
363363 Height = 72
364 Top = 6
364 Top = 8
365365 Width = 96
366366 Anchors = [akLeft]
367367 AutoSize = True
381381 object CatButton: TSpeedButton
382382 Left = 8
383383 Height = 80
384 Top = 97
384 Top = 103
385385 Width = 96
386386 Anchors = [akLeft]
387387 Caption = 'Browse catalog'
399399 object RepoButton: TSpeedButton
400400 Left = 8
401401 Height = 80
402 Top = 205
402 Top = 216
403403 Width = 96
404404 Anchors = [akLeft]
405405 Caption = 'Repositories'
417417 object SpacerPan: TPanel
418418 Left = 0
419419 Height = 1
420 Top = 483
420 Top = 505
421421 Width = 108
422422 Align = alBottom
423423 AutoSize = True
429429 end
430430 object Notebook1: TNotebook
431431 Left = 224
432 Height = 516
432 Height = 538
433433 Top = 0
434434 Width = 592
435435 Align = alClient
439439 object InstalledAppsPage: TPage
440440 Caption = 'InstalledAppsPage'
441441 ClientWidth = 586
442 ClientHeight = 510
442 ClientHeight = 532
443443 object Label1: TLabel
444444 Left = 6
445445 Height = 13
489489 Cursor = crVSplit
490490 Left = 0
491491 Height = 5
492 Top = 415
492 Top = 437
493493 Width = 586
494494 Align = alBottom
495495 ResizeAnchor = akBottom
496496 end
497497 object AppViewControl: TPageControl
498498 Left = 0
499 Height = 377
499 Height = 399
500500 Top = 38
501501 Width = 586
502502 ActivePage = MyAppSheet
506506 TabOrder = 3
507507 object MyAppSheet: TTabSheet
508508 Caption = 'My Apps'
509 ClientHeight = 347
509 ClientHeight = 369
510510 ClientWidth = 580
511511 OnShow = MyAppSheetShow
512512 object SWBox: TPanel
513513 Left = 0
514 Height = 347
514 Height = 369
515515 Top = 0
516516 Width = 580
517517 Align = alClient
522522 end
523523 object SysAppSheet: TTabSheet
524524 Caption = 'Shared Apps'
525 ClientHeight = 347
525 ClientHeight = 369
526526 ClientWidth = 580
527527 OnShow = SysAppSheetShow
528528 object SWBoxSU: TPanel
540540 object AppInfoPanel: TPanel
541541 Left = 0
542542 Height = 90
543 Top = 420
543 Top = 442
544544 Width = 586
545545 Align = alBottom
546546 BevelOuter = bvNone
602602 object MBar: TProgressBar
603603 Left = 229
604604 Height = 8
605 Top = 226
605 Top = 236
606606 Width = 128
607607 Anchors = []
608608 Smooth = True
614614 object CatalogPage: TPage
615615 Caption = 'CatalogPage'
616616 ClientWidth = 586
617 ClientHeight = 510
617 ClientHeight = 532
618618 object BitBtn2: TBitBtn
619619 Left = 158
620620 Height = 40
629629 object RepoPage: TPage
630630 Caption = 'RepoPage'
631631 ClientWidth = 586
632 ClientHeight = 510
632 ClientHeight = 532
633633 object BitBtn5: TBitBtn
634634 Left = 214
635635 Height = 30
716716 object ConfigPage: TPage
717717 Caption = 'ConfigPage'
718718 ClientWidth = 586
719 ClientHeight = 510
719 ClientHeight = 532
720720 object Label2: TLabel
721721 Left = 6
722722 Height = 13
902902 end
903903 object FuncList: TListView
904904 Left = 108
905 Height = 516
905 Height = 538
906906 Top = 0
907907 Width = 116
908908 Align = alLeft
931931 object StatusBar1: TStatusBar
932932 Left = 0
933933 Height = 20
934 Top = 516
934 Top = 538
935935 Width = 816
936936 Panels = <
937937 item
  
200200 Result := true;
201201 with MnFrm do
202202 begin
203 writeLn(obj^.IconName);
203204 currAppList.ItemFromAppInfo(obj^);
204205 end;
205206 Application.ProcessMessages;