dhall-1.42.3: benchmark/parser/examples/cpkg.dhall
-- Generated from https://github.com/vmchale/cpkg/blob/master/pkgs/pkg-set.dhall by running dhall resolve
let concatMapSep =
λ(_ : Text) →
λ(_ : Type) →
λ(_ : _ → Text) →
λ(_ : List _@1) →
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
_@2
_
< Empty | NonEmpty : Text >
( λ(_ : _@2) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty = < Empty | NonEmpty : Text >.NonEmpty (_@3 _@1)
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@4 _@2}${_@6}${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
let concat =
λ(_ : List Text) →
List/fold Text _ Text (λ(_ : Text) → λ(_ : Text) → "${_@1}${_}") ""
let types =
{ ABI = < GNU | GNUabi64 | GNUeabi | GNUeabihf | GNUspe | MinGw >
, Arch =
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, BuildVars =
{ binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU | GNUabi64 | GNUeabi | GNUeabihf | GNUspe | MinGw >
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
, Command =
< Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
, Dep =
{ bound :
< Lower : { lower : List Natural }
| LowerUpper : { lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, EnvVar = { value : Text, var : Text }
, Manufacturer = < Apple | IBM | PC | Unknown >
, OS =
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, Proc =
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
, TargetTriple =
{ abi :
Optional < GNU | GNUabi64 | GNUeabi | GNUeabihf | GNUspe | MinGw >
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
, VersionBound =
< Lower : { lower : List Natural }
| LowerUpper : { lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
}
let prelude =
{ archCfg =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
, autogenConfigure =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [] : List Text
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.shareDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/aclocal:${_@1}/autoconf"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/aclocal:${_@2}/autoconf:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "ACLOCAL_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = None Text
, program = "./autogen.sh"
}
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) → [ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox = "redox"
, Solaris =
"solaris"
, Windows = "w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, buildEnv =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm = "arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 = "sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
, buildWith =
λ(envs : List { value : Text, var : Text }) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "-j${Natural/show cfg.cpus}" ]
, environment = Some envs
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, call =
< Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
, cmakeBuild =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "--build"
, "."
, "--config"
, "Release"
, "--"
, "-j"
, Natural/show cfg.cpus
]
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "cmake"
}
]
, cmakeConfigure =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "build" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "../"
, "-DCMAKE_INSTALL_PREFIX:PATH=${cfg.installDir}"
, "-DCMAKE_MAKE_PROGRAM=${merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS}"
]
# merge
{ None =
[ "-DCMAKE_C_COMPILER=gcc"
, "-DCMAKE_CXX_COMPILER=g++"
]
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "-DCMAKE_C_COMPILER=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-gcc"
, "-DCMAKE_CXX_COMPILER=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El =
"mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-g++"
]
}
cfg.targetTriple
# merge
{ None = [] : List Text
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "-DCMAKE_SYSTEM_NAME=${merge
{ AIX = "AIX"
, Android = "Android"
, Darwin = "Darwin"
, Dragonfly = "BSD"
, FreeBSD = "BSD"
, Haiku = "Haiku"
, Hurd = "Hurd"
, IOS = "Darwin"
, Linux = "Linux"
, NetBSD = "BSD"
, NoOs = "Generic"
, OpenBSD = "BSD"
, Redox = "Redox"
, Solaris = "Solaris"
, Windows = "Windows"
}
tgt.os}"
]
}
cfg.targetTriple
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "cmake"
}
]
, cmakeConfigureGeneral =
λ ( envVars
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
} →
Optional (List { value : Text, var : Text })
) →
λ(flags : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "build" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "../"
, "-DCMAKE_INSTALL_PREFIX:PATH=${cfg.installDir}"
, "-DCMAKE_MAKE_PROGRAM=${merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS}"
]
# merge
{ None =
[ "-DCMAKE_C_COMPILER=gcc"
, "-DCMAKE_CXX_COMPILER=g++"
]
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "-DCMAKE_C_COMPILER=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-gcc"
, "-DCMAKE_CXX_COMPILER=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El =
"mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-g++"
]
}
cfg.targetTriple
# merge
{ None = [] : List Text
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "-DCMAKE_SYSTEM_NAME=${merge
{ AIX = "AIX"
, Android = "Android"
, Darwin = "Darwin"
, Dragonfly = "BSD"
, FreeBSD = "BSD"
, Haiku = "Haiku"
, Hurd = "Hurd"
, IOS = "Darwin"
, Linux = "Linux"
, NetBSD = "BSD"
, NoOs = "Generic"
, OpenBSD = "BSD"
, Redox = "Redox"
, Solaris = "Solaris"
, Windows = "Windows"
}
tgt.os}"
]
}
cfg.targetTriple
# flags
, environment = envVars cfg
, procDir = Some "build"
, program = "cmake"
}
]
, cmakeConfigureNinja =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "build" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "../"
, "-DCMAKE_INSTALL_PREFIX:PATH=${cfg.installDir}"
, "-G"
, "Ninja"
]
# merge
{ None = [] : List Text
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "-DCMAKE_C_COMPILER=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-gcc"
, "-DCMAKE_CXX_COMPILER=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El =
"mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-g++"
]
}
cfg.targetTriple
# merge
{ None = [] : List Text
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "-DCMAKE_SYSTEM_NAME=${merge
{ AIX = "AIX"
, Android = "Android"
, Darwin = "Darwin"
, Dragonfly = "BSD"
, FreeBSD = "BSD"
, Haiku = "Haiku"
, Hurd = "Hurd"
, IOS = "Darwin"
, Linux = "Linux"
, NetBSD = "BSD"
, NoOs = "Generic"
, OpenBSD = "BSD"
, Redox = "Redox"
, Solaris = "Solaris"
, Windows = "Windows"
}
tgt.os}"
]
}
cfg.targetTriple
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "cmake"
}
]
, cmakeConfigureWithFlags =
λ(flags : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "build" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "../"
, "-DCMAKE_INSTALL_PREFIX:PATH=${cfg.installDir}"
, "-DCMAKE_MAKE_PROGRAM=${merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS}"
]
# merge
{ None =
[ "-DCMAKE_C_COMPILER=gcc"
, "-DCMAKE_CXX_COMPILER=g++"
]
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "-DCMAKE_C_COMPILER=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-gcc"
, "-DCMAKE_CXX_COMPILER=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El =
"mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-g++"
]
}
cfg.targetTriple
# merge
{ None = [] : List Text
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "-DCMAKE_SYSTEM_NAME=${merge
{ AIX = "AIX"
, Android = "Android"
, Darwin = "Darwin"
, Dragonfly = "BSD"
, FreeBSD = "BSD"
, Haiku = "Haiku"
, Hurd = "Hurd"
, IOS = "Darwin"
, Linux = "Linux"
, NetBSD = "BSD"
, NoOs = "Generic"
, OpenBSD = "BSD"
, Redox = "Redox"
, Solaris = "Solaris"
, Windows = "Windows"
}
tgt.os}"
]
}
cfg.targetTriple
# flags
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "cmake"
}
]
, cmakeEnv =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
, cmakeInstall =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "--build"
, "."
, "--target"
, "install"
, "--config"
, "Release"
]
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "cmake"
}
]
, cmakeInstallWithBinaries =
λ(bins : List Text) →
λ ( installVars
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "--build"
, "."
, "--target"
, "install"
, "--config"
, "Release"
]
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
( installVars.shareDirs
# installVars.linkDirs
)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
installVars.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if installVars.static
then { value =
"${List/fold
Text
installVars.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
installVars.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
installVars.buildOS
then [ { value =
"${List/fold
Text
installVars.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "cmake"
}
]
# List/fold
Text
bins
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = _@1 }
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, cmakePackage =
{ buildCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "--build"
, "."
, "--config"
, "Release"
, "--"
, "-j"
, Natural/show cfg.cpus
]
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "cmake"
}
]
, configureCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "build" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "../"
, "-DCMAKE_INSTALL_PREFIX:PATH=${cfg.installDir}"
, "-DCMAKE_MAKE_PROGRAM=${merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS}"
]
# merge
{ None =
[ "-DCMAKE_C_COMPILER=gcc"
, "-DCMAKE_CXX_COMPILER=g++"
]
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "-DCMAKE_C_COMPILER=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El =
"mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-gcc"
, "-DCMAKE_CXX_COMPILER=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El =
"mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 =
"sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-g++"
]
}
cfg.targetTriple
# merge
{ None = [] : List Text
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "-DCMAKE_SYSTEM_NAME=${merge
{ AIX = "AIX"
, Android = "Android"
, Darwin = "Darwin"
, Dragonfly = "BSD"
, FreeBSD = "BSD"
, Haiku = "Haiku"
, Hurd = "Hurd"
, IOS = "Darwin"
, Linux = "Linux"
, NetBSD = "BSD"
, NoOs = "Generic"
, OpenBSD = "BSD"
, Redox = "Redox"
, Solaris = "Solaris"
, Windows = "Windows"
}
tgt.os}"
]
}
cfg.targetTriple
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "cmake"
}
]
, installCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "--build"
, "."
, "--target"
, "install"
, "--config"
, "Release"
]
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "cmake"
}
]
, pkgBuildDeps =
[ { bound =
< Lower : { lower : List Natural }
| LowerUpper : { lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>.NoBound
, name = "cmake"
}
]
, pkgDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
}
, cmakeSome =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "CMAKE_INCLUDE_PATH"
}
, { value =
( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value
, var = "CMAKE_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, configEnv =
λ(linkLibs : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
linkLibs
Text
(λ(_ : Text) → λ(_ : Text) → " -l${_@1}${_}")
""}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm = "arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 = "sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
, configSome =
λ(linkLibs : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
linkLibs
Text
(λ(_ : Text) → λ(_ : Text) → " -l${_@1}${_}")
""}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, configWithEnv =
λ ( envVars
: List Text →
{ binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
} →
Optional (List { value : Text, var : Text })
) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) → [ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox = "redox"
, Solaris =
"solaris"
, Windows = "w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = envVars ([] : List Text) cfg
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, configureLinkExtraLibs =
λ(linkLibs : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) → [ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox = "redox"
, Solaris =
"solaris"
, Windows = "w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
linkLibs
Text
( λ(_ : Text) →
λ(_ : Text) →
" -l${_@1}${_}"
)
""}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, configureMkExes =
λ(bins : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
List/fold
Text
bins
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = _@1 }
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
# [ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) →
[ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, configureMkExesExtraFlags =
λ(x : { bins : List Text, extraFlags : List Text }) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
List/fold
Text
x.bins
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = _@1 }
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
# [ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) →
[ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
# x.extraFlags
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, configureWithFlags =
λ(extraFlags : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) →
[ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
# extraFlags
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, configureWithPatch =
λ(p : Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Patch
{ patchContents = p }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) → [ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox = "redox"
, Solaris =
"solaris"
, Windows = "w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, configureWithPatches =
λ(patches : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
List/fold
Text
patches
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Patch
{ patchContents = _@1 }
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
# [ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) →
[ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, copyFile =
λ(src : Text) →
λ(dest : Text) →
< Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
{ dest, src }
, copyFiles =
λ(_ : List { dest : Text, src : Text }) →
List/fold
{ dest : Text, src : Text }
_
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : { dest : Text, src : Text }) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
_@1
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, createDir =
λ(x : Text) →
< Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = x }
, defaultBuild =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "-j${Natural/show cfg.cpus}" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, defaultCall =
{ arguments = [] : List Text
, environment = None (List { value : Text, var : Text })
, procDir = None Text
}
, defaultConfigure =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) → [ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox = "redox"
, Solaris =
"solaris"
, Windows = "w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, defaultCpus =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
cfg.cpus
, defaultEnv = None (List { value : Text, var : Text })
, defaultInstall =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, defaultPackage =
{ buildCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "-j${Natural/show cfg.cpus}" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, configureCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) →
[ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, installCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, pkgBuildDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, pkgDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
}
, defaultPath =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
, doNothing =
λ ( _
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
, fullVersion =
λ(x : { patch : Natural, version : List Natural }) →
x.version # [ x.patch ]
, generalBuild =
λ ( cpus
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
} →
Natural
) →
λ(envs : List { value : Text, var : Text }) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "-j${Natural/show (cpus cfg)}" ]
, environment = Some envs
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, generalConfigure =
λ ( envVars
: List Text →
{ binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
} →
Optional (List { value : Text, var : Text })
) →
λ(filename : Text) →
λ(linkLibs : List Text) →
λ(extraFlags : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ filename ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) →
[ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
# extraFlags
)
, environment = envVars linkLibs cfg
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./${filename}"
}
]
, installPrefix =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "prefix=${cfg.installDir}"
, "PREFIX=${cfg.installDir}"
, "install"
]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program = "make"
}
]
, installWith =
λ(envs : List { value : Text, var : Text }) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some envs
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, installWithBinaries =
λ(bins : List Text) →
λ ( installVars
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
installVars.buildOS
then [ { value =
"${List/fold
Text
installVars.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
( installVars.shareDirs
# installVars.linkDirs
)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
installVars.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
installVars.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
installVars.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
installVars.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
installVars.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
installVars.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
installVars.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
installVars.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
installVars.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
installVars.buildOS
}
]
# ( if installVars.isCross == False
then List/fold
Text
bins
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = _@1 }
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
else [] : List
< Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, installWithManpages =
λ(mans : List { file : Text, section : Natural }) →
λ ( installVars
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
installVars.buildOS
then [ { value =
"${List/fold
Text
installVars.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
( installVars.shareDirs
# installVars.linkDirs
)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
installVars.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
installVars.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
installVars.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
installVars.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
installVars.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
installVars.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
installVars.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
installVars.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
installVars.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
installVars.buildOS
}
]
# ( if installVars.isCross == False
then List/fold
{ file : Text, section : Natural }
mans
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : { file : Text, section : Natural }) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkManpage
_@1
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
else [] : List
< Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, installWithPy3Wrappers =
λ(binNames : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "${cfg.installDir}/lib/python3.8/site-packages" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "setup.py"
, "install"
, "--prefix=${cfg.installDir}"
, "--optimize=1"
]
, environment = Some
( [ { value =
"${cfg.installDir}/lib/python3.8/site-packages"
, var = "PYTHONPATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = None Text
, program = "python3"
}
]
# List/fold
Text
binNames
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
List/fold
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "wrapper" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
"${( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).var}=${( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty =
λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty
| NonEmpty : Text
>
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
_@1
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value} PYTHONPATH=${merge
{ Empty = ""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Text
cfg.linkDirs
< Empty
| NonEmpty :
Text
>
( λ ( _
: Text
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}:${cfg.installDir}/lib/python3.8/site-packages ${cfg.installDir}/bin/${_} \$@"
, file = "wrapper/${_}"
}
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = "wrapper/${_}" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
{ dest = "wrapper/${_}", src = "wrapper/${_}" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = "wrapper/${_}" }
]
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ ( _
: < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ _@1 ] # _
)
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, installWithPyWrappers =
λ(version : List Natural) →
λ(binNames : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir =
"${cfg.installDir}/lib/python${merge
{ Empty = ""
, NonEmpty =
λ(_ : Text) → _
}
( List/fold
Natural
version
< Empty
| NonEmpty : Text
>
( λ(_ : Natural) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)}/site-packages"
}
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "setup.py"
, "install"
, "--prefix=${cfg.installDir}"
, "--optimize=1"
]
, environment = Some
( [ { value =
"${cfg.installDir}/lib/python${merge
{ Empty = ""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Natural
version
< Empty
| NonEmpty :
Text
>
( λ ( _
: Natural
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}/site-packages"
, var = "PYTHONPATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = None Text
, program =
"python${merge
{ None = "", Some = Natural/show }
(List/head Natural version)}"
}
]
# List/fold
Text
binNames
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
List/fold
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "wrapper" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
"${( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).var}=${( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty =
λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty
| NonEmpty : Text
>
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
_@1
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value} PYTHONPATH=${merge
{ Empty = ""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Text
cfg.linkDirs
< Empty
| NonEmpty :
Text
>
( λ ( _
: Text
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@1}/python${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Natural
version
< Empty
| NonEmpty :
Text
>
( λ ( _
: Natural
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}/site-packages"
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2}/python${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Natural
version
< Empty
| NonEmpty :
Text
>
( λ ( _
: Natural
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}/site-packages:${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}:${cfg.installDir}/lib/python${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Natural
version
< Empty
| NonEmpty :
Text
>
( λ ( _
: Natural
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}/site-packages ${cfg.installDir}/bin/${_} \$@"
, file = "wrapper/${_}"
}
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = "wrapper/${_}" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
{ dest = "wrapper/${_}", src = "wrapper/${_}" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = "wrapper/${_}" }
]
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ ( _
: < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ _@1 ] # _
)
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, installWithWrappers =
λ(bins : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
# List/fold
Text
bins
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
List/fold
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "wrapper" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
"LD_LIBRARY_PATH=${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty
| NonEmpty : Text
>
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)}:${cfg.installDir}/lib LD_PRELOAD='${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Text
cfg.preloadLibs
< Empty
| NonEmpty :
Text
>
( λ ( _
: Text
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
_@1
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}' ${cfg.installDir}/bin/${_} \$@"
, file = "wrapper/${_}"
}
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = "wrapper/${_}" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
{ dest = "wrapper/${_}", src = "wrapper/${_}" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = "wrapper/${_}" }
]
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ ( _
: < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ _@1 ] # _
)
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, isUnix =
λ ( os
: < AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
) →
merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
os
, isX64 =
λ ( arch
: < AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
) →
merge
{ AArch = False
, Alpha = False
, Arm = False
, HPPA = False
, HPPA64 = False
, M68k = False
, Mips = False
, Mips64 = False
, Mips64El = False
, MipsEl = False
, MipsIsa32r6 = False
, MipsIsa32r6El = False
, MipsIsa64r6 = False
, MipsIsa64r6El = False
, PowerPC = False
, PowerPC64 = False
, PowerPC64le = False
, RISCV64 = False
, S390x = False
, SH4 = False
, Sparc64 = False
, X64 = True
, X86 = False
}
arch
, libPath =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, libSuffix =
λ ( os
: < AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
) →
merge
{ AIX = "so"
, Android = "so"
, Darwin = "dylib"
, Dragonfly = "so"
, FreeBSD = "so"
, Haiku = "so"
, Hurd = "so"
, IOS = "dylib"
, Linux = "so"
, NetBSD = "so"
, NoOs = "so"
, OpenBSD = "so"
, Redox = "so"
, Solaris = "so"
, Windows = "so"
}
os
, lowerBound =
λ(pkg : { lower : List Natural, name : Text }) →
{ bound =
< Lower : { lower : List Natural }
| LowerUpper : { lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>.Lower
{ lower = pkg.lower }
, name = pkg.name
}
, makeExe =
λ ( os
: < AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
) →
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
os
, makeGnuExe =
λ(pkg : { name : Text, version : List Natural }) →
{ buildCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "-j${Natural/show cfg.cpus}" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, configureCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) →
[ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static
then " -static"
else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, installCommand =
λ ( installVars
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
installVars.buildOS
then [ { value =
"${List/fold
Text
installVars.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
( installVars.shareDirs
# installVars.linkDirs
)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
installVars.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
installVars.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
installVars.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
installVars.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
installVars.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
installVars.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
installVars.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
installVars.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android =
False
, Darwin = True
, Dragonfly =
False
, FreeBSD =
False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD =
False
, Redox = False
, Solaris =
False
, Windows =
False
}
installVars.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
installVars.buildOS
}
]
# ( if installVars.isCross == False
then [ < Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = "bin/${pkg.name}" }
]
else [] : List
< Call :
{ arguments : List Text
, environment :
Optional
(List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, pkgBuildDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, pkgDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, pkgName = pkg.name
, pkgSubdir =
"${pkg.name}-${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Natural
pkg.version
< Empty | NonEmpty : Text >
( λ(_ : Natural) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
(Natural/show _@1)
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${Natural/show _@2}.${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}"
, pkgUrl =
"https://ftp.gnu.org/gnu/${pkg.name}/${pkg.name}-${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Natural
pkg.version
< Empty
| NonEmpty :
Text
>
( λ ( _
: Natural
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}.tar.xz"
, pkgVersion = pkg.version
}
, makeGnuLibrary =
λ(pkg : { name : Text, version : List Natural }) →
{ buildCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "-j${Natural/show cfg.cpus}" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, configureCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) →
[ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static
then " -static"
else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, installCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, pkgBuildDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, pkgDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, pkgName = pkg.name
, pkgSubdir =
"lib${pkg.name}-${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Natural
pkg.version
< Empty | NonEmpty : Text >
( λ(_ : Natural) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
(Natural/show _@1)
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${Natural/show _@2}.${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}"
, pkgUrl =
"https://ftp.gnu.org/pub/gnu/lib${pkg.name}/lib${pkg.name}-${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Natural
pkg.version
< Empty
| NonEmpty :
Text
>
( λ ( _
: Natural
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}.tar.xz"
, pkgVersion = pkg.version
}
, maybeAppend =
λ(a : Type) →
λ(x : Optional a) →
λ(xs : List a) →
merge { None = xs, Some = λ(x : a) → xs # [ x ] } x
, mesonCfgFile =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
''
[binaries]
c = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}gcc'
cpp = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}g++'
ar = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}ar'
strip = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}strip'
pkgconfig = 'pkg-config'
[host_machine]
system = '${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
( merge
{ None = cfg.buildOS
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.os
}
cfg.targetTriple
)}'
cpu_family = '${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
( merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
)}'
cpu = '${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
( merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
)}'
endian = 'little${"'"}''
, mesonConfigure =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "build" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
''
[binaries]
c = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}gcc'
cpp = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly =
"dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}g++'
ar = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}ar'
strip = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly =
"dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}strip'
pkgconfig = 'pkg-config'
[host_machine]
system = '${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
( merge
{ None = cfg.buildOS
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.os
}
cfg.targetTriple
)}'
cpu_family = '${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
( merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
)}'
cpu = '${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
( merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
)}'
endian = 'little${"'"}''
, file = "build/cross.txt"
}
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "--prefix=${cfg.installDir}", ".." ]
# ( if cfg.isCross
then [ "--cross-file", "cross.txt" ]
else [] : List Text
)
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.linkDirs # cfg.shareDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.preloadLibs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_PRELOAD"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "meson"
}
]
, mesonConfigureGeneral =
λ ( envs
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
} →
Optional (List { value : Text, var : Text })
) →
λ(flags : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "build" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
''
[binaries]
c = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}gcc'
cpp = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly =
"dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}g++'
ar = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}ar'
strip = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly =
"dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}strip'
pkgconfig = 'pkg-config'
[host_machine]
system = '${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
( merge
{ None = cfg.buildOS
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.os
}
cfg.targetTriple
)}'
cpu_family = '${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
( merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
)}'
cpu = '${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
( merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
)}'
endian = 'little${"'"}''
, file = "build/cross.txt"
}
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "--prefix=${cfg.installDir}", ".." ]
# ( if cfg.isCross
then [ "--cross-file", "cross.txt" ]
else [] : List Text
)
# flags
, environment = envs cfg
, procDir = Some "build"
, program = "meson"
}
]
, mesonConfigureWithFlags =
λ(flags : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "build" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
''
[binaries]
c = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}gcc'
cpp = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly =
"dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}g++'
ar = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}ar'
strip = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly =
"dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}strip'
pkgconfig = 'pkg-config'
[host_machine]
system = '${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
( merge
{ None = cfg.buildOS
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.os
}
cfg.targetTriple
)}'
cpu_family = '${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
( merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
)}'
cpu = '${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
( merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
)}'
endian = 'little${"'"}''
, file = "build/cross.txt"
}
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "--prefix=${cfg.installDir}", ".." ]
# ( if cfg.isCross
then [ "--cross-file", "cross.txt" ]
else [] : List Text
)
# flags
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.linkDirs # cfg.shareDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.preloadLibs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_PRELOAD"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "meson"
}
]
, mesonEnv =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.linkDirs # cfg.shareDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.preloadLibs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_PRELOAD"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, mesonMoves =
λ(_ : List Text) →
List/fold
Text
_
(List { dest : Text, src : Text })
( λ(_ : Text) →
λ(_ : List { dest : Text, src : Text }) →
[ { dest = "lib/pkgconfig/${_@1}"
, src = "build/meson-private/${_@1}"
}
]
# _
)
([] : List { dest : Text, src : Text })
, mkAclocalPath =
λ(shareDirs : List Text) →
{ value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
shareDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/aclocal:${_@1}/autoconf"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/aclocal:${_@2}/autoconf:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "ACLOCAL_PATH"
}
, mkCCArg =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
merge
{ None = [] : List Text
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "CC=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU = "gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-gcc"
]
}
cfg.targetTriple
, mkCCVar =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
merge
{ None = [] : List { value : Text, var : Text }
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ { value =
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-gcc"
, var = "CC"
}
]
}
cfg.targetTriple
, mkCFlags =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
{ value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, mkExe =
λ(x : Text) →
< Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = x }
, mkExes =
λ(_ : List Text) →
List/fold
Text
_
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = _@1 }
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, mkFRCArg =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
merge
{ None = [] : List Text
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
[ "CC=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU = "gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-gcc"
]
}
cfg.targetTriple
, mkHost =
λ ( _
: Optional
{ abi :
Optional
< GNU | GNUabi64 | GNUeabi | GNUeabihf | GNUspe | MinGw >
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
_.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU = "gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
_
, mkIncludePath =
λ(incls : List Text) →
{ value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
incls
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty = < Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "C_INCLUDE_PATH"
}
, mkLDFlags =
λ(libDirs : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
{ value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
libDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
libDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, mkLDFlagsGeneral =
λ(libDirs : List Text) →
λ(linkLibs : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
{ value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
libDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
linkLibs
Text
(λ(_ : Text) → λ(_ : Text) → " -l${_@1}${_}")
""}${List/fold
Text
libDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, mkLDPath =
λ(libDirs : List Text) →
{ value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
libDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty = < Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, mkLDPathWrapper =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
λ(binName : Text) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "wrapper" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
"LD_LIBRARY_PATH=${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}:${cfg.installDir}/lib LD_PRELOAD='${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Text
cfg.preloadLibs
< Empty
| NonEmpty :
Text
>
( λ ( _
: Text
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
_@1
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}' ${cfg.installDir}/bin/${binName} \$@"
, file = "wrapper/${binName}"
}
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = "wrapper/${binName}" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
{ dest = "wrapper/${binName}", src = "wrapper/${binName}" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = "wrapper/${binName}" }
]
, mkLDPathWrappers =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
λ(bins : List Text) →
List/fold
Text
bins
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
List/fold
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "wrapper" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
"LD_LIBRARY_PATH=${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)}:${cfg.installDir}/lib LD_PRELOAD='${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Text
cfg.preloadLibs
< Empty
| NonEmpty :
Text
>
( λ ( _
: Text
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
_@1
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}' ${cfg.installDir}/bin/${_} \$@"
, file = "wrapper/${_}"
}
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = "wrapper/${_}" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
{ dest = "wrapper/${_}", src = "wrapper/${_}" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = "wrapper/${_}" }
]
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ ( _
: < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage :
{ file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ _@1 ] # _
)
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, mkLDPreload =
λ(libs : List Text) →
{ value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
libs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty = < Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_PRELOAD"
}
, mkLDRunPath =
λ(libDirs : List Text) →
{ value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
libDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty = < Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, mkPathVar =
λ(binDirs : List Text) →
List/fold
Text
binDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""
, mkPerlLib =
λ ( x
: { cfg :
{ binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
, libDirs : List Text
, perlVersion : List Natural
}
) →
{ value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
x.libDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/site_perl/${merge
{ Empty = ""
, NonEmpty =
λ(_ : Text) → _
}
( List/fold
Natural
x.perlVersion
< Empty
| NonEmpty : Text
>
( λ(_ : Natural) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)}/${merge
{ AArch =
"aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 =
"hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 =
"sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
x.cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
x.cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/site_perl/${merge
{ Empty = ""
, NonEmpty =
λ(_ : Text) → _
}
( List/fold
Natural
x.perlVersion
< Empty
| NonEmpty : Text
>
( λ(_ : Natural) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)}/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 =
"hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 = "sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 = "i686"
}
x.cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
x.cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var =
"PERL${merge
{ None = "", Some = Natural/show }
(List/head Natural x.perlVersion)}LIB"
}
, mkPkgConfigVar =
λ(libDirs : List Text) →
{ value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
libDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, mkPy2Wrapper =
λ(binName : Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "wrapper" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
"${( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
).var}=${( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value} PYTHONPATH=${merge
{ Empty = ""
, NonEmpty =
λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty
| NonEmpty : Text
>
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@1}/python2.7/site-packages"
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2}/python2.7/site-packages:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)}:${cfg.installDir}/lib/python2.7/site-packages ${cfg.installDir}/bin/${binName} \$@"
, file = "wrapper/${binName}"
}
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = "wrapper/${binName}" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
{ dest = "wrapper/${binName}", src = "wrapper/${binName}" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = "wrapper/${binName}" }
]
, mkPy3Path =
λ(libDirs : List Text) →
{ value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
libDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, mkPy3Wrapper =
λ(binName : Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "wrapper" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
"${( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
).var}=${( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value} PYTHONPATH=${merge
{ Empty = ""
, NonEmpty =
λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty
| NonEmpty : Text
>
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)}:${cfg.installDir}/lib/python3.8/site-packages ${cfg.installDir}/bin/${binName} \$@"
, file = "wrapper/${binName}"
}
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = "wrapper/${binName}" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
{ dest = "wrapper/${binName}", src = "wrapper/${binName}" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = "wrapper/${binName}" }
]
, mkPyPath =
λ(version : List Natural) →
λ(libDirs : List Text) →
{ value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
libDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/python${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Natural
version
< Empty
| NonEmpty : Text
>
( λ(_ : Natural) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)}/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/python${merge
{ Empty = ""
, NonEmpty =
λ(_ : Text) → _
}
( List/fold
Natural
version
< Empty
| NonEmpty : Text
>
( λ(_ : Natural) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)}/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, mkPyWrapper =
λ(version : List Natural) →
λ(binName : Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "wrapper" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
"${( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
).var}=${( if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
).value} PYTHONPATH=${merge
{ Empty = ""
, NonEmpty =
λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty
| NonEmpty : Text
>
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@1}/python${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Natural
version
< Empty
| NonEmpty :
Text
>
( λ ( _
: Natural
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}/site-packages"
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${_@2}/python${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Natural
version
< Empty
| NonEmpty :
Text
>
( λ ( _
: Natural
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}/site-packages:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)}:${cfg.installDir}/lib/python${merge
{ Empty =
""
, NonEmpty =
λ ( _
: Text
) →
_
}
( List/fold
Natural
version
< Empty
| NonEmpty :
Text
>
( λ ( _
: Natural
) →
λ ( _
: < Empty
| NonEmpty :
Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty :
Text
>.NonEmpty
( Natural/show
_@1
)
, NonEmpty =
λ ( _
: Text
) →
< Empty
| NonEmpty :
Text
>.NonEmpty
"${Natural/show
_@2}.${_}"
}
_
)
< Empty
| NonEmpty :
Text
>.Empty
)}/site-packages ${cfg.installDir}/bin/${binName} \$@"
, file = "wrapper/${binName}"
}
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.MakeExecutable
{ file = "wrapper/${binName}" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
{ dest = "wrapper/${binName}", src = "wrapper/${binName}" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = "wrapper/${binName}" }
]
, mkStaPath =
λ(libDirs : List Text) →
{ value =
"${List/fold
Text
libDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
, mkXdgDataDirs =
λ(shareDirs : List Text) →
{ value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
shareDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty = < Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "XDG_DATA_DIRS"
}
, ninjaBuild =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [] : List Text
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# ( if cfg.isCross
then [] : List { value : Text, var : Text }
else [ { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.preloadLibs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_PRELOAD"
}
]
)
)
, procDir = Some "build"
, program = "ninja"
}
]
, ninjaInstall =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "ninja"
}
]
, ninjaInstallWithPkgConfig =
λ(fs : List { dest : Text, src : Text }) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "ninja"
}
]
# List/fold
{ dest : Text, src : Text }
fs
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : { dest : Text, src : Text }) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CopyFile
_@1
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, ninjaPackage =
λ(x : { name : Text, version : List Natural }) →
{ buildCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [] : List Text
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static
then " -static"
else ""}"
, var = "CPPFLAGS"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# ( if cfg.isCross
then [] : List { value : Text, var : Text }
else [ { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.preloadLibs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_PRELOAD"
}
]
)
)
, procDir = Some "build"
, program = "ninja"
}
]
, configureCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "build" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
{ contents =
''
[binaries]
c = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin = "darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox = "redox"
, Solaris =
"solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}gcc'
cpp = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox = "redox"
, Solaris =
"solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}g++'
ar = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin = "darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox = "redox"
, Solaris =
"solaris"
, Windows = "w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}ar'
strip = '${merge
{ None = ""
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
tgt.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
tgt.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
tgt.abi}-"
}
cfg.targetTriple}strip'
pkgconfig = 'pkg-config'
[host_machine]
system = '${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
( merge
{ None = cfg.buildOS
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.os
}
cfg.targetTriple
)}'
cpu_family = '${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
( merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
)}'
cpu = '${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
( merge
{ None = cfg.buildArch
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple
| IBM
| PC
| Unknown
>
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.arch
}
cfg.targetTriple
)}'
endian = 'little${"'"}''
, file = "build/cross.txt"
}
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "--prefix=${cfg.installDir}", ".." ]
# ( if cfg.isCross
then [ "--cross-file", "cross.txt" ]
else [] : List Text
)
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.linkDirs # cfg.shareDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static
then " -static"
else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.preloadLibs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_PRELOAD"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "meson"
}
]
, installCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/python3.8/site-packages"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/python3.8/site-packages:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PYTHONPATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static
then " -static"
else ""}"
, var = "CPPFLAGS"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = Some "build"
, program = "ninja"
}
]
, pkgBuildDeps =
[ { bound =
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>.NoBound
, name = "meson"
}
, { bound =
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>.NoBound
, name = "ninja"
}
]
, pkgDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, pkgName = x.name
, pkgSubdir =
"${x.name}-${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Natural
x.version
< Empty | NonEmpty : Text >
( λ(_ : Natural) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
(Natural/show _@1)
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${Natural/show _@2}.${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}"
, pkgVersion = x.version
}
, osCfg =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
merge
{ None = cfg.buildOS
, Some =
λ ( tgt
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
tgt.os
}
cfg.targetTriple
, patch =
λ(x : Text) →
< Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Patch
{ patchContents = x }
, perlConfigure =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "Makefile.PL", "PREFIX=${cfg.installDir}" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.shareDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "XDG_DATA_DIRS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.preloadLibs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_PRELOAD"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program = "perl"
}
]
, preloadCfg =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) → [ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX = "aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD =
"netbsd"
, NoOs = "none"
, OpenBSD =
"openbsd"
, Redox = "redox"
, Solaris =
"solaris"
, Windows = "w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.shareDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "XDG_DATA_DIRS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.preloadLibs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_PRELOAD"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, preloadEnv =
λ(_ : List Text) →
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static then " -static" else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.shareDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "XDG_DATA_DIRS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.preloadLibs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty _@1
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_PRELOAD"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, printArch =
λ ( arch
: < AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
) →
merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
arch
, printEnvVar =
λ(var : { value : Text, var : Text }) → "${var.var}=${var.value}"
, printManufacturer =
λ(x : < Apple | IBM | PC | Unknown >) →
merge
{ Apple = "apple", IBM = "ibm", PC = "pc", Unknown = "unknown" }
x
, printOS =
λ ( os
: < AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
) →
merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
os
, printTargetTriple =
λ ( t
: { abi :
Optional
< GNU | GNUabi64 | GNUeabi | GNUeabihf | GNUspe | MinGw >
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
"${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 = "mipsisa32r6"
, MipsIsa32r6El = "mipsisa32r6el"
, MipsIsa64r6 = "mipsisa64r6"
, MipsIsa64r6El = "mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 = "powerpc64"
, PowerPC64le = "powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
t.arch}-${merge
{ AIX = "aix"
, Android = "android"
, Darwin = "darwin"
, Dragonfly = "dragonfly"
, FreeBSD = "freebsd"
, Haiku = "haiku"
, Hurd = "hurd"
, IOS = "darwin"
, Linux = "linux"
, NetBSD = "netbsd"
, NoOs = "none"
, OpenBSD = "openbsd"
, Redox = "redox"
, Solaris = "solaris"
, Windows = "w64"
}
t.os}${merge
{ None = ""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU = "gnu"
, GNUabi64 = "gnuabi64"
, GNUeabi = "gnueabi"
, GNUeabihf = "gnueabihf"
, GNUspe = "gnuspe"
, MinGw = "mingw32"
}
abi}"
}
t.abi}"
, python2Package =
λ(x : { name : Text, version : List Natural }) →
{ buildCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "${cfg.installDir}/lib/python2.7/site-packages" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "setup.py", "build" ]
, environment = Some
( [ { value =
"${cfg.installDir}/lib/python2.7/site-packages"
, var = "PYTHONPATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = None Text
, program = "python2"
}
]
, configureCommand =
λ ( _
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
, installCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "${cfg.installDir}/lib/python2.7/site-packages" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "setup.py"
, "install"
, "--prefix=${cfg.installDir}"
, "--optimize=1"
]
, environment = Some
( [ { value =
"${cfg.installDir}/lib/python2.7/site-packages"
, var = "PYTHONPATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = None Text
, program = "python2"
}
]
, pkgBuildDeps =
[ { bound =
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>.NoBound
, name = "python2"
}
]
, pkgDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, pkgName = x.name
, pkgSubdir =
"${x.name}-${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Natural
x.version
< Empty | NonEmpty : Text >
( λ(_ : Natural) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
(Natural/show _@1)
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${Natural/show _@2}.${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}"
, pkgVersion = x.version
}
, python3Build =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "${cfg.installDir}/lib/python3.8/site-packages" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "setup.py", "build" ]
, environment = Some
( [ { value =
"${cfg.installDir}/lib/python3.8/site-packages"
, var = "PYTHONPATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = None Text
, program = "python3"
}
]
, python3Install =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "${cfg.installDir}/lib/python3.8/site-packages" }
, < Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "setup.py"
, "install"
, "--prefix=${cfg.installDir}"
, "--optimize=1"
]
, environment = Some
( [ { value =
"${cfg.installDir}/lib/python3.8/site-packages"
, var = "PYTHONPATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = None Text
, program = "python3"
}
]
, python3Package =
λ(x : { name : Text, version : List Natural }) →
{ buildCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "${cfg.installDir}/lib/python3.8/site-packages" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "setup.py", "build" ]
, environment = Some
( [ { value =
"${cfg.installDir}/lib/python3.8/site-packages"
, var = "PYTHONPATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = None Text
, program = "python3"
}
]
, configureCommand =
λ ( _
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
, installCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.CreateDirectory
{ dir = "${cfg.installDir}/lib/python3.8/site-packages" }
, < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
[ "setup.py"
, "install"
, "--prefix=${cfg.installDir}"
, "--optimize=1"
]
, environment = Some
( [ { value =
"${cfg.installDir}/lib/python3.8/site-packages"
, var = "PYTHONPATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
]
# ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
)
, procDir = None Text
, program = "python3"
}
]
, pkgBuildDeps =
[ { bound =
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>.NoBound
, name = "python3"
}
]
, pkgDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, pkgName = x.name
, pkgSubdir =
"${x.name}-${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Natural
x.version
< Empty | NonEmpty : Text >
( λ(_ : Natural) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
(Natural/show _@1)
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${Natural/show _@2}.${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}"
, pkgVersion = x.version
}
, showVersion =
λ(_ : List Natural) →
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Natural
_
< Empty | NonEmpty : Text >
( λ(_ : Natural) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
(Natural/show _@1)
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${Natural/show _@2}.${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, simplePackage =
λ(pkg : { name : Text, version : List Natural }) →
{ buildCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "-j${Natural/show cfg.cpus}" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, configureCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments =
( if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then λ(x : List Text) → [ "configure" ] # x
else λ(x : List Text) → x
)
( merge
{ None = [ "--prefix=${cfg.installDir}" ]
, Some =
λ(x : Text) →
[ "--prefix=${cfg.installDir}", x ]
}
( merge
{ None = None Text
, Some =
λ ( _
: { abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional
< Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
) →
Some
"--host=${merge
{ AArch = "aarch64"
, Alpha = "alpha"
, Arm = "arm"
, HPPA = "hppa"
, HPPA64 = "hppa64"
, M68k = "m68k"
, Mips = "mips"
, Mips64 = "mips64"
, Mips64El = "mips64el"
, MipsEl = "mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC = "powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 = "riscv64"
, S390x = "s390x"
, SH4 = "sh4"
, Sparc64 = "sparc64"
, X64 = "x86_64"
, X86 = "i686"
}
_.arch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
_.os}${merge
{ None =
""
, Some =
λ ( abi
: < GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
) →
"-${merge
{ GNU =
"gnu"
, GNUabi64 =
"gnuabi64"
, GNUeabi =
"gnueabi"
, GNUeabihf =
"gnueabihf"
, GNUspe =
"gnuspe"
, MinGw =
"mingw32"
}
abi}"
}
_.abi}"
}
cfg.targetTriple
)
)
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.includeDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-I${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${if cfg.static
then " -static"
else ""}"
, var = "CPPFLAGS"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, if cfg.static
then { value =
"${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/lib:/lib:/usr/lib"
, var = "LIBRARY_PATH"
}
else { value =
merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty
| NonEmpty : Text
>
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty
| NonEmpty : Text
>.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_RUN_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
]
)
, procDir = None Text
, program =
if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly = False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then "sh"
else "./configure"
}
]
, installCommand =
λ ( cfg
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer :
Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Call
{ arguments = [ "install" ]
, environment = Some
( ( if merge
{ AIX = True
, Android = True
, Darwin = True
, Dragonfly = True
, FreeBSD = True
, Haiku = False
, Hurd = True
, IOS = True
, Linux = True
, NetBSD = True
, NoOs = False
, OpenBSD = True
, Redox = False
, Solaris = True
, Windows = False
}
cfg.buildOS
then [ { value =
"${List/fold
Text
cfg.binDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${_@1}:${_}"
)
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
]
else [] : List { value : Text, var : Text }
)
# [ { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
(cfg.shareDirs # cfg.linkDirs)
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/pkgconfig"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/pkgconfig:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PKG_CONFIG_PATH"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@1}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}/site_perl/5.30.2/${merge
{ AArch =
"aarch64"
, Alpha =
"alpha"
, Arm =
"arm"
, HPPA =
"hppa"
, HPPA64 =
"hppa64"
, M68k =
"m68k"
, Mips =
"mips"
, Mips64 =
"mips64"
, Mips64El =
"mips64el"
, MipsEl =
"mipsel"
, MipsIsa32r6 =
"mipsisa32r6"
, MipsIsa32r6El =
"mipsisa32r6el"
, MipsIsa64r6 =
"mipsisa64r6"
, MipsIsa64r6El =
"mipsisa64r6el"
, PowerPC =
"powerpc"
, PowerPC64 =
"powerpc64"
, PowerPC64le =
"powerpc64le"
, RISCV64 =
"riscv64"
, S390x =
"s390x"
, SH4 =
"sh4"
, Sparc64 =
"sparc64"
, X64 =
"x86_64"
, X86 =
"i686"
}
cfg.buildArch}-${merge
{ AIX =
"aix"
, Android =
"android"
, Darwin =
"darwin"
, Dragonfly =
"dragonfly"
, FreeBSD =
"freebsd"
, Haiku =
"haiku"
, Hurd =
"hurd"
, IOS =
"darwin"
, Linux =
"linux"
, NetBSD =
"netbsd"
, NoOs =
"none"
, OpenBSD =
"openbsd"
, Redox =
"redox"
, Solaris =
"solaris"
, Windows =
"w64"
}
cfg.buildOS}/:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "PERL5LIB"
}
, { value =
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
_@1
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${_@2}:${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, var = "LD_LIBRARY_PATH"
}
, { value =
"${merge
{ Empty = ""
, NonEmpty = λ(_ : Text) → _
}
( List/fold
Text
cfg.linkDirs
< Empty | NonEmpty : Text >
( λ(_ : Text) →
λ ( _
: < Empty | NonEmpty : Text >
) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@1}"
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"-L${_@2} ${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}${List/fold
Text
cfg.linkDirs
Text
( λ(_ : Text) →
λ(_ : Text) →
"${if merge
{ AIX = False
, Android = False
, Darwin = True
, Dragonfly =
False
, FreeBSD = False
, Haiku = False
, Hurd = False
, IOS = False
, Linux = False
, NetBSD = False
, NoOs = False
, OpenBSD = False
, Redox = False
, Solaris = False
, Windows = False
}
cfg.buildOS
then ""
else " -Wl,-rpath-link,${_@1}"}${_}"
)
""}"
, var = "LDFLAGS"
}
]
)
, procDir = None Text
, program =
merge
{ AIX = "make"
, Android = "make"
, Darwin = "make"
, Dragonfly = "gmake"
, FreeBSD = "gmake"
, Haiku = "make"
, Hurd = "make"
, IOS = "make"
, Linux = "make"
, NetBSD = "gmake"
, NoOs = "make"
, OpenBSD = "gmake"
, Redox = "make"
, Solaris = "gmake"
, Windows = "make"
}
cfg.buildOS
}
]
, pkgBuildDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, pkgDeps =
[] : List
{ bound :
< Lower : { lower : List Natural }
| LowerUpper :
{ lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>
, name : Text
}
, pkgName = pkg.name
, pkgSubdir =
"${pkg.name}-${merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Natural
pkg.version
< Empty | NonEmpty : Text >
( λ(_ : Natural) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty
| NonEmpty : Text
>.NonEmpty
(Natural/show _@1)
, NonEmpty =
λ(_ : Text) →
< Empty
| NonEmpty : Text
>.NonEmpty
"${Natural/show _@2}.${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)}"
, pkgVersion = pkg.version
}
, singleThreaded =
λ ( _
: { binDirs : List Text
, buildArch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, buildOS :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
, cpus : Natural
, currentDir : Text
, includeDirs : List Text
, installDir : Text
, isCross : Bool
, linkDirs : List Text
, preloadLibs : List Text
, shareDirs : List Text
, static : Bool
, targetTriple :
Optional
{ abi :
Optional
< GNU
| GNUabi64
| GNUeabi
| GNUeabihf
| GNUspe
| MinGw
>
, arch :
< AArch
| Alpha
| Arm
| HPPA
| HPPA64
| M68k
| Mips
| Mips64
| Mips64El
| MipsEl
| MipsIsa32r6
| MipsIsa32r6El
| MipsIsa64r6
| MipsIsa64r6El
| PowerPC
| PowerPC64
| PowerPC64le
| RISCV64
| S390x
| SH4
| Sparc64
| X64
| X86
>
, manufacturer : Optional < Apple | IBM | PC | Unknown >
, os :
< AIX
| Android
| Darwin
| Dragonfly
| FreeBSD
| Haiku
| Hurd
| IOS
| Linux
| NetBSD
| NoOs
| OpenBSD
| Redox
| Solaris
| Windows
>
}
}
) →
1
, squishVersion =
λ(_ : List Natural) →
List/fold
Natural
_
Text
(λ(_ : Natural) → λ(_ : Text) → "${Natural/show _@1}${_}")
""
, symlink =
λ(tgt : Text) →
λ(lnk : Text) →
< Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Symlink
{ linkName = lnk, tgt }
, symlinkBinaries =
λ(_ : List Text) →
List/fold
Text
_
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : Text) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file = _@1 }
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, symlinkBinary =
λ(file : Text) →
< Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkBinary
{ file }
, symlinkManpage =
< Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkManpage
, symlinkManpages =
λ(_ : List { file : Text, section : Natural }) →
List/fold
{ file : Text, section : Natural }
_
( List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
( λ(_ : { file : Text, section : Natural }) →
λ ( _
: List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
) →
[ < Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.SymlinkManpage
_@1
]
# _
)
( [] : List
< Call :
{ arguments : List Text
, environment :
Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>
)
, unbounded =
λ(x : Text) →
{ bound =
< Lower : { lower : List Natural }
| LowerUpper : { lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>.NoBound
, name = x
}
, underscoreVersion =
λ(_ : List Natural) →
merge
{ Empty = "", NonEmpty = λ(_ : Text) → _ }
( List/fold
Natural
_
< Empty | NonEmpty : Text >
( λ(_ : Natural) →
λ(_ : < Empty | NonEmpty : Text >) →
merge
{ Empty =
< Empty | NonEmpty : Text >.NonEmpty
(Natural/show _@1)
, NonEmpty =
λ(_ : Text) →
< Empty | NonEmpty : Text >.NonEmpty
"${Natural/show _@2}_${_}"
}
_
)
< Empty | NonEmpty : Text >.Empty
)
, unixPath =
λ(binDirs : List Text) →
{ value =
"${List/fold
Text
binDirs
Text
(λ(_ : Text) → λ(_ : Text) → "${_@1}:${_}")
""}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
, var = "PATH"
}
, upperBound =
λ(pkg : { name : Text, upper : List Natural }) →
{ bound =
< Lower : { lower : List Natural }
| LowerUpper : { lower : List Natural, upper : List Natural }
| NoBound
| Upper : { upper : List Natural }
>.Upper
{ upper = pkg.upper }
, name = pkg.name
}
, writeFile =
< Call :
{ arguments : List Text
, environment : Optional (List { value : Text, var : Text })
, procDir : Optional Text
, program : Text
}
| CopyFile : { dest : Text, src : Text }
| CreateDirectory : { dir : Text }
| MakeExecutable : { file : Text }
| Patch : { patchContents : Text }
| Symlink : { linkName : Text, tgt : Text }
| SymlinkBinary : { file : Text }
| SymlinkManpage : { file : Text, section : Natural }
| Write : { contents : Text, file : Text }
>.Write
}
let gpgPackage =
λ(x : { name : Text, version : List Natural }) →
prelude.simplePackage x
⫽ { pkgUrl =
"https://gnupg.org/ftp/gcrypt/${x.name}/${x.name}-${prelude.showVersion
x.version}.tar.bz2"
}
let gnupg =
λ(v : List Natural) →
gpgPackage { name = "gnupg", version = v }
⫽ { pkgDeps =
[ prelude.lowerBound { name = "npth", lower = [ 1, 2 ] }
, prelude.lowerBound { name = "libgpg-error", lower = [ 1, 24 ] }
, prelude.lowerBound { name = "libgcrypt", lower = [ 1, 7, 0 ] }
, prelude.lowerBound { name = "libassuan", lower = [ 2, 5, 0 ] }
, prelude.lowerBound { name = "libksba", lower = [ 1, 3, 4 ] }
]
, installCommand = prelude.installWithBinaries [ "bin/gpg" ]
}
let npth = λ(v : List Natural) → gpgPackage { name = "npth", version = v }
let libgpgError =
λ(v : List Natural) → gpgPackage { name = "libgpg-error", version = v }
let libgcrypt =
λ(v : List Natural) →
gpgPackage { name = "libgcrypt", version = v }
⫽ { pkgDeps =
[ prelude.lowerBound { name = "libgpg-error", lower = [ 1, 25 ] } ]
}
let libassuan =
λ(v : List Natural) →
gpgPackage { name = "libassuan", version = v }
⫽ { pkgDeps =
[ prelude.lowerBound { name = "libgpg-error", lower = [ 1, 24 ] } ]
}
let libksba =
λ(v : List Natural) →
gpgPackage { name = "libksba", version = v }
⫽ { pkgDeps =
[ prelude.lowerBound { name = "libgpg-error", lower = [ 1, 8 ] } ]
}
let musl =
λ(v : List Natural) →
prelude.simplePackage { name = "musl", version = v }
⫽ { pkgUrl =
"https://www.musl-libc.org/releases/musl-${prelude.showVersion
v}.tar.gz"
, installCommand = prelude.installWithBinaries [ "bin/musl-gcc" ]
}
let binutils =
λ(v : List Natural) →
prelude.makeGnuExe { name = "binutils", version = v }
⫽ { pkgUrl =
"https://ftp.wayne.edu/gnu/binutils/binutils-${prelude.showVersion
v}.tar.lz"
, installCommand =
prelude.installWithBinaries
[ "bin/ar"
, "bin/as"
, "bin/ld"
, "bin/strip"
, "bin/strings"
, "bin/readelf"
, "bin/objdump"
, "bin/nm"
, "bin/ranlib"
]
}
let bison =
λ(v : List Natural) →
prelude.makeGnuExe { name = "bison", version = v }
⫽ { buildCommand =
λ(cfg : types.BuildVars) →
prelude.generalBuild
prelude.singleThreaded
(prelude.buildEnv cfg)
cfg
, installCommand =
prelude.installWithBinaries [ "bin/bison", "bin/yacc" ]
, pkgBuildDeps = [ prelude.unbounded "m4" ]
}
let cmake =
λ(cfg : { version : List Natural, patch : Natural }) →
let patchString = Natural/show cfg.patch
let versionString = prelude.showVersion cfg.version
let cmakeConfigure =
λ(cfg : types.BuildVars) →
prelude.configureMkExesExtraFlags
{ bins = [ "bootstrap" ]
, extraFlags = [ "--parallel=${Natural/show cfg.cpus}" ]
}
cfg
in prelude.defaultPackage
⫽ { pkgName = "cmake"
, pkgVersion = prelude.fullVersion cfg
, pkgUrl =
"https://cmake.org/files/v${versionString}/cmake-${versionString}.${patchString}.tar.gz"
, pkgSubdir = "cmake-${versionString}.${patchString}"
, configureCommand = cmakeConfigure
, installCommand =
λ(cfg : types.BuildVars) →
let wrapper =
"CMAKE_ROOT=${cfg.installDir}/share/cmake-${versionString}/ ${cfg.installDir}/bin/cmake \$@"
let wrapped = "wrapper/cmake"
in prelude.defaultInstall cfg
# [ prelude.createDir "wrapper"
, prelude.writeFile
{ file = wrapped, contents = wrapper }
, prelude.mkExe wrapped
, prelude.copyFile wrapped wrapped
, prelude.symlinkBinary wrapped
]
}
let curl =
λ(v : List Natural) →
prelude.simplePackage { name = "curl", version = v }
⫽ { pkgUrl =
"https://curl.haxx.se/download/curl-${prelude.showVersion
v}.tar.xz"
, installCommand = prelude.installWithBinaries [ "bin/curl" ]
, pkgDeps = [ prelude.unbounded "zlib" ]
}
let dbus =
λ(v : List Natural) →
prelude.simplePackage { name = "dbus", version = v }
⫽ { pkgUrl =
"https://dbus.freedesktop.org/releases/dbus/dbus-${prelude.showVersion
v}.tar.xz"
, pkgDeps =
[ prelude.unbounded "expat", prelude.unbounded "libselinux" ]
, configureCommand = prelude.configureLinkExtraLibs [ "pcre" ]
, pkgBuildDeps = [ prelude.unbounded "pkg-config" ]
}
let fltk =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "fltk", version = v }
⫽ { pkgUrl =
"http://fltk.org/pub/fltk/${versionString}/fltk-${versionString}-source.tar.bz2"
, pkgSubdir = "fltk-${versionString}"
, pkgDeps =
[ prelude.unbounded "libX11"
, prelude.unbounded "alsa-lib"
, prelude.unbounded "zlib"
, prelude.unbounded "libpng"
, prelude.unbounded "libXft"
, prelude.unbounded "freetype"
]
}
let gawk =
λ(v : List Natural) →
prelude.makeGnuExe { name = "gawk", version = v }
⫽ { installCommand =
prelude.installWithBinaries [ "bin/gawk", "bin/awk" ]
}
let gc =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "gc", version = v }
⫽ { pkgUrl =
"https://github.com/ivmai/bdwgc/releases/download/v${versionString}/gc-${versionString}.tar.gz"
, pkgDeps = [ prelude.unbounded "libatomic_ops" ]
}
let libatomic_ops =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libatomic_ops", version = v }
⫽ { pkgUrl =
"https://github.com/ivmai/libatomic_ops/releases/download/v${versionString}/libatomic_ops-${versionString}.tar.gz"
}
let git =
λ(v : List Natural) →
prelude.simplePackage { name = "git", version = v }
⫽ { pkgUrl =
"https://mirrors.edge.kernel.org/pub/software/scm/git/git-${prelude.showVersion
v}.tar.xz"
, installCommand = prelude.installWithBinaries [ "bin/git" ]
, pkgBuildDeps = [ prelude.unbounded "gettext" ]
}
let glibc =
let buildDir = Some "build"
let glibcConfigure =
λ(cfg : types.BuildVars) →
let maybeHost = prelude.mkHost cfg.targetTriple
let modifyArgs = prelude.maybeAppend Text maybeHost
in [ prelude.createDir "build"
, prelude.call
{ program = "../configure"
, arguments = modifyArgs [ "--prefix=${cfg.installDir}" ]
, environment = prelude.configSome ([] : List Text) cfg
, procDir = buildDir
}
]
let glibcBuild =
λ(cfg : types.BuildVars) →
[ prelude.call
{ program = prelude.makeExe cfg.buildOS
, arguments = [ "-j${Natural/show cfg.cpus}" ]
, environment = prelude.configSome ([] : List Text) cfg
, procDir = buildDir
}
]
let glibcInstall =
λ(cfg : types.BuildVars) →
[ prelude.call
{ program = prelude.makeExe cfg.buildOS
, arguments = [ "install" ]
, environment = prelude.configSome ([] : List Text) cfg
, procDir = buildDir
}
]
in λ(v : List Natural) →
prelude.defaultPackage
⫽ { pkgName = "glibc"
, pkgVersion = v
, pkgUrl =
"http://mirror.keystealth.org/gnu/libc/glibc-${prelude.showVersion
v}.tar.xz"
, pkgSubdir = "glibc-${prelude.showVersion v}"
, configureCommand = glibcConfigure
, buildCommand = glibcBuild
, installCommand = glibcInstall
, pkgBuildDeps =
[ prelude.unbounded "bison"
, prelude.unbounded "gawk"
, prelude.unbounded "python3"
]
}
let gmp =
λ(v : List Natural) →
prelude.simplePackage { name = "gmp", version = v }
⫽ { pkgUrl =
"https://gmplib.org/download/gmp/gmp-${prelude.showVersion
v}.tar.lz"
, pkgBuildDeps = [ prelude.unbounded "m4" ]
}
let harfbuzz =
let symlinkHarfbuzz =
λ(h : Text) → prelude.symlink "include/harfbuzz/${h}" "include/${h}"
in λ(v : List Natural) →
prelude.simplePackage { name = "harfbuzz", version = v }
⫽ { pkgUrl =
"https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-${prelude.showVersion
v}.tar.xz"
, pkgDeps =
[ prelude.unbounded "freetype-prebuild"
, prelude.unbounded "glib"
]
, pkgBuildDeps = [ prelude.unbounded "pkg-config" ]
, configureCommand =
prelude.configureLinkExtraLibs [ "pcre", "z" ]
, installCommand =
λ(cfg : types.BuildVars) →
prelude.defaultInstall cfg
# [ symlinkHarfbuzz "hb-aat-layout.h"
, symlinkHarfbuzz "hb-aat.h"
, symlinkHarfbuzz "hb-blob.h"
, symlinkHarfbuzz "hb-buffer.h"
, symlinkHarfbuzz "hb-common.h"
, symlinkHarfbuzz "hb-deprecated.h"
, symlinkHarfbuzz "hb-face.h"
, symlinkHarfbuzz "hb-font.h"
, symlinkHarfbuzz "hb-ft.h"
, symlinkHarfbuzz "hb-glib.h"
, symlinkHarfbuzz "hb-icu.h"
, symlinkHarfbuzz "hb-map.h"
, symlinkHarfbuzz "hb-ot-color.h"
, symlinkHarfbuzz "hb-ot-font.h"
, symlinkHarfbuzz "hb-ot-layout.h"
, symlinkHarfbuzz "hb-ot-math.h"
, symlinkHarfbuzz "hb-ot-name.h"
, symlinkHarfbuzz "hb-ot-shape.h"
, symlinkHarfbuzz "hb-ot-var.h"
, symlinkHarfbuzz "hb-ot.h"
, symlinkHarfbuzz "hb-set.h"
, symlinkHarfbuzz "hb-shape-plan.h"
, symlinkHarfbuzz "hb-shape.h"
, symlinkHarfbuzz "hb-subset.h"
, symlinkHarfbuzz "hb-unicode.h"
, symlinkHarfbuzz "hb-version.h"
, symlinkHarfbuzz "hb.h"
]
}
let libjpeg-turbo =
λ(v : List Natural) →
prelude.cmakePackage
⫽ { pkgName = "libjpeg-turbo"
, pkgVersion = v
, pkgUrl =
"https://ayera.dl.sourceforge.net/project/libjpeg-turbo/${prelude.showVersion
v}/libjpeg-turbo-${prelude.showVersion
v}.tar.gz"
, pkgSubdir = "libjpeg-turbo-${prelude.showVersion v}"
, pkgBuildDeps =
[ prelude.unbounded "cmake"
, prelude.unbounded "nasm"
, prelude.unbounded "make"
]
}
let libuv =
λ(v : List Natural) →
prelude.defaultPackage
⫽ { pkgName = "libuv"
, pkgVersion = v
, pkgUrl =
"https://dist.libuv.org/dist/v${prelude.showVersion
v}/libuv-v${prelude.showVersion
v}.tar.gz"
, pkgSubdir = "libuv-v${prelude.showVersion v}"
, configureCommand = prelude.autogenConfigure
, pkgBuildDeps =
[ prelude.unbounded "m4"
, prelude.unbounded "automake"
, prelude.unbounded "libtool"
]
}
let nasm =
λ(v : List Natural) →
prelude.simplePackage { name = "nasm", version = v }
⫽ { pkgUrl =
"http://www.nasm.us/pub/nasm/releasebuilds/${prelude.showVersion
v}.02/nasm-${prelude.showVersion
v}.02.tar.xz"
, pkgSubdir = "nasm-${prelude.showVersion v}.02"
, installCommand =
prelude.installWithBinaries [ "bin/nasm", "bin/ndisasm" ]
}
let ncurses =
λ(v : List Natural) →
prelude.simplePackage { name = "ncurses", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/ncurses/ncurses-${prelude.showVersion
v}.tar.gz"
, configureCommand =
λ(cfg : types.BuildVars) →
let crossArgs =
if cfg.isCross
then [ "--disable-stripping" ]
else [] : List Text
in prelude.configureWithFlags
([ "--with-shared", "--enable-widec" ] # crossArgs)
cfg
, installCommand =
λ(cfg : types.BuildVars) →
prelude.defaultInstall cfg
# [ prelude.symlink "lib/libncursesw.so" "lib/libncurses.so" ]
}
let pcre2 =
λ(v : List Natural) →
prelude.simplePackage { name = "pcre2", version = v }
⫽ { pkgUrl =
"https://ftp.pcre.org/pub/pcre/pcre2-${prelude.showVersion
v}.tar.bz2"
}
let pcre =
λ(v : List Natural) →
prelude.simplePackage { name = "pcre", version = v }
⫽ { pkgUrl =
"https://ftp.pcre.org/pub/pcre/pcre-${prelude.showVersion
v}.tar.bz2"
, configureCommand =
prelude.configureWithFlags
[ "--enable-utf8", "--enable-unicode-properties" ]
}
let perl5 =
let perlConfigure =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "sh"
, arguments =
[ "./Configure"
, "-des"
, "-Dprefix=${cfg.installDir}"
]
# ( if cfg.static
then [] : List Text
else [ "-Duseshrplib" ]
)
}
)
]
let linkDir =
λ(os : types.OS) →
merge
{ FreeBSD = "CORE"
, OpenBSD = "CORE"
, NetBSD = "CORE"
, Solaris = "CORE"
, Dragonfly = "CORE"
, Linux = "CORE"
, Darwin = "darwin-2level/CORE"
, Windows = "CORE"
, Redox = "CORE"
, Haiku = "CORE"
, IOS = "darwin-2level/CORE"
, AIX = "CORE"
, Hurd = "CORE"
, Android = "CORE"
, NoOs = "CORE"
}
os
in λ(v : List Natural) →
let major =
merge { Some = Natural/show, None = "" } (List/head Natural v)
in prelude.simplePackage { name = "perl", version = v }
⫽ { pkgUrl =
"https://www.cpan.org/src/${major}.0/perl-${prelude.showVersion
v}.tar.gz"
, configureCommand = perlConfigure
, buildCommand =
λ(cfg : types.BuildVars) →
prelude.generalBuild
prelude.singleThreaded
(prelude.buildEnv cfg)
cfg
, installCommand =
λ(cfg : types.BuildVars) →
let libperlFile =
if cfg.static
then "libperl.a"
else "libperl.${prelude.libSuffix
(prelude.osCfg cfg)}"
in prelude.installWithBinaries
[ "bin/perl", "bin/cpan", "bin/ptar" ]
cfg
# [ prelude.symlink
"lib/${prelude.showVersion
v}/${prelude.printArch
cfg.buildArch}-${prelude.printOS
cfg.buildOS}/${linkDir
cfg.buildOS}/${libperlFile}"
"lib/${libperlFile}"
]
}
let libpng =
λ(v : List Natural) →
prelude.simplePackage { name = "libpng", version = v }
⫽ { pkgUrl =
"https://download.sourceforge.net/libpng/libpng-${prelude.showVersion
v}.tar.xz"
, pkgDeps = [ prelude.unbounded "zlib" ]
}
let sed =
λ(v : List Natural) →
prelude.makeGnuExe { name = "sed", version = v }
⫽ { installCommand =
prelude.installWithManpages
[ { file = "share/man/man1/sed.1", section = 1 } ]
, configureCommand =
prelude.configureWithFlags [ "--disable-dependency-tracking" ]
}
let tar = λ(v : List Natural) → prelude.makeGnuExe { name = "tar", version = v }
let unistring =
λ(v : List Natural) →
prelude.makeGnuLibrary { name = "unistring", version = v }
let valgrind =
λ(v : List Natural) →
prelude.simplePackage { name = "valgrind", version = v }
⫽ { pkgUrl =
"https://sourceware.org/pub/valgrind/valgrind-${prelude.showVersion
v}.tar.bz2"
, installCommand =
λ(cfg : types.BuildVars) →
prelude.installWithBinaries [ "bin/valgrind" ] cfg
# prelude.symlinkManpages
[ { file = "share/man/man1/pdfgrep.1", section = 1 } ]
}
let vim =
λ(v : List Natural) →
prelude.defaultPackage
⫽ { pkgName = "vim"
, pkgVersion = v
, pkgUrl =
"http://ftp.vim.org/vim/unix/vim-${prelude.showVersion v}.tar.bz2"
, pkgSubdir = "vim${prelude.squishVersion v}"
, configureCommand =
prelude.configureMkExesExtraFlags
{ bins =
[ "src/configure", "src/auto/configure", "src/which.sh" ]
, extraFlags = [ "--enable-gui=no", "--enable-pythoninterp" ]
}
, installCommand =
λ(cfg : types.BuildVars) →
let mkLibDynload =
λ(libs : List Text) →
concatMapSep
":"
Text
( λ(dir : Text) →
"${dir}:${dir}/python2.7/lib-dynload"
)
libs
let mkPython =
λ(libs : List Text) →
concatMapSep
":"
Text
( λ(dir : Text) →
"${dir}/python2.7/:${dir}/python2.7/lib-dynload"
)
libs
let wrapper =
"LD_LIBRARY_PATH=${mkLibDynload
cfg.linkDirs} PYTHONPATH=${mkPython
cfg.linkDirs} ${cfg.installDir}/bin/vim \$@"
let wrapped = "wrapper/vim"
in prelude.installWithBinaries [ "bin/xxd" ] cfg
# [ prelude.createDir "wrapper"
, prelude.writeFile { file = wrapped, contents = wrapper }
, prelude.mkExe wrapped
, prelude.copyFile wrapped wrapped
, prelude.symlinkBinary wrapped
]
, pkgDeps =
[ prelude.unbounded "ncurses"
, prelude.unbounded "libXpm"
, prelude.unbounded "libXt"
, prelude.unbounded "python2"
]
}
let xz =
λ(v : List Natural) →
prelude.simplePackage { name = "xz", version = v }
⫽ { pkgUrl = "https://tukaani.org/xz/xz-${prelude.showVersion v}.tar.xz"
, installCommand = prelude.installWithBinaries [ "bin/xz" ]
}
let zlib =
λ(v : List Natural) →
let zlibConfigure =
λ(cfg : types.BuildVars) →
let host = prelude.mkCCVar cfg
in [ prelude.call
( prelude.defaultCall
⫽ { program = "sh"
, arguments =
[ "configure", "--prefix=${cfg.installDir}" ]
, environment = Some
( host
# [ { var = "PATH"
, value =
"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
}
]
)
}
)
]
in prelude.simplePackage { name = "zlib", version = v }
⫽ { pkgUrl =
"http://www.zlib.net/zlib-${prelude.showVersion v}.tar.xz"
, configureCommand = zlibConfigure
, installCommand =
prelude.installWithManpages
[ { file = "share/man/man3/zlib.3", section = 3 } ]
}
let gettext =
λ(v : List Natural) →
prelude.makeGnuExe { name = "gettext", version = v }
⫽ { installCommand =
prelude.installWithBinaries
[ "bin/gettext", "bin/msgfmt", "bin/autopoint" ]
, configureCommand =
prelude.configureWithFlags [ "--disable-dependency-tracking" ]
}
let gzip =
λ(v : List Natural) → prelude.makeGnuExe { name = "gzip", version = v }
let wget =
λ(v : List Natural) →
prelude.makeGnuExe { name = "wget", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/wget/wget-${prelude.showVersion
v}.tar.gz"
, pkgDeps = [ prelude.unbounded "gnutls" ]
, pkgBuildDeps = [ prelude.unbounded "perl" ]
, installCommand = prelude.installWithWrappers [ "wget" ]
}
let gnutls =
λ(cfg : { version : List Natural, patch : List Natural }) →
let versionString = prelude.showVersion cfg.version
in prelude.simplePackage
{ name = "gnutls", version = cfg.version # cfg.patch }
⫽ { pkgUrl =
"https://www.gnupg.org/ftp/gcrypt/gnutls/v${versionString}/gnutls-${versionString}.${prelude.showVersion
cfg.patch}.tar.xz"
, pkgDeps =
[ prelude.lowerBound { name = "nettle", lower = [ 3, 1 ] }
, prelude.unbounded "unistring"
, prelude.lowerBound { name = "libtasn1", lower = [ 4, 9 ] }
, prelude.lowerBound { name = "p11-kit", lower = [ 0, 23, 1 ] }
]
, configureCommand =
prelude.configureLinkExtraLibs [ "nettle", "hogweed" ]
}
let lapack =
λ(v : List Natural) →
prelude.cmakePackage
⫽ { pkgName = "lapack"
, pkgVersion = v
, pkgUrl =
"http://www.netlib.org/lapack/lapack-${prelude.showVersion
v}.tar.gz"
, pkgSubdir = "lapack-${prelude.showVersion v}"
, pkgBuildDeps =
[ prelude.unbounded "cmake", prelude.unbounded "gcc" ]
}
let cairo =
let symlinkCairo =
λ(h : Text) → prelude.symlink "include/cairo/${h}" "include/${h}"
in λ(v : List Natural) →
prelude.simplePackage { name = "cairo", version = v }
⫽ { pkgUrl =
"https://www.cairographics.org/releases/cairo-${prelude.showVersion
v}.tar.xz"
, pkgDeps =
[ prelude.lowerBound { name = "pixman", lower = [ 0, 30, 0 ] }
, prelude.lowerBound { name = "freetype", lower = [ 9, 7, 3 ] }
, prelude.lowerBound
{ name = "fontconfig", lower = [ 2, 2, 95 ] }
, prelude.unbounded "libXext"
]
, installCommand =
λ(cfg : types.BuildVars) →
prelude.defaultInstall cfg
# [ symlinkCairo "cairo-deprecated.h"
, symlinkCairo "cairo-features.h"
, symlinkCairo "cairo-ft.h"
, symlinkCairo "cairo-gobject.h"
, symlinkCairo "cairo-pdf.h"
, symlinkCairo "cairo-ps.h"
, symlinkCairo "cairo-script-interpreter.h"
, symlinkCairo "cairo-script.h"
, symlinkCairo "cairo-svg.h"
, symlinkCairo "cairo-version.h"
, symlinkCairo "cairo-xcb.h"
, symlinkCairo "cairo-xlib-xrender.h"
, symlinkCairo "cairo-xlib.h"
, symlinkCairo "cairo.h"
]
}
let pycairo =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.python2Package { name = "pycairo", version = v }
⫽ { pkgUrl =
"https://github.com/pygobject/pycairo/releases/download/v${versionString}/pycairo-${versionString}.tar.gz"
, pkgDeps = [ prelude.unbounded "cairo" ]
}
let libnettle =
λ(v : List Natural) →
prelude.simplePackage { name = "nettle", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/nettle/nettle-${prelude.showVersion
v}.tar.gz"
, pkgBuildDeps = [ prelude.unbounded "m4" ]
}
let diffutils =
λ(v : List Natural) →
prelude.simplePackage { name = "diffutils", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/diffutils/diffutils-${prelude.showVersion
v}.tar.xz"
, installCommand = prelude.installWithBinaries [ "bin/diff" ]
}
let patch =
λ(v : List Natural) →
prelude.makeGnuExe { name = "patch", version = v }
⫽ { installCommand =
λ(cfg : types.BuildVars) →
prelude.installWithBinaries [ "bin/patch" ] cfg
# prelude.symlinkManpages
[ { file = "share/man/man1/patch.1", section = 1 } ]
}
let m4 =
λ(v : List Natural) →
prelude.makeGnuExe { name = "m4", version = v }
⫽ { configureCommand =
λ(cfg : types.BuildVars) →
[ prelude.patch
''
diff --color -u lib/fflush.c lib/fflush.c
--- lib/fflush.c 2016-12-31 07:54:41.000000000 -0600
+++ lib/fflush.c 2019-05-24 15:43:00.800903010 -0500
@@ -33,7 +33,7 @@
#undef fflush
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
/* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */
static void
@@ -72,7 +72,7 @@
#endif
-#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
+#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
@@ -148,7 +148,7 @@
if (stream == NULL || ! freading (stream))
return fflush (stream);
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
clear_ungetc_buffer_preserving_position (stream);
diff --color -u lib/fpending.c lib/fpending.c
--- lib/fpending.c 2016-12-31 07:54:41.000000000 -0600
+++ lib/fpending.c 2019-05-24 15:43:00.800903010 -0500
@@ -32,7 +32,7 @@
/* Most systems provide FILE as a struct and the necessary bitmask in
<stdio.h>, because they need it for implementing getc() and putc() as
fast macros. */
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
return fp->_IO_write_ptr - fp->_IO_write_base;
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
diff --color -u lib/fpurge.c lib/fpurge.c
--- lib/fpurge.c 2016-12-31 07:54:41.000000000 -0600
+++ lib/fpurge.c 2019-05-24 15:43:00.800903010 -0500
@@ -62,7 +62,7 @@
/* Most systems provide FILE as a struct and the necessary bitmask in
<stdio.h>, because they need it for implementing getc() and putc() as
fast macros. */
-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
fp->_IO_read_end = fp->_IO_read_ptr;
fp->_IO_write_ptr = fp->_IO_write_base;
/* Avoid memory leak when there is an active ungetc buffer. */
diff --color -u lib/freadahead.c lib/freadahead.c
--- lib/freadahead.c 2016-12-31 07:54:41.000000000 -0600
+++ lib/freadahead.c 2019-05-24 15:43:00.800903010 -0500
@@ -25,7 +25,7 @@
size_t
freadahead (FILE *fp)
{
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
if (fp->_IO_write_ptr > fp->_IO_write_base)
return 0;
return (fp->_IO_read_end - fp->_IO_read_ptr)
diff --color -u lib/freading.c lib/freading.c
--- lib/freading.c 2016-12-31 07:54:41.000000000 -0600
+++ lib/freading.c 2019-05-24 15:43:00.800903010 -0500
@@ -31,7 +31,7 @@
/* Most systems provide FILE as a struct and the necessary bitmask in
<stdio.h>, because they need it for implementing getc() and putc() as
fast macros. */
-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
return ((fp->_flags & _IO_NO_WRITES) != 0
|| ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0
&& fp->_IO_read_base != NULL));
diff --color -u lib/fseeko.c lib/fseeko.c
--- lib/fseeko.c 2016-12-31 07:54:41.000000000 -0600
+++ lib/fseeko.c 2019-05-24 15:43:00.800903010 -0500
@@ -47,7 +47,7 @@
#endif
/* These tests are based on fpurge.c. */
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
if (fp->_IO_read_end == fp->_IO_read_ptr
&& fp->_IO_write_ptr == fp->_IO_write_base
&& fp->_IO_save_base == NULL)
@@ -123,7 +123,7 @@
return -1;
}
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
fp->_flags &= ~_IO_EOF_SEEN;
fp->_offset = pos;
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
Common subdirectories: lib/glthread and lib/glthread
diff --color -u lib/stdio-impl.h lib/stdio-impl.h
--- lib/stdio-impl.h 2016-12-31 07:54:42.000000000 -0600
+++ lib/stdio-impl.h 2019-05-24 15:43:10.885006876 -0500
@@ -138,3 +138,4 @@
# define _IOERR 0x10
#endif
+#define _IO_IN_BACKUP 0x100
''
]
# prelude.defaultConfigure cfg
, installCommand =
prelude.installWithManpages
[ { file = "share/man/man1/m4.1", section = 1 } ]
, pkgBuildDeps = [ prelude.unbounded "patch" ]
}
let nginx =
λ(v : List Natural) →
prelude.simplePackage { name = "nginx", version = v }
⫽ { pkgUrl =
"http://nginx.org/download/nginx-${prelude.showVersion v}.tar.gz"
, pkgDeps = [ prelude.unbounded "zlib", prelude.unbounded "pcre2" ]
}
let openssl =
let opensslCfgVars =
λ(cfg : types.BuildVars) →
Some
(prelude.mkCCVar cfg # prelude.configEnv ([] : List Text) cfg)
let cfgOS =
λ(os : types.OS) →
merge
{ FreeBSD = "BSD-x86_64"
, OpenBSD = "BSD-x86_64"
, NetBSD = "BSD-x86_64"
, Solaris = "solaris64-x86_64-cc"
, Dragonfly = "BSD-x86_64"
, Linux = "linux-x86_64"
, Darwin = "darwin64-x86_64-cc"
, Windows = "mingw64"
, Redox = "gcc"
, Haiku = "haiku-x86_64"
, IOS = "ios64-cross"
, AIX = "aix64-cc"
, Hurd = "hurd-x86"
, Android = "android64-aarch64"
, NoOs = "gcc"
}
os
in λ(v : List Natural) →
prelude.simplePackage { name = "openssl", version = v }
⫽ { pkgUrl =
"https://www.openssl.org/source/openssl-${prelude.showVersion
v}d.tar.gz"
, configureCommand =
λ(cfg : types.BuildVars) →
let sharedFlag =
if cfg.static then "no-shared" else "shared"
let targetMakefile =
if cfg.isCross then "gcc" else cfgOS cfg.buildOS
in [ prelude.call
( prelude.defaultCall
⫽ { program = "perl"
, arguments =
[ "./Configure"
, "--prefix=${cfg.installDir}"
, targetMakefile
, sharedFlag
]
, environment = opensslCfgVars cfg
}
)
]
, pkgSubdir = "openssl-${prelude.showVersion v}d"
, pkgBuildDeps = [ prelude.unbounded "perl" ]
}
let libssh2 =
λ(v : List Natural) →
prelude.simplePackage { name = "libssh2", version = v }
⫽ { pkgUrl =
"https://www.libssh2.org/download/libssh2-${prelude.showVersion
v}.tar.gz"
}
let giflib =
λ(v : List Natural) →
prelude.simplePackage { name = "giflib", version = v }
⫽ { pkgUrl =
"https://downloads.sourceforge.net/giflib/giflib-${prelude.showVersion
v}.tar.bz2"
}
let emacs =
λ(v : List Natural) →
prelude.makeGnuExe { name = "emacs", version = v }
⫽ { pkgDeps =
[ prelude.unbounded "giflib"
, prelude.unbounded "libXaw"
, prelude.unbounded "libpng"
, prelude.unbounded "libjpeg-turbo"
, prelude.unbounded "ncurses"
, prelude.unbounded "gtk3"
, prelude.unbounded "libotf"
, prelude.unbounded "m17n-lib"
, prelude.unbounded "gnutls"
, prelude.unbounded "libXft"
, prelude.unbounded "dbus"
, prelude.unbounded "cairo"
]
, configureCommand =
prelude.configureMkExesExtraFlags
{ bins =
[ "build-aux/move-if-change", "build-aux/update-subdirs" ]
, extraFlags =
[ "--with-tiff=no"
, "--with-libotf"
, "--with-m17n-flt"
, "--with-gnutls"
, "--with-xft"
, "--with-dbus"
, "--with-cairo=yes"
]
}
, installCommand =
λ(cfg : types.BuildVars) →
if cfg.static
then prelude.installWithBinaries [ "bin/emacs" ] cfg
else prelude.installWithWrappers [ "emacs" ] cfg
}
let which =
λ(v : List Natural) →
prelude.makeGnuExe { name = "which", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/which/which-${prelude.showVersion
v}.tar.gz"
}
let automake =
λ(v : List Natural) →
prelude.makeGnuExe { name = "automake", version = v }
⫽ { pkgBuildDeps =
[ prelude.lowerBound { name = "autoconf", lower = [ 2, 65 ] } ]
, installCommand =
prelude.installWithBinaries [ "bin/automake", "bin/aclocal" ]
}
let autoconf =
λ(v : List Natural) →
prelude.makeGnuExe { name = "autoconf", version = v }
⫽ { pkgBuildDeps =
[ prelude.lowerBound { name = "m4", lower = [ 1, 4, 16 ] } ]
, installCommand =
prelude.installWithBinaries
[ "bin/autoconf"
, "bin/autoheader"
, "bin/autom4te"
, "bin/autoreconf"
]
}
let python =
λ(v : List Natural) →
let major =
merge { Some = Natural/show, None = "" } (List/head Natural v)
let versionString = prelude.showVersion v
let pyEnv =
λ(_ : List Text) →
λ(cfg : types.BuildVars) →
Some
( prelude.configEnv ([] : List Text) cfg
# [ { var = "CONFIG_SITE", value = "config.site" } ]
)
in prelude.simplePackage { name = "python${major}", version = v }
⫽ { pkgUrl =
"https://www.python.org/ftp/python/${versionString}/Python-${versionString}.tar.xz"
, pkgSubdir = "Python-${versionString}"
, configureCommand =
λ(cfg : types.BuildVars) →
let config =
''
ac_cv_file__dev_ptmx=yes
ac_cv_file__dev_ptc=no
''
let staticFlag =
if cfg.static
then [] : List Text
else [ "--enable-shared" ]
let crossArgs =
if cfg.isCross
then [ "--disable-ipv6" ]
else [] : List Text
in [ prelude.writeFile
{ file = "config.site", contents = config }
]
# prelude.generalConfigure
pyEnv
"configure"
([] : List Text)
( [ "--build=${prelude.printArch cfg.buildArch}" ]
# crossArgs
# staticFlag
)
cfg
, pkgDeps =
[ prelude.unbounded "libffi", prelude.unbounded "ncurses" ]
, installCommand =
λ(cfg : types.BuildVars) →
prelude.installWithBinaries [ "bin/python${major}" ] cfg
# prelude.symlinkManpages
[ { file = "share/man/man1/python${major}.1"
, section = 1
}
]
}
let lua =
λ(v : List Natural) →
let printLuaOS =
λ(os : types.OS) →
merge
{ FreeBSD = "freebsd"
, OpenBSD = "bsd"
, NetBSD = "bsd"
, Solaris = "solaris"
, Dragonfly = "bsd"
, Linux = "linux"
, Darwin = "macosx"
, Windows = "mingw"
, Redox = "generic"
, Haiku = "generic"
, IOS = "generic"
, AIX = "generic"
, Hurd = "generic"
, Android = "generic"
, NoOs = "c89"
}
os
let luaBuild =
λ(cfg : types.BuildVars) →
let cc = prelude.mkCCArg cfg
let ldflags = (prelude.mkLDFlags cfg.linkDirs cfg).value
let cflags = (prelude.mkCFlags cfg).value
let os = prelude.osCfg cfg
in [ prelude.call
( prelude.defaultCall
⫽ { program = "make"
, arguments =
cc
# [ printLuaOS os
, "MYLDFLAGS=${ldflags}"
, "MYCFLAGS=${cflags}"
, "MYLIBS=-lncurses"
, "-j${Natural/show cfg.cpus}"
]
}
)
]
let luaInstall =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "make"
, arguments =
[ "install", "INSTALL_TOP=${cfg.installDir}" ]
}
)
]
# prelude.symlinkBinaries [ "bin/lua", "bin/luac" ]
in prelude.simplePackage { name = "lua", version = v }
⫽ { pkgUrl =
"http://www.lua.org/ftp/lua-${prelude.showVersion v}.tar.gz"
, configureCommand = prelude.doNothing
, buildCommand = luaBuild
, installCommand = luaInstall
, pkgDeps =
[ prelude.unbounded "readline", prelude.unbounded "ncurses" ]
}
let libtasn1 =
λ(v : List Natural) →
prelude.simplePackage { name = "libtasn1", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/libtasn1/libtasn1-${prelude.showVersion
v}.tar.gz"
}
let p11kit =
λ(v : List Natural) →
prelude.simplePackage { name = "p11-kit", version = v }
⫽ { pkgUrl =
"https://github.com/p11-glue/p11-kit/releases/download/${prelude.showVersion
v}/p11-kit-${prelude.showVersion
v}.tar.gz"
, pkgDeps =
[ prelude.lowerBound { name = "libffi", lower = [ 3, 0, 0 ] }
, prelude.unbounded "libtasn1"
]
, pkgBuildDeps = [ prelude.unbounded "pkg-config" ]
}
let libffi =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libffi", version = v }
⫽ { pkgUrl =
"https://github.com/libffi/libffi/releases/download/v${versionString}/libffi-${versionString}.tar.gz"
}
let gdb =
λ(v : List Natural) →
prelude.makeGnuExe { name = "gdb", version = v }
⫽ { pkgBuildDeps = [ prelude.unbounded "texinfo" ] }
let libtool =
λ(v : List Natural) →
prelude.makeGnuExe { name = "libtool", version = v }
⫽ { pkgUrl =
"https://ftp.wayne.edu/gnu/libtool/libtool-${prelude.showVersion
v}.tar.xz"
, pkgBuildDeps =
[ prelude.lowerBound { name = "m4", lower = [ 1, 4, 16 ] } ]
}
let pkg-config =
λ(v : List Natural) →
prelude.simplePackage { name = "pkg-config", version = v }
⫽ { pkgUrl =
"https://pkg-config.freedesktop.org/releases/pkg-config-${prelude.showVersion
v}.tar.gz"
, configureCommand =
prelude.configureWithFlags [ "--with-internal-glib" ]
}
let qrencode =
λ(v : List Natural) →
prelude.simplePackage { name = "qrencode", version = v }
⫽ { pkgUrl =
"https://fukuchi.org/works/qrencode/qrencode-${prelude.showVersion
v}.tar.gz"
, configureCommand = prelude.configureWithFlags [ "--without-tools" ]
}
let readline =
λ(v : List Natural) →
prelude.simplePackage { name = "readline", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/readline/readline-${prelude.showVersion
v}.tar.gz"
}
let pixman =
λ(v : List Natural) →
prelude.simplePackage { name = "pixman", version = v }
⫽ { pkgUrl =
"https://www.cairographics.org/releases/pixman-${prelude.showVersion
v}.tar.gz"
, pkgDeps = [ prelude.unbounded "libpng" ]
}
let freetype-shared =
λ(x : { name : Text, version : List Natural }) →
let versionString = prelude.showVersion x.version
in prelude.simplePackage x
⫽ { pkgUrl =
"https://download.savannah.gnu.org/releases/freetype/freetype-${versionString}.tar.gz"
, pkgSubdir = "freetype-${versionString}"
, pkgBuildDeps = [ prelude.unbounded "sed" ]
, installCommand =
λ(cfg : types.BuildVars) →
prelude.defaultInstall cfg
# [ prelude.symlink
"include/freetype2/ft2build.h"
"include/ft2build.h"
, prelude.symlink
"include/freetype2/freetype"
"include/freetype"
]
}
let freetype-prebuild =
λ(v : List Natural) →
freetype-shared { name = "freetype-prebuild", version = v }
⫽ { pkgDeps = [ prelude.unbounded "zlib", prelude.unbounded "libpng" ]
, pkgBuildDeps = [ prelude.unbounded "pkg-config" ]
}
let freetype =
λ(v : List Natural) →
freetype-shared { name = "freetype", version = v }
⫽ { pkgDeps =
[ prelude.unbounded "zlib"
, prelude.unbounded "harfbuzz"
, prelude.unbounded "libpng"
]
, configureCommand =
prelude.configureMkExesExtraFlags
{ bins = [ "builds/unix/configure" ]
, extraFlags = [ "--enable-freetype-config" ]
}
}
let sdl2 =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "sdl2", version = v }
⫽ { pkgUrl =
"https://www.libsdl.org/release/SDL2-${versionString}.tar.gz"
, pkgSubdir = "SDL2-${versionString}"
}
let imageMagick =
λ(v : List Natural) →
let versionString = prelude.showVersion v
let major =
merge { Some = Natural/show, None = "" } (List/head Natural v)
in prelude.simplePackage { name = "imagemagick", version = v }
⫽ { pkgUrl =
"https://imagemagick.org/download/ImageMagick-${versionString}-67.tar.xz"
, pkgSubdir = "ImageMagick-${versionString}-67"
, pkgDeps =
[ prelude.unbounded "zlib"
, prelude.unbounded "libtool"
, prelude.unbounded "bzip2"
, prelude.unbounded "glib"
]
, installCommand =
λ(cfg : types.BuildVars) →
prelude.defaultInstall cfg
# [ prelude.symlink
"include/ImageMagick-${major}/MagickWand"
"include/wand"
, prelude.symlinkBinary "bin/convert"
]
}
let gtk2 =
let gtkEnv =
λ(cfg : types.BuildVars) →
prelude.defaultPath cfg
# [ { var = "LDFLAGS"
, value =
(prelude.mkLDFlags cfg.linkDirs cfg).value
++ " -lpcre -lfribidi"
}
, prelude.mkCFlags cfg
, prelude.mkPkgConfigVar cfg.linkDirs
, prelude.libPath cfg
, prelude.mkLDRunPath cfg.linkDirs
, prelude.mkXdgDataDirs cfg.shareDirs
, prelude.mkLDPreload cfg.preloadLibs
]
let gtkConfig =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "./configure"
, arguments = [ "--prefix=${cfg.installDir}" ]
, environment = Some (gtkEnv cfg)
}
)
]
in λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.simplePackage
{ name = "gtk2", version = prelude.fullVersion x }
⫽ { pkgUrl =
"http://ftp.gnome.org/pub/gnome/sources/gtk+/${versionString}/gtk+-${fullVersion}.tar.xz"
, pkgSubdir = "gtk+-${fullVersion}"
, pkgDeps =
[ prelude.lowerBound { name = "cairo", lower = [ 1, 6 ] }
, prelude.lowerBound { name = "pango", lower = [ 1, 20 ] }
, prelude.lowerBound { name = "atk", lower = [ 1, 29, 2 ] }
, prelude.lowerBound { name = "glib", lower = [ 2, 28, 0 ] }
, prelude.lowerBound
{ name = "gdk-pixbuf", lower = [ 2, 38, 0 ] }
]
, buildCommand =
λ(cfg : types.BuildVars) →
prelude.buildWith (gtkEnv cfg) cfg
, configureCommand = gtkConfig
, installCommand =
λ(cfg : types.BuildVars) →
prelude.defaultInstall cfg
# [ prelude.symlink
"include/gdk-pixbuf-2.0/gdk-pixbuf"
"include/gdk-pixbuf"
]
}
let mkXProto =
λ(name : Text) →
λ(v : List Natural) →
prelude.simplePackage { name, version = v }
⫽ { pkgUrl =
"https://www.x.org/releases/individual/proto/${name}-${prelude.showVersion
v}.tar.bz2"
}
let mkXProtoWithPatch =
λ(name : Text) →
λ(patch : Text) →
λ(v : List Natural) →
mkXProto name v
⫽ { configureCommand = prelude.configureWithPatch patch
, pkgBuildDeps = [ prelude.unbounded "patch" ]
}
let xproto =
mkXProtoWithPatch
"xproto"
''
--- config.sub 2019-04-27 16:40:36.266089495 -0500
+++ config.sub 2019-04-27 16:41:44.593275058 -0500
@@ -240,7 +240,7 @@
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | arc | aarch64 | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
| bfin \
| c4x | clipper \
| d10v | d30v | dlx | dsp16xx \
''
let renderproto =
mkXProtoWithPatch
"renderproto"
''
--- config.sub 2010-08-10 09:11:53.000000000 -0500
+++ config.sub.new 2019-04-27 17:18:57.730988579 -0500
@@ -248,7 +248,7 @@
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | arc | aarch64 | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
| bfin \
| c4x | clipper \
| d10v | d30v | dlx | dsp16xx \
''
let randrproto = mkXProto "randrproto"
let scrnsaverproto =
mkXProtoWithPatch
"scrnsaverproto"
''
--- config.sub 2012-03-22 22:49:47.000000000 -0500
+++ config.sub 2019-04-28 04:52:47.247723846 -0500
@@ -250,7 +250,7 @@
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | arc | aarch64 | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
| bfin \
| c4x | clipper \
| d10v | d30v | dlx | dsp16xx \
''
let recordproto = mkXProto "recordproto"
let xf86vidmodeproto = mkXProto "xf86vidmodeproto"
let glproto = mkXProto "glproto"
let dri2proto = mkXProto "dri2proto"
let pango =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
let pangoCfgFile =
''
option('enable_docs',
description: 'Build API reference for Pango using GTK-Doc',
type: 'boolean',
value: false)
option('gir',
description: 'Build the GObject introspection data for Pango',
type: 'boolean',
value: false)
''
let no_gir =
λ(cfg : types.BuildVars) →
if cfg.isCross
then [ prelude.writeFile
{ file = "meson_options.txt"
, contents = pangoCfgFile
}
]
else [] : List types.Command
in prelude.simplePackage
{ name = "pango", version = prelude.fullVersion x }
⫽ { pkgUrl =
"http://ftp.gnome.org/pub/GNOME/sources/pango/${versionString}/pango-${fullVersion}.tar.xz"
, configureCommand =
λ(cfg : types.BuildVars) →
no_gir cfg # prelude.mesonConfigure cfg
, buildCommand = prelude.ninjaBuild
, installCommand =
λ(cfg : types.BuildVars) →
prelude.ninjaInstallWithPkgConfig
( prelude.mesonMoves
[ "pango.pc", "pangocairo.pc", "pangoft2.pc" ]
)
cfg
# [ prelude.symlink
"include/pango-1.0/pango"
"include/pango"
]
, pkgBuildDeps =
[ prelude.lowerBound { name = "meson", lower = [ 0, 48, 0 ] }
, prelude.unbounded "gobject-introspection"
]
, pkgDeps =
[ prelude.lowerBound
{ name = "fontconfig", lower = [ 2, 11, 91 ] }
, prelude.lowerBound { name = "cairo", lower = [ 1, 12, 10 ] }
, prelude.lowerBound { name = "fribidi", lower = [ 0, 19, 7 ] }
, prelude.lowerBound { name = "harfbuzz", lower = [ 1, 4, 2 ] }
, prelude.unbounded "libXrender"
, prelude.unbounded "libxcb"
]
}
let libxml2 =
λ(v : List Natural) →
prelude.simplePackage { name = "libxml2", version = v }
⫽ { pkgUrl =
"http://xmlsoft.org/sources/libxml2-${prelude.showVersion
v}.tar.gz"
, pkgDeps =
[ prelude.unbounded "zlib"
, prelude.unbounded "xz"
, prelude.unbounded "python2"
]
}
let shared-mime-info =
λ(v : List Natural) →
prelude.simplePackage { name = "shared-mime-info", version = v }
⫽ { pkgUrl =
"http://freedesktop.org/~hadess/shared-mime-info-${prelude.showVersion
v}.tar.xz"
, buildCommand =
λ(cfg : types.BuildVars) →
prelude.generalBuild
prelude.singleThreaded
(prelude.buildEnv cfg)
cfg
, installCommand =
λ(cfg : types.BuildVars) →
prelude.defaultInstall cfg
# [ prelude.symlink "share/pkgconfig" "lib/pkgconfig" ]
, pkgDeps = [ prelude.unbounded "glib", prelude.unbounded "libxml2" ]
, pkgBuildDeps =
[ prelude.lowerBound { name = "intltool", lower = [ 0, 35, 0 ] }
, prelude.unbounded "sed"
, prelude.unbounded "gettext"
]
}
let intltool =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "intltool", version = v }
⫽ { pkgUrl =
"https://launchpad.net/intltool/trunk/${versionString}/+download/intltool-${versionString}.tar.gz"
, configureCommand =
λ(cfg : types.BuildVars) →
[ prelude.patch
''
--- intltool-update.in 2015-03-08 20:39:54.000000000 -0500
+++ intltool-update.in 2019-06-19 20:58:02.349782444 -0500
@@ -1062,13 +1062,13 @@
}
}
- if ($str =~ /^(.*)\''${?([A-Z_]+)}?(.*)$/)
+ if ($str =~ /^(.*)\$\{?([A-Z_]+)}?(.*)$/)
{
my $rest = $3;
my $untouched = $1;
my $sub = "";
# Ignore recursive definitions of variables
- $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\''${?$2}?/;
+ $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\$\{?$2}?/;
return SubstituteVariable ("$untouched$sub$rest");
}
@@ -1190,10 +1190,10 @@
$name =~ s/\(+$//g;
$version =~ s/\(+$//g;
- $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\''${?AC_PACKAGE_NAME}?/);
- $varhash{"PACKAGE"} = $name if (not $name =~ /\''${?PACKAGE}?/);
- $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\''${?AC_PACKAGE_VERSION}?/);
- $varhash{"VERSION"} = $version if (not $name =~ /\''${?VERSION}?/);
+ $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\$\{?AC_PACKAGE_NAME}?/);
+ $varhash{"PACKAGE"} = $name if (not $name =~ /\$\{?PACKAGE}?/);
+ $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\$\{?AC_PACKAGE_VERSION}?/);
+ $varhash{"VERSION"} = $version if (not $name =~ /\$\{?VERSION}?/);
}
if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)[,]?([^,\)]+)?/m)
@@ -1219,11 +1219,11 @@
$version =~ s/\(+$//g;
$bugurl =~ s/\(+$//g if (defined $bugurl);
- $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\''${?AC_PACKAGE_NAME}?/);
- $varhash{"PACKAGE"} = $name if (not $name =~ /\''${?PACKAGE}?/);
- $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\''${?AC_PACKAGE_VERSION}?/);
- $varhash{"VERSION"} = $version if (not $name =~ /\''${?VERSION}?/);
- $varhash{"PACKAGE_BUGREPORT"} = $bugurl if (defined $bugurl and not $bugurl =~ /\''${?\w+}?/);
+ $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\$\{?AC_PACKAGE_NAME}?/);
+ $varhash{"PACKAGE"} = $name if (not $name =~ /\$\{?PACKAGE}?/);
+ $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\$\{?AC_PACKAGE_VERSION}?/);
+ $varhash{"VERSION"} = $version if (not $name =~ /\$\{?VERSION}?/);
+ $varhash{"PACKAGE_BUGREPORT"} = $bugurl if (defined $bugurl and not $bugurl =~ /\$\{?\w+}?/);
}
# \s makes this not work, why?
''
, prelude.call
( prelude.defaultCall
⫽ { program = "./configure"
, arguments = [ "--prefix=${cfg.installDir}" ]
, environment = Some
( prelude.defaultPath cfg
# [ prelude.mkPerlLib
{ libDirs = cfg.linkDirs
, perlVersion = [ 5, 30, 1 ]
, cfg
}
]
)
}
)
]
, pkgDeps = [ prelude.unbounded "XML-Parser" ]
, pkgBuildDeps =
[ prelude.lowerBound { name = "perl", lower = [ 5, 8, 1 ] } ]
}
let gdk-pixbuf =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
let gdkInstall =
λ(fs : List { src : Text, dest : Text }) →
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "ninja"
, environment = Some
[ prelude.mkPkgConfigVar cfg.linkDirs
, { var = "PATH"
, value =
prelude.mkPathVar cfg.binDirs
++ ":${cfg.currentDir}/gdk-pixbuf-${fullVersion}/build/gdk-pixbuf:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
}
, prelude.mkPy3Path cfg.linkDirs
, prelude.libPath cfg
, prelude.mkLDRunPath cfg.linkDirs
, prelude.mkLDFlags cfg.linkDirs cfg
, prelude.mkCFlags cfg
]
, arguments = [ "install" ]
, procDir = Some "build"
}
)
, prelude.symlink
"include/gdk-pixbuf-2.0/gdk-pixbuf"
"include/gdk-pixbuf"
]
# prelude.copyFiles fs
in prelude.simplePackage
{ name = "gdk-pixbuf", version = prelude.fullVersion x }
⫽ { pkgUrl =
"http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/${versionString}/gdk-pixbuf-${fullVersion}.tar.xz"
, configureCommand = prelude.mesonConfigure
, buildCommand = prelude.ninjaBuild
, installCommand =
gdkInstall (prelude.mesonMoves [ "gdk-pixbuf-2.0.pc" ])
, pkgDeps =
[ prelude.unbounded "glib"
, prelude.unbounded "libjpeg-turbo"
, prelude.unbounded "libpng"
, prelude.unbounded "gobject-introspection"
, prelude.unbounded "shared-mime-info"
, prelude.unbounded "libX11"
]
}
let xmlParser =
λ(v : List Natural) →
prelude.simplePackage { name = "XML-Parser", version = v }
⫽ { pkgUrl =
"https://cpan.metacpan.org/authors/id/T/TO/TODDR/XML-Parser-${prelude.showVersion
v}.tar.gz"
, configureCommand = prelude.perlConfigure
, pkgBuildDeps = [ prelude.unbounded "perl" ]
, pkgDeps = [ prelude.unbounded "expat" ]
}
let meson =
λ(v : List Natural) →
prelude.simplePackage { name = "meson", version = v }
⫽ { pkgUrl =
"https://github.com/mesonbuild/meson/archive/${prelude.showVersion
v}.tar.gz"
, configureCommand =
λ(cfg : types.BuildVars) →
prelude.python3Install cfg # prelude.mkPy3Wrapper "meson" cfg
, buildCommand = prelude.doNothing
, installCommand = prelude.doNothing
, pkgDeps = [ prelude.unbounded "python3" ]
}
let ninja =
let ninjaConfigure =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "./configure.py"
, arguments = [ "--bootstrap" ]
}
)
]
let ninjaInstall =
λ(cfg : types.BuildVars) →
[ prelude.copyFile "ninja" "bin/ninja"
, prelude.symlinkBinary "bin/ninja"
]
in λ(v : List Natural) →
prelude.simplePackage { name = "ninja", version = v }
⫽ { pkgUrl =
"https://github.com/ninja-build/ninja/archive/v${prelude.showVersion
v}.tar.gz"
, configureCommand = ninjaConfigure
, buildCommand = prelude.doNothing
, installCommand = ninjaInstall
, pkgBuildDeps = [ prelude.unbounded "python2" ]
}
let fontconfig =
λ(v : List Natural) →
prelude.simplePackage { name = "fontconfig", version = v }
⫽ { pkgUrl =
"https://www.freedesktop.org/software/fontconfig/release/fontconfig-${prelude.showVersion
v}.tar.bz2"
, pkgDeps =
[ prelude.unbounded "freetype"
, prelude.unbounded "expat"
, prelude.unbounded "util-linux"
]
, pkgBuildDeps = [ prelude.unbounded "gperf" ]
}
let util-linux =
λ(x : { version : List Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString
in prelude.simplePackage { name = "util-linux", version = x.version }
⫽ { pkgUrl =
"https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v${versionString}/util-linux-${fullVersion}.tar.xz"
, configureCommand =
λ(cfg : types.BuildVars) →
let crossFlags =
if cfg.isCross
then [ "--disable-pylibmount", "--without-tinfo" ]
else [] : List Text
in prelude.configureWithFlags
( [ "--disable-makeinstall-chown"
, "--disable-bash-completion"
]
# crossFlags
)
cfg
, pkgDeps =
[ prelude.unbounded "ncurses", prelude.unbounded "pcre2" ]
}
let fribidi =
λ(v : List Natural) →
prelude.simplePackage { name = "fribidi", version = v }
⫽ { pkgUrl =
"https://github.com/fribidi/fribidi/releases/download/v${prelude.showVersion
v}/fribidi-${prelude.showVersion
v}.tar.bz2"
}
let gobject-introspection =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.ninjaPackage
{ name = "gobject-introspection"
, version = prelude.fullVersion x
}
⫽ { pkgUrl =
"https://download.gnome.org/sources/gobject-introspection/${versionString}/gobject-introspection-${fullVersion}.tar.xz"
, pkgBuildDeps =
[ prelude.unbounded "meson"
, prelude.unbounded "m4"
, prelude.unbounded "bison"
, prelude.unbounded "flex"
, prelude.unbounded "pkg-config"
, prelude.unbounded "glibc"
]
, pkgDeps =
[ prelude.lowerBound { name = "glib", lower = [ 2, 58, 0 ] } ]
, installCommand =
λ(cfg : types.BuildVars) →
[ prelude.mkExe "build/tools/g-ir-scanner"
, prelude.copyFile
"build/gobject-introspection-1.0.pc"
"lib/pkgconfig/gobject-introspection-1.0.pc"
]
# prelude.ninjaInstall cfg
}
let flex =
λ(v : List Natural) →
let versionString = prelude.showVersion v
let flexEnv =
λ(_ : List Text) →
λ(cfg : types.BuildVars) →
Some
( prelude.configEnv ([] : List Text) cfg
# [ { var = "YFLAGS", value = "-Wno-error=yacc" } ]
)
in prelude.simplePackage { name = "flex", version = v }
⫽ { pkgUrl =
"https://github.com/westes/flex/releases/download/v${versionString}/flex-${versionString}.tar.gz"
, pkgBuildDeps =
[ prelude.unbounded "m4", prelude.unbounded "bison" ]
, configureCommand = prelude.configWithEnv flexEnv
, installCommand = prelude.installWithBinaries [ "bin/flex" ]
}
let glib =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
let glibConfigure =
λ(cfg : types.BuildVars) →
let crossArgs =
if cfg.isCross
then [ "--cross-file", "cross.txt" ]
else [] : List Text
in [ prelude.createDir "build"
, prelude.writeFile
{ file = "build/cross.txt"
, contents = prelude.mesonCfgFile cfg
}
, prelude.call
{ program = "meson"
, arguments =
[ "--prefix=${cfg.installDir}"
, ".."
, "-Dselinux=disabled"
]
# crossArgs
, environment = Some
( [ prelude.mkPkgConfigVar cfg.linkDirs
, { var = "LDFLAGS"
, value =
(prelude.mkLDFlags cfg.linkDirs cfg).value
}
, prelude.mkPy3Path cfg.linkDirs
, prelude.libPath cfg
, prelude.mkCFlags cfg
, prelude.mkPkgConfigVar cfg.linkDirs
]
# prelude.defaultPath cfg
)
, procDir = Some "build"
}
]
let symlinkGio =
λ(h : Text) →
prelude.symlink "include/glib-2.0/gio/${h}" "include/gio/${h}"
let symlinkGunix =
λ(h : Text) →
prelude.symlink
"include/gio-unix-2.0/gio/${h}"
"include/gio/${h}"
in prelude.simplePackage
{ name = "glib", version = prelude.fullVersion x }
⫽ { pkgUrl =
"http://ftp.gnome.org/pub/gnome/sources/glib/${versionString}/glib-${fullVersion}.tar.xz"
, configureCommand = glibConfigure
, buildCommand =
λ(cfg : types.BuildVars) →
prelude.ninjaBuild cfg
# prelude.mkExes
[ "build/gobject/glib-mkenums"
, "build/gobject/glib-genmarshal"
, "build/gio/gdbus-2.0/codegen/gdbus-codegen"
]
, installCommand =
λ(cfg : types.BuildVars) →
prelude.ninjaInstallWithPkgConfig
( prelude.mesonMoves
[ "glib-2.0.pc"
, "gobject-2.0.pc"
, "gio-2.0.pc"
, "gio-unix-2.0.pc"
, "gmodule-no-export-2.0.pc"
, "gmodule-export-2.0.pc"
, "gmodule-2.0.pc"
, "gthread-2.0.pc"
]
)
cfg
# [ prelude.symlink "include/glib-2.0/glib" "include/glib"
, prelude.symlink
"include/glib-2.0/gobject"
"include/gobject"
, prelude.symlink
"include/glib-2.0/glib.h"
"include/glib.h"
, prelude.symlink
"include/glib-2.0/glib-object.h"
"include/glib-object.h"
, prelude.symlink
"include/glib-2.0/glib-unix.h"
"include/glib-unix.h"
, prelude.symlink
"include/glib-2.0/gmodule.h"
"include/gmodule.h"
, symlinkGio "gaction.h"
, symlinkGio "gactiongroup.h"
, symlinkGio "gactiongroupexporter.h"
, symlinkGio "gactionmap.h"
, symlinkGio "gappinfo.h"
, symlinkGio "gapplication.h"
, symlinkGio "gapplicationcommandline.h"
, symlinkGio "gasyncinitable.h"
, symlinkGio "gasyncresult.h"
, symlinkGio "gbufferedinputstream.h"
, symlinkGio "gbufferedoutputstream.h"
, symlinkGio "gbytesicon.h"
, symlinkGio "gcancellable.h"
, symlinkGio "gcharsetconverter.h"
, symlinkGio "gcontenttype.h"
, symlinkGio "gconverter.h"
, symlinkGio "gconverterinputstream.h"
, symlinkGio "gconverteroutputstream.h"
, symlinkGio "gcredentials.h"
, symlinkGio "gdatagrambased.h"
, symlinkGio "gdatainputstream.h"
, symlinkGio "gdataoutputstream.h"
, symlinkGio "gdbusactiongroup.h"
, symlinkGio "gdbusaddress.h"
, symlinkGio "gdbusauthobserver.h"
, symlinkGio "gdbusconnection.h"
, symlinkGio "gdbuserror.h"
, symlinkGio "gdbusinterface.h"
, symlinkGio "gdbusinterfaceskeleton.h"
, symlinkGio "gdbusintrospection.h"
, symlinkGio "gdbusmenumodel.h"
, symlinkGio "gdbusmessage.h"
, symlinkGio "gdbusmethodinvocation.h"
, symlinkGio "gdbusnameowning.h"
, symlinkGio "gdbusnamewatching.h"
, symlinkGio "gdbusobject.h"
, symlinkGio "gdbusobjectmanager.h"
, symlinkGio "gdbusobjectmanagerclient.h"
, symlinkGio "gdbusobjectmanagerserver.h"
, symlinkGio "gdbusobjectproxy.h"
, symlinkGio "gdbusobjectskeleton.h"
, symlinkGio "gdbusproxy.h"
, symlinkGio "gdbusserver.h"
, symlinkGio "gdbusutils.h"
, symlinkGio "gdrive.h"
, symlinkGio "gdtlsclientconnection.h"
, symlinkGio "gdtlsconnection.h"
, symlinkGio "gdtlsserverconnection.h"
, symlinkGio "gemblem.h"
, symlinkGio "gemblemedicon.h"
, symlinkGio "gfile.h"
, symlinkGio "gfileattribute.h"
, symlinkGio "gfileenumerator.h"
, symlinkGio "gfileicon.h"
, symlinkGio "gfileinfo.h"
, symlinkGio "gfileinputstream.h"
, symlinkGio "gfileiostream.h"
, symlinkGio "gfilemonitor.h"
, symlinkGio "gfilenamecompleter.h"
, symlinkGio "gfileoutputstream.h"
, symlinkGio "gfilterinputstream.h"
, symlinkGio "gfilteroutputstream.h"
, symlinkGio "gicon.h"
, symlinkGio "ginetaddress.h"
, symlinkGio "ginetaddressmask.h"
, symlinkGio "ginetsocketaddress.h"
, symlinkGio "ginitable.h"
, symlinkGio "ginputstream.h"
, symlinkGio "gio-autocleanups.h"
, symlinkGio "gio.h"
, symlinkGio "gioenums.h"
, symlinkGio "gioenumtypes.h"
, symlinkGio "gioerror.h"
, symlinkGio "giomodule.h"
, symlinkGio "gioscheduler.h"
, symlinkGio "giostream.h"
, symlinkGio "giotypes.h"
, symlinkGio "glistmodel.h"
, symlinkGio "gliststore.h"
, symlinkGio "gloadableicon.h"
, symlinkGio "gmemoryinputstream.h"
, symlinkGio "gmemoryoutputstream.h"
, symlinkGio "gmenu.h"
, symlinkGio "gmenuexporter.h"
, symlinkGio "gmenumodel.h"
, symlinkGio "gmount.h"
, symlinkGio "gmountoperation.h"
, symlinkGio "gnativevolumemonitor.h"
, symlinkGio "gnetworkaddress.h"
, symlinkGio "gnetworking.h"
, symlinkGio "gnetworkmonitor.h"
, symlinkGio "gnetworkservice.h"
, symlinkGio "gnotification.h"
, symlinkGio "goutputstream.h"
, symlinkGio "gpermission.h"
, symlinkGio "gpollableinputstream.h"
, symlinkGio "gpollableoutputstream.h"
, symlinkGio "gpollableutils.h"
, symlinkGio "gpropertyaction.h"
, symlinkGio "gproxy.h"
, symlinkGio "gproxyaddress.h"
, symlinkGio "gproxyaddressenumerator.h"
, symlinkGio "gproxyresolver.h"
, symlinkGio "gremoteactiongroup.h"
, symlinkGio "gresolver.h"
, symlinkGio "gresource.h"
, symlinkGio "gseekable.h"
, symlinkGio "gsettings.h"
, symlinkGio "gsettingsbackend.h"
, symlinkGio "gsettingsschema.h"
, symlinkGio "gsimpleaction.h"
, symlinkGio "gsimpleactiongroup.h"
, symlinkGio "gsimpleasyncresult.h"
, symlinkGio "gsimpleiostream.h"
, symlinkGio "gsimplepermission.h"
, symlinkGio "gsimpleproxyresolver.h"
, symlinkGio "gsocket.h"
, symlinkGio "gsocketaddress.h"
, symlinkGio "gsocketaddressenumerator.h"
, symlinkGio "gsocketclient.h"
, symlinkGio "gsocketconnectable.h"
, symlinkGio "gsocketconnection.h"
, symlinkGio "gsocketcontrolmessage.h"
, symlinkGio "gsocketlistener.h"
, symlinkGio "gsocketservice.h"
, symlinkGio "gsrvtarget.h"
, symlinkGio "gsubprocess.h"
, symlinkGio "gsubprocesslauncher.h"
, symlinkGio "gtask.h"
, symlinkGio "gtcpconnection.h"
, symlinkGio "gtcpwrapperconnection.h"
, symlinkGio "gtestdbus.h"
, symlinkGio "gthemedicon.h"
, symlinkGio "gthreadedsocketservice.h"
, symlinkGio "gtlsbackend.h"
, symlinkGio "gtlscertificate.h"
, symlinkGio "gtlsclientconnection.h"
, symlinkGio "gtlsconnection.h"
, symlinkGio "gtlsdatabase.h"
, symlinkGio "gtlsfiledatabase.h"
, symlinkGio "gtlsinteraction.h"
, symlinkGio "gtlspassword.h"
, symlinkGio "gtlsserverconnection.h"
, symlinkGio "gvfs.h"
, symlinkGio "gvolume.h"
, symlinkGio "gvolumemonitor.h"
, symlinkGio "gzlibcompressor.h"
, symlinkGio "gzlibdecompressor.h"
, symlinkGunix "gdesktopappinfo.h"
, symlinkGunix "gfiledescriptorbased.h"
, symlinkGunix "gunixconnection.h"
, symlinkGunix "gunixcredentialsmessage.h"
, symlinkGunix "gunixfdlist.h"
, symlinkGunix "gunixfdmessage.h"
, symlinkGunix "gunixinputstream.h"
, symlinkGunix "gunixmounts.h"
, symlinkGunix "gunixoutputstream.h"
, symlinkGunix "gunixsocketaddress.h"
]
, pkgBuildDeps =
[ prelude.unbounded "meson", prelude.unbounded "ninja" ]
, pkgDeps =
[ prelude.unbounded "util-linux"
, prelude.unbounded "pcre"
, prelude.unbounded "libffi"
, prelude.unbounded "zlib"
, prelude.unbounded "dbus"
]
}
let atk =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.ninjaPackage
{ name = "atk", version = prelude.fullVersion x }
⫽ { pkgUrl =
"https://ftp.gnome.org/pub/gnome/sources/atk/${versionString}/atk-${fullVersion}.tar.xz"
, pkgBuildDeps =
[ prelude.unbounded "gobject-introspection"
, prelude.unbounded "gettext"
]
, pkgDeps = [ prelude.unbounded "glib" ]
, installCommand =
prelude.ninjaInstallWithPkgConfig
[ { src = "build/meson-private/atk.pc"
, dest = "lib/pkgconfig/atk.pc"
}
]
}
let re2c =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "re2c", version = v }
⫽ { pkgUrl =
"https://github.com/skvadrik/re2c/releases/download/${versionString}/re2c-${versionString}.tar.gz"
}
let chickenScheme =
λ(v : List Natural) →
let versionString = prelude.showVersion v
let printChickenOS =
λ(os : types.OS) →
merge
{ FreeBSD = "bsd"
, OpenBSD = "bsd"
, NetBSD = "bsd"
, Solaris = "solaris"
, Dragonfly = "bsd"
, Linux = "linux"
, Darwin = "macosx"
, Windows = "mingw"
, Haiku = "haiku"
, IOS = "ios"
, AIX = "aix"
, Hurd = "hurd"
, Android = "android"
, Redox = "error: no port for Redox OS"
, NoOs = "error: no port for no OS"
}
os
let chickenBuild =
λ(cfg : types.BuildVars) →
let cc =
merge
{ Some =
λ(tgt : types.TargetTriple) →
[ "C_COMPILER=${prelude.printTargetTriple
tgt}-gcc"
]
, None = [] : List Text
}
cfg.targetTriple
let os = prelude.osCfg cfg
in [ prelude.call
( prelude.defaultCall
⫽ { program = prelude.makeExe cfg.buildOS
, arguments =
cc
# [ "PLATFORM=${printChickenOS os}"
, "PREFIX=${cfg.installDir}"
]
}
)
, prelude.call
( prelude.defaultCall
⫽ { program = prelude.makeExe cfg.buildOS
, arguments =
cc
# [ "PLATFORM=${printChickenOS os}"
, "PREFIX=${cfg.installDir}"
, "install"
]
}
)
]
# prelude.symlinkBinaries
[ "bin/csc", "bin/chicken-install", "bin/csi" ]
in prelude.simplePackage { name = "chicken-scheme", version = v }
⫽ { pkgUrl =
"https://code.call-cc.org/releases/${versionString}/chicken-${versionString}.tar.gz"
, configureCommand = prelude.doNothing
, buildCommand = chickenBuild
, installCommand = prelude.doNothing
, pkgSubdir = "chicken-${versionString}"
}
let xcb-proto =
λ(v : List Natural) →
prelude.simplePackage { name = "xcb-proto", version = v }
⫽ { pkgUrl =
"https://xorg.freedesktop.org/archive/individual/xcb/xcb-proto-${prelude.showVersion
v}.tar.bz2"
}
let libxcb =
λ(v : List Natural) →
prelude.simplePackage { name = "libxcb", version = v }
⫽ { pkgUrl =
"https://xorg.freedesktop.org/archive/individual/xcb/libxcb-${prelude.showVersion
v}.tar.bz2"
, pkgDeps =
[ prelude.lowerBound { name = "xcb-proto", lower = [ 1, 13 ] }
, prelude.unbounded "libXau"
, prelude.unbounded "libpthread-stubs"
, prelude.unbounded "libXdmcp"
]
}
let libpthread-stubs =
λ(v : List Natural) →
prelude.simplePackage { name = "libpthread-stubs", version = v }
⫽ { pkgUrl =
"https://www.x.org/archive/individual/xcb/libpthread-stubs-${prelude.showVersion
v}.tar.bz2"
}
let xorgConfigure =
prelude.configureWithFlags [ "--disable-malloc0returnsnull" ]
let mkXLib =
λ(name : Text) →
λ(v : List Natural) →
prelude.simplePackage { name, version = v }
⫽ { pkgUrl =
"https://www.x.org/releases/individual/lib/${name}-${prelude.showVersion
v}.tar.bz2"
, configureCommand = xorgConfigure
, pkgBuildDeps = [ prelude.unbounded "pkg-config" ]
}
let mkXLibDeps =
λ(x : { name : Text, deps : List types.Dep }) →
λ(v : List Natural) →
mkXLib x.name v ⫽ { pkgDeps = x.deps }
let libXdmcp =
mkXLibDeps { name = "libXdmcp", deps = [ prelude.unbounded "xproto" ] }
let libXau =
mkXLibDeps { name = "libXau", deps = [ prelude.unbounded "xproto" ] }
let mkXUtil =
λ(name : Text) →
λ(v : List Natural) →
prelude.simplePackage { name, version = v }
⫽ { pkgUrl =
"https://www.x.org/releases/individual/util/${name}-${prelude.showVersion
v}.tar.bz2"
}
let libXrender =
mkXLibDeps
{ name = "libXrender"
, deps =
[ prelude.unbounded "xproto"
, prelude.unbounded "renderproto"
, prelude.unbounded "libX11"
]
}
let util-macros = mkXUtil "util-macros"
let libXft =
mkXLibDeps
{ name = "libXft"
, deps =
[ prelude.unbounded "freetype"
, prelude.unbounded "fontconfig"
, prelude.unbounded "libXrender"
, prelude.unbounded "libX11"
]
}
let kbproto = mkXProto "kbproto"
let libX11 =
mkXLibDeps
{ name = "libX11"
, deps =
[ prelude.unbounded "libxcb"
, prelude.unbounded "kbproto"
, prelude.unbounded "xextproto"
, prelude.unbounded "inputproto"
, prelude.unbounded "xtrans"
]
}
let inputproto = mkXProto "inputproto"
let xineramaproto =
mkXProtoWithPatch
"xineramaproto"
''
--- config.sub 2009-10-01 05:35:23.000000000 -0500
+++ config.sub 2019-04-28 04:57:15.837809557 -0500
@@ -242,7 +242,7 @@
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | arc | aarch64 | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
| bfin \
| c4x | clipper \
| d10v | d30v | dlx | dsp16xx \
''
let xtrans = mkXLib "xtrans"
let libXrandr =
mkXLibDeps
{ name = "libXrandr"
, deps =
[ prelude.unbounded "util-macros"
, prelude.unbounded "libXext"
, prelude.unbounded "libXrender"
, prelude.unbounded "libX11"
, prelude.unbounded "randrproto"
]
}
let libXinerama =
mkXLibDeps
{ name = "libXinerama"
, deps =
[ prelude.unbounded "util-macros"
, prelude.unbounded "libX11"
, prelude.unbounded "libXext"
, prelude.unbounded "xineramaproto"
]
}
let libXext =
mkXLibDeps
{ name = "libXext"
, deps =
[ prelude.lowerBound { name = "xextproto", lower = [ 7, 1, 99 ] }
, prelude.lowerBound { name = "xproto", lower = [ 7, 0, 13 ] }
, prelude.lowerBound { name = "libX11", lower = [ 1, 6 ] }
]
}
let xextproto =
mkXProtoWithPatch
"xextproto"
''
--- config.sub 2019-04-27 17:01:47.137694014 -0500
+++ config.sub 2019-04-27 17:02:05.329622757 -0500
@@ -249,7 +249,7 @@
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | arc | aarch64 | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
| bfin \
| c4x | clipper \
| d10v | d30v | dlx | dsp16xx \
''
let fixesproto = mkXProto "fixesproto"
let damageproto = mkXProto "damageproto"
let libXScrnSaver =
λ(v : List Natural) →
mkXLib "libXScrnSaver" v
⫽ { pkgDeps =
[ prelude.unbounded "util-macros"
, prelude.unbounded "libXext"
, prelude.unbounded "scrnsaverproto"
]
}
let bzip2 =
let cc = prelude.mkCCArg
in λ(v : List Natural) →
let versionString = prelude.showVersion v
let bzipInstall =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = prelude.makeExe cfg.buildOS
, arguments =
cc cfg
# [ "PREFIX=${cfg.installDir}"
, "install"
, "-j${Natural/show cfg.cpus}"
]
}
)
, prelude.copyFile
"libbz2.so.${versionString}"
"lib/libbz2.so.${versionString}"
, prelude.symlink
"lib/libbz2.so.${versionString}"
"lib/libbz2.so.1.0"
, prelude.symlink
"lib/libbz2.so.${versionString}"
"lib/libbz2.so"
, prelude.symlinkBinary "bin/bzip2"
, prelude.symlinkBinary "bin/bzip2recover"
]
let bzipShared =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = prelude.makeExe cfg.buildOS
, arguments =
cc cfg # [ "-f", "Makefile-libbz2_so" ]
}
)
]
in prelude.simplePackage { name = "bzip2", version = v }
⫽ { pkgUrl =
"https://www.sourceware.org/pub/bzip2/bzip2-${versionString}.tar.gz"
, configureCommand = prelude.doNothing
, buildCommand = bzipShared
, installCommand = bzipInstall
}
let expat =
λ(v : List Natural) →
prelude.simplePackage { name = "expat", version = v }
⫽ { pkgUrl =
"https://github.com/libexpat/libexpat/releases/download/R_${prelude.underscoreVersion
v}/expat-${prelude.showVersion
v}.tar.bz2"
}
let gperf =
λ(v : List Natural) →
prelude.makeGnuExe { name = "gperf", version = v }
⫽ { pkgUrl =
"http://ftp.gnu.org/pub/gnu/gperf/gperf-${prelude.showVersion
v}.tar.gz"
}
let coreutils =
λ(v : List Natural) →
prelude.makeGnuExe { name = "coreutils", version = v }
⫽ { installCommand =
prelude.installWithBinaries
[ "bin/install"
, "bin/chmod"
, "bin/rm"
, "bin/cp"
, "bin/ln"
, "bin/mkdir"
, "bin/test"
, "bin/od"
, "bin/readlink"
]
}
let libsepol =
let cc = prelude.mkCCArg
let sepolInstall =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = prelude.makeExe cfg.buildOS
, arguments =
cc cfg
# [ "PREFIX=${cfg.installDir}"
, "SHLIBDIR=${cfg.installDir}/lib"
, "CFLAGS=-Wno-error -O2"
, "install"
, "-j${Natural/show cfg.cpus}"
]
, environment = Some
( prelude.defaultPath cfg
# [ prelude.mkLDFlags cfg.linkDirs cfg
, prelude.mkCFlags cfg
, prelude.mkPkgConfigVar cfg.linkDirs
]
)
}
)
]
in λ(v : List Natural) →
prelude.simplePackage { name = "libsepol", version = v }
⫽ { pkgUrl =
"https://github.com/SELinuxProject/selinux/releases/download/20191204/libsepol-${prelude.showVersion
v}.tar.gz"
, configureCommand = prelude.doNothing
, buildCommand = prelude.doNothing
, installCommand = sepolInstall
, pkgBuildDeps = [ prelude.unbounded "flex" ]
}
let libselinux =
let cc = prelude.mkCCArg
let selinuxInstall =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = prelude.makeExe cfg.buildOS
, arguments =
cc cfg
# [ "PREFIX=${cfg.installDir}"
, "SHLIBDIR=${cfg.installDir}/lib"
, "EXTRA_CFLAGS=-Wno-error -lpcre "
++ (prelude.mkCFlags cfg).value
, "install"
, "-j${Natural/show cfg.cpus}"
]
, environment = Some
( prelude.defaultPath cfg
# [ prelude.mkLDFlags cfg.linkDirs cfg
, prelude.mkCFlags cfg
, prelude.mkPkgConfigVar cfg.linkDirs
, prelude.libPath cfg
]
)
}
)
]
in λ(v : List Natural) →
prelude.simplePackage { name = "libselinux", version = v }
⫽ { pkgUrl =
"https://github.com/SELinuxProject/selinux/releases/download/20191204/libselinux-${prelude.showVersion
v}.tar.gz"
, configureCommand = prelude.doNothing
, buildCommand = prelude.doNothing
, installCommand = selinuxInstall
, pkgDeps =
[ prelude.unbounded "pcre", prelude.unbounded "libsepol" ]
, pkgBuildDeps = [ prelude.unbounded "pkg-config" ]
}
let libXtst =
mkXLibDeps
{ name = "libXtst"
, deps = [ prelude.unbounded "libXi", prelude.unbounded "recordproto" ]
}
let libXi =
mkXLibDeps
{ name = "libXi"
, deps = [ prelude.unbounded "libXext", prelude.unbounded "libXfixes" ]
}
let mkGnomeNinja =
λ(name : Text) →
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.ninjaPackage { name, version = prelude.fullVersion x }
⫽ { pkgUrl =
"http://ftp.gnome.org/pub/gnome/sources/${name}/${versionString}/${name}-${fullVersion}.tar.xz"
}
let at-spi-core =
λ(x : { version : List Natural, patch : Natural }) →
mkGnomeNinja "at-spi2-core" x
⫽ { pkgDeps = [ prelude.unbounded "libXtst", prelude.unbounded "glib" ]
, installCommand =
prelude.ninjaInstallWithPkgConfig
[ { src = "build/meson-private/atspi-2.pc"
, dest = "lib/pkgconfig/atspi-2.pc"
}
]
}
let at-spi-atk =
λ(x : { version : List Natural, patch : Natural }) →
mkGnomeNinja "at-spi2-atk" x
⫽ { pkgDeps =
[ prelude.lowerBound { name = "at-spi2-core", lower = [ 2, 32, 2 ] }
, prelude.lowerBound { name = "atk", lower = [ 2, 29, 2 ] }
, prelude.unbounded "libxml2"
]
, installCommand =
prelude.ninjaInstallWithPkgConfig
(prelude.mesonMoves [ "atk-bridge-2.0.pc" ])
}
let libdrm =
λ(v : List Natural) →
prelude.ninjaPackage { name = "libdrm", version = v }
⫽ { pkgUrl =
"https://dri.freedesktop.org/libdrm/libdrm-${prelude.showVersion
v}.tar.bz2"
, pkgDeps =
[ prelude.unbounded "libpciaccess", prelude.unbounded "cairo" ]
, installCommand =
prelude.ninjaInstallWithPkgConfig
( prelude.mesonMoves
[ "libdrm.pc"
, "libdrm_amdgpu.pc"
, "libdrm_intel.pc"
, "libdrm_nouveau.pc"
, "libdrm_radeon.pc"
, "libkms.pc"
]
)
}
let libpciaccess = mkXLib "libpciaccess"
let markupSafe =
λ(v : List Natural) →
prelude.python3Package { name = "MarkupSafe", version = v }
⫽ { pkgUrl =
"https://files.pythonhosted.org/packages/source/M/MarkupSafe/MarkupSafe-${prelude.showVersion
v}.tar.gz"
}
let mako =
λ(v : List Natural) →
prelude.python3Package { name = "Mako", version = v }
⫽ { pkgUrl =
"https://files.pythonhosted.org/packages/source/M/Mako/Mako-${prelude.showVersion
v}.tar.gz"
}
let elfutils =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "elfutils", version = v }
⫽ { pkgUrl =
"https://sourceware.org/ftp/elfutils/${versionString}/elfutils-${versionString}.tar.bz2"
}
let mkGnomeSimple =
λ(name : Text) →
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.simplePackage { name, version = prelude.fullVersion x }
⫽ { pkgUrl =
"http://ftp.gnome.org/pub/gnome/sources/${name}/${versionString}/${name}-${fullVersion}.tar.xz"
}
let gtk3 =
let mkLDFlagsGtk =
λ(linkDirs : List Text) →
concatMapSep " " Text (λ(dir : Text) → "-L${dir}") linkDirs
let gtkEnv =
λ(cfg : types.BuildVars) →
prelude.defaultPath cfg
# [ { var = "LDFLAGS"
, value = mkLDFlagsGtk cfg.linkDirs ++ " -lpcre -lfribidi"
}
, prelude.mkPkgConfigVar cfg.linkDirs
, prelude.mkLDPreload cfg.preloadLibs
, prelude.mkXdgDataDirs cfg.shareDirs
, prelude.mkCFlags cfg
]
let gtkConfig =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "./configure"
, arguments = [ "--prefix=${cfg.installDir}" ]
, environment = Some (gtkEnv cfg)
}
)
]
in λ(x : { version : List Natural, patch : Natural }) →
mkGnomeSimple "gtk+" x
⫽ { pkgName = "gtk3"
, configureCommand = gtkConfig
, buildCommand =
λ(cfg : types.BuildVars) → prelude.buildWith (gtkEnv cfg) cfg
, pkgDeps =
[ prelude.lowerBound { name = "pango", lower = [ 1, 41, 0 ] }
, prelude.unbounded "at-spi2-atk"
, prelude.lowerBound { name = "atk", lower = [ 2, 15, 1 ] }
, prelude.lowerBound
{ name = "gdk-pixbuf", lower = [ 2, 30, 0 ] }
, prelude.unbounded "libXft"
, prelude.lowerBound { name = "libepoxy", lower = [ 1, 4 ] }
, prelude.unbounded "libXi"
]
, pkgBuildDeps = [ prelude.unbounded "binutils" ]
}
let graphviz =
λ(v : List Natural) →
prelude.simplePackage { name = "graphviz", version = v }
⫽ { pkgUrl =
"https://graphviz.gitlab.io/pub/graphviz/stable/SOURCES/graphviz.tar.gz"
, pkgDeps = [ prelude.unbounded "perl" ]
, installCommand = prelude.installWithBinaries [ "bin/dot" ]
}
let wayland =
λ(v : List Natural) →
prelude.simplePackage { name = "wayland", version = v }
⫽ { pkgUrl =
"https://wayland.freedesktop.org/releases/wayland-${prelude.showVersion
v}.tar.xz"
, pkgDeps = [ prelude.unbounded "libxml2" ]
, configureCommand =
prelude.configureWithFlags [ "--disable-documentation" ]
}
let swig =
λ(v : List Natural) →
prelude.simplePackage { name = "swig", version = v }
⫽ { pkgUrl =
"https://downloads.sourceforge.net/swig/swig-${prelude.showVersion
v}.tar.gz"
, installCommand = prelude.installWithBinaries [ "bin/swig" ]
}
let lmdb =
let cc = prelude.mkCCArg
let ar =
λ(cfg : types.BuildVars) →
merge
{ Some =
λ(tgt : types.TargetTriple) →
[ "AR=${prelude.printTargetTriple tgt}-ar" ]
, None = [] : List Text
}
cfg.targetTriple
let lmdbInstall =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "make"
, arguments =
cc cfg
# ar cfg
# [ "prefix=${cfg.installDir}"
, "install"
, "-j${Natural/show cfg.cpus}"
]
, procDir = Some "libraries/liblmdb"
}
)
]
in λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "lmdb", version = v }
⫽ { pkgUrl =
"https://github.com/LMDB/lmdb/archive/LMDB_${versionString}.tar.gz"
, pkgSubdir = "lmdb-LMDB_${versionString}"
, configureCommand = prelude.doNothing
, buildCommand = prelude.doNothing
, installCommand = lmdbInstall
}
let gsl =
λ(v : List Natural) →
prelude.simplePackage { name = "gsl", version = v }
⫽ { pkgUrl =
"http://mirror.keystealth.org/gnu/gsl/gsl-${prelude.showVersion
v}.tar.gz"
}
let postgresql =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "postgresql", version = v }
⫽ { pkgUrl =
"https://ftp.postgresql.org/pub/source/v${versionString}/postgresql-${versionString}.tar.bz2"
, configureCommand =
prelude.configureWithFlags [ "--without-readline" ]
, installCommand = prelude.installWithBinaries [ "bin/pg_config" ]
, pkgDeps = [ prelude.unbounded "zlib" ]
}
let sqlite =
λ(x : { version : List Natural }) →
prelude.simplePackage { name = "sqlite", version = x.version }
⫽ { pkgUrl =
"https://www.sqlite.org/2019/sqlite-autoconf-3300100.tar.gz"
, pkgSubdir = "sqlite-autoconf-3300100"
}
let ragel =
λ(v : List Natural) →
prelude.simplePackage { name = "ragel", version = v }
⫽ { pkgUrl =
"http://www.colm.net/files/ragel/ragel-${prelude.showVersion
v}.tar.gz"
, installCommand = prelude.installWithBinaries [ "bin/ragel" ]
}
let nano =
λ(v : List Natural) →
prelude.makeGnuExe { name = "nano", version = v }
⫽ { pkgDeps = [ prelude.unbounded "ncurses" ] }
let libarchive =
λ(v : List Natural) →
prelude.simplePackage { name = "libarchive", version = v }
⫽ { pkgUrl =
"https://www.libarchive.org/downloads/libarchive-${prelude.showVersion
v}.tar.gz"
, pkgDeps =
[ prelude.unbounded "xz"
, prelude.unbounded "bzip2"
, prelude.unbounded "zlib"
]
, installCommand =
prelude.installWithBinaries [ "bin/bsdtar", "bin/bsdcpio" ]
}
let pygobject =
λ(x : { version : List Natural, patch : Natural }) →
mkGnomeSimple "pygobject" x
⫽ { pkgDeps = [ prelude.unbounded "glib" ]
, configureCommand = prelude.preloadCfg
}
let pygtk =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in mkGnomeSimple "pygtk" x
⫽ { pkgUrl =
"http://ftp.gnome.org/pub/gnome/sources/pygtk/${versionString}/pygtk-${fullVersion}.tar.bz2"
, configureCommand = prelude.preloadCfg
, pkgDeps =
[ prelude.lowerBound { name = "glib", lower = [ 2, 8, 0 ] }
, prelude.lowerBound
{ name = "pygobject", lower = [ 2, 21, 3 ] }
, prelude.unbounded "python2"
]
}
let libglade =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.simplePackage
{ name = "libglade", version = prelude.fullVersion x }
⫽ { pkgUrl =
"http://ftp.gnome.org/pub/gnome/sources/libglade/${versionString}/libglade-${fullVersion}.tar.bz2"
, pkgDeps =
[ prelude.lowerBound { name = "libxml2", lower = [ 2, 4, 10 ] }
, prelude.lowerBound { name = "gtk2", lower = [ 2, 5, 0 ] }
]
, configureCommand = prelude.configureLinkExtraLibs [ "fribidi" ]
}
let scour =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.python3Package { name = "scour", version = v }
⫽ { pkgUrl =
"https://github.com/scour-project/scour/archive/v${versionString}/scour-${versionString}.tar.gz"
, installCommand = prelude.installWithPy3Wrappers [ "scour" ]
}
let libXpm =
λ(v : List Natural) →
mkXLib "libXpm" v
⫽ { pkgDeps = [ prelude.unbounded "libXext", prelude.unbounded "libXt" ]
, pkgBuildDeps = [ prelude.unbounded "gettext" ]
}
let libXt =
mkXLibDeps
{ name = "libXt"
, deps =
[ prelude.unbounded "libICE"
, prelude.unbounded "libSM"
, prelude.unbounded "libX11"
, prelude.unbounded "kbproto"
]
}
let libICE =
mkXLibDeps
{ name = "libICE"
, deps = [ prelude.unbounded "xproto", prelude.unbounded "xtrans" ]
}
let libSM =
mkXLibDeps
{ name = "libSM"
, deps = [ prelude.unbounded "libICE", prelude.unbounded "util-linux" ]
}
let libXaw =
mkXLibDeps
{ name = "libXaw"
, deps = [ prelude.unbounded "libXmu", prelude.unbounded "libXpm" ]
}
let libXaw3d =
mkXLibDeps
{ name = "libXaw3d"
, deps =
[ prelude.unbounded "libX11"
, prelude.unbounded "libXt"
, prelude.unbounded "libXmu"
, prelude.unbounded "libXext"
]
}
let libXmu =
mkXLibDeps
{ name = "libXmu"
, deps =
[ prelude.unbounded "util-macros"
, prelude.unbounded "libXt"
, prelude.unbounded "libXext"
]
}
let libotf =
λ(v : List Natural) →
prelude.simplePackage { name = "libotf", version = v }
⫽ { pkgUrl =
"http://download.savannah.gnu.org/releases/m17n/libotf-${prelude.showVersion
v}.tar.gz"
, pkgDeps = [ prelude.unbounded "freetype" ]
}
let m17n =
λ(v : List Natural) →
prelude.simplePackage { name = "m17n-lib", version = v }
⫽ { pkgUrl =
"http://download.savannah.gnu.org/releases/m17n/m17n-lib-${prelude.showVersion
v}.tar.gz"
, buildCommand =
λ(cfg : types.BuildVars) →
prelude.generalBuild
prelude.singleThreaded
(prelude.buildEnv cfg)
cfg
, pkgDeps = [ prelude.unbounded "libXt" ]
, pkgBuildDeps = [ prelude.unbounded "binutils" ]
}
let mkGimpPackage =
λ(name : Text) →
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.simplePackage { name, version = prelude.fullVersion x }
⫽ { pkgUrl =
"https://download.gimp.org/pub/${name}/${versionString}/${name}-${fullVersion}.tar.bz2"
}
let babl =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.simplePackage
{ name = "babl", version = prelude.fullVersion x }
⫽ { pkgUrl =
"https://download.gimp.org/pub/babl/${versionString}/babl-${fullVersion}.tar.xz"
, pkgBuildDeps =
[ prelude.unbounded "autoconf"
, prelude.unbounded "automake"
, prelude.unbounded "libtool"
, prelude.unbounded "pkg-config"
]
, pkgDeps = [ prelude.unbounded "lcms2" ]
, configureCommand = prelude.autogenConfigure
}
let gegl =
λ(x : { version : List Natural, patch : Natural }) →
mkGimpPackage "gegl" x
⫽ { pkgDeps =
[ prelude.lowerBound { name = "babl", lower = [ 0, 1, 58 ] }
, prelude.lowerBound { name = "glib", lower = [ 2, 44, 0 ] }
, prelude.unbounded "json-glib"
]
, configureCommand = prelude.preloadCfg
}
let libexif =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libexif", version = v }
⫽ { pkgUrl =
"https://nchc.dl.sourceforge.net/project/libexif/libexif/${versionString}/libexif-${versionString}.tar.bz2"
}
let json-glib =
λ(x : { version : List Natural, patch : Natural }) →
mkGnomeNinja "json-glib" x
⫽ { pkgDeps =
[ prelude.unbounded "glib"
, prelude.unbounded "libjpeg-turbo"
, prelude.unbounded "libpng"
]
, pkgBuildDeps = [ prelude.unbounded "gettext" ]
, installCommand =
prelude.ninjaInstallWithPkgConfig
(prelude.mesonMoves [ "json-glib-1.0.pc" ])
}
let lcms2 =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "lcms2", version = v }
⫽ { pkgUrl =
"https://github.com/mm2/Little-CMS/archive/lcms${versionString}.tar.gz"
, pkgSubdir = "Little-CMS-lcms${versionString}"
}
let libmypaint =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libmypaint", version = v }
⫽ { pkgUrl =
"https://github.com/mypaint/libmypaint/releases/download/v${versionString}/libmypaint-${versionString}.tar.xz"
, pkgDeps = [ prelude.unbounded "json-c" ]
, pkgBuildDeps =
[ prelude.unbounded "intltool", prelude.unbounded "gettext" ]
}
let json-c =
λ(x : { version : List Natural, dateStr : Text }) →
let versionString = "${prelude.showVersion x.version}-${x.dateStr}"
in prelude.simplePackage { name = "json-c", version = x.version }
⫽ { pkgUrl =
"https://github.com/json-c/json-c/archive/json-c-${versionString}.tar.gz"
, pkgSubdir = "json-c-json-c-${versionString}"
}
let libopenjpeg =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libopenjpeg", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"https://github.com/uclouvain/openjpeg/archive/v${versionString}.tar.gz"
, pkgSubdir = "openjpeg-${versionString}"
, pkgDeps = [ prelude.unbounded "zlib" ]
, pkgBuildDeps =
[ prelude.unbounded "make", prelude.unbounded "cmake" ]
, installCommand =
λ(cfg : types.BuildVars) →
prelude.cmakeInstall cfg
# [ prelude.symlink
"lib/openjpeg-2.3/OpenJPEGConfig.cmake"
"lib/OpenJPEGConfig.cmake"
]
}
let libevent =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libevent", version = v }
⫽ { pkgUrl =
"https://github.com/libevent/libevent/releases/download/release-${versionString}-stable/libevent-${versionString}-stable.tar.gz"
, pkgSubdir = "libevent-${versionString}-stable"
, pkgDeps = [ prelude.unbounded "openssl" ]
}
let memcached =
λ(v : List Natural) →
prelude.simplePackage { name = "memcached", version = v }
⫽ { pkgUrl =
"https://memcached.org/files/memcached-${prelude.showVersion
v}.tar.gz"
, pkgDeps = [ prelude.unbounded "libevent" ]
}
let motif =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "motif", version = v }
⫽ { pkgUrl =
"https://iweb.dl.sourceforge.net/project/motif/Motif%20${versionString}%20Source%20Code/motif-${versionString}.tar.gz"
, pkgDeps =
[ prelude.unbounded "libXft"
, prelude.unbounded "libpng"
, prelude.unbounded "freetype"
]
}
let libjpeg =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libjpeg", version = v }
⫽ { pkgUrl =
"http://www.ijg.org/files/jpegsrc.v${versionString}c.tar.gz"
, pkgSubdir = "jpeg-${versionString}c"
}
let feh =
let cc = prelude.mkCCArg
let fehMake =
λ(cfg : types.BuildVars) → { program = prelude.makeExe cfg.buildOS }
let fehBuild =
λ(v : List Natural) →
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ fehMake cfg
⫽ { arguments = [ "feh.1" ], procDir = Some "man" }
)
, prelude.call
( prelude.defaultCall
⫽ fehMake cfg
⫽ { arguments =
cc cfg
# [ "CFLAGS=${( prelude.mkCFlags cfg
).value} -DPACKAGE=\\\"feh\\\" -DPREFIX=\\\"${cfg.installDir}\\\" -DVERSION=\\\"${prelude.showVersion
v}\\\" ${( prelude.mkLDFlags
cfg.linkDirs
cfg
).value}"
, "feh"
]
, procDir = Some "src"
}
)
, prelude.call
( prelude.defaultCall
⫽ fehMake cfg
⫽ { arguments = [ "feh.desktop" ]
, procDir = Some "share/applications"
}
)
]
let fehInstall =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = prelude.makeExe cfg.buildOS
, arguments =
[ "CFLAGS=${(prelude.mkCFlags cfg).value}"
, "-j${Natural/show cfg.cpus}"
, "PREFIX=${cfg.installDir}"
, "install"
]
}
)
]
# prelude.mkLDPathWrapper cfg "feh"
in λ(v : List Natural) →
prelude.simplePackage { name = "feh", version = v }
⫽ { pkgUrl =
"https://github.com/derf/feh/archive/${prelude.showVersion
v}.tar.gz"
, configureCommand = prelude.doNothing
, buildCommand = fehBuild v
, installCommand = fehInstall
, pkgBuildDeps = [ prelude.unbounded "sed" ]
, pkgDeps =
[ prelude.unbounded "imlib2"
, prelude.unbounded "libXt"
, prelude.unbounded "libXinerama"
, prelude.unbounded "curl"
]
}
let imlib2 =
λ(v : List Natural) →
prelude.simplePackage { name = "imlib2", version = v }
⫽ { pkgUrl =
"https://downloads.sourceforge.net/enlightenment/imlib2-${prelude.showVersion
v}.tar.bz2"
, pkgDeps =
[ prelude.unbounded "libXext"
, prelude.unbounded "freetype"
, prelude.unbounded "libjpeg"
, prelude.unbounded "libpng"
, prelude.unbounded "giflib"
]
}
let jemalloc =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "jemalloc", version = v }
⫽ { pkgUrl =
"https://github.com/jemalloc/jemalloc/releases/download/${versionString}/jemalloc-${versionString}.tar.bz2"
}
let gperftools =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "gperftools", version = v }
⫽ { pkgUrl =
"https://github.com/gperftools/gperftools/releases/download/gperftools-${versionString}/gperftools-${versionString}.tar.gz"
}
let openssh =
let opensshInstall =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = prelude.makeExe cfg.buildOS
, arguments =
[ "PRIVSEP_PATH=${cfg.installDir}/var"
, "install"
, "-j${Natural/show cfg.cpus}"
]
, environment = Some
( prelude.defaultPath cfg
# [ prelude.mkPkgConfigVar cfg.linkDirs
, prelude.libPath cfg
]
)
}
)
]
in λ(v : List Natural) →
prelude.simplePackage { name = "openssh", version = v }
⫽ { pkgUrl =
"https://mirrors.gigenet.com/pub/OpenBSD/OpenSSH/portable/openssh-${prelude.showVersion
v}p1.tar.gz"
, pkgSubdir = "openssh-${prelude.showVersion v}p1"
, installCommand = opensshInstall
, pkgDeps = [ prelude.unbounded "openssl" ]
}
let libxslt =
λ(v : List Natural) →
prelude.simplePackage { name = "libxslt", version = v }
⫽ { pkgUrl =
"http://xmlsoft.org/sources/libxslt-${prelude.showVersion
v}.tar.gz"
, pkgDeps = [ prelude.unbounded "libxml2" ]
}
let libepoxy =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.ninjaPackage { name = "libepoxy", version = v }
⫽ { pkgUrl =
"https://github.com/anholt/libepoxy/releases/download/${versionString}/libepoxy-${versionString}.tar.xz"
, pkgDeps = [ prelude.unbounded "mesa" ]
, installCommand =
prelude.ninjaInstallWithPkgConfig
(prelude.mesonMoves [ "epoxy.pc" ])
}
let mesa =
λ(v : List Natural) →
prelude.simplePackage { name = "mesa", version = v }
⫽ { pkgUrl =
"https://mesa.freedesktop.org/archive/mesa-${prelude.showVersion
v}.tar.xz"
, pkgDeps =
[ prelude.lowerBound { name = "libdrm", lower = [ 2, 4, 75 ] }
, prelude.unbounded "libXdamage"
, prelude.unbounded "libXfixes"
, prelude.unbounded "libXxf86vm"
, prelude.lowerBound { name = "libxshmfence", lower = [ 1, 1 ] }
, prelude.lowerBound { name = "glproto", lower = [ 1, 4, 14 ] }
, prelude.lowerBound { name = "dri2proto", lower = [ 2, 8 ] }
, prelude.unbounded "libXrandr"
]
, configureCommand =
prelude.configureWithFlags
[ "--enable-autotools"
, "--with-gallium-drivers=nouveau,swrast"
]
}
let libXdamage =
mkXLibDeps
{ name = "libXdamage"
, deps =
[ prelude.unbounded "libXfixes", prelude.unbounded "damageproto" ]
}
let libXfixes =
mkXLibDeps
{ name = "libXfixes"
, deps =
[ prelude.unbounded "xproto"
, prelude.unbounded "fixesproto"
, prelude.unbounded "xextproto"
, prelude.unbounded "libX11"
]
}
let libXxf86vm =
mkXLibDeps
{ name = "libXxf86vm"
, deps =
[ prelude.unbounded "xproto"
, prelude.unbounded "libX11"
, prelude.unbounded "xextproto"
, prelude.unbounded "libXext"
, prelude.unbounded "xf86vidmodeproto"
]
}
let libxshmfence =
mkXLibDeps
{ name = "libxshmfence", deps = [ prelude.unbounded "xproto" ] }
let gnome-doc-utils =
λ(x : { version : List Natural, patch : Natural }) →
mkGnomeSimple "gnome-doc-utils" x
⫽ { pkgDeps =
[ prelude.lowerBound { name = "libxslt", lower = [ 1, 1, 8 ] }
, prelude.lowerBound { name = "libxml2", lower = [ 2, 6, 12 ] }
]
, pkgBuildDeps =
[ prelude.lowerBound { name = "intltool", lower = [ 0, 35, 0 ] }
, prelude.unbounded "gettext"
, prelude.unbounded "python2"
]
}
let itstool =
λ(v : List Natural) →
prelude.simplePackage { name = "itstool", version = v }
⫽ { pkgUrl =
"http://files.itstool.org/itstool/itstool-${prelude.showVersion
v}.tar.bz2"
, pkgDeps = [ prelude.unbounded "libxml2" ]
}
let gexiv2 =
λ(x : { version : List Natural, patch : Natural }) →
mkGnomeNinja "gexiv2" x
⫽ { pkgDeps = [ prelude.unbounded "exiv2", prelude.unbounded "glib" ]
, installCommand =
prelude.ninjaInstallWithPkgConfig
(prelude.mesonMoves [ "gexiv2.pc" ])
}
let exiv2 =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "exiv2", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"http://www.exiv2.org/builds/exiv2-${versionString}-Source.tar.gz"
, pkgSubdir = "exiv2-${versionString}-Source"
}
let libtiff =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.ninjaPackage { name = "libtiff", version = v }
⫽ { pkgUrl =
"https://download.osgeo.org/libtiff/tiff-${versionString}.tar.gz"
, pkgSubdir = "tiff-${versionString}"
, configureCommand = prelude.cmakeConfigureNinja
, pkgBuildDeps =
[ prelude.unbounded "cmake", prelude.unbounded "ninja" ]
}
let nspr =
λ(v : List Natural) →
let versionString = prelude.showVersion v
let bitFlag =
λ(cfg : types.BuildVars) →
if prelude.isX64 (prelude.archCfg cfg)
then [ "--enable-64bit" ]
else [] : List Text
in prelude.simplePackage { name = "nspr", version = v }
⫽ { pkgUrl =
"https://archive.mozilla.org/pub/nspr/releases/v${versionString}/src/nspr-${versionString}.tar.gz"
, pkgSubdir = "nspr-${versionString}/nspr"
, configureCommand =
λ(cfg : types.BuildVars) →
prelude.configureWithFlags (bitFlag cfg) cfg
}
let libthai =
λ(v : List Natural) →
prelude.simplePackage { name = "libthai", version = v }
⫽ { pkgUrl =
"https://linux.thai.net/pub/thailinux/software/libthai/libthai-${prelude.showVersion
v}.tar.xz"
, pkgDeps = [ prelude.unbounded "libdatrie" ]
}
let libdatrie =
λ(v : List Natural) →
prelude.simplePackage { name = "libdatrie", version = v }
⫽ { pkgUrl =
"https://linux.thai.net/pub/thailinux/software/libthai/libdatrie-${prelude.showVersion
v}.tar.xz"
}
let joe =
λ(v : List Natural) →
prelude.simplePackage { name = "joe", version = v }
⫽ { pkgUrl =
"https://downloads.sourceforge.net/joe-editor/joe-${prelude.showVersion
v}.tar.gz"
, installCommand = prelude.installWithBinaries [ "bin/joe" ]
}
let fossil =
λ(v : List Natural) →
prelude.simplePackage { name = "fossil", version = v }
⫽ { pkgUrl =
"https://fossil-scm.org/fossil/uv/fossil-src-${prelude.showVersion
v}.tar.gz"
, installCommand = prelude.installWithBinaries [ "bin/fossil" ]
, pkgDeps = [ prelude.unbounded "zlib", prelude.unbounded "openssl" ]
}
let libcroco =
λ(x : { version : List Natural, patch : Natural }) →
mkGnomeSimple "libcroco" x
⫽ { pkgDeps =
[ prelude.lowerBound { name = "glib", lower = [ 2, 0 ] }
, prelude.lowerBound { name = "libxml2", lower = [ 2, 4, 23 ] }
]
}
let libsoup =
λ(x : { version : List Natural, patch : Natural }) →
let libsoupCfgFile =
''
option('gssapi',
type : 'boolean',
value : true,
description : 'Build with GSSAPI support'
)
option('krb5_config',
type : 'string',
description : 'Where to look for krb5-config, path points to krb5-config installation (defaultly looking in PATH)'
)
option('ntlm',
type : 'boolean',
value : false,
description : 'Build with NTLM support'
)
option('tls_check',
type : 'boolean',
value : true,
description : 'Enable TLS support through glib-networking. If you are building a package, you can disable this to allow building libsoup anyway (since glib-networking is not actually required at compile time), but you should be sure to add a runtime dependency on it.'
)
option('gnome',
type : 'boolean',
value : true,
description : 'Build libsoup with GNOME support'
)
option('introspection',
type : 'boolean',
value : true,
description : 'Build GObject Introspection data'
)
option('vapi',
type : 'boolean',
value : false,
description : 'Build Vala bindings'
)
option('doc',
type: 'boolean',
value: false,
description: 'Enable generating the API reference'
)
option('tests',
type: 'boolean',
value: true,
description: 'Enable unit tests compilation'
)
''
in mkGnomeNinja "libsoup" x
⫽ { pkgDeps =
[ prelude.unbounded "glib"
, prelude.unbounded "sqlite"
, prelude.unbounded "libxml2"
, prelude.unbounded "libpsl"
, prelude.unbounded "krb5"
, prelude.unbounded "gobject-introspection"
]
, pkgBuildDeps = [ prelude.unbounded "vala" ]
, configureCommand =
λ(cfg : types.BuildVars) →
[ prelude.writeFile
{ file = "meson_options.txt"
, contents = libsoupCfgFile
}
]
# prelude.mesonConfigure cfg
, installCommand =
prelude.ninjaInstallWithPkgConfig
(prelude.mesonMoves [ "libsoup-2.4.pc" ])
}
let libpsl =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libpsl", version = v }
⫽ { pkgUrl =
"https://github.com/rockdaboot/libpsl/releases/download/libpsl-${versionString}/libpsl-${versionString}.tar.gz"
}
let krb5 =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "krb5", version = v }
⫽ { pkgUrl =
"https://kerberos.org/dist/krb5/${versionString}/krb5-${versionString}.tar.gz"
, pkgSubdir = "krb5-${versionString}/src"
, pkgBuildDeps = [ prelude.unbounded "bison" ]
}
let vala =
λ(x : { version : List Natural, patch : Natural }) →
mkGnomeSimple "vala" x
⫽ { pkgBuildDeps = [ prelude.unbounded "flex" ]
, pkgDeps =
[ prelude.lowerBound { name = "glib", lower = [ 2, 40, 0 ] }
, prelude.lowerBound { name = "graphviz", lower = [ 2, 15 ] }
]
}
let htop =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "htop", version = v }
⫽ { pkgUrl =
"https://hisham.hm/htop/releases/${versionString}/htop-${versionString}.tar.gz"
, pkgDeps = [ prelude.unbounded "ncurses" ]
, pkgBuildDeps = [ prelude.unbounded "python3" ]
, installCommand = prelude.installWithBinaries [ "bin/htop" ]
}
let mpfr =
λ(v : List Natural) →
prelude.simplePackage { name = "mpfr", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/mpfr/mpfr-${prelude.showVersion
v}.tar.xz"
}
let libsodium =
λ(v : List Natural) →
prelude.simplePackage { name = "libsodium", version = v }
⫽ { pkgUrl =
"https://download.libsodium.org/libsodium/releases/libsodium-${prelude.showVersion
v}.tar.gz"
}
let libev =
λ(v : List Natural) →
prelude.simplePackage { name = "libev", version = v }
⫽ { pkgUrl =
"http://dist.schmorp.de/libev/Attic/libev-${prelude.showVersion
v}.tar.gz"
}
let ctags =
λ(v : List Natural) →
prelude.simplePackage { name = "ctags", version = v }
⫽ { pkgUrl =
"http://prdownloads.sourceforge.net/ctags/ctags-${prelude.showVersion
v}.tar.gz"
, installCommand = prelude.installWithBinaries [ "bin/ctags" ]
}
let tcc =
λ(v : List Natural) →
prelude.simplePackage { name = "tcc", version = v }
⫽ { pkgUrl =
"http://download.savannah.gnu.org/releases/tinycc/tcc-${prelude.showVersion
v}.tar.bz2"
, pkgBuildDeps =
[ prelude.unbounded "perl", prelude.unbounded "texinfo" ]
, installCommand = prelude.installWithBinaries [ "bin/tcc" ]
}
let texinfo =
λ(v : List Natural) →
prelude.simplePackage { name = "texinfo", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/texinfo/texinfo-${prelude.showVersion
v}.tar.xz"
, configureCommand =
prelude.configureWithFlags [ "--disable-dependency-tracking" ]
}
let node =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "node", version = v }
⫽ { pkgUrl =
"https://nodejs.org/dist/v${versionString}/node-v${versionString}.tar.gz"
, pkgSubdir = "node-v${versionString}"
, installCommand =
λ(cfg : types.BuildVars) →
prelude.installWithBinaries [ "bin/node", "bin/npm" ] cfg
# [ prelude.mkExe
"${cfg.installDir}/lib/node_modules/npm/bin/npm-cli.js"
]
}
let glu =
λ(v : List Natural) →
prelude.simplePackage { name = "glu", version = v }
⫽ { pkgUrl =
"https://mesa.freedesktop.org/archive/glu/glu-${prelude.showVersion
v}.tar.gz"
, pkgDeps = [ prelude.unbounded "mesa" ]
}
let compositeproto = mkXProto "compositeproto"
let libXcomposite =
mkXLibDeps
{ name = "libXcomposite"
, deps =
[ prelude.unbounded "libX11"
, prelude.lowerBound { name = "compositeproto", lower = [ 0, 4 ] }
, prelude.unbounded "libXfixes"
]
}
let mosh =
λ(v : List Natural) →
prelude.simplePackage { name = "mosh", version = v }
⫽ { pkgUrl = "https://mosh.org/mosh-${prelude.showVersion v}.tar.gz"
, pkgBuildDeps = [ prelude.unbounded "protobuf" ]
, pkgDeps =
[ prelude.unbounded "zlib"
, prelude.unbounded "protobuf"
, prelude.unbounded "openssl"
]
, installCommand = prelude.installWithBinaries [ "bin/mosh" ]
}
let protobuf =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "protobuf", version = v }
⫽ { pkgUrl =
"https://github.com/protocolbuffers/protobuf/releases/download/v${versionString}/protobuf-cpp-${versionString}.tar.gz"
, pkgSubdir = "protobuf-${versionString}"
}
let libcds =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libcds", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"https://downloads.sourceforge.net/libcds/cds-${prelude.showVersion
v}.tar.gz"
, pkgSubdir = "cds-${versionString}"
, pkgDeps = [ prelude.unbounded "libboost" ]
}
let libboost =
-- TODO: use bootstrap.bat on windows
let boostConfigure =
λ(cfg : types.BuildVars) →
[ prelude.call
(prelude.defaultCall ⫽ { program = "./bootstrap.sh" })
]
let boostInstall =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "./b2"
, arguments =
[ "install"
, "--prefix=${cfg.installDir}"
, "--without-python"
]
}
)
]
in λ(v : List Natural) →
let versionString = prelude.underscoreVersion v
in prelude.simplePackage { name = "libboost", version = v }
⫽ { pkgUrl =
"https://dl.bintray.com/boostorg/release/${prelude.showVersion
v}/source/boost_${versionString}.tar.bz2"
, pkgSubdir = "boost_${versionString}"
, configureCommand = boostConfigure
, buildCommand = prelude.doNothing
, installCommand = boostInstall
}
let slowBuild =
λ(cfg : types.BuildVars) →
[ prelude.call
{ program = "cmake"
, arguments =
[ "--build", ".", "--config", "Release", "--", "-j", "2" ]
, environment = prelude.defaultEnv
, procDir = Some "build"
}
]
let clang =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "clang", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"http://releases.llvm.org/${versionString}/cfe-${versionString}.src.tar.xz"
, pkgSubdir = "cfe-${versionString}.src"
, buildCommand = slowBuild
, pkgDeps = [ prelude.unbounded "llvm" ]
, installCommand =
λ(cfg : types.BuildVars) →
prelude.cmakeInstall cfg
# [ prelude.symlinkBinary "bin/clang"
, prelude.symlinkBinary "bin/clang-format"
]
}
let llvm =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "llvm", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"http://releases.llvm.org/${versionString}/llvm-${versionString}.src.tar.xz"
, pkgSubdir = "llvm-${versionString}.src"
, buildCommand = slowBuild
}
let pari =
λ(v : List Natural) →
prelude.simplePackage { name = "pari", version = v }
⫽ { pkgUrl =
"http://pari.math.u-bordeaux.fr/pub/pari/unix/pari-${prelude.showVersion
v}.tar.gz"
, configureCommand =
prelude.generalConfigure
prelude.configSome
"Configure"
([] : List Text)
([] : List Text)
}
let pdfgrep =
λ(v : List Natural) →
prelude.simplePackage { name = "pdfgrep", version = v }
⫽ { pkgUrl =
"https://pdfgrep.org/download/pdfgrep-${prelude.showVersion
v}.tar.gz"
, pkgDeps =
[ prelude.unbounded "poppler", prelude.unbounded "libgcrypt" ]
, installCommand =
λ(cfg : types.BuildVars) →
prelude.installWithWrappers [ "pdfgrep" ] cfg
# prelude.symlinkManpages
[ { file = "share/man/man1/pdfgrep.1", section = 1 } ]
}
let mpc =
λ(v : List Natural) →
prelude.simplePackage { name = "mpc", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/mpc/mpc-${prelude.showVersion v}.tar.gz"
, pkgDeps = [ prelude.unbounded "mpfr" ]
}
let gcc =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "gcc", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/gcc/gcc-${versionString}/gcc-${versionString}.tar.xz"
, configureCommand =
λ(cfg : types.BuildVars) →
[ prelude.call
{ program = "contrib/download_prerequisites"
, arguments = [] : List Text
, environment = None (List types.EnvVar)
, procDir = None Text
}
]
# prelude.configureWithFlags [ "--disable-multilib" ] cfg
, installCommand =
prelude.installWithBinaries
[ "bin/gcc"
, "bin/g++"
, "bin/gcc-ar"
, "bin/gcc-nm"
, "bin/gfortran"
, "bin/gcc-ranlib"
]
, pkgBuildDeps =
[ prelude.unbounded "curl"
, prelude.unbounded "sed"
, prelude.unbounded "libtool"
]
}
let ruby =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.simplePackage
{ name = "ruby", version = prelude.fullVersion x }
⫽ { pkgUrl =
"https://cache.ruby-lang.org/pub/ruby/${versionString}/ruby-${fullVersion}.tar.gz"
, installCommand =
prelude.installWithBinaries [ "bin/ruby", "bin/gem" ]
, pkgDeps =
[ prelude.unbounded "readline", prelude.unbounded "openssl" ]
}
let poppler =
λ(v : List Natural) →
prelude.simplePackage { name = "poppler", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"https://poppler.freedesktop.org/poppler-${prelude.showVersion
v}.tar.xz"
, pkgDeps =
[ prelude.unbounded "fontconfig"
, prelude.unbounded "libopenjpeg"
, prelude.unbounded "libjpeg-turbo"
, prelude.unbounded "libjpeg"
, prelude.unbounded "freetype"
, prelude.unbounded "zlib"
, prelude.unbounded "libpng"
, prelude.unbounded "libiconv"
, prelude.unbounded "harfbuzz"
, prelude.unbounded "glib"
]
, installCommand =
λ(cfg : types.BuildVars) →
prelude.cmakeInstall cfg
# prelude.mkLDPathWrappers
cfg
[ "pdfdetach"
, "pdffonts"
, "pdfimages"
, "pdfinfo"
, "pdfseparate"
, "pdfsig"
, "pdftocairo"
, "pdftohtml"
, "pdftoppm"
, "pdftops"
, "pdftotext"
, "pdfunite"
]
}
let tesseract =
λ(v : List Natural) →
prelude.simplePackage { name = "tesseract", version = v }
⫽ { pkgUrl =
"https://github.com/tesseract-ocr/tesseract/archive/${prelude.showVersion
v}.tar.gz"
, pkgDeps =
[ prelude.lowerBound { name = "leptonica", lower = [ 1, 74 ] } ]
, pkgBuildDeps =
[ prelude.unbounded "libtool"
, prelude.unbounded "automake"
, prelude.unbounded "pkg-config"
]
, configureCommand = prelude.autogenConfigure
, installCommand = prelude.installWithBinaries [ "bin/tesseract" ]
}
let leptonica =
λ(v : List Natural) →
prelude.simplePackage { name = "leptonica", version = v }
⫽ { pkgUrl =
"http://leptonica.org/source/leptonica-${prelude.showVersion
v}.tar.gz"
, pkgDeps = [ prelude.unbounded "zlib" ]
}
let grep =
λ(v : List Natural) → prelude.makeGnuExe { name = "grep", version = v }
let phash =
λ(v : List Natural) →
prelude.simplePackage { name = "pHash", version = v }
⫽ { pkgUrl =
"http://phash.org/releases/pHash-${prelude.showVersion v}.tar.gz"
, pkgDeps =
[ prelude.lowerBound { name = "CImg", lower = [ 1, 3 ] }
, prelude.unbounded "ffmpeg"
, prelude.unbounded "libsndfile"
, prelude.unbounded "libsamplerate"
, prelude.unbounded "mpg123"
, prelude.unbounded "libjpeg-turbo"
, prelude.unbounded "libpng"
, prelude.unbounded "fftw"
]
, pkgBuildDeps =
[ prelude.unbounded "autoconf"
, prelude.unbounded "automake"
, prelude.unbounded "grep"
, prelude.unbounded "coreutils"
, prelude.unbounded "sed"
, prelude.unbounded "libtool"
]
, configureCommand =
λ(cfg : types.BuildVars) →
[ prelude.patch
''
--- src/cimgffmpeg.cpp 2019-06-22 20:18:05.632517868 -0500
+++ src/cimgffmpeg.cpp 2019-06-22 20:18:45.569003435 -0500
@@ -100,12 +100,12 @@
AVFrame *pFrame;
// Allocate video frame
- pFrame=avcodec_alloc_frame();
+ pFrame=av_frame_alloc();
if (pFrame==NULL)
return -1;
// Allocate an AVFrame structure
- AVFrame *pConvertedFrame = avcodec_alloc_frame();
+ AVFrame *pConvertedFrame = av_frame_alloc();
if(pConvertedFrame==NULL)
return -1;
@@ -254,10 +254,10 @@
AVFrame *pFrame;
// Allocate video frame
- pFrame=avcodec_alloc_frame();
+ pFrame=av_frame_alloc();
// Allocate an AVFrame structure
- AVFrame *pConvertedFrame = avcodec_alloc_frame();
+ AVFrame *pConvertedFrame = av_frame_alloc();
if(pConvertedFrame==NULL){
return -1;
}
--- configure.ac 2019-06-22 21:22:10.582842002 -0500
+++ configure.ac 2019-06-22 21:21:48.962982961 -0500
@@ -122,7 +122,7 @@
AC_DEFUN([AC_CHECK_FFMPEG],
[
AC_MSG_CHECKING([whether FFmpeg is present])
-AC_CHECK_LIB([avcodec], [avcodec_alloc_frame], [], [AC_MSG_ERROR([
+AC_CHECK_LIB([avutil], [av_frame_alloc], [], [AC_MSG_ERROR([
*** libavcodec not found.
You need FFmpeg. Get it at <http://ffmpeg.org/>])])
--- src/pHash.h 2019-06-23 11:31:15.678771295 -0500
+++ src/pHash.h 2019-06-23 11:31:31.754816275 -0500
@@ -47,6 +47,8 @@
#if defined(HAVE_IMAGE_HASH) || defined(HAVE_VIDEO_HASH)
#define cimg_debug 0
#define cimg_display 0
+#define cimg_use_png
+#define cimg_use_jpeg
#include "CImg.h"
using namespace cimg_library;
#endif
--- src/cimgffmpeg.cpp 2019-06-22 21:50:15.060403190 -0500
+++ src/cimgffmpeg.cpp 2019-06-22 21:56:50.839827371 -0500
@@ -39,11 +39,11 @@
int ReadFrames(VFInfo *st_info, CImgList<uint8_t> *pFrameList, unsigned int low_index, unsigned int hi_index)
{
//target pixel format
- PixelFormat ffmpeg_pixfmt;
+ AVPixelFormat ffmpeg_pixfmt;
if (st_info->pixelformat == 0)
- ffmpeg_pixfmt = PIX_FMT_GRAY8;
+ ffmpeg_pixfmt = AV_PIX_FMT_GRAY8;
else
- ffmpeg_pixfmt = PIX_FMT_RGB24;
+ ffmpeg_pixfmt = AV_PIX_FMT_RGB24;
st_info->next_index = low_index;
@@ -123,7 +123,7 @@
int size = 0;
- int channels = ffmpeg_pixfmt == PIX_FMT_GRAY8 ? 1 : 3;
+ int channels = ffmpeg_pixfmt == AV_PIX_FMT_GRAY8 ? 1 : 3;
AVPacket packet;
int result = 1;
@@ -189,11 +189,11 @@
int NextFrames(VFInfo *st_info, CImgList<uint8_t> *pFrameList)
{
- PixelFormat ffmpeg_pixfmt;
+ AVPixelFormat ffmpeg_pixfmt;
if (st_info->pixelformat == 0)
- ffmpeg_pixfmt = PIX_FMT_GRAY8;
+ ffmpeg_pixfmt = AV_PIX_FMT_GRAY8;
else
- ffmpeg_pixfmt = PIX_FMT_RGB24;
+ ffmpeg_pixfmt = AV_PIX_FMT_RGB24;
if (st_info->pFormatCtx == NULL)
{
@@ -287,7 +287,7 @@
break;
if(packet.stream_index == st_info->videoStream) {
- int channels = ffmpeg_pixfmt == PIX_FMT_GRAY8 ? 1 : 3;
+ int channels = ffmpeg_pixfmt == AV_PIX_FMT_GRAY8 ? 1 : 3;
AVPacket avpkt;
av_init_packet(&avpkt);
avpkt.data = packet.data;
--- src/cimgffmpeg.h 2019-06-23 11:47:59.046307628 -0500
+++ src/cimgffmpeg.h 2019-06-23 11:32:14.754956444 -0500
@@ -30,6 +30,8 @@
#define cimg_display 0${"\r"}
#define cimg_debug 0${"\r"}
${"\r"}
+#define cimg_use_png${"\r"}
+#define cimg_use_jpeg${"\r"}
#include "CImg.h"${"\r"}
${"\r"}
#define __STDC_CONSTANT_MACROS${"\r"}
''
, prelude.call
{ program = "autoreconf"
, arguments = [ "-i" ]
, environment = Some
[ { var = "PATH"
, value = prelude.mkPathVar cfg.binDirs
}
, prelude.mkAclocalPath cfg.shareDirs
]
, procDir = None Text
}
]
# prelude.defaultConfigure cfg
}
let cimg =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "CImg", version = v }
⫽ { pkgUrl = "http://cimg.eu/files/CImg_${versionString}.zip"
, pkgBuildDeps = [] : List types.Dep
, configureCommand = prelude.doNothing
, buildCommand = prelude.doNothing
, installCommand =
λ(_ : types.BuildVars) →
[ prelude.copyFile "CImg.h" "include/CImg.h" ]
}
let ffmpeg =
λ(v : List Natural) →
prelude.simplePackage { name = "ffmpeg", version = v }
⫽ { pkgUrl =
"https://ffmpeg.org/releases/ffmpeg-${prelude.showVersion
v}.tar.bz2"
, pkgBuildDeps = [ prelude.unbounded "nasm" ]
, configureCommand =
prelude.configureWithFlags
[ "--enable-shared"
, "--enable-libmp3lame"
, "--enable-gpl"
, "--enable-version3"
, "--enable-nonfree"
, "--disable-debug"
, "--enable-libass"
, "--enable-libfreetype"
, "--enable-libvorbis"
, "--enable-avresample"
, "--enable-gnutls"
, "--enable-libvpx"
, "--enable-libfdk-aac"
]
, installCommand = prelude.installWithWrappers [ "ffmpeg" ]
, pkgDeps =
[ prelude.unbounded "bzip2"
, prelude.unbounded "libmp3lame"
, prelude.unbounded "libass"
, prelude.unbounded "freetype"
, prelude.unbounded "libvorbis"
, prelude.unbounded "gnutls"
, prelude.unbounded "libvpx"
, prelude.unbounded "fdk-aac"
]
}
let libsndfile =
λ(v : List Natural) →
prelude.simplePackage { name = "libsndfile", version = v }
⫽ { pkgUrl =
"http://www.mega-nerd.com/libsndfile/files/libsndfile-${prelude.showVersion
v}.tar.gz"
}
let libsamplerate =
λ(v : List Natural) →
prelude.simplePackage { name = "libsamplerate", version = v }
⫽ { pkgUrl =
"http://www.mega-nerd.com/SRC/libsamplerate-${prelude.showVersion
v}.tar.gz"
}
let mpg123 =
λ(v : List Natural) →
prelude.simplePackage { name = "mpg123", version = v }
⫽ { pkgUrl =
"http://www.mpg123.de/download/mpg123-${prelude.showVersion
v}.tar.bz2"
}
let time =
λ(v : List Natural) →
prelude.makeGnuExe { name = "time", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/time/time-${prelude.showVersion
v}.tar.gz"
}
let make =
λ(v : List Natural) →
prelude.makeGnuExe { name = "make", version = v }
⫽ { pkgUrl =
"https://ftp.wayne.edu/gnu/make/make-${prelude.showVersion
v}.tar.bz2"
, configureCommand =
prelude.configureWithPatch
''
--- glob/glob.c 2013-10-20 17:14:38.000000000 +0000
+++ glob/glob.c 2018-09-18 10:16:03.860886356 +0000
@@ -208,7 +208,7 @@
#endif /* __GNU_LIBRARY__ || __DJGPP__ */
-#if !defined __alloca && !defined __GNU_LIBRARY__
+#if !defined __alloca && defined __GNU_LIBRARY__
# ifdef __GNUC__
# undef alloca
''
, buildCommand =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "sh"
, arguments = [ "build.sh" ]
, environment = Some (prelude.buildEnv cfg)
}
)
]
, installCommand =
λ(_ : types.BuildVars) →
[ prelude.copyFile "make" "bin/make"
, prelude.symlinkBinary "bin/make"
]
, pkgBuildDeps = [ prelude.unbounded "patch" ]
}
let mercury =
let mercuryBuild =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "make"
, arguments = [ "PARALLEL=-j${Natural/show cfg.cpus}" ]
, environment = Some (prelude.buildEnv cfg)
}
)
]
let mercuryCommon =
{ pkgUrl =
"http://dl.mercurylang.org/release/mercury-srcdist-14.01.1.tar.gz"
, pkgSubdir = "mercury-srcdist-14.01.1"
, buildCommand = mercuryBuild
}
in prelude.simplePackage { name = "mercury", version = [ 14, 1, 1 ] }
⫽ mercuryCommon
⫽ { pkgBuildDeps = [ prelude.unbounded "flex" ] }
let qt =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.simplePackage
{ name = "qt", version = prelude.fullVersion x }
⫽ { pkgUrl =
"https://download.qt.io/archive/qt/${versionString}/${fullVersion}/single/qt-everywhere-src-${fullVersion}.tar.xz"
, pkgSubdir = "qt-everywhere-src-${fullVersion}"
, pkgBuildDeps =
[ prelude.unbounded "flex"
, prelude.unbounded "bison"
, prelude.unbounded "pkg-config"
, prelude.unbounded "gperf"
, prelude.unbounded "perl"
, prelude.unbounded "python2"
, prelude.unbounded "git"
]
, pkgDeps =
[ prelude.unbounded "fontconfig"
, prelude.unbounded "mesa"
, prelude.unbounded "dbus"
, prelude.unbounded "freetype"
, prelude.unbounded "harfbuzz"
, prelude.unbounded "libjpeg-turbo"
, prelude.unbounded "libpng"
, prelude.unbounded "giflib"
, prelude.unbounded "glib"
]
}
let lz4 =
λ(v : List Natural) →
prelude.simplePackage { name = "lz4", version = v }
⫽ { pkgUrl =
"https://github.com/lz4/lz4/archive/v${prelude.showVersion
v}.tar.gz"
, configureCommand = prelude.doNothing
, installCommand =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "make"
, arguments =
[ "PREFIX=${cfg.installDir}", "install" ]
, environment = Some (prelude.buildEnv cfg)
}
)
, prelude.symlinkBinary "bin/lz4"
]
# prelude.symlinkManpages
[ { file = "share/man/man1/lz4.1", section = 1 } ]
}
let fftw =
λ(v : List Natural) →
prelude.simplePackage { name = "fftw", version = v }
⫽ { pkgUrl = "http://www.fftw.org/fftw-${prelude.showVersion v}.tar.gz"
, configureCommand =
prelude.configureWithFlags
[ "--enable-shared"
, "--enable-threads"
, "--with-combined-threads"
]
}
let icu-le-hb =
λ(v : List Natural) →
prelude.simplePackage { name = "icu-le-hb", version = v }
⫽ { pkgUrl =
"https://github.com/harfbuzz/icu-le-hb/archive/${prelude.showVersion
v}.tar.gz"
, configureCommand = prelude.autogenConfigure
, pkgDeps = [ prelude.unbounded "harfbuzz", prelude.unbounded "icu" ]
, pkgBuildDeps = [ prelude.unbounded "pkg-config" ]
}
let icu =
λ(v : List Natural) →
prelude.simplePackage { name = "icu", version = v }
⫽ { pkgUrl =
"http://download.icu-project.org/files/icu4c/${prelude.showVersion
v}/icu4c-${prelude.underscoreVersion
v}-src.tgz"
, pkgSubdir = "icu/source"
, pkgBuildDeps =
[ prelude.lowerBound { name = "make", lower = [ 3, 80 ] }
, prelude.unbounded "python3"
]
}
let opencv =
λ(v : List Natural) →
prelude.simplePackage { name = "opencv", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"https://github.com/opencv/opencv/archive/${prelude.showVersion
v}.zip"
, pkgBuildDeps =
[ prelude.lowerBound { name = "cmake", lower = [ 2, 8, 7 ] }
, prelude.unbounded "pkg-config"
, prelude.unbounded "python2"
]
, pkgDeps =
[ prelude.unbounded "zlib"
, prelude.unbounded "libjpeg-turbo"
, prelude.unbounded "libpng"
, prelude.unbounded "gtk3"
, prelude.unbounded "ffmpeg"
]
}
let libraw =
λ(v : List Natural) →
prelude.simplePackage { name = "libraw", version = v }
⫽ { pkgUrl =
"https://www.libraw.org/data/LibRaw-${prelude.showVersion
v}.tar.gz"
, pkgSubdir = "LibRaw-${prelude.showVersion v}"
}
let quazip =
λ(v : List Natural) →
prelude.simplePackage { name = "quazip", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"https://github.com/stachenov/quazip/archive/v${prelude.showVersion
v}.tar.gz"
, pkgDeps = [ prelude.unbounded "zlib", prelude.unbounded "qt" ]
}
let eigen =
λ(v : List Natural) →
prelude.simplePackage { name = "eigen", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"http://bitbucket.org/eigen/eigen/get/${prelude.showVersion
v}.tar.bz2"
, pkgSubdir = "eigen-eigen-323c052e1731"
}
let blas =
λ(v : List Natural) →
prelude.simplePackage { name = "blas", version = v }
⫽ { pkgUrl =
"http://www.netlib.org/blas/blas-${prelude.showVersion v}.tgz"
, pkgSubdir = "BLAS-${prelude.showVersion v}"
, pkgBuildDeps = [ prelude.unbounded "gcc" ]
, configureCommand = prelude.doNothing
, installCommand =
λ(_ : types.BuildVars) →
[ prelude.copyFile "blas_LINUX.a" "lib/blas.a" ]
}
let openblas =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "openblas", version = v }
⫽ { pkgUrl =
"https://github.com/xianyi/OpenBLAS/archive/v${versionString}.tar.gz"
, pkgSubdir = "OpenBLAS-${versionString}"
, pkgBuildDeps = [ prelude.unbounded "gcc" ]
, pkgDeps = [ prelude.unbounded "gcc" ]
, configureCommand = prelude.doNothing
, installCommand = prelude.installPrefix
}
let r =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "r", version = v }
⫽ { pkgUrl =
"https://cran.r-project.org/src/base/R-4/R-${versionString}.tar.gz"
, pkgSubdir = "R-${versionString}"
, pkgDeps =
[ prelude.unbounded "readline"
, prelude.unbounded "libXt"
, prelude.unbounded "pcre"
]
, pkgBuildDeps = [ prelude.unbounded "gcc" ]
, installCommand =
prelude.installWithBinaries [ "bin/R", "bin/Rscript" ]
}
let libspng =
λ(v : List Natural) →
prelude.ninjaPackage { name = "libspng", version = v }
⫽ { pkgUrl =
"https://github.com/randy408/libspng/archive/v${prelude.showVersion
v}.tar.gz"
, pkgBuildDeps =
[ prelude.unbounded "pkg-config"
, prelude.unbounded "meson"
, prelude.lowerBound { name = "ninja", lower = [ 1, 5, 0 ] }
]
, pkgDeps = [ prelude.unbounded "zlib" ]
}
let glib-networking =
λ(x : { version : List Natural, patch : Natural }) →
let versionString = prelude.showVersion x.version
let fullVersion = versionString ++ "." ++ Natural/show x.patch
in prelude.ninjaPackage
{ name = "glib-networking", version = prelude.fullVersion x }
⫽ { pkgUrl =
"http://ftp.gnome.org/pub/gnome/sources/glib-networking/${versionString}/glib-networking-${fullVersion}.tar.xz"
, pkgBuildDeps =
[ prelude.unbounded "pkg-config", prelude.unbounded "gettext" ]
, pkgDeps =
[ prelude.unbounded "glib", prelude.unbounded "gnutls" ]
}
let libwebp =
λ(v : List Natural) →
prelude.simplePackage { name = "libwebp", version = v }
⫽ { pkgUrl =
"https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${prelude.showVersion
v}.tar.gz"
}
let rustc =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "rustc", version = v }
⫽ { pkgUrl =
"https://static.rust-lang.org/dist/rust-${versionString}-x86_64-unknown-linux-gnu.tar.gz"
, pkgSubdir = "rust-${versionString}-x86_64-unknown-linux-gnu"
, configureCommand = prelude.doNothing
, buildCommand = prelude.doNothing
, installCommand =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "./install.sh"
, arguments =
[ "--prefix=${cfg.installDir}"
, "--disable-ldconfig"
]
}
)
]
}
let librsvg =
λ(x : { version : List Natural, patch : Natural }) →
mkGnomeSimple "librsvg" x
⫽ { pkgBuildDeps =
[ prelude.lowerBound { name = "rustc", lower = [ 1, 16, 0 ] }
, prelude.unbounded "pkg-config"
]
, pkgDeps =
[ prelude.lowerBound { name = "cairo", lower = [ 1, 16, 0 ] }
, prelude.lowerBound { name = "libxml2", lower = [ 2, 9, 0 ] }
, prelude.lowerBound { name = "libcroco", lower = [ 0, 6, 1 ] }
, prelude.unbounded "pango"
, prelude.lowerBound { name = "gdk-pixbuf", lower = [ 2, 20 ] }
, prelude.unbounded "gobject-introspection"
, prelude.lowerBound { name = "glib", lower = [ 2, 10, 0 ] }
]
}
let ats =
λ(v : List Natural) →
let versionString = prelude.showVersion v
let atsBuild =
λ(cfg : types.BuildVars) →
let buildDir =
cfg.currentDir ++ "/ATS2-Postiats-gmp-${versionString}"
in [ prelude.call
( prelude.defaultCall
⫽ { program = prelude.makeExe cfg.buildOS
, arguments =
[ "CFLAGS=${( prelude.mkCFlags cfg
).value} -I${buildDir}/src/CBOOT/ccomp/runtime -I${buildDir}/src/CBOOT"
, "LDFLAGS='${( prelude.mkLDFlags cfg.linkDirs cfg
).value}'"
]
, environment = Some (prelude.buildEnv cfg)
}
)
]
in prelude.simplePackage { name = "ats", version = v }
⫽ { pkgUrl =
"http://ats-lang.sourceforge.net/IMPLEMENT/Postiats/ATS2-Postiats-gmp-${versionString}.tgz"
, pkgSubdir = "ATS2-Postiats-gmp-${versionString}"
, pkgDeps = [ prelude.unbounded "gmp" ]
, buildCommand = atsBuild
, installCommand =
prelude.installWithBinaries [ "bin/patsopt", "bin/patscc" ]
}
let libiconv =
λ(v : List Natural) →
prelude.simplePackage { name = "libiconv", version = v }
⫽ { pkgUrl =
"https://ftp.wayne.edu/gnu/libiconv/libiconv-${prelude.showVersion
v}.tar.gz"
}
let libav =
λ(v : List Natural) →
prelude.simplePackage { name = "libav", version = v }
⫽ { pkgUrl =
"https://libav.org/releases/libav-${prelude.showVersion v}.tar.xz"
, pkgBuildDeps =
[ prelude.unbounded "nasm", prelude.unbounded "perl" ]
, installCommand =
prelude.installWithBinaries [ "bin/avconv", "bin/avprobe" ]
}
let alsa-lib =
λ(v : List Natural) →
prelude.simplePackage { name = "alsa-lib", version = v }
⫽ { pkgUrl =
"https://www.alsa-project.org/files/pub/lib/alsa-lib-${prelude.showVersion
v}.tar.bz2"
}
let bash-completion =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "bash-completion", version = v }
⫽ { pkgUrl =
"https://github.com/scop/bash-completion/releases/download/${versionString}/bash-completion-${versionString}.tar.xz"
}
let hugs =
let hugsEnv =
λ(_ : List Text) →
λ(cfg : types.BuildVars) →
Some
[ { var = "CFLAGS", value = "-std=gnu89" }
, { var = "PATH", value = prelude.mkPathVar cfg.binDirs }
]
in prelude.simplePackage { name = "hugs", version = [ 2006, 9 ] }
⫽ { pkgUrl =
"https://www.haskell.org/hugs/downloads/2006-09/hugs98-plus-Sep2006.tar.gz"
, pkgSubdir = "hugs98-plus-Sep2006"
, configureCommand =
prelude.generalConfigure
hugsEnv
"configure"
([] : List Text)
([] : List Text)
, pkgBuildDeps =
[ prelude.unbounded "coreutils"
, prelude.unbounded "sed"
, prelude.unbounded "gcc"
, prelude.unbounded "binutils"
, prelude.unbounded "grep"
, prelude.unbounded "findutils"
]
}
let bash =
λ(v : List Natural) →
prelude.simplePackage { name = "bash", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/gnu/bash/bash-${prelude.showVersion
v}.tar.gz"
}
let findutils =
λ(v : List Natural) →
prelude.simplePackage { name = "findutils", version = v }
⫽ { pkgUrl =
"https://ftp.gnu.org/pub/gnu/findutils/findutils-${prelude.showVersion
v}.tar.xz"
}
let ghc =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "ghc", version = v }
⫽ { pkgUrl =
"https://downloads.haskell.org/~ghc/${versionString}/ghc-${versionString}-x86_64-deb9-linux.tar.xz"
, buildCommand = prelude.doNothing
}
let cmark =
λ(v : List Natural) →
prelude.simplePackage { name = "cmark", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"https://github.com/commonmark/cmark/archive/${prelude.showVersion
v}.tar.gz"
}
let lzip =
λ(v : List Natural) →
prelude.simplePackage { name = "lzip", version = v }
⫽ { pkgUrl =
"http://download.savannah.gnu.org/releases/lzip/lzip-${prelude.showVersion
v}.tar.lz"
, installCommand =
λ(cfg : types.BuildVars) →
prelude.installWithBinaries [ "bin/lzip" ] cfg
# prelude.symlinkManpages
[ { file = "share/man/man1/lzip.1", section = 1 } ]
}
let clzip =
λ(v : List Natural) →
prelude.simplePackage { name = "clzip", version = v }
⫽ { pkgUrl =
"http://download.savannah.gnu.org/releases/lzip/clzip/clzip-${prelude.showVersion
v}.tar.lz"
, installCommand =
λ(cfg : types.BuildVars) →
prelude.installWithBinaries [ "bin/clzip" ] cfg
# prelude.symlinkManpages
[ { file = "share/man/man1/clzip.1", section = 1 } ]
}
let lunzip =
λ(v : List Natural) →
prelude.simplePackage { name = "lunzip", version = v }
⫽ { pkgUrl =
"http://download.savannah.gnu.org/releases/lzip/lunzip/lunzip-${prelude.showVersion
v}.tar.lz"
, installCommand =
λ(cfg : types.BuildVars) →
prelude.installWithBinaries [ "bin/lunzip" ] cfg
# prelude.symlinkManpages
[ { file = "share/man/man1/lunzip.1", section = 1 } ]
}
let lzlib =
λ(v : List Natural) →
prelude.simplePackage { name = "lzlib", version = v }
⫽ { pkgUrl =
"http://download.savannah.gnu.org/releases/lzip/lzlib/lzlib-${prelude.showVersion
v}.tar.lz"
, configureCommand = prelude.configureWithFlags [ "--enable-shared" ]
}
let lziprecover =
λ(v : List Natural) →
prelude.simplePackage { name = "lziprecover", version = v }
⫽ { pkgUrl =
"http://download.savannah.gnu.org/releases/lzip/lziprecover/lziprecover-${prelude.showVersion
v}.tar.lz"
, installCommand = prelude.installWithBinaries [ "bin/lziprecover" ]
}
let libmp3lame =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libmp3lame", version = v }
⫽ { pkgUrl =
"https://downloads.sourceforge.net/lame/lame-${versionString}.tar.gz"
, pkgSubdir = "lame-${versionString}"
}
let libass =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libass", version = v }
⫽ { pkgUrl =
"https://github.com/libass/libass/releases/download/${versionString}/libass-${versionString}.tar.xz"
, pkgBuildDeps = [ prelude.unbounded "nasm" ]
, pkgDeps =
[ prelude.lowerBound { name = "freetype", lower = [ 9, 10, 3 ] }
, prelude.lowerBound { name = "fribidi", lower = [ 0, 19, 0 ] }
, prelude.lowerBound { name = "harfbuzz", lower = [ 0, 9, 5 ] }
, prelude.lowerBound
{ name = "fontconfig", lower = [ 2, 10, 92 ] }
]
}
let libogg =
λ(v : List Natural) →
prelude.simplePackage { name = "libogg", version = v }
⫽ { pkgUrl =
"https://downloads.xiph.org/releases/ogg/libogg-${prelude.showVersion
v}.tar.xz"
}
let libvorbis =
λ(v : List Natural) →
prelude.simplePackage { name = "libvorbis", version = v }
⫽ { pkgUrl =
"https://downloads.xiph.org/releases/vorbis/libvorbis-${prelude.showVersion
v}.tar.xz"
, pkgDeps = [ prelude.unbounded "libogg" ]
}
let libvpx =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "libvpx", version = v }
⫽ { pkgUrl =
"https://github.com/webmproject/libvpx/archive/v${versionString}/libvpx-${versionString}.tar.gz"
, pkgBuildDeps =
[ prelude.unbounded "nasm", prelude.unbounded "perl" ]
}
let fdk-aac =
λ(v : List Natural) →
prelude.simplePackage { name = "fdk-aac", version = v }
⫽ { pkgUrl =
"https://downloads.sourceforge.net/opencore-amr/fdk-aac-${prelude.showVersion
v}.tar.gz"
}
let swi-prolog =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.ninjaPackage { name = "swi-prolog", version = v }
⫽ { pkgUrl =
"https://www.swi-prolog.org/download/stable/src/swipl-${versionString}.tar.gz"
, configureCommand = prelude.cmakeConfigureNinja
, pkgBuildDeps =
[ prelude.unbounded "cmake"
, prelude.unbounded "ninja"
, prelude.unbounded "coreutils"
]
, pkgSubdir = "swipl-${versionString}"
}
let exiftool =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "exiftool", version = v }
⫽ { pkgUrl =
"https://sno.phy.queensu.ca/~phil/exiftool/Image-ExifTool-${versionString}.tar.gz"
, pkgSubdir = "Image-ExifTool-${versionString}"
, configureCommand = prelude.perlConfigure
, installCommand =
λ(cfg : types.BuildVars) →
let perlWrapper =
"PERL5LIB=${cfg.installDir}/lib/site_perl/5.30.0/ ${cfg.installDir}/bin/exiftool \$@"
let wrapped = "wrapper/exiftool"
in prelude.defaultInstall cfg
# [ prelude.createDir "wrapper"
, prelude.writeFile
{ file = wrapped, contents = perlWrapper }
, prelude.mkExe wrapped
, prelude.copyFile wrapped wrapped
, prelude.symlinkBinary wrapped
]
, pkgBuildDeps = [ prelude.unbounded "perl" ]
}
let subversion =
λ(v : List Natural) →
prelude.simplePackage { name = "subversion", version = v }
⫽ { pkgUrl =
"https://www-eu.apache.org/dist/subversion/subversion-${prelude.showVersion
v}.tar.bz2"
, pkgDeps =
[ prelude.unbounded "apr"
, prelude.unbounded "apr-util"
, prelude.unbounded "sqlite"
, prelude.unbounded "lz4"
, prelude.unbounded "zlib"
, prelude.unbounded "utf8proc"
]
, pkgBuildDeps = [ prelude.unbounded "pkg-config" ]
, installCommand = prelude.installWithBinaries [ "bin/svn" ]
}
let utf8proc =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "utf8proc", version = v }
⫽ prelude.cmakePackage
⫽ { pkgUrl =
"https://github.com/JuliaStrings/utf8proc/archive/v${versionString}.tar.gz"
}
let apr =
λ(v : List Natural) →
prelude.simplePackage { name = "apr", version = v }
⫽ { pkgUrl =
"https://www-eu.apache.org/dist/apr/apr-${prelude.showVersion
v}.tar.bz2"
}
let apr-util =
λ(v : List Natural) →
prelude.simplePackage { name = "apr-util", version = v }
⫽ { pkgUrl =
"https://www-eu.apache.org/dist/apr/apr-util-${prelude.showVersion
v}.tar.bz2"
, pkgDeps = [ prelude.unbounded "apr" ]
, configureCommand =
λ(cfg : types.BuildVars) →
prelude.configureWithFlags
[ "--with-apr=${concat cfg.linkDirs}/../" ]
cfg
}
let libsass =
λ(v : List Natural) →
prelude.simplePackage { name = "libsass", version = v }
⫽ { pkgUrl =
"https://github.com/sass/libsass/archive/${prelude.showVersion
v}.tar.gz"
, pkgBuildDeps =
[ prelude.unbounded "autoconf"
, prelude.unbounded "automake"
, prelude.unbounded "m4"
, prelude.unbounded "grep"
, prelude.unbounded "sed"
, prelude.unbounded "coreutils"
, prelude.unbounded "libtool"
]
, configureCommand =
λ(cfg : types.BuildVars) →
[ prelude.call
{ program = "autoreconf"
, arguments = [ "-i" ]
, environment = Some
[ { var = "PATH"
, value = prelude.mkPathVar cfg.binDirs
}
, prelude.mkAclocalPath cfg.shareDirs
]
, procDir = None Text
}
]
# prelude.defaultConfigure cfg
}
let zstd =
λ(v : List Natural) →
let versionString = prelude.showVersion v
in prelude.simplePackage { name = "zstd", version = v }
⫽ { pkgUrl =
"https://github.com/facebook/zstd/releases/download/v${versionString}/zstd-${versionString}.tar.zst"
, configureCommand = prelude.doNothing
, installCommand =
λ(cfg : types.BuildVars) →
[ prelude.call
{ program = "make"
, arguments =
[ "PREFIX=${cfg.installDir}", "install" ]
, environment = Some (prelude.buildEnv cfg)
, procDir = None Text
}
, prelude.symlinkBinary "bin/zstd"
]
# prelude.symlinkManpages
[ { file = "share/man/man1/zstd.1", section = 1 } ]
}
let luarocks =
λ(v : List Natural) →
prelude.simplePackage { name = "luarocks", version = v }
⫽ { pkgUrl =
"http://luarocks.org/releases/luarocks-${prelude.showVersion
v}.tar.gz"
, pkgBuildDeps = [ prelude.unbounded "lua" ]
, installCommand = prelude.installWithWrappers [ "luarocks" ]
}
let star =
λ(v : List Natural) →
prelude.simplePackage { name = "star", version = v }
⫽ { pkgUrl =
"https://downloads.sourceforge.net/s-tar/star-${prelude.showVersion
v}.tar.bz2"
, configureCommand = prelude.doNothing
, installCommand =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "make"
, arguments =
[ "DESTDIR=${cfg.installDir}", "install" ]
, environment = Some (prelude.buildEnv cfg)
}
)
, prelude.symlinkBinary "opt/schily/bin/star"
]
# prelude.symlinkManpages
[ { file = "opt/schily/share/man/man1/star.1", section = 1 }
, { file = "opt/schily/share/man/man1/scpio.1"
, section = 1
}
, { file = "opt/schily/share/man/man1/spax.1", section = 1 }
]
}
let smake =
λ(v : List Natural) →
prelude.simplePackage { name = "smake", version = v }
⫽ { pkgUrl =
"https://downloads.sourceforge.net/s-make/smake-${prelude.showVersion
v}.tar.bz2"
, configureCommand = prelude.doNothing
, installCommand =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "make"
, arguments =
[ "DESTDIR=${cfg.installDir}", "install" ]
, environment = Some (prelude.buildEnv cfg)
}
)
, prelude.symlinkBinary "opt/schily/bin/smake"
]
# prelude.symlinkManpages
[ { file = "opt/schily/share/man/man1/smake.1"
, section = 1
}
, { file = "opt/schily/share/man/man5/makefiles.5"
, section = 5
}
, { file = "opt/schily/share/man/man5/makerules.5"
, section = 5
}
]
}
let busybox =
λ(v : List Natural) →
prelude.simplePackage { name = "busybox", version = v }
⫽ { pkgUrl =
"https://www.busybox.net/downloads/busybox-${prelude.showVersion
v}.tar.bz2"
, configureCommand =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "make"
, arguments = [ "defconfig" ]
, environment = Some (prelude.buildEnv cfg)
}
)
]
, installCommand =
λ(cfg : types.BuildVars) →
[ prelude.call
( prelude.defaultCall
⫽ { program = "make"
, arguments =
[ "CONFIG_PREFIX=${cfg.installDir}", "install" ]
, environment = Some (prelude.buildEnv cfg)
}
)
, prelude.symlinkBinary "bin/busybox"
]
}
let tarlz =
λ(v : List Natural) →
prelude.simplePackage { name = "tarlz", version = v }
⫽ { pkgUrl =
"http://download.savannah.gnu.org/releases/lzip/tarlz/tarlz-${prelude.showVersion
v}.tar.lz"
, installCommand =
λ(cfg : types.BuildVars) →
prelude.installWithBinaries [ "bin/tarlz" ] cfg
# prelude.symlinkManpages
[ { file = "share/man/man1/tarlz.1", section = 1 } ]
}
in [ alsa-lib [ 1, 1, 9 ]
, apr [ 1, 7, 0 ]
, apr-util [ 1, 6, 1 ]
, at-spi-atk { version = [ 2, 33 ], patch = 2 }
, at-spi-core { version = [ 2, 33 ], patch = 2 }
, atk { version = [ 2, 36 ], patch = 0 }
, ats [ 0, 4, 0 ]
, autoconf [ 2, 69 ]
, automake [ 1, 16, 2 ]
, babl { version = [ 0, 1 ], patch = 68 }
, bash [ 5, 0, 17 ]
, bash-completion [ 2, 9 ]
, binutils [ 2, 33, 1 ]
, bison [ 3, 5 ]
, blas [ 3, 8, 0 ]
, busybox [ 1, 31, 1 ]
, bzip2 [ 1, 0, 8 ]
, cairo [ 1, 16, 0 ]
, chickenScheme [ 5, 0, 0 ]
, cimg [ 2, 7, 0 ]
, clang [ 9, 0, 0 ]
, clzip [ 1, 11 ]
, cmake { version = [ 3, 17 ], patch = 2 }
, cmark [ 0, 29, 0 ]
, compositeproto [ 0, 4 ]
, coreutils [ 8, 31 ]
, ctags [ 5, 8 ]
, curl [ 7, 66, 0 ]
, damageproto [ 1, 2, 1 ]
, dbus [ 1, 13, 12 ]
, diffutils [ 3, 7 ]
, dri2proto [ 2, 8 ]
, eigen [ 3, 3, 7 ]
, elfutils [ 0, 177 ]
, emacs [ 26, 3 ]
, exiftool [ 11, 65 ]
, exiv2 [ 0, 27, 1 ]
, expat [ 2, 2, 9 ]
, fdk-aac [ 2, 0, 1 ]
, feh [ 3, 2, 1 ]
, ffmpeg [ 4, 2, 2 ]
, fftw [ 3, 3, 8 ]
, findutils [ 4, 7, 0 ]
, fixesproto [ 5, 0 ]
, fontconfig [ 2, 13, 1 ]
, fossil [ 2, 10 ]
, flex [ 2, 6, 3 ]
, fltk [ 1, 3, 5 ]
, freetype-prebuild [ 2, 10, 1 ]
, freetype [ 2, 10, 1 ]
, fribidi [ 1, 0, 9 ]
, gawk [ 5, 0, 1 ]
, gc [ 8, 0, 4 ]
, gcc [ 10, 1, 0 ]
, gdb [ 8, 3, 1 ]
, gdk-pixbuf { version = [ 2, 38 ], patch = 1 }
, gegl { version = [ 0, 4 ], patch = 16 }
, gettext [ 0, 20, 2 ]
, gexiv2 { version = [ 0, 12 ], patch = 0 }
, ghc [ 8, 8, 3 ]
, gperf [ 3, 1 ]
, gperftools [ 2, 7 ]
, giflib [ 5, 1, 4 ]
, git [ 2, 26, 2 ]
, glib { version = [ 2, 64 ], patch = 2 }
, glib-networking { version = [ 2, 61 ], patch = 2 }
, glproto [ 1, 4, 17 ]
, glu [ 9, 0, 0 ]
, json-glib { version = [ 1, 4 ], patch = 4 }
, glibc [ 2, 30 ]
, gmp [ 6, 2, 0 ]
, gobject-introspection { version = [ 1, 62 ], patch = 0 }
, gnome-doc-utils { version = [ 0, 20 ], patch = 10 }
, gnupg [ 2, 2, 20 ]
, gnutls { version = [ 3, 6 ], patch = [ 13 ] }
, graphviz [ 2, 40, 1 ]
, grep [ 3, 3 ]
, gsl [ 2, 6 ]
, gtk2 { version = [ 2, 24 ], patch = 32 }
, gtk3 { version = [ 3, 24 ], patch = 18 }
, gzip [ 1, 10 ]
, harfbuzz [ 2, 6, 4 ]
, htop [ 2, 2, 0 ]
, hugs
, icu [ 64, 2 ]
, icu-le-hb [ 1, 0, 3 ]
, imageMagick [ 7, 0, 8 ]
, imlib2 [ 1, 5, 1 ]
, inputproto [ 2, 3, 2 ]
, intltool [ 0, 51, 0 ]
, itstool [ 2, 0, 6 ]
, jemalloc [ 5, 2, 1 ]
, joe [ 4, 6 ]
, json-c { version = [ 0, 13, 1 ], dateStr = "20180305" }
, kbproto [ 1, 0, 7 ]
, krb5 [ 1, 18 ]
, lapack [ 3, 8, 0 ]
, lcms2 [ 2, 9 ]
, leptonica [ 1, 78, 0 ]
, libarchive [ 3, 4, 3 ]
, libass [ 0, 14, 0 ]
, libassuan [ 2, 5, 3 ]
, libatomic_ops [ 7, 6, 10 ]
, libav [ 12, 3 ]
, libboost [ 1, 72, 0 ]
, libcds [ 2, 3, 2 ]
, libcroco { version = [ 0, 6 ], patch = 12 }
, libdatrie [ 0, 2, 12 ]
, libdrm [ 2, 4, 96 ]
, libepoxy [ 1, 5, 3 ]
, libev [ 4, 25 ]
, libevent [ 2, 1, 10 ]
, libexif [ 0, 6, 21 ]
, libffi [ 3, 3 ]
, libgcrypt [ 1, 8, 5 ]
, libglade { version = [ 2, 6 ], patch = 4 }
, libgpgError [ 1, 37 ]
, libICE [ 1, 0, 9 ]
, libiconv [ 1, 16 ]
, libjpeg [ 9 ]
, libjpeg-turbo [ 2, 0, 4 ]
, libksba [ 1, 3, 5 ]
, libmp3lame [ 3, 100 ]
, libmypaint [ 1, 3, 0 ]
, libnettle [ 3, 5, 1 ]
, libogg [ 1, 3, 4 ]
, libopenjpeg [ 2, 3, 1 ]
, libotf [ 0, 9, 16 ]
, libpciaccess [ 0, 14 ]
, libpng [ 1, 6, 37 ]
, libpsl [ 0, 21, 0 ]
, libpthread-stubs [ 0, 4 ]
, libraw [ 0, 19, 2 ]
, librsvg { version = [ 2, 48 ], patch = 4 }
, libsamplerate [ 0, 1, 9 ]
, libsass [ 3, 6, 2 ]
, libselinux [ 3, 0 ]
, libsndfile [ 1, 0, 28 ]
, libsepol [ 3, 0 ]
, libsodium [ 1, 0, 17 ]
, libsoup { version = [ 2, 67 ], patch = 3 }
, libspng [ 0, 5, 0 ]
, libssh2 [ 1, 8, 0 ]
, libtasn1 [ 4, 15, 0 ]
, libtiff [ 4, 0, 10 ]
, libtool [ 2, 4, 6 ]
, libuv [ 1, 24, 0 ]
, libwebp [ 1, 0, 3 ]
, libSM [ 1, 2, 3 ]
, libthai [ 0, 1, 28 ]
, libvorbis [ 1, 3, 6 ]
, libvpx [ 1, 8, 2 ]
, libX11 [ 1, 6, 8 ]
, libXau [ 1, 0, 9 ]
, libXaw [ 1, 0, 13 ]
, libXaw3d [ 1, 6, 3 ]
, libxcb [ 1, 13 ]
, libXcomposite [ 0, 4, 5 ]
, libXdamage [ 1, 1, 5 ]
, libXdmcp [ 1, 1, 3 ]
, libXext [ 1, 3, 4 ]
, libXfixes [ 5, 0, 3 ]
, libXft [ 2, 3, 3 ]
, libXi [ 1, 7, 10 ]
, libXinerama [ 1, 1, 4 ]
, libxml2 [ 2, 9, 9 ]
, libXmu [ 1, 1, 3 ]
, libXpm [ 3, 5, 12 ]
, libXScrnSaver [ 1, 2, 3 ]
, libxshmfence [ 1, 3 ]
, libxslt [ 1, 1, 33 ]
, libXrandr [ 1, 5, 2 ]
, libXrender [ 0, 9, 10 ]
, libXt [ 1, 2, 0 ]
, libXtst [ 1, 2, 3 ]
, libXxf86vm [ 1, 1, 4 ]
, llvm [ 9, 0, 0 ]
, lmdb [ 0, 9, 23 ]
, lua [ 5, 3, 5 ]
, luarocks [ 3, 2, 1 ]
, lunzip [ 1, 11 ]
, lz4 [ 1, 9, 2 ]
, lzip [ 1, 21 ]
, lziprecover [ 1, 21 ]
, lzlib [ 1, 11 ]
, m17n [ 1, 8, 0 ]
, m4 [ 1, 4, 18 ]
, make [ 4, 2, 1 ]
, mako [ 1, 0, 7 ]
, markupSafe [ 1, 0 ]
, memcached [ 1, 5, 18 ]
, mercury
, mesa [ 19, 0, 5 ]
, meson [ 0, 51, 2 ]
, mosh [ 1, 3, 2 ]
, motif [ 2, 3, 8 ]
, mpc [ 1, 1, 0 ]
, mpfr [ 4, 0, 2 ]
, mpg123 [ 1, 25, 12 ]
, musl [ 1, 1, 20 ]
, nano [ 4, 3 ]
, nasm [ 2, 14 ]
, ncurses [ 6, 2 ]
, nginx [ 1, 15, 7 ]
, ninja [ 1, 9, 0 ]
, node [ 12, 17, 0 ]
, npth [ 1, 6 ]
, nspr [ 4, 20 ]
, openblas [ 0, 3, 2 ]
, opencv [ 4, 2, 0 ]
, openssh [ 7, 9 ]
, openssl [ 1, 1, 1 ]
, p11kit [ 0, 23, 16, 1 ]
, pango { version = [ 1, 43 ], patch = 0 }
, pari [ 2, 11, 1 ]
, patch [ 2, 7 ]
, pcre [ 8, 44 ]
, pcre2 [ 10, 33 ]
, pdfgrep [ 2, 1, 2 ]
, perl5 [ 5, 30, 2 ]
, phash [ 0, 9, 6 ]
, pixman [ 0, 38, 4 ]
, pkg-config [ 0, 29, 2 ]
, poppler [ 0, 84, 0 ]
, postgresql [ 12, 2 ]
, protobuf [ 3, 8, 0 ]
, pycairo [ 1, 18, 1 ]
, pygobject { version = [ 2, 28 ], patch = 7 }
, pygtk { version = [ 2, 24 ], patch = 0 }
, python [ 2, 7, 17 ]
, python [ 3, 8, 2 ]
, qrencode [ 4, 0, 2 ]
, qt { version = [ 5, 13 ], patch = 0 }
, quazip [ 0, 8, 1 ]
, r [ 4, 0, 0 ]
, ragel [ 6, 10 ]
, randrproto [ 1, 5, 0 ]
, re2c [ 1, 1, 1 ]
, readline [ 8, 0 ]
, recordproto [ 1, 14, 2 ]
, renderproto [ 0, 11, 1 ]
, ruby { version = [ 2, 7 ], patch = 1 }
, rustc [ 1, 42, 0 ]
, scour [ 0, 37 ]
, scrnsaverproto [ 1, 2, 2 ]
, sdl2 [ 2, 0, 10 ]
, sed [ 4, 7 ]
, shared-mime-info [ 1, 10 ]
, smake [ 1, 2, 5 ]
, sqlite { version = [ 3, 30, 1 ] }
, star [ 1, 6 ]
, subversion [ 1, 12, 2 ]
, swig [ 3, 0, 12 ]
, swi-prolog [ 8, 0, 3 ]
, tar [ 1, 32 ]
, tarlz [ 0, 16 ]
, tcc [ 0, 9, 27 ]
, texinfo [ 6, 6 ]
, tesseract [ 4, 0, 0 ]
, time [ 1, 9 ]
, unistring [ 0, 9, 10 ]
, utf8proc [ 2, 4, 0 ]
, util-linux { version = [ 2, 34 ] }
, util-macros [ 1, 19, 2 ]
, vala { version = [ 0, 45 ], patch = 3 }
, valgrind [ 3, 15, 0 ]
, vim [ 8, 2 ]
, wayland [ 1, 17, 0 ]
, wget [ 1, 20, 3 ]
, which [ 2, 21 ]
, xcb-proto [ 1, 13 ]
, xextproto [ 7, 3, 0 ]
, xf86vidmodeproto [ 2, 3, 1 ]
, xineramaproto [ 1, 2 ]
, xmlParser [ 2, 44 ]
, xproto [ 7, 0, 31 ]
, xtrans [ 1, 4, 0 ]
, xz [ 5, 2, 5 ]
, zlib [ 1, 2, 11 ]
, zstd [ 1, 4, 5 ]
]