;; webid-oidc, implementation of the Solid specification ;; Copyright (C) 2020, 2021 Vivien Kraus ;; This program is free software: 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, either version 3 of the ;; License, or (at your option) any later version. ;; This program 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 Affero General Public License for more details. ;; You should have received a copy of the GNU Affero General Public License ;; along with this program. If not, see . (define-module (vkraus packages webid-oidc) #:use-module (guix packages) #:use-module (guix gexp) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix build-system gnu) #:use-module (gnu packages) #:use-module (gnu packages base) #:use-module (gnu packages guile) #:use-module (gnu packages guile-xyz) #:use-module (gnu packages nettle) #:use-module (gnu packages pkg-config) #:use-module (gnu packages texinfo) #:use-module (gnu packages autotools) #:use-module (gnu packages gettext) #:use-module (gnu packages man) #:use-module (gnu packages tls)) (define-public webid-oidc-snapshot (package (name "webid-oidc-snapshot") (version "SNAPSHOT") (source "./webid-oidc-SNAPSHOT.tar.gz") (build-system gnu-build-system) (arguments '(#:modules ((guix build utils) (guix build gnu-build-system) (ice-9 rdelim) (ice-9 popen)) #:phases (modify-phases %standard-phases (add-after 'install 'wrap-program (lambda* (#:key native-inputs inputs outputs #:allow-other-keys) (define (remove-duplicates list) (define (aux selected seen-table rest) (if (null? rest) (reverse selected) (let ((next (car rest)) (rest (cdr rest))) (if (hash-ref seen-table next #f) (aux selected seen-table rest) (begin (hash-set! seen-table next #t) (aux (cons next selected) seen-table rest)))))) (aux '() (make-hash-table (length list)) list)) (let* ((out (assoc-ref outputs "out")) (the-guile (assoc-ref (or native-inputs inputs) "guile")) (the-guile-exec (format #f "~a/bin/guile" the-guile)) (effective-version (read-line (open-pipe* OPEN_READ the-guile-exec "-c" "(display (effective-version))"))) (guile-propagated-inputs (remove-duplicates (cons out (map cdr inputs)))) (mod-paths (filter file-exists? (map (lambda (prop-input) (format #f "~a/share/guile/site/~a" prop-input effective-version)) guile-propagated-inputs))) (go-paths (filter file-exists? (map (lambda (prop-input) (format #f "~a/lib/guile/~a/site-ccache" prop-input effective-version)) guile-propagated-inputs)))) (wrap-program (format #f "~a/bin/webid-oidc" out) `("GUILE_LOAD_PATH" ":" = ,mod-paths) `("GUILE_LOAD_COMPILED_PATH" ":" = ,go-paths)) (for-each (lambda (program) (wrap-program (format #f "~a/bin/webid-oidc-~a" out program) `("GUILE_LOAD_PATH" ":" = ,mod-paths) `("GUILE_LOAD_COMPILED_PATH" ":" = ,go-paths))) '(example-app hello)))))))) (native-inputs `(("pkg-config" ,pkg-config) ("guile" ,guile-3.0) ("guile-json" ,guile-json-4) ("guile-rdf" ,guile-rdf) ("guile-jsonld" ,guile-jsonld) ("texinfo" ,texinfo) ("autoconf" ,autoconf) ("autoconf-archive" ,autoconf-archive) ("automake" ,automake) ("libtool" ,libtool) ("gettext" ,gnu-gettext) ("coreutils" ,coreutils) ;; for link (wrap-program) ("help2man" ,help2man) ("which" ,which))) (inputs `(("guile" ,guile-3.0) ("guile-json" ,guile-json-4) ("guile-rdf" ,guile-rdf) ("guile-jsonld" ,guile-rdf) ("gnutls" ,gnutls) ("nettle" ,nettle))) (synopsis "") (description "") (home-page "https://labo.planete-kraus.eu/webid-oidc.git") (license license:agpl3+) (native-search-paths (list (search-path-specification (variable "LTDL_LIBRARY_PATH") (files '("lib"))))))) (define-public (webid-oidc-release version release-date commit hash) (package (inherit webid-oidc-snapshot) (name "webid-oidc") (version version) (source (origin (method git-fetch) (uri (git-reference (url "https://labo.planete-kraus.eu/webid-oidc.git") (commit commit))) (sha256 (base32 hash)) (snippet `(begin (with-output-to-file ".tarball-version" (lambda _ (format #t "~a~%" ,version))) (with-output-to-file ".tarball-release-date" (lambda _ (format #t "~a~%" ,release-date))) #t)))))) (define-public (webid-oidc-htmlize webid-oidc) (package (inherit webid-oidc) (name "webid-oidc-html") (arguments '(#:modules ((guix build utils) (guix build gnu-build-system) (ice-9 textual-ports)) #:phases (modify-phases %standard-phases (add-after 'build 'build-html (lambda* (#:key make-flags parallel-build? #:allow-other-keys) (apply invoke "make" "html" `(,@(if parallel-build? `("-j" ,(number->string (parallel-job-count))) '()) ,@make-flags)))) (add-after 'build-html 'complete-corresponding-source (lambda* (#:key make-flags parallel-build? #:allow-other-keys) (apply invoke "make" "dist" `(,@(if parallel-build? `("-j" ,(number->string (parallel-job-count))) '()) ,@make-flags)))) (replace 'install (lambda* (#:key make-flags parallel-build? outputs #:allow-other-keys) (apply invoke "make" "install-html" `(,@(if parallel-build? `("-j" ,(number->string (parallel-job-count))) '()) ,@make-flags)) (let ((version (car (string-split (call-with-input-file ".tarball-version" get-string-all) #\newline)))) (copy-file (string-append "webid-oidc-" version ".tar.gz") (string-append (assoc-ref outputs "out") "/share/doc/webid-oidc/webid-oidc.html/complete-corresponding-source.tar.gz")))))))) (synopsis "HTML documentation for webid-oidc") (description "The manual for webid-oidc is provided as a texinfo file, which is exported to HTML. Also include the complete corresponding source, as an AGPL requirement."))) (define-public (make-website webid-oidc) (file-append (webid-oidc-htmlize webid-oidc) "/share/doc/webid-oidc/webid-oidc.html"))