From bd0510b08ff6f80f40b436738da1c4e758d28f74 Mon Sep 17 00:00:00 2001 From: Pavel Sanda Date: Fri, 12 Aug 2022 01:03:09 +0200 Subject: [PATCH] configure.py: sanitize restrictive policies of IM on some distributions. Some distros banned GS for Imagemigick conversions. In effect eps->png conversion is broken and this can't be fixed locally by the user. Our workaround is to allow eps->pdf->png conversion from different tools when IM bans the conversion. https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg217834.html --- lib/configure.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/configure.py b/lib/configure.py index 92cf561b80..727fb03868 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -1087,13 +1087,15 @@ def checkConverterEntries(): # Only define a converter from pdf6 for graphics checkProg('a PDF to EPS converter', ['pdftops -eps -f 1 -l 1 $$i $$o'], rc_entry = [ r'\converter pdf6 eps "%%" ""' ]) - # Define a converter from pdf6 to png for Macs where pdftops is missing. + # sips:Define a converter from pdf6 to png for Macs where pdftops is missing. # The converter utility sips allows to force the dimensions of the resulting # png image. The value of 800 pixel for the width is arbitrary and not # related to the current screen resolution or width. # There is no converter parameter for this information. + # + #pdftoppm: Some systems ban IM eps->png conversion. We will offer eps->pdf->png route instead. checkProg('a PDF to PNG converter', - ['sips --resampleWidth 800 --setProperty format png $$i --out $$o'], + ['sips --resampleWidth 800 --setProperty format png $$i --out $$o' , 'pdftoppm -r 72 -png -singlefile $$i > $$o'], rc_entry = [ r'\converter pdf6 png "%%" ""' ]) # Create one converter for a PDF produced using TeX fonts and one for a # PDF produced using non-TeX fonts. This does not produce non-unique @@ -1190,8 +1192,23 @@ def checkConverterEntries(): checkProg('an EPS -> PDF converter', ['epstopdf'], rc_entry = [ r'\converter eps pdf6 "epstopdf --outfile=$$o $$i" ""']) # - checkProg('an EPS -> PNG converter', ['magick $$i[0] $$o', 'convert $$i[0] $$o'], - rc_entry = [ r'\converter eps png "%%" ""']) + # Due to more restrictive policies, it is possible that (image)magick + # does not allow conversions from eps to png. + # So before setting the converter test it it on a mock file + _, cmd = checkProg('an EPS -> PNG converter', ['magick', 'convert']) + if cmd: + writeToFile('mock.eps', r'%!PS') + try: + subprocess.check_call([cmd, "mock.eps", "mock.png"]) + removeFiles(['mock.eps', 'mock.png']) + rc_entry = r'\converter eps png "%s $$i[0] $$o" ""' + addToRC(rc_entry % cmd) + except: + removeFiles(['mock.eps']) + #needs empty record otherwise default converter will be issued + rc_entry = r'\converter eps png "" ""' + addToRC(rc_entry) + logger.info('ImageMagick seems to ban conversions from EPS. Disabling direct EPS->PNG.') # # no agr -> pdf6 converter, since the pdf library used by gracebat is not # free software and therefore not compiled in in many installations. -- 2.39.2