Verwenden Sie build-type: Configure
im obersten Level Ihrer Cabal-Datei.
Schreiben Sie ein configure
-Skript (d. h. ein Shell-Skript im obersten Level Ihres Pakets mit dem Namen "configure" - es muss nicht im Autotools-Stil sein). Es sollte die Umgebungsvariable lesen und eine Datei namens package.buildinfo erstellen, wobei "package" entsprechend ersetzt wird.
Das Format dieser Datei wird theoretisch im Cabal-Benutzerhandbuch beschrieben. Die Datei sollte einfach die Build-Informationenfelder enthalten, wie sie in Abschnitt 3.3.2.9 des Cabal-Benutzerhandbuchs beschrieben sind. Nämlich die build-depends
, other-modules
, hs-source-dirs
, default-extensions
, other-extensions
, extensions
, build-tool-depends
, build-tools
, buildable
, ghc-options
, ghc-prof-options
, ghc-shared-options
, includes
, install-includes
, include-dirs
, c-sources
, cxx-sources
, asm-sources
, cmm-sources
, js-sources
, extra-libraries
, extra-ghci-libraries
, extra-bundled-libraries
, extra-lib-dirs
, cc-options
, cpp-options
, cxx-options
, ld-options
, pkgconfig-depends
, frameworks
, extra-frameworks-dirs
und mixins
Felder, die in einem Einrückungsbereich stehen. Sie müssen nicht eingerückt sein. Diese werden mit den entsprechenden Feldern im library
Abschnitt Ihrer Cabal-Datei fusioniert. (Das Benutzerhandbuch beschreibt die Möglichkeit, executable
Abschnitte einzuschließen, aber ich kann sie gerade nicht zum Laufen bringen.)
Wenn Sie also möchten, dass ein String in Ihrem Code den Inhalt von $PATH
widerspiegelt, richten Sie Ihre Cabal-Datei ein und schreiben Sie ein Konfigurationsskript wie dieses:
#!/bin/bash
echo 'cpp-options: -DCOMPILE_TIME_PATH="'$PATH'"' > my-package.buildinfo
Dann können Sie eine .hs-Datei schreiben
{-# LANGUAGE CPP #-}
module WhyNot where
compileTimePath :: String
compileTimePath = COMPILE_TIME_PATH
Cabal Benutzerhandbuch: https://www.haskell.org/cabal/users-guide/developing-packages.html