Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 1/1] Allow imagemagick to find ghostscript fonts.
Date: Tue, 9 Feb 2016 18:23:36 +0100	[thread overview]
Message-ID: <20160209172336.GA3682@free.fr> (raw)
In-Reply-To: <56b96b4422432_3e71e0793c203d6@ultri2.mail>

Ricardo, All,

On 2016-02-09 02:29 -0200, Ricardo Martincoski spake thusly:
> I don't need this patch for my own personal use, but I took a look into it.

Thank you, this is very much appreciated! :-)

> On Tue, 29 Dec 2015 17:45:04 +0100, Thomas Petazzoni wrote:
> > Could you give a specific example use of imagemagick that triggers this
> > problem, so that we can reproduce the problem on our side and
> > investigate the possible solutions?
> 
> Using this config with the master branch:
> BR2_PACKAGE_IMAGEMAGICK=y  
> BR2_PACKAGE_GHOSTSCRIPT_FONTS=y
> BR2_PACKAGE_FREETYPE=y
> The problem can be triggered by converting any text file to ps
> $ cd /tmp ; echo -e 'text 1\ntext 2' > file.txt ; convert file.txt file.ps

Aha, so that is the root of the problem. Thanks for the explanations.

[--SNIP--]
> The wrong path is the default for debian-based distros
> /usr/share/fonts/type1/gsfonts/ # debian non-x11, default for imagemagick
> /usr/share/fonts/X11/Type1/     # debian x11
> 
> An alternative solution would be to have the fonts installed to this location
> +++ b/package/ghostscript-fonts/ghostscript-fonts.mk
> @@@ -13,1 -13,1 +13,1 @@@ GHOSTSCRIPT_FONTS_LICENSE_FILES = COPYI
> --GHOSTSCRIPT_FONTS_TARGET_DIR = $(TARGET_DIR)/usr/share/fonts/gs
> ++GHOSTSCRIPT_FONTS_TARGET_DIR = $(TARGET_DIR)/usr/share/fonts/type1/gsfonts
> 
> I don't see from
> grep -w '\(gs\|ghostscript-fonts\|GHOSTSCRIPT_FONTS_\)' -R package/
> any explicit use of this path nor hard dependency.
> But changing it can potentially break packages (in runtime!) if them expect
> the fonts to be installed in the current location.

And why not symlink the former to the latter?

> Does anyone know an example of package that would break?
> 
> >> >> Magick: unable to read font `(null)' @ error/annotate.c/RenderFreetype/1153
> >> >> They are non-fatal but could get annoying fast if you are using 'convert'
> 
> The error is non-fatal in a batch conversion.
> But each error means a file failed to be converted.
> The output is not generated for the failed file.

This is a sad decision not to fail in that case... :-(

> >> >> on a lot of files.
> >> >>
> >> >> Signed-off-by: Robert Sohn <grepper@gmail.com>
> >> >> ---
> >> >>  package/imagemagick/imagemagick.mk | 3 ++-
> >> >>  1 file changed, 2 insertions(+), 1 deletion(-)
> >> >>
> >> >> diff --git a/package/imagemagick/imagemagick.mk b/package/imagemagick/imagemagick.mk
> >> >> index 298d0a8..1abb2a8 100644
> >> >> --- a/package/imagemagick/imagemagick.mk
> >> >> +++ b/package/imagemagick/imagemagick.mk
> >> >> @@ -33,7 +33,8 @@ IMAGEMAGICK_CONF_OPTS = \
> >> >>  	--without-dps \
> >> >>  	--without-gslib \
> >> >>  	--without-fpx \
> >> >> -	--without-x
> >> >> +	--without-x \
> >> >> +	--with-gs-font-dir=/usr/share/fonts/gs
> 
> Configuring unconditionally does not seem so bad in this case, IMO.
> The configured path will be added to an XML that will be used at runtime.
> If freetype support is not compiled in or the fonts are not installed,
> /convert/ would fail anyway.

The best would probbly to do something like Thomas suggested:

> >> > ifeq ($(BR2_PACKAGE_GHOSTSCRIPT_FONTS),y)
> >> > IMAGEMAGICK_CONF_OPTS += --with-gs-font-dir=/usr/share/fonts/gs
> >> > endif
> BR2_PACKAGE_FREETYPE is also needed.

    ifeq ($(BR2_PACKAGE_FREETYPE)$(BR2_PACKAGE_GHOSTSCRIPT_FONTS),yy)
    IMAGEMAGICK_CONF_OPTS += --with-gs-font-dir=/usr/share/fonts/gs
    endif

But with the symlink I suggested above, that might not even be
necessary, would it?

> >> > Or maybe we should use $(GHOSTSCRIPT_FONTS_TARGET_DIR) here, instead of 
> >> > duplicating it?
> 
> It seems good practice to me.
> But we can't use GHOSTSCRIPT_FONTS_TARGET_DIR as is, it is prefixed with
> TARGET_DIR. We could create an auxiliary symbol

Then what about:

    package/ghostscript-fonts/ghostscript-fonts.mk;
        GHOSTSCRIPT_FONTS_DIR = /usr/share/fonts/gs
        GHOSTSCRIPT_FONTS_TARGET_DIR = $(TARGET_DIR)/$(GHOSTSCRIPT_FONTS_DIR)

    package/imagemagick/imagemagick.mk:
        ifeq ($(BR2_PACKAGE_FREETYPE)$(BR2_PACKAGE_GHOSTSCRIPT_FONTS),yy)
        IMAGEMAGICK_CONF_OPTS += --with-gs-font-dir=$(GHOSTSCRIPT_FONTS_DIR)
        endif

> >> Hm, the problem is that the issue will remain if ghostscript-fonts are
> >> not installed. I don't know the solution to that.
> >
> >The usual way to set a dependency package is to add a 'select' statement for 
> >that package in Config.in. In this case ghostscript-fonts is not a hard 
> >dependency, because imagemagick is quite functional without it, and its size 
> >is non negligible. Maybe adding a comment to the help text in Config.in would 
> >suffice.
> >
> >What do others think?
> 
> Adding a comment to the Config.in sounds reasonable to me.
> One would need both BR2_PACKAGE_FREETYPE as optional build dependency and
> BR2_PACKAGE_GHOSTSCRIPT_FONTS as optional runtime dependency to get the
> conversion txt -> ps to work.

Well, since it is an *optional* and *runtime* dependency, then there is
rally nothing to do, neither in the Config.in nor in the .mk.

However, if we want to be a little bit user-friendly, we could add a
Config.in opiton in ImageMagick, like:

    config BR2_PACKAGE_IMAGEMAGICK_TXT_PS
        bool "support txt->ps conversion"
        select BR2_PACKAGE_FREETYPE # runtime
        select BR2_PACKAGE_GHOSTSCRIPT_FONTS # runtime

(with the appropriate "depends on" to propagate freetype's and
ghostscript-fonts' own dependencies...

Anyway, thanks a lot Ricardo for the thorough and detailed explanations.
It was really useful. :-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

  reply	other threads:[~2016-02-09 17:23 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-09  4:29 [Buildroot] [PATCH 1/1] Allow imagemagick to find ghostscript fonts Ricardo Martincoski
2016-02-09 17:23 ` Yann E. MORIN [this message]
2016-02-09 18:16   ` Ricardo Martincoski
  -- strict thread matches above, loose matches on Subject: below --
2015-06-16  2:12 grepper
2015-06-16  3:39 ` Baruch Siach
2015-06-16 18:27   ` grepper
2015-06-16 20:01     ` Baruch Siach
2015-12-29 16:45 ` Thomas Petazzoni
2016-07-04 15:50 ` Peter Korsgaard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160209172336.GA3682@free.fr \
    --to=yann.morin.1998@free.fr \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox