Note that setup.ini is automatically generated for the Cygwin site. This section is intended as a reference for writing software that interoperates with the setup.ini package listing, or who are using a fork of setup elsewhere and want to know what they can achieve with it. It is not aimed at setup.exe end users or Cygwin package maintainers - although you may find it of interest.

setup.exe reads a file called setup.ini that resides on all Cygwin mirrors. The format is quite flexible - it's grown over time. The content of the file drives setup.exe's behaviour. It lists the packages available from a given mirror site (the one it is downloaded from), and what source files each package needs, available versions, dependencies and the like.

There are two optional global parameters in this file, followed by a list of packages. The # character is ignored by setup and can be used to add commentary to the file. Anything after this character is ignored.

setup-timestamp: number

This entry can only appear at the beginning of setup.ini files. It indicates the time that the setup.ini file was created. Its purpose is to warn the user when the timestamp is less than the last setup.ini used; i.e. it prevents accidental regression. Use "perl -e 'print time'" to get a timestamp.

setup-version: number

This entry can only appear at the beginning of setup.ini files. It indicates the version number of the setup.exe for which this setup.ini was generated. setup.exe will warn if the version number of setup is less than the version number in a setup.ini file. In the future this will get decoupled from the setup.ini version, and be coupled to the parser logic, to allow older versions of setup that can operate correctly on a setup.ini file to do so without warnings.

@ package

Package: package

Lines beginning with the "at" symbol or "Package:" indicate the start of a package section. Each package consists of a name, one or more descriptive texts, package categories, and up to three version definitions.

sdesc: "some text"

This is the "short description" of the package. This text, if available, accompanies the package name in package listings.

ldesc: "some text"

This is the "long description" of the package. This text, if available, is used as a supplemental description of the package.

category: name1[ name2...]

Section: name1[ name2...]

The category or Section line indicates the categories that this package belongs to. One package can belong to multiple categories. Multiple categories are separated by spaces. See the description of categories in setup.hint for more information on categories.


These indicate the start of a version description within a package. Note that [curr] is the default and may be omitted if that version happens to be specified before the others. "Curr" indicates the current stable (preferred) version, "prev" is the previous stable version, and "test" indicates a test or experimental version.

requires: package[ package...]

Indicates a list of packages that this package needs at runtime in order to function correctly. Multiple packages should be separated by a space.

version: version

Indicates the version of the package. This is currently derived from the name of the package.

install: filename size-in-bytes MD5 sum

Indicates the file to install for that version, and its size in bytes. The file name must include the full path (relative to setup.ini's directory), and the file size must match the actual file size (setup uses this to verify it got the whole file). The optional MD5 sum is 32 characters from the set 0-9a-f (case matters). If it does not match the locally calculated md5 sum, the package is considered corrupt and won't be installed from by setup.exe.

source: filename size-in-bytes MD5 sum

(Deprecated) Like the file to install, this is the corresponding sources.

Note: The following directives are not fully implemented yet.

Depends: package [(<< | >> | <=; | >= | < | > version-identifier)][, package ...]

This is a more sophisticated version of the 'requires' keyword, allowing the specification of explicit version number relationships. Packages are separated by commas instead of spaces, and this entry can span multiple lines.

Source: package [(<< | >> | <=; | >= | < | > version-identifier)]

Indicates the source-package that should be used when downloading the source for the current package version. I.e. for package foo-dev, one might have "Source: foo" to indicate that the source package for foo-dev is foo. This entry should not be used in conjunction with the "source:" entry.

Build-Depends: package [(<< | >> | <=; | >= | < | > version-identifier)] | [ package ...] [,package ...]

Indicates the binary packages required to build the current source package.

An example

setup-timestamp: 967844652

@ cygwin
sdesc: "Cygwin Runtime"
ldesc: "A Posix runtime emulator for Windows platforms"
version: 1.1.4
install: release/cygwin/cygwin-1.1.4.tar.bz2 1234567
source: release/cygwin/cygwin-1.1.4.tar.bz2 1341245
version: 1.1.3
install: release/cygwin/cygwin-1.1.3.tar.bz2 1234580
source: release/cygwin/cygwin-1.1.3.tar.bz2 1341123

@ bash
version: 20000901
install: release/bash/bash-20000901.tar.bz2 276403
source:  release/bash/bash-20000901-src.tar.bz2 1892899
version: 2.04
install: release/bash/bash-2.04.tar.bz2 277375
source:  release/bash/bash-2.04-src.tar.bz2 1815177
# We need either the current released gcc, or a known good version of gcc
# And various anciliary tools
Build-Depends: gcc (= 2.95.3-5) | gcc (>> 3.1.1-1) | gcc2, binutils,
make, automake, autoconf