.. Copyright Spack Project Developers. See COPYRIGHT file for details. SPDX-License-Identifier: (Apache-2.0 OR MIT) .. meta:: :description lang=en: Learn about the Racket build system in Spack for installing Racket packages and modules. .. _racketpackage: Racket ------ Much like Python, Racket packages and modules have their own special build system. To learn more about the specifics of the Racket package system, please refer to the `Racket Docs `_. Phases ^^^^^^ The ``RacketBuilder`` and ``RacketPackage`` base classes provide an ``install`` phase that can be overridden, corresponding to the use of: .. code-block:: console $ raco pkg install Caveats ^^^^^^^ In principle, ``raco`` supports a second, ``setup`` phase; however, we have not implemented this separately, as in normal circumstances, ``install`` also handles running ``setup`` automatically. Unlike Python, Racket currently only supports two installation scopes for packages, user or system, and keeps a registry of installed packages at each scope in its configuration files. This means we can't simply compose a "``RACKET_PATH``" environment variable listing all of the places packages are installed, and update this at will. Unfortunately, this means that all currently installed packages which extend Racket via ``raco pkg install`` are accessible whenever Racket is accessible. Additionally, because Spack does not implement uninstall hooks, uninstalling a Spack ``rkt-`` package will have no effect on the ``raco`` installed packages visible to your Racket installation. Instead, you must manually run ``raco pkg remove`` to keep the two package managers in a mutually consistent state.