Difference between revisions of "Sugar Network/Recipe Specification"

From Sugar Labs
Jump to navigation Jump to search
Line 115: Line 115:
 
  '''include''' = <glob-pattern> [; ...]
 
  '''include''' = <glob-pattern> [; ...]
  
[[Activity Team/Zero Sugar/Packaging Guide#Glob patterns|Glob pattern]] for files to include to package. By default, all files are assumed.
+
[[Activity Team/Zero Sugar/Packaging Guide#Glob patterns|Glob pattern]] for files to include to the package. Path related patterns will be processed starting from [[#Predefined_options|%(DISTDIR)s/%(PREFIX)s]] directory. By default, all files are assumed.
  
 
  '''exclude''' = <glob-pattern> [; ...]
 
  '''exclude''' = <glob-pattern> [; ...]
  
[[Activity Team/Zero Sugar/Packaging Guide#Glob patterns|Glob pattern]] for files to exclude from package. In additional, various temporary files will be excluded like ''.bak'' or ''.pyc''.
+
Like ''include'' option but for excluding files from the package. In additional, various temporary files will be excluded like ''.bak'' or ''.pyc''.
  
 
  '''langs''' = <lang-name> [; ...]
 
  '''langs''' = <lang-name> [; ...]

Revision as of 06:51, 28 July 2010


Spec file sections

The 0sugar.info specification file is an analog of scenario files in regular GNU/Linux distributions, like .spec files in RPM. It is the cornerstone of Zero Sugar workflows, everything depends on the 0sugar.info spec file.

For activities, activity.info, a deprecated spec file name, is supported.

[DEFAULT]

Common options. Options from this section will be accessible from all other sections. It may be useful to store options that are common for all sections.

import = <filename> [; ...]

Import another spec file. Makes sense only within the [DEFAULT] section itself.

Common options

Options that are common for all sections except [DEFAULT].

inherit = <section-name> [; ...]

Include options from another section.

merge = <section-name> [; ...]

The same behaviour as inherit, but merges values for list type options, i.e., the final values will consist of the base-section values with addtional child-section values. List options are:

  • category
  • requires
  • binding
  • include
  • exclude
  • langs
  • packaged

[Package]

This is a required section (but could be replaced by [Activity]). It describes the main package.

slug = <package-slug>

The string used as identifier in cases like 0install feed urls or native package names. Only lower alphabetic, numeric, "+" or "-" symbols are allowed. Slug value should be at least two characters long and start with an alphanumeric character.

name = <package-name>

Package name, in free form, equals to slug, by default.

summary = <one-line-description>

Short descriptive line.

description = <multi-line-description>

Long descriptive text. To wrap long text, all lines after the second, should start with spaces. This field is equal to summary by default.

license = <licence-name>

Package license. Short licence names from Fedora naming scheme are welcome.

homepage = <url>

Packaged project home page.

icon = <icon-file-name>

Relative (from Zero Sugar based project) path to icon file.

category = <category> [; ...]

A classification for the package using values defined by freedesktop.org menu specification.

age = <age-number>

Simple number that will be used as a major number for version, see versioning scheme for details.

version = <version-number>

Current version of the package using 0install version format. If the age option was set, versioning is a bit different.

stability = <stability-level>

Stability level of current version. Values conform to 0install stability levels and could be:

  • insecure
  • buggy
  • developer
  • testing
  • stable
requires = <dependency> [(=|>=|<) <version>] [; ...]

List of dependencies that should exist before using the package.

slots[<dependency>] = <first-dependency-version> [; ...], <last-dependency-verison>

To specify dependency slots.

binding = [prepend|append|replace] <variable-name> [<insert-text-to-prepend-variable-value>] [; ...]

The environment variables 0install should export to the process that uses this package. This makes sense only for multiple-activity-serving dependencies (like libraries), not for the activity itself.

main = <path-to-exec-file>

The relative path of an executable inside the implementation that should be executed by default when the package is run.

exec = <shell-command>

Instead of using an executable program from the main option, 0sugar can bundle a script to run an arbitrary shell command.

If a package has neither main nor exec, then it cannot be executed. This typically means that the package is for a library.

include = <glob-pattern> [; ...]

Glob pattern for files to include to the package. Path related patterns will be processed starting from %(DISTDIR)s/%(PREFIX)s directory. By default, all files are assumed.

exclude = <glob-pattern> [; ...]

Like include option but for excluding files from the package. In additional, various temporary files will be excluded like .bak or .pyc.

langs = <lang-name> [; ...]
include[<lang-name>] = <glob-pattern> [; ...]
exclude[<lang-name>] = <glob-pattern> [; ...]

A special form of include/exclude options that are intended to create separate, per locale, (sub)packages. If language is mentioned in langs list but doesn't have include[]/exclude[] options, include/exclude will be used (in that case, using special LANG variable makes sense).

arch = <arch>

Makes sense only for binary (sub)packages, and can contain:

  • all for noarch (by default)
  • any for binaries to use the current architecture

[Source]

Section makes sense only while packaging 3rd-party applications.

source = <url>

Url to download sources tarball.

patch = <path-to-patch> [patch-level] [; ...]

Patch downloaded tarball.

[Buid]

How to build binaries. If package contains binary implementations, this section should be present to describe the building process.

NOTE The commands in this section will be executed, not only in the developer's environment, but also in the user's, if a proper binary wasn't found; so move all development-related commands, like autogen.sh, to the [Maintain] section.

requires = <dependency-name> [(=|>=|<) <version>] [; ...]

What dependencies should be present before building the package from sources, in addition to requires values from the [Package] sections.

configure = <shell-command>

Shell command to configure sources before building, e.g, invoking the configure script in auto-tools-based projects. It is important to use predefined constants, at least %(PREFIX)s, during configuration to prepare valid Zero packages. If the source code does not require a configuration stage, this option could be omited.

build = <shell-command>

Shell command to build binaries from sources. If the source code does not require a building stage, this option could be omited.

install = <shell-command>

Shell command to place files that are ready for distribution into the %(DISTDIR)s directory.

[Maintain]

Various options that make sense only in the package-developer's environment.

exec = <shell-command>

How to bundle package. By default, 0sugar just bundles the entire root directory, excluding temporary files.

requires = <dependency> [(=|>=|<) <version>] [; ...]

The packages that should be present before invoking the exec command. For example, if the exec command generates .c files from .vala, the vala dependency should be mentioned in the requires option.

Presets

Instead of package sections (main [Package] section and sub package sections), special sections might be used. These sections extend standard [Package] options and might add special meaning of existed ones, see description for particular preset.

[Activity]

This preset should be present only for activities (or for applications that could be used also as Activities, e.g., GCompris is a regular application but could be launched in Sugar mode).

Preset uses the same options as [Package] with these additions:

activity_version

Option is deprecated, version should be used instead.

bundle_id = <bundle-id>

See activity.info file specification. Option will be deprecated after implementing 0sugar in glucose and switching to identifying activities by urls (like 0install feeds).

icon = <icon-file-name-wo-suffix>

Behaviour from activity.info is supported (value should not have ".svg" suffix, and icon file could be found only in activity subdirectory) but deprecated. Regular icon behaviour from [Package] section should be used instead.

exec = <shell-command>

Sugar will pass additional command line arguments to this command.

mime_types = <mime-type> [; ...]

List of mime types supported by the activity. It's used when opening a file from the web or to present to the user a list of activities which can open a certain Journal object.

tags = <tag> [; ...]

Tags give more context in which to group the activity. This is used to allow users to find activities more easily in the Journal, the Home view, etc.

[Application]

If this preset exists, executable file will be created for native packages to launch main program or exec script. Executable file will be named by slug option value and placed to /usr/bin directory.

Predefined options

Options defined within [Build] section:

  • BUILDDIR where the build happens
  • SRCDIR path to directory with sources; for a custom (via 0compile) build, BUILDDIR and SRCDIR are different, while building on OBS, they are the same
  • DISTDIR temporary path to place installed files before bundling them
  • PREFIX should be used as installation prefix path, e.g., for ./configure --prefix
  • CFLAGS default gcc CFLAGS
  • CXXFLAGS default gcc CXXFLAGS

In sections that contain langs option:

  • LANG current language while building per language implementation

Also, during the 0sugar build command invocation, 0sugar exports the environment variables that should be used in exec options, for example, to implement a conditional build.

  • ZSUGAR_<argument-in-upper-case> map 0sugar long command line arguments
  • SECTION_<section-name-in-upper-case> for every spec file section that will be processed

Examples

Python activity

Python-based activity with standard Sugar Platform dependencies.

[Activity]
slug      = cartoon-builder
name      = Cartoon Builder
summary   = Create your own cell-animation sequences
license   = GPLv2+
homepage  = http://wiki.sugarlabs.org/go/Activities/Cartoon_Builder
icon      = activity/activity-cartoonbuilder.svg
category  = Games;Education
version   = 11.4.9-pre3
stability = testing
exec      = sugar-activity activity.CartoonBuilderActivity

Python library

Package python-based library that could be used as is, or as an activity dependency.

[Package]
slug      = journal
summary   = Hight level library to create your own Journal-like activity
license   = GPLv3+
homepage  = http://wiki.sugarlabs.org/go/Activity_Team/Services/Journal
version   = 1
stability = testing
requires  = toolkit/python
binding   = PYTHONPATH

Vala library

Binary library with generating C files from Vala sources, creating library package, and devel, python binding sub-packages.

[DEFAULT]
slug      = env
summary   = Access to various sugar environment settings.
license   = LGPLv3+
homepage  = http://wiki.sugarlabs.org/go/Activity_Team/Services/Env
version   = 0.9
stability = testing

[Package]
requires  = glib; gconf; libgee >= 0.5
binding   = LD_LIBRARY_PATH lib
include   = *.so.*
arch      = build

[Package/devel]
requires  = glib/devel; gconf/devel; libgee/devel
            %(slug)s
binding   = LD_LIBRARY_PATH lib
            PKG_CONFIG_PATH lib/pkgconfig
            VAPIDIR share/vala/vapi
exclude   = %(PYTHON_SITEDIR)s/**
            *.so.*
arch      = build

[Package/python]
requires  = python; %(slug)s
binding   = PYTHONPATH python
include   = %(PYTHON_SITEDIR)s/**
arch      = build
slots[python] = 2.5; 2.6; 2.7; 3.0

[Build]
requires  = glib/devel; gconf/devel; libgee/devel
            pkgconfig; cmake; make; gcc-c
build     = cmake -DCMAKE_INSTALL_PREFIX=%(PREFIX)s
                  -DPYTHON_SITEDIR=%(PYTHON_SITEDIR)s
                  -DCOMPONENTS="env"
                  -DBINDING=python
                  -DCMAKE_C_FLAGS:STRING="%(CFLAGS)s"
                  %(SRCDIR)s &&
            make
install   = make DESTDIR=%(DISTDIR)s install

[Maintain]
requires  = vala
exec      = make dist