Initial commit.
This commit is contained in:
commit
878d52ee27
26 changed files with 3341 additions and 0 deletions
62
ebuild/bash-utils.scm
Normal file
62
ebuild/bash-utils.scm
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; bash-utils.scm
|
||||
;; Copyright (C) 2025 Cor Legemaat <cor@cor.za.net>
|
||||
;;
|
||||
;; This file is part of ebuild-autogen: you can redistribute it and/or modify it
|
||||
;; under the terms of the GNU Affero General Public License as published by the
|
||||
;; Free Software Foundation, version 3 of the License.
|
||||
;;
|
||||
;; ebuild-autogen 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
|
||||
;; ebuild-autogen. If not, see <https://www.gnu.org/licenses/>.
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
(define-module (ebuild bash-utils)
|
||||
#:use-module (rnrs io ports)
|
||||
#:use-module (ice-9 expect)
|
||||
#:use-module (ice-9 popen)
|
||||
#:use-module (ice-9 rdelim))
|
||||
|
||||
(define-public bash-source-vars
|
||||
(lambda (source var-list)
|
||||
""
|
||||
(let* ((in-pipe (pipe))
|
||||
(out-pipe (pipe O_NONBLOCK))
|
||||
(pid (spawn "bash" '("bash")
|
||||
#:input (car in-pipe)
|
||||
#:output (cdr out-pipe)))
|
||||
(answ '())
|
||||
(expect-port (car out-pipe))
|
||||
(expect-timeout 1))
|
||||
;; Make line buffered.
|
||||
(setvbuf (cdr in-pipe) 'line)
|
||||
(setvbuf (cdr out-pipe) 'line)
|
||||
;; Do the sourcing stuff.
|
||||
(write-line source (cdr in-pipe))
|
||||
;; Eliminate extra data to stdout from sourcing.
|
||||
(write-line "echo \"Done sourcing!\"" (cdr in-pipe))
|
||||
(expect ((lambda (s eof?)
|
||||
(string=? s "Done sourcing!\n"))
|
||||
(lambda () #t)))
|
||||
;; Read the variables.
|
||||
(set! answ
|
||||
(map (lambda (var)
|
||||
(write-line (string-append "echo \"${"
|
||||
var
|
||||
"}\"") (cdr in-pipe))
|
||||
(cons var (get-line (car out-pipe))))
|
||||
var-list))
|
||||
;; Tel bash to exit.
|
||||
(write-line "exit 0" (cdr in-pipe))
|
||||
;; Close my side of the pipes
|
||||
(close-port (car in-pipe))
|
||||
(close-port (cdr out-pipe))
|
||||
;; Close bash's side of the pipes.
|
||||
(close-port (cdr in-pipe))
|
||||
(close-port (car out-pipe))
|
||||
;; Finish.
|
||||
(waitpid pid)
|
||||
answ)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue