From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([209.51.188.92]:59631) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hSWfn-00018H-CV for guix-patches@gnu.org; Sun, 19 May 2019 21:01:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hSWfm-0006gi-1t for guix-patches@gnu.org; Sun, 19 May 2019 21:01:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:50482) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hSWfl-0006gU-RV for guix-patches@gnu.org; Sun, 19 May 2019 21:01:01 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hSWfl-0004Yn-Om for guix-patches@gnu.org; Sun, 19 May 2019 21:01:01 -0400 Subject: [bug#35318] [PATCH] Update cargo-build-system to expand package inputs Resent-Message-ID: Content-Type: multipart/mixed; boundary="Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A" Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.1\)) From: Ivan Petkov In-Reply-To: <87pnojvqdu.fsf@gnu.org> Date: Sun, 19 May 2019 18:00:01 -0700 Message-Id: <6A0A0108-A722-4D73-85B7-E61AB8230026@gmail.com> References: <87ftpsnhal.fsf@gnu.org> <2C03880B-F90E-4949-9637-DC918B6D40A0@gmail.com> <074E4899-C4FF-4A76-8E97-093378D2F8D5@gmail.com> <87pnojvqdu.fsf@gnu.org> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 35318@debbugs.gnu.org, Chris Marusich --Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi everyone! I=E2=80=99ve updated this patch series. The cargo-build-system will now = expect any crate dependencies to be listed as arguments. Specifically, regular = cargo dependencies should be specified via the #:cargo-deps parameter, and any = cargo dev-dependnecies should be specified via the #:cargo-dev-deps parameter. The cargo-build-system will traverse any inputs specified in those = parameters, and any inputs they may have in their #:cargo-deps parameter as well, extracting their package sources and adding them as native-inputs to the current bag being built. This avoids having to define new semantics for = package inputs/native-inputs for expanding all transitive sources. There are several implications of this decision: * Building a package definition does not require actually = building/checking any dependent crates. This can be a benefits: - For example, sometimes a crate may have an optional dependency on = some OS specific package which cannot be built or run on the current system. = This approach means that the build will not fail if cargo ends up internally = ignoring the dependency. - It avoids waiting for quadratic builds from source: cargo always = builds dependencies within the current workspace. This is largely due to Rust = not having a stable ABI and other resolutions that cargo applies. This = means that if we have a depencency chain of X -> Y -> Z and we build each = definition independently the following will happen: * Cargo will build and test crate Z * Cargo will build crate Z in Y's workspace, then build and test Y * Cargo will build crates Y and Z in X's workspace, then build and = test X * But there are also some downsides with this approach: - If a dependent crate is subtly broken on the system (i.e. it builds = but its tests fail) the consuming crates may build and test successfully but actually fail during normal usage (however, the CI will still build = all packages which will give visibility in case packages suddenly break). - Because crates aren't declared as regular inputs, other Guix = facilities such as tracking package graphs may not work by default (however, this = is something that can always be extended or reworked in the future). Please let me know if anything is unclear, I=E2=80=99m happy to = elaborate if needed! Thanks, =E2=80=94Ivan --Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A Content-Disposition: attachment; filename=0001-build-system-cargo-expand-transitive-crate-sources.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-build-system-cargo-expand-transitive-crate-sources.patch" Content-Transfer-Encoding: quoted-printable =46rom=205457f60036ce1354b4b89b9c3c423cca14e3a777=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Ivan=20Petkov=20=0A= Date:=20Tue,=2016=20Apr=202019=2003:37:44=20-0700=0ASubject:=20[PATCH=20= 1/8]=20build-system/cargo:=20expand=20transitive=20crate=20sources=0A=0A= *=20guix/build/cargo:=20(package-cargo-deps):=20Add=20it.=0A= (package-cargo-dev-deps):=20Add=20it.=0A(cargo-transitive-deps):=20Add=20= it.=0A(expand-crate-sources):=20Add=20it.=0A(lower):=20New=20cargo-deps=20= nd=20cargo-dev-deps=20keywords.=0AUse=20expand-crate-sources.=0A= (private-keywords):=20Add=20new=20keywords.=0A---=0A=20= guix/build-system/cargo.scm=20|=20115=20= +++++++++++++++++++++++++++++++++++-=0A=201=20file=20changed,=20114=20= insertions(+),=201=20deletion(-)=0A=0Adiff=20--git=20= a/guix/build-system/cargo.scm=20b/guix/build-system/cargo.scm=0Aindex=20= dc137421e9..c1bfd13b2f=20100644=0A---=20a/guix/build-system/cargo.scm=0A= +++=20b/guix/build-system/cargo.scm=0A@@=20-29,6=20+29,8=20@@=0A=20=20=20= #:use-module=20(guix=20build-system)=0A=20=20=20#:use-module=20(guix=20= build-system=20gnu)=0A=20=20=20#:use-module=20(ice-9=20match)=0A+=20=20= #:use-module=20(ice-9=20vlist)=0A+=20=20#:use-module=20(srfi=20srfi-1)=0A= =20=20=20#:use-module=20(srfi=20srfi-26)=0A=20=20=20#:export=20= (%cargo-build-system-modules=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= %cargo-utils-modules=0A@@=20-121,15=20+123,125=20@@=20to=20NAME=20and=20= VERSION."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#:outputs=20(cons=20"src"=20outputs)=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:guile-for-build=20guile-for-build))=0A=20=0A= +(define=20(package-cargo-deps=20p)=0A+=20=20(apply=0A+=20=20=20=20= (lambda*=20(#:key=20(cargo-deps=20'())=20#:allow-other-keys)=0A+=20=20=20= =20=20=20cargo-deps)=0A+=20=20=20=20(package-arguments=20p)))=0A+=0A= +(define=20(package-cargo-dev-deps=20p)=0A+=20=20(apply=0A+=20=20=20=20= (lambda*=20(#:key=20(cargo-dev-deps=20'())=20#:allow-other-keys)=0A+=20=20= =20=20=20=20cargo-dev-deps)=0A+=20=20=20=20(package-arguments=20p)))=0A+=0A= +(define=20(crate-transitive-deps=20inputs)=0A+=20=20"Return=20the=20= closure=20of=20INPUTS=20when=20considering=20the=20'cargo-deps'=20and=0A= +'cargod-dev-deps'=20edges.=20=20Omit=20duplicate=20inputs,=20except=20= for=20those=0A+already=20present=20in=20INPUTS=20itself.=0A+=0A+This=20= is=20implemented=20as=20a=20breadth-first=20traversal=20such=20that=20= INPUTS=20is=0A+preserved,=20and=20only=20duplicate=20extracted=20inputs=20= are=20removed.=0A+=0A+Forked=20from=20((guix=20packages)=20= transitive-inputs)=20since=20this=20extraction=0A+uses=20slightly=20= different=20rules=20compared=20to=20the=20rest=20of=20Guix=20(i.e.=20we=0A= +do=20not=20extract=20the=20conventional=20inputs)."=0A+=20=20(define=20= (seen?=20seen=20item)=0A+=20=20=20=20;;=20FIXME:=20We're=20using=20= pointer=20identity=20here,=20which=20is=20extremely=20sensitive=0A+=20=20= =20=20;;=20to=20memoization=20in=20package-producing=20procedures;=20see=0A= +=20=20=20=20;;=20.=0A+=20=20=20=20= (vhash-assq=20item=20seen))=0A+=0A+=20=20(let=20loop=20((inputs=20=20=20=20= =20inputs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(result=20=20=20=20=20= '())=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(propagated=20'())=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20(first?=20=20=20=20=20#t)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20(seen=20=20=20=20=20=20=20vlist-null))=0A+=20=20= =20=20(match=20inputs=0A+=20=20=20=20=20=20(()=0A+=20=20=20=20=20=20=20= (if=20(null?=20propagated)=0A+=20=20=20=20=20=20=20=20=20=20=20(reverse=20= result)=0A+=20=20=20=20=20=20=20=20=20=20=20(loop=20(reverse=20= (concatenate=20propagated))=20result=20'()=20#f=20seen)))=0A+=20=20=20=20= =20=20(((and=20input=20(label=20(?=20package?=20package)))=20rest=20...)=0A= +=20=20=20=20=20=20=20(if=20(and=20(not=20first?)=20(seen?=20seen=20= package))=0A+=20=20=20=20=20=20=20=20=20=20=20(loop=20rest=20result=20= propagated=20first?=20seen)=0A+=20=20=20=20=20=20=20=20=20=20=20(loop=20= rest=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cons=20input=20= result)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cons=20= (package-cargo-deps=20package)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20propagated)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20first?=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(vhash-consq=20package=20package=20seen))))=0A+=20=20=20=20=20=20= ((input=20rest=20...)=0A+=20=20=20=20=20=20=20(loop=20rest=20(cons=20= input=20result)=20propagated=20first?=20seen)))))=0A+=0A+(define=20= (expand-crate-sources=20cargo-deps=20cargo-dev-deps)=0A+=20=20"Extract=20= all=20transitive=20sources=20for=20CARGO-DEPS=20and=20CARGO-DEV-DEPS=20= along=20their=0A+'cargo-deps'=20edges.=0A+=0A+Cargo=20requires=20all=20= transitive=20crate=20dependencies'=20sources=20to=20be=20available=0A+in=20= its=20index,=20even=20if=20they=20are=20optional=20(this=20is=20so=20it=20= can=20generate=0A+deterministic=20Cargo.lock=20files=20regardless=20of=20= the=20target=20platform=20or=20enabled=0A+features).=20Thus=20we=20need=20= all=20transitive=20crate=20dependencies=20for=20any=20cargo=0A= +dev-dependencies,=20but=20this=20is=20only=20needed=20when=20= building/testing=20a=20crate=20directly=0A+(i.e.=20we=20will=20never=20= need=20transitive=20dev-dependencies=20for=20any=20dependency=20crates).=0A= +=0A+Another=20complication=20arises=20due=20potential=20dependency=20= cycles=20from=20Guix's=0A+perspective:=20Although=20cargo=20does=20not=20= permit=20cyclic=20dependencies=20between=20crates,=0A+however,=20it=20= permits=20cycles=20to=20occur=20via=20dev-dependencies.=20For=20example,=20= if=20crate=0A+X=20depends=20on=20crate=20Y,=20crate=20Y's=20tests=20= could=20pull=20in=20crate=20X=20to=20to=20verify=0A+everything=20builds=20= properly=20(this=20is=20a=20rare=20scenario,=20but=20it=20it=20happens=20= for=0A+example=20with=20the=20`proc-macro2`=20and=20`quote`=20crates).=20= This=20is=20allowed=20by=20cargo=0A+because=20tests=20are=20built=20as=20= a=20pseudo-crate=20which=20happens=20to=20depend=20on=20the=0A+X=20and=20= Y=20crates,=20forming=20an=20acyclic=20graph.=0A+=0A+We=20can=20side=20= step=20this=20problem=20by=20only=20considering=20regular=20cargo=20= dependencies=0A+since=20they=20are=20guaranteed=20to=20not=20have=20= cycles.=20We=20can=20further=20resolve=20any=0A+potential=20= dev-dependency=20cycles=20by=20extracting=20package=20sources=20(which=20= never=20have=0A+any=20dependencies=20and=20thus=20no=20cycles=20can=20= exist).=0A+=0A+There=20are=20several=20implications=20of=20this=20= decision:=0A+*=20Building=20a=20package=20definition=20does=20not=20= require=20actually=20building/checking=0A+any=20dependent=20crates.=20= This=20can=20be=20a=20benefits:=0A+=20-=20For=20example,=20sometimes=20a=20= crate=20may=20have=20an=20optional=20dependency=20on=20some=20OS=0A+=20= specific=20package=20which=20cannot=20be=20built=20or=20run=20on=20the=20= current=20system.=20This=0A+=20approach=20means=20that=20the=20build=20= will=20not=20fail=20if=20cargo=20ends=20up=20internally=20ignoring=0A+=20= the=20dependency.=0A+=20-=20It=20avoids=20waiting=20for=20quadratic=20= builds=20from=20source:=20cargo=20always=20builds=0A+=20dependencies=20= within=20the=20current=20workspace.=20This=20is=20largely=20due=20to=20= Rust=20not=0A+=20having=20a=20stable=20ABI=20and=20other=20resolutions=20= that=20cargo=20applies.=20This=20means=20that=0A+=20if=20we=20have=20a=20= depencency=20chain=20of=20X=20->=20Y=20->=20Z=20and=20we=20build=20each=20= definition=0A+=20independently=20the=20following=20will=20happen:=0A+=20=20= *=20Cargo=20will=20build=20and=20test=20crate=20Z=0A+=20=20*=20Cargo=20= will=20build=20crate=20Z=20in=20Y's=20workspace,=20then=20build=20and=20= test=20Y=0A+=20=20*=20Cargo=20will=20build=20crates=20Y=20and=20Z=20in=20= X's=20workspace,=20then=20build=20and=20test=20X=0A+*=20But=20there=20= are=20also=20some=20downsides=20with=20this=20approach:=0A+=20=20-=20If=20= a=20dependent=20crate=20is=20subtly=20broken=20on=20the=20system=20(i.e.=20= it=20builds=20but=20its=0A+=20=20tests=20fail)=20the=20consuming=20= crates=20may=20build=20and=20test=20successfully=20but=0A+=20=20actually=20= fail=20during=20normal=20usage=20(however,=20the=20CI=20will=20still=20= build=20all=0A+=20=20packages=20which=20will=20give=20visibility=20in=20= case=20packages=20suddenly=20break).=0A+=20=20-=20Because=20crates=20= aren't=20declared=20as=20regular=20inputs,=20other=20Guix=20facilities=0A= +=20=20such=20as=20tracking=20package=20graphs=20may=20not=20work=20by=20= default=20(however,=20this=20is=0A+=20=20something=20that=20can=20always=20= be=20extended=20or=20reworked=20in=20the=20future)."=0A+=20=20= (filter-map=0A+=20=20=20=20(match-lambda=0A+=20=20=20=20=20=20((label=20= (?=20package?=20p))=0A+=20=20=20=20=20=20=20(list=20label=20= (package-source=20p)))=0A+=20=20=20=20=20=20((label=20input)=0A+=20=20=20= =20=20=20=20(list=20label=20input)))=0A+=20=20=20=20= (crate-transitive-deps=20(append=20cargo-deps=20cargo-dev-deps))))=0A+=0A= =20(define*=20(lower=20name=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#:key=20source=20inputs=20native-inputs=20outputs=20system=20= target=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(rust=20= (default-rust))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cargo-deps=20'())=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cargo-dev-deps=20'())=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20#:allow-other-keys=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:rest=20arguments)=0A=20=20=20"Return=20a=20bag=20for=20NAME."=0A=20=0A=20= =20=20(define=20private-keywords=0A-=20=20=20=20'(#:source=20#:target=20= #:rust=20#:inputs=20#:native-inputs=20#:outputs))=0A+=20=20=20=20= '(#:source=20#:target=20#:rust=20#:inputs=20#:native-inputs=20#:outputs=0A= +=20=20=20=20=20=20#:cargo-deps=20#:cargo-dev-deps))=0A=20=0A=20=20=20= (and=20(not=20target)=20;;=20TODO:=20support=20cross-compilation=0A=20=20= =20=20=20=20=20=20(bag=0A@@=20-145,6=20+257,7=20@@=20to=20NAME=20and=20= VERSION."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20,@(standard-packages)))=0A=20=20=20=20=20=20=20=20=20=20= (build-inputs=20`(("cargo"=20,rust=20"cargo")=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20("rustc"=20,rust)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ,@(expand-crate-sources=20cargo-deps=20cargo-dev-deps)=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ,@native-inputs))=0A=20=20=20=20=20=20=20=20=20=20(outputs=20outputs)=0A=20= =20=20=20=20=20=20=20=20=20(build=20cargo-build)=0A--=20=0A2.21.0=0A=0A= --Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A Content-Disposition: attachment; filename=0002-build-system-cargo-use-sources-from-package-sources.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0002-build-system-cargo-use-sources-from-package-sources.patch" Content-Transfer-Encoding: quoted-printable =46rom=203aa329c44b7ebff26dd98276ab268ee120cf9bba=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Ivan=20Petkov=20=0A= Date:=20Thu,=2016=20May=202019=2023:02:12=20-0700=0ASubject:=20[PATCH=20= 2/8]=20build-system/cargo:=20use=20sources=20from=20package=20sources=0A=0A= *=20guix/build/cargo-build-system:=20(configure):=20Expand=20crate=20= tarballs=20in=0Avendor=20directory.=0A---=0A=20= guix/build/cargo-build-system.scm=20|=2019=20+++++++++++++------=0A=201=20= file=20changed,=2013=20insertions(+),=206=20deletions(-)=0A=0Adiff=20= --git=20a/guix/build/cargo-build-system.scm=20= b/guix/build/cargo-build-system.scm=0Aindex=209f44bd6ee9..44ad9744ce=20= 100644=0A---=20a/guix/build/cargo-build-system.scm=0A+++=20= b/guix/build/cargo-build-system.scm=0A@@=20-67,14=20+67,21=20@@=0A=20=20=20= (for-each=0A=20=20=20=20=20(match-lambda=0A=20=20=20=20=20=20=20((name=20= .=20path)=0A-=20=20=20=20=20=20=20(let*=20((rust-share=20(string-append=20= path=20"/share/rust-source"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (basepath=20(basename=20path))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(link-dir=20(string-append=20vendor-dir=20"/"=20basepath)))=0A-=20=20=20= =20=20=20=20=20=20(and=20(file-exists?=20rust-share)=0A+=20=20=20=20=20=20= =20(let*=20((basepath=20(basename=20path))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(crate-dir=20(string-append=20vendor-dir=20"/"=20= basepath)))=0A+=20=20=20=20=20=20=20=20=20(and=20(string-suffix?=20= ".crate"=20path)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Gracefully=20handle=20duplicate=20inputs=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(not=20(file-exists?=20link-dir))=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(symlink=20rust-share=20link-dir)))))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(not=20(file-exists?=20crate-dir))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(mkdir-p=20crate-dir)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Cargo=20crates=20are=20simply=20gzipped=20= tarballs=20but=20with=20a=20.crate=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20;;=20extension.=20We=20expand=20the=20source=20to=20a=20directory=20= name=20we=20control=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20so=20= that=20we=20can=20generate=20any=20cargo=20checksums.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20The=20--strip-components=20argument=20is=20= needed=20to=20prevent=20creating=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20an=20extra=20directory=20within=20`crate-dir`.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(invoke=20"tar"=20"xvf"=20path=20"-C"=20= crate-dir=20"--strip-components"=20"1")=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(generate-checksums=20crate-dir=20"/dev/null")))))=0A=20=20=20= =20=20inputs)=0A+=0A=20=20=20;;=20Configure=20cargo=20to=20actually=20= use=20this=20new=20directory.=0A=20=20=20(mkdir-p=20".cargo")=0A=20=20=20= (let=20((port=20(open-file=20".cargo/config"=20"w"=20#:encoding=20= "utf-8")))=0A--=20=0A2.21.0=0A=0A= --Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A Content-Disposition: attachment; filename=0003-build-system-cargo-don-t-copy-source-as-an-output.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0003-build-system-cargo-don-t-copy-source-as-an-output.patch" Content-Transfer-Encoding: quoted-printable =46rom=205615665eafdc3a543e0eb4ec1ed84f7c38475446=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Ivan=20Petkov=20=0A= Date:=20Thu,=2016=20May=202019=2023:05:50=20-0700=0ASubject:=20[PATCH=20= 3/8]=20build-system/cargo:=20don't=20copy=20source=20as=20an=20output=0A=0A= *=20guix/build-system/cargo:=20= (cargo-build)[build-expression->derivation]:=0ADon't=20add=20"src"=20= output.=0A*=20guix/build/cargo-build-system:=20(install-source):=20= Delete=20it.=0A(%standard-phases):=20Delete=20'install-source.=0A---=0A=20= guix/build-system/cargo.scm=20=20=20=20=20=20=20|=20=202=20+-=0A=20= guix/build/cargo-build-system.scm=20|=2021=20+--------------------=0A=20= 2=20files=20changed,=202=20insertions(+),=2021=20deletions(-)=0A=0Adiff=20= --git=20a/guix/build-system/cargo.scm=20b/guix/build-system/cargo.scm=0A= index=20c1bfd13b2f..fb24ea9892=20100644=0A---=20= a/guix/build-system/cargo.scm=0A+++=20b/guix/build-system/cargo.scm=0A@@=20= -120,7=20+120,7=20@@=20to=20NAME=20and=20VERSION."=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20#:inputs=20inputs=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:system=20system=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20#:modules=20imported-modules=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:outputs=20(cons=20"src"=20outputs)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:outputs=20= outputs=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#:guile-for-build=20= guile-for-build))=0A=20=0A=20(define=20(package-cargo-deps=20p)=0Adiff=20= --git=20a/guix/build/cargo-build-system.scm=20= b/guix/build/cargo-build-system.scm=0Aindex=2044ad9744ce..26d474c9b5=20= 100644=0A---=20a/guix/build/cargo-build-system.scm=0A+++=20= b/guix/build/cargo-build-system.scm=0A@@=20-79,7=20+79,7=20@@=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20The=20--strip-components=20= argument=20is=20needed=20to=20prevent=20creating=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20an=20extra=20directory=20within=20`crate-dir`.=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(invoke=20"tar"=20"xvf"=20= path=20"-C"=20crate-dir=20"--strip-components"=20"1")=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(generate-checksums=20crate-dir=20= "/dev/null")))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (generate-checksums=20crate-dir)))))=0A=20=20=20=20=20inputs)=0A=20=0A=20= =20=20;;=20Configure=20cargo=20to=20actually=20use=20this=20new=20= directory.=0A@@=20-124,24=20+124,6=20@@=20directory=20=3D=20'"=20port)=0A= =20(define=20(touch=20file-name)=0A=20=20=20(call-with-output-file=20= file-name=20(const=20#t)))=0A=20=0A-(define*=20(install-source=20#:key=20= inputs=20outputs=20#:allow-other-keys)=0A-=20=20"Install=20the=20source=20= for=20a=20given=20Cargo=20package."=0A-=20=20(let*=20((out=20(assoc-ref=20= outputs=20"out"))=0A-=20=20=20=20=20=20=20=20=20(src=20(assoc-ref=20= inputs=20"source"))=0A-=20=20=20=20=20=20=20=20=20(rsrc=20(string-append=20= (assoc-ref=20outputs=20"src")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"/share/rust-source")))=0A= -=20=20=20=20(mkdir-p=20rsrc)=0A-=20=20=20=20;;=20Rust=20doesn't=20have=20= a=20stable=20ABI=20yet.=20Because=20of=20this=0A-=20=20=20=20;;=20Cargo=20= doesn't=20have=20a=20search=20path=20for=20binaries=20yet.=0A-=20=20=20=20= ;;=20Until=20this=20changes=20we=20are=20working=20around=20this=20by=0A= -=20=20=20=20;;=20vendoring=20the=20crates'=20sources=20by=20symlinking=20= them=0A-=20=20=20=20;;=20to=20store=20paths.=0A-=20=20=20=20= (copy-recursively=20"."=20rsrc)=0A-=20=20=20=20(touch=20(string-append=20= rsrc=20"/.cargo-ok"))=0A-=20=20=20=20(generate-checksums=20rsrc)=0A-=20=20= =20=20(install-file=20"Cargo.toml"=20rsrc)=0A-=20=20=20=20#t))=0A-=0A=20= (define*=20(install=20#:key=20inputs=20outputs=20skip-build?=20= #:allow-other-keys)=0A=20=20=20"Install=20a=20given=20Cargo=20package."=0A= =20=20=20(let*=20((out=20(assoc-ref=20outputs=20"out")))=0A@@=20-163,7=20= +145,6=20@@=20directory=20=3D=20'"=20port)=0A=20(define=20= %standard-phases=0A=20=20=20(modify-phases=20gnu:%standard-phases=0A=20=20= =20=20=20(delete=20'bootstrap)=0A-=20=20=20=20(add-before=20'configure=20= 'install-source=20install-source)=0A=20=20=20=20=20(replace=20'configure=20= configure)=0A=20=20=20=20=20(replace=20'build=20build)=0A=20=20=20=20=20= (replace=20'check=20check)=0A--=20=0A2.21.0=0A=0A= --Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A Content-Disposition: attachment; filename=0004-doc-Update-cargo-build-system-parameter-docs.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0004-doc-Update-cargo-build-system-parameter-docs.patch" Content-Transfer-Encoding: quoted-printable =46rom=20e79254d9ca054dcc5c03d5e54a5206e0793ab3e7=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Ivan=20Petkov=20=0A= Date:=20Fri,=2017=20May=202019=2009:07:54=20-0700=0ASubject:=20[PATCH=20= 4/8]=20doc:=20Update=20cargo-build-system=20parameter=20docs=0A=0A*=20= doc/guix.texi:=20(Build=20Systems)[cargo-build-system]:=20Add=20= references=20to=0Athe=20#:rust,=20#:cargo-deps,=20and=20#:cargo-dev-deps=20= parameters.=0ARemove=20reference=20to=20installing=20crate=20sources.=0A= ---=0A=20doc/guix.texi=20|=2018=20++++++++++++++----=0A=201=20file=20= changed,=2014=20insertions(+),=204=20deletions(-)=0A=0Adiff=20--git=20= a/doc/guix.texi=20b/doc/guix.texi=0Aindex=20ae9ad0739e..8683a5f4ed=20= 100644=0A---=20a/doc/guix.texi=0A+++=20b/doc/guix.texi=0A@@=20-5780,10=20= +5780,20=20@@=20This=20variable=20is=20exported=20by=20@code{(guix=20= build-system=20cargo)}.=20=20It=0A=20supports=20builds=20of=20packages=20= using=20Cargo,=20the=20build=20tool=20of=20the=0A=20= @uref{https://www.rust-lang.org,=20Rust=20programming=20language}.=0A=20=0A= -In=20its=20@code{configure}=20phase,=20this=20build=20system=20replaces=20= dependencies=0A-specified=20in=20the=20@file{Cargo.toml}=20file=20with=20= inputs=20to=20the=20Guix=20package.=0A-The=20@code{install}=20phase=20= installs=20the=20binaries,=20and=20it=20also=20installs=20the=0A-source=20= code=20and=20@file{Cargo.toml}=20file.=0A+It=20adds=20@code{rustc}=20and=20= @code{cargo}=20to=20the=20set=20of=20inputs.=0A+A=20different=20Rust=20= package=20can=20be=20specified=20with=20the=20@code{#:rust}=20parameter.=0A= +=0A+Regular=20cargo=20dependencies=20should=20be=20added=20to=20the=20= package=20definition=20via=0A+the=20@code{#:cargo-deps}=20parameter=20as=20= a=20list=20of=20name=20and=20spec=20pairs,=20where=20the=0A+spec=20can=20= be=20a=20package=20or=20a=20source=20definition.=20Note=20that=20the=20= spec=20must=20evaluate=0A+to=20a=20path=20to=20a=20gzipped=20tarball=20= with=20the=20@code{.crate}=20extension,=20or=20it=20will=20be=0A= +ignored.=20Similarly,=20cargo=20dev-dependencies=20should=20be=20added=20= to=20the=20package=0A+definition=20via=20the=20@code{#:cargo-dev-deps}=20= parameter.=0A+=0A+In=20its=20@code{configure}=20phase,=20this=20build=20= system=20will=20make=20any=20source=20inputs=0A+specified=20in=20the=20= @code{#:cargo-deps}=20and=20@code{#:cargo-dev-deps}=20parameters=0A= +available=20to=20cargo.=20The=20@code{install}=20phase=20installs=20any=20= crate=20the=20binaries=0A+if=20they=20are=20defined=20by=20the=20crate.=0A= =20@end=20defvr=0A=20=0A=20@cindex=20Clojure=20(programming=20language)=0A= --=20=0A2.21.0=0A=0A= --Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A Content-Disposition: attachment; filename=0005-import-crate-import-sources-with-.crate-extension.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0005-import-crate-import-sources-with-.crate-extension.patch" Content-Transfer-Encoding: quoted-printable =46rom=20d802ae3164c6724fd831b847c468046bc32d332d=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Ivan=20Petkov=20=0A= Date:=20Fri,=2017=20May=202019=2000:25:06=20-0700=0ASubject:=20[PATCH=20= 5/8]=20import:=20crate:=20import=20sources=20with=20.crate=20extension=0A= =0A*=20guix/import/crate.scm:=20(make-crate-sexp)[file-name]:=20Use=20= .crate=20extension.=0A---=0A=20guix/import/crate.scm=20|=202=20+-=0A=201=20= file=20changed,=201=20insertion(+),=201=20deletion(-)=0A=0Adiff=20--git=20= a/guix/import/crate.scm=20b/guix/import/crate.scm=0Aindex=20= e0b400d054..24d3a7d961=20100644=0A---=20a/guix/import/crate.scm=0A+++=20= b/guix/import/crate.scm=0A@@=20-94,7=20+94,7=20@@=20VERSION,=20INPUTS,=20= NATIVE-INPUTS,=20HOME-PAGE,=20SYNOPSIS,=20DESCRIPTION,=20and=20LICENSE."=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(source=20= (origin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(method=20url-fetch)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(uri=20= (crate-uri=20,name=20version))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(file-name=20= (string-append=20name=20"-"=20version=20".tar.gz"))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (file-name=20(string-append=20name=20"-"=20version=20".crate"))=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(sha256=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(base32=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ,(bytevector->nix-base32-string=20(port-sha256=20port))))))=0A--=20=0A= 2.21.0=0A=0A= --Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A Content-Disposition: attachment; filename=0006-import-crate-define-dependencies-as-arguments.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0006-import-crate-define-dependencies-as-arguments.patch" Content-Transfer-Encoding: quoted-printable =46rom=20c81535f09c78c8008f285ab05b127a7e68b6f00b=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Ivan=20Petkov=20=0A= Date:=20Fri,=2017=20May=202019=2000:26:07=20-0700=0ASubject:=20[PATCH=20= 6/8]=20import:=20crate:=20define=20dependencies=20as=20arguments=0A=0A*=20= guix/import/crate.scm:=0A(crate-fetch)[input-crates]:=20Rename=20to=20= dev-crates.=0A[native-input-crates]:=20Rename=20to=20dev-dep-crates.=0A= [inputs]:=20Rename=20to=20cargo-deps.=0A[native-inputs]:=20Rename=20to=20= cargo-dev-deps.=0A(maybe-cargo-deps):=20Add=20it.=0A= (maybe-cargo-dev-deps):=20Add=20it.=0A(maybe-arguments):=20Add=20it.=0A= (make-crate-sexp):=20Use=20new=20procedures.=0A[inputs]:=20Rename=20to=20= cargo-deps.=0A[native-inputs]:=20Rename=20to=20cargo-dev-deps.=0A*=20= guix/import/utils.scm:=20(package-names->package-inputs):=20Make=20= public.=0AAdd=20doc=20string.=0A---=0A=20guix/import/crate.scm=20|=2043=20= ++++++++++++++++++++++++++++++++-----------=0A=20guix/import/utils.scm=20= |=20=204=20++++=0A=202=20files=20changed,=2036=20insertions(+),=2011=20= deletions(-)=0A=0Adiff=20--git=20a/guix/import/crate.scm=20= b/guix/import/crate.scm=0Aindex=2024d3a7d961..0ed683298b=20100644=0A---=20= a/guix/import/crate.scm=0A+++=20b/guix/import/crate.scm=0A@@=20-65,29=20= +65,50=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(path=20= (string-append=20"/"=20version=20"/dependencies"))=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(deps-json=20(json-fetch-alist=20(string-append=20= crate-url=20name=20path)))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (deps=20(assoc-ref=20deps-json=20"dependencies"))=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20(input-crates=20(filter=20(crate-kind-predicate=20= "normal")=20deps))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= (native-input-crates=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (dep-crates=20(filter=20(crate-kind-predicate=20"normal")=20deps))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20(dev-dep-crates=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(filter=20(lambda=20(dep)=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= ((crate-kind-predicate=20"normal")=20dep)))=20deps))=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20(inputs=20(crates->inputs=20input-crates))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20(native-inputs=20(crates->inputs=20= native-input-crates))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (cargo-deps=20(crates->inputs=20dep-crates))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20(cargo-dev-deps=20(crates->inputs=20dev-dep-crates))=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(home-page=20(match=20homepage=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (()=20repository)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(_=20homepage))))=0A=20=20=20=20=20(callback=20= #:name=20name=20#:version=20version=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#:inputs=20inputs=20#:native-inputs=20native-inputs=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20#:cargo-deps=20cargo-deps=20= #:cargo-dev-deps=20cargo-dev-deps=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#:home-page=20home-page=20#:synopsis=20synopsis=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20#:description=20description=20#:license=20= license)))=0A=20=0A-(define*=20(make-crate-sexp=20#:key=20name=20version=20= inputs=20native-inputs=0A+(define=20(maybe-cargo-deps=20package-names)=0A= +=20=20(match=20(package-names->package-inputs=20package-names)=0A+=20=20= =20=20(()=0A+=20=20=20=20=20'())=0A+=20=20=20=20((package-inputs=20...)=0A= +=20=20=20=20=20`((#:cargo-deps=20,package-inputs)))))=0A+=0A+(define=20= (maybe-cargo-dev-deps=20package-names)=0A+=20=20(match=20= (package-names->package-inputs=20package-names)=0A+=20=20=20=20(()=0A+=20= =20=20=20=20'())=0A+=20=20=20=20((package-inputs=20...)=0A+=20=20=20=20=20= `((#:cargo-dev-deps=20,package-inputs)))))=0A+=0A+(define=20= (maybe-arguments=20arguments)=0A+=20=20(match=20arguments=0A+=20=20=20=20= (()=0A+=20=20=20=20=20'())=0A+=20=20=20=20((args=20...)=0A+=20=20=20=20=20= `((arguments=20(,'quasiquote=20,args))))))=0A+=0A+(define*=20= (make-crate-sexp=20#:key=20name=20version=20cargo-deps=20cargo-dev-deps=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20home-page=20synopsis=20description=20license=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:allow-other-keys)=0A=20=20=20"Return=20the=20`package'=20s-expression=20= for=20a=20rust=20package=20with=20the=20given=20NAME,=0A-VERSION,=20= INPUTS,=20NATIVE-INPUTS,=20HOME-PAGE,=20SYNOPSIS,=20DESCRIPTION,=20and=20= LICENSE."=0A+VERSION,=20CARGO-DEPS,=20CARGO-DEV-DEPS,=20HOME-PAGE,=20= SYNOPSIS,=20DESCRIPTION,=20and=20LICENSE."=0A=20=20=20(let*=20((port=20= (http-fetch=20(crate-uri=20name=20version)))=0A=20=20=20=20=20=20=20=20=20= =20(guix-name=20(crate-name->package-name=20name))=0A-=20=20=20=20=20=20=20= =20=20(inputs=20(map=20crate-name->package-name=20inputs))=0A-=20=20=20=20= =20=20=20=20=20(native-inputs=20(map=20crate-name->package-name=20= native-inputs))=0A+=20=20=20=20=20=20=20=20=20(cargo-deps=20(map=20= crate-name->package-name=20cargo-deps))=0A+=20=20=20=20=20=20=20=20=20= (cargo-dev-deps=20(map=20crate-name->package-name=20cargo-dev-deps))=0A=20= =20=20=20=20=20=20=20=20=20(pkg=20`(package=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(name=20,guix-name)=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(version=20,version)=0A@@=20= -99,8=20+120,8=20@@=20VERSION,=20INPUTS,=20NATIVE-INPUTS,=20HOME-PAGE,=20= SYNOPSIS,=20DESCRIPTION,=20and=20LICENSE."=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(base32=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20,(bytevector->nix-base32-string=20(port-sha256=20= port))))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (build-system=20cargo-build-system)=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20,@(maybe-native-inputs=20native-inputs=20"src")=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,@(maybe-inputs=20= inputs=20"src")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20,@(maybe-arguments=20(append=20(maybe-cargo-deps=20cargo-deps)=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (maybe-cargo-dev-deps=20cargo-dev-deps)))=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(home-page=20,(match=20home-page=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(()=20"")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(_=20= home-page)))=0Adiff=20--git=20a/guix/import/utils.scm=20= b/guix/import/utils.scm=0Aindex=20516c0cfaa2..33cb9bbc36=20100644=0A---=20= a/guix/import/utils.scm=0A+++=20b/guix/import/utils.scm=0A@@=20-51,6=20= +51,7=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20url-fetch=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20guix-hash-url=0A=20=0A+=20=20=20=20=20=20=20= =20=20=20=20=20package-names->package-inputs=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20maybe-inputs=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= maybe-native-inputs=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= package->definition=0A@@=20-235,6=20+236,9=20@@=20into=20a=20proper=20= sentence=20and=20by=20using=20two=20spaces=20between=20sentences."=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20cleaned=20'pre=20".=20=20"=20'post)))=0A=20=0A=20(define*=20= (package-names->package-inputs=20names=20#:optional=20(output=20#f))=0A+=20= =20"Given=20a=20list=20of=20PACKAGE-NAMES,=20and=20an=20optional=20= OUTPUT,=20tries=20to=20generate=20a=0A+quoted=20list=20of=20inputs,=20as=20= suitable=20to=20use=20in=20an=20'inputs'=20field=20of=20a=20package=0A= +definition."=0A=20=20=20(map=20(lambda=20(input)=0A=20=20=20=20=20=20=20= =20=20=20(cons*=20input=20(list=20'unquote=20(string->symbol=20input))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(or=20(and=20output=20(list=20output))=0A--=20=0A2.21.0=0A=0A= --Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A Content-Disposition: attachment; filename=0007-gnu-crate-add-unicode-xid.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0007-gnu-crate-add-unicode-xid.patch" Content-Transfer-Encoding: quoted-printable =46rom=20990ec0caa1d8f86750fc183e85e4b7bae9dc5106=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Ivan=20Petkov=20=0A= Date:=20Tue,=2016=20Apr=202019=2003:40:14=20-0700=0ASubject:=20[PATCH=20= 7/8]=20gnu:=20crate:=20add=20unicode-xid=0A=0Agnu/local.mk:=20= (GNU_SYSTEM_MODULES):=20Add=20new=20file.=0Agnu/packages/crates-io.scm:=20= (rust-unicode-xid):=20New=20variable.=0A---=0A=20gnu/local.mk=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20|=20=201=20+=0A=20= gnu/packages/crates-io.scm=20|=2045=20= ++++++++++++++++++++++++++++++++++++++=0A=202=20files=20changed,=2046=20= insertions(+)=0A=20create=20mode=20100644=20gnu/packages/crates-io.scm=0A= =0Adiff=20--git=20a/gnu/local.mk=20b/gnu/local.mk=0Aindex=20= 694bbfd367..bfa66e0840=20100644=0A---=20a/gnu/local.mk=0A+++=20= b/gnu/local.mk=0A@@=20-121,6=20+121,7=20@@=20GNU_SYSTEM_MODULES=20=3D=09=09= =09=09\=0A=20=20=20%D%/packages/cpp.scm=20=09=09=09=09\=0A=20=20=20= %D%/packages/cppi.scm=09=09=09=09\=0A=20=20=20%D%/packages/cran.scm=09=09= =09=09\=0A+=20=20%D%/packages/crates-io.scm=09=09=09\=0A=20=20=20= %D%/packages/cross-base.scm=09=09=09\=0A=20=20=20%D%/packages/crypto.scm=09= =09=09\=0A=20=20=20%D%/packages/cryptsetup.scm=09=09=09\=0Adiff=20--git=20= a/gnu/packages/crates-io.scm=20b/gnu/packages/crates-io.scm=0Anew=20file=20= mode=20100644=0Aindex=200000000000..1440edef9b=0A---=20/dev/null=0A+++=20= b/gnu/packages/crates-io.scm=0A@@=20-0,0=20+1,45=20@@=0A+;;;=20GNU=20= Guix=20---=20Functional=20package=20management=20for=20GNU=0A+;;;=20= Copyright=20=C2=A9=202019=20Ivan=20Petkov=20=0A= +;;;=0A+;;;=20This=20file=20is=20part=20of=20GNU=20Guix.=0A+;;;=0A+;;;=20= GNU=20Guix=20is=20free=20software;=20you=20can=20redistribute=20it=20= and/or=20modify=20it=0A+;;;=20under=20the=20terms=20of=20the=20GNU=20= General=20Public=20License=20as=20published=20by=0A+;;;=20the=20Free=20= Software=20Foundation;=20either=20version=203=20of=20the=20License,=20or=20= (at=0A+;;;=20your=20option)=20any=20later=20version.=0A+;;;=0A+;;;=20GNU=20= Guix=20is=20distributed=20in=20the=20hope=20that=20it=20will=20be=20= useful,=20but=0A+;;;=20WITHOUT=20ANY=20WARRANTY;=20without=20even=20the=20= implied=20warranty=20of=0A+;;;=20MERCHANTABILITY=20or=20FITNESS=20FOR=20= A=20PARTICULAR=20PURPOSE.=20=20See=20the=0A+;;;=20GNU=20General=20Public=20= License=20for=20more=20details.=0A+;;;=0A+;;;=20You=20should=20have=20= received=20a=20copy=20of=20the=20GNU=20General=20Public=20License=0A+;;;=20= along=20with=20GNU=20Guix.=20=20If=20not,=20see=20= .=0A+=0A+(define-module=20(gnu=20packages=20= crates-io)=0A+=20=20#:use-module=20(guix=20build-system=20cargo)=0A+=20=20= #:use-module=20(guix=20download)=0A+=20=20#:use-module=20((guix=20= licenses)=20#:prefix=20license:)=0A+=20=20#:use-module=20(guix=20= packages))=0A+=0A+(define-public=20rust-unicode-xid=0A+=20=20(package=0A= +=20=20=20=20(name=20"rust-unicode-xid")=0A+=20=20=20=20(version=20= "0.1.0")=0A+=20=20=20=20(source=0A+=20=20=20=20=20=20(origin=0A+=20=20=20= =20=20=20=20=20(method=20url-fetch)=0A+=20=20=20=20=20=20=20=20(uri=20= (crate-uri=20"unicode-xid"=20version))=0A+=20=20=20=20=20=20=20=20= (file-name=0A+=20=20=20=20=20=20=20=20=20=20(string-append=20name=20"-"=20= version=20".crate"))=0A+=20=20=20=20=20=20=20=20(sha256=0A+=20=20=20=20=20= =20=20=20=20=20(base32=0A+=20=20=20=20=20=20=20=20=20=20=20=20= "1z57lqh4s18rr4x0j4fw4fmp9hf9346h0kmdgqsqx0fhjr3k0wpw"))))=0A+=20=20=20=20= (build-system=20cargo-build-system)=0A+=20=20=20=20(home-page=0A+=20=20=20= =20=20=20"https://github.com/unicode-rs/unicode-xid")=0A+=20=20=20=20= (synopsis=20"Determine=20Unicode=20XID=20related=20properties")=0A+=20=20= =20=20(description=20"Determine=20whether=20characters=20have=20the=20= XID_Start=0A+or=20XID_Continue=20properties=20according=20to=20Unicode=20= Standard=20Annex=20#31.")=0A+=20=20=20=20;;=20Dual=20licensed.=0A+=20=20=20= =20(license=20(list=20license:asl2.0=20license:expat))))=0A--=20=0A= 2.21.0=0A=0A= --Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A Content-Disposition: attachment; filename=0008-gnu-crate-Add-proc-macro2-and-quote.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0008-gnu-crate-Add-proc-macro2-and-quote.patch" Content-Transfer-Encoding: quoted-printable =46rom=20cc4008769de81015749e2af46612540dca05cea7=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Ivan=20Petkov=20=0A= Date:=20Tue,=2016=20Apr=202019=2003:42:27=20-0700=0ASubject:=20[PATCH=20= 8/8]=20gnu:=20crate:=20Add=20proc-macro2=20and=20quote=0A=0A*=20= gnu/packages/crates-io.scm:=20(rust-proc-macro2):=20New=20variable.=0A= (rust-quote):=20New=20variable.=0A---=0A=20gnu/packages/crates-io.scm=20= |=2047=20++++++++++++++++++++++++++++++++++++++=0A=201=20file=20changed,=20= 47=20insertions(+)=0A=0Adiff=20--git=20a/gnu/packages/crates-io.scm=20= b/gnu/packages/crates-io.scm=0Aindex=201440edef9b..a10128413a=20100644=0A= ---=20a/gnu/packages/crates-io.scm=0A+++=20b/gnu/packages/crates-io.scm=0A= @@=20-43,3=20+43,50=20@@=0A=20or=20XID_Continue=20properties=20according=20= to=20Unicode=20Standard=20Annex=20#31.")=0A=20=20=20=20=20;;=20Dual=20= licensed.=0A=20=20=20=20=20(license=20(list=20license:asl2.0=20= license:expat))))=0A+=0A+(define-public=20rust-proc-macro2=0A+=20=20= (package=0A+=20=20=20=20(name=20"rust-proc-macro2")=0A+=20=20=20=20= (version=20"0.4.27")=0A+=20=20=20=20(source=0A+=20=20=20=20=20=20(origin=0A= +=20=20=20=20=20=20=20=20(method=20url-fetch)=0A+=20=20=20=20=20=20=20=20= (uri=20(crate-uri=20"proc-macro2"=20version))=0A+=20=20=20=20=20=20=20=20= (file-name=0A+=20=20=20=20=20=20=20=20=20=20(string-append=20name=20"-"=20= version=20".crate"))=0A+=20=20=20=20=20=20=20=20(sha256=0A+=20=20=20=20=20= =20=20=20=20=20(base32=0A+=20=20=20=20=20=20=20=20=20=20=20=20= "05c92v787snyaq4ss16vxc9mdv6zndfgsdq8k3hnnyffmsf7ycad"))))=0A+=20=20=20=20= (build-system=20cargo-build-system)=0A+=20=20=20=20(arguments=0A+=20=20=20= =20=20=20`(#:cargo-deps=20(("rust-unicode-xid"=20,rust-unicode-xid))=0A+=20= =20=20=20=20=20=20=20#:cargo-dev-deps=20(("rust-quote"=20,rust-quote))))=0A= +=20=20=20=20(home-page=20"https://github.com/alexcrichton/proc-macro2")=0A= +=20=20=20=20(synopsis=20"Stable=20implementation=20of=20the=20upcoming=20= new=20`proc_macro`=20API")=0A+=20=20=20=20(description=20"This=20package=20= provides=20a=20stable=20implementation=20of=20the=20upcoming=20new=0A= +`proc_macro`=20API.=20=20Comes=20with=20an=20option,=20off=20by=20= default,=20to=20also=20reimplement=20itself=0A+in=20terms=20of=20the=20= upstream=20unstable=20API.")=0A+=20=20=20=20;;=20Dual=20licensed.=0A+=20=20= =20=20(license=20(list=20license:asl2.0=20license:expat))))=0A+=0A= +(define-public=20rust-quote=0A+=20=20(package=0A+=20=20=20=20(name=20= "rust-quote")=0A+=20=20=20=20(version=20"0.6.12")=0A+=20=20=20=20(source=0A= +=20=20=20=20=20=20(origin=0A+=20=20=20=20=20=20=20=20(method=20= url-fetch)=0A+=20=20=20=20=20=20=20=20(uri=20(crate-uri=20"quote"=20= version))=0A+=20=20=20=20=20=20=20=20(file-name=0A+=20=20=20=20=20=20=20=20= =20=20(string-append=20name=20"-"=20version=20".crate"))=0A+=20=20=20=20=20= =20=20=20(sha256=0A+=20=20=20=20=20=20=20=20=20=20(base32=0A+=20=20=20=20= =20=20=20=20=20=20=20=20= "1nw0klza45hf127kfyrpxsxd5jw2l6h21qxalil3hkr7bnf7kx7s"))))=0A+=20=20=20=20= (build-system=20cargo-build-system)=0A+=20=20=20=20(arguments=0A+=20=20=20= =20=20=20`(#:cargo-deps=20(("rust-proc-macro2"=20,rust-proc-macro2))))=0A= +=20=20=20=20(home-page=20"https://github.com/dtolnay/quote")=0A+=20=20=20= =20(synopsis=20"Quasi-quoting=20macro=20quote!(...)")=0A+=20=20=20=20= (description=20"Quasi-quoting=20macro=20quote!(...)")=0A+=20=20=20=20;;=20= Dual=20licensed.=0A+=20=20=20=20(license=20(list=20license:asl2.0=20= license:expat))))=0A--=20=0A2.21.0=0A=0A= --Apple-Mail=_2DFDD9DC-E612-49E6-88BC-209092ADBD5A--