Skip to content

Commit

Permalink
Use add_dll_directory to add DLL folders on Windows
Browse files Browse the repository at this point in the history
We can now set the WEASYPRINT_DLL_DIRECTORIES environment variable to list
folders where DLL can be found.

Fix #1435.
  • Loading branch information
liZe committed Dec 11, 2021
1 parent 249336d commit b7fdfd7
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions weasyprint/text/ffi.py
Expand Up @@ -6,6 +6,8 @@
"""

import os

import cffi

ffi = cffi.FFI()
Expand Down Expand Up @@ -387,21 +389,32 @@ def _dlopen(ffi, *names):
return ffi.dlopen(names[0]) # pragma: no cover


if hasattr(os, 'add_dll_directory'):
dll_directories = os.getenv(
'WEASYPRINT_DLL_DIRECTORIES',
'C:\\Program Files\\GTK3-Runtime Win64\\bin').split(';')
for dll_directory in dll_directories:
try:
os.add_dll_directory(dll_directory)
except (OSError, FileNotFoundError):
pass

gobject = _dlopen(
ffi, 'gobject-2.0-0', 'gobject-2.0', 'libgobject-2.0-0',
'libgobject-2.0.so.0', 'libgobject-2.0.dylib')
'libgobject-2.0.so.0', 'libgobject-2.0.dylib', 'libgobject-2.0-0.dll')
pango = _dlopen(
ffi, 'pango-1.0-0', 'pango-1.0', 'libpango-1.0-0', 'libpango-1.0.so.0',
'libpango-1.0.dylib')
'libpango-1.0.dylib', 'libpango-1.0-0.dll')
harfbuzz = _dlopen(
ffi, 'harfbuzz', 'harfbuzz-0.0', 'libharfbuzz-0',
'libharfbuzz.so.0', 'libharfbuzz.so.0', 'libharfbuzz.0.dylib')
'libharfbuzz.so.0', 'libharfbuzz.so.0', 'libharfbuzz.0.dylib',
'libharfbuzz-0.dll')
fontconfig = _dlopen(
ffi, 'fontconfig-1', 'fontconfig', 'libfontconfig', 'libfontconfig-1.dll',
'libfontconfig.so.1', 'libfontconfig-1.dylib')
ffi, 'fontconfig-1', 'fontconfig', 'libfontconfig', 'libfontconfig.so.1',
'libfontconfig-1.dylib', 'libfontconfig-1.dll')
pangoft2 = _dlopen(
ffi, 'pangoft2-1.0-0', 'pangoft2-1.0', 'libpangoft2-1.0-0',
'libpangoft2-1.0.so.0', 'libpangoft2-1.0.dylib')
'libpangoft2-1.0.so.0', 'libpangoft2-1.0.dylib', 'libpangoft2-1.0-0.dll')

gobject.g_type_init()

Expand Down

0 comments on commit b7fdfd7

Please sign in to comment.