Commit 9ed47432fcb8412a311f310dea315b5c99bfcdc0
- Diff rendering mode:
- inline
- side by side
|   | |||
| 1 | ===== IPS 1.0 Specification ===== | ||
| 2 | |||
| 3 | **Specifications for IPS Installation-Package-Source files version 1.0** | ||
| 4 | |||
| 5 | ==== General Layout ==== | ||
| 6 | |||
| 7 | One IPS file contains a definition part which describes basic information about the package. It contains information about the application name, descriptions, translations etc. | ||
| 8 | The second part contains all information about the files which should be installed. | ||
| 9 | The IPS script can be commented by using the # symbol. | ||
| 10 | If 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> | ||
| 12 | Description: include:"./desc.txt" | ||
| 13 | </code> | ||
| 14 | The 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 | |||
| 17 | Each 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 | |||
| 19 | After 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 | |||
| 21 | If a value of an entry needs more than one line, the following lines should start with a space. | ||
| 22 | E.g: | ||
| 23 | <code ips> | ||
| 24 | Description: 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> | ||
| 30 | After 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 | |||
| 36 | An IPS1.0 file to build an IPK file on type "normal" can look like this: | ||
| 37 | <file ips example.ips> | ||
| 38 | IPK-Standard-Version: 1.0 | ||
| 39 | |||
| 40 | include:"../locale/setup-es.mo" | ||
| 41 | |||
| 42 | Type: linstall | ||
| 43 | Name: FooBar | ||
| 44 | Version: 1.0-a | ||
| 45 | License: include:"../COPYING" | ||
| 46 | Description: include:"./desc.txt" | ||
| 47 | Icon: ../graphics/foobar-icon.png | ||
| 48 | SDesc: A new foo-ish bar | ||
| 49 | SDesc[de]: Einen neue foo-bar | ||
| 50 | Group: Development | ||
| 51 | Author: Foobar Project | ||
| 52 | Maintainer: Pete Foo ( | ||
| 53 | petefoo@example.org This e-mail address is being protected from spambots. You need JavaScript enabled to view it | ||
| 54 | ) | ||
| 55 | USource: http://fooproject.org/repo/ipk/updates | ||
| 56 | Disallow: ioNothing | ||
| 57 | Profile[0]: Standard | ||
| 58 | AppCMD: $INST/foo/foobar | ||
| 59 | Architectures: i386 | ||
| 60 | PkName: foobar-1.0a-ipk | ||
| 61 | DSupport: Ubuntu,openSUSE | ||
| 62 | Dependencies[DEB]: | ||
| 63 | lynx | ||
| 64 | http://example.org/chd/dnd/package.deb (pkgname) | ||
| 65 | Dependencies[RPM]: | ||
| 66 | lynx-rpm | ||
| 67 | http://example.org/chd/dnd/rpm/package.rpm (pkgname) | ||
| 68 | Dependencies[Ubuntu]: | ||
| 69 | http://dfn.dl.sourceforge.net/sourceforge/listaller/listaller_0.1.16a_i386.deb (listaller) | ||
| 70 | Dependencies[openSUSE]: | ||
| 71 | http://dfn.dl.sourceforge.net/sourceforge/listaller/listaller_0.1.16a_i386.rpm (listaller) | ||
| 72 | Dependencies: | ||
| 73 | libc6.so | ||
| 74 | library2.so | ||
| 75 | /usr/lib/libnagra.so.4 | ||
| 76 | |||
| 77 | !-Files ~0 | ||
| 78 | >$INST/foo | ||
| 79 | ../bin/foobar | ||
| 80 | 195f7bd6242782f35819a9600dbb74aa | ||
| 81 | ../graphics/foobar-icon.png | ||
| 82 | aa0b5d7a5dab287a422f06c121ed8cf0 | ||
| 83 | >$APP/ | ||
| 84 | ../foo/data/foobar.desktop | ||
| 85 | 0351ef79d187dbed8599f612c0a2012c | ||
| 86 | </file> | ||
| 87 | (Some files and dependencies are missing to keep the example clear) | ||
| 88 | |||
| 89 | === The definition part === | ||
| 90 | |||
| 91 | The 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 | |||
| 93 | IPS1.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 / | ||
| 101 | If 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) | |
lib/libinstaller.lpi
(8 / 2)
|   | |||
| 1 | 1 | <?xml version="1.0"?> | |
| 2 | 2 | <CONFIG> | |
| 3 | 3 | <ProjectOptions> | |
| 4 | <Version Value="7"/> | ||
| 4 | <Version Value="8"/> | ||
| 5 | 5 | <General> | |
| 6 | 6 | <SessionStorage Value="InProjectDir"/> | |
| 7 | 7 | <MainUnit Value="0"/> | |
| … | … | ||
| 62 | 62 | </Units> | |
| 63 | 63 | </ProjectOptions> | |
| 64 | 64 | <CompilerOptions> | |
| 65 | <Version Value="8"/> | ||
| 65 | <Version Value="9"/> | ||
| 66 | 66 | <Target> | |
| 67 | 67 | <Filename Value="../build/libinstaller.so.0.4.0"/> | |
| 68 | 68 | </Target> | |
| … | … | ||
| 72 | 72 | <UnitOutputDirectory Value="../build/lib_$(TargetCPU)-$(TargetOS)"/> | |
| 73 | 73 | <LCLWidgetType Value="nogui"/> | |
| 74 | 74 | </SearchPaths> | |
| 75 | <Parsing> | ||
| 76 | <SyntaxOptions> | ||
| 77 | <UseAnsiStrings Value="False"/> | ||
| 78 | </SyntaxOptions> | ||
| 79 | </Parsing> | ||
| 75 | 80 | <Linking> | |
| 76 | 81 | <Options> | |
| 77 | 82 | <ExecutableType Value="Library"/> | |
| … | … | ||
| 85 | 85 | <Other> | |
| 86 | 86 | <CompilerMessages> | |
| 87 | 87 | <IgnoredMessages idx5024="True"/> | |
| 88 | <UseMsgFile Value="True"/> | ||
| 88 | 89 | </CompilerMessages> | |
| 89 | 90 | <CustomOptions Value="-fPIC | |
| 90 | 91 | "/> |
src/frontends/listallmgr.lpi
(8 / 2)
|   | |||
| 1 | 1 | <?xml version="1.0"?> | |
| 2 | 2 | <CONFIG> | |
| 3 | 3 | <ProjectOptions> | |
| 4 | <Version Value="7"/> | ||
| 4 | <Version Value="8"/> | ||
| 5 | 5 | <General> | |
| 6 | 6 | <SessionStorage Value="InProjectDir"/> | |
| 7 | 7 | <MainUnit Value="0"/> | |
| … | … | ||
| 82 | 82 | </Units> | |
| 83 | 83 | </ProjectOptions> | |
| 84 | 84 | <CompilerOptions> | |
| 85 | <Version Value="8"/> | ||
| 85 | <Version Value="9"/> | ||
| 86 | 86 | <Target> | |
| 87 | 87 | <Filename Value="../../build/listallmgr"/> | |
| 88 | 88 | </Target> | |
| … | … | ||
| 93 | 93 | <UnitOutputDirectory Value="../../build/$(TargetCPU)-$(TargetOS)"/> | |
| 94 | 94 | <LCLWidgetType Value="qt"/> | |
| 95 | 95 | </SearchPaths> | |
| 96 | <Parsing> | ||
| 97 | <SyntaxOptions> | ||
| 98 | <UseAnsiStrings Value="False"/> | ||
| 99 | </SyntaxOptions> | ||
| 100 | </Parsing> | ||
| 96 | 101 | <CodeGeneration> | |
| 97 | 102 | <SmartLinkUnit Value="True"/> | |
| 98 | 103 | </CodeGeneration> | |
| … | … | ||
| 112 | 112 | <Other> | |
| 113 | 113 | <CompilerMessages> | |
| 114 | 114 | <IgnoredMessages idx5024="True" idx5026="True"/> | |
| 115 | <UseMsgFile Value="True"/> | ||
| 115 | 116 | </CompilerMessages> | |
| 116 | 117 | <CustomOptions Value="-dOpbCompat | |
| 117 | 118 | -dUSE_QT_45 |
src/frontends/manager.lfm
(23 / 23)
|   | |||
| 319 | 319 | LCLVersion = '0.9.29' | |
| 320 | 320 | object LeftBar: TPanel | |
| 321 | 321 | Left = 0 | |
| 322 | Height = 516 | ||
| 322 | Height = 538 | ||
| 323 | 323 | Top = 0 | |
| 324 | 324 | Width = 108 | |
| 325 | 325 | Align = alLeft | |
| 326 | 326 | AutoSize = True | |
| 327 | 327 | BevelOuter = bvNone | |
| 328 | ClientHeight = 516 | ||
| 328 | ClientHeight = 538 | ||
| 329 | 329 | ClientWidth = 108 | |
| 330 | 330 | TabOrder = 0 | |
| 331 | 331 | object BtnPanel: TPanel | |
| 332 | 332 | Left = 0 | |
| 333 | Height = 484 | ||
| 333 | Height = 506 | ||
| 334 | 334 | Top = 32 | |
| 335 | 335 | Width = 108 | |
| 336 | 336 | Align = alBottom | |
| 337 | 337 | Anchors = [akTop, akLeft, akRight, akBottom] | |
| 338 | 338 | BevelOuter = bvNone | |
| 339 | ClientHeight = 484 | ||
| 339 | ClientHeight = 506 | ||
| 340 | 340 | ClientWidth = 108 | |
| 341 | 341 | Constraints.MinWidth = 108 | |
| 342 | 342 | TabOrder = 0 | |
| 343 | 343 | object SettingsButton: TSpeedButton | |
| 344 | 344 | Left = 8 | |
| 345 | 345 | Height = 80 | |
| 346 | Top = 313 | ||
| 346 | Top = 329 | ||
| 347 | 347 | Width = 96 | |
| 348 | 348 | Anchors = [akLeft] | |
| 349 | 349 | Caption = 'Settings' | |
| … | … | ||
| 361 | 361 | object InstAppButton: TSpeedButton | |
| 362 | 362 | Left = 8 | |
| 363 | 363 | Height = 72 | |
| 364 | Top = 6 | ||
| 364 | Top = 8 | ||
| 365 | 365 | Width = 96 | |
| 366 | 366 | Anchors = [akLeft] | |
| 367 | 367 | AutoSize = True | |
| … | … | ||
| 381 | 381 | object CatButton: TSpeedButton | |
| 382 | 382 | Left = 8 | |
| 383 | 383 | Height = 80 | |
| 384 | Top = 97 | ||
| 384 | Top = 103 | ||
| 385 | 385 | Width = 96 | |
| 386 | 386 | Anchors = [akLeft] | |
| 387 | 387 | Caption = 'Browse catalog' | |
| … | … | ||
| 399 | 399 | object RepoButton: TSpeedButton | |
| 400 | 400 | Left = 8 | |
| 401 | 401 | Height = 80 | |
| 402 | Top = 205 | ||
| 402 | Top = 216 | ||
| 403 | 403 | Width = 96 | |
| 404 | 404 | Anchors = [akLeft] | |
| 405 | 405 | Caption = 'Repositories' | |
| … | … | ||
| 417 | 417 | object SpacerPan: TPanel | |
| 418 | 418 | Left = 0 | |
| 419 | 419 | Height = 1 | |
| 420 | Top = 483 | ||
| 420 | Top = 505 | ||
| 421 | 421 | Width = 108 | |
| 422 | 422 | Align = alBottom | |
| 423 | 423 | AutoSize = True | |
| … | … | ||
| 429 | 429 | end | |
| 430 | 430 | object Notebook1: TNotebook | |
| 431 | 431 | Left = 224 | |
| 432 | Height = 516 | ||
| 432 | Height = 538 | ||
| 433 | 433 | Top = 0 | |
| 434 | 434 | Width = 592 | |
| 435 | 435 | Align = alClient | |
| … | … | ||
| 439 | 439 | object InstalledAppsPage: TPage | |
| 440 | 440 | Caption = 'InstalledAppsPage' | |
| 441 | 441 | ClientWidth = 586 | |
| 442 | ClientHeight = 510 | ||
| 442 | ClientHeight = 532 | ||
| 443 | 443 | object Label1: TLabel | |
| 444 | 444 | Left = 6 | |
| 445 | 445 | Height = 13 | |
| … | … | ||
| 489 | 489 | Cursor = crVSplit | |
| 490 | 490 | Left = 0 | |
| 491 | 491 | Height = 5 | |
| 492 | Top = 415 | ||
| 492 | Top = 437 | ||
| 493 | 493 | Width = 586 | |
| 494 | 494 | Align = alBottom | |
| 495 | 495 | ResizeAnchor = akBottom | |
| 496 | 496 | end | |
| 497 | 497 | object AppViewControl: TPageControl | |
| 498 | 498 | Left = 0 | |
| 499 | Height = 377 | ||
| 499 | Height = 399 | ||
| 500 | 500 | Top = 38 | |
| 501 | 501 | Width = 586 | |
| 502 | 502 | ActivePage = MyAppSheet | |
| … | … | ||
| 506 | 506 | TabOrder = 3 | |
| 507 | 507 | object MyAppSheet: TTabSheet | |
| 508 | 508 | Caption = 'My Apps' | |
| 509 | ClientHeight = 347 | ||
| 509 | ClientHeight = 369 | ||
| 510 | 510 | ClientWidth = 580 | |
| 511 | 511 | OnShow = MyAppSheetShow | |
| 512 | 512 | object SWBox: TPanel | |
| 513 | 513 | Left = 0 | |
| 514 | Height = 347 | ||
| 514 | Height = 369 | ||
| 515 | 515 | Top = 0 | |
| 516 | 516 | Width = 580 | |
| 517 | 517 | Align = alClient | |
| … | … | ||
| 522 | 522 | end | |
| 523 | 523 | object SysAppSheet: TTabSheet | |
| 524 | 524 | Caption = 'Shared Apps' | |
| 525 | ClientHeight = 347 | ||
| 525 | ClientHeight = 369 | ||
| 526 | 526 | ClientWidth = 580 | |
| 527 | 527 | OnShow = SysAppSheetShow | |
| 528 | 528 | object SWBoxSU: TPanel | |
| … | … | ||
| 540 | 540 | object AppInfoPanel: TPanel | |
| 541 | 541 | Left = 0 | |
| 542 | 542 | Height = 90 | |
| 543 | Top = 420 | ||
| 543 | Top = 442 | ||
| 544 | 544 | Width = 586 | |
| 545 | 545 | Align = alBottom | |
| 546 | 546 | BevelOuter = bvNone | |
| … | … | ||
| 602 | 602 | object MBar: TProgressBar | |
| 603 | 603 | Left = 229 | |
| 604 | 604 | Height = 8 | |
| 605 | Top = 226 | ||
| 605 | Top = 236 | ||
| 606 | 606 | Width = 128 | |
| 607 | 607 | Anchors = [] | |
| 608 | 608 | Smooth = True | |
| … | … | ||
| 614 | 614 | object CatalogPage: TPage | |
| 615 | 615 | Caption = 'CatalogPage' | |
| 616 | 616 | ClientWidth = 586 | |
| 617 | ClientHeight = 510 | ||
| 617 | ClientHeight = 532 | ||
| 618 | 618 | object BitBtn2: TBitBtn | |
| 619 | 619 | Left = 158 | |
| 620 | 620 | Height = 40 | |
| … | … | ||
| 629 | 629 | object RepoPage: TPage | |
| 630 | 630 | Caption = 'RepoPage' | |
| 631 | 631 | ClientWidth = 586 | |
| 632 | ClientHeight = 510 | ||
| 632 | ClientHeight = 532 | ||
| 633 | 633 | object BitBtn5: TBitBtn | |
| 634 | 634 | Left = 214 | |
| 635 | 635 | Height = 30 | |
| … | … | ||
| 716 | 716 | object ConfigPage: TPage | |
| 717 | 717 | Caption = 'ConfigPage' | |
| 718 | 718 | ClientWidth = 586 | |
| 719 | ClientHeight = 510 | ||
| 719 | ClientHeight = 532 | ||
| 720 | 720 | object Label2: TLabel | |
| 721 | 721 | Left = 6 | |
| 722 | 722 | Height = 13 | |
| … | … | ||
| 902 | 902 | end | |
| 903 | 903 | object FuncList: TListView | |
| 904 | 904 | Left = 108 | |
| 905 | Height = 516 | ||
| 905 | Height = 538 | ||
| 906 | 906 | Top = 0 | |
| 907 | 907 | Width = 116 | |
| 908 | 908 | Align = alLeft | |
| … | … | ||
| 931 | 931 | object StatusBar1: TStatusBar | |
| 932 | 932 | Left = 0 | |
| 933 | 933 | Height = 20 | |
| 934 | Top = 516 | ||
| 934 | Top = 538 | ||
| 935 | 935 | Width = 816 | |
| 936 | 936 | Panels = < | |
| 937 | 937 | item |
src/frontends/manager.pas
(1 / 0)
|   | |||
| 200 | 200 | Result := true; | |
| 201 | 201 | with MnFrm do | |
| 202 | 202 | begin | |
| 203 | writeLn(obj^.IconName); | ||
| 203 | 204 | currAppList.ItemFromAppInfo(obj^); | |
| 204 | 205 | end; | |
| 205 | 206 | Application.ProcessMessages; |

