diff -pruN 3.1.1-1.1/debian/changelog 3.1.1-1.1ubuntu2/debian/changelog
--- 3.1.1-1.1/debian/changelog	2017-11-15 06:38:55.000000000 +0000
+++ 3.1.1-1.1ubuntu2/debian/changelog	2025-10-18 13:13:15.000000000 +0000
@@ -1,3 +1,16 @@
+audiotools (3.1.1-1.1ubuntu2) resolute; urgency=medium
+
+  * No-change rebuild with Python 3.14 as supported version
+
+ -- Graham Inggs <ginggs@ubuntu.com>  Sat, 18 Oct 2025 13:13:15 +0000
+
+audiotools (3.1.1-1.1ubuntu1) plucky; urgency=medium
+
+  * Port from distutils to setuptools.
+  * Provide a simple definition for the total_frame_sizes function.
+
+ -- Simon Quigley <tsimonq2@ubuntu.com>  Sun, 09 Mar 2025 21:31:53 -0500
+
 audiotools (3.1.1-1.1) unstable; urgency=medium
 
   * Non-maintainer upload.
diff -pruN 3.1.1-1.1/debian/control 3.1.1-1.1ubuntu2/debian/control
--- 3.1.1-1.1/debian/control	2017-11-15 06:38:55.000000000 +0000
+++ 3.1.1-1.1ubuntu2/debian/control	2025-03-10 02:23:14.000000000 +0000
@@ -1,5 +1,6 @@
 Source: audiotools
-Maintainer: Eric Shattow <lucent@gmail.com>
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+XSBC-Original-Maintainer: Eric Shattow <lucent@gmail.com>
 Section: sound
 Priority: optional
 Standards-Version: 4.1.1
@@ -17,7 +18,8 @@ Build-Depends:
  libtwolame-dev,
  libvorbis-dev,
  libwavpack-dev,
- python3-all-dev
+ python3-all-dev,
+ python3-setuptools
 X-Python-Version: >= 3.3
 
 Package: audiotools
diff -pruN 3.1.1-1.1/debian/patches/define-total_frame_sizes.patch 3.1.1-1.1ubuntu2/debian/patches/define-total_frame_sizes.patch
--- 3.1.1-1.1/debian/patches/define-total_frame_sizes.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.1.1-1.1ubuntu2/debian/patches/define-total_frame_sizes.patch	2025-03-10 02:28:22.000000000 +0000
@@ -0,0 +1,17 @@
+--- a/src/encoders/alac.c
++++ b/src/encoders/alac.c
+@@ -155,6 +155,14 @@ encoders_encode_alac(PyObject *dummy, Py
+ 
+ #define BUFFER_SIZE 4096
+ 
++static unsigned total_frame_sizes(const struct alac_frame_size *sizes)
++{
++    unsigned total = 0;
++    for ( ; sizes; sizes = sizes->next)
++        total += sizes->pcm_frames_size;
++    return total;
++}
++
+ static struct alac_frame_size*
+ encode_alac(BitstreamWriter *output,
+             struct PCMReader *pcmreader,
diff -pruN 3.1.1-1.1/debian/patches/no-distutils.patch 3.1.1-1.1ubuntu2/debian/patches/no-distutils.patch
--- 3.1.1-1.1/debian/patches/no-distutils.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.1.1-1.1ubuntu2/debian/patches/no-distutils.patch	2025-03-10 02:19:40.000000000 +0000
@@ -0,0 +1,13 @@
+--- a/setup.py
++++ b/setup.py
+@@ -33,8 +33,8 @@ import os
+ import os.path
+ import re
+ import subprocess
+-from distutils.core import setup, Extension
+-from distutils.command.build_ext import build_ext as _build_ext
++from setuptools import setup, Extension
++from setuptools.command.build_ext import build_ext as _build_ext
+ try:
+     from configparser import (RawConfigParser, NoSectionError, NoOptionError)
+ except ImportError:
diff -pruN 3.1.1-1.1/debian/patches/series 3.1.1-1.1ubuntu2/debian/patches/series
--- 3.1.1-1.1/debian/patches/series	2017-11-15 06:38:55.000000000 +0000
+++ 3.1.1-1.1ubuntu2/debian/patches/series	2025-03-10 02:28:03.000000000 +0000
@@ -1,2 +1,4 @@
 libcdio-paranoia.diff
 reproducible-build.patch
+no-distutils.patch
+define-total_frame_sizes.patch
