Mercurial > hgrepos > Python2 > PyMuPDF
view Makefile.freebsd @ 46:7ee69f120f19 default tip
>>>>> tag v1.26.5+1 for changeset b74429b0f5c4
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 11 Oct 2025 17:17:30 +0200 |
| parents | 8934ac156ef5 |
| children |
line wrap: on
line source
# -*- mode: makefile; coding: utf-8 -*- # # Needs GNU make (aka gmake) and binutils/ar or LLVM/ar # (instead of FreeBSD /usr/bin/ar). # # Building against an installed mupdf package fails because the libmupdfcpp.so # is missing. # # Prepare: # # - Create a Python venv and activate it # # - Install a LLVM package that has the same version as the libclang # Python package that will be used/installed # (e.g. pkg install llvm18 because of libclang>=18,<19) # # - In the "bin"-directory of the venv symlink "make" to /usr/local/bin/gmake # and "ar" to /usr/local/llvm18/bin/llvm-ar # # * Makefiles have GNU syntax # * ar is called with @-response-files -- which are a GNU feature (also # implemented by LLVM's ar) # # - At first to not build with tesseract (OCR) # # export PYMUPDF_SETUP_MUPDF_TESSERACT=0 # .PHONY: all wheel sdist populate-venv check .SILENT: check THIS_MAKEFILE_JUSTNAME:= $(firstword $(MAKEFILE_LIST)) THIS_MAKEFILE_DIR:= $(abspath $(dir $(THIS_MAKEFILE_JUSTNAME))) 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)' # # Setting these does not work for some parts built by sub-makes. # Symlink in the venv instead. # #CC= $(CLANG_DIR)/bin/clang #CXX= $(CLANG_DIR)/bin/clang++ # Define _FORTIFY_SOURCE=$(FORTIFY) (if != 0, default 0) FORTIFY?= 3 # # If != 0 (default 1): # -fno-delete-null-pointer-checks # # Should always be done when fortifying: # https://github.com/ossf/wg-best-practices-os-developers/issues/659 # # -Werror=implicit-function-declaration # -fstack-clash-protection # -fstack-protector-strong # EXTRA_CHECKS?= 1 all: sdist wheel wheel: check $(TEST) -e $(firstword $(PYTHON_PREFIXES))/bin/make || $(SYMLINK) $(LOCALBASE)/bin/gmake $(firstword $(PYTHON_PREFIXES))/bin/make $(TEST) -e $(firstword $(PYTHON_PREFIXES))/bin/ar || $(SYMLINK) $(CLANG_DIR)/bin/llvm-ar $(firstword $(PYTHON_PREFIXES))/bin/ar $(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) 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) PYMUPDF_SETUP_LIBCLANG='$(PYMUPDF_SETUP_LIBCLANG)' $(PYTHON) -m build --sdist --verbose --no-isolation populate-venv: ifneq ($(firstword $(PYTHON_PREFIXES)),$(lastword $(PYTHON_PREFIXES))) $(PYTHON) -m pip install -U -r requirements-build.txt else $(error Not in a Python virtual environment) endif check: ifneq ($(firstword $(PYTHON_PREFIXES)),$(lastword $(PYTHON_PREFIXES))) $(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*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 $(TEST) -x $(CLANG_DIR)/bin/clang $(TEST) -x $(CLANG_DIR)/bin/clang++ $(TEST) -x $(CLANG_DIR)/bin/ld.lld else $(error Not in a Python virtual environment) endif
