Monthly Downloads: 4
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Tags: Nix     Autonix     Other    
Add another 'autonix' Package



autonix-deps is part of a system for automatically generating Nix expressions for large collections of software. Nix is a purely functional package manager available for Linux and other Unix-like platforms.

The autonix system constructs Nix expressions in three stages. The first stage is a script to download and hash package sources to construct a manifest. Second, the package sources are examined to detect dependencies. Dependencies can be detected inside and outside the package collection. Finally, the manifest and dependencies are combined to produce the actual Nix expressions, which give instructions to build each package.

Dependency detection is necessarily specific to each package collection, but the process is always the same. Given a list of package sources archives (the manifest), the dependency detector examines the files in each archive (their names and contents) to guess dependencies. The output of this process is a mapping from package names to dependency names.

Between package collections, only the mechanism of guessing dependencies changes. autonix-deps is a Haskell library designed as an abstraction of the common pattern. It also provides some of the mechanisms to detect dependencies, when these mechanisms are independent of the package collection. For example, a mechanism is provided to detect dependencies in projects using the CMake build system; even though this is a detail, it is one shared between many different projects. The actual dependency detection is done by a collection-specific executable, which provides a few specific analyzers and calls one of the high-level routines from this library. For example, autonix-deps-kf5 detects dependencies for KDE Frameworks 5 and related software.

Futher Reading

  • Autonix.Analyze provides the high-level interface for depedency detectors.
  • Autonix.CMake is an example of a simple dependency analyzer that looks for dependencies when the CMake build system is used. CMake is the only build system specifically supported right now, but this module serves as a concise example of how one could add support for other build systems.