* Re: [PATCH] gnu: texlive: Fix 'texmf-local' search path.
2016-06-20 8:58 ` Andreas Enge
@ 2016-06-20 16:48 ` Federico Beffa
2016-07-06 16:26 ` Federico Beffa
0 siblings, 1 reply; 4+ messages in thread
From: Federico Beffa @ 2016-06-20 16:48 UTC (permalink / raw)
To: Andreas Enge; +Cc: Guix-devel
[-- Attachment #1: Type: text/plain, Size: 3623 bytes --]
On Mon, Jun 20, 2016 at 10:58 AM, Andreas Enge <andreas@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.
[-- Attachment #2: example.scm --]
[-- Type: text/x-scheme, Size: 5393 bytes --]
(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)))
^ permalink raw reply [flat|nested] 4+ messages in thread