# HG changeset patch # User Franz Glasner # Date 1758616035 -7200 # Node ID 8934ac156ef5bec621ef330b4b70b1526c9e7412 # Parent 1252325c592fce4b5d7f2b962e9e2baa2f4b6159 Allow to build with the PyPI package "clang" instead of "libclang". 1. It seems to be maintained. 2. In the FreeBSD base system there is no pre-built libclang.so. If you need this library you have to install llvm from ports additionally. 2. On FreeBSD there is no pre-built wheel "libclang" with a packaged libclang.so. diff -r 1252325c592f -r 8934ac156ef5 Makefile.freebsd --- a/Makefile.freebsd Mon Sep 22 11:44:07 2025 +0200 +++ b/Makefile.freebsd Tue Sep 23 10:27:15 2025 +0200 @@ -36,14 +36,21 @@ PYMUPDF_SETUP_MUPDF_BUILD?= $(THIS_MAKEFILE_DIR)/mupdf-source # It would compile with tesseract because its sources are vendored by MuPDF PYMUPDF_SETUP_MUPDF_TESSERACT?= 0 +# +# We use clang instead of libclang: On FreeBSD you have to install +# llvm to get a libclang.so installed; there is no libclang package +# with a bundled libclang.so. Additionally, libclang currently is not +# up-to-date with respect to clang versions >= 19. +# +PYMUPDF_SETUP_LIBCLANG?= clang>=18,<19 LIBCLANG_LIBRARY_PATH?= $(CLANG_DIR)/lib +CLANG_DIR?= /usr/local/llvm18 TEST= /bin/test LOCALBASE?= /usr/local SYMLINK?= /bin/ln -s PYTHON?= python3 PYTHON_PREFIXES!= $(PYTHON) -c 'import sys; print(sys.prefix); print(sys.base_prefix)' -CLANG_DIR?= /usr/local/llvm18 # # Setting these does not work for some parts built by sub-makes. @@ -77,11 +84,11 @@ $(TEST) -e $(firstword $(PYTHON_PREFIXES))/bin/cc || $(SYMLINK) $(CLANG_DIR)/bin/clang $(firstword $(PYTHON_PREFIXES))/bin/cc $(TEST) -e $(firstword $(PYTHON_PREFIXES))/bin/c++ || $(SYMLINK) $(CLANG_DIR)/bin/clang++ $(firstword $(PYTHON_PREFIXES))/bin/c++ $(TEST) -e $(firstword $(PYTHON_PREFIXES))/bin/ld || $(SYMLINK) $(CLANG_DIR)/bin/ld.lld $(firstword $(PYTHON_PREFIXES))/bin/ld - FORTIFY=$(FORTIFY) EXTRA_CHECKS=$(EXTRA_CHECKS) PIPCL_VERBOSE=2 LIBCLANG_LIBRARY_PATH=$(LIBCLANG_LIBRARY_PATH) PYMUPDF_SETUP_MUPDF_BUILD=$(PYMUPDF_SETUP_MUPDF_BUILD) PYMUPDF_SETUP_MUPDF_TESSERACT=$(PYMUPDF_SETUP_MUPDF_TESSERACT) $(PYTHON) -m build --wheel --verbose --no-isolation + FORTIFY=$(FORTIFY) EXTRA_CHECKS=$(EXTRA_CHECKS) PIPCL_VERBOSE=2 LIBCLANG_LIBRARY_PATH=$(LIBCLANG_LIBRARY_PATH) PYMUPDF_SETUP_MUPDF_BUILD=$(PYMUPDF_SETUP_MUPDF_BUILD) PYMUPDF_SETUP_MUPDF_TESSERACT=$(PYMUPDF_SETUP_MUPDF_TESSERACT) PYMUPDF_SETUP_LIBCLANG='$(PYMUPDF_SETUP_LIBCLANG)' $(PYTHON) -m build --wheel --verbose --no-isolation sdist: check - PIPCL_VERBOSE=2 LIBCLANG_LIBRARY_PATH=$(LIBCLANG_LIBRARY_PATH) PYMUPDF_SETUP_MUPDF_BUILD=$(PYMUPDF_SETUP_MUPDF_BUILD) PYMUPDF_SETUP_MUPDF_TESSERACT=$(PYMUPDF_SETUP_MUPDF_TESSERACT) $(PYTHON) -m build --sdist --verbose --no-isolation + PIPCL_VERBOSE=2 LIBCLANG_LIBRARY_PATH=$(LIBCLANG_LIBRARY_PATH) PYMUPDF_SETUP_MUPDF_BUILD=$(PYMUPDF_SETUP_MUPDF_BUILD) PYMUPDF_SETUP_MUPDF_TESSERACT=$(PYMUPDF_SETUP_MUPDF_TESSERACT) PYMUPDF_SETUP_LIBCLANG='$(PYMUPDF_SETUP_LIBCLANG)' $(PYTHON) -m build --sdist --verbose --no-isolation populate-venv: @@ -97,7 +104,9 @@ $(PYTHON) -m pip freeze | grep -E '^\s*setuptools-scm==' >/dev/null $(PYTHON) -m pip freeze | grep -E '^\s*build==' >/dev/null $(PYTHON) -m pip freeze | grep -E '^\s*swig==' >/dev/null - $(PYTHON) -m pip freeze | grep -E '^\s*libclang==18\.' >/dev/null + $(PYTHON) -m pip freeze | grep -E '^\s*clang==18\.' >/dev/null + # This covers the "clang" and "libclang" package + $(PYTHON) -c 'import clang.cindex' >/dev/null $(TEST) -x $(LOCALBASE)/bin/gmake $(TEST) -x $(LOCALBASE)/bin/cmake $(TEST) -x $(CLANG_DIR)/bin/llvm-ar diff -r 1252325c592f -r 8934ac156ef5 mupdf-source/scripts/wrap/state.py --- a/mupdf-source/scripts/wrap/state.py Mon Sep 22 11:44:07 2025 +0200 +++ b/mupdf-source/scripts/wrap/state.py Tue Sep 23 10:27:15 2025 +0200 @@ -21,6 +21,12 @@ f'or (OpenBSD only) `pkg_add py3-llvm.`\n' ) clang = None +else: + if os.environ.get('LIBCLANG_LIBRARY_FILE', None): + clang.cindex.Config.set_library_file(os.environ['LIBCLANG_LIBRARY_FILE']) + elif os.environ.get('LIBCLANG_LIBRARY_PATH', None): + clang.cindex.Config.set_library_path(os.environ['LIBCLANG_LIBRARY_PATH']) + omit_fns = [ 'fz_open_file_w', diff -r 1252325c592f -r 8934ac156ef5 requirements-build.txt --- a/requirements-build.txt Mon Sep 22 11:44:07 2025 +0200 +++ b/requirements-build.txt Tue Sep 23 10:27:15 2025 +0200 @@ -9,4 +9,4 @@ setuptools-scm build swig -libclang>=18,<19 +clang>=18,<19