All Projects → JuliaPackaging → BinaryProvider.jl

JuliaPackaging / BinaryProvider.jl

Licence: other
A reliable binary provider for Julia

Programming Languages

julia
2034 projects
shell
77523 projects

Projects that are alternatives of or similar to BinaryProvider.jl

Corral
🐴 Pony dependency manager tool
Stars: ✭ 152 (+261.9%)
Mutual labels:  dependency-manager
Poetry
Python dependency management and packaging made easy.
Stars: ✭ 17,543 (+41669.05%)
Mutual labels:  dependency-manager
cget-recipes
Recipes for cget
Stars: ✭ 17 (-59.52%)
Mutual labels:  dependency-manager
Docker
Composer in Docker
Stars: ✭ 180 (+328.57%)
Mutual labels:  dependency-manager
Dep
Go dependency management tool experiment (deprecated)
Stars: ✭ 13,106 (+31104.76%)
Mutual labels:  dependency-manager
npmy
`npm/npx/npm link` on steroids.
Stars: ✭ 58 (+38.1%)
Mutual labels:  dependency-manager
Sampctl
The Swiss Army Knife of SA:MP - vital tools for any server owner or library maintainer.
Stars: ✭ 149 (+254.76%)
Mutual labels:  dependency-manager
kebechet
I'm Kebechet bot, goddess of freshness - I will keep your source code fresh and up-to-date
Stars: ✭ 23 (-45.24%)
Mutual labels:  dependency-manager
Psdepend
PowerShell Dependency Handler
Stars: ✭ 212 (+404.76%)
Mutual labels:  dependency-manager
py-dependency-install
A GitHub Action that installs Python package dependencies from a user-defined requirements.txt file path with optional pip, setuptools, and wheel installs/updates
Stars: ✭ 23 (-45.24%)
Mutual labels:  dependency-manager
Mbt
The most flexible build tool for monorepo
Stars: ✭ 184 (+338.1%)
Mutual labels:  dependency-manager
Cocoapods
The Cocoa Dependency Manager.
Stars: ✭ 13,503 (+32050%)
Mutual labels:  dependency-manager
slimjar
JVM Runtime Dependency Management.
Stars: ✭ 53 (+26.19%)
Mutual labels:  dependency-manager
Protodep
Collect necessary .proto files (Protocol Buffers IDL) and manage dependencies
Stars: ✭ 167 (+297.62%)
Mutual labels:  dependency-manager
vanat
🔨 Dependency Manager for Vala 🚧 App under development!
Stars: ✭ 14 (-66.67%)
Mutual labels:  dependency-manager
Ansible Role Composer
Ansible Role - Composer PHP Dependency Manager
Stars: ✭ 149 (+254.76%)
Mutual labels:  dependency-manager
mulle-bootstrap
👢 Cross platform dependency manager for developers
Stars: ✭ 39 (-7.14%)
Mutual labels:  dependency-manager
verchew
System dependency version checker.
Stars: ✭ 24 (-42.86%)
Mutual labels:  dependency-manager
poetry.el
Python dependency management and packaging in Emacs
Stars: ✭ 110 (+161.9%)
Mutual labels:  dependency-manager
comptroller
A simple and lightweight tool to manage your monorepo.
Stars: ✭ 26 (-38.1%)
Mutual labels:  dependency-manager

BinaryProvider

Travis Status

Appveyor Status

Cirrus Status

codecov.io

Basic concepts

Packages are installed to a Prefix; a folder that acts similar to the /usr/local directory on Unix-like systems, containing a bin folder for binaries, a lib folder for libraries, etc... Prefix objects can have tarballs install()'ed within them, uninstall()'ed from them, etc...

BinaryProvider has the concept of a Product, the result of a package installation. LibraryProduct and ExecutableProduct are two example Product object types that can be used to keep track of the binary objects installed by an install() invocation. Products can check to see if they are already satisfied (e.g. whether a file exists, or is executable, or is dlopen()'able), allowing for very quick and easy build.jl construction.

BinaryProvider also contains a platform abstraction layer for common operations like downloading and unpacking tarballs. The primary method you should be using to interact with these operations is through the install() method, however if you need more control, there are more fundamental methods such as download_verify(), or unpack(), or even the wittingly-named download_verify_unpack().

The method documentation within the BinaryProvider module should be considered the primary source of documentation for this package, usage examples are provided in the form of the LibFoo.jl mock package within this repository, as well as other packages that use this package for binary installation such as

Usage

To download and install a package into a Prefix, the basic syntax is:

prefix = Prefix("./deps")
install(url, tarball_hash; prefix=prefix)

It is recommended to inspect examples for a fuller treatment of installation, the LibFoo.jl package within this repository contains a deps/build.jl file that may be instructive.

To actually generate the tarballs that are installed by this package, check out the BinaryBuilder.jl package.

Miscellanea

  • This package contains a run(::Cmd) wrapper class named OutputCollector that captures the output of shell commands, and in particular, captures the stdout and stderr streams separately, colorizing, buffering and timestamping appropriately to provide seamless printing of shell output in a consistent and intuitive way. Critically, it also allows for saving of the captured streams to log files, a very useful feature for BinaryBuilder.jl, which makes extensive use of this class, however all commands run by BinaryProvider.jl also use this same mechanism to provide coloring of stderr.

  • When providing ExecutableProducts to a client package, BinaryProvider will automatically append Julia's private library directory to LD_LIBRARY_PATH on Linux, and DYLD_LIBRARY_PATH on macOS. This is due to the fact that the compiled binaries may be dependent on libraries such as libgfortran, which ship with Julia and must be found by the system linker or else the binaries will not function. If you wish to use the binaries outside of Julia, you may need to override those environment variables in a similar fashion; see the generated deps.jl file for the check_deps() function where the precise overriding values can be found.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].