@@ 0,0 1,30 @@
+(define-module (cross-shells cross-packages)
+ #:use-module (guix records)
+ #:use-module (guix monads)
+ #:use-module (ice-9 match)
+ #:use-module (guix packages)
+ #:use-module (guix store)
+ #:use-module (guix gexp)
+ #:export (cross-package-job
+ cross-package-job-package
+ cross-package-job-system
+ cross-package-job-target))
+
+(define-record-type* <cross-package-job>
+ cross-package-job make-cross-package-job
+ cross-package-job?
+ ; The package to build
+ (package cross-package-job-package)
+ ; If #f, use the system selected by ungexping
+ (system cross-package-job-system (default #f))
+ ; If #f, use the target selected by ungexping
+ (target cross-package-job-target (default #f)))
+
+(define-gexp-compiler (compile-cross-package-job (cross-package-job <cross-package-job>)
+ gexp-system gexp-target)
+ (match-record cross-package-job <cross-package-job>
+ (package system target)
+ (with-monad %store-monad
+ (package->cross-derivation package
+ (or target gexp-target)
+ (or system gexp-system)))))