On Mon, Jun 20, 2016 at 10:58 AM, Andreas Enge <andr...@enge.fr> wrote: > Hello Fede, > > apologies for not coming back to you earlier, I have little occasion to > work on Guix right now. > > On Sun, Jun 12, 2016 at 10:56:40AM +0200, Federico Beffa wrote: >> (substitute* texmfcnf >> (("TEXMFROOT = \\$SELFAUTOPARENT") >> - (string-append "TEXMFROOT = " share))) >> + (string-append "TEXMFROOT = " share)) >> + (("TEXMFLOCAL = \\$SELFAUTOGRANDPARENT/texmf-local") >> + "TEXMFLOCAL = $SELFAUTODIR/share/texmf-local") >> + (("!!\\$TEXMFLOCAL") "$TEXMFLOCAL")) > > As said before, this change should be benign, but also without effect: > It still points to some place in the store, actually to the directory > /gnu/store/...-texlive-2015/share/texmf-local , > which does not exist.
Hi Andreas, you are right, TEXMFLOCAL does still point to a nonexistent store directory, but it is the "right" directory inside of the texlive package tree. Without this it points to a location outside of every package/profile tree. Consider it an aesthetics improvement ;-) > If we keep it, for clarity I would use > TEXMFLOCAL = $TEXMFROOT/texmf-local > (as for the other variables defined around it), and add a comment that this > declaration does not actually come into effect. I think $SELFAUTODIR is the recommended way (in the TeXLive doc and in comments inside of texmfcnf), but if you prefer we can use TEXMFROOT. Note that the last entry in 'substitute*' is not just cosmetic: It instructs TeX & friends not to look for ls-r databases, but to scan the directory tree. If we would keep the '!!' prefixes to TEXMFLOCAL, it would not work without adding a profile hook to generate the ls-r database. As long as we do not have a large set of packages installing into share/texmf-local, the speed penalty should be essentially unnoticeable. > I agree that this is a cleaner solution; maybe texmfcnf.lua needs to be > adapted as well? I have no idea about the purpose of this file. I don't find it mentioned in the documentation https://www.tug.org/texlive/doc/texlive-en/texlive-en.pdf. What is it for? >> + (native-search-paths >> + (list (search-path-specification >> + (variable "TEXMFLOCAL") >> + (files '("share/texmf-local"))))) > > This seems to be the main goal of your patch: By redefining TEXMFLOCAL in the > profile, it will point to $HOME/.guix-profile/share/texmf-local. So if we add > packages to the distribution that put data there, it should be available to > texlive. Do you have an example package in mind? Does it work? Currently > I cannot test it on my machine. Yes, correct. However, as explained before, it only works in conjunction with the removal of the '!!' prefix in texmfcnf. The attached file includes a package called 'chez-web' which installs a TeX macro. The package 'chez-sockets' makes use of the former and does work as expected. > > There would be an alternative for people running Guix on top of another > distro: We could set TEXMFLOCAL to /usr/share/texmf; then system installed > texlive data could be used. This would work as long as the search path is > not overwritten by a Guix installed package (which we do not have so far). Personally I would prefer to avoid explicit cross-referencing between Guix packages and non-Guix ones. Regards, Fede P.S.: I have the package definitions in a local module. If you want to try the packages I can share it with you. In the future I may send patches to include them in Guix proper.
(define-public chez-web (package (name "chez-web") ;; release 2.0 is different and doesn't work. (version "2.0-1.5fd177f") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/arcfide/ChezWEB.git") (commit "5fd177fe53f31f466bf88720d03c95a3711a8bea"))) (sha256 (base32 "1dq25qygyncbfq4kwwqqgyyakfqjwhp5q23vrf3bff1p66nyfl3b")))) (build-system gnu-build-system) (native-inputs `(("chez-scheme" ,chez-scheme) ("texlive" ,texlive))) (arguments `(#:make-flags (let ((out (assoc-ref %outputs "out"))) (list (string-append "PREFIX=" out) (string-append "DOCDIR=" out "/share/doc/" ,name "-" ,version) (string-append "LIBDIR=" out "/lib/chezweb") (string-append "TEXDIR=" out "/share/texmf-local"))) #:tests? #f ; no tests #:phases (modify-phases %standard-phases (replace 'configure (lambda* _ (copy-file "config.mk.template" "config.mk") (substitute* "tangleit" (("\\./cheztangle\\.ss" all) (string-append "chez-scheme --program " all))) (substitute* "weaveit" (("mpost chezweb\\.mp") "mpost --tex=tex chezweb.mp") (("\\./chezweave" all) (string-append "chez-scheme --program " all))) (substitute* "installit" (("-g \\$GROUP -o \\$OWNER") ""))))))) (home-page "https://github.com/arcfide/ChezWEB") (synopsis "Hygienic Literate Programming for Chez Scheme") (description "ChezWEB is a system for doing Knuthian style WEB programming in Scheme, and more particularly, it is implemented in Chez Scheme.") (license expat))) (define-public chez-sockets (package (name "chez-sockets") (version "0.0-1.bce9688") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/arcfide/chez-sockets.git") (commit "bce96881c06bd69a6757a6bff139744153924140"))) (sha256 (base32 "1n5fbwwz51fdzvjackgmnsgh363g9inyxv7kmzi0469cwavwcx5m")))) (build-system gnu-build-system) (native-inputs `(("chez-scheme" ,chez-scheme) ("chez-web" ,chez-web) ("texlive" ,texlive))) (arguments `(#:tests? #f ; no tests #:phases (modify-phases %standard-phases (replace 'configure (lambda* (#:key outputs inputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (chez-web (assoc-ref inputs "chez-web")) (chez (assoc-ref inputs "chez-scheme")) (chez-h (dirname (car (find-files chez "scheme\\.h"))))) (substitute* "Makefile" (("(SCHEMEH=).*$" all var) (string-append var chez-h))) #t))) (add-before 'build 'tangle (lambda _ ;; just using "make" tries to build the .c files before ;; they are created. (and (zero? (system* "make" "sockets")) (zero? (system* "make"))))) (replace 'build (lambda* (#:key outputs inputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (chez-site (string-append out "/lib/csv" ,(package-version chez-scheme) "-site/arcfide"))) ;; make sure Chez Scheme can find the shared libraries. (substitute* "sockets.ss" (("(load-shared-object) \"(socket-ffi-values\\.[sd][oy].*)\"" all cmd so) (string-append cmd " \"" chez-site "/" so "\"")) (("sockets-stub\\.[sd][oy].*" all) (string-append chez-site "/" all))) ;; to compile chez-sockets, the .so files must be ;; installed (because of the absolute path we ;; inserted above). (for-each (lambda (f d) (install-file f d)) '("socket-ffi-values.so" "sockets-stub.so") (list chez-site chez-site)) (zero? (system "echo '(compile-file \"sockets.sls\")' | scheme -q"))))) (replace 'install (lambda* (#:key outputs inputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (lib (string-append out "/lib/chez-sockets")) (doc (string-append out "/share/doc/" ,name "-" ,version)) (chez-site (string-append out "/lib/csv" ,(package-version chez-scheme) "-site/arcfide"))) (for-each (lambda (f d) (install-file f d)) '("sockets.pdf" "sockets.so") (list doc chez-site)) #t)))))) (home-page "https://github.com/arcfide/chez-sockets") (synopsis "Extensible sockets library for Chez Scheme") (description "Chez-sockets is an extensible sockets library for Chez Scheme.") (license expat)))