• Jérome Perrin's avatar
    component/ghostscript: Workaround for slaprunner paths with double slashs · 1b291415
    Jérome Perrin authored
    This tessdata path will be included in cpp code by pre-processor macros
    https://github.com/ArtifexSoftware/ghostpdl/blob/gs9.54.0/base/tessocr.cpp#L188-L193
    Since // is the marker for a comment in cpp and as documented in
    https://gcc.gnu.org/onlinedocs/cpp/Stringizing.html "Comments are replaced by
    whitespace long before stringizing happens, so they never appear in stringized
    text", the STRINGIFY/STRINGIFY2 approach of including a path does not work
    when the path contain // , because anything after // is considered a comment
    and is not included, causing errors like this when using ghostscript with OCR
    in webrunner:
    
        $ strace -e open -o open.strace /srv/slapgrid/slappart42/srv/runner/shared/ghostscript/4387fe7a8d2034ac5691d43b58134248/bin/gs -sDEVICE=ocr
        GPL Ghostscript 9.54.0 (2021-03-30)
        Copyright (C) 2021 Artifex Software, Inc.  All rights reserved.
        This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
        see the file COPYING for details.
        Error opening data file ./eng.traineddata
        Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.
        Failed loading language 'eng'
        Tesseract couldn't load any languages!
        **** Unable to open the initial device, quitting.
        $ grep eng open.strace
        open("./eng.traineddata", O_RDONLY)     = -1 ENOENT (No such file or directory)
        open("/srv/slapgrid/slappart42/srv/eng.traineddata", O_RDONLY) = -1 ENOENT (No such file or directory)
        open("eng.traineddata", O_RDONLY)       = -1 ENOENT (No such file or directory)
    
    eng.traineddata is looked up in /srv/slapgrid/slappart42/srv/ because
    ghostscript was configured with:
    
       --with-tessdata=/srv/slapgrid/slappart42/srv//runner//shared/ghostscript/4387fe7a8d2034ac5691d43b58134248/share/tessdata/
    
    and everything after // was stripped.
    
    This was reported upstream as https://bugs.ghostscript.com/show_bug.cgi?id=703905
    
    More about the case of // in slaprunner paths was on commit eb544196
    (slparunner: document the reasons why we keep srv//slaprunner, 2019-10-10)
    1b291415
buildout.cfg 1.8 KB