GithubHelp home page GithubHelp logo

emixa-d / antioxidant-fallback Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 1.2 MB

https://notabug.org/maximed/cargoless-rust-experiments/>, for when notabug is offline. No bug reports and PRs here!

License: GNU General Public License v3.0

Scheme 99.94% C 0.03% Rust 0.02%

antioxidant-fallback's Introduction

cargoless-rust-experiments

Rust without cargo, with the idea of eventually stopping wasting energy. Some WIP experiments into making rust work with Guix properly.

Currently, the Rust apps 'agate', 'castor', 'diffr', 'git-absorb', 'hexyl', 'sniffglue' and 'tealdeer' can be built, see guix.scm:

$ guix build -L . -f antioxidant-packages.scm
$ [...]/bin/hexyl
(input some lines)

Warning: some packages have been updated without checking the source code diff!

Using as a channel (for now)

After a "git pull", do:

$ guix git authenticate 020851ad649480ee4769b77a947642e993ea5956 "C1F3 3EE2 0C52 8FDB 7DD7  011F 49E3 EE22 1917 25EE" --keyring=keys

You can also use it as a channel, e.g. with the following configuration

(use-modules (guix ci))

(cons
 (channel
  (name 'antioxidated-packages)
  (url "https://notabug.org/maximed/cargoless-rust-experiments")
  (introduction
   (make-channel-introduction
    "020851ad649480ee4769b77a947642e993ea5956"
    (openpgp-fingerprint
     "C1F3 3EE2 0C52 8FDB 7DD7  011F 49E3 EE22 1917 25EE"))))
 (list (channel-with-substitutes-available
            %default-guix-channel
            "https://ci.guix.gnu.org")))

(TODO: make some vitaminated packages available, test "guix pull")

How to help

  1. Choose a Rust app or library to build.
  2. guix.scm ends with (map vitaminate/auto (list ...)). Add the package to the list.
  3. Run "guix build -L. -f guix.scm" to build it.
  4. If it builds succesfully, go back to (1) and choose something else.
  5. Fix build failures (see next section)
  6. Send a patch to https://notabug.org/maximed/cargoless-rust-experiments/pulls or [email protected].
  7. Repeat.

Which features are built?

If the package as a #:features #~'("this" "that" ...) argument, then the crate is build with features this and that and their implied features.

If the package has no such argument and Cargo.toml has a "default" feature, then the crate is built with the default feature and all its implied features.

If the package has no such argument and Cargo.toml has no "default" feature, then the crate is built with all features except "nightly" and "unstable".

(for technnical detiails, see 'make-feature-closure' and 'choose-features' in antioxidant.scm)

How to fix build failures

Build failures caused by incompatible features?

What if rust-foo requires the 'yes' feature of rust-bar, and rust-oof requires the absence of the 'yes' feature of rust-bar?

Then add a context-dependent replacement to %replacements:

  ("rust-bar" ,(package-with-rust-features rust-bar #~'() #:metatada "guix-variant=without-yes")
  	      #:for-dependent
	      ,(lambda (dependent)
	         (string=? "rust-oof" (package-name dependent))))

and enable the feature by default in %features.

Build failures caused by missing features.

Does "rust-foo" fail to build because it requires the feature "baz" of "rust-bar"? Then go to %features in guix.scm and add an entry

  ("rust-bar" ,#~'("default" "baz")).

If there's already an entry for "rust-bar", modify the existing entry to add "baz".

Build failures due to non-building features

If you see

  warning: #<<crate-mapping> true-name: "packed_simd" local-name: "packed_simd"> not found in the available crates -- this might cause the build to fail!

and

error[E0463]: can't find crate for `packed_simd`
 --> src/simd/generic.rs:1:1
  |
1 | extern crate packed_simd;
  | ^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate

the solution is probably to remove "simd" or "generic-simd" feature or such, by making the list of features explicit instead of implicit.

  ("rust-bytecount" ,#~'())

Build failures related to rust-digest

E.g.:

error[E0432]: unresolved imports `digest::BlockInput`, `digest::FixedOutputDirty`
   --> lib/lib.rs:133:14
    |
133 | use digest::{BlockInput, FixedOutputDirty, Reset, Update};
    |              ^^^^^^^^^^  ^^^^^^^^^^^^^^^^
    |              |           |
    |              |           no `FixedOutputDirty` in the root
    |              |           help: a similar name exists in the module: `FixedOutput`
    |              no `BlockInput` in the root

The fixed-length API has been removed in RustCrypto/traits#380. To solve the build failure, maybe update the crate that depends on [email protected] to a version that supports [email protected]. Alternatively, look if it rust-digest is only used when a certain feature is enabled, and if so, disable that feature.

Unstable Rust

If the crate assumes unstable rust (e.g. by using #![feature ...]), updating the crate often fixes that.

Version incompatibilities

No method named foo from bar? Try updating the crate, maybe an updated crate uses the new API version. Can be caused by over-eagerly replacing rust-syn by a newer version. Could be avoided by implementing support for multiple versions of a crate as dependencies.

Cycles

Changelog

2022-05-12: source code location of binaries can now be inferred. Previously, only src/main.rs was understood as default and crates had to set the 'target' field explicitely. But not all crates do that, e.g. rust-alloc-no-stdlib@2.

'set-platform-independent-manifest-variables' doesn't barf anymore on versions like 1.2.3+4.5.6, allowing rust-bzip2-sys to compile.

antioxidant-fallback's People

Contributors

emixa-d avatar htgoebel avatar nckx avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.