{"app_name":"Debian Janitor","binary_packages":["libsnack-alsa-dbgsym","libsnack-alsa","libsnack-oss-dbgsym","libsnack-oss","python3-tksnack","tcl-snack-dbgsym","tcl-snack-dev","tcl-snack-doc","tcl-snack"],"branch_url":"git+ssh://git@salsa.debian.org/tcltk-team/snack.git","build_distribution":"sid","build_log_highlight_lines":[],"build_log_line_count":3450,"build_log_name":"build.log","campaign":"control","change_set":"4ac99747-e81f-4aa3-a645-405acd925d66","codebase":"snack","codemod_log_name":"codemod.log","command":"brz up '--revision=git-v1:bc7af8c90ee9cf1de7b041a87fa9f9c8ef721fe8'","current_year":"2026","description":"","is_admin":false,"lintian_result":{"groups":[{"group_id":"snack_2.2.10.20090624+dfsg-3~jan+control1","input_files":[{"hints":[],"path":"libsnack-alsa-dbgsym_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb"},{"hints":[{"experimental":false,"note":"control != sid","pointer":{"item":{"index":"libsnack-alsa_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb (installed)","name":"usr/share/doc/libsnack-alsa/changelog.Debian.gz"},"line_position":1},"tag":"changelog-distribution-does-not-match-changes-file","visibility":"warning"},{"experimental":false,"note":"","tag":"old-fsf-address-in-copyright-file","visibility":"warning"}],"path":"libsnack-alsa_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb"},{"hints":[],"path":"libsnack-oss-dbgsym_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb"},{"hints":[{"experimental":false,"note":"control != sid","pointer":{"item":{"index":"libsnack-oss_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb (installed)","name":"usr/share/doc/libsnack-oss/changelog.Debian.gz"},"line_position":1},"tag":"changelog-distribution-does-not-match-changes-file","visibility":"warning"},{"experimental":false,"note":"","tag":"old-fsf-address-in-copyright-file","visibility":"warning"}],"path":"libsnack-oss_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb"},{"hints":[{"experimental":false,"note":"control != sid","pointer":{"item":{"index":"python3-tksnack_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/python3-tksnack/changelog.Debian.gz"},"line_position":1},"tag":"changelog-distribution-does-not-match-changes-file","visibility":"warning"},{"experimental":false,"note":"","tag":"old-fsf-address-in-copyright-file","visibility":"warning"}],"path":"python3-tksnack_2.2.10.20090624+dfsg-3~jan+control1_all.deb"},{"hints":[{"experimental":false,"note":"","pointer":{"item":{"index":"snack_2.2.10.20090624+dfsg-3~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":0},"tag":"no-dep5-copyright","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"snack_2.2.10.20090624+dfsg-3~jan+control1.dsc (patched)","name":"debian/changelog"},"line_position":1},"tag":"no-nmu-in-changelog","visibility":"warning"},{"experimental":false,"note":"2.2.10.20090624+dfsg-3~jan+control1","pointer":{"item":{"index":"snack_2.2.10.20090624+dfsg-3~jan+control1.dsc (patched)","name":"debian/changelog"},"line_position":1},"tag":"source-nmu-has-incorrect-version-number","visibility":"warning"}],"path":"snack_2.2.10.20090624+dfsg-3~jan+control1.dsc"},{"hints":[],"path":"snack_2.2.10.20090624+dfsg-3~jan+control1_amd64.buildinfo"},{"hints":[{"experimental":false,"note":"sid control","tag":"distribution-and-changes-mismatch","visibility":"warning"}],"path":"snack_2.2.10.20090624+dfsg-3~jan+control1_amd64.changes"},{"hints":[],"path":"tcl-snack-dbgsym_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb"},{"hints":[{"experimental":false,"note":"control != sid","pointer":{"item":{"index":"tcl-snack-dev_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb (installed)","name":"usr/share/doc/tcl-snack-dev/changelog.Debian.gz"},"line_position":1},"tag":"changelog-distribution-does-not-match-changes-file","visibility":"warning"},{"experimental":false,"note":"","tag":"old-fsf-address-in-copyright-file","visibility":"warning"}],"path":"tcl-snack-dev_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb"},{"hints":[{"experimental":false,"note":"control != sid","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/changelog.Debian.gz"},"line_position":1},"tag":"changelog-distribution-does-not-match-changes-file","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/examples/tcl/ex1.phn"},"line_position":0},"tag":"national-encoding","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/examples/tcl/ex2.phn"},"line_position":0},"tag":"national-encoding","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/html/Callback.html"},"line_position":0},"tag":"national-encoding","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/html/CreateFilter.html"},"line_position":0},"tag":"national-encoding","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/html/FileFormat.html"},"line_position":0},"tag":"national-encoding","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/html/SampConv.html"},"line_position":0},"tag":"national-encoding","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/html/SnackLib.html"},"line_position":0},"tag":"national-encoding","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/html/SoundObj.html"},"line_position":0},"tag":"national-encoding","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/html/SoundProp.html"},"line_position":0},"tag":"national-encoding","visibility":"warning"},{"experimental":false,"note":"","pointer":{"item":{"index":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb (installed)","name":"usr/share/doc/tcl-snack-doc/html/SoundSamp.html"},"line_position":0},"tag":"national-encoding","visibility":"warning"},{"experimental":false,"note":"","tag":"old-fsf-address-in-copyright-file","visibility":"warning"}],"path":"tcl-snack-doc_2.2.10.20090624+dfsg-3~jan+control1_all.deb"},{"hints":[{"experimental":false,"note":"control != sid","pointer":{"item":{"index":"tcl-snack_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb (installed)","name":"usr/share/doc/tcl-snack/changelog.Debian.gz"},"line_position":1},"tag":"changelog-distribution-does-not-match-changes-file","visibility":"warning"},{"experimental":false,"note":"","tag":"old-fsf-address-in-copyright-file","visibility":"warning"}],"path":"tcl-snack_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb"}],"source_name":"snack","source_version":"2.2.10.20090624+dfsg-3~jan+control1"}],"lintian_version":"2.143.0"},"logs":{"build":{"description":"build","name":"build.log","url":"/control/c/snack/4ac99747-e81f-4aa3-a645-405acd925d66/logs/build.log"},"codemod":{"description":"codemod","name":"codemod.log","url":"/control/c/snack/4ac99747-e81f-4aa3-a645-405acd925d66/logs/codemod.log"},"worker":{"content":"[2026-11-08T11:57:51Z INFO  janitor_worker] Opening branch at https://salsa.debian.org/tcltk-team/snack.git\n[2026-11-08T11:57:54Z INFO  janitor_worker] Cached branch URL http://janitor.debian.net/git/snack missing: http://janitor.debian.net/git/snack/\n[2026-11-08T11:57:54Z DEBUG janitor_worker] Workspace path: /srv/worker/output/1/janitor-worker-phwzs1/snack\n[2026-11-08T11:57:54Z DEBUG silver_platter::workspace] Creating sprout from git+ssh://git@salsa.debian.org/tcltk-team/snack.git\nTotal 837 (delta 89), reused 137 (delta 81), pack-reused 683 (from 1)\nTotal 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\n\nTotal 19 (delta 4), reused 17 (delta 2), pack-reused 0 (from 0)\n[2026-11-08T11:58:04Z DEBUG silver_platter::utils] Colocated branch vendor not found, skipping\nTotal 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\nNothing to delete.\n[2026-11-08T11:58:06Z DEBUG silver_platter::workspace] Fetching colocated branches: {\"vendor\": \"vendor\", \"pristine-tar\": \"pristine-tar\", \"experimental\": \"experimental\", \"upstream\": \"upstream\"}\nTotal 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\n[2026-11-08T11:58:09Z DEBUG silver_platter::workspace] Successfully fetched colocated branch pristine-tar -> pristine-tar\nTotal 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\n[2026-11-08T11:58:12Z DEBUG silver_platter::workspace] Successfully fetched colocated branch experimental -> experimental\nTotal 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\n[2026-11-08T11:58:15Z DEBUG silver_platter::workspace] Successfully fetched colocated branch upstream -> upstream\n[2026-11-08T11:58:15Z INFO  janitor_worker] Workspace ready - starting.\n[2026-11-08T11:58:15Z INFO  janitor_worker::debian] Running [\"brz\", \"up\", \"--revision=git-v1:bc7af8c90ee9cf1de7b041a87fa9f9c8ef721fe8\"]\n[2026-11-08T11:58:15Z DEBUG debian_analyzer::detect_gbp_dch] Branch history analysis: changelog_only: 13, other_only: 5, mixed: 29, dch_references: 0, unreleased_references: 10\nfound 325 deltas to reuse\n95/325)\n25)\n[2026-11-08T11:58:17Z INFO  ognibuild::debian::fix_build] Using fixers: [PgBuildExtOutOfDateControlFixer, MissingConfigureFixer, MissingAutomakeInputFixer, MissingConfigStatusInputFixer, MissingPerlFileFixer, DebcargoUnacceptablePredicateFixer, DebcargoUnacceptableComparatorFixer, RetryAptFetchFailure, PackageDependencyFixer]\n[2026-11-08T11:58:17Z DEBUG ognibuild::debian::build] Adding dummy changelog entry 2.2.10.20090624+dfsg-3~jan+control1 for build\n[2026-11-08T11:58:17Z DEBUG ognibuild::debian::build] Writing build log to /srv/worker/output/1/janitor-worker-phwzs1/build.log\n[2026-11-08T11:58:17Z INFO  ognibuild::debian::build] Building debian packages, running sbuild --chroot-mode=unshare --no-clean-source -A -s -v -d sid.\n[2026-11-08T12:05:49Z INFO  ognibuild::debian::build] Build succeeded.\n[2026-11-08T12:05:49Z INFO  janitor_worker::debian::build] Built [\"/srv/worker/output/1/janitor-worker-phwzs1/snack_2.2.10.20090624+dfsg-3~jan+control1_amd64.changes\", \"/srv/worker/output/1/janitor-worker-phwzs1/tcl-snack_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb\", \"/srv/worker/output/1/janitor-worker-phwzs1/snack_2.2.10.20090624+dfsg-3~jan+control1_amd64.buildinfo\", \"/srv/worker/output/1/janitor-worker-phwzs1/python3-tksnack_2.2.10.20090624+dfsg-3~jan+control1_all.deb\"].\n[2026-11-08T12:05:49Z DEBUG janitor_worker::debian::lintian] Running lintian: cd \"/srv/worker/output/1/janitor-worker-phwzs1\" && \"lintian\" \"--exp-output=format=json\" \"--allow-root\" \"/srv/worker/output/1/janitor-worker-phwzs1/snack_2.2.10.20090624+dfsg-3~jan+control1_amd64.changes\" \"/srv/worker/output/1/janitor-worker-phwzs1/tcl-snack_2.2.10.20090624+dfsg-3~jan+control1_amd64.deb\" \"/srv/worker/output/1/janitor-worker-phwzs1/snack_2.2.10.20090624+dfsg-3~jan+control1_amd64.buildinfo\" \"/srv/worker/output/1/janitor-worker-phwzs1/python3-tksnack_2.2.10.20090624+dfsg-3~jan+control1_all.deb\"\n[2026-11-08T12:05:56Z INFO  janitor_worker] Pushing result branch to http://janitor.debian.net/git/snack\nfound 0 deltas to reuse\n[2026-11-08T12:05:57Z INFO  janitor_worker::vcs] Pushing packaging branch cache to http://janitor.debian.net/git/snack,branch=debian%2Flatest\nfound 63 deltas to reuse\ngit: cannot lock ref 'refs/heads/debian/latest': reference already exists\n[2026-11-08T12:05:58Z WARN  janitor_worker::vcs] unable to push to cache URL http://janitor.debian.net/git/snack,branch=debian%2Flatest: Remote Git error: reference already exists\n","description":"worker","name":"worker.log","url":"/control/c/snack/4ac99747-e81f-4aa3-a645-405acd925d66/logs/worker.log"}},"my_review":null,"other_reviews":[],"primary_log":"worker","publish_history":[],"queue_position":1,"result_code":"success","resume_from":null,"reviews":[],"revision":"git-v1:bc7af8c90ee9cf1de7b041a87fa9f9c8ef721fe8","run":{"branch_url":"git+ssh://git@salsa.debian.org/tcltk-team/snack.git","build_version":null,"change_set":"4ac99747-e81f-4aa3-a645-405acd925d66","codebase":"snack","command":"brz up '--revision=git-v1:bc7af8c90ee9cf1de7b041a87fa9f9c8ef721fe8'","context":null,"debian_build_distribution":"sid","debian_build_version":null,"description":"","duration_seconds":489,"failure_stage":null,"failure_transient":null,"finish_time":"2026-11-08T12:05:59.056806Z","id":"4ac99747-e81f-4aa3-a645-405acd925d66","logfilenames":["worker.log","codemod.log","build.log"],"main_branch_revision":"git-v1:297e3f535dd17bedd44e3d49f8c621e13d63dd4e","publish_status":"needs-manual-review","result_branches":[{"absorbed":false,"base_revision":"git-v1:297e3f535dd17bedd44e3d49f8c621e13d63dd4e","diff":"diff --git a/debian/changelog b/debian/changelog\nindex 3a28c40..1de02ca 100644\n--- a/debian/changelog\n+++ b/debian/changelog\n@@ -1,52 +1,3 @@\n-snack (2.2.10.20090624+dfsg-5) unstable; urgency=medium\n-\n-  * Switch dependencies from Tcl/Tk 9.0 to Tcl/tk 9.1.\n-  * Depend on libtcl8.6/9.1 instead of on tcl8.6/9.1.\n-  * Use https:// in URLs.\n-  * Drop the priority field from debian/copyright.\n-  * Bump the debhelper compatibility level to 14.\n-  * Bump the standards version to 4.7.4.\n-\n- -- Sergei Golovan <sgolovan@debian.org>  Sun, 18 Oct 2026 14:56:48 +0300\n-\n-snack (2.2.10.20090624+dfsg-4) unstable; urgency=medium\n-\n-  * Upload to unstable.\n-\n- -- Sergei Golovan <sgolovan@debian.org>  Sun, 10 Aug 2025 11:23:00 +0300\n-\n-snack (2.2.10.20090624+dfsg-4~exp2) experimental; urgency=medium\n-\n-  * Cleanup patches.\n-  * Fix creating Snack canvas items for Tcl/Tk 8.6.\n-  * Provide the tcl8.6-snack and tcl9.0-snack packages to indicate\n-    support for Tcl/Tk 8.6 and 9.0.\n-\n- -- Sergei Golovan <sgolovan@debian.org>  Thu, 05 Jun 2025 18:56:10 +0300\n-\n-snack (2.2.10.20090624+dfsg-4~exp1) experimental; urgency=medium\n-\n-  * Cleanup debian/control. Remove conflicts with very old packages.\n-  * Build libsnack-alsa only for Linux architectures.\n-  * Fix interpreter in Tcl demos.\n-\n- -- Sergei Golovan <sgolovan@debian.org>  Fri, 16 May 2025 20:13:53 +0300\n-\n-snack (2.2.10.20090624+dfsg-4~exp0) experimental; urgency=medium\n-\n-  * Drop support for Python 2 in tkSnack and Python demos.\n-  * Port the Snack libraries to Tcl/Tk 9.0 and build them for both\n-    Tcl/Tk 8.6 and 9.0.\n-  * Cleanup and document all the patches.\n-  * Bump the standards version to 4.7.2.\n-  * Make tcl-snack, tcl-snack-dev, libsnack-alsa, libsnack-oss multi-arch same.\n-  * Make tcl-snack-doc multi-arch foreign.\n-  * Fix FTBFS with --shuffle option for make (closes: #1105691).\n-  * Remove the old postal address of the Free Software Foundation from\n-    debian/copyright.\n-\n- -- Sergei Golovan <sgolovan@debian.org>  Fri, 16 May 2025 16:20:10 +0300\n-\n snack (2.2.10.20090624+dfsg-3) unstable; urgency=medium\n \n   * Add missing build-dependency on python3-setuptools (closes: #1080806).\ndiff --git a/debian/control b/debian/control\nindex bc35cbf..5618d72 100644\n--- a/debian/control\n+++ b/debian/control\n@@ -1,22 +1,24 @@\n Source: snack\n Section: sound\n+Priority: optional\n Maintainer: Sergei Golovan <sgolovan@debian.org>\n-Build-Depends: debhelper-compat (= 14), dh-exec, tk8.6-dev, tk9.1-dev,\n- libmpg123-dev, libogg-dev, libvorbis-dev, libasound2-dev [linux-any]\n+Build-Depends: debhelper-compat (= 13), tk-dev (>= 8.5), libmpg123-dev, libogg-dev, libvorbis-dev,\n+ libasound2-dev [linux-any]\n Build-Depends-Indep: python3-all-dev, python3-setuptools, dh-python\n-Standards-Version: 4.7.4\n-Homepage: https://pdqi.com/w/pw/pdqi/Wize/Snack\n+Standards-Version: 4.7.0\n+Homepage: http://pdqi.com/w/pw/pdqi/Wize/Snack\n Vcs-Browser: https://salsa.debian.org/tcltk-team/snack\n Vcs-Git: https://salsa.debian.org/tcltk-team/snack.git\n \n Package: tcl-snack\n Section: libs\n Architecture: any\n-Multi-Arch: same\n-Depends: ${shlibs:Depends}, ${misc:Depends}, libtcl8.6 | libtcl9.1,\n+Depends: ${shlibs:Depends}, ${misc:Depends}, ${tclsh:Depends},\n  libsnack-oss (= ${binary:Version}) | libsnack-alsa (= ${binary:Version})\n-Suggests: libtk8.6 | libtk9.1, tcl-snack-doc\n-Provides: tcl8.6-snack (= ${binary:Version}), tcl9.1-snack (= ${binary:Version})\n+Suggests: ${wish:Depends}, tcl-snack-doc\n+Conflicts: libsnack2, libsnack2-alsa\n+Provides: libsnack2, libsnack2-alsa\n+Replaces: libsnack2, libsnack2-alsa\n Description: Sound extension to Tcl/Tk and Python/Tkinter - Tcl/Tk library\n  Snack is an extension to the Tcl/Tk scripting language\n  that adds sound functionality. There are commands to play, record,\n@@ -26,11 +28,10 @@ Description: Sound extension to Tcl/Tk and Python/Tkinter - Tcl/Tk library\n \n Package: libsnack-alsa\n Section: libs\n-Architecture: linux-any\n-Multi-Arch: same\n+Architecture: any\n Depends: ${shlibs:Depends}, ${misc:Depends}\n Conflicts: libsnack-oss\n-Replaces:  libsnack-oss\n+Replaces: libsnack2, libsnack2-alsa, libsnack-oss\n Description: Sound extension to Tcl/Tk and Python/Tkinter - ALSA files\n  Snack is an extension to the Tcl/Tk scripting language\n  that adds sound functionality. There are commands to play, record,\n@@ -43,10 +44,9 @@ Description: Sound extension to Tcl/Tk and Python/Tkinter - ALSA files\n Package: libsnack-oss\n Section: libs\n Architecture: any\n-Multi-Arch: same\n Depends: ${shlibs:Depends}, ${misc:Depends}, osspd | oss-compat\n Conflicts: libsnack-alsa\n-Replaces: libsnack-alsa\n+Replaces: libsnack2, libsnack2-alsa, libsnack-alsa\n Description: Sound extension to Tcl/Tk and Python/Tkinter - OSS files\n  Snack is an extension to the Tcl/Tk scripting language\n  that adds sound functionality. There are commands to play, record,\n@@ -61,6 +61,7 @@ Section: python\n Architecture: all\n Depends: tcl-snack (>= ${source:Version}), ${python3:Depends}, ${misc:Depends}, python3-tk\n Suggests: tcl-snack-doc\n+Provides: ${python3:Provides}\n Description: Sound extension to Tcl/Tk and Python/Tkinter - Python 3.x library\n  Snack is an extension to the Tcl/Tk scripting language\n  that adds sound functionality. There are commands to play, record,\n@@ -73,8 +74,10 @@ Description: Sound extension to Tcl/Tk and Python/Tkinter - Python 3.x library\n Package: tcl-snack-dev\n Section: libdevel\n Architecture: any\n-Multi-Arch: same\n Depends: tcl-snack (= ${binary:Version}), ${misc:Depends}\n+Replaces: snack-dev, libsnack2-dev\n+Conflicts: libsnack2-dev\n+Provides: libsnack2-dev\n Description: Sound extension to Tcl/Tk and Python/Tkinter - development files\n  This package is needed for building transcriber, and contains\n  snackConfig.sh, snack.h.\n@@ -93,9 +96,11 @@ Description: Sound extension to Tcl/Tk and Python/Tkinter - development files\n Package: tcl-snack-doc\n Section: doc\n Architecture: all\n-Multi-Arch: foreign\n Depends: ${misc:Depends}\n-Suggests: tk8.6 | tk9.1, tcl-snack, python3-tksnack\n+Suggests: tcl-snack, python3-tksnack\n+Replaces: libsnack2-doc\n+Conflicts: libsnack2-doc\n+Provides: libsnack2-doc\n Description: Sound extension to Tcl/Tk and Python/Tkinter - documentation\n  Snack provides a sound functionality extension to the Tcl/Tk language.\n  .\ndiff --git a/debian/copyright b/debian/copyright\nindex cb5c84d..92a5b34 100644\n--- a/debian/copyright\n+++ b/debian/copyright\n@@ -1,10 +1,10 @@\n This package was debianized by David A. van Leeuwen <vleeuwen@debian.org> on\n Thu, 23 Sep 1999 15:24:33 +0200.\n \n-It was originally downloaded from https://www.speech.kth.se/snack\n+It was originally downloaded from http://www.speech.kth.se/snack\n \n Currently, a modification from\n-https://wize.cvs.sourceforge.net/viewvc/wize/wize2/wize/snack2.2.10/\n+http://wize.cvs.sourceforge.net/viewvc/wize/wize2/wize/snack2.2.10/\n is used.\n \n The files demos/tcl/tclkit-linux-x86, demos/tcl/sdx,\n@@ -34,7 +34,9 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n GNU General Public License for more details.\n \n You should have received a copy of the GNU General Public License\n-along with this program.  If not, see https://www.gnu.org/licenses/.\n+along with this program; if not, write to the Free Software\n+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,\n+MA 02110-1301 USA\n \n -----------------------------------------------------------------------\n Files: generic/jkFormant.h, generic/jkFormant.c\ndiff --git a/debian/libsnack-alsa.docs b/debian/libsnack-alsa.docs\ndeleted file mode 100644\nindex 151b8ff..0000000\n--- a/debian/libsnack-alsa.docs\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-README\n-debian/README.Debian\ndiff --git a/debian/libsnack-alsa.install b/debian/libsnack-alsa.install\nnew file mode 100644\nindex 0000000..0a4adfd\n--- /dev/null\n+++ b/debian/libsnack-alsa.install\n@@ -0,0 +1,2 @@\n+debian/tmp-alsa/usr/lib/snack2.2/libsnack.so\t/usr/lib/tcltk/snack2.2\n+debian/tmp-alsa/usr/lib/snack2.2/libsound.so\t/usr/lib/tcltk/snack2.2\ndiff --git a/debian/libsnack-oss.docs b/debian/libsnack-oss.docs\ndeleted file mode 100644\nindex 151b8ff..0000000\n--- a/debian/libsnack-oss.docs\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-README\n-debian/README.Debian\ndiff --git a/debian/libsnack-oss.install b/debian/libsnack-oss.install\nnew file mode 100644\nindex 0000000..4562a09\n--- /dev/null\n+++ b/debian/libsnack-oss.install\n@@ -0,0 +1,2 @@\n+debian/tmp/usr/lib/snack2.2/libsnack.so\t/usr/lib/tcltk/snack2.2\n+debian/tmp/usr/lib/snack2.2/libsound.so\t/usr/lib/tcltk/snack2.2\ndiff --git a/debian/patches/CVE-2012-6303.patch b/debian/patches/CVE-2012-6303.patch\nindex 5184144..dca72b3 100644\n--- a/debian/patches/CVE-2012-6303.patch\n+++ b/debian/patches/CVE-2012-6303.patch\n@@ -1,9 +1,3 @@\n-From: Michael Karcher\n-Subject: Patch fixes CVE-2012-6303 (buffer overflow which causes\n- denial of service via a large chunk size in a WAV file.\n-Date: Wed, 02 Jan 2013 00:56:47 +0100\n-Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=695614\n-\n --- a/generic/jkSoundFile.c\n +++ b/generic/jkSoundFile.c\n @@ -1796,7 +1796,14 @@\ndiff --git a/debian/patches/alsa.patch b/debian/patches/alsa.patch\nindex c720989..c645f58 100644\n--- a/debian/patches/alsa.patch\n+++ b/debian/patches/alsa.patch\n@@ -1,8 +1,5 @@\n-From: Jeremiah at Myah OS\n-Subject: Patch from Jeremiah at Myah OS which makes tcl-snack-alsa working\n- with ALSA 1.0.16.\n-Date: Sat, 25 Oct 2008 21:33:33 +0400\n-Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=503398\n+Patch from Jeremiah at Myah OS which makes tcl-snack-alsa working\n+with ALSA 1.0.16 (closes: #503398).\n \n --- a/unix/jkAudIO_alsa.c\n +++ b/unix/jkAudIO_alsa.c\ndiff --git a/debian/patches/args.patch b/debian/patches/args.patch\nindex 9f4afe4..1f306d6 100644\n--- a/debian/patches/args.patch\n+++ b/debian/patches/args.patch\n@@ -1,7 +1,4 @@\n-From: Sergei Golovan\n-Subject: Patch fixes several cases of access beyond array boundaries.\n-Date: Thu, 22 Jul 2010 22:23:47 +0400\n-Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=582601\n+Patch by Sergei Golovan fixes several cases of access beyond array boundaries.\n \n --- a/generic/jkFilterIIR.c\n +++ b/generic/jkFilterIIR.c\ndiff --git a/debian/patches/autoconf.patch b/debian/patches/autoconf.patch\ndeleted file mode 100644\nindex ca6d947..0000000\n--- a/debian/patches/autoconf.patch\n+++ /dev/null\n@@ -1,49 +0,0 @@\n-From: Sergei Golovan\n-Subject: Patch adapts Snacks configure.in to the modern autoconf syntax.\n-Date: Fri, 15 May 2025 12:27:09 +0300\n-\n---- a/unix/configure.in\n-+++ b/unix/configure.in\n-@@ -229,7 +229,7 @@\n- #--------------------------------------------------------------------\n- \n- # Checks for header files.\n--_AC_INCLUDES_DEFAULT_REQUIREMENTS\n-+AC_INCLUDES_DEFAULT\n- \n- AC_SUBST(CC)\n- AC_SUBST(CFLAGS)\n-@@ -263,4 +263,5 @@\n- AC_SUBST(SNACK_STUB_LIB_FLAG)\n- AC_SUBST(SNACK_VERSION)\n- \n--AC_OUTPUT(Makefile snackConfig.sh)\n-+AC_CONFIG_FILES([Makefile snackConfig.sh])\n-+AC_OUTPUT\n---- a/unix/Makefile.in\n-+++ b/unix/Makefile.in\n-@@ -155,7 +155,7 @@\n- \t$(CC) -c $(CFLAGS) $(GENERIC_DIR)/sigproc2.c\n- \n- snackStubLib.o: $(GENERIC_DIR)/snackStubLib.c\n--\t$(CC) -c $(CFLAGS) $(GENERIC_DIR)/snackStubLib.c\n-+\t$(CC) -c $(CFLAGS) -UALSA -UOSS $(GENERIC_DIR)/snackStubLib.c\n- \n- libsound${SHLIB_SUFFIX}: ${OBJSO}\n- \t${SHLIB_LD} ${OBJSO} ${LIBSO} -o libsound${SHLIB_SUFFIX} \n-@@ -303,13 +303,13 @@\n- OBJMP3 = SnackMP3.o\n- \n- SnackOgg.o: $(GENERIC_DIR)/SnackOgg.c\n--\t$(CC) @OGGINC@ -c $(CFLAGS) -DUSE_SNACK_STUBS $(GENERIC_DIR)/SnackOgg.c\n-+\t$(CC) @OGGINC@ -c $(CFLAGS) -DUSE_SNACK_STUBS -UALSA -UOSS $(GENERIC_DIR)/SnackOgg.c\n- \n- libsnackogg${SHLIB_SUFFIX}: ${OBJOGG}\n- \t${SHLIB_LD} ${OBJOGG} ${LIBOGG} -o libsnackogg${SHLIB_SUFFIX}\n- \n- SnackMpg.o: $(GENERIC_DIR)/SnackMpg.c\n--\t$(CC) -c $(CFLAGS) -DUSE_SNACK_STUBS $(GENERIC_DIR)/SnackMpg.c\n-+\t$(CC) -c $(CFLAGS) -DUSE_SNACK_STUBS -UALSA -UOSS $(GENERIC_DIR)/SnackMpg.c\n- \n- libsnackmpg${SHLIB_SUFFIX}: ${OBJMPG}\n- \t${SHLIB_LD} ${OBJMPG} ${LIBMPG} -o libsnackmpg${SHLIB_SUFFIX}\ndiff --git a/debian/patches/formant.patch b/debian/patches/formant.patch\nindex cab491e..44affa4 100644\n--- a/debian/patches/formant.patch\n+++ b/debian/patches/formant.patch\n@@ -1,15 +1,15 @@\n-Author: Thomas Uhle <thomas.uhle@mailbox.tu-dresden.de>\n-Description: Replace dwnsample() and do_fir() by downsample() and do_ffir() resp.\n- Utilize the functions downsample() and do_ffir() from jkGetF0.c for the signal\n- pre-processing. The former functions are from proprietary code and, thus, can't\n- be used. Notice that do_fir() was a 16-bit integer implementation for an FIR\n- filter whereas do_ffir() is a floating-point implementation. This might cause a\n- higher computational effort. On the other side we gain precision. That is why\n- the volume of the audio signal can stay the same now and we experience much less\n- effects from quantization.\n-Last-Modified: Sat, 18 Feb 2023 20:33:38 +0100\n-Bug-Debian: https://bugs.debian.org/1029034\n-\n+Description: Replace dwnsample() and do_fir() by downsample() and do_ffir() resp.\r\n+ Utilize the functions downsample() and do_ffir() from jkGetF0.c for the signal\r\n+ pre-processing. The former functions are from proprietary code and, thus, can't\r\n+ be used. Notice that do_fir() was a 16-bit integer implementation for an FIR\r\n+ filter whereas do_ffir() is a floating-point implementation. This might cause a\r\n+ higher computational effort. On the other side we gain precision. That is why\r\n+ the volume of the audio signal can stay the same now and we experience much less\r\n+ effects from quantization.\r\n+Author: Thomas Uhle <thomas.uhle@mailbox.tu-dresden.de>\r\n+Last-Modified: Sat, 18 Feb 2023 20:33:38 +0100\r\n+Bug-Debian: https://bugs.debian.org/1029034\r\n+\r\n --- a/generic/jkFormant.c\n +++ b/generic/jkFormant.c\n @@ -611,13 +611,11 @@\ndiff --git a/debian/patches/gcc-15.patch b/debian/patches/gcc-15.patch\nindex 1568275..d232e4e 100644\n--- a/debian/patches/gcc-15.patch\n+++ b/debian/patches/gcc-15.patch\n@@ -1,9 +1,3 @@\n-From: Sergei Golovan\n-Subject: Patch excessively fixes FTBFS and warnings when Snack is\n- built using GCC 15.\n-Date: Fri, 19 February 2025 17:44:21 +0300\n-Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1097902\n-\n --- a/generic/jkGetF0.c\n +++ b/generic/jkGetF0.c\n @@ -36,8 +36,14 @@\ndiff --git a/debian/patches/libs.patch b/debian/patches/libs.patch\nindex 152aa6f..1e5fa33 100644\n--- a/debian/patches/libs.patch\n+++ b/debian/patches/libs.patch\n@@ -1,7 +1,3 @@\n-From: Sergei Golovan\n-Subject: Patch replaces full list of libs used by Tk by a minimal set\n- of libs to avoid unnecessary dependencies of the Snack package.\n-Date: Thu, 22 Jul 2010 22:23:47 +0400\n \n --- a/unix/Makefile.in\n +++ b/unix/Makefile.in\ndiff --git a/debian/patches/make-shuffle.patch b/debian/patches/make-shuffle.patch\ndeleted file mode 100644\nindex a56224b..0000000\n--- a/debian/patches/make-shuffle.patch\n+++ /dev/null\n@@ -1,24 +0,0 @@\n-From: Sergei Golovan\n-Subject: Patch fixes the makefiles to make the package buildable if\n- option --shuffle is used.\n-Date: Fri, 16 May 2025 15:10:52 +0300\n-Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1105691\n-\n---- a/unix/Makefile.in\n-+++ b/unix/Makefile.in\n-@@ -305,13 +305,13 @@\n- SnackOgg.o: $(GENERIC_DIR)/SnackOgg.c\n- \t$(CC) @OGGINC@ -c $(CFLAGS) -DUSE_SNACK_STUBS -UALSA -UOSS $(GENERIC_DIR)/SnackOgg.c\n- \n--libsnackogg${SHLIB_SUFFIX}: ${OBJOGG}\n-+libsnackogg${SHLIB_SUFFIX}: ${OBJOGG} @DOSTUBLIB@\n- \t${SHLIB_LD} ${OBJOGG} ${LIBOGG} -o libsnackogg${SHLIB_SUFFIX}\n- \n- SnackMpg.o: $(GENERIC_DIR)/SnackMpg.c\n- \t$(CC) -c $(CFLAGS) -DUSE_SNACK_STUBS -UALSA -UOSS $(GENERIC_DIR)/SnackMpg.c\n- \n--libsnackmpg${SHLIB_SUFFIX}: ${OBJMPG}\n-+libsnackmpg${SHLIB_SUFFIX}: ${OBJMPG} @DOSTUBLIB@\n- \t${SHLIB_LD} ${OBJMPG} ${LIBMPG} -o libsnackmpg${SHLIB_SUFFIX}\n- \n- install:\ndiff --git a/debian/patches/mpg123.patch b/debian/patches/mpg123.patch\nindex e37652d..1817388 100644\n--- a/debian/patches/mpg123.patch\n+++ b/debian/patches/mpg123.patch\n@@ -6,12 +6,8 @@ Last-Updated: Sat, 27 Jul 2013 20:49:13 +0400\n \n --- a/unix/Makefile.in\n +++ b/unix/Makefile.in\n-@@ -40,16 +40,16 @@\n- SHLIB_LD     = @SHLIB_LD@\n- SHLIB_SUFFIX = @SHLIB_SUFFIX@\n- \n--all: libsound${SHLIB_SUFFIX} libsnack${SHLIB_SUFFIX} @DOSTUBLIB@ @LIBNIST@ @LIBOGG@ editversion\n-+all: libsound${SHLIB_SUFFIX} libsnack${SHLIB_SUFFIX} @DOSTUBLIB@ @LIBNIST@ @LIBOGG@ libsnackmpg${SHLIB_SUFFIX} editversion\n+@@ -43,13 +43,13 @@\n+ all: libsound${SHLIB_SUFFIX} libsnack${SHLIB_SUFFIX} @DOSTUBLIB@ @LIBNIST@ @LIBOGG@ editversion\n  \n  OBJSO = sound.o jkSound.o jkSoundEngine.o jkSoundEdit.o jkSoundFile.o \\\n -\tg711.o @AOBJ@ jkFormatMP3.o jkSoundProc.o ffa.o jkPitchCmd.o \\\ndiff --git a/debian/patches/series b/debian/patches/series\nindex df113e3..d75242e 100644\n--- a/debian/patches/series\n+++ b/debian/patches/series\n@@ -10,6 +10,3 @@ cflags.patch\n formant.patch\n gnu-hurd.patch\n gcc-15.patch\n-autoconf.patch\n-tcl9.patch\n-make-shuffle.patch\ndiff --git a/debian/patches/tcl9.patch b/debian/patches/tcl9.patch\ndeleted file mode 100644\nindex 7368065..0000000\n--- a/debian/patches/tcl9.patch\n+++ /dev/null\n@@ -1,1207 +0,0 @@\n-From: Sergei Golovan:\n-Subject: Patch ports Snack to Tcl/Tk 9. The main changes are:\n- - Define CONST, CONST84, CONST86 as const\n- - Define Tk_Offset as offsetof\n- - Define _ANSI_ARGS_\n- - Replace int by Tcl_Size where function prototype has changed,\n-   definr Tcl_Size for 8.6\n- - Remove usage of obsolete TCL_INTERP_DESTROYED, TCL_PARSE_PART1, TK_CONFIG_OPTION_SPECIFIED\n- - Rewrite creation and configureation of new canvas items using Tcl_Obj interface\n- - Adapt calls to Tcl_InitStubs() and Tk_InitStubs()\n-Date: Fri, 16 May 2025 14:29:29 +0300\n-\n---- a/generic/snack.h\n-+++ b/generic/snack.h\n-@@ -30,6 +30,24 @@\n- #   define CONST84 const\r\n- #endif\r\n- \r\n-+#ifndef CONST86\r\n-+#   define CONST86 const\r\n-+#endif\r\n-+\r\n-+#ifndef CONST\r\n-+#   define CONST const\r\n-+#endif\r\n-+\r\n-+#define _ANSI_ARGS_(x) x\r\n-+\r\n-+#ifndef Tk_Offset\r\n-+#   define Tk_Offset(x,y) offsetof(x,y)\r\n-+#endif\r\n-+\r\n-+#ifndef TCL_SIZE_MAX\r\n-+#   define Tcl_Size int\r\n-+#endif\r\n-+\r\n- #include \"jkSound.h\"\r\n- #include \"jkAudIO.h\"\r\n- \r\n---- a/generic/sound.c\n-+++ b/generic/sound.c\n-@@ -65,7 +65,7 @@\n- Snack_DebugCmd(ClientData cdata, Tcl_Interp *interp, int objc,\n- \t       Tcl_Obj *CONST objv[])\n- {\n--  int len;\n-+  Tcl_Size len;\n-   char *str;\n-   CONST84 char *patchLevelStr;\n- \n-@@ -149,7 +149,7 @@\n-   char rates[100];\n-   \n- #ifdef USE_TCL_STUBS\n--  if (Tcl_InitStubs(interp, \"8\", 0) == NULL) {\n-+  if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {\n-     return TCL_ERROR;\n-   }\n- #endif\n---- a/generic/jkSound.c\n-+++ b/generic/jkSound.c\n-@@ -498,7 +498,8 @@\n- int\n- GetChannels(Tcl_Interp *interp, Tcl_Obj *obj, int *nchannels)\n- {\n--  int length, val;\n-+  Tcl_Size length;\n-+  int val;\n-   char *str = Tcl_GetStringFromObj(obj, &length);\n- \n-   if (strncasecmp(str, \"MONO\", length) == 0) {\n-@@ -525,7 +526,7 @@\n- int\n- GetEncoding(Tcl_Interp *interp, Tcl_Obj *obj, int *encoding, int *sampsize)\n- {\n--  int length;\n-+  Tcl_Size length;\n-   char *str = Tcl_GetStringFromObj(obj, &length);\n- \n-   if (strncasecmp(str, \"LIN16\", length) == 0) {\n-@@ -1088,7 +1089,7 @@\n- \t}\n-       case BYTEORDER:\n- \t{\n--\t  int length;\n-+\t  Tcl_Size length;\n- \t  char *str = Tcl_GetStringFromObj(objv[arg+1], &length);\n- \t  if (strncasecmp(str, \"littleEndian\", length) == 0) {\n- \t    SwapIfBE(s);\n-@@ -1127,7 +1128,7 @@\n- \t}\n-       case PRECISION:\n- \t{\n--\t  int length;\n-+\t  Tcl_Size length;\n- \t  char *str = Tcl_GetStringFromObj(objv[arg+1], &length);\n- \t  if (strncasecmp(str, \"double\", length) == 0) {\n- \t    s->precision = SNACK_DOUBLE_PREC;\n-@@ -1681,7 +1682,7 @@\n-   char *name;\n-   Tcl_HashTable *hTab = (Tcl_HashTable *) cdata;\n-   Tcl_HashEntry *hPtr;\n--  int length = 0;\n-+  Tcl_Size length = 0;\n-   char *string = NULL;\n-   Tcl_Obj *cmdPtr = NULL;\n-   Tcl_Obj *progPtr = NULL;\n-@@ -2113,7 +2114,7 @@\n- int\n- SetFcname(Sound *s, Tcl_Interp *interp, Tcl_Obj *obj)\n- {\n--  int length;\n-+  Tcl_Size length;\n-   char *str = Tcl_GetStringFromObj(obj, &length);\n- \n-   if (s->fcname != NULL) {\n---- a/generic/jkSoundEngine.c\n-+++ b/generic/jkSoundEngine.c\n-@@ -976,7 +976,8 @@\n-   s->devStr = defaultOutDevice;\n- \n-   for (arg = 2; arg < objc; arg+=2) {\n--    int index, length;\n-+    int index;\n-+    Tcl_Size length;\n-     char *str;\n-     \n-     if (Tcl_GetIndexFromObj(interp, objv[arg], subOptionStrings,\n-@@ -1366,7 +1367,8 @@\n-   s->tmpbuf = NULL;\n-       \n-   for (arg = 2; arg < objc; arg+=2) {\n--    int index, length;\n-+    int index;\n-+    Tcl_Size length;\n-     char *str;\n-     \n-     if (Tcl_GetIndexFromObj(interp, objv[arg], subOptionStrings, \"option\",\n-@@ -1704,7 +1706,8 @@\n- current_positionCmd(Sound *s, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])\n- {\n-   int n = -1;\n--  int arg, len, type = 0;\n-+  int arg, type = 0;\n-+  Tcl_Size len;\n-   jkQueuedSound *p;\n- \n-   if (soundQueue != NULL) {\n---- a/generic/jkSoundEdit.c\n-+++ b/generic/jkSoundEdit.c\n-@@ -281,7 +281,8 @@\n- int\n- lengthCmd(Sound *s, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])\n- {\n--  int arg, len, type = 0, newlen = -1, i;\n-+  int arg, type = 0, newlen = -1, i;\n-+  Tcl_Size len;\n-   char *string = NULL;\n- \n-   if (s->debug > 0) { Snack_WriteLog(\"Enter lengthCmd\\n\"); }\n-@@ -728,7 +729,8 @@\n- appendCmd(Sound *s, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])\n- {\n-   Sound *t, *dummy;\n--  int arg, startpos = 0, endpos = -1, length = 0;\n-+  int arg, startpos = 0, endpos = -1;\n-+  Tcl_Size length = 0;\n-   char *filetype, *str;\n-   static CONST84 char *subOptionStrings[] = {\n-     \"-rate\", \"-frequency\", \"-skiphead\", \"-byteorder\", \"-channels\",\n-@@ -793,7 +795,7 @@\n-       }\n-     case BYTEORDER:\n-       {\n--\tint length;\n-+\tTcl_Size length;\n- \tchar *str = Tcl_GetStringFromObj(objv[arg+1], &length);\n- \t    \n- \tif (strncasecmp(str, \"littleEndian\", length) == 0) {\n-@@ -1528,7 +1530,7 @@\n-     }\n-     for (n = 3; n < 3 + s->nchannels; n++, i++) {\n-       char *str;\n--      int len;\n-+      Tcl_Size len;\n- \n-       if (n >= objc) break;\n-       str = Tcl_GetStringFromObj(objv[n], &len);\n---- a/generic/jkSoundFile.c\n-+++ b/generic/jkSoundFile.c\n-@@ -523,7 +523,7 @@\n- \ttot = 0;\n-       }\n-     } else {\n--      int length = 0;\n-+      Tcl_Size length = 0;\n-       unsigned char *ptr = NULL;\n-       if (useOldObjAPI) {\n- \tptr = (unsigned char *) obj->bytes;\n-@@ -1322,7 +1322,7 @@\n-       s->length = (obj->length  - s->skipBytes) / (s->sampsize * s->nchannels);\n-     } else {\n- #ifdef TCL_81_API\n--      int length = 0;\n-+      Tcl_Size length = 0;\n-       \n-       Tcl_GetByteArrayFromObj(obj, &length);\n-       s->length = (length - s->skipBytes) / (s->sampsize * s->nchannels);\n-@@ -1400,7 +1400,7 @@\n-       s->length = (obj->length - NIST_HEADERSIZE) / (s->sampsize * s->nchannels);\n-     } else {\n- #ifdef TCL_81_API\n--      int length = 0;\n-+      Tcl_Size length = 0;\n-       \n-       Tcl_GetByteArrayFromObj(obj, &length);\n-       s->length = (length - NIST_HEADERSIZE) / (s->sampsize * s->nchannels);\n-@@ -1548,7 +1548,7 @@\n-       s->length = obj->length / s->sampsize + s->loadOffset;\n-     } else {\n- #ifdef TCL_81_API\n--      int length = 0;\n-+      Tcl_Size length = 0;\n-       \n-       Tcl_GetByteArrayFromObj(obj, &length);\n-       s->length = length / s->sampsize + s->loadOffset;\n-@@ -1695,7 +1695,7 @@\n-       nsamp = (obj->length - hlen) / (s->sampsize * s->nchannels);\n-     } else {\n- #ifdef TCL_81_API\n--      int length = 0;\n-+      Tcl_Size length = 0;\n-       \n-       Tcl_GetByteArrayFromObj(obj, &length);\n-       nsamp = (length - hlen) / (s->sampsize * s->nchannels);\n-@@ -1923,7 +1923,7 @@\n-       nsampfile = (obj->length - s->headSize) / (s->sampsize * s->nchannels);\n-     } else {\n- #ifdef TCL_81_API\n--      int length = 0;\n-+      Tcl_Size length = 0;\n-       \n-       Tcl_GetByteArrayFromObj(obj, &length);\n-       nsampfile = (length - s->headSize) / (s->sampsize * s->nchannels);\n-@@ -2338,7 +2338,7 @@\n-       nsampfile = (obj->length - s->headSize) / (s->sampsize * s->nchannels);\n-     } else {\n- #ifdef TCL_81_API\n--      int length = 0;\n-+      Tcl_Size length = 0;\n-       \n-       Tcl_GetByteArrayFromObj(obj, &length);\n-       nsampfile = (length - s->headSize) / (s->sampsize * s->nchannels);\n-@@ -2646,7 +2646,7 @@\n-       }\n-     case BYTEORDER:\n-       {\n--\tint length;\n-+\tTcl_Size length;\n- \tchar *str = Tcl_GetStringFromObj(objv[arg+1], &length);\n- \n- \tif (strncasecmp(str, \"littleEndian\", length) == 0) {\n-@@ -2842,7 +2842,7 @@\n-       }\n-     case BYTEORDER:\n-       {\n--\tint length;\n-+\tTcl_Size length;\n- \tchar *str = Tcl_GetStringFromObj(objv[arg+1], &length);\n- \n- \tif (strncasecmp(str, \"littleEndian\", length) == 0) {\n-@@ -2912,7 +2912,8 @@\n-   if ((objc % 2) == 0) { /* sound -> variable */\n-     Tcl_Obj *new = Tcl_NewObj();\n-     char *filetype = s->fileType;\n--    int arg, len, startpos = 0, endpos = s->length;\n-+    int arg, startpos = 0, endpos = s->length;\n-+    Tcl_Size len;\n-     static CONST84 char *subOptionStrings[] = {\n-       \"-fileformat\", \"-start\", \"-end\", \"-byteorder\",\n-       NULL\n-@@ -3037,7 +3038,7 @@\n- \t}\n-       case BYTEORDER:\n- \t{\n--\t  int length;\n-+\t  Tcl_Size length;\n- \t  char *str = Tcl_GetStringFromObj(objv[arg+1], &length);\n- \t      \n- \t  if (strncasecmp(str, \"littleEndian\", length) == 0) {\n-@@ -3160,7 +3161,7 @@\n-       memcpy((char *)s->tmpbuf, obj->bytes, len);\n-     } else {\n- #ifdef TCL_81_API\n--      int length = 0;\n-+      Tcl_Size length = 0;\n-       \n-       ptr = Tcl_GetByteArrayFromObj(obj, &length);\n-       len = min(length, buflen);\n-@@ -3221,7 +3222,7 @@\n- int\n- GetFileFormat(Tcl_Interp *interp, Tcl_Obj *obj, char **filetype)\n- {\n--  int length;\n-+  Tcl_Size length;\n-   char *str = Tcl_GetStringFromObj(obj, &length);\n-   Snack_FileFormat *ff;\n- \n---- a/unix/jkAudIO_oss.c\n-+++ b/unix/jkAudIO_oss.c\n-@@ -20,8 +20,7 @@\n-  */\n- \n- #include \"tcl.h\"\n--#include \"jkAudIO.h\"\n--#include \"jkSound.h\"\n-+#include \"snack.h\"\n- #include <stdio.h>\n- #include <fcntl.h>\n- #include <unistd.h>\n-@@ -707,7 +706,7 @@\n-   ioctl(mfd, SOUND_MIXER_READ_RECSRC, &recSrc);\n- /*printf(\"JackVarProc %x %s %s\\n\", recSrc, name1, name2);*/\n-   if (flags & TCL_TRACE_UNSETS) {\n--    if ((flags & TCL_TRACE_DESTROYED) && !(flags & TCL_INTERP_DESTROYED)) {\n-+    if ((flags & TCL_TRACE_DESTROYED)) {\n-       for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {\n- \tif (strncasecmp(mixLink->jack, jackLabels[i], strlen(mixLink->jack))\n- \t    == 0) {\n-@@ -721,7 +720,7 @@\n-       }\n-       obj = Tcl_NewIntObj(status);\n-       var = Tcl_NewStringObj(mixLink->jackVar, -1);\n--      Tcl_ObjSetVar2(interp, var, NULL, obj, TCL_GLOBAL_ONLY | TCL_PARSE_PART1);\n-+      Tcl_ObjSetVar2(interp, var, NULL, obj, TCL_GLOBAL_ONLY);\n-       Tcl_TraceVar(interp, mixLink->jackVar,\n- \t\t   TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,\n- \t\t   JackVarProc, mixLink);\n-@@ -746,7 +745,7 @@\n-       }\n-       obj = Tcl_NewIntObj(status);\n-       var = Tcl_NewStringObj(mixerLinks[i][0].jackVar, -1);\n--      Tcl_ObjSetVar2(interp, var, NULL, obj, TCL_GLOBAL_ONLY |TCL_PARSE_PART1);\n-+      Tcl_ObjSetVar2(interp, var, NULL, obj, TCL_GLOBAL_ONLY);\n-     }\n-   }\n-   dontTrace = 0;\n-@@ -778,7 +777,7 @@\n-       } else {\n- \tTcl_Obj *obj = Tcl_NewIntObj(status);\n- \tTcl_ObjSetVar2(interp, var, NULL, obj, \n--\t\t       TCL_GLOBAL_ONLY | TCL_PARSE_PART1);\n-+\t\t       TCL_GLOBAL_ONLY);\n- \n-       }\n-       Tcl_TraceVar(interp, mixerLinks[i][0].jackVar,\n-@@ -878,14 +877,14 @@\n-   CONST84 char *stringValue;\n-   \n-   if (flags & TCL_TRACE_UNSETS) {\n--    if ((flags & TCL_TRACE_DESTROYED) && !(flags & TCL_INTERP_DESTROYED)) {\n-+    if ((flags & TCL_TRACE_DESTROYED)) {\n-       Tcl_Obj *obj, *var;\n-       char tmp[VOLBUFSIZE];\n- \n-       SnackMixerGetVolume(mixLink->mixer, mixLink->channel, tmp, VOLBUFSIZE);\n-       obj = Tcl_NewIntObj(atoi(tmp));\n-       var = Tcl_NewStringObj(mixLink->mixerVar, -1);\n--      Tcl_ObjSetVar2(interp, var, NULL, obj, TCL_GLOBAL_ONLY | TCL_PARSE_PART1);\n-+      Tcl_ObjSetVar2(interp, var, NULL, obj, TCL_GLOBAL_ONLY);\n-       Tcl_TraceVar(interp, mixLink->mixerVar,\n- \t\t   TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,\n- \t\t   VolumeVarProc, mixLink);\n-@@ -929,7 +928,7 @@\n- \t  SnackMixerGetVolume(line, channel, tmp, VOLBUFSIZE);\n- \t  obj = Tcl_NewIntObj(atoi(tmp));\n- \t  Tcl_ObjSetVar2(interp, objv[j+3], NULL, obj, \n--\t\t\t TCL_GLOBAL_ONLY | TCL_PARSE_PART1);\n-+\t\t\t TCL_GLOBAL_ONLY);\n- \t}\n- \tTcl_TraceVar(interp, mixerLinks[i][j].mixerVar,\n- \t\t     TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,\n-@@ -954,7 +953,7 @@\n- \t\t\t    tmp, VOLBUFSIZE);\n- \tobj = Tcl_NewIntObj(atoi(tmp));\n- \tvar = Tcl_NewStringObj(mixerLinks[i][j].mixerVar, -1);\n--\tTcl_ObjSetVar2(interp, var, NULL, obj, TCL_GLOBAL_ONLY|TCL_PARSE_PART1);\n-+\tTcl_ObjSetVar2(interp, var, NULL, obj, TCL_GLOBAL_ONLY);\n-       }\n-     }\n-     if (mixerLinks[i][0].jackVar != NULL) {\n-@@ -965,7 +964,7 @@\n-       }\n-       obj = Tcl_NewIntObj(status);\n-       var = Tcl_NewStringObj(mixerLinks[i][0].jackVar, -1);\n--      Tcl_ObjSetVar2(interp, var, NULL, obj, TCL_GLOBAL_ONLY | TCL_PARSE_PART1);\n-+      Tcl_ObjSetVar2(interp, var, NULL, obj, TCL_GLOBAL_ONLY);\n-     }\n-   }\n- }\n---- a/generic/jkSoundProc.c\n-+++ b/generic/jkSoundProc.c\n-@@ -284,7 +284,7 @@\n-       }\n-     case ANATYPE:\n-       {\n--\tint len;\n-+\tTcl_Size len;\n-  \tchar *str = Tcl_GetStringFromObj(objv[arg+1], &len);\n- \t\n- \tif (strncasecmp(str, \"lpc\", len) == 0) {\n-@@ -732,7 +732,7 @@\n-       }\n-     case ANATYPE:\n-       {\n--\tint len;\n-+\tTcl_Size len;\n-  \tchar *str = Tcl_GetStringFromObj(objv[arg+1], &len);\n- \t\n- \tif (strncasecmp(str, \"lpc\", len) == 0) {\n-@@ -1869,7 +1869,7 @@\n-   float a1[32],a2[32],mn[32];\n-   int i,j,noli,nofpts=512,shobeg=2,nosing;\n-   int start;\n--  int plLen = 0;\n-+  Tcl_Size plLen = 0;\n-   Tcl_Obj** plElems;\n-   Tcl_Obj *list, *listInv, *listFlow;\n- \n---- a/generic/jkMixer.c\n-+++ b/generic/jkMixer.c\n-@@ -25,8 +25,7 @@\n- #include <math.h>\n- #include <string.h>\n- #include \"tcl.h\"\n--#include \"jkAudIO.h\"\n--#include \"jkSound.h\"\n-+#include \"snack.h\"\n- \n- extern int rop, wop;\n- \n---- a/generic/shape.c\n-+++ b/generic/shape.c\n-@@ -194,7 +194,7 @@\n-         }\n-       case SHAPE:\n-         {\n--          int nchar = 0;\n-+          Tcl_Size nchar = 0;\n-           char *str = Tcl_GetStringFromObj(objv[arg+1], &nchar);\n-           if (nchar > 0 && (preshp = Snack_GetSound(interp, str)) == NULL) {\n-             return TCL_ERROR;\n-@@ -203,7 +203,7 @@\n-         }\n-       case BYTEORDER:\n-         {\n--          int length;\n-+          Tcl_Size length;\n-           char *str = Tcl_GetStringFromObj(objv[arg+1], &length);\n-           \n-           if (strncasecmp(str, \"littleEndian\", length) == 0) {\n-@@ -417,7 +417,7 @@\n-       }\n-     case BYTEORDER:\n-       {\n--        int length;\n-+        Tcl_Size length;\n-         char *str = Tcl_GetStringFromObj(objv[arg+1], &length);\n- \n-         if (strncasecmp(str, \"littleEndian\", length) == 0) {\n---- a/generic/jkFilter.c\n-+++ b/generic/jkFilter.c\n-@@ -208,7 +208,7 @@\n- \t     Tcl_Obj *CONST objv[])\n- {\n-   Snack_Filter f = (Snack_Filter) clientData;\n--  int length = 0;\n-+  Tcl_Size length = 0;\n-   char *string = NULL;\n-   Tcl_HashEntry *hPtr;\n-   \n-@@ -253,7 +253,7 @@\n-   char *name;\n-   Tcl_HashTable *hTab = (Tcl_HashTable *) cdata;\n-   Tcl_HashEntry *hPtr;\n--  int length = 0;\n-+  Tcl_Size length = 0;\n-   char *string = NULL;\n- \n-   if (objc < 2) {\n---- a/generic/jkFilterIIR.c\n-+++ b/generic/jkFilterIIR.c\n-@@ -98,7 +98,7 @@\n- iirConfigProc(Snack_Filter f, Tcl_Interp *interp, int objc,\n- \t       Tcl_Obj *CONST objv[])\n- {\n--  int j, n;\n-+  Tcl_Size j, n;\n-   Tcl_Obj **impObj;\n-   double dither, noise;\n-   iirFilter_t iir = (iirFilter_t) f;\n---- a/generic/snack.c\n-+++ b/generic/snack.c\n-@@ -137,7 +137,7 @@\n- Snack_DebugCmd(ClientData cdata, Tcl_Interp *interp, int objc,\n- \t       Tcl_Obj *CONST objv[])\n- {\n--  int len;\n-+  Tcl_Size len;\n-   char *str;\n-   CONST84 char *patchLevelStr;\n-   \n-@@ -233,7 +233,7 @@\n-   char rates[100];\n-   \n- #ifdef USE_TCL_STUBS\n--  if (Tcl_InitStubs(interp, \"8\", 0) == NULL) {\n-+  if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {\n-     return TCL_ERROR;\n-   }\n- #endif\n-@@ -258,7 +258,7 @@\n- \n-   if (Tcl_GetCommandInfo(interp, \"button\", &infoPtr) != 0) {\n- #ifdef USE_TK_STUBS\n--    if (Tk_InitStubs(interp, \"8\", 0) == NULL) {\n-+    if (Tk_InitStubs(interp, TK_VERSION, 0) == NULL) {\n-       return TCL_ERROR;\n-     }\n- #endif\n---- a/generic/jkCanvSpeg.c\n-+++ b/generic/jkCanvSpeg.c\n-@@ -20,11 +20,10 @@\n-  */\n- \n- #include \"tcl.h\"\n--#include \"snack.h\"\n- #include <stdio.h>\n- #include <stdlib.h>\n--#define USE_OLD_CANVAS /* To keep Tk8.3 happy */\n- #include \"tk.h\"\n-+#include \"snack.h\"\n- #include \"jkCanvItems.h\"\n- #include <string.h>\n- #include <math.h>\n-@@ -90,10 +89,10 @@\n- \n- static int ParseColorMap(ClientData clientData, Tcl_Interp *interp,\n- \t\t\t Tk_Window tkwin, CONST84 char *value, char *recordPtr,\n--\t\t\t int offset);\n-+\t\t\t Tcl_Size offset);\n- \n- static CONST86 char *PrintColorMap(ClientData clientData, Tk_Window tkwin,\n--\t\t\t   char *recordPtr, int offset,\n-+\t\t\t   char *recordPtr, Tcl_Size offset,\n- \t\t\t   Tcl_FreeProc **freeProcPtr);\n- \n- Tk_CustomOption spegTagsOption = { (Tk_OptionParseProc *) NULL,\n-@@ -211,12 +210,12 @@\n- \t\t\t\t     SpectrogramItem *spegPtr);\n- \n- static int    ConfigureSpectrogram(Tcl_Interp *interp, Tk_Canvas canvas,\n--\t\t\t\t   Tk_Item *itemPtr, int argc,\n--\t\t\t\t   char **argv, int flags);\n-+\t\t\t\t   Tk_Item *itemPtr, Tcl_Size argc,\n-+\t\t\t\t   Tcl_Obj * const argv[], int flags);\n- \n- static int    CreateSpectrogram(Tcl_Interp *interp, Tk_Canvas canvas,\n--\t\t\t\tstruct Tk_Item *itemPtr,\n--\t\t\t\tint argc, char **argv);\n-+\t\t\t\tTk_Item *itemPtr,\n-+\t\t\t\tTcl_Size argc, Tcl_Obj *const argv[]);\n- \n- static void   DeleteSpectrogram(Tk_Canvas canvas, Tk_Item *itemPtr,\n- \t\t\t\tDisplay *display);\n-@@ -230,7 +229,7 @@\n- \t\t\t       double scaleX, double scaleY);\n- \n- static int    SpectrogramCoords(Tcl_Interp *interp, Tk_Canvas canvas,\n--\t\t\t\tTk_Item *itemPtr, int argc, char **argv);\n-+\t\t\t\tTk_Item *itemPtr, Tcl_Size argc, Tcl_Obj *const argv[]);\n- \n- static int    SpectrogramToArea(Tk_Canvas canvas, Tk_Item *itemPtr,\n- \t\t\t\tdouble *rectPtr);\n-@@ -262,7 +261,7 @@\n-   SpectrogramCoords,\n-   DeleteSpectrogram,\n-   DisplaySpectrogram,\n--  0,\n-+  TK_CONFIG_OBJS,\n-   SpectrogramToPoint,\n-   SpectrogramToArea,\n-   SpectrogramToPS,\n-@@ -278,7 +277,7 @@\n- \n- static int\n- CreateSpectrogram(Tcl_Interp *interp, Tk_Canvas canvas, Tk_Item *itemPtr, \n--\t\t  int argc, char **argv)\n-+\t\t  Tcl_Size argc, Tcl_Obj *const argv[])\n- {\n-   SpectrogramItem *spegPtr = (SpectrogramItem *) itemPtr; \n-   Tk_Window tkwin = Tk_CanvasTkwin(canvas);\n-@@ -365,7 +364,9 @@\n-   }\n- \n-   for (i = 1; i < argc; i++) {\n--      if ((argv[i][0] == '-') && (argv[i][1] >= 'a') && (argv[i][1] <= 'z')) {\n-+      Tcl_Size len;\n-+      char *str = Tcl_GetStringFromObj(argv[i], &len);\n-+      if ((len >= 2) && (str[0] == '-') && (str[1] >= 'a') && (str[1] <= 'z')) {\n- \t  break;\n-       }\n-   }\n-@@ -383,12 +384,11 @@\n- \n- static int\n- SpectrogramCoords(Tcl_Interp *interp, Tk_Canvas canvas, Tk_Item *itemPtr, \n--\t\t  int argc, char **argv)\n-+\t\t  Tcl_Size argc, Tcl_Obj *const argv[])\n- {\n- \n-   SpectrogramItem *wPtr = (SpectrogramItem *) itemPtr;\n-   char xc[TCL_DOUBLE_SPACE], yc[TCL_DOUBLE_SPACE];\n--  char **oargv = argv;\n-   int result = TCL_OK;\n- \n-   if (argc == 0) {\n-@@ -399,14 +399,14 @@\n-   }\n-   \n-   if (argc == 1) {\n--      if (Tcl_SplitList(interp, argv[0], &argc, (CONST84 char ***) &argv) != TCL_OK) {\n-+      if (Tcl_ListObjGetElements(interp, argv[0], &argc, (Tcl_Obj ***) &argv) != TCL_OK) {\n- \t  return TCL_ERROR;\n-       }\n-   }\n- \n-   if (argc == 2) {\n--    if ((Tk_CanvasGetCoord(interp, canvas, argv[0], &wPtr->x) != TCL_OK) ||\n--\t(Tk_CanvasGetCoord(interp, canvas, argv[1], &wPtr->y) != TCL_OK)) {\n-+    if ((Tk_CanvasGetCoordFromObj(interp, canvas, argv[0], &wPtr->x) != TCL_OK) ||\n-+\t(Tk_CanvasGetCoordFromObj(interp, canvas, argv[1], &wPtr->y) != TCL_OK)) {\n-       result = TCL_ERROR;\n-     } else {\n-       ComputeSpectrogramBbox(canvas, wPtr);\n-@@ -414,15 +414,11 @@\n-   } else {\n-     char buf[80];\n- \n--    sprintf(buf, \"wrong # coordinates: expected 0 or 2, got %d\", argc);\n-+    sprintf(buf, \"wrong # coordinates: expected 0 or 2, got %d\", (int)argc);\n-     Tcl_SetResult(interp, buf, TCL_VOLATILE);\n- \n-     result = TCL_ERROR;\n-   }\n--done:\n--  if (oargv != argv) {\n--      ckfree( (char*)argv);\n--  }\n-   return result;\n- }\n- \n-@@ -588,7 +584,7 @@\n- \n- static int\n- ConfigureSpectrogram(Tcl_Interp *interp, Tk_Canvas canvas, Tk_Item *itemPtr, \n--\t\t     int argc, char **argv, int flags)\n-+\t\t     Tcl_Size argc, Tcl_Obj *const argv[], int flags)\n- {\n-   SpectrogramItem *spegPtr = (SpectrogramItem *) itemPtr;\n-   Sound *s = spegPtr->sound;\n-@@ -601,15 +597,16 @@\n- \n-   /*  if (spegPtr->si.computing) return TCL_OK;*/\n- \n--  if (Tk_ConfigureWidget(interp, tkwin, configSpecs, argc,\n--\t\t\t (CONST84 char **)argv, \n--\t\t\t (char *) spegPtr, flags) != TCL_OK) return TCL_ERROR;\n-+  if (Tk_ConfigureWidget(interp, tkwin, configSpecs, argc, (void *)argv, \n-+\t\t\t (char *) spegPtr, flags|TK_CONFIG_OBJS) != TCL_OK) return TCL_ERROR;\n- \n-   if (spegPtr->si.debug > 1) Snack_WriteLog(\"  Enter ConfigureSpeg\\n\");\n-   \n-   for (i = 0; configSpecs[i].type != TK_CONFIG_END; i++) {\n-     for (j = 0; j < argc; j += 2) {\n--      if (strncmp(argv[j], configSpecs[i].argvName, strlen(argv[j])) == 0) {\n-+      Tcl_Size len;\n-+      char *str = Tcl_GetStringFromObj(argv[j], &len);\n-+      if (strncmp(str, configSpecs[i].argvName, len) == 0) {\n- \tconfigSpecs[i].specFlags |= TK_CONFIG_OPTION_SPECIFIED;\n- \tbreak;\n-       }\n-@@ -618,26 +615,28 @@\n-   \n- #if defined(MAC) || defined(MAC_OSX_TCL)\n-   for (i = 0; i < argc; i++) {\n--    int l = strlen(argv[i]);\n--    if (l && strncmp(argv[i], \"-anchor\", l) == 0) {\n-+    Tcl_Size l;\n-+    char *str = Tcl_GetStringFromObj(argv[i], &l);\n-+    if (l && strncmp(str, \"-anchor\", l) == 0) {\n-       i++;\n--      if (strcmp(argv[i], \"ne\") == 0) {\n-+      str = Tcl_GetStringFromObj(argv[i], &l);\n-+      if (strcmp(str, \"ne\") == 0) {\n- \tspegPtr->anchor = 1;\n--      } else if (strcmp(argv[i], \"nw\") == 0) {\n-+      } else if (strcmp(str, \"nw\") == 0) {\n- \tspegPtr->anchor = 7;\n--      } else if (strcmp(argv[i], \"n\") == 0) {\n-+      } else if (strcmp(str, \"n\") == 0) {\n- \tspegPtr->anchor = 0;\n--      } else if (strcmp(argv[i], \"e\") == 0) {\n-+      } else if (strcmp(str, \"e\") == 0) {\n- \tspegPtr->anchor = 2;\n--      } else if (strcmp(argv[i], \"se\") == 0) {\n-+      } else if (strcmp(str, \"se\") == 0) {\n- \tspegPtr->anchor = 3;\n--      } else if (strcmp(argv[i], \"sw\") == 0) {\n-+      } else if (strcmp(str, \"sw\") == 0) {\n- \tspegPtr->anchor = 5;\n--      } else if (strcmp(argv[i], \"s\") == 0) {\n-+      } else if (strcmp(str, \"s\") == 0) {\n- \tspegPtr->anchor = 4;\n--      } else if (strcmp(argv[i], \"w\") == 0) {\n-+      } else if (strcmp(str, \"w\") == 0) {\n- \tspegPtr->anchor = 6;\n--      } else if (strncmp(argv[i], \"center\", strlen(argv[i])) == 0) {\n-+      } else if (strncmp(str, \"center\", l) == 0) {\n- \tspegPtr->anchor = 8;\n-       }\n-       break;\n-@@ -1729,10 +1728,11 @@\n- \n- static int\n- ParseColorMap(ClientData clientData, Tcl_Interp *interp, Tk_Window tkwin,\n--\t      CONST84 char *value, char *recordPtr, int offset)\n-+\t      CONST84 char *value, char *recordPtr, Tcl_Size offset)\n- {\n-   SpectrogramItem *spegPtr = (SpectrogramItem *) recordPtr;\n--  int argc, i;\n-+  int i;\n-+  Tcl_Size argc;\n-   CONST84 char **argv = NULL;\n- \n-   if (Tcl_SplitList(interp, value, &argc, &argv) != TCL_OK) {\n-@@ -1823,7 +1823,7 @@\n- \n- static CONST86 char*\n- PrintColorMap(ClientData clientData, Tk_Window tkwin, char *recordPtr,\n--\t      int offset, Tcl_FreeProc **freeProcPtr)\n-+\t      Tcl_Size offset, Tcl_FreeProc **freeProcPtr)\n- {\n-   SpectrogramItem *spegPtr = (SpectrogramItem *) recordPtr;\n-   char *buffer;\n---- a/generic/jkCanvItems.h\n-+++ b/generic/jkCanvItems.h\n-@@ -108,6 +108,10 @@\n-   extern double hypot(double x, double y);\n- #endif\n- \n-+#ifndef TK_CONFIG_OPTION_SPECIFIED\n-+#  define TK_CONFIG_OPTION_SPECIFIED      (1 << 4)\n-+#endif\n-+\n- #define OptSpecified(option) (configSpecs[option].specFlags & TK_CONFIG_OPTION_SPECIFIED)\n- \n- #ifdef __cplusplus\n---- a/generic/jkCanvWave.c\n-+++ b/generic/jkCanvWave.c\n-@@ -20,12 +20,11 @@\n-  */\n- \n- #include \"tcl.h\"\n--#include \"snack.h\"\n- #include <stdio.h>\n- #include <stdlib.h>\n- #include <math.h>\n--#define USE_OLD_CANVAS /* To keep Tk8.3 happy */\n- #include \"tk.h\"\n-+#include \"snack.h\"\n- #include \"jkCanvItems.h\"\n- #include <string.h>\n- \n-@@ -191,12 +190,12 @@\n-   static int    ComputeWaveCoords(Tk_Item *itemPtr);\n-   \n-   static int    ConfigureWave(Tcl_Interp *interp, Tk_Canvas canvas, \n--\t\t\t      Tk_Item *itemPtr, int argc,\n--\t\t\t      char **argv, int flags);\n-+\t\t\t      Tk_Item *itemPtr, Tcl_Size argc,\n-+\t\t\t      Tcl_Obj *const argv[], int flags);\n- \n-   static int    CreateWave(Tcl_Interp *interp, Tk_Canvas canvas,\n- \t\t\t   struct Tk_Item *itemPtr,\n--\t\t\t   int argc, char **argv);\n-+\t\t\t   Tcl_Size argc, Tcl_Obj *const argv[]);\n- \n-   static void   DeleteWave(Tk_Canvas canvas, Tk_Item *itemPtr,\n- \t\t\t   Display *display);\n-@@ -213,7 +212,7 @@\n- \t\t\t      double deltaX, double deltaY);\n-   \n-   static int    WaveCoords(Tcl_Interp *interp, Tk_Canvas canvas,\n--\t\t\t   Tk_Item *itemPtr, int argc, char **argv);\n-+\t\t\t   Tk_Item *itemPtr, Tcl_Size argc, Tcl_Obj *const argv[]);\n-   \n-   static int    WaveToArea(Tk_Canvas canvas, Tk_Item *itemPtr,\n- \t\t\t   double *rectPtr);\n-@@ -237,7 +236,7 @@\n-   WaveCoords,\n-   DeleteWave,\n-   DisplayWave,\n--  0,\n-+  TK_CONFIG_OBJS,\n-   WaveToPoint,\n-   WaveToArea,\n-   WaveToPS,\n-@@ -253,7 +252,7 @@\n- \n- static int\n- CreateWave(Tcl_Interp *interp, Tk_Canvas canvas, Tk_Item *itemPtr,\n--\t   int argc, char **argv)\n-+\t   Tcl_Size argc, Tcl_Obj *const argv[])\n- {\n-   WaveItem *wavePtr = (WaveItem *) itemPtr;\n-   int i;\n-@@ -315,7 +314,9 @@\n-   wavePtr->y = 0;\n- \n-   for (i = 1; i < argc; i++) {\n--      if ((argv[i][0] == '-') && (argv[i][1] >= 'a') && (argv[i][1] <= 'z')) {\n-+      Tcl_Size len;\n-+      char *str = Tcl_GetStringFromObj(argv[i], &len);\n-+      if ((len >= 2) && (str[0] == '-') && (str[1] >= 'a') && (str[1] <= 'z')) {\n- \t  break;\n-       }\n-   }\n-@@ -396,12 +397,11 @@\n- }\n- \n- static int\n--WaveCoords(Tcl_Interp *interp, Tk_Canvas canvas, Tk_Item *itemPtr, int argc,\n--\t   char **argv)\n-+WaveCoords(Tcl_Interp *interp, Tk_Canvas canvas, Tk_Item *itemPtr, Tcl_Size argc,\n-+\t   Tcl_Obj *const argv[])\n- {\n-   WaveItem *wPtr = (WaveItem *) itemPtr;\n-   char xc[TCL_DOUBLE_SPACE], yc[TCL_DOUBLE_SPACE];\n--  char **oargv = argv;\n-   int result = TCL_OK;\n- \n-   if (argc == 0) {\n-@@ -412,14 +412,14 @@\n-   }\n-   \n-   if (argc == 1) {\n--      if (Tcl_SplitList(interp, argv[0], &argc, (CONST84 char ***) &argv) != TCL_OK) {\n-+      if (Tcl_ListObjGetElements(interp, argv[0], &argc, (Tcl_Obj ***) &argv) != TCL_OK) {\n- \t  return TCL_ERROR;\n-       }\n-   }\n- \n-   if (argc == 2) {\n--    if ((Tk_CanvasGetCoord(interp, canvas, argv[0], &wPtr->x) != TCL_OK) ||\n--\t(Tk_CanvasGetCoord(interp, canvas, argv[1], &wPtr->y) != TCL_OK)) {\n-+    if ((Tk_CanvasGetCoordFromObj(interp, canvas, argv[0], &wPtr->x) != TCL_OK) ||\n-+\t(Tk_CanvasGetCoordFromObj(interp, canvas, argv[1], &wPtr->y) != TCL_OK)) {\n-       result = TCL_ERROR;\n-     } else {\n-       ComputeWaveBbox(canvas, wPtr);\n-@@ -427,15 +427,11 @@\n-   } else {\n-     char buf[80];\n- \n--    sprintf(buf, \"wrong # coordinates: expected 0 or 2, got %d\", argc);\n-+    sprintf(buf, \"wrong # coordinates: expected 0 or 2, got %d\", (int)argc);\n-     Tcl_SetResult(interp, buf, TCL_VOLATILE);\n- \n-     result = TCL_ERROR;\n-   }\n--done:\n--  if (oargv != argv) {\n--      ckfree( (char*)argv);\n--  }\n-   return result;\n- }\n- \n-@@ -910,7 +906,7 @@\n- \n- static int\n- ConfigureWave(Tcl_Interp *interp, Tk_Canvas canvas, Tk_Item *itemPtr, \n--\t      int argc, char **argv, int flags)\n-+\t      Tcl_Size argc, Tcl_Obj *const argv[], int flags)\n- {\n-   WaveItem *wavePtr = (WaveItem *) itemPtr;\n-   Sound *s = wavePtr->sound;\n-@@ -923,15 +919,16 @@\n- \n-   if (argc == 0) return TCL_OK;\n- \n--  if (Tk_ConfigureWidget(interp, tkwin, configSpecs, argc,\n--\t\t\t (CONST84 char **)argv,\n--\t\t\t (char *) wavePtr, flags) != TCL_OK) return TCL_ERROR;\n-+  if (Tk_ConfigureWidget(interp, tkwin, configSpecs, argc, (void *)argv,\n-+\t\t\t (char *) wavePtr, flags|TK_CONFIG_OBJS) != TCL_OK) return TCL_ERROR;\n- \n-   if (wavePtr->debug > 1) Snack_WriteLog(\"  Enter ConfigureWave\\n\");\n- \n-   for (i = 0; configSpecs[i].type != TK_CONFIG_END; i++) {\n-     for (j = 0; j < argc; j += 2) {\n--      if (strncmp(argv[j], configSpecs[i].argvName, strlen(argv[j])) == 0) {\n-+      Tcl_Size len;\n-+      char *str = Tcl_GetStringFromObj(argv[j], &len);\n-+      if (strncmp(str, configSpecs[i].argvName, len) == 0) {\n- \tconfigSpecs[i].specFlags |= TK_CONFIG_OPTION_SPECIFIED;\n- \tbreak;\n-       }\n-@@ -940,25 +937,28 @@\n- \n- #if defined(MAC)\n-   for (i = 0; i < argc; i++) {\n--    if (strncmp(argv[i], \"-anchor\", strlen(argv[i])) == 0) {\n-+    Tcl_Size l;\n-+    char *str = Tcl_GetStringFromObj(argv[i], &l);\n-+    if (strncmp(str, \"-anchor\", l) == 0) {\n-       i++;\n--      if (strcmp(argv[i], \"ne\") == 0) {\n-+      str = Tcl_GetStringFromObj(argv[i], &l);\n-+      if (strcmp(str, \"ne\") == 0) {\n- \twavePtr->anchor = 1;\n--      } else if (strcmp(argv[i], \"nw\") == 0) {\n-+      } else if (strcmp(str, \"nw\") == 0) {\n- \twavePtr->anchor = 7;\n--      } else if (strcmp(argv[i], \"n\") == 0) {\n-+      } else if (strcmp(str, \"n\") == 0) {\n- \twavePtr->anchor = 0;\n--      } else if (strcmp(argv[i], \"e\") == 0) {\n-+      } else if (strcmp(str, \"e\") == 0) {\n- \twavePtr->anchor = 2;\n--      } else if (strcmp(argv[i], \"se\") == 0) {\n-+      } else if (strcmp(str, \"se\") == 0) {\n- \twavePtr->anchor = 3;\n--      } else if (strcmp(argv[i], \"sw\") == 0) {\n-+      } else if (strcmp(str, \"sw\") == 0) {\n- \twavePtr->anchor = 5;\n--      } else if (strcmp(argv[i], \"s\") == 0) {\n-+      } else if (strcmp(str, \"s\") == 0) {\n- \twavePtr->anchor = 4;\n--      } else if (strcmp(argv[i], \"w\") == 0) {\n-+      } else if (strcmp(str, \"w\") == 0) {\n- \twavePtr->anchor = 6;\n--      } else if (strncmp(argv[i], \"center\", strlen(argv[i])) == 0) {\n-+      } else if (strncmp(str, \"center\", l) == 0) {\n- \twavePtr->anchor = 8;\n-       }\n-       break;\n---- a/generic/jkCanvSect.c\n-+++ b/generic/jkCanvSect.c\n-@@ -20,12 +20,11 @@\n-  */\n- \n- #include \"tcl.h\"\n--#include \"snack.h\"\n- #include <stdio.h>\n- #include <stdlib.h>\n- #include <math.h>\n--#define USE_OLD_CANVAS /* To keep Tk8.3 happy */\n- #include \"tk.h\"\n-+#include \"snack.h\"\n- #include \"jkCanvItems.h\"\n- #include <string.h>\n- \n-@@ -188,11 +187,11 @@\n- static int    ComputeSectionCoords(Tk_Item *itemPtr);\n- \n- static int    ConfigureSection(Tcl_Interp *interp, Tk_Canvas canvas,\n--\t\t\t       Tk_Item *itemPtr, int argc,\n--\t\t\t       char **argv, int flags);\n-+\t\t\t       Tk_Item *itemPtr, Tcl_Size argc,\n-+\t\t\t       Tcl_Obj *const argv[], int flags);\n- \n- static int    CreateSection(Tcl_Interp *interp,\tTk_Canvas canvas,\n--\t\t\t    struct Tk_Item *itemPtr, int argc, char **argv);\n-+\t\t\t    struct Tk_Item *itemPtr, Tcl_Size argc, Tcl_Obj *const argv[]);\n- \n- static void   DeleteSection(Tk_Canvas canvas, Tk_Item *itemPtr,\n- \t\t\t    Display *display);\n-@@ -206,7 +205,7 @@\n- \t\t\t   double scaleX, double scaleY);\n- \n- static int    SectionCoords(Tcl_Interp *interp,\tTk_Canvas canvas,\n--\t\t\t    Tk_Item *itemPtr, int argc, char **argv);\n-+\t\t\t    Tk_Item *itemPtr, Tcl_Size argc, Tcl_Obj *const argv[]);\n- \n- static int    SectionToArea(Tk_Canvas canvas, Tk_Item *itemPtr,\n- \t\t\t    double *rectPtr);\n-@@ -233,7 +232,7 @@\n-   SectionCoords,\n-   DeleteSection,\n-   DisplaySection,\n--  0,\n-+  TK_CONFIG_OBJS,\n-   SectionToPoint,\n-   SectionToArea,\n-   SectionToPS,\n-@@ -249,7 +248,7 @@\n- \n- static int\n- CreateSection(Tcl_Interp *interp, Tk_Canvas canvas, Tk_Item *itemPtr,\n--\t   int argc, char **argv)\n-+\t   Tcl_Size argc, Tcl_Obj *const argv[])\n- {\n-   SectionItem *sectPtr = (SectionItem *) itemPtr;\n-   int i;\n-@@ -328,7 +327,9 @@\n- \n- \n-   for (i = 1; i < argc; i++) {\n--      if ((argv[i][0] == '-') && (argv[i][1] >= 'a') && (argv[i][1] <= 'z')) {\n-+      Tcl_Size len;\n-+      char *str = Tcl_GetStringFromObj(argv[i], &len);\n-+      if ((len >= 2) && (str[0] == '-') && (str[1] >= 'a') && (str[1] <= 'z')) {\n- \t  break;\n-       }\n-   }\n-@@ -345,11 +346,10 @@\n- \n- static int\n- SectionCoords(Tcl_Interp *interp, Tk_Canvas canvas, Tk_Item *itemPtr,\n--\t      int argc, char **argv)\n-+\t      Tcl_Size argc, Tcl_Obj *const argv[])\n- {\n-   SectionItem *wPtr = (SectionItem *) itemPtr;\n-   char xc[TCL_DOUBLE_SPACE], yc[TCL_DOUBLE_SPACE];\n--  char **oargv = argv;\n-   int result = TCL_OK;\n- \n-   if (argc == 0) {\n-@@ -360,14 +360,14 @@\n-   }\n-   \n-   if (argc == 1) {\n--      if (Tcl_SplitList(interp, argv[0], &argc, (CONST84 char ***) &argv) != TCL_OK) {\n-+      if (Tcl_ListObjGetElements(interp, argv[0], &argc, (Tcl_Obj ***) &argv) != TCL_OK) {\n- \t  return TCL_ERROR;\n-       }\n-   }\n- \n-   if (argc == 2) {\n--    if ((Tk_CanvasGetCoord(interp, canvas, argv[0], &wPtr->x) != TCL_OK) ||\n--\t(Tk_CanvasGetCoord(interp, canvas, argv[1], &wPtr->y) != TCL_OK)) {\n-+    if ((Tk_CanvasGetCoordFromObj(interp, canvas, argv[0], &wPtr->x) != TCL_OK) ||\n-+\t(Tk_CanvasGetCoordFromObj(interp, canvas, argv[1], &wPtr->y) != TCL_OK)) {\n-       result = TCL_ERROR;\n-     } else {\n-       ComputeSectionBbox(canvas, wPtr);\n-@@ -375,15 +375,11 @@\n-   } else {\n-     char buf[80];\n- \n--    sprintf(buf, \"wrong # coordinates: expected 0 or 2, got %d\", argc);\n-+    sprintf(buf, \"wrong # coordinates: expected 0 or 2, got %d\", (int)argc);\n-     Tcl_SetResult(interp, buf, TCL_VOLATILE);\n- \n-     result = TCL_ERROR;\n-   }\n--done:\n--  if (oargv != argv) {\n--      ckfree( (char*)argv);\n--  }\n-   return result;\n- }\n- \n-@@ -752,7 +748,7 @@\n- \n- static int\n- ConfigureSection(Tcl_Interp *interp, Tk_Canvas canvas, Tk_Item *itemPtr, \n--\t      int argc, char **argv, int flags)\n-+\t      Tcl_Size argc, Tcl_Obj *const argv[], int flags)\n- {\n-   SectionItem *sectPtr = (SectionItem *) itemPtr;\n-   Sound *s = sectPtr->sound;\n-@@ -765,15 +761,16 @@\n- \n-   if (argc == 0) return TCL_OK;\n- \n--  if (Tk_ConfigureWidget(interp, tkwin, configSpecs, argc,\n--\t\t\t (CONST84 char **)argv,\n--\t\t\t (char *) sectPtr, flags) != TCL_OK) return TCL_ERROR;\n-+  if (Tk_ConfigureWidget(interp, tkwin, configSpecs, argc, (void *)argv,\n-+\t\t\t (char *) sectPtr, flags|TK_CONFIG_OBJS) != TCL_OK) return TCL_ERROR;\n- \n-   if (sectPtr->debug) Snack_WriteLog(\"Enter ConfigureSection\\n\");\n- \n-   for (i = 0; configSpecs[i].type != TK_CONFIG_END; i++) {\n-     for (j = 0; j < argc; j += 2) {\n--      if (strncmp(argv[j], configSpecs[i].argvName, strlen(argv[j])) == 0) {\n-+      Tcl_Size len;\n-+      char *str = Tcl_GetStringFromObj(argv[j], &len);\n-+      if (strncmp(str, configSpecs[i].argvName, len) == 0) {\n- \tconfigSpecs[i].specFlags |= TK_CONFIG_OPTION_SPECIFIED;\n- \tbreak;\n-       }\n-@@ -782,25 +779,28 @@\n- \n- #if defined(MAC) || defined(MAC_OSX_TCL)\n-   for (i = 0; i < argc; i++) {\n--    if (strncmp(argv[i], \"-anchor\", strlen(argv[i])) == 0) {\n-+    Tcl_Size l;\n-+    char *str = Tcl_GetStringFromObj(argv[i], &l);\n-+    if (strncmp(str, \"-anchor\", strlen(l)) == 0) {\n-       i++;\n--      if (strcmp(argv[i], \"ne\") == 0) {\n-+      str = Tcl_GetStringFromObj(argv[i], &l);\n-+      if (strcmp(str, \"ne\") == 0) {\n- \tsectPtr->anchor = 1;\n--      } else if (strcmp(argv[i], \"nw\") == 0) {\n-+      } else if (strcmp(str, \"nw\") == 0) {\n- \tsectPtr->anchor = 7;\n--      } else if (strcmp(argv[i], \"n\") == 0) {\n-+      } else if (strcmp(str, \"n\") == 0) {\n- \tsectPtr->anchor = 0;\n--      } else if (strcmp(argv[i], \"e\") == 0) {\n-+      } else if (strcmp(str, \"e\") == 0) {\n- \tsectPtr->anchor = 2;\n--      } else if (strcmp(argv[i], \"se\") == 0) {\n-+      } else if (strcmp(str, \"se\") == 0) {\n- \tsectPtr->anchor = 3;\n--      } else if (strcmp(argv[i], \"sw\") == 0) {\n-+      } else if (strcmp(str, \"sw\") == 0) {\n- \tsectPtr->anchor = 5;\n--      } else if (strcmp(argv[i], \"s\") == 0) {\n-+      } else if (strcmp(str, \"s\") == 0) {\n- \tsectPtr->anchor = 4;\n--      } else if (strcmp(argv[i], \"w\") == 0) {\n-+      } else if (strcmp(str, \"w\") == 0) {\n- \tsectPtr->anchor = 6;\n--      } else if (strncmp(argv[i], \"center\", strlen(argv[i])) == 0) {\n-+      } else if (strncmp(str, \"center\", l) == 0) {\n- \tsectPtr->anchor = 8;\n-       }\n-       break;\n---- a/generic/SnackOgg.c\n-+++ b/generic/SnackOgg.c\n-@@ -2220,7 +2220,8 @@\n- PutOggHeader(Sound *s, Tcl_Interp *interp, Tcl_Channel ch, Tcl_Obj *obj,\n- \t     int objc, Tcl_Obj *CONST objv[], int len)\n- {\n--  int arg, n = 0, ret;\n-+  int arg, ret;\n-+  Tcl_Size n = 0;\n-   OggVorbis_File *of = (OggVorbis_File *)s->extHead2;\n-   Tcl_Obj **listObj;\n-   static char *subOptionStrings[] = {\n-@@ -2535,7 +2536,7 @@\n-       switch ((enum options) index) {\n-       case COMMENT:\n- \t{\n--\t  int i, n;\n-+\t  Tcl_Size i, n;\n- \t  Tcl_Obj **listObj;\n- \t  \n- \t  if (Tcl_ListObjGetElements(interp, objv[arg+1], &n, &listObj) !=\n-@@ -2606,7 +2607,7 @@\n-   int res;\n-   \n- #ifdef USE_TCL_STUBS\n--  if (Tcl_InitStubs(interp, \"8\", 0) == NULL) {\n-+  if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {\n-     return TCL_ERROR;\n-   }\n- #endif\n---- a/unix/jkAudIO_alsa.c\n-+++ b/unix/jkAudIO_alsa.c\n-@@ -20,8 +20,7 @@\n-  */\n- \n- #include \"tcl.h\"\n--#include \"jkAudIO.h\"\n--#include \"jkSound.h\"\n-+#include \"snack.h\"\n- #include <stdio.h>\n- #include <fcntl.h>\n- #include <unistd.h>\n---- a/generic/SnackMpg.c\n-+++ b/generic/SnackMpg.c\n-@@ -784,7 +784,7 @@\n-     int res;\n-   \n- #ifdef USE_TCL_STUBS\n--    if (Tcl_InitStubs(interp, \"8\", 0) == NULL) {\n-+    if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {\n-         return TCL_ERROR;\n-     }\n- #endif\n---- a/generic/SphereFile.c\n-+++ b/generic/SphereFile.c\n-@@ -326,7 +326,7 @@\n-   int res;\n-   \n- #ifdef USE_TCL_STUBS\n--  if (Tcl_InitStubs(interp, \"8\", 0) == NULL) {\n-+  if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {\n-     return TCL_ERROR;\n-   }\n- #endif\ndiff --git a/debian/patches/tksnack.patch b/debian/patches/tksnack.patch\nindex f41ddb9..71cbafa 100644\n--- a/debian/patches/tksnack.patch\n+++ b/debian/patches/tksnack.patch\n@@ -1,116 +1,148 @@\n Author: Sergei Golovan\n Description: Patch makes porting of the tkSnack Python module and\n- included demos to Python 3.x, and dropping their compatibility\n+ included demos to Python 3.x, while retaining their compatibility\n  with Python 2.x.\n-Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n+Last-Modified: Sat, 18 Apr 2015 20:24:39 +0300\n \n --- a/demos/python/dataCmd.py\n +++ b/demos/python/dataCmd.py\n-@@ -1,7 +1,7 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,7 +1,12 @@\n+ #! /usr/bin/env python\n  # -*- coding: iso-8859-1 -*-\n  \n -import Tkinter\n-+import tkinter as Tkinter\n++import sys\n++if sys.version_info[0] == 2:\n++    import Tkinter\n++else:\n++    import tkinter as Tkinter\n++\n  import tkSnack\n  \n  root = Tkinter.Tk()\n --- a/demos/python/echo.py\n +++ b/demos/python/echo.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n --- a/demos/python/generator.py\n +++ b/demos/python/generator.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n --- a/demos/python/MinSect.py\n +++ b/demos/python/MinSect.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n --- a/demos/python/MinSpeg.py\n +++ b/demos/python/MinSpeg.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n --- a/demos/python/MinWave.py\n +++ b/demos/python/MinWave.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n --- a/demos/python/mixplay.py\n +++ b/demos/python/mixplay.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n --- a/demos/python/notescale.py\n +++ b/demos/python/notescale.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n --- a/demos/python/oggplay.py\n +++ b/demos/python/oggplay.py\n-@@ -1,4 +1,4 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n- #\n- # Usage: oggplay.py file.ogg\n- #\n-@@ -6,7 +6,7 @@\n+@@ -5,8 +5,13 @@\n+ # Note: this script will also play audio files in any other format supported\n  # by tkSnack\n  \n++from __future__ import print_function\n  import sys\n -from Tkinter import *\n-+from tkinter import *\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  initializeSnack(Tkinter.Tk())\n-@@ -19,4 +19,4 @@\n+@@ -19,4 +24,4 @@\n  \tsnd = Sound(file=sys.argv[1])\n  \tsnd.play(blocking=1)\n  else:\n@@ -118,49 +150,66 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n +\tprint(\"Usage: oggplay.py file.ogg\")\n --- a/demos/python/playnotes.py\n +++ b/demos/python/playnotes.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n --- a/demos/python/polarspec.py\n +++ b/demos/python/polarspec.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  from math import *\n  \n --- a/demos/python/spectrogram.py\n +++ b/demos/python/spectrogram.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n --- a/demos/python/sphere.py\n +++ b/demos/python/sphere.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,12 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++from __future__ import print_function\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n-@@ -15,11 +15,11 @@\n+@@ -15,11 +21,11 @@\n  \n  file = 'test.sph'\n  \n@@ -177,25 +226,34 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n  snd.write('new.wav')\n --- a/demos/python/tkSnack.py\n +++ b/demos/python/tkSnack.py\n-@@ -7,8 +7,7 @@\n+@@ -7,8 +7,14 @@\n  last modified: Mar 28, 2003\n  \"\"\"\n  \n -import Tkinter\n -import types\n-+import tkinter as Tkinter\n++from __future__ import print_function\n++\n++import sys\n++if sys.version_info[0] == 2:\n++    import Tkinter\n++else:\n++    import tkinter as Tkinter\n++\n  import string\n  \n  Tkroot = None\n-@@ -20,7 +19,6 @@\n+@@ -20,7 +26,8 @@\n      Tkroot = newroot\n      Tkroot.tk.call('eval', 'package require snack')\n      Tkroot.tk.call('snack::createIcons')\n -    Tkroot.tk.call('snack::setUseOldObjAPI')\n++    if sys.version_info[0] == 2:\n++        Tkroot.tk.call('snack::setUseOldObjAPI')\n      audio = AudioControllerSingleton()\n      mixer = MixerControllerSingleton()\n  \n-@@ -92,7 +90,7 @@\n+@@ -92,7 +99,7 @@\n                  self.tk.call(self.name, 'configure')):\n                  cnf[x[0][1:]] = (x[0][1:],) + x[1:]\n                  return cnf\n@@ -204,7 +262,7 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n              x = self.tk.split(self.tk.call(self.name, 'configure', '-'+cnf))\n              return (x[0][1:],) + x[1:]\n          self.tk.call((self.name, 'configure') + self._options(cnf))\n-@@ -124,8 +122,7 @@\n+@@ -124,8 +131,7 @@\n              if Tkroot:\n                  master = Tkroot\n              else:\n@@ -214,7 +272,7 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n          self.tk = master.tk\n          if not name:\n              self.name = self.tk.call(('sound',) + self._options(kw))\n-@@ -261,7 +258,7 @@\n+@@ -261,7 +267,7 @@\n          \n      def pitch(self, method=None, **kw):\n          \"\"\"Returns a list of pitch values.\"\"\"\n@@ -223,7 +281,7 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n              result = self.tk.call((self.name, 'pitch') + self._options(kw))\n              return self._getdoubles(result)\n          else:\n-@@ -409,8 +406,7 @@\n+@@ -409,8 +415,7 @@\n          if Tkroot:\n              master = Tkroot\n          else:\n@@ -233,7 +291,7 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n          self.tk = master.tk\n          self.name = self.tk.call(('snack::filter', name) + args +\n                                   self._options(kw))\n-@@ -537,7 +533,7 @@\n+@@ -537,7 +542,7 @@\n          self.sound.record()\n          \n      def info(self):\n@@ -244,36 +302,49 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n      \"\"\"Draws a spectrogram of a sound on canvas.\"\"\"\n --- a/demos/python/widget.py\n +++ b/demos/python/widget.py\n-@@ -1,6 +1,6 @@\n--#! /usr/bin/env python\n-+#! /usr/bin/env python3\n+@@ -1,6 +1,11 @@\n+ #! /usr/bin/env python\n  \n -from Tkinter import *\n-+from tkinter import *\n++import sys\n++if sys.version_info[0] == 2:\n++    from Tkinter import *\n++else:\n++    from tkinter import *\n++\n  from tkSnack import *\n  \n  root = Tkinter.Tk()\n --- a/python/tkSnack.py\n +++ b/python/tkSnack.py\n-@@ -7,8 +7,7 @@\n+@@ -7,8 +7,14 @@\n  last modified: Mar 28, 2003\n  \"\"\"\n  \n -import Tkinter\n -import types\n-+import tkinter as Tkinter\n++from __future__ import print_function\n++\n++import sys\n++if sys.version_info[0] == 2:\n++    import Tkinter\n++else:\n++    import tkinter as Tkinter\n++\n  import string\n  \n  Tkroot = None\n-@@ -20,7 +19,6 @@\n+@@ -20,7 +26,8 @@\n      Tkroot = newroot\n      Tkroot.tk.call('eval', 'package require snack')\n      Tkroot.tk.call('snack::createIcons')\n -    Tkroot.tk.call('snack::setUseOldObjAPI')\n++    if sys.version_info[0] == 2:\n++        Tkroot.tk.call('snack::setUseOldObjAPI')\n      audio = AudioControllerSingleton()\n      mixer = MixerControllerSingleton()\n  \n-@@ -92,7 +90,7 @@\n+@@ -92,7 +99,7 @@\n                  self.tk.call(self.name, 'configure')):\n                  cnf[x[0][1:]] = (x[0][1:],) + x[1:]\n                  return cnf\n@@ -282,7 +353,7 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n              x = self.tk.split(self.tk.call(self.name, 'configure', '-'+cnf))\n              return (x[0][1:],) + x[1:]\n          self.tk.call((self.name, 'configure') + self._options(cnf))\n-@@ -124,8 +122,7 @@\n+@@ -124,8 +131,7 @@\n              if Tkroot:\n                  master = Tkroot\n              else:\n@@ -292,7 +363,7 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n          self.tk = master.tk\n          if not name:\n              self.name = self.tk.call(('sound',) + self._options(kw))\n-@@ -261,7 +258,7 @@\n+@@ -261,7 +267,7 @@\n          \n      def pitch(self, method=None, **kw):\n          \"\"\"Returns a list of pitch values.\"\"\"\n@@ -301,7 +372,7 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n              result = self.tk.call((self.name, 'pitch') + self._options(kw))\n              return self._getdoubles(result)\n          else:\n-@@ -409,8 +406,7 @@\n+@@ -409,8 +415,7 @@\n          if Tkroot:\n              master = Tkroot\n          else:\n@@ -311,7 +382,7 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n          self.tk = master.tk\n          self.name = self.tk.call(('snack::filter', name) + args +\n                                   self._options(kw))\n-@@ -537,7 +533,7 @@\n+@@ -537,7 +542,7 @@\n          self.sound.record()\n          \n      def info(self):\n@@ -320,11 +391,3 @@ Last-Modified: Wed, 14 May 2025 22:36:07 +0300\n          \n  def createSpectrogram(canvas, *args, **kw):\n      \"\"\"Draws a spectrogram of a sound on canvas.\"\"\"\n---- a/python/setup.py\n-+++ b/python/setup.py\n-@@ -1,4 +1,4 @@\n--from distutils.core import setup\n-+from setuptools import setup\n- \n- setup(name=\"tkSnack\",\n- \tversion=\"2.2.10\",\ndiff --git a/debian/prepareInstall.tcl b/debian/prepareInstall.tcl\ndeleted file mode 100644\nindex 8b00f6e..0000000\n--- a/debian/prepareInstall.tcl\n+++ /dev/null\n@@ -1,132 +0,0 @@\n-#!/usr/bin/tclsh\n-\n-# find Tcl/Tk versions and Snack flavors in the args\n-\n-set Package {}\n-set Versions {}\n-set Flavors {}\n-set Multiarch {}\n-set state none\n-foreach arg $argv {\n-    switch -- $arg {\n-        --package   { set state package }\n-        --versions  { set state versions }\n-        --flavors   { set state flavors }\n-        --multiarch { set state multiarch }\n-        default {\n-            switch -- $state {\n-                package   { set Package $arg }\n-                versions  { lappend Versions $arg }\n-                flavors   { lappend Flavors $arg }\n-                multiarch { set Multiarch $arg }\n-            }\n-        }\n-    }\n-}\n-\n-# Packages:\n-#   tcl-snack\n-#   tcl-snack-dev\n-#   libsnack-oss\n-#   libsnack-alsa\n-\n-proc LName {suffix version} {\n-    if {$version >= 9} {\n-        return ltcl9$suffix\n-    } else {\n-        return l$suffix\n-    }\n-}\n-\n-proc LibName {suffix version} {\n-    if {$version >= 9} {\n-        return libtcl9$suffix.so\n-    } else {\n-        return lib$suffix.so\n-    }\n-}\n-\n-proc SaveInstallData {InstallData FileName} {\n-    set fd [open $FileName w]\n-    puts $fd \"#!/usr/bin/dh-exec\"\n-    puts $fd [join $InstallData \\n]\n-    close $fd\n-    file attribute $FileName -permissions rwxr-xr-x\n-}\n-\n-set InstallDir /usr/lib/tcltk/$Multiarch/snack$Package\n-\n-# libsnack-oss, libsnack-alsa\n-foreach flavor $Flavors {\n-    set InstallData {}\n-    foreach suffix {snack sound} {\n-        foreach version $Versions {\n-            lappend InstallData [list debian/$version/$flavor/lib$suffix.so => \\\n-                                      $InstallDir/[LibName $suffix $version]]\n-        }\n-    }\n-    SaveInstallData $InstallData debian/libsnack-$flavor.install\n-}\n-\n-# tcl-snack\n-set flavor [lindex $Flavors 0]\n-set InstallData [list [list pkgIndex.tcl $InstallDir/] \\\n-                      [list unix/snack.tcl $InstallDir/]]\n-foreach version $Versions {\n-    foreach suffix {snackmpg snackogg} {\n-        lappend InstallData [list debian/$version/$flavor/lib$suffix.so => \\\n-                                  $InstallDir/[LibName $suffix $version]]\n-    }\n-}\n-SaveInstallData $InstallData debian/tcl-snack.install\n-\n-proc FixPkgIndex {versions flavor} {\n-    set fd [open pkgIndex.tcl w]\n-    foreach version [lsort -real -decreasing $versions] {\n-        puts $fd \"if {\\[package vsatisfies \\[package provide Tcl\\] $version\\]} {\"\n-        \n-        set ifd [open debian/$version/$flavor/pkgIndex.tcl]\n-        set indexdata [read $ifd]\n-        close $ifd\n-\n-        if {$version >= 9} {\n-            set indexdata [string map {lib libtcl9} $indexdata]\n-        }\n-\n-        puts $fd $indexdata\n-        puts $fd \"}\"\n-    }\n-    close $fd\n-}\n-\n-FixPkgIndex $Versions $flavor\n-\n-# tcl-snack-dev\n-set InstallData {{generic/jkAudIO.h /usr/include}\n-                 {generic/jkSound.h /usr/include}\n-                 {generic/snack.h /usr/include}\n-                 {generic/snackDecls.h /usr/include}}\n-set flavor [lindex $Flavors 0]\n-foreach version $Versions {\n-    lappend InstallData [list debian/$version/$flavor/libsnackstub$Package.a => \\\n-                              $InstallDir/libsnackstub$version.a]\n-    set config debian/$version/$flavor/snackConfig.sh\n-    set fd [open $config]\n-    set cdata [read $fd]\n-    close $fd\n-\n-    set cdata [regsub {(SNACK_INSTALL_PATH)='[^']*'} $cdata \"\\\\1='$InstallDir'\"]\n-    set cdata [regsub {(SNACK_LIB_SPEC)='[^']*'} $cdata \"\\\\1='-L$InstallDir -[LName snack $version]'\"]\n-    set cdata [regsub {(SNACK_STUB_LIB_FLAG)='[^']*'} $cdata \"\\\\1='-L$InstallDir -lsnackstub$version'\"]\n-\n-    set fd [open $config w]\n-    puts -nonewline $fd $cdata\n-    close $fd\n-\n-    lappend InstallData [list $config => $InstallDir/snackConfig$version.sh]\n-}\n-SaveInstallData $InstallData debian/tcl-snack-dev.install\n-\n-set LinksData [list $InstallDir/snackConfig[lindex $Versions 0].sh $InstallDir/snackConfig.sh]\n-SaveInstallData $LinksData debian/tcl-snack-dev.links\n-\ndiff --git a/debian/python-tksnack.install b/debian/python-tksnack.install\nnew file mode 100644\nindex 0000000..e2e74a3\n--- /dev/null\n+++ b/debian/python-tksnack.install\n@@ -0,0 +1 @@\n+debian/tmp/usr/lib/python2*\ndiff --git a/debian/python3-tksnack.docs b/debian/python3-tksnack.docs\ndeleted file mode 100644\nindex 151b8ff..0000000\n--- a/debian/python3-tksnack.docs\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-README\n-debian/README.Debian\ndiff --git a/debian/rules b/debian/rules\nindex 48b6af7..a573853 100755\n--- a/debian/rules\n+++ b/debian/rules\n@@ -2,23 +2,19 @@\n # Sample debian/rules that uses debhelper.\n # GNU copyright 1997 to 1999 by Joey Hess.\n \n-version = 2.2\n-patchlevel = $(version).10\n-date = 20090624\n-\n-DDIR = $(shell pwd)/debian/tmp\n-PDIR = usr/lib/tcltk/$(DEB_HOST_MULTIARCH)/snack$(version)\n+DDIR=$(shell pwd)/debian/tmp\n+DDIR_ALSA=$(shell pwd)/debian/tmp-alsa\n \n DPKG_EXPORT_BUILDFLAGS = 1\n include /usr/share/dpkg/buildflags.mk\n include /usr/share/dpkg/architecture.mk\n \n-TCLVERSIONS = 8.6 9.1\n-\n CONFIGOPTS = --enable-gcc \\\n \t     --enable-shared \\\n \t     --build=$(DEB_BUILD_GNU_TYPE) \\\n \t     --host=$(DEB_HOST_GNU_TYPE) \\\n+\t     --with-tcl=/usr/lib \\\n+\t     --with-tk=/usr/lib \\\n \t     --prefix=/usr \\\n \t     --with-ogg-include=/usr/include \\\n \t     --with-ogg-lib=/usr/lib\n@@ -28,101 +24,163 @@ CONFIGOPTS_ALSA = $(CONFIGOPTS) --enable-alsa\n BUILD_ALSA := $(shell if [ `uname -s` = Linux ] ; then echo yes ; else echo no ; fi)\n \n ifeq ($(BUILD_ALSA), no)\n-FLAVORS = oss\n+install_target:=install-stamp\n+binary_targets:=binary-oss\n else\n-FLAVORS = oss alsa\n+install_target:=install-alsa-stamp\n+binary_targets:=binary-oss binary-alsa\n endif\n \n-%:\n-\tdh $@\n+clean: clean-build\n+\tdh_testdir\n+\tdh_testroot\n+\trm -rf $(DDIR_ALSA)\n+\trm -f build-stamp build-alsa-stamp\n+\trm -f install-stamp install-alsa-stamp\n+\trm -f clean-stamp\n+\tdh_clean\n \n-override_dh_auto_clean:\n-\tset -e ; \\\n-\tfor v in $(TCLVERSIONS) ; do \\\n-\t\trm -rf $(CURDIR)/debian/$$v ; \\\n-\tdone\n-\trm -f debian/tcl-snack-dev.links\n-\trm -f debian/tcl-snack-dev.install\n-\trm -f debian/tcl-snack.install\n-\tset -e ; \\\n-\tfor d in $(FLAVORS) ; do \\\n-\t\trm -f debian/libsnack-$$d.install ; \\\n-\tdone\n-\trm -f pkgIndex.tcl\n-\trm -f unix/tcl.m4\n-\trm -rf python/build\n-\tdh_auto_clean\n-\n-override_dh_autoreconf-arch:\n-\tln -sf ../win/tcl.m4 $(CURDIR)/unix\n-\tdh_autoreconf -D$(CURDIR)/unix\n-\n-override_dh_auto_configure-arch:\n-\tset -e ; \\\n-\tfor v in $(TCLVERSIONS) ; do \\\n-\t\tfor d in $(FLAVORS) ; do \\\n-\t\t\tif [ \"$$d\" = \"alsa\" ] ; then \\\n-\t\t\t\tconfigopts=\"$(CONFIGOPTS_ALSA)\" ; \\\n-\t\t\telse \\\n-\t\t\t\tconfigopts=\"$(CONFIGOPTS)\" ; \\\n-\t\t\tfi ; \\\n-\t\t\tdh_auto_configure -B$(CURDIR)/debian/$$v/$$d -D$(CURDIR)/unix -- \\\n-\t\t\t\t$$configopts \\\n-\t\t\t\t--with-tcl=/usr/lib/tcl$$v \\\n-\t\t\t\t--with-tk=/usr/lib/tk$$v ; \\\n-\t\tdone ; \\\n-\tdone\n+clean-build:\n+\tdh_testdir\n+\t[ ! -f unix/Makefile ] || $(MAKE) -C unix distclean\n+\tcd unix ; rm -f libsnackogg.so libsnackmpg.so libsnacksphere.so libsnackstub2.2.a\n+\tcd unix ; rm -f snackConfig.sh pkgIndex.tcl\n+\tcd python; rm -rf build\n \n-override_dh_auto_build-arch:\n-\tset -e ; \\\n-\tfor v in $(TCLVERSIONS) ; do \\\n-\t\tfor d in $(FLAVORS) ; do \\\n-\t\t\tDEB_CFLAGS=\"$(CFLAGS)\" \\\n-\t\t\t$(MAKE) -C$(CURDIR)/debian/$$v/$$d ; \\\n-\t\tdone ; \\\n-\tdone\n+build: build-arch build-indep\n+build-arch: $(install_target)\n+build-indep: $(install_target)\n \n-override_dh_auto_install-arch:\n-\ttclsh8.6 debian/prepareInstall.tcl --package $(version) \\\n-\t\t\t\t\t   --versions $(TCLVERSIONS) \\\n-\t\t\t\t\t   --flavors $(FLAVORS) \\\n-\t\t\t\t\t   --multiarch $(DEB_HOST_MULTIARCH)\n+build-stamp:\n+\tdh_testdir\n+\tcd unix && ./configure $(CONFIGOPTS)\n+\tDEB_CFLAGS=\"$(CFLAGS)\" \\\n+\t$(MAKE) -C unix all libsnackogg.so libsnackmpg.so # libsnacksphere.so\n+\ttouch build-stamp\n+\n+install-stamp: build-stamp\n+\tdh_testdir\n+\tdh_installdirs\n+\t$(MAKE) -C unix SNACK_INSTALL_PATH=$(DDIR)/usr/lib install\n+\ttouch install-stamp\n \n-override_dh_auto_install-indep:\n+clean-stamp: install-stamp\n+\tdh_testdir\n+\t[ ! -f unix/Makefile ] || $(MAKE) -C unix distclean\n+\tcd unix ; rm -f libsnackogg.so libsnackmpg.so libsnacksphere.so libsnackstub2.2.a\n+\tcd unix ; rm -f snackConfig.sh pkgIndex.tcl\n+\tcd python; rm -rf build\n+\ttouch clean-stamp\n+\n+build-alsa-stamp: clean-stamp\n+\tdh_testdir\n+\tcd unix && ./configure $(CONFIGOPTS_ALSA)\n+\tDEB_CFLAGS=\"$(CFLAGS)\" \\\n+\t$(MAKE) -C unix all libsnackogg.so libsnackmpg.so # libsnacksphere.so\n+\ttouch build-alsa-stamp\n+\n+install-alsa-stamp: build-alsa-stamp\n+\tdh_testdir\n+\tdh_installdirs\n+\t$(MAKE) -C unix SNACK_INSTALL_PATH=$(DDIR_ALSA)/usr/lib install\n+\ttouch install-alsa-stamp\n+\n+install-indep: build-stamp\n \tdh_testdir\n \tdh_testroot\n \tdh_prep\n-\tmkdir -p $(DDIR)/tcl\n-\tset -e ; \\\n-\tfor f in demos/tcl/* ; do \\\n-\t\tsed -e 's/\\(wish\\|tclsh\\)8\\.5/\\18.6/' $$f >$(DDIR)/tcl/$$(basename $$f) ; \\\n-\tdone\n \tcd python ; \\\n-\tpython3 setup.py install \\\n+\tset -e ; for python in `py3versions -s` ; do \\\n+\t    $$python setup.py install \\\n \t\t--no-compile \\\n \t\t--install-layout=deb \\\n-\t\t--root=$(DDIR)\n-\n-override_dh_fixperms-arch:\n-\tdh_fixperms\n-\tchmod a-x debian/tcl-snack/usr/lib/tcltk/*/snack*/*.tcl\n+\t\t--root=$(DDIR) ; \\\n+\tdone\n \n-override_dh_fixperms-indep:\n-\tdh_fixperms\n+# Build architecture-dependent files here.\n+binary-oss: install-stamp\n+\tdh_testdir -a -Nlibsnack-alsa\n+\tdh_testroot -a -Nlibsnack-alsa\n+\tdh_installdirs -a -Nlibsnack-alsa\n+\tdh_install -a -Nlibsnack-alsa\n+\tdh_installdocs -a -Nlibsnack-alsa -A README debian/README.Debian\n+\tdh_installexamples -a -Nlibsnack-alsa\n+\tdh_installmenu -a -Nlibsnack-alsa\n+\tdh_installman -a -Nlibsnack-alsa\n+\tdh_installchangelogs -a -Nlibsnack-alsa -A changes\n+\tdh_link -a -Nlibsnack-alsa\n+\tdh_strip -a -Nlibsnack-alsa\n+\tdh_compress -a -Nlibsnack-alsa -X.tcl -X.wav -X.py -X.plg -X.phn\n+\tdh_fixperms -a -Nlibsnack-alsa\n+\tchmod a-x debian/*/usr/lib/tcltk/snack*/*\n+\tdh_makeshlibs -a -Nlibsnack-alsa\n+\tdh_installdeb -a -Nlibsnack-alsa\n+\tdh_shlibdeps -a -Nlibsnack-alsa\n+\ttcltk-depends -a -Nlibsnack-alsa\n+\tdh_gencontrol -a -Nlibsnack-alsa\n+\tdh_md5sums -a -Nlibsnack-alsa\n+\tdh_builddeb -a -Nlibsnack-alsa\n+\n+binary-alsa: install-alsa-stamp\n+\tdh_testdir -plibsnack-alsa\n+\tdh_testroot -plibsnack-alsa\n+\tdh_installdirs -plibsnack-alsa\n+\tdh_install -plibsnack-alsa\n+\tdh_installdocs -plibsnack-alsa -A README debian/README.Debian\n+\tdh_installexamples -plibsnack-alsa\n+\tdh_installmenu -plibsnack-alsa\n+\tdh_installman -plibsnack-alsa\n+\tdh_installchangelogs -plibsnack-alsa -A changes\n+\tdh_link -plibsnack-alsa\n+\tdh_strip -plibsnack-alsa\n+\tdh_compress -plibsnack-alsa -X.tcl -X.wav -X.py -X.plg -X.phn\n+\tdh_fixperms -plibsnack-alsa\n+\tchmod a-x debian/*/usr/lib/tcltk/snack*/*\n+\tdh_makeshlibs -plibsnack-alsa\n+\tdh_installdeb -plibsnack-alsa\n+\tdh_shlibdeps -plibsnack-alsa\n+\ttcltk-depends -plibsnack-alsa\n+\tdh_gencontrol -plibsnack-alsa\n+\tdh_md5sums -plibsnack-alsa\n+\tdh_builddeb -plibsnack-alsa\n+\n+binary-arch: $(binary_targets)\n+\n+binary-indep: install-indep\n+\tdh_testdir -i\n+\tdh_testroot -i\n+\tdh_installdirs -i\n+\tdh_install -i\n+\tdh_installdocs -i -A README debian/README.Debian\n+\tdh_installchangelogs -i -A changes\n+\tdh_link -i\n+\tdh_strip -i\n+\tdh_compress -i -X.tcl -X.wav -X.py -X.plg -X.phn\n+\tdh_fixperms -i\n \tchmod a-x debian/tcl-snack-doc/usr/share/doc/tcl-snack-doc/examples/tcl/*\n \tchmod a+x debian/tcl-snack-doc/usr/share/doc/tcl-snack-doc/examples/tcl/*.tcl\n \tchmod a-x debian/tcl-snack-doc/usr/share/doc/tcl-snack-doc/examples/python/*\n \tchmod a+x debian/tcl-snack-doc/usr/share/doc/tcl-snack-doc/examples/python/*.py\n \tchmod a-x debian/tcl-snack-doc/usr/share/doc/tcl-snack-doc/examples/python/tkSnack.py\n \tdh_python3 -ppython3-tksnack\n+\tdh_installdeb -i\n+\ttcltk-depends -i\n+\tdh_gencontrol -i\n+\tdh_md5sums -i\n+\tdh_builddeb -i\n+\n+# DvL: order is important!\n+binary: binary-arch binary-indep\n+\n+version=2.2.10\n+date=20090624\n \n get-orig-source:\n-\tset -e ; \\\n \tCURDIR=`pwd` && \\\n \tTMPDIR=`mktemp -d /tmp/snack.XXXXXX` && \\\n \tcd $$TMPDIR && \\\n-\trsync -r a.cvs.sourceforge.net::cvsroot/wize/wize2/wize/snack$(patchlevel) ./ && \\\n-\tcd snack$(patchlevel) && \\\n+\trsync -r a.cvs.sourceforge.net::cvsroot/wize/wize2/wize/snack$(version) ./ && \\\n+\tcd snack$(version) && \\\n \tfor f in $$(find . -name '*,v') ; do \\\n \t    (cd $$(dirname $$f) ; co $$(basename $$f) ; rm $$(basename $$f)) ; \\\n \tdone && \\\n@@ -135,9 +193,8 @@ get-orig-source:\n \trm -vf pkgIndex.tcl unix/pkgIndex.tcl && \\\n \tsed -i -e '607,775d' generic/jkFormant.c && \\\n \tcd .. && \\\n-\ttar -Jcf $$CURDIR/snack_$(patchlevel).$(date)+dfsg.orig.tar.xz snack$(patchlevel) && \\\n+\ttar -Jcf $$CURDIR/snack_$(version).$(date)+dfsg.orig.tar.xz snack$(version) && \\\n \trm -rf $$TMPDIR\n \n-.PHONY: override_dh_autoreconf-arch override_dh_auto_configure-arch override_dh_auto_build-arch \\\n-\toverride_dh_auto_install-arch override_dh_auto_install-indep override_dh_auto_clean \\\n-\toverride_dh_fixperms-indep get-orig-source\n+.PHONY: build build-arch build-indep clean clean-build clean-intermediate binary-oss binary-alsa \\\n+\tbinary-indep binary-arch binary install-indep get-orig-source\ndiff --git a/debian/tcl-snack-dev.docs b/debian/tcl-snack-dev.docs\ndeleted file mode 100644\nindex 151b8ff..0000000\n--- a/debian/tcl-snack-dev.docs\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-README\n-debian/README.Debian\ndiff --git a/debian/tcl-snack-dev.install b/debian/tcl-snack-dev.install\nnew file mode 100644\nindex 0000000..444fa70\n--- /dev/null\n+++ b/debian/tcl-snack-dev.install\n@@ -0,0 +1,6 @@\n+unix/snackConfig.sh\tusr/lib\n+generic/jkAudIO.h\tusr/include\n+generic/jkSound.h\tusr/include\n+generic/snack.h\t\tusr/include\n+generic/snackDecls.h\tusr/include\n+debian/tmp/usr/lib/*.a\tusr/lib\ndiff --git a/debian/tcl-snack-doc.install b/debian/tcl-snack-doc.install\nindex c4c95ff..5b751a4 100644\n--- a/debian/tcl-snack-doc.install\n+++ b/debian/tcl-snack-doc.install\n@@ -1,5 +1,3 @@\n-README                  usr/share/doc/tcl-snack-doc\n-debian/README.Debian    usr/share/doc/tcl-snack-doc\n doc/*\t\t\tusr/share/doc/tcl-snack-doc/html\n demos/python/*\t\tusr/share/doc/tcl-snack-doc/examples/python\n-debian/tmp/tcl/*\tusr/share/doc/tcl-snack-doc/examples/tcl\n+demos/tcl/*\t\tusr/share/doc/tcl-snack-doc/examples/tcl\ndiff --git a/debian/tcl-snack.docs b/debian/tcl-snack.docs\ndeleted file mode 100644\nindex 151b8ff..0000000\n--- a/debian/tcl-snack.docs\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-README\n-debian/README.Debian\ndiff --git a/debian/tcl-snack.install b/debian/tcl-snack.install\nnew file mode 100644\nindex 0000000..02134cc\n--- /dev/null\n+++ b/debian/tcl-snack.install\n@@ -0,0 +1,2 @@\n+debian/tmp/usr/lib/snack2.2/*.tcl\t\t/usr/lib/tcltk/snack2.2\n+debian/tmp/usr/lib/snack2.2/libsnack?*.so\t/usr/lib/tcltk/snack2.2\n","remote_name":"master","revision":"git-v1:bc7af8c90ee9cf1de7b041a87fa9f9c8ef721fe8","role":"main"}],"result_code":"success","result_tags":[],"revision":"git-v1:bc7af8c90ee9cf1de7b041a87fa9f9c8ef721fe8","start_time":"2026-11-08T11:57:49.254367Z","subpath":"","suite":"control","target_branch_url":null,"vcs_type":"git","worker":"tyr"},"run_id":"4ac99747-e81f-4aa3-a645-405acd925d66","success_probability":1.0,"suite":"control","total_previous_runs":1,"utcnow":"2026-11-09T03:19:14.909723547+00:00","vcs_type":"git","vcs_url":"git+ssh://git@salsa.debian.org/tcltk-team/snack.git","version":"0.0.0","worker_log_name":"worker.log","worker_name":"tyr"}