commit 432986e8f28e8d42e0ac57e561214cd5ae521578
Author: Stephan Witt <[email protected]>
Date:   Sun Jan 6 00:22:21 2019 +0100

    Correct converter configuration for inkscape on Mac
    
    On Mac the inkscape binary is started by a wrapper script. This script 
changes the
    working directory internally and fails to process files with relative path 
names.
    The previous attempt to solve it was to pass the file names with absolute 
names
    by prepending them with the $$p variable (representing the directory name 
of the files).
    This broke the on screen conversion (used for SVGZ to PNG e.g. in the users 
guide)
    because here the $$p variable is undefined.
    
    Now the wrapper script of LyX which is used to locate the Inkscape.app 
bundle converts
    the relative path names into absolute names and the $$p variable is removed 
from the
    converter definitions for inkscape again.
    
    (cherry picked from commit caa1dd2aeed97330e05c0e96ae7e5bb929b0866d)
---
 development/MacOSX/inkscape |   45 +++++++++++++++++++++++++++++++++++++++++-
 lib/configure.py            |   22 ++++++--------------
 2 files changed, 50 insertions(+), 17 deletions(-)

diff --git a/development/MacOSX/inkscape b/development/MacOSX/inkscape
index bc34e86..f1e6ca4 100755
--- a/development/MacOSX/inkscape
+++ b/development/MacOSX/inkscape
@@ -1,13 +1,54 @@
 #!/bin/bash
+
+# \author Stephan Witt
+# Full author contact details are available in file CREDITS.
+
 unset DISPLAY
+
+# check for file arguments with relative path names
+# convert them to absolute path names
+# inkscape on Mac changes the working directory
+# this invalidates relative path names
+startinkscape() {
+       inkscape="$1" ; shift
+       pwd=$(pwd)
+       iparams=( "$@" )
+       oparams=()
+       for i in ${!iparams[@]}; do
+               # echo $i "=>" "${iparams[$i]}"
+               case "${iparams[$i]}" in
+               
--file=/*|--export-pdf=/*|--export-eps=/*|--export-png=/*|--export-emf=/*|--export-wmf=/*|--export-ps=/*|--export-ps-level=/*|--export-pdf-version=/*)
+                       oparams+=( "${iparams[$i]}" )
+                       ;;
+               
--file=*|--export-pdf=*|--export-eps=*|--export-png=*|--export-emf=*|--export-wmf=*|--export-ps=*|--export-ps-level=*|--export-pdf-version=*)
+                       oparams+=( "${iparams[$i]//=/=${pwd}/}" )
+                       ;;
+               --without-gui|-z)
+                       # ignore this argument - its provided below anyway
+                       ;;
+               *)
+                       oparams+=( "${iparams[$i]}" )
+                       ;;
+               esac
+       done
+       exec "${inkscape}" --without-gui "${oparams[@]}"
+}
+
+# try to find the inkscape installation...
 # at first try the well known location
 RESDIR="/Applications/Inkscape.app/Contents/Resources"
-test -f "${RESDIR}"/bin/inkscape -a -x "${RESDIR}"/bin/inkscape && exec 
"${RESDIR}"/bin/inkscape --without-gui "$@"
+if [ -f "${RESDIR}"/bin/inkscape -a -x "${RESDIR}"/bin/inkscape ]; then
+       startinkscape "${RESDIR}"/bin/inkscape "$@"
+       exit 0
+fi
 # this failed... so try PATH expansion to start the inkscape shell wrapper
 IFS=":" read -ra DIRLIST <<< "${PATH}"
 for BINDIR in "${DIRLIST[@]}" ; do
        RESDIR=$(dirname "${BINDIR}")
-       test -f "${RESDIR}"/bin/inkscape -a -x "${RESDIR}"/bin/inkscape && exec 
"${RESDIR}"/bin/inkscape --without-gui "$@"
+       if [ -f "${RESDIR}"/bin/inkscape -a -x "${RESDIR}"/bin/inkscape ]; then
+               startinkscape "${RESDIR}"/bin/inkscape "$@"
+               exit 0
+       fi
 done
 # report error and exit with failure status
 exec 1>&2
diff --git a/lib/configure.py b/lib/configure.py
index c16064a..2864c92 100644
--- a/lib/configure.py
+++ b/lib/configure.py
@@ -1034,18 +1034,16 @@ def checkConverterEntries():
 \converter tgif       png        "tgif -print -color -png -o $$d $$i"  ""
 \converter tgif       pdf6       "tgif -print -color -pdf -stdout $$i > $$o"   
""'''])
     #
-    checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o 
$$o $$i', inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui 
--export-eps=%s$$o'
-               % (inkscape_fileprefix, inkscape_fileprefix)],
+    checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o 
$$o $$i', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui 
--export-eps=$$o'],
         rc_entry = [ r'\converter wmf        eps        "%%"   ""'])
     #
-    checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', inkscape_cl 
+ ' --file=%s$$i --export-area-drawing --without-gui --export-eps=%s$$o'
-               % (inkscape_fileprefix, inkscape_fileprefix)],
+    checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', inkscape_cl 
+ ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
         rc_entry = [ r'\converter emf        eps        "%%"   ""'])
     #
-    checkProg('a WMF -> PDF converter', [inkscape_cl + ' --file=%s$$i 
--export-area-drawing --without-gui --export-pdf=%s$$o' % (inkscape_fileprefix, 
inkscape_fileprefix)],
+    checkProg('a WMF -> PDF converter', [inkscape_cl + ' --file=$$i 
--export-area-drawing --without-gui --export-pdf=$$o'],
         rc_entry = [ r'\converter wmf        pdf6        "%%"  ""'])
     #
-    checkProg('an EMF -> PDF converter', [inkscape_cl + ' --file=%s$$i 
--export-area-drawing --without-gui --export-pdf=%s$$o' % (inkscape_fileprefix, 
inkscape_fileprefix)],
+    checkProg('an EMF -> PDF converter', [inkscape_cl + ' --file=$$i 
--export-area-drawing --without-gui --export-pdf=$$o'],
         rc_entry = [ r'\converter emf        pdf6        "%%"  ""'])
     # Only define a converter to pdf6 for graphics
     checkProg('an EPS -> PDF converter', ['epstopdf'],
@@ -1091,20 +1089,17 @@ def checkConverterEntries():
         rc_entry = [ r'\converter svg        svgz       "%%"   ""'])
     # Only define a converter to pdf6 for graphics
     # Prefer rsvg-convert over inkscape since it is faster (see 
http://www.lyx.org/trac/ticket/9891)
-    checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', 
inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui 
--export-pdf=%s$$o'
-               % (inkscape_fileprefix, inkscape_fileprefix)],
+    checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', 
inkscape_cl + ' --file=$$i --export-area-drawing --without-gui 
--export-pdf=$$o'],
         rc_entry = [ r'''\converter svg        pdf6       "%%"    ""
 \converter svgz       pdf6       "%%"    ""'''],
         path = ['', inkscape_path])
     #
-    checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', 
inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui 
--export-eps=%s$$o'
-               % (inkscape_fileprefix, inkscape_fileprefix)],
+    checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', 
inkscape_cl + ' --file=$$i --export-area-drawing --without-gui 
--export-eps=$$o'],
         rc_entry = [ r'''\converter svg        eps        "%%"    ""
 \converter svgz       eps        "%%"    ""'''],
         path = ['', inkscape_path])
     #
-    checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', 
inkscape_cl + ' --without-gui --file=%s$$i --export-png=%s$$o'
-               % (inkscape_fileprefix, inkscape_fileprefix)],
+    checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', 
inkscape_cl + ' --without-gui --file=$$i --export-png=$$o'],
         rc_entry = [ r'''\converter svg        png        "%%"    "",
 \converter svgz       png        "%%"    ""'''],
         path = ['', inkscape_path])
@@ -1884,9 +1879,6 @@ Format %i
         inkscape_cl = inkscape_gui.replace('.exe', '.com')
     # On MacOSX, Inkscape requires full path file arguments. This
     # is not needed on Linux and Win and even breaks the latter.
-    inkscape_fileprefix = ""
-    if sys.platform == 'darwin':
-        inkscape_fileprefix = "$$p"
     checkFormatEntries(dtl_tools)
     checkConverterEntries()
     (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()

Reply via email to