diff --git a/CHANGES.md b/CHANGES.md
index 5cec3d817d..e78c8e48e7 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,9 @@
+Synapse 1.12.3 (2020-04-03)
+===========================
+
+- Remove the the pin to Pillow 7.0 which was introduced in Synapse 1.12.2, and
+correctly fix the issue with building the Debian packages. ([\#7212](https://github.com/matrix-org/synapse/issues/7212))
+
Synapse 1.12.2 (2020-04-02)
===========================
diff --git a/debian/changelog b/debian/changelog
index 03b30cd12f..642115fc5a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+matrix-synapse-py3 (1.12.3) stable; urgency=medium
+
+ [ Richard van der Hoff ]
+ * Update the Debian build scripts to handle the new installation paths
+ for the support libraries introduced by Pillow 7.1.1.
+
+ [ Synapse Packaging team ]
+ * New synapse release 1.12.3.
+
+ -- Synapse Packaging team <packages@matrix.org> Fri, 03 Apr 2020 10:55:03 +0100
+
matrix-synapse-py3 (1.12.2) stable; urgency=medium
* New synapse release 1.12.2.
diff --git a/debian/rules b/debian/rules
index a4d2ce2ba4..c744060a57 100755
--- a/debian/rules
+++ b/debian/rules
@@ -15,17 +15,38 @@ override_dh_installinit:
# we don't really want to strip the symbols from our object files.
override_dh_strip:
+# dh_shlibdeps calls dpkg-shlibdeps, which finds all the binary files
+# (executables and shared libs) in the package, and looks for the shared
+# libraries that they depend on. It then adds a dependency on the package that
+# contains that library to the package.
+#
+# We make two modifications to that process...
+#
override_dh_shlibdeps:
- # make the postgres package's dependencies a recommendation
- # rather than a hard dependency.
+ # Firstly, postgres is not a hard dependency for us, so we want to make
+ # the things that psycopg2 depends on (such as libpq) be
+ # recommendations rather than hard dependencies. We do so by
+ # running dpkg-shlibdeps manually on psycopg2's libs.
+ #
find debian/$(PACKAGE_NAME)/ -path '*/site-packages/psycopg2/*.so' | \
xargs dpkg-shlibdeps -Tdebian/$(PACKAGE_NAME).substvars \
-pshlibs1 -dRecommends
- # all the other dependencies can be normal 'Depends' requirements,
- # except for PIL's, which is self-contained and which confuses
- # dpkg-shlibdeps.
- dh_shlibdeps -X site-packages/PIL/.libs -X site-packages/psycopg2
+ # secondly, we exclude PIL's libraries from the process. They are known
+ # to be self-contained, but they have interdependencies and
+ # dpkg-shlibdeps doesn't know how to resolve them.
+ #
+ # As of Pillow 7.1.0, these libraries are in
+ # site-packages/Pillow.libs. Previously, they were in
+ # site-packages/PIL/.libs.
+ #
+ # (we also need to exclude psycopg2, of course, since we've already
+ # dealt with that.)
+ #
+ dh_shlibdeps \
+ -X site-packages/PIL/.libs \
+ -X site-packages/Pillow.libs \
+ -X site-packages/psycopg2
override_dh_virtualenv:
./debian/build_virtualenv
diff --git a/synapse/__init__.py b/synapse/__init__.py
index bdad75113d..3bf2d02450 100644
--- a/synapse/__init__.py
+++ b/synapse/__init__.py
@@ -36,7 +36,7 @@ try:
except ImportError:
pass
-__version__ = "1.12.2"
+__version__ = "1.12.3"
if bool(os.environ.get("SYNAPSE_TEST_PATCH_LOG_CONTEXTS", False)):
# We import here so that we don't have to install a bunch of deps when
diff --git a/synapse/python_dependencies.py b/synapse/python_dependencies.py
index 3274eb9863..8de8cb2c12 100644
--- a/synapse/python_dependencies.py
+++ b/synapse/python_dependencies.py
@@ -61,9 +61,7 @@ REQUIREMENTS = [
"pyasn1-modules>=0.0.7",
"daemonize>=2.3.1",
"bcrypt>=3.1.0",
- # Pillow 7.1.0 causes the following issue on debian buster:
- # https://github.com/python-pillow/Pillow/issues/2377
- "pillow>=4.3.0,<7.1.0",
+ "pillow>=4.3.0",
"sortedcontainers>=1.4.4",
"pymacaroons>=0.13.0",
"msgpack>=0.5.2",
|