aboutsummaryrefslogtreecommitdiff
path: root/guix-module-dir/hydrilla-base.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-module-dir/hydrilla-base.scm')
-rw-r--r--guix-module-dir/hydrilla-base.scm129
1 files changed, 129 insertions, 0 deletions
diff --git a/guix-module-dir/hydrilla-base.scm b/guix-module-dir/hydrilla-base.scm
new file mode 100644
index 0000000..fbee520
--- /dev/null
+++ b/guix-module-dir/hydrilla-base.scm
@@ -0,0 +1,129 @@
+;; SPDX-License-Identifier: CC0-1.0
+
+;; Copyright (C) 2022,2023 Wojtek Kosior <koszko@koszko.org>
+;;
+;; Available under the terms of Creative Commons Zero v1.0 Universal.
+
+(define-module (hydrilla-base)
+ #:use-module (ice-9 rdelim)
+ #:use-module (ice-9 regex)
+ #:use-module (guix build-system python)
+ #:use-module (guix download)
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (gnu packages check)
+ #:use-module (gnu packages license)
+ #:use-module (gnu packages python-build)
+ #:use-module (gnu packages python-check)
+ #:use-module (gnu packages python-web)
+ #:use-module (gnu packages python-xyz)
+ #:export (%source-dir
+ %pkg-info-path
+ %hydrilla-version
+ %source-tarball-name))
+
+(define %source-dir
+ (let* ((this-file (search-path %load-path "hydrilla.scm"))
+ (proj-dir (dirname (dirname this-file))))
+ (if (absolute-file-name? proj-dir)
+ proj-dir
+ (string-append (getcwd) "/" proj-dir))))
+
+;; The PKG-INFO file is generated when running `python3 -m build -s` or similar.
+;; It is also automatically included in the source release tarballs.
+(define %pkg-info-path
+ (string-append %source-dir "/src/hydrilla.egg-info/PKG-INFO"))
+
+(define %hydrilla-version
+ (if (access? %pkg-info-path R_OK)
+ (call-with-input-file %pkg-info-path
+ (lambda (port)
+ (let ((process-line
+ (lambda (self-ref)
+ (let ((match-result
+ (string-match "^Version: (.*)" (read-line port))))
+ (if match-result (match:substring match-result 1)
+ (self-ref self-ref))))))
+ (process-line process-line))))
+ "unknown"))
+
+(define %source-tarball-name
+ (string-append "hydrilla-" %hydrilla-version ".tar.gz"))
+
+(define-public python-types-requests-2.26
+ (package
+ (name "python-types-requests")
+ (version "2.26.0")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "types-requests" version))
+ (sha256
+ (base32
+ "10sq8jarr642vhw53k6zbf3hn2b8xfyrckwfngml4fj19g1whpnz"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/python/typeshed")
+ (synopsis "Typing stubs for requests")
+ (description
+ "This package provides a collection of library stubs for Python, with
+static types.")
+ (license license:asl2.0)))
+
+(define-public hydrilla-without-haketilo
+ (package
+ (name "hydrilla-without-haketilo")
+ (version %hydrilla-version)
+ (source
+ ;; setuptools_scm makes it impossible to build directly from git
+ ;; checkout. We instead build from source tarball generated under ./dist/.
+ (local-file (string-append %source-dir "/dist/" %source-tarball-name)))
+ (build-system python-build-system)
+ (arguments
+ `(#:modules ((ice-9 match)
+ (guix build utils)
+ (guix build python-build-system))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-requirements
+ (lambda _
+ (substitute* "setup.cfg"
+ (("^all = .*")
+ "all = flask>=1.1")
+ (("[ ]*haketilo = .*:.*" match)
+ (string-append "#" match)))))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "pytest"))))
+ (add-after 'wrap 'prevent-local-package-interference
+ (lambda* (#:key outputs #:allow-other-keys)
+ (match-let ((((_ . dir)) outputs))
+ (for-each (lambda (prog-name)
+ (substitute* (string-append dir "/bin/" prog-name)
+ (("^#!/.*$" shabang)
+ (string-append shabang
+ "export PYTHONNOUSERSITE=1\n"))))
+ '("hydrilla"
+ "hydrilla-server"
+ "hydrilla-builder"))))))))
+ (propagated-inputs
+ (list python-click
+ python-flask
+ python-immutables
+ python-jsonschema
+ reuse))
+ (native-inputs
+ (list python-setuptools-scm
+ python-babel
+ python-pytest
+ python-pypa-build
+ python-mypy
+ (module-ref (current-module) 'python-types-requests
+ python-types-requests-2.26)))
+ (home-page "https://hydrillabugs.koszko.org/projects/haketilo/wiki")
+ (synopsis "Block JavaScript and add custom logic to web pages")
+ (description "Haketilo HTTP proxy facilitates viewing of websites while
+having their original JavaScript replaced by user-provided scripts. Haketilo
+combines the functionalities of content blocker and user script manager. It can
+be used with its script repository, Hydrilla.")
+ (license (list license:agpl3+ license:gpl3+ license:cc0))))