From d16a726e958aa78d5d9f3515eb18b589e27bdac1 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Thu, 24 Aug 2023 20:10:34 +0200 Subject: make it possible to build&test&use just hydrilla without haketilo --- Makefile | 15 ++++- guix-module-dir/hydrilla-base.scm | 129 ++++++++++++++++++++++++++++++++++++++ guix-module-dir/hydrilla.scm | 100 ++++++++--------------------- 3 files changed, 166 insertions(+), 78 deletions(-) create mode 100644 guix-module-dir/hydrilla-base.scm diff --git a/Makefile b/Makefile index 50c4204..5ee80ec 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,9 @@ GUIX_COMMIT := a86979b41a49a8fcdaa887970ba594dbba701226 GUIX_TM = $(GUIX) time-machine --commit=$(GUIX_COMMIT) -- -GUIX_DEVSHELL = $(GUIX_TM) shell -Df guix.scm -- +GUIX_PACKAGE_SELECTION_FLAGS = -f guix.scm + +GUIX_DEVSHELL = $(GUIX_TM) shell -D $(GUIX_PACKAGE_SELECTION_FLAGS) -- GET_VER = $$(grep '^Version:' src/hydrilla.egg-info/PKG-INFO | cut -d' ' -f2) RECORD_VER = VER="$(GET_VER)" @@ -96,13 +98,20 @@ shell-with-haketilo: dist *bash*) \ HYDRILLA_SHELL_NAME=hydrilla \ $(GUIX_TM) shell \ - --rebuild-cache -f guix.scm -- \ + --rebuild-cache \ + $(GUIX_PACKAGE_SELECTION_FLAGS) -- \ "$$SHELL_TO_USE" --rcfile ./bashrc || true;; \ *) \ - $(GUIX_TM) shell --rebuild-cache -f guix.scm -- \ + $(GUIX_TM) shell --rebuild-cache \ + $(GUIX_PACKAGE_SELECTION_FLAGS) -- \ || true;; \ esac +.PHONY: +shell-with-hydrilla-only: + $(MAKE) shell-with-haketilo \ + GUIX_PACKAGE_SELECTION_FLAGS="-e '(@ (hydrilla-base) hydrilla-without-haketilo)' -L ./guix-module-dir" + catalogs: $(GUIX_DEVSHELL) python3 setup.py compile_catalog 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 +;; +;; 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)))) diff --git a/guix-module-dir/hydrilla.scm b/guix-module-dir/hydrilla.scm index 99489d9..121b77d 100644 --- a/guix-module-dir/hydrilla.scm +++ b/guix-module-dir/hydrilla.scm @@ -4,61 +4,28 @@ ;; ;; Available under the terms of Creative Commons Zero v1.0 Universal. -(define-module (hydrilla)) - -(use-modules - (ice-9 rdelim) - (ice-9 regex)) - -(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")) - -(use-modules - (guix packages) - (guix download) - (guix git-download) - (guix build-system python) - (guix gexp) - ((guix licenses) #:prefix license:) - (gnu packages python-build) - (gnu packages python-xyz) - (gnu packages python-crypto) - (gnu packages compression) - (gnu packages python-compression) - (gnu packages xdisorg) - (gnu packages serialization) - (gnu packages protobuf) - (gnu packages python-web) - (gnu packages check) - (gnu packages sphinx) - (gnu packages python-check) - (gnu packages license) - (gnu packages gnupg)) +(define-module (hydrilla) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix build-system python) + #:use-module (guix gexp) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages python-build) + #:use-module (gnu packages python-xyz) + #:use-module (gnu packages python-crypto) + #:use-module (gnu packages compression) + #:use-module (gnu packages python-compression) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages serialization) + #:use-module (gnu packages protobuf) + #:use-module (gnu packages python-web) + #:use-module (gnu packages check) + #:use-module (gnu packages sphinx) + #:use-module (gnu packages python-check) + #:use-module (gnu packages license) + #:use-module (gnu packages gnupg) + #:use-module (hydrilla-base)) (define-public python-kaitaistruct (package @@ -245,24 +212,6 @@ replay web traffic such as HTTP/1, HTTP/2, WebSockets, or any other SSL/TLS-protected protocols.") (license license:expat))) -(define-public python-types-requests - (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 (package (name "hydrilla") @@ -270,7 +219,7 @@ static types.") (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))) + (local-file (string-append %source-dir "/dist/" %source-tarball-name))) (build-system python-build-system) (arguments `(#:modules ((ice-9 match) @@ -311,7 +260,7 @@ static types.") python-pytest python-pypa-build python-mypy - 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 @@ -319,3 +268,4 @@ 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)))) + -- cgit v1.2.3