diff --git a/gnu/packages/noweb.scm b/gnu/packages/noweb.scm index d218d8cc68..32f971386b 100644 --- a/gnu/packages/noweb.scm +++ b/gnu/packages/noweb.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Ludovic Courtès ;;; Copyright © 2020 Tobias Geerinckx-Rice +;;; Copyright © 2023 Peter Kourzanov ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,7 +23,13 @@ (define-module (gnu packages noweb) #:use-module (guix git-download) #:use-module (guix build-system gnu) #:use-module (guix licenses) - #:use-module (gnu packages perl)) + #:use-module (gnu packages) + #:use-module (gnu packages perl) + #:use-module (gnu packages base) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages tex) + #:use-module (gnu packages gawk) + #:use-module (gnu packages unicon)) (define-public noweb (package @@ -109,3 +116,85 @@ (define-public noweb (license (list bsd-2 ; dual-licenced under this and… (fsf-free "https://www.cs.tufts.edu/~nr/noweb/#copyright"))))) + +(define-public noweb-icon + (package + (name "noweb-icon") + (version "master") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/nrnrnr/noweb") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1pi6a4j240czxx5zifify316v392c690f2kdyfa3mbnm7svm6bkn")) + (patches (search-patches "noweb.patch")))) + (build-system gnu-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'bind-early + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin"))) + (substitute* (list "src/lib/nwmtime" + "src/shell/htmltoc") + (("exec perl ") + (format #f "exec ~a " (which "perl")))) + (substitute* "src/shell/noweb" + ((" cpif ") + (format #f " ~a/cpif " bin))) + #t))) + (replace 'build + (lambda* (#:key outputs inputs build-targets #:allow-other-keys) + (let* ((inc1 (assoc-ref inputs "freetype")) + (e1 (getenv "C_INCLUDE_PATH")) + (e2 (getenv "CPLUS_INCLUDE_PATH"))) + (setenv "C_INCLUDE_PATH" + (string-append inc1 "/include/freetype2" + (if e1 (string-append ":" e1) ""))) + (setenv "CPLUS_INCLUDE_PATH" + (string-append inc1 "/include/freetype2" + (if e2 (string-append ":" e2) ""))) + (invoke "make" "boot") + (invoke "make" "all") + ))) + (add-before 'install 'pre-install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (mkdir-p (string-append out "/share/texmf/tex/latex")) + #t))) + (replace 'configure + (lambda _ + ;; Jump in the source. + (chdir "src") + #t))) + #:make-flags (let ((out (assoc-ref %outputs "out"))) + (list (string-append "GITVERSION=master") + (string-append "CFLAGS=-O3") + (string-append "LIBSRC=icon") + (string-append "ICONC=iconc") + (string-append "BIN=" out "/bin") + (string-append "LIB=" out "/lib") + (string-append "MAN=" out "/share/man") + (string-append "TEXINPUTS=" out + "/share/texmf/tex/latex"))) + #:tests? #f)) ; no tests + (native-inputs (list unicon freetype texlive-bin gawk coreutils diffutils)) + (inputs (list perl)) + (home-page "https://www.cs.tufts.edu/~nr/noweb/") + (synopsis "(faster version of the) Literate programming tool") + (description + "Noweb is designed to meet the needs of literate programmers while +remaining as simple as possible. Its primary advantages are simplicity, +extensibility, and language-independence—especially noticeable when compared +with other literate-programming tools. noweb uses 5 control sequences to +WEB's 27. The noweb manual is only 4 pages; an additional page explains how +to customize its LaTeX output. noweb works “out of the box” with any +programming language, and supports TeX, LaTeX, HTML, and troff back ends. +This version is compiled with (un)Icon support, giving better performance.") + (license + (list bsd-2 ; dual-licenced under this and… + (fsf-free "https://www.cs.tufts.edu/~nr/noweb/#copyright"))))) diff --git a/gnu/packages/patches/noweb.patch b/gnu/packages/patches/noweb.patch new file mode 100644 index 0000000000..e8bcb326f2 --- /dev/null +++ b/gnu/packages/patches/noweb.patch @@ -0,0 +1,30 @@ +diff --git a/src/Makefile b/src/Makefile +index 389f296..fc15721 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -10,7 +10,10 @@ LIBSRC=awk + # If you are lucky enough to have an Icon compiler icont, use ICONC=iconc + ICONC=icont + ICONT=icont ++ ++ifeq ($(GITVERSION),) + GITVERSION=`./gitversion` ++endif + + # BIN is where the commands (notangle, noweave, nountangle, noroots) land + # LIB is where the pieces of the pipes (nt, markup, unmarkup) are stored +diff --git a/src/c/Makefile b/src/c/Makefile +index ed7b72f..78af774 100644 +--- a/src/c/Makefile ++++ b/src/c/Makefile +@@ -93,8 +93,8 @@ fakepretty: $(FPOBJS) + $(CC) $(CFLAGS) -o $@ $(FPOBJS) + + +-gitversion.c: ../gitversion ../../.git/refs/heads/master +- echo 'const char gitversion[] = "'"$$(../gitversion -prefix)"'";' > $@ ++gitversion.c: #../gitversion ../../.git/refs/heads/master ++ echo 'const char gitversion[] = "'"$$GITVERSION"'";' > $@ + + + columns.o: columns.h diff --git a/gnu/packages/patches/unicon.patch b/gnu/packages/patches/unicon.patch new file mode 100644 index 0000000000..c327221cd3 --- /dev/null +++ b/gnu/packages/patches/unicon.patch @@ -0,0 +1,13 @@ +diff --git a/src/h/config.h b/src/h/config.h +index bd4bc0bd..dd444101 100644 +--- a/src/h/config.h ++++ b/src/h/config.h +@@ -800,7 +800,7 @@ Deliberate Syntax Error + #endif /* LibSuffix */ + + #ifndef CComp +- #define CComp "cc" ++ #define CComp "gcc" + #endif /* CComp */ + + #ifndef COpts diff --git a/gnu/packages/unicon.scm b/gnu/packages/unicon.scm new file mode 100644 index 0000000000..9b9376ee39 --- /dev/null +++ b/gnu/packages/unicon.scm @@ -0,0 +1,101 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Ludovic Courtès +;;; Copyright © 2023 Peter Kourzanov +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix 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. +;;; +;;; GNU Guix 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 GNU Guix. If not, see . + +(define-module (gnu packages unicon) +#:use-module (guix gexp) +#:use-module (guix git) +#:use-module (guix packages) +#:use-module (guix download) +#:use-module (guix git-download) +#:use-module (guix git-authenticate) +#:use-module (guix build-system gnu) +#:use-module (gnu packages) +#:use-module (gnu packages base) +#:use-module (gnu packages bash) +#:use-module (gnu packages autotools) +#:use-module (gnu packages databases) +#:use-module (gnu packages xiph) +#:use-module (gnu packages audio) +#:use-module (gnu packages xorg) +#:use-module (gnu packages gl) +#:use-module (gnu packages tls) +#:use-module (gnu packages image) +#:use-module (gnu packages video) +#:use-module (gnu packages sdl) +#:use-module (gnu packages dbm) +#:use-module (gnu packages fontutils) +#:use-module ((guix licenses) #:prefix lic:) +) + +(define-public unicon + (package + (name "unicon") + (version "master") + (source (git-checkout + (url "https://git.code.sf.net/p/unicon/unicon") + (branch version))) + (build-system gnu-build-system) + (arguments + (list #:tests? #f + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'patches + (lambda* (#:key inputs #:allow-other-keys) + (let ((patch (assoc-ref inputs "patch"))) + (invoke "patch" "-p1" "--force" "-i" patch) + ))) + (add-before 'configure 'adjust-includes + (lambda* (#:key inputs #:allow-other-keys) + (let* ((inc1 (assoc-ref inputs "freetype")) + (inc2 (assoc-ref inputs "libsmpeg")) + (inc3 (assoc-ref inputs "sdl")) + (e1 (getenv "C_INCLUDE_PATH")) + (e2 (getenv "CPLUS_INCLUDE_PATH")) + ) + (setenv "C_INCLUDE_PATH" + (string-append inc1 "/include/freetype2:" + inc2 "/include/smpeg:" + inc3 "/include/SDL" + (if e1 (string-append ":" e1) ""))) + (setenv "CPLUS_INCLUDE_PATH" + (string-append inc1 "/include/freetype2:" + inc2 "/include/smpeg:" + inc3 "/include/SDL" + (if e2 (string-append ":" e2) ""))) + ))) + (replace 'build + (lambda* (#:key outputs inputs build-targets #:allow-other-keys) + (invoke "make" "-s") + )) + ))) + (native-inputs `(("bash" ,bash) + ("which" ,which) + ("libtool" ,libtool) + ("autoconf" ,autoconf) + ("automake" ,automake) + ("patch" ,(search-patch "unicon.patch")))) + (inputs (list gdbm)) + (propagated-inputs (list unixodbc libvorbis libogg freealut openal libxft mesa libx11 openssl libjpeg-turbo libpng libxfont freeglut ftgl freetype sdl libsmpeg)) + (native-search-paths + (list (search-path-specification + (variable "C_INCLUDE_PATH") + (files '("include/freetype2" "include/libsmpeg" "include/SDL"))))) + (synopsis "an Extended Dialect of Icon") + (description "Unicon is a very high level, goal-directed, object-oriented, general purpose applications language.") + (home-page "http://unicon.org/") + (license lic:gpl2))) \ No newline at end of file