117 lines
4.7 KiB
Scheme
117 lines
4.7 KiB
Scheme
;;; Gash -- Guile As SHell
|
|
;;; Copyright © 2018 Timothy Sample <samplet@ngyro.com>
|
|
;;;
|
|
;;; This file is part of Gash.
|
|
;;;
|
|
;;; Gash is free software: you can redistribute it and/or modify
|
|
;;; it under the terms of the GNU General Public License as published by
|
|
;;; the Free Software Foundation, either version 3 of the License, or
|
|
;;; (at your option) any later version.
|
|
;;;
|
|
;;; Gash is distributed in the hope that it will be useful,
|
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;;; GNU General Public License for more details.
|
|
;;;
|
|
;;; You should have received a copy of the GNU General Public License
|
|
;;; along with Gash. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
(use-modules ((gnu packages bash) #:select (bash-minimal))
|
|
(gnu packages bootstrap)
|
|
(guix build-system)
|
|
(guix build-system trivial)
|
|
(guix packages)
|
|
(guix store)
|
|
(guix utils)
|
|
(ice-9 match))
|
|
|
|
(define gash
|
|
(load (string-append (current-source-directory) "/../../guix.scm")))
|
|
|
|
(define %bootstrap-gash
|
|
(package
|
|
(inherit gash)
|
|
(build-system trivial-build-system)
|
|
(arguments
|
|
`(#:guile ,%bootstrap-guile
|
|
#:modules ((guix build utils))
|
|
#:builder
|
|
(let* ((out (assoc-ref %outputs "out"))
|
|
(source (assoc-ref %build-inputs "source"))
|
|
(guile-dir (assoc-ref %build-inputs "guile"))
|
|
(guile (string-append guile-dir "/bin/guile"))
|
|
(moddir (string-append out "/share/guile/site/"
|
|
(effective-version)))
|
|
(godir (string-append out "/lib/guile/"
|
|
(effective-version) "/site-ccache")))
|
|
(use-modules (guix build utils))
|
|
(format #t "Copying source files~%")
|
|
(copy-recursively source "source" #:log #f)
|
|
(format #t "Entering source directory~%")
|
|
(chdir "source")
|
|
(add-to-load-path (getcwd))
|
|
(format #t "Configuring gash/config.scm.in~%")
|
|
(copy-file "gash/config.scm.in" "gash/config.scm")
|
|
(substitute* "gash/config.scm"
|
|
(("@VERSION@") ,(package-version gash)))
|
|
(format #t "Configuring scripts/gash.in~%")
|
|
(copy-file "scripts/gash.in" "scripts/gash")
|
|
(substitute* "scripts/gash"
|
|
(("@GUILE@") guile)
|
|
(("@MODDIR@") moddir)
|
|
(("@GODIR@") godir))
|
|
(for-each (lambda (scm)
|
|
(let ((go (string-append (string-drop-right scm 3) "go"))
|
|
(dir (dirname scm)))
|
|
(format #t "Compiling ~a~%" scm)
|
|
(compile-file scm #:output-file go)
|
|
(format #t "Installing ~a~%" scm)
|
|
(install-file scm (string-append moddir "/" dir))
|
|
(format #t "Installing ~a~%" go)
|
|
(install-file go (string-append godir "/" dir))))
|
|
(find-files "gash" "\\.scm$"))
|
|
(format #t "Installing scripts/gash~%")
|
|
(install-file "scripts/gash" (string-append out "/bin"))
|
|
(chmod (string-append out "/bin/gash") #o555)
|
|
(symlink (string-append out "/bin/gash")
|
|
(string-append out "/bin/sh"))
|
|
(symlink (string-append out "/bin/gash")
|
|
(string-append out "/bin/bash")))))
|
|
(inputs `(("guile" ,%bootstrap-guile)))
|
|
(native-inputs '())))
|
|
|
|
(define %bootstrap-coreutils&co-without-bash
|
|
(package
|
|
(inherit %bootstrap-coreutils&co)
|
|
(arguments
|
|
(substitute-keyword-arguments (package-arguments %bootstrap-coreutils&co)
|
|
((#:builder _ #f)
|
|
`(let ((source (assoc-ref %build-inputs "source"))
|
|
(out (assoc-ref %outputs "out")))
|
|
(use-modules (guix build utils))
|
|
(copy-recursively source out)
|
|
(delete-file (string-append out "/bin/sh"))
|
|
(delete-file (string-append out "/bin/bash"))))))
|
|
(inputs
|
|
`(("source" ,%bootstrap-coreutils&co)))))
|
|
|
|
(define (%bootstrap-coreutils&co? x)
|
|
(eq? %bootstrap-coreutils&co x))
|
|
|
|
(define %boot0-inputs
|
|
(map (match-lambda
|
|
(("coreutils&co" (? %bootstrap-coreutils&co? value))
|
|
`("coreutils&co" ,%bootstrap-coreutils&co-without-bash))
|
|
(("bash" _)
|
|
`("bash" ,%bootstrap-gash))
|
|
(x x))
|
|
((@@ (gnu packages commencement) %boot0-inputs))))
|
|
|
|
(package-with-bootstrap-guile
|
|
(package-with-explicit-inputs (package
|
|
(inherit bash-minimal)
|
|
(name "bash-boot0"))
|
|
%boot0-inputs
|
|
#:guile %bootstrap-guile))
|
|
|