Message ID | 20200217182509.11993-1-me@tobias.gr |
---|---|
State | Accepted |
Headers | show |
Series | [bug#39647] gnu: Add unoconv. | expand |
Context | Check | Description |
---|---|---|
cbaines/comparison | success | View comparision |
cbaines/git branch | success | View Git branch |
cbaines/applying patch | success | View Laminar job |
Hi, I tried to use the package in a `guix environment' and got: ~/guix% unoconv ~/Downloads/scheme-macro-phd.ps -o scheme-macro-phd.pdf unoconv: format [jw4yj39s84jb4fkvqpsqwq-unoconv-0.9.0/bin/.unoconv-real] is not known to unoconv. I feel like this might be an issue with the packaging. Does it work for you? On Mon, Feb 17, 2020 at 07:25:09PM +0100, Tobias Geerinckx-Rice wrote: > + (modify-phases %standard-phases > + (add-after 'unpack 'patch-find_offices I think that the convention is to replace underscores by dashes in names like these. > + ;; find_offices is a convoluted cross-platform treasure hunt. > + ;; Keep things simple and return the correct paths immediately. > + (lambda* (#:key inputs #:allow-other-keys) > + (let* ((libreoffice (assoc-ref inputs "libreoffice"))) > + (substitute* "unoconv" > + (("def find_offices\\(\\):" match) > + (string-append > + match "\n" > + " ret = []\n" > + " office = Office(" > + "'" libreoffice "/lib/libreoffice', " > + "'" libreoffice "/lib/libreoffice/program', " > + "'" libreoffice "/lib/libreoffice/program', " > + "'" libreoffice "/lib/libreoffice/program/pyuno.so', " > + "'" libreoffice "/bin/soffice', " > + "sys.executable, " > + "None)\n" > + " ret.append(office)\n" > + " return ret\n"))) > + #t)))))) Wouldn't it be simpler to do return [Office(...)] ?
Jakub! Jakub Kądziołka 写道: > unoconv: format > [jw4yj39s84jb4fkvqpsqwq-unoconv-0.9.0/bin/.unoconv-real] is not > known to unoconv. > > I feel like this might be an issue with the packaging. Does it > work for > you? I don't see how this could be related to packaging… And it works just fine on my laptop: me@lapdog $ guix env --{pure,ad-hoc} unoconv coreutils¹ grep¹ \ -- unoconv test-file.odt me@lapdog $ # a pretty .pdf file is born! But fine, I'll try it on another machine: me@server $ guix env --{pure,ad-hoc} unoconv coreutils grep \ -- unoconv test-file.odt … —and here's where I must stop to thank you for reporting the BESTEST BUG of 2020. Seriously. This made my day. I laughed! I cried! Let's take another look at your error: % unoconv ~/Downloads/scheme-macro-phd.ps -o scheme-macro-phd.pdf unoconv: format [jw4yj39s84jb4fkvqpsqwq-unoconv-0.9.0/bin/.unoconv-real] is not known to unoconv. So… it's obvious that unoconv is erroneously parsing argv0 as target format. Indeed, on both my machines, using the explicit ‘-f <format>’ guix@env $ unoconv -f pdf test-file.odt returns success and a .pdf file. So is the long /gnu/store/… name overflowing a buffer? Perhaps the wrapper script is to blame? Maybe I should look at the co— ### If no format was specified, probe it or provide it if not self.format: ### Check if the command is in the form odt2pdf l = sys.argv[0].split('2') if len(l) == 2: self.format = l[1] Oh. Oh my. I'd like to bet that the character before ‘jw4yj39s84jb4fkvqpsqwq-unoconv-0.9.0/’ in your store name is a ‘2’. Because that's what it is on my server. By sheer chance, the store name on my lapdog has TWO 2s, and so unoconv chugs blissfully onward. I'm not sure what kind of fix upstream will accept for this. At least a length limit, surely. In the mean time it's trivial to just substitute* this out, since we won't ship any foo2bar symlinks our this package anyway. >> + (add-after 'unpack 'patch-find_offices > I think that the convention is to replace underscores by dashes > in names > like these. Then I gladly thwart it. > Wouldn't it be simpler to do > > return [Office(...)] > > ? Yep. My reasoning at the time was literally: ‘well… I should closely emulate upstream style [they use ret = … and append()] because I've never written a Python in my life, and they have, so they obviously know what they're doing.’ Needless to say, I'm currently reconsidering that opinion. Thanks, T G-R [1]: ‘coreutils’ & ‘grep’ are undeclared dependencies of ‘soffice’ — will fix, but not relevant here.
Tobias Geerinckx-Rice 写道: > I'm not sure what kind of fix upstream will accept for this. At > least > a length limit, surely. …or to split just the basename, of course. Not sure why that didn't occur to me before hitting send… Kind regards, T G-R
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm index 04477e2082..5e9e5ebd40 100644 --- a/gnu/packages/libreoffice.scm +++ b/gnu/packages/libreoffice.scm @@ -31,11 +31,12 @@ (define-module (gnu packages libreoffice) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) + #:use-module (guix build-system python) #:use-module (guix build-system trivial) #:use-module (guix download) #:use-module (guix git-download) #:use-module ((guix licenses) - #:select (gpl2+ lgpl2.1+ lgpl3+ mpl1.1 mpl2.0 + #:select (gpl2 gpl2+ lgpl2.1+ lgpl3+ mpl1.1 mpl2.0 non-copyleft x11-style bsd-3)) #:use-module (guix packages) #:use-module (guix utils) @@ -141,6 +142,58 @@ Plain Text, Gnumeric XML, Generic XML. It also includes low-level parsers for CSV, CSS and XML.") (license mpl2.0))) +(define-public unoconv + (package + (name "unoconv") + (version "0.9.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "unoconv" version)) + (sha256 + (base32 "0cb0bvyxib3xrj0jdgizhp6p057lr8kqnd3n921rin37ivcvz3ih")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-find_offices + ;; find_offices is a convoluted cross-platform treasure hunt. + ;; Keep things simple and return the correct paths immediately. + (lambda* (#:key inputs #:allow-other-keys) + (let* ((libreoffice (assoc-ref inputs "libreoffice"))) + (substitute* "unoconv" + (("def find_offices\\(\\):" match) + (string-append + match "\n" + " ret = []\n" + " office = Office(" + "'" libreoffice "/lib/libreoffice', " + "'" libreoffice "/lib/libreoffice/program', " + "'" libreoffice "/lib/libreoffice/program', " + "'" libreoffice "/lib/libreoffice/program/pyuno.so', " + "'" libreoffice "/bin/soffice', " + "sys.executable, " + "None)\n" + " ret.append(office)\n" + " return ret\n"))) + #t)))))) + (inputs + `(("libreoffice" ,libreoffice))) + (home-page "http://dag.wiee.rs/home-made/unoconv/") + (synopsis "Convert between any document format supported by LibreOffice") + (description + "Unoconv is a command-line utility to convert documents from any format +that LibreOffice can import, to any format it can export. It can be used for +batch processing, and can apply custom style templates and filters. + +Unoconv can convert between over a hundred formats, including Open Document +Format (@file{.odt}, @file{.ods}, @file{.odp})), Portable Document Format +(@file{.pdf}), HTML and XHTML, RTF, DocBook (@file{.xml}), @file{.doc} and +@file{.docx}), @file{.xls} and @file{.xlsx}). + +All required fonts must be installed on the converting system.") + (license gpl2))) + (define-public librevenge (package (name "librevenge")