The magic incantation necessary to get strdup turns out to be - D_GNU_SOURCE, as noted on StackOverflow.
However, now I'm encountering a problem with Python's DLL handling code. When attempting to run OCRmyPDF I get $ ocrmypdf --help Traceback (most recent call last): File "/usr/bin/ocrmypdf", line 11, in <module> load_entry_point('ocrmypdf==9.8.0.post3+g5944044.d20200514', 'console_scripts', 'ocrmypdf')() File "/usr/lib/python3.7/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2852, in load_entry_point return ep.load() File "/usr/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2443, in load return self.resolve() File "/usr/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2449, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) File "/usr/lib/python3.7/site-packages/ocrmypdf-9.8.0.post3+g5944044.d20200514-py3.7.egg/ocrmypdf/__init__.py", line 18, in <module> from . import helpers, hocrtransform, leptonica, pdfa, pdfinfo File "/usr/lib/python3.7/site-packages/ocrmypdf-9.8.0.post3+g5944044.d20200514-py3.7.egg/ocrmypdf/leptonica.py", line 67, in <module> """ ocrmypdf.exceptions.MissingDependencyError: --------------------------------------------------------------------- This error normally occurs when ocrmypdf can't find the Leptonica library, which is usually installed with Tesseract OCR. It could be that Tesseract is not installed properly, we can't find the installation on your system PATH environment variable. The library we are looking for is usually called: liblept-5.dll (Windows) liblept*.dylib (macOS) liblept*.so (Linux/BSD) Please review our installation procedures to find a solution: https://ocrmypdf.readthedocs.io/en/latest/installation.html --------------------------------------------------------------------- In the last file of the traceback (leptonica.py) there's this: from ctypes.util import find_library ... if os.name == 'nt': libname = 'liblept-5' os.environ['PATH'] = shim_paths_with_program_files() else: libname = 'lept' In Cygwin, that library is /usr/bin/cyglept-5.dll (why was the name changed?) First I created a symlink from cyglept-5.dll to liblept-5.dll, with no effect. So I added a test for Cygwin at that point, resulting in this code: if os.name == 'nt': libname = 'liblept-5' os.environ['PATH'] = shim_paths_with_program_files() elif sys.platform == 'cygwin': libname = 'cyglept-5' else: libname = 'lept' This also had no effect, so I tried playing with find_library() in the interactive shell. In Cygwin, it doesn't seem to find any DLLs even though those DLLs are actually loadable. Viz: $ python3 Python 3.7.7 (default, Apr 10 2020, 07:59:19) [GCC 9.3.0] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> import sys >>> from ctypes import * >>> from ctypes.util import find_library >>> find_library('cyglept-5') or 'Not found' 'Not found' >>> find_library('cyglept-5.dll') or 'Not Found' 'Not Found' >>> cdll.LoadLibrary('cyglept-5.dll') or 'Not Found' <CDLL 'cyglept-5.dll', handle 3f7970000 at 0x6fffffea76d0> So it appears to me that possibly find_library() is broken because it doesn't find the library, but yet Python can actually load the library. What am I missing? -- Jim Garrison j...@acm.org -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple