--- ardour-2.8.2.orig/debian/ardour.manpages +++ ardour-2.8.2/debian/ardour.manpages @@ -0,0 +1 @@ +DOCUMENTATION/ardour.1* --- ardour-2.8.2.orig/debian/ardour.sharedmimeinfo +++ ardour-2.8.2/debian/ardour.sharedmimeinfo @@ -0,0 +1,8 @@ + + + + Ardour session file + + + + --- ardour-2.8.2.orig/debian/ardour.examples +++ ardour-2.8.2/debian/ardour.examples @@ -0,0 +1,2 @@ +build-generic/ardour_system.rc + --- ardour-2.8.2.orig/debian/ardour.menu +++ ardour-2.8.2/debian/ardour.menu @@ -0,0 +1,4 @@ +?package(ardour):needs="X11" section="Applications/Sound" \ + hints="Professional,Featureful,WAV,GTK,MIDI,Music Editor,DAW,Multitrack,JACK,LADSPA" \ + title="Ardour GTK2" command="/usr/bin/ardour2" + --- ardour-2.8.2.orig/debian/ardour-opt.install +++ ardour-2.8.2/debian/ardour-opt.install @@ -0,0 +1,7 @@ +debian/tmp/@optarch@/usr/bin/ardour2 usr/bin +debian/tmp/@optarch@/usr/lib* usr/ +debian/tmp/@optarch@/usr/share/ardour2 usr/share/ +debian/tmp/@optarch@/usr/share/locale usr/share/ +debian/tmp/@optarch@/etc/ardour2* etc/ +debian/ardour.desktop usr/share/applications +debian/ardour2-session_exchange.py usr/bin --- ardour-2.8.2.orig/debian/changelog +++ ardour-2.8.2/debian/changelog @@ -0,0 +1,1321 @@ +ardour (1:2.8.2-0ubuntu1) karmic; urgency=low + + * Added mimetype handles for .ardour files (LP: #148585) + * Upgraded to new upstream version (LP: #412634) + + -- Eric Hedekar Tue, 21 Jul 2009 01:34:13 -0700 + +ardour (1:2.8-1ubuntu1) karmic; urgency=low + + * Merge from debian unstable, remaining changes: + - debian/control{.in}: + + Added libusb-dev to enable Tranzport driver (LP: #248269) + + Replace iceweasel with firefox in recommends + + -- Laurent Bigonville Thu, 30 Apr 2009 16:14:29 +0200 + +ardour (1:2.8-1) unstable; urgency=low + + [ Felipe Sateler ] + * Fix watch file + * Fix encoding of debian/copyright + * Use Applications instead of Apps in the menu + * Build and install in separate stages. + + [ Free Ekanayaka ] + * Imported Upstream version 2.8 (Closes: #521498) + * Updated ardourino and ardour-x-change patches + + -- Free Ekanayaka Sun, 19 Apr 2009 18:42:58 +0200 + +ardour (1:2.7.1-2ubuntu1) jaunty; urgency=low + + [ Surfaz Gemon Meme ] + * debian/control{.in}: + + Added libusb-dev to enable Tranzport driver (LP: #248269) + + [ Iain Lane ] + * debian/contro{,.in}: + + Replace iceweasel with firefox in recommends + + -- Surfaz Gemon Meme Fri, 13 Feb 2009 22:50:39 +0000 + +ardour (1:2.7.1-2) unstable; urgency=low + + * Add 100_syslibs patch to use system libraries where available (vamp, sndfile) + * Build-Depends on vamp-plugin-sdk + * Fix typo SYLIBS -> SYSLIBS (Closes: #446405) + * Update Vcs-Git and Vcs-Browser, using pkg-multimedia git repository + + -- Free Ekanayaka Thu, 18 Dec 2008 10:35:20 +0000 + +ardour (1:2.7.1-1) unstable; urgency=low + + * New upstream release (Closes: #508970) + * Remove DOCUMENTATION from binary packages, drop by upstream + * Set SYSLIBS=yes to build against system libraries instead of + internal ones (Closes: #446405) + * Drop CVE-2007-4974 patch, merged upstream + * Update 90_ardour-x-change patch + * Update 80_ardourino patch + * Drop 70_DARCH patch, merged upstream + * Build with optimisation on amd64 + + -- Free Ekanayaka Wed, 17 Dec 2008 14:25:50 +0000 + +ardour (1:2.5-3) unstable; urgency=low + + * ardour-x-change: fix value range of error codes + + -- Free Ekanayaka Tue, 04 Nov 2008 10:20:12 +0000 + +ardour (1:2.5-2) unstable; urgency=low + + * ardour-x-change: add support for creating symlinks at run time + + -- Free Ekanayaka Mon, 20 Oct 2008 12:17:25 +0100 + +ardour (1:2.5-1) unstable; urgency=low + + * New upstream release + * Update ardourino patch + * Drop s390-FTBFS patch, it doesn't apply anymore + * Add 90_ardour-x-change patch + * Build-Depend on libaubio-dev + + -- Free Ekanayaka Tue, 14 Oct 2008 18:45:17 +0200 + +ardour (1:2.4.1-2) unstable; urgency=low + + * Fixed import window size in ardourino patch + * Fixed FTBFS Built-in libsigc++ broken (Closes: #474422), thanks + to Roland Stigge + * Fixed FTBFS if build twice in a row (Closes: #442495), thanks + to Sandro Tosi + * Applied .desktop files patch from Marco Rodrigues (Closes: #463003) + * Fixed syntax errors in package description (Closes: #485891), thanks + to Juan Ricart + + -- Free Ekanayaka Mon, 16 Jun 2008 14:44:48 +0100 + +ardour (1:2.4.1-1) unstable; urgency=low + + * New upstream release + + -- Free Ekanayaka Mon, 14 Apr 2008 14:54:45 +0100 + +ardour (1:2.4-2) unstable; urgency=low + + * Re-included ardourino patch, to fix mixer strip display at 1024x600 + + -- Free Ekanayaka Tue, 01 Apr 2008 13:50:07 +0200 + +ardour (1:2.4-1) unstable; urgency=low + + * New upstream release + * Dropped ardourino patch, it's not needed anymore as Ardour + now behaves well at 1024x600 resolution + * Set FREEDESKTOP to "no", as the source fails to build + + -- Free Ekanayaka Tue, 01 Apr 2008 13:50:07 +0200 + +ardour (1:2.3.1-1) unstable; urgency=low + + * New upstream release + * debian/control: + - build-depend on libfftw3-dev (Closes: #463803) + - added Homepage, Vcs-Svn, Vcs-Browser + * debian/patches + - dropped 50-soundtouch.patch (fixed upstream) + - updated 80_ardourino.patch + - dropped unused patches from source package + + -- Free Ekanayaka Thu, 7 Feb 2008 20:51:55 +0000 + +ardour (1:2.2-1) unstable; urgency=low + + * New upstream release + * Fixed watch file (Closes: #449921) + * debian/patches: + - resolved rejects in 80_ardourino.patch + - re-added buttons to 80_ardourino.patch, best viewed at 1024x600 + - dropped 90_fix-ftbfs-for-abs.patch (fixed upstream) + + -- Free Ekanayaka Thu, 13 Dec 2007 12:19:13 +0000 + +ardour (1:2.1-1.1) unstable; urgency=high + + * Non-maintainer upload by testing-security team. + * Fix FTBFS caused by type casting by adding a patch by + Thiemo Seufer (90_fix-ftbfs-for-abs.patch; Closes: #446597). + * Fix heap-based buffer overflow possibly leading to arbitrary code + execution in embedded copy of libsndfile (CVE-2007-4974; Closes: #445889). + + -- Nico Golde Tue, 04 Dec 2007 17:37:42 +0100 + +ardour (1:2.1-1) unstable; urgency=low + + * New upstream release + * Resolved conflicts in the ardourino patch + + -- Free Ekanayaka Sun, 30 Sep 2007 09:42:40 +0100 + +ardour (1:2.0.5-1) unstable; urgency=low + + * New upstream release + * Conflicts with the old 0.99 packages (Closes: #424412) + * Hide master track in ardourino template (this saves some space for + the other tracks + + -- Free Ekanayaka Fri, 3 Aug 2007 15:17:43 +0100 + +ardour (1:2.0.4-1) unstable; urgency=low + + * New upstream release + * Include pre-redirect in ardourino + * Added ardourino template + + -- Free Ekanayaka Wed, 1 Aug 2007 00:21:08 +0200 + +ardour (1:2.0.3-2) unstable; urgency=low + + * Added "ardourino" patch, for displays with 800x600 resolutions + + -- Free Ekanayaka Thu, 12 Jul 2007 14:44:31 +0200 + +ardour (1:2.0.3-1) unstable; urgency=low + + * New upstream release (Closes: #427739). Note that the source is still + built without SHLIBS=1, so that the third party libraries shipped with + the upstream tarball are used, instead of the system libraries (which + is what the upstream developers recommend). At the moment this is the + only available workaround to #425507, but we should eventually fix it + in the relevant system libraries + * Added 70_DARCH patch to prevent setting DARCH=x86 on amd64 + * Rebuilt against flac 1.1.4 (Closes: #426634) + + -- Free Ekanayaka Tue, 3 Jul 2007 21:42:15 +0200 + +ardour (1:2.0.2-2) unstable; urgency=low + + * Drop SHLIBS=1 scons flag, which makes ardour run at 100% + on some hw, thanks to ken at restivo dot org (closes: #425507) + + -- Free Ekanayaka Thu, 24 May 2007 12:51:27 +0200 + +ardour (1:2.0.2-1) unstable; urgency=low + + * New upstream release + * debian/control: + - build-depend on libcairomm-1.0-dev (>= 1.2.4) + - ardour conflicts with ardour-gtk (>= 1:0.99.3+2.0beta12) + - recommend also iceweasel as real-package alternative to www-browser + * debian/patches: + - added 60-libdir.patch, we don't want files in /usr/lib64 + + -- Free Ekanayaka Wed, 9 May 2007 21:21:23 +0000 + +ardour (1:2.0-1) unstable; urgency=low + + * New upstream release + * Mention third-party files and libs in debian/copyright + * Drop ardour-gdb, we got stable! + + -- Free Ekanayaka Mon, 7 May 2007 15:34:36 +0200 + +ardour (1:2.0~rc1-1) unstable; urgency=low + + * Imported changes from Ubuntu + * Upstream provides now a menu icon (Closes: #369978) + * Build-Depend on libjack-dev instead of libjack0.100.0-dev + + -- Free Ekanayaka Mon, 16 Apr 2007 10:41:39 +0200 + +ardour (1:2.0~rc1-0ubuntu1) feisty; urgency=low + + * New upstream release. + * Rename ardour-gtk to ardour, allowing for a parallel install with + previous ardour version. + * debian/ardour-gtk*: Rename to ardour*, and edit where necessary. + * Merge contents of ardour-doc and ardour-session-exchange into the + ardour package. + * debian/control* debian/opt-control: + - Change all ardour-gtk references to ardour. + - Fixed a few typos. + - Updated maintainer field. + - Add jackd as a dependency for ardour. + - Remove ardour-doc and ardour-session-exchange packages. + * debian/rules: Removed all references to ksi. + * Move session_exchange.py into debian directory. + * debian/README.Debian: + - Change executable for debugging to ardour2. + - Added a note about the renaming of session_exchange.py. + + -- Luke Yelavich Sat, 14 Apr 2007 08:09:34 +1000 + +ardour (1:0.99.3+2.0beta12-1) experimental; urgency=low + + * New upstream release + + -- Free Ekanayaka Sat, 17 Mar 2007 17:47:38 +0100 + +ardour (1:0.99.3+2.0beta11.1-1) experimental; urgency=low + + * New upstream pre-release + * Added libboost-dev, liblo0-dev, libsoundtouch1-dev to Build-Depends + * Merged changes between 0.99.2-2 and 0.99.3-1 + * Added icon to .desktop files + * Bumped Standards-Version to 3.7.2 + * Removed useless build-essential build dependency + * Updated FSF address + * Fixed broken watch file + * Added epoch to let the version be greater than the current version + in experimental (1+2.0alpa2-1) + + -- Free Ekanayaka Tue, 16 Jan 2007 19:53:47 +0100 + +ardour (1+2.0alpa2-1) experimental; urgency=low + + * new upstream pre-release + * merge ardour 0.99.2-2 changes. + + debian/rules: don't build SSE stuff on altivec. + + -- Robert Jordens Wed, 15 Mar 2006 15:33:31 +0100 + +ardour (1+2.0alpa1-1) experimental; urgency=low + + * new upstream alpha snapshot + + -- Robert Jordens Sun, 5 Mar 2006 19:34:15 +0100 + +ardour (0.99.3-1) unstable; urgency=low + + * New upstream release (Closes: #386384). + * New maintainer Debian Multimedia Team + * Bug fix: "ardour-gtk: Typos in package description", thanks to daniel + (Closes: #304351). + * Bug fix: "ardour-gtk-i686: Spelling mistake in package description", + thanks to Simon Waters (Closes: #362736). + * Bug fix: "ardour-gtk: Spelling mistake in package description", thanks + to Simon Waters (Closes: #362737). + * Bug fix: "ardour-gtk-i686: Spelling mistake in package description", + thanks to Simon Waters (Closes: #362736). + + -- Free Ekanayaka Tue, 17 Oct 2006 12:36:02 +0200 + +ardour (0.99.2-2) unstable; urgency=low + + * debian/rules: don't build SSE stuff on altivec. + + -- Robert Jordens Thu, 9 Mar 2006 13:52:43 +0100 + +ardour (0.99.2-1) unstable; urgency=low + + * new upstream maintenance version 0.99.2. + * debian/patches/40_use_shipped_soundtouch.patch: use the libsoundtouch + version from the tarball and compile it statically as a workaround for + Bug#333432 and Bug#341299. + from Guenter Geiger. + * include newer french translation from Christophe Combelles + ; closes: Bug#335999 + * shorten the common description significantly and refer to ardour-gtk for + more; closes: Bug#333966 + * debian/watch: update + + -- Robert Jordens Sat, 4 Mar 2006 16:37:51 +0100 + +ardour (0.99-3) unstable; urgency=low + + * debian/ardour-gtk*.install: install i18n files; closes: Bug#332418 + (ardour-gtk: no l10n in the package) + * upload to unstable + + -- Robert Jordens Sat, 8 Oct 2005 09:50:15 +0200 + +ardour (0.99-2) experimental; urgency=low + + * debian/control*, debian/*.desktop: don't use xterm anymore since there are + now meaningful error dialogs and automatic starting of jackd; + closes: Bug#325046 + + -- Robert Jordens Wed, 5 Oct 2005 15:17:49 +0200 + +ardour (0.99-1) experimental; urgency=low + + * new upstream release + + -- Robert Jordens Thu, 29 Sep 2005 14:43:47 +0200 + +ardour (0.9beta30-1) experimental; urgency=low + + * new upstream rlease + + 05_gcc40-fixes.patch, 06_fastlog-gcc4.patch, 07_more-gcc4.patch, + 08_cast-precision.patch, 27_ardour.rc.patch: applied upstream + + 31_add-O2-to-DEBUG-CFLAGS.patch: updated + * uploading to experimental to not onterfere with the ongoing JACK/CXX + transition. + + -- Robert Jordens Thu, 15 Sep 2005 14:42:19 +0200 + +ardour (0.9beta29-5) unstable; urgency=low + + * debian/control: ardour-gtk-dbg is priority extra + * debian/patches/08_cast-precision.patch; fix a few void* to int casts on + 64bit archs. + + -- Robert Jordens Mon, 8 Aug 2005 14:01:57 +0200 + +ardour (0.9beta29-4) unstable; urgency=medium + + * CXX transition; closes: Bug#321004: ardour-gtk uninstallable: dependency + broken) + + debian/control: build against newer libgtkmm1.2-0c2, libsoundoutch1c2, + libsigc++0c2 + + urgency medium because this is RC + * debian/patches/05_gcc40-fixes.patch: from ardour--ao--0--patch-681 (Fix + for gcc4 and memory leak in libardour's Stateful. Added virtual + destructors.) + * debian/patches/06_fastlog-gcc4.patch: from ardour--ao--0--patch-693 (This + patch stops the warning about type-punned pointers in fastlog.h when + compiling with gcc4. it also stops the meters from wobbling and the gain + readouts from displaying incorrect levels, as seems to happen on fedora + core 4's gcc4.) + * debian/patches/07_more-gcc4.patch: from ardour--ao--0--patch-714 (Minor + gcc4 fixes.) + + -- Robert Jordens Sun, 7 Aug 2005 16:02:27 +0200 + +ardour (0.9beta29-3) unstable; urgency=low + + * upload 0.9beta29-2 unchanged to unstable, thus rebuilding against + libjack0.100.0 and twisted 2.0 (closes: Bug#315879: + ardour-session-exchange: Dependencies broken) + * debian/*.desktop: add items to the desktopr files; + closes: Bug#313366: ardour-gtk: Non XDG-compliant .desktop file + + -- Robert Jordens Sat, 2 Jul 2005 15:06:00 +0200 + +ardour (0.9beta29-2) experimental; urgency=low + + * rebuild against jack 0.100.0 + + -- Robert Jordens Tue, 21 Jun 2005 22:49:41 +0200 + +ardour (0.9beta29-1) unstable; urgency=low + + * new upstream release + + 33_dont-append-version.patch: applied upstream + * upload to unstable because this release contains purely fixes (see + http://ardour.org/news.php) + + -- Robert Jordens Mon, 18 Apr 2005 11:28:44 +0200 + +ardour (0.9beta28-scons-1-1) experimental; urgency=low + + * new upstream cvs snapshot + + 33_fix-config-prefix.patch: applied uptream + + 33_dont-append-version.patch: added to not build "ardour-$version" but + simply "ardour" + * debian/common-description: fix long description; closes: Bug#304351 + + -- Robert Jordens Tue, 12 Apr 2005 21:00:59 +0200 + +ardour (0.9beta28-scons-2) experimental; urgency=low + + * debian/control: ardour-gtk*: conflict, replace libardour0; + closes: Bug#303670 + * debian/common-description: add ${Neweline}s; closes: Bug#303641 + + -- Robert Jordens Fri, 8 Apr 2005 08:59:17 +0200 + +ardour (0.9beta28-scons-1) experimental; urgency=low + + * new upstream release using scons + * a lot of shiny new things that were meade incredibly easy by upstream + switching to scons (thanks a lot by the way!): + + no split-off of libraries; since these libraries are highly + fluctuating in their API and only used in ardour, it makes no sense + to carry around 8 packages on each arch for them. Drop the -dev + packages in that go as well and build ardour-gtk static WRT + libardour, libpbd, libmidi++ and libgtkmmext + + added optimized packages -altivec and -i686 on powerpc and i386. + Done by rebuilding with scons and template based generation of the + snippet in control and ardour-gtk-@optarch@.* + + added -dbg packages with detached debugging symbols (thanks to dh_strip!) + for the generic non-optimized build; I hope they are not too large... + + add rewriting of debian/control with cdbs for automatic addition of + @cdbs@ Build-Depends + + all the patches we used to need to build against libsoundtouch, + libgtkmm, libgtk-canvas, libsigc++ are now included in aequivalent + versions upstream and nicely hidden under the DEBIAN option to scons + + only install all the docs into ardour-doc + + most other #include-related patches also accepted upstream + + -- Robert Jordens Wed, 16 Mar 2005 09:40:35 +0100 + +ardour (0.9beta28-1) unstable; urgency=low + + * new upstream release + + -- Robert Jordens Thu, 10 Mar 2005 08:36:57 +0100 + +ardour (0.9beta27-1) unstable; urgency=low + + * new upstream release + + adapted patches: + debian/patches/15_use-system-libs-buildsys.patch + debian/patches/18_build-against-system-soundtouch.patch + + deleted patches applied upstream: + debian/patches/06_install-templates-into-DESTDIR.patch + + -- Robert Jordens Tue, 1 Mar 2005 16:56:41 +0100 + +ardour (0.9beta26-1) unstable; urgency=low + + * new upstream release + + -- Robert Jordens Thu, 10 Feb 2005 10:38:48 +0100 + +ardour (0.9beta25-1) unstable; urgency=low + + * new upstream release + + debian/patches/15_use-system-libs-buildsys.patch, + debian/patches/18_build-against-system-soundtouch.patch: adapted + + -- Robert Jordens Tue, 8 Feb 2005 15:11:22 +0100 + +ardour (0.9beta24-1) unstable; urgency=low + + * new upstream release + + debian/patches/23_fix-cycles-mips.patch: applied upstream + + -- Robert Jordens Fri, 21 Jan 2005 09:01:37 +0100 + +ardour (0.9beta23-2) unstable; urgency=low + + * dont build libardour0, libpbd0, libgtkmmext0, libmidi++0 shared; dont + build lib*0-dev, lib*0-dbg + + -- Robert Jordens Tue, 18 Jan 2005 22:04:03 +0100 + +ardour (0.9beta23-1) unstable; urgency=low + + * new upstream release + * debian/control: Build-Depends: libgtk-canvas (>= 0.1.1-7) which + has the _NO_AUTO_REDRAW flag + + -- Robert Jordens Wed, 12 Jan 2005 11:00:09 +0100 + +ardour (0.9beta22-2) unstable; urgency=high + + * debian/patches/23_fix-cycles-mips.patch: fixes superflous newline in + cycles.h for mips; urgency high because this is an FTBFS + + -- Robert Jordens Mon, 20 Dec 2004 23:33:21 +0100 + +ardour (0.9beta22-1) unstable; urgency=high + + * new upstream release; urgency high because the intermediate release + 0.9beta21 contains quite desastrous bugs and has been -- ex posteriori -- + declared as "not to be released"; list of changes + ; examples: + + fixes in RT buffer handling + + fixes in JACK transport + + fixes in template path handling; closes: Bug#283711 + + fixes in diskstream file handling + + -- Robert Jordens Sun, 19 Dec 2004 23:32:45 +0100 + +ardour (0.9beta21-3) unstable; urgency=low + + * ardour-session-exchange release 0.1.1 + + -- Robert Jordens Tue, 16 Nov 2004 23:50:16 +0100 + +ardour (0.9beta21-2) unstable; urgency=low + + * readd debian/patches/06_install-templates-into-DESTDIR.patch; I trusted + the upstream changelog without checking. Hrmmmm + closes: Bug#279226 again + + -- Robert Jordens Tue, 2 Nov 2004 08:50:06 +0100 + +ardour (0.9beta21-1) unstable; urgency=low + + * new upstream release + + debian/patches/05_midipp-use-alsa.diff, + debian/patches/06_install-templates-into-DESTDIR.patch: incorporated + upstream + + -- Robert Jordens Tue, 2 Nov 2004 00:07:37 +0100 + +ardour (0.9beta20-3) unstable; urgency=low + + * debian/patches/05_midipp-use-alsa.diff: added: fixes alsa midi + + -- Robert Jordens Mon, 1 Nov 2004 22:11:01 +0100 + +ardour (0.9beta20-2) unstable; urgency=low + + * debian/patches/06_install-templates-into-DESTDIR.patch: + install templates under DESTDIR; closes: Bug#279226 + + -- Robert Jordens Mon, 1 Nov 2004 17:35:51 +0100 + +ardour (0.9beta20-1) unstable; urgency=low + + * new upstream release, packaging-relevant stuff: + + no libglib-dev needed + + templates shipped with ardour-gtk + + fixes thread handling on exit + + automake 1.7 required (libmidi++) + * debian/{control,rules}: use quilt for patch management + * debian/patches/15_use-system-libs-buildsys.patch: adapted + * ardour-doc: removed djcj stuff; licensing unclear, maintaining mirrors of + web pages is not something I want to do in debian packages + + -- Robert Jordens Mon, 1 Nov 2004 07:48:41 +0100 + +ardour (0.9beta19-3) unstable; urgency=low + + * upload to unstable because 0.9beta19-1 has entered testing + * debian/control: remove ardour-ksi traces + + -- Robert Jordens Thu, 2 Sep 2004 11:53:32 +0200 + +ardour (0.9beta19-2) experimental; urgency=low + + * 18_build-against-system-soundtouch.patch, 18_dont-build-soundtouch.patch, + debian/control, debian/rules, debian/libsoundtouch0*: + don't build libsoundtouch but compile against the official + libsoundtouch1; closes: Bug#252892 + + -- Robert Jordens Wed, 18 Aug 2004 15:35:14 +0200 + +ardour (0.9beta19-1) unstable; urgency=low + + * new upstream release + * djcj-ardour-doc-20040807.1446.tar.bz2: updated from the web + + -- Robert Jordens Sat, 7 Aug 2004 14:46:25 +0200 + +ardour (0.9beta18.4-1) unstable; urgency=low + + * new upstream release + + debian/patches/06_gtk-gui-configure-fix.patch: disabled + + debian/patches/14d_force-run-all-autotools.patch: added + * increment debhelper dependency to make sure Bug#228272 does not occur + * debian/watch: added + * debian/copyright: updated with new URL + + -- Robert Jordens Mon, 2 Aug 2004 11:01:55 +0200 + +ardour (0.9beta17.1-4) unstable; urgency=low + + * debian/patches/14c_force-use-automake-1.7.patch: factor out changes of + previous revisions into a separate patch + * correct superfluous replacements of aclocal with aclocal-1.7 where the + former was a directory + + -- Robert Jordens Tue, 6 Jul 2004 17:28:13 +0200 + +ardour (0.9beta17.1-3) unstable; urgency=low + + * debian/patches/14a_add-autogens-and-m4-files-cvs.patch, + debian/patches/14b_modify-autogen-sh.patch: use aclocal1.7 to + regenerate the files + + -- Robert Jordens Wed, 30 Jun 2004 21:17:56 +0200 + +ardour (0.9beta17.1-2) unstable; urgency=low + + * debian/patches/14a_add-autogens-and-m4-files-cvs.patch, + debian/patches/14b_modify-autogen-sh.patch: use automake1.7 to + regenerate the files + + -- Robert Jordens Wed, 30 Jun 2004 11:12:29 +0200 + +ardour (0.9beta17.1-1) unstable; urgency=low + + * new upstream tarball + + debian/patches/05_fix-manpage-install-local.patch: integrated upstream + * upload going to unstable again now that JACK 0.98.1 is there + + -- Robert Jordens Wed, 30 Jun 2004 01:53:30 +0200 + +ardour (0.9beta16.1-3) experimental; urgency=low + + * add easier support for enabling detached debugging symbols, just replace + "anydebug" with "any" in debian/control + + -- Robert Jordens Wed, 9 Jun 2004 17:10:44 +0200 + +ardour (0.9beta16.1-2) experimental; urgency=low + + * this is not a native package, upload with correct orig tarball + + -- Robert Jordens Mon, 7 Jun 2004 17:06:29 +0200 + +ardour (0.9beta16.1-1) experimental; urgency=low + + * new upstream tarball + + -- Robert Jordens Sat, 5 Jun 2004 21:32:54 +0200 + +ardour (0.9beta16-1) experimental; urgency=low + + * new upstream tarball + * debian/patches/15_use-system-libs-buildsys.patch: link against libcurl + * debian/control: b-d on libidn11-dev, libcurl2-dev is missing that + dependency + + -- Robert Jordens Fri, 4 Jun 2004 17:54:53 +0200 + +ardour (0.9beta14-3-1) experimental; urgency=low + + * new upstream tarball 0.9beta14-3 + * debian/control: revert Build-Depends on g77 + + -- Robert Jordens Sun, 23 May 2004 22:50:19 +0200 + +ardour (0.9beta13-1) experimental; urgency=low + + * new upstream release + + 05_fix-manpage-install-local.patch: added + + debian/{control,rules}, 17_dont-autogen-ksi.patch: + ksi is not included upstream, dead upstream, doesnt compile + + debian/control: needs libjack0.80.0-dev (>= 0.98), libardour0 also + depends on jackd (>= 0.98) + + debian/patches: split a few, reorganized others + + 14_add-autogens-and-m4-files-cvs.patch: split into: + 14a_add-autogens-and-m4-files-cvs.patch, 14b_modify-autogen-sh.patch, + 15_gen-pkg-configs.patch + + 07_force-gtkmmext-install.patch: added. somehow libgtkmmext was not + installed + + 06_gtk-gui-configure-fix.patch: added, small effectless oneliner + + 05_fix-manpage-install-local.patch: install with DESTDIR + * debian/control: real-package alternative to audio-mixer + * packaged session_exchange.py from + http://www.piratesvsninjas.com/software/sex/ + * debian/control: Build-Depends: g77 + + -- Robert Jordens Thu, 20 May 2004 14:28:39 +0200 + +ardour (0.9beta11.2-2) unstable; urgency=low + + * replaced ardour.sourceforge.net with ardour.org + * debian/patches/05_fix-void-cast-in-soundtouch.patch: added, + closes: Bug#237572 + + -- Robert Jordens Fri, 12 Mar 2004 10:52:09 +0100 + +ardour (0.9beta11.2-1) unstable; urgency=low + + * new upstream release + * debian/patches/04_fix-gtk-canvas-include-in-automation_edit.patch: removed + * debian/patches/15_use-system-libs-buildsys.patch: updated to new upstream + * debian/patches/04_fix-gtk-canvas-include-in-crossfade_edit.patch, + debian/patches/14_install-libardour-in-usr-lib.patch: added, do what they + say + * debian/docs: updated to new locations in upstream tarball + + -- Robert Jordens Mon, 1 Mar 2004 15:53:58 +0000 + +ardour (0.9beta10.2-1) unstable; urgency=low + + * new upstream release + * debian/patches/01_0.9beta9-cvs040203.patch: removed + * disable optimization (for i386) because it fails on k6 (probably others as + well); probably really finishes with Bug#219672 but anyway + closes: Bug#234371 + * debian/patches/16_cdbs-cflags-am_cflags.patch: updated to new upstream + source + * debian/patches/04_fix-gtk-canvas-include-in-automation_edit.patch: added, + fixes the inclusion path for gtk-canvas.h + + -- Robert Jordens Wed, 25 Feb 2004 20:55:49 +0100 + +ardour (0.9beta9+3-2+cvs20040203) unstable; urgency=low + + * Build-Depends-Indep cleaned up + * debian/patches/01_0.9beta9-cvs040203.patch: update to current cvs + * debian/control: Depends: jackd (>= 0.80.0) + + -- Robert Jordens Tue, 3 Feb 2004 15:52:41 +0100 + +ardour (0.9beta9+3-2) unstable; urgency=low + + * distribute detached debugging symbols in *-dbg packages with the help from + dh_strip's new feature new packages: ardour-gtk-dbg, ardour-ksi-dbg, + libardour0-dbg, libgtkmmext0-dbg, libpbd0-dbg, libsoundtouch0-dbg, + libmidi++0-dbg, these packages only recommend gdb (>= 6.0) because the + symbols could also be used with older versions. - the feature is disabled + so far because the packages are surprisingly huge and because it would + delay the propagation of the JACK packages to testing + * debian/control: ladspa-plugin is recommended + * rebuild against new libraptor1-dev + + -- Robert Jordens Sat, 24 Jan 2004 22:33:51 +0100 + +ardour (0.9beta9+3-1) unstable; urgency=low + + * new upstream release + + obsoletes 04_0.9beta9+2-cvs040103.patch, + 04_add-newsavedialog_h-from-cvs.patch, + 05_cvs20040103-cvs20040113.patch, 24_add-editor_xpms-from-cvs.patch + + -- Robert Jordens Fri, 16 Jan 2004 02:01:25 +0100 + +ardour (0.9beta9+2-1+cvs20030113) unstable; urgency=low + + * rewrote urls as as recommended in RFC 2396, Appendix E + * added: debian/patches/04_0.9beta9+2-cvs040103.patch: minor fixes + * uploading to unstable as JACK 0.80.0 or above is there + * removed the old remains of the manual; the new one will be sold; scrambled + version may be available from http://ardour.sourceforge.net + * added: debian/patches/05_cvs20040103-cvs20040113.patch: i18n and minor + fixes + + -- Robert Jordens Sat, 3 Jan 2004 13:16:09 +0100 + +ardour (0.9beta9+2-1) experimental; urgency=low + + * new upstream prerelease tarball + (0.9beta9+1-1 never made it to the Debian archive) + + added: debian/patches/23_add-newsavedialog_h-from-cvs.patch + + -- Robert Jordens Tue, 30 Dec 2003 22:59:48 +0100 + +ardour (0.9beta9+1-1) experimental; urgency=low + + * new upstream prerelease tarball + + debian/control: needs libjack0.91.1-dev + + -- Robert Jordens Wed, 3 Dec 2003 19:06:59 +0100 + +ardour (0.9beta9-1) experimental; urgency=low + + * new upstream release + * debian/patches/16_cdbs-cflags-am_cflags.patch: fixed conflicts + * debian/ReleaseNotes-1.0betaX: removed, use ReleaseNotes-0.9betaX + from the tarball + * debian/rules: disable optimization for !i386 explicitly + + -- Robert Jordens Wed, 29 Oct 2003 11:53:51 +0000 + +ardour (0.9beta8-1) experimental; urgency=low + + * new upstream release + + -- Robert Jordens Tue, 28 Oct 2003 18:07:52 +0000 + +ardour (0.9beta7-1) experimental; urgency=low + + * new upstream release + * debian/patches/16_cdbs-cflags-am_cflags.patch: fixed conflicts + + -- Robert Jordens Mon, 27 Oct 2003 10:14:20 +0000 + +ardour (0.9beta6-1) experimental; urgency=low + + * new upstream release + + -- Robert Jordens Fri, 24 Oct 2003 14:27:06 +0200 + +ardour (0.9beta5-1) experimental; urgency=low + + * upload to experimental because of the required newer JACK + * new upstream release + + obsoltese: debian/patches/01_0.9beta3-to-20030922-upstream-cvs.patch, + debian/patches/02_cvs-200309302007-daily.patch + * debian/control: + + build with new JACK transport API: Build-Depends: libjack0.80.0-dev + + cleaned up Build-Depends. + * added debian/ReleaseNotes-1.0betaX from CVS again + + -- Robert Jordens Sat, 11 Oct 2003 14:56:09 +0200 + +ardour (0.9beta3-99cvs20031001) experimental; urgency=low + + * debian/patches/02_cvs-200309302007-daily.patch: from cvs. obsoletes + debian/patches/32_fix-non-c-locale-pans.patch + + -- Robert Jordens Wed, 1 Oct 2003 11:54:42 +0200 + +ardour (0.9beta3-99cvs20030930) experimental; urgency=low + + * debian/patches/32_fix-non-c-locale-pans.patch: + fixes the non-C-locale bug in ardour.rc; closes: Bug#207896 + + -- Robert Jordens Tue, 30 Sep 2003 18:09:38 +0200 + +ardour (0.9beta3-99cvs20030923) experimental; urgency=low + + * debian/patches/01_0.9beta3-to-20030922-upstream-cvs.patch: added from cvs + + a new session file format + * debian/patches/23_cycles.h-other-archs.patch, + debian/patches/24_64-bit-arches.patch, + debian/patches/21_atomic-ops-on-other-archs.patch, + debian/patches/30_nick-mainsbridge-smoother-scroll.patch, + debian/patches/31_jack-0.80-type-fix.patch: + removed because integrated upstream + * debian/patches/02_cvs-200309232007-daily.patch: added from cvs + * debian/patches/03_cvs-200309232007-fix-gtk-canvas-includes.patch: added + * debian/patches/15_use-system-libs-buildsys.patch: split of + debian/patches/14_add-autogens-and-m4-files-cvs.patch + + -- Robert Jordens Wed, 24 Sep 2003 20:48:34 +0200 + +ardour (0.9beta3-6) unstable; urgency=medium + + * debian/patches/22_remove-atomic-impl-sparc.patch: remove the + implementation of atomic ops for sparc and take the generic one. + this fixes the FTBFS on sparc + + -- Robert Jordens Sat, 20 Sep 2003 09:26:54 +0200 + +ardour (0.9beta3-5) unstable; urgency=low + + * debian/control: remove libjack0.80.0-dev from Build-Depends + + -- Robert Jordens Wed, 17 Sep 2003 23:24:56 +0200 + +ardour (0.9beta3-4) unstable; urgency=low + + * debian/rules: + + specify parallel building via DEB_BUILD_OPTIONS + + let a failure during building of ardour-doc not become fatal; + saves autobuilders from installing TeX and building the manual + * debian/control: + + Suggests: jamin for mastering + + versioned Build-Depends on netbase + + added prospective libjack0.80.0-dev + + removed Eric from Uploaders + * debian/ReleaseNotes-1.0betaX: added from CVS + * debian/patches/15_use-system-libs-buildsys.patch: + + link libardour against glib + + -- Robert Jordens Thu, 11 Sep 2003 19:48:00 +0200 + +ardour (0.9beta3-3) unstable; urgency=low + + * debian/control: + + ardour-gtk: Depends: xterm; closes: #207397 + + libardour0: Recommends: audio-mixer | x-audio-mixer + + changed rjo@gmx.de to jordens@debian.org + + Standards-Version: 3.6.1; no changes + * debian/ardour-*.{menu,desktop}: added hint "JACK" to start grouping + all JACK apps (Guenter Geiger's idea) + * debian/rules: changed order of inclusion of cdbs rules to stop running + configure and build twice + * debian/docs: add README.Debian to all packages + + -- Robert Jordens Tue, 2 Sep 2003 22:18:00 +0200 + +ardour (0.9beta3-2) unstable; urgency=low + + * debian/ardour-{ksi,gtk}.menu: added hints + * debian/rules: + + don't optimize if DEB_BUILD_OPTS contains noopt, as per policy. + * 24_64-bit-arches.patch: update from Takashi Iwai for 64bit archs + * removed 26_gtk-canvas.h.patch + * debian/README.Debian: updated to contain information about compiling + unoptimized and unstripped for debugging + * debian/ardour-gtk.menu: start ardour in an xterm (with hold) + until upstream stops killing the entire process group on exit: + closes: #203447; the messages on the console are too important anyway, + especially if they remind the user of starting jackd! + * debian/ardour-gtk.desktop: added Gnome menu entry + + -- Robert Jordens Mon, 18 Aug 2003 00:43:40 +0200 + +ardour (0.9beta3-1) unstable; urgency=low + + * New upstream release. + + sane (no) default window-sizes: closes: #204956, #205218 + * cycles.h, atomic.h: working: closes: #204096 + * switched to cdbs... had to become a new upstream source + + 16_cdbs-cflags-am_cflags.patch: fix CFLAGS being overriden by cdbs + + debian/*.docs: rationalized and adapted to cdbs + + ardour-doc: djcj-docs, manual: adapted to cdbs + + debian/control: include Build-Depends-Indep into Build-Depends again + until these are fixed: #148932 #203097 #205395 + + cdbs invokes configure and make during dpkg-buildpackage's + invocation of binary even if already build before: #205396 + * debian/control: + + use dh-buildinfo + + debian/control: add more useful information to the descriptions and + corrected them + * debian/README.Debian: added mailinglists and more info about correctly + invoking jackd: closes: #204983, #203897 + * debian/rules: added a few maintainance rules + * 30_nick_mainsbridge_smoother_scroll.patch allows smoother scrolling in the + editor + + -- Robert Jordens Wed, 13 Aug 2003 14:31:25 +0200 + +ardour (0.9beta2-8) unstable; urgency=low + + * libs/ardour/ardour/cycles.h: added mips, hppa and s390 code + * debian/rules: Call make with -j, if USE_NJOBS is set + and non-empty in the environment (stolen from #199782) + * libs/pbd/pbd/atomic.h: + + apply patch from Ryan Murray + fixing atomic functions on mips/mipsel; closes: #204222 + + next go for arm and hppa. Use simple C; will close: #204096 + if confirmed + + define HAVE_SMP by default + * debian/control: + + Build-Depends: cleanup, sorting + + ardour needs gettext, which includes autopoint, which + needs cvs, which uses update-inetd, which has a problem (#183960) + on those autobuilders, that run without stdin + + -dev packages depend on libc-dev + + use libart-2.0-dev instead of libart-dev + + libraptor0-dev and libgtk-canvas1-dev are fixed + (#204539) and depend on libglib2.0-dev resp. gdk-imlib1-dev + + removed libhoard. It was of no value + + try building with libsigc++-1.2-dev + + -- Robert Jordens Wed, 6 Aug 2003 09:20:56 +0200 + +ardour (0.9beta2-7) unstable; urgency=low + + * libs/ardour/ardour/cycles.h: fix the workaround: #include , + closes: #203951 + * The workaround from 0.9beta2-6 closes: #203891 for now. Work is still + needed though. + * debian/control: Build-Depends: libglib2.0-dev + + -- Robert Jordens Sun, 3 Aug 2003 14:37:25 +0200 + +ardour (0.9beta2-6) unstable; urgency=low + + * libs/ardour/ardour/cycles.h: use debian/patches/03_cycles-h.dpatch from + jack-audio-connection-kit as a workaround to a missing cycles + implementation on other architectures + * libs/pbd/pbd/atomic.h: use the implementation from m68k for other + architectures that don't have an implementation of atomic operations + in userspace available + * debian/control: added suitable dependencies for the *-dev packages + * debian/control: removed myself from Uploaders. + + -- Robert Jordens Tue, 29 Jul 2003 20:41:53 +0200 + +ardour (0.9beta2-5) unstable; urgency=low + + * debian/control: Build-Depends: cvs, autopoint needs it, cleaned up + * debian/control: added Uploader Eric van Buggenhaut + * debian/rules, debian/control: better workaround for #203097: build is alias + for build-arch + + -- Robert Jordens Tue, 29 Jul 2003 13:55:57 +0200 + +ardour (0.9beta2-4) unstable; urgency=low + + * debian/control: libstdc++-dev is a virtual alternative to libstdc++5-dev + automake is an alternative to automake1.6 + libjack-dev is a virtual alternative to libjack0.72.2-dev + all of which are preparations for a woody backport + * optimizes for i386 only. + * patch from Takashi Iwai to fix compilation on 64bit + architecures + * debian/control: Build-Depend on the same things from Build-Depends-Indep + because otherwise the buildds don't satisfy them resp dpkg-buildpackage + doesn't comply with policy 7.3 (have to be satisfied during build) + bug#203097 has been reassigned to dpkg-dev + * debian/control: Standards-Version: 3.6.0: no changes + * debian/control: co-maintainer Guenter Geiger added + * debian/control: removed Build-Depends on libstdc++5 | libstdc++. + it's build-essential + * first try to port atomic.h to other architectures + there is no usable implementation of atomic operations in userspace + for arm and hppa + + -- Robert Jordens Sun, 20 Jul 2003 22:08:20 +0200 + +ardour (0.9beta2-3) unstable; urgency=low + + * disabled parallel building + * cured the LOCK defined in gtk--/menushell.h conflicting with the LOCK + defined in libs/pbd/pbd/atomic.h + + -- Robert Jordens Tue, 16 Jul 2003 12:17:13 +0000 + +ardour (0.9beta2-2) unstable; urgency=low + + * removed strange libjack-dev dependencies and perl (to perl-base) + * shortened extensive description + * now we have a uuencoded djcj documentation in the diff + + -- Robert Jordens Mon, 7 Jul 2003 20:15:48 +0000 + +ardour (0.9beta2-1) unstable; urgency=low + + * New upstream release + + -- Robert Jordens Tue, 1 Jul 2003 10:18:29 +0000 + +ardour (0.9beta1-1) unstable; urgency=low + + * New upstream release + * changed pixmaps location to upstream default + * moved libardour.mo to libardour0 + * sorry for the decreasing versions + + -- Robert Jordens Thu, 26 Jun 2003 18:05:15 +0200 + +ardour (1.0beta1-1) unstable; urgency=low + + * New upstream release + + -- Robert Jordens Thu, 26 Jun 2003 09:01:00 +0200 + +ardour (1.0beta1-f-1) unstable; urgency=low + + * New upstream release + + -- Robert Jordens Wed, 25 Jun 2003 07:47:05 +0200 + +ardour (1.0beta1-e-2) unstable; urgency=low + + * pixmaps fixed with link + * sysconfdir fixed + + -- Robert Jordens Mon, 23 Jun 2003 21:52:52 +0200 + +ardour (1.0beta1-e-1) unstable; urgency=low + + * New upstream release + * moved the manpage to ardour-gtk + * current Stadnards-Version + * debhelper ( >>4) + + -- Robert Jordens Thu, 19 Jun 2003 09:06:46 +0200 + +ardour (1.0beta1-d-1) unstable; urgency=low + + * New upstream release + + -- Robert Jordens Wed, 18 Jun 2003 22:30:32 +0200 + +ardour (1.0beta1-c-1) unstable; urgency=low + + * New upstream release + * put splash.ppm into the right place + + -- Robert Jordens Tue, 17 Jun 2003 18:44:42 +0200 + +ardour (1.0beta1-b-1) unstable; urgency=low + + * New upstream release + * rename the executable ardour-gtk to ardour + + -- Robert Jordens Tue, 17 Jun 2003 07:33:21 +0200 + +ardour (1.0beta1-a-1) unstable; urgency=low + + * first tarball release + * truckloads of small changes + + -- Robert Jordens Mon, 16 Jun 2003 07:56:37 +0200 + +ardour (0.0.0.20030614.1336.0.cvs) unstable; urgency=low + + * cvs up + * debian/ardour-gtk.install i18n + * cvs-snapshotting in place http://cojobo.bonn.de/~jordens/ardour-cvs + * debian/control: stricter sections + * remove *-dbg + * ardour.rc midi improved + * fixed interdeps of libraries + + -- Robert Jordens Sun, 11 May 2003 09:37:06 +0200 + +ardour (0.0.0.20030507.01) unstable; urgency=low + + * cvs up + * new jack (0.70.5) + * new pixmaps (2.6) + * moving towards g++ 3.2 + * a way to create the tarballs + + -- Robert Jordens Wed, 2 Apr 2003 22:17:45 +0200 + +ardour (0.0.0.20030217.01) unstable; urgency=low + + * cvs up + * libsoundtouch introduced + * linking against lrdf and raptor + * ksi builds again + + -- Robert Jordens Mon, 17 Feb 2003 12:52:02 +0100 + +ardour (0.0.0.20030121.01) unstable; urgency=low + + * cvs up + * new jack + + -- Robert Jordens Wed, 11 Dec 2002 11:59:10 +0100 + +ardour (0.0.0.20021206.01) unstable; urgency=low + + * cvs up + * DH_OPTIONS="-Nardour-ksi" since it doesn't build + + -- Robert Jordens Fri, 6 Dec 2002 15:48:28 +0100 + +ardour (0.0.0.20020911.01) unstable; urgency=low + + * cvs up + * ardour/pixmaps -> pixmaps/ardour + + -- Robert Jordens Wed, 11 Sep 2002 09:37:49 +0200 + +ardour (0.0.0.20020905.01) unstable; urgency=low + + * cvs up + * new format + + -- Robert Jordens Thu, 5 Sep 2002 02:01:16 +0200 + +ardour (0.0.0.20020903.01) unstable; urgency=low + + * cvs up + * Build-depends: libsndfile-dev (>= 1.0) + * Build-Conflicts: libardour0, libpbd0, libmidi++0, gtkmmext0 for obvious + reasons.. + + -- Robert Jordens Tue, 3 Sep 2002 18:25:20 +0200 + +ardour (0.0.0.20020821.01) unstable; urgency=low + + * cvs up + * lintian: spelling, -dbg menus + * libjack build-dependency + * g++-3.2 + + -- Robert Jordens Wed, 21 Aug 2002 15:46:28 +0200 + +ardour (0.0.0.20020807.01) unstable; urgency=low + + * cvs up + * --enable-static in configure + + -- Robert Jordens Wed, 7 Aug 2002 03:39:23 +0200 + +ardour (0.0.0.20020629.01) unstable; urgency=low + + * cvs up + * changed window default sizes + * really -lhoard. + * and disable it again because of hard RT lockups + + -- Robert Jordens Sat, 29 Jun 2002 16:41:52 +0200 + +ardour (0.0.0.20020628.01) unstable; urgency=low + + * cvs up + * link to ncurses, not to curses + + -- Robert Jordens Fri, 28 Jun 2002 00:04:21 +0200 + +ardour (0.0.0.20020624.01) unstable; urgency=low + + * cvs up + * had a try at DBS; didn't like it. + + -- Robert Jordens Mon, 24 Jun 2002 21:32:46 +0200 + +ardour (0.0.0.20020619.01) unstable; urgency=low + + * fooling around with ardour.rc midi + * ardour-gtk-dbg ardour-ksi-dbg bah... :-( + * cvs up + * g++-3.0 (set it in rules; you have to have _all_ C++ libs + (gtkmm, sigc++, stdc++...) compiled by 3.0 resp. 3.1) + + -- Robert Jordens Wed, 19 Jun 2002 18:50:18 +0200 + +ardour (0.0.0.20020611.01) unstable; urgency=low + + * header target fixed. $(includedir) + * cvs up + + -- Robert Jordens Tue, 11 Jun 2002 14:24:05 +0200 + +ardour (0.0.0.20020609.01) unstable; urgency=low + + * libmidi++.pc fix + * ardour-doc is only build at binary-indep + * doc-base ardour-doc + * cvs up + + -- Robert Jordens Sun, 9 Jun 2002 10:06:17 +0200 + +ardour (0.0.0.20020608.01) unstable; urgency=low + + * more descriptions + * fixed lintian problems + * pkgconfig files installed + * cvs up + + -- Robert Jordens Sat, 8 Jun 2002 21:53:01 +0200 + +ardour (0.0.0.20020607.01) unstable; urgency=low + + * CVS snapshot + * updated control + + -- Robert Jordens Fri, 7 Jun 2002 22:13:48 +0200 + +ardour (0.0.0.20020606.01) unstable; urgency=low + + * CVS snapshot build at Thu Jun 6 16:50:21 2002 + * Build-Depends: hoard, flex, ncurses + * tested build in chroot + + -- Robert Jordens Thu, 6 Jun 2002 16:50:21 +0200 + +ardour (0.0.0.20020605.01) unstable; urgency=low + + * CVS snapshot build at Wed Jun 5 17:01:42 2002 + * trying to use libgtkmm, libart, libsigc, libxml2 from debian, not from + Paul + * make libmidi++ libpbd libgtkmmext shared and split + + -- Robert Jordens Wed, 5 Jun 2002 17:01:42 +0200 + +ardour (0.0.0.20020603.01) unstable; urgency=low + + * CVS snapshot build at Mon Jun 3 22:07:58 2002 + + -- Robert Jordens Mon, 3 Jun 2002 22:07:58 +0200 + +ardour (0.0.200205151747-1) unstable; urgency=low + + * CVS snapshot + * update README.Debian + + -- Robert Jordens Wed, 15 May 2002 17:47:56 +0200 + +ardour (0.0.200205121939-1) unstable; urgency=low + + * CVS snapshot + * split into libardour, libardour-dev, ardour-gtk, ardour-ksi + + -- Robert Jordens Sun, 12 May 2002 19:39:48 +0200 + +ardour (0.0.200205031615-1) unstable; urgency=low + + * CVS snapshot + * CVS-versioning + + -- Robert Jordens Fri, 3 May 2002 16:14:19 +0200 + +ardour (0.514.4-1) unstable; urgency=low + + * Initial Release. + + -- Robert Jordens Sat, 27 Apr 2002 14:24:32 +0200 + --- ardour-2.8.2.orig/debian/ardour-altivec.install +++ ardour-2.8.2/debian/ardour-altivec.install @@ -0,0 +1,7 @@ +debian/tmp/altivec/usr/bin/ardour2 usr/bin +debian/tmp/altivec/usr/lib* usr/ +debian/tmp/altivec/usr/share/ardour2 usr/share/ +debian/tmp/altivec/usr/share/locale usr/share/ +debian/tmp/altivec/etc/ardour2* etc/ +debian/ardour.desktop usr/share/applications +debian/ardour2-session_exchange.py usr/bin --- ardour-2.8.2.orig/debian/ardour.install +++ ardour-2.8.2/debian/ardour.install @@ -0,0 +1,8 @@ +debian/tmp/generic/usr/bin/ardour2 usr/bin +debian/tmp/generic/usr/lib* usr/ +debian/tmp/generic/usr/share/ardour2 usr/share/ +debian/tmp/generic/usr/share/locale usr/share/ +debian/tmp/generic/etc/ardour2* etc/ +debian/ardour.desktop usr/share/applications +debian/ardour2-session_exchange.py usr/bin +debian/ardourino.template usr/share/ardour2/templates/ --- ardour-2.8.2.orig/debian/ardour-altivec.manpages +++ ardour-2.8.2/debian/ardour-altivec.manpages @@ -0,0 +1 @@ +DOCUMENTATION/ardour.1* --- ardour-2.8.2.orig/debian/rules +++ ardour-2.8.2/debian/rules @@ -0,0 +1,153 @@ +#!/usr/bin/make -f +# +# Robert Jordens +# +# This software may be used and distributed according to the terms +# of the GNU General Public License, incorporated herein by reference. +# +# $Id: rules 299 2004-02-29 13:23:03Z rj $ +# + + +### include the CDBS libraries ### + +#DEB_AUTO_UPDATE_DEBIAN_CONTROL := yes +include /usr/share/cdbs/1/class/langcore.mk +include /usr/share/cdbs/1/rules/buildcore.mk +DEB_UPSTREAM_VERSION := $(shell echo $(DEB_VERSION) | sed 's/-[^-]*$$//') +DEB_UPSTREAM_TARBALL_VERSION := $(shell echo $(DEB_UPSTREAM_VERSION) | sed 's/+[^+]*$$//') +include /usr/share/cdbs/1/rules/patchsys-quilt.mk +include /usr/share/cdbs/1/rules/debhelper.mk +DEB_CLEAN_EXCLUDE=debian/tmp +DEB_DESTDIR = $(CURDIR)/debian/tmp/ + +### set up the variables ### +debian/control:: +ifneq ($(DEB_AUTO_UPDATE_DEBIAN_CONTROL),) + sed -e "s/@optarch@/altivec/g" -e "s/@basearch@/powerpc/g" \ + < debian/opt-control.in >> debian/control + for i in debian/*-opt.* ; do \ + j=`echo $$i | sed -e "s/-opt/-altivec/g"` ; \ + sed -e "s/@optarch@/altivec/g" -e "s/@basearch@/powerpc/g" \ + < $$i > $$j ; \ + done + sed -e "s/@optarch@/i686/g" -e "s/@basearch@/i386/g" \ + < debian/opt-control.in >> debian/control + for i in debian/*-opt.* ; do \ + j=`echo $$i | sed -e "s/-opt/-i686/g"` ; \ + sed -e "s/@optarch@/i686/g" -e "s/@basearch@/i386/g" \ + < $$i > $$j ; \ + done +endif + + +DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH) + +ifneq (,$(findstring parallel,$(DEB_BUILD_OPTIONS))) + PARALLEL_JOBS := $(shell echo $(DEB_BUILD_OPTIONS) | \ + sed -e 's/.*parallel=\([0-9]\+\).*/\1/') + ifeq ($(DEB_BUILD_OPTIONS),$(PARALLEL_JOBS)) + PARALLEL_JOBS := $(shell if [ -f /proc/cpuinfo ]; \ + then echo `cat /proc/cpuinfo | grep 'processor' | wc -l`; \ + else echo 1; fi) + endif + NJOBS := -j$(PARALLEL_JOBS) +endif + +ALTIVEC_OPT_FLAGS := -O3 -mcpu=7400 -maltivec -mabi=altivec -mhard-float -mpowerpc-gfxopt +I686_OPT_FLAGS := -O3 -march=i686 -mmmx + +DEB_SCONS_EXTRA_FLAGS := \ + PREFIX=/usr \ + NLS=yes \ + FREEDESKTOP=no \ + $(NJOBS) \ + SYSLIBS=yes \ + VST=0 + +DEB_SCONS_NOOPT_FLAGS := DEBUG=no FPU_OPTIMIZATION=no +ifneq (,$(findstring amd64,$(DEB_BUILD_ARCH))) +DEB_SCONS_NOOPT_FLAGS := DEBUG=no FPU_OPTIMIZATION=yes +endif + +ifneq (,$(findstring i386,$(DEB_BUILD_ARCH))) +DEB_SCONS_NOOPT_FLAGS += DIST_TARGET=i386 +endif + + +DEB_DH_STRIP_ARGS := --dbg-package=ardour + + +DEB_SCONS_ENVVARS := +DEB_SCONS_INVOKE = $(DEB_SCONS_ENVVARS) scons + +# For an out-of-tree build, we just cp -al all the needed files. +# It seems these are enough +BUILD_FILES = ardour.rc.in gtk2_ardour icons libs SConstruct templates tools vst + +common-build-arch:: debian/stamp-scons-build +debian/stamp-scons-build: + mkdir -p $(DEB_DESTDIR)/generic + mkdir -p build-generic + cp -alf $(BUILD_FILES) build-generic + cd build-generic && $(DEB_SCONS_INVOKE) 'ARCH=$(CFLAGS)' \ + DESTDIR=$(DEB_DESTDIR)/generic \ + $(DEB_SCONS_EXTRA_FLAGS) $(DEB_SCONS_NOOPT_FLAGS) +ifneq (,$(findstring i386,$(DEB_BUILD_ARCH))) + mkdir -p $(DEB_DESTDIR)/i686 + mkdir -p build-i686 + cp -alf $(BUILD_FILES) build-i686 + cd build-i686 && $(DEB_SCONS_INVOKE) 'ARCH=$(I686_OPT_FLAGS)' \ + DESTDIR=$(DEB_DESTDIR)/i686 \ + DEBUG=no $(DEB_SCONS_EXTRA_FLAGS) \ + FPU_OPTIMIZATION=yes DIST_TARGET=i686 +endif +ifneq (,$(findstring powerpc,$(DEB_BUILD_ARCH))) + mkdir -p $(DEB_DESTDIR)/altivec + mkdir -p build-altivec + cp -alf $(BUILD_FILES) build-altivec + cd build-altivec && $(DEB_SCONS_INVOKE) 'ARCH=$(ALTIVEC_OPT_FLAGS)' \ + DESTDIR=$(DEB_DESTDIR)/altivec \ + DEBUG=no $(DEB_SCONS_EXTRA_FLAGS) +endif + touch $@ + +install/ardour:: + cd build-generic && $(DEB_SCONS_INVOKE) 'ARCH=$(CFLAGS)' \ + DESTDIR=$(DEB_DESTDIR)/generic \ + $(DEB_SCONS_EXTRA_FLAGS) $(DEB_SCONS_NOOPT_FLAGS) \ + install + +ifneq (,$(findstring i386,$(DEB_BUILD_ARCH))) +install/ardour-i686:: + cd build-i686 && $(DEB_SCONS_INVOKE) 'ARCH=$(I686_OPT_FLAGS)' \ + DESTDIR=$(DEB_DESTDIR)/i686 \ + DEBUG=no $(DEB_SCONS_EXTRA_FLAGS) \ + FPU_OPTIMIZATION=yes DIST_TARGET=i686 \ + install +endif + +ifneq (,$(findstring powerpc,$(DEB_BUILD_ARCH))) +install/ardour-altivec:: + cd build-altivec && $(DEB_SCONS_INVOKE) 'ARCH=$(ALTIVEC_OPT_FLAGS)' \ + DESTDIR=$(DEB_DESTDIR)/altivec \ + DEBUG=no $(DEB_SCONS_EXTRA_FLAGS) install +endif + +# this is bad but the only easy way to have ardour.rc generated from +# ardour.rc.in +common-install-indep:: debian/stamp-scons-build +common-install-arch:: debian/stamp-scons-build + +clean:: scons-clean +scons-clean:: + $(MAKE) -f debian/rules reverse-config + rm -rf build-generic build-i686 build-altivec + rm -rf $(DEB_DESTDIR) debian/stamp-scons-build + + rm -rf debian/ardour-dbg + rm -f gtk2_ardour/*.mo + +# after the directories are created but before dh_compress is run. +common-binary-post-install-arch:: + dh_buildinfo --- ardour-2.8.2.orig/debian/ardour.docs +++ ardour-2.8.2/debian/ardour.docs @@ -0,0 +1,2 @@ +debian/TODO.Debian +debian/README.Debian --- ardour-2.8.2.orig/debian/ardour-altivec.examples +++ ardour-2.8.2/debian/ardour-altivec.examples @@ -0,0 +1 @@ +build-altivec/ardour_system.rc --- ardour-2.8.2.orig/debian/ardour-altivec.desktop +++ ardour-2.8.2/debian/ardour-altivec.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Name=Ardour GTK2 [altivec] +Comment=Ardour Digital Audio Workstation (GTK2 Interface) [altivec] +Exec=/usr/bin/ardour2 +Terminal=false +Type=Application +Icon=/usr/share/ardour2/icons/ardour_icon_22px.png +Categories=AudioVideo;Audio; +MimeType=application/x-ardour; --- ardour-2.8.2.orig/debian/opt-control.in +++ ardour-2.8.2/debian/opt-control.in @@ -0,0 +1,21 @@ +Package: ardour-@optarch@ +Architecture: @basearch@ +Section: sound +Depends: ${shlibs:Depends}, ${python:Depends}, python, python-twisted, python-gtk2, jackd +Conflicts: ardour, ardour-@optarch@ +Replaces: ardour, ardour-@optarch@ +Provides: ardour +Recommends: www-browser +Suggests: jamin, qjackctl +Description: digital audio workstation (graphical gtk2 interface) [@optarch@] + Ardour is a multichannel hard disk recorder (HDR) and digital audio + workstation (DAW). It can be used to control, record, edit and run + and complex audio setups. For more information see the description + of the ardour package or . + . + This package is optimized for @optarch@ and will not run on + subarchitectures that don't support features enabled in @optarch@. + It might fail with weird error SIGILLs and other non-obvious failures. + Please refrain from filling bugs to the upstream author about this package + that are not reproducible in the non-optimized package. + --- ardour-2.8.2.orig/debian/control.in +++ ardour-2.8.2/debian/control.in @@ -0,0 +1,70 @@ +Source: ardour +Section: sound +Priority: optional +Maintainer: Ubuntu MOTU Developers +XSBC-Original-Maintainer: Debian Multimedia Team +Uploaders: Guenter Geiger (Debian/GNU) , Robert Jordens , Free Ekanayaka +Build-Depends: cdbs (>= 0.4.23-1.1), build-essential, autotools-dev, quilt, patchutils (>= 0.2.25), cdbs (>= 0.4.27-1), debhelper (>= 4.1.0), scons, dh-buildinfo, libsigc++-2.0-dev, libxml2-dev (>= 2.5.7), libasound2-dev (>= 0.9.4), libsndfile1-dev, libsamplerate0-dev, liblrdf0-dev (>= 0.3.1-4), ladspa-sdk (>= 1.1-2), libjack0.100.0-dev, libgtkmm-2.4-dev, libglade2-dev, libpango1.0-dev, libgnomecanvasmm-2.6-dev, libgnomecanvas2-dev, libglib2.0-dev, libglademm-2.4-dev, gettext, intltool, libboost-dev, libsoundtouch1-dev, liblo0-dev, libusb-dev +Standards-Version: 3.7.2 + +Package: ardour +Architecture: any +Section: sound +Depends: ${shlibs:Depends}, ${python:Depends}, python, python-twisted, python-gtk2, jackd +Conflicts: ardour-gtk (>= 1:0.99.3+2.0beta12-1) +Recommends: www-browser +Suggests: jamin, qjackctl +Description: digital audio workstation (graphical gtk2 interface) + Ardour is a multichannel hard disk recorder (HDR) and digital audio + workstation (DAW). It can be used to control, record, edit and run and + complex audio setups. + . + Ardour supports pro-audio interfaces + through the ALSA project, which provides high quality, well design + device drivers and API's for audio I/O under Linux. Any interface + supported by ALSA can be used with Ardour. This includes the + all-digital 26 channel RME Hammerfall, the Midiman Delta 1010 and many + others. + . + Ardour has support for 24 bit samples + using floating point internally, non-linear editing with unlimited undo, + a user-configurable mixer, MTC master/slave capabilities, MIDI hardware + control surface compatibility. + . + It supports MIDI + Machine Control, and so can be controlled from any MMC controller and + many modern digital mixers. + . + Ardour contains a + powerful multitrack audio editor/arranger that is completely + non-destructive and capable of all standard non-linear editing + operations (insert, replace, delete, move, trim, select, + cut/copy/paste). The editor has unlimited undo/redo capacity and can + save independent "versions" of a track or entire piece. + . + Ardour's editor supports the community-developed LADSPA + plugin standard. Arbitrary chains of plugins can be attached to any + portion of a track. Every mixer strip can have any number of inputs + and outputs, not just mono, stereo or 5.1. An N-way panner is + included, with support for various panning models. Pre- and post-fader + sends exist, each with their own gain and pan controls. Every mixer + strip acts as its own bus, and thus the bus count in Ardour is + unlimited. You can submix any number of strips into another + strip. + . + Ardour's channel capacity is limited only + by the number on your audio interface and the ability of your disk + subsystem to stream the data back and forth. + . + JACK + (the JACK Audio Connection Kit) is used for all audio I/O, permitting + data to be exchanged in perfect samplesync with other applications + and/or hardware audio interfaces. + . + Ardour is + sample rate and size neutral - any hardware formats from 8 to 32 bits, + rates from 8kHz to 192kHz. Internal processing in 32/64 bit IEEE + floating point format. + . + Further information can be + found at . --- ardour-2.8.2.orig/debian/NEWS +++ ardour-2.8.2/debian/NEWS @@ -0,0 +1,32 @@ +ardour (0.9beta10.2-1) unstable; urgency=low + + * This release disables optimization for i386 because otherwise the + binaries fail on k6 and such. Read + and + . + If you want to build an optimized version, read, edit and uncomment + the part in debian/rules and rebuild. + + -- Robert Jordens Tue Feb 24 22:59:33 CET 2004 + + +ardour (0.9beta9+3-2) unstable; urgency=low + + * The Manual (formerly contained in the package ardour-doc) has been + removed. It contained the skeleton an a few bits of information that were + already quite outdated. + . + The Ardour developers (mainly Paul Davis) have decided develop an + extensive manual that will be sold and will not be freely distributable. + The discussion about this can be found in the Ardour mailing lists (such + as ). + . + A scrambled version (making reproduction and/or use harder) may be + available from the project's homepage . + The homepage also conatins information about the version of the manual + that will be sold. + . + This scrambled manual contains much more information than the version + formerly contained in ardour-doc. + + -- Robert Jordens Wed Jan 28 22:31:13 CET 2004 --- ardour-2.8.2.orig/debian/ardour-altivec.menu +++ ardour-2.8.2/debian/ardour-altivec.menu @@ -0,0 +1,4 @@ +?package(ardour-altivec):needs="X11" section="Applications/Sound" \ + hints="Professional,Featureful,WAV,GTK,MIDI,Music Editor,DAW,Multitrack,JACK,LADSPA" \ + title="Ardour GTK2 [altivec]" command="/usr/bin/ardour2" + --- ardour-2.8.2.orig/debian/ardour.desktop +++ ardour-2.8.2/debian/ardour.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Name=Ardour GTK2 +Comment=Ardour Digital Audio Workstation (GTK2 Interface) +Exec=/usr/bin/ardour2 +Terminal=false +Type=Application +Icon=/usr/share/ardour2/icons/ardour_icon_22px.png +Categories=AudioVideo;Audio; +MimeType=application/x-ardour; --- ardour-2.8.2.orig/debian/ardour-opt.manpages +++ ardour-2.8.2/debian/ardour-opt.manpages @@ -0,0 +1 @@ +DOCUMENTATION/ardour.1* --- ardour-2.8.2.orig/debian/watch +++ ardour-2.8.2/debian/watch @@ -0,0 +1,4 @@ +version=3 +# Homepage Pattern [Version [Action]] +http://www.ardour.org/source_downloads http://releases.ardour.org/ardour-(2.[\d\.]+)\.tar\.bz2 + --- ardour-2.8.2.orig/debian/ardour-opt.menu +++ ardour-2.8.2/debian/ardour-opt.menu @@ -0,0 +1,4 @@ +?package(ardour-@optarch@):needs="X11" section="Applications/Sound" \ + hints="Professional,Featureful,WAV,GTK,MIDI,Music Editor,DAW,Multitrack,JACK,LADSPA" \ + title="Ardour GTK2 [@optarch@]" command="/usr/bin/ardour2" + --- ardour-2.8.2.orig/debian/ardourino.template +++ ardour-2.8.2/debian/ardourino.template @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + --- ardour-2.8.2.orig/debian/ardour-i686.docs +++ ardour-2.8.2/debian/ardour-i686.docs @@ -0,0 +1,2 @@ +debian/TODO.Debian +debian/README.Debian --- ardour-2.8.2.orig/debian/ardour-i686.manpages +++ ardour-2.8.2/debian/ardour-i686.manpages @@ -0,0 +1 @@ +DOCUMENTATION/ardour.1* --- ardour-2.8.2.orig/debian/ardour-opt.docs +++ ardour-2.8.2/debian/ardour-opt.docs @@ -0,0 +1,2 @@ +debian/TODO.Debian +debian/README.Debian --- ardour-2.8.2.orig/debian/ardour-i686.examples +++ ardour-2.8.2/debian/ardour-i686.examples @@ -0,0 +1 @@ +build-i686/ardour_system.rc --- ardour-2.8.2.orig/debian/control +++ ardour-2.8.2/debian/control @@ -0,0 +1,117 @@ +Source: ardour +Section: sound +Priority: optional +Maintainer: Ubuntu MOTU Developers +XSBC-Original-Maintainer: Debian Multimedia Team +Uploaders: Guenter Geiger (Debian/GNU) , Robert Jordens , Free Ekanayaka +Build-Depends: autotools-dev, quilt, patchutils (>= 0.2.25), cdbs (>= 0.4.27-1), debhelper (>= 4.1.0), scons, dh-buildinfo, libsigc++-2.0-dev, libxml2-dev (>= 2.5.7), libasound2-dev (>= 0.9.4), libsndfile1-dev, libsamplerate0-dev, liblrdf0-dev (>= 0.3.1-4), ladspa-sdk (>= 1.1-2), libjack-dev, libgtkmm-2.4-dev, libglade2-dev, libpango1.0-dev, libgnomecanvasmm-2.6-dev, libgnomecanvas2-dev, libglib2.0-dev, libglademm-2.4-dev, gettext, intltool, libboost-dev, libsoundtouch1-dev, liblo0-dev, libcairomm-1.0-dev (>= 1.2.4), libfftw3-dev, libaubio-dev, vamp-plugin-sdk, libusb-dev +Standards-Version: 3.7.2 +Homepage: http://www.ardour.org/ +Vcs-Git: git://git.debian.org/git/pkg-multimedia/ardour.git +Vcs-Browser: http://git.debian.org/?p=pkg-multimedia/ardour.git;a=summary + +Package: ardour +Architecture: any +Section: sound +Depends: ${shlibs:Depends}, ${python:Depends}, python, python-twisted, python-gtk2, jackd (>= 0.103.0) +Conflicts: ardour-gtk +Replaces: ardour-gtk +Recommends: www-browser | firefox +Suggests: jamin, qjackctl +Description: digital audio workstation (graphical gtk2 interface) + Ardour is a multichannel hard disk recorder (HDR) and digital audio + workstation (DAW). It can be used to control, record, edit and run and + complex audio setups. + . + Ardour supports pro-audio interfaces + through the ALSA project, which provides high quality, well designed + device drivers and API's for audio I/O under Linux. Any interface + supported by ALSA can be used with Ardour. This includes the + all-digital 26 channel RME Hammerfall, the Midiman Delta 1010 and many + others. + . + Ardour has support for 24 bit samples + using floating point internally, non-linear editing with unlimited undo, + a user-configurable mixer, MTC master/slave capabilities, MIDI hardware + control surface compatibility. + . + It supports MIDI + Machine Control, and so can be controlled from any MMC controller and + many modern digital mixers. + . + Ardour contains a + powerful multitrack audio editor/arranger that is completely + non-destructive and capable of all standard non-linear editing + operations (insert, replace, delete, move, trim, select, + cut/copy/paste). The editor has unlimited undo/redo capabilites and can + save independent "versions" of a track or an entire piece + . + Ardour's editor supports the community-developed LADSPA + plugin standard. Arbitrary chains of plugins can be attached to any + portion of a track. Every mixer strip can have any number of inputs + and outputs, not just mono, stereo or 5.1. An N-way panner is + included, with support for various panning models. Pre- and post-fader + sends exist, each with their own gain and pan controls. Every mixer + strip acts as its own bus, and thus the bus count in Ardour is + unlimited. You can submix any number of strips into another + strip. + . + Ardour's channel capacity is limited only + by the number on your audio interface and the ability of your disk + subsystem to stream the data back and forth. + . + JACK + (the JACK Audio Connection Kit) is used for all audio I/O, permitting + data to be exchanged in perfect samplesync with other applications + and/or hardware audio interfaces. + . + Ardour is + sample rate and size neutral - any hardware formats from 8 to 32 bits, + and rates from 8kHz to 192kHz. Internal processing in 32/64 bit IEEE + floating point format. + . + Further information can be + found at . + +Package: ardour-altivec +Architecture: powerpc +Section: sound +Depends: ${shlibs:Depends}, ${python:Depends}, python, python-twisted, python-gtk2, jackd +Conflicts: ardour, ardour-gtk-altivec +Replaces: ardour, ardour-gtk-altivec +Provides: ardour +Recommends: www-browser +Suggests: jamin, qjackctl +Description: digital audio workstation (graphical gtk2 interface) [altivec] + Ardour is a multichannel hard disk recorder (HDR) and digital audio + workstation (DAW). It can be used to control, record, edit and run + and complex audio setups. For more information see the description + of the ardour package or . + . + This package is optimized for altivec and will not run on + subarchitectures that don't support features enabled in altivec. + It might fail with weird error SIGILLs and other non-obvious failures. + Please refrain from filling bugs to the upstream author about this package + that are not reproducible in the non-optimized package. + +Package: ardour-i686 +Architecture: i386 +Section: sound +Depends: ${shlibs:Depends}, ${python:Depends}, python, python-twisted, python-gtk2, jackd +Conflicts: ardour, ardour-gtk-i686 +Replaces: ardour, ardour-gtk-i686 +Provides: ardour +Recommends: www-browser +Suggests: jamin, qjackctl +Description: digital audio workstation (graphical gtk2 interface) [i686] + Ardour is a multichannel hard disk recorder (HDR) and digital audio + workstation (DAW). It can be used to control, record, edit and run + and complex audio setups. For more information see the description + of the ardour package or . + . + This package is optimized for i686 and will not run on + subarchitectures that don't support features enabled in i686. + It might fail with weird error SIGILLs and other non-obvious failures. + Please refrain from filling bugs to the upstream author about this package + that are not reproducible in the non-optimized package. + --- ardour-2.8.2.orig/debian/ardour-i686.install +++ ardour-2.8.2/debian/ardour-i686.install @@ -0,0 +1,7 @@ +debian/tmp/i686/usr/bin/ardour2 usr/bin +debian/tmp/i686/usr/lib* usr/ +debian/tmp/i686/usr/share/ardour2 usr/share/ +debian/tmp/i686/usr/share/locale usr/share/ +debian/tmp/i686/etc/ardour2* etc/ +debian/ardour.desktop usr/share/applications +debian/ardour2-session_exchange.py usr/bin --- ardour-2.8.2.orig/debian/ardour-i686.menu +++ ardour-2.8.2/debian/ardour-i686.menu @@ -0,0 +1,4 @@ +?package(ardour-i686):needs="X11" section="Applications/Sound" \ + hints="Professional,Featureful,WAV,GTK,MIDI,Music Editor,DAW,Multitrack,JACK,LADSPA" \ + title="Ardour GTK2 [i686]" command="/usr/bin/ardour2" + --- ardour-2.8.2.orig/debian/TODO.Debian +++ ardour-2.8.2/debian/TODO.Debian @@ -0,0 +1,13 @@ +TODO + +Robert Jordens + +This software may be used and distributed according to the terms +of the GNU General Public License, incorporated herein by reference. + + - you can't build it with a previous (older) version installed + Build-Conflicts (still true?) + - libs/ardour/cycles.h, libs/pbd/pbd/atomic.h: look for better + implementations (cycles: arm, m68k, sparc; atomic: arm, hppa, sparc) + JACK has a nicer sysdeps-like solution + --- ardour-2.8.2.orig/debian/ardour-i686.desktop +++ ardour-2.8.2/debian/ardour-i686.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Name=Ardour GTK2 [i686] +Comment=Ardour Digital Audio Workstation (GTK2 Interface) [i686] +Exec=/usr/bin/ardour2 +Terminal=false +Type=Application +Icon=/usr/share/ardour2/icons/ardour_icon_22px.png +Categories=AudioVideo;Audio; +MimeType=application/x-ardour; --- ardour-2.8.2.orig/debian/compat +++ ardour-2.8.2/debian/compat @@ -0,0 +1 @@ +4 --- ardour-2.8.2.orig/debian/README.Debian +++ ardour-2.8.2/debian/README.Debian @@ -0,0 +1,81 @@ +ardour for Debian +----------------- + +* The session_exchange.py script has been renamed to + ardour2-session_exchange.py, so that there is no file conflict between + ardour v2 and the original ardour package. + + -- Luke Yelavich Thu, 5 Apr 2007 12:35:37 +1000 + + +* These Debian packages for ardour modify its build system slightly to + comply with Debian packaging policy. Please mention problems that + seem to be caused by C++ dynamic linkage flags, libraries or compiler + versions in bugreports to the Debian bugtracking system: + + http://www.debian.org/Bugs/Reporting + http://bugs.debian.org/src:ardour + + You can help debugging and fixing ardour in such cases by compiling + it unoptimized and unstripped. That's done with + $ sudo apt-get --target-release unstable build-dep ardour + $ export DEB_BUILD_OPTIONS="noopt nostrip" + $ apt-get --target-release unstable --compile source ardour + Install the resulting packages. + /usr/share/doc/ardour/FAQ.gz (section 1.8) contains information + about debugging ardour with gdb. 1.8.A doesn't apply to Debian. Use + $ gdb /usr/bin/ardour2 + gdb> run + ...crash it or make it get stuck... + gdb> thread apply all bt + Send the + + output of gdb and ardour together with with + + /usr/share/doc/ardour/buildinfo.gz and detailed + information about + + your hardware (graphics, sound, processor, harddisk) and + + your kernel (version, patches, lowlatency) + to the Debian Bug Tracking System or ardour-dev@ardour.org. + Thanks. + +* You have to configure and start JACK before starting ardour. + Setting up a working JACK is not always easy. Please try these before + filing bugs about ardour being to slow or being kicked by JACK. + Messages like: "JACK has been shut down or it disconnected + ardour..." or "subgraph starting at ardour timed out..." are a sure + sign of the former. + + + set up a working .asoundrc (see Jack Documentation) + + that implies: don't use the default "plug"-layer of JACK-alsa + + try with a large period-size (--period 4096) + + maybe try --nperiods 4 (or 2) + + maybe try/leave away --asio + + try --realtime-priority if you running as root or with + capabilities + + see http://jackit.sourceforge.net/docs/faq.php about improving + your setup + + Otherwise your system might really be too slow. Sorry. Try it on a + faster one. + +* You have to run jackd and ardour as the same user. To get away + from having to run everything (JACK and ardour) as root use + jackstart and modify your kernel a little thus allowing programs to + give away certain "capabilities": + http://jackit.sourceforge.net/docs/faq.php#a5 + + +Further information and documentation: + +http://ardour.org/ +http://jackit.sourceforge.net/ + +User mailinglist archives: +http://boudicca.tux.org/hypermail/ardour-users/ + +Developers mailinglist archives: +http://boudicca.tux.org/hypermail/ardour-dev/ + +JACK developers mailinglist archives: +http://boudicca.tux.org/hypermail/jackit-devel/ + + -- Robert Jordens , $LastChangedDate: 2004-03-06 00:49:17 +0100 (Sat, 06 Mar 2004) $ --- ardour-2.8.2.orig/debian/ardour-altivec.docs +++ ardour-2.8.2/debian/ardour-altivec.docs @@ -0,0 +1,2 @@ +debian/TODO.Debian +debian/README.Debian --- ardour-2.8.2.orig/debian/ardour-opt.examples +++ ardour-2.8.2/debian/ardour-opt.examples @@ -0,0 +1 @@ +ardour_system.rc --- ardour-2.8.2.orig/debian/ardour2-session_exchange.py +++ ardour-2.8.2/debian/ardour2-session_exchange.py @@ -0,0 +1,834 @@ +#! /usr/bin/python + +# Session Exchange +# By Taybin Rutkin +# Copyright 2004, under the GPL + +VERSION='0.1.1' + +#twisted libraries +from twisted.internet import gtk2reactor +gtk2reactor.install() +from twisted.internet import reactor, protocol +import twisted.internet.error + +#pygtk libraries +import gobject +import gtk + +#standard python2.2 libraries +import getopt +import os +import os.path +import re +import shelve +import string +import sys +import xml.dom.pulldom + +def get_header_size(filename): + size = 0 + file = open(filename, 'r') + while True: + chunk = file.read(4) + size += 4 + if chunk == "data": + file.close() + return size + 4 #include the size chunk after "data" + if not chunk: + file.close() + return None + +def append_empty_data(self, filename, size): + file = open(filename, 'a') + file.seek(size-1) + file.write('\x00') + file.close() + +def get_sound_list(snapshot): + doc = xml.dom.pulldom.parse(snapshot) + seen = {} + soundlist = [] + for event, node in doc: + if event=='START_ELEMENT' and node.nodeName=='Source': + soundlist.append(str(node.getAttribute('name'))) + return soundlist + +def raise_error(string, parent): + dialog = gtk.MessageDialog(parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, string) + + dialog.run() + dialog.destroy() + +class Data(object): + def delete_snap(self, session, collab, snap): + sessions = self._data['sessions'] + sessions[session]['collabs'][collab]['snaps'].remove(snap) + self._data['sessions'] = sessions + + def delete_collab(self,session, collab): + sessions = self._data['sessions'] + del sessions[session]['collabs'][collab] + self._data['sessions'] = sessions + + def delete_session(self, session): + sessions = self._data['sessions'] + del sessions[session] + self._data['sessions'] = sessions + + def add_snap(self, session_name, collab_name, snap_name): + sessions = self._data['sessions'] + sessions[session_name]['collabs'][collab_name]['snaps'].append(snap_name) + sessions[session_name]['collabs'][collab_name]['snaps'].sort() + self._data['sessions'] = sessions + + g_display.update_snap_view() + + def add_collab(self, session_name, collab_name, ip_address, port): + sessions = self._data['sessions'] + sessions[session_name]['collabs'][collab_name] = {} + sessions[session_name]['collabs'][collab_name]['snaps'] = [] + sessions[session_name]['collabs'][collab_name]['sounds'] = [] + sessions[session_name]['collabs'][collab_name]['ip'] = ip_address + sessions[session_name]['collabs'][collab_name]['port'] = port + self._data['sessions'] = sessions + + client = ExchangeClientFactory(session_name, collab_name, None, self.debug_mode) + reactor.connectTCP(ip_address, port, client) + g_display.show_status("connecting") + + g_display.update_collab_view() + + def add_session(self, session_path): + sessions = self._data['sessions'] + + session_name = session_path[session_path.rfind('/', 0, len(session_path)-2)+1: -1] + sessions[session_name] = {} + sessions[session_name]['path'] = session_path + sessions[session_name]['collabs'] = {} + sessions[session_name]['collabs'][self._data['user']] = {} + sessions[session_name]['collabs'][self._data['user']]['snaps'] = [] + sessions[session_name]['collabs'][self._data['user']]['sounds'] = [] + + self._data['sessions'] = sessions + + self.rescan_session(session_name) + + def rescan_session(self, session_name): + sessions = self._data['sessions'] + + session_path = sessions[session_name]['path'] + sessions[session_name]['collabs'][self._data['user']]['snaps'] = self._scan_snapshots(session_path) + sessions[session_name]['collabs'][self._data['user']]['sounds'] = self._scan_sounds(session_path) + + self._data['sessions'] = sessions + + g_display.update_snap_view() + + print self._data['sessions'] + + def create_session(self, session_path): + try: + os.mkdir(session_path) + os.mkdir(session_path+"/sounds") + except OSError: + raise_error("Could not create session directory", g_display.window) + return + + sessions = self._data['sessions'] + + session_name = session_path[session_path.rfind('/', 0, len(session_path)-2)+1: ] + sessions[session_name] = {} + sessions[session_name]['path'] = session_path + sessions[session_name]['collabs'] = {} + sessions[session_name]['collabs'][self._data['user']] = {} + sessions[session_name]['collabs'][self._data['user']]['snaps'] = [] + sessions[session_name]['collabs'][self._data['user']]['sounds'] = [] + + self._data['sessions'] = sessions + print self._data['sessions'] + + def get_session_path(self, session): + sessions = self._data['sessions'] + return sessions[session]['path'] + + def get_user(self): + return self._data['user'] + + def set_user(self, username): + self._data['user'] = username + + def get_collab_ip(self, session, collab): + sessions = self._data['sessions'] + return sessions[session]['collabs'][collab]['ip'] + + def close(self): + self._data.close() + + def get_sessions(self): + sessions = self._data['sessions'] + sess = sessions.keys() + sess.sort() + return sess + + def get_collabs(self, session): + if session: + sessions = self._data['sessions'] + collabs = sessions[session]['collabs'].keys() + collabs.sort() + return collabs + else: + return [] + + def get_snaps(self, session, collab): + if session and collab: + sessions = self._data['sessions'] + snaps = sessions[session]['collabs'][collab]['snaps'] + snaps.sort() + return snaps + else: + return [] + + def get_sounds(self, session, collab): + if session and collab: + sessions = self._data['sessions'] + sounds = sessions[session]['collabs'][self._data['user']]['sounds'] + sounds.sort() + return sounds + else: + return [] + + def _scan_snapshots(self, session): + snaps = [] + files = os.listdir(session) + pattern = re.compile(r'\.ardour$') + for file in files: + if pattern.search(file): + snaps.append(file[0:-7]) + print file[0:-7] + return snaps + + def _scan_sounds(self, session): + sounds = [] + files = os.listdir(session+'/sounds') + pattern = re.compile(r'\.peak$') + for file in files: + if not pattern.search(file): + sounds.append(file) + return sounds + + def __init__(self, *args): + self._data = shelve.open(os.path.expanduser('~/.session_exchange'), 'c') + self.port = 8970 + self.debug_mode = False + if len(self._data.keys()) < 1: + self._data['sessions'] = {} + self._data['user'] = '' + + self._collabs = {} + +from twisted.protocols.basic import FileSender +class FileSenderLimited(FileSender): + def beginFileTransfer(self, file, consumer, limit, transform = None): + self.file = file + self.consumer = consumer + self.CHUNK_SIZE = limit + self.transform = transform + + self.consumer.registerProducer(self, False) + self.deferred = defer.Deferred() + return self.deferred + + def resumeProducing(self): + chunk = '' + chunk = self.file.read(self.CHUNK_SIZE) + + if self.transform: + chunk = self.transform(chunk) + + self.consumer.write(chunk) + self.lastSent = chunk[-1] + self.file = None + self.consumer.unregisterProducer() + self.deferred.callback(self.lastSent) + self.deferred = None + +from twisted.protocols.basic import LineReceiver +class ExchangeServer (LineReceiver): + def __init__(self): + self.state = "IDLE" + + def error(self, message): + self.sendLine("ERROR") + self.sendLine(message) + self.transport.loseConnection() + + def connectionLost(self, reason): + print "server: connection lost: ", reason + + def connectionMade(self): + print "server: connection made" + + def lineReceived(self, data): + print "server: ", data + + if self.state == "SESSION": + if g_data.get_sessions().count(data): + self.session_name = data + self.state = "IDLE" + self.sendLine("OK") + else: + self.error(data + " doesn't exist on server") + elif self.state == "SNAPSHOT": + if g_data.get_snaps(self.session_name, g_data.get_user()).count(data): + filename = g_data.get_session_path(self.session_name)+data+'.ardour' + print filename + self.sendLine(str(os.stat(filename).st_size)) + self.sendLine("OK") + self.file = open(filename, 'r') + file_sender = FileSender() + cb = file_sender.beginFileTransfer(self.file, self.transport) + cb.addCallback(self.file_done) + else: + self.error("snapshot: " + data + " doesn't exist on server") + elif self.state == "SOUNDFILE" or self.state == "SOUNDFILE_HEADER": + if g_data.get_sounds(self.session_name, g_data.get_user()).count(data): + filename = g_data.get_session_path(self.session_name)+"/sounds/"+data + print filename + if self.state == "SOUNDFILE": + self.sendLine(str(os.stat(filename).st_size)) + else: #SOUNDFILE_HEADER + header_size = get_header_size(filename) + if header_size: + self.sendLine(str(header_size)) + else: + self.error('soundfile: ' + data + 'doesn\'t have "data" chunk') + self.sendLine("OK") + self.file = open(filename, 'r') + if self.state == "SOUNDFILE": + file_sender = FileSender() + cb = file_sender.beginFileTransfer(self.file, self.transport) + else: # SOUNDFILE_HEADER + file_sender = FileSenderLimited() + cb = file_sender.beginFileTransfer(self.file, self.transport, header_size) + cb.addCallback(self.file_done) + else: + self.error("soundfile: " + data + "doesn't exist on server") + elif self.state == "SOUNDFILE_SIZE": + if g_data.get_sounds(self.session_name, g_data.get_user()).count(data): + filename = g_data.get_session_path(self.session_name)+"/sounds/"+data + print filename + self.sendLine(str(os.stat(filename).st_size)) + self.state = "IDLE" + elif data == "SESSION": + self.state = "SESSION" + elif data == "SNAPS": + self.state = "SNAPS" + for snap in g_data.get_snaps(self.session_name, g_data.get_user()): + self.sendLine(snap) + self.sendLine("OK") + self.state = "IDLE" + elif data == "SNAPSHOT": + self.state = "SNAPSHOT" + elif data == "SOUNDFILE": + self.state = "SOUNDFILE" + elif data == "SOUNDFILE_HEADER": + self.state = "SOUNDFILE_HEADER" + elif data == "SOUNDFILE_SIZE": + self.state = "SOUNDFILE_SIZE" + + def file_done(self, data): + print "server: file done" + self.file.close() + self.state = "IDLE" + +class ExchangeServerFactory(protocol.ServerFactory): + protocol = ExchangeServer + + def __init__(self): + pass + +class ExchangeClient (LineReceiver): + def __init__(self, session_name, collab_name, snap_name, debug_mode): + self.session_name = session_name + self.collab_name = collab_name + self.snap_name = snap_name + self.debug_mode = debug_mode + self.state = "IDLE" + + def connectionLost(self, reason): + g_display.show_status("Connection lost") + + def connectionMade(self): + g_display.show_status("Connection made") + self.state = "SESSION" + self.sendLine("SESSION") + self.sendLine(self.session_name) + + def rawDataReceived(self, data): + self.file.write(data) + self.received += len(data) + print self.received, self.filesize + if self.received >= self.filesize: + self.setLineMode() + self.file.close() + g_data.rescan_session(self.session_name) + if self.state == "SNAPSHOT": + self.sounds = get_sound_list(self.filename) + if len(self.sounds): + self.sound_index = 0 + if self.debug_mode: + self.state = "SOUNDFILE_HEADER" + self.sendLine("SOUNDFILE_HEADER") + else: + self.state = "SOUNDFILE" + self.sendLine("SOUNDFILE") + self.sendLine(self.sounds[self.sound_index]) + else: + self.transport.loseConnection() + elif self.state == "SOUNDFILE": + self.sound_index += 1 + if self.sound_index > len(self.sounds)-1: + self.transport.loseConnection() + else: + self.sendLine("SOUNDFILE") + self.sendLine(self.sounds[self.sound_index]) + elif self.state == "SOUNDFILE_HEADER": + self.state = "SOUNDFILE_SIZE" + self.sendLine("SOUNDFILE_SIZE") + self.sendLine(self.sounds[self.sound_index]) + + def lineReceived(self, data): + print "client: ", data + + if data == "ERROR": + self.state = "ERROR" + elif data == "OK": + if self.state == "SESSION": + if self.snap_name: + self.state = "SNAPSHOT" + self.sendLine("SNAPSHOT") + self.sendLine(self.snap_name) + else: + self.state = "SNAPS" + self.sendLine("SNAPS") + elif self.state == "SNAPS": + self.transport.loseConnection() + elif self.state == "SNAPSHOT": + self.setRawMode() + self.filename = g_data.get_session_path(self.session_name)+'/'+self.snap_name+'.ardour' + self.file = open(self.filename, 'w') + self.received = 0 + elif self.state == "SOUNDFILE" or self.state == "SOUNDFILE_HEADER": + self.setRawMode() + self.filename = g_data.get_session_path(self.session_name)+'/sounds/'+self.sounds[self.sound_index] + self.file = open(self.filename, 'w') + self.received = 0 + elif self.state == "ERROR": + raise_error(data, g_display.window) + elif self.state == "SNAPS": + g_data.add_snap(self.session_name, self.collab_name, data) + elif self.state == "SNAPSHOT": + self.filesize = int(data) + elif self.state == "SOUNDFILE": + self.filesize = int(data) + elif self.state == "SOUNDFILE_HEADER": + self.filesize = int(data) + elif self.state == "SOUNDFILE_SIZE": + append_empty_data(self.filename, int(data)) + self.sound_index += 1 + if self.sound_index > len(self.sounds)-1: + self.transport.loseConnection() + else: + self.state = "SOUNDFILE_HEADER" + self.sendLine("SOUNDFILE_HEADER") + self.sendLine(self.sounds[self.sound_index]) + +class ExchangeClientFactory(protocol.ClientFactory): + def buildProtocol(self, addr): + return ExchangeClient(self.session_name, self.collab_name, self.snap_name, self.debug_mode) + + def clientConnectionFailed(self, connector, reason): + raise_error('Connection failed: ' + reason.getErrorMessage(), g_display.window) + g_display.show_status('Connection failed') + + def __init__(self, session_name, collab_name, snap_name, debug_mode): + self.session_name = session_name + self.collab_name = collab_name + self.snap_name = snap_name + self.debug_mode = debug_mode + +class HelperWin(object): + def delete_me(self, window): + self = 0 + +class Preferences(HelperWin): + def __init__(self): + self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.window.set_title('Preferences') + self.window.connect('destroy', self.delete_me) + + main_box = gtk.VBox() + self.window.add(main_box) + + hbox1 = gtk.HBox() + label1 = gtk.Label("User") + self.user = gtk.Entry() + self.user.set_text(g_data.get_user()) + hbox1.pack_start(label1) + hbox1.pack_start(self.user) + main_box.pack_start(hbox1) + + ok_btn = gtk.Button("Ok") + ok_btn.connect('clicked', self.ok_clicked) + main_box.pack_start(ok_btn) + + self.window.show_all() + + def ok_clicked(self, btn): + g_data.set_user(self.user.get_text()) + self.window.hide_all() + + def show_all(self): + self.window.show_all() + +class AddCollaborator(HelperWin): + def __init__(self, session): + self.session_name = session + + self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.window.set_title('Fetch Session') + self.window.connect('destroy', self.delete_me) + + main_box = gtk.VBox() + self.window.add(main_box) + + hbox0 = gtk.HBox() + label0 = gtk.Label("Collaborator") + self.collab = gtk.Entry() + self.collab.connect('key-release-event', self.key_press) + hbox0.pack_start(label0) + hbox0.pack_start(self.collab) + main_box.pack_start(hbox0) + + hbox1 = gtk.HBox() + label1 = gtk.Label("IP Address") + self.address = gtk.Entry() + self.address.connect('key-release-event', self.key_press) + hbox1.pack_start(label1) + hbox1.pack_start(self.address) + main_box.pack_start(hbox1) + + hbox2 = gtk.HBox() + label2 = gtk.Label("Port Number") + self.port = gtk.Entry() + self.port.connect('key-release-event', self.key_press) + self.port.set_text(str(g_data.port)) + hbox2.pack_start(label2) + hbox2.pack_start(self.port) + main_box.pack_start(hbox2) + + hbox3 = gtk.HBox() + label3 = gtk.Label("Username") + label3.set_sensitive(False) + self.username = gtk.Entry() + self.username.set_sensitive(False) + hbox3.pack_start(label3) + hbox3.pack_start(self.username) + main_box.pack_start(hbox3) + + hbox4 = gtk.HBox() + label4 = gtk.Label("Password") + label4.set_sensitive(False) + self.password = gtk.Entry() + self.password.set_sensitive(False) + hbox4.pack_start(label4) + hbox4.pack_start(self.password) + main_box.pack_start(hbox4) + + self.ok_btn = gtk.Button(gtk.STOCK_OK) + self.ok_btn.set_use_stock(True) + self.ok_btn.connect('clicked', self.ok_clicked) + self.ok_btn.set_sensitive(False) + main_box.pack_start(self.ok_btn) + + self.window.show_all() + + def key_press(self, event, data): + if self.collab.get_text() and self.address.get_text() and self.port.get_text(): + self.ok_btn.set_sensitive(True) + else: + self.ok_btn.set_sensitive(False) + return True + + def ok_clicked(self, btn): + self.window.hide_all() + g_data.add_collab(self.session_name, self.collab.get_text(), self.address.get_text(), int(self.port.get_text())) + self.collab.set_text('') + self.address.set_text('') + self.port.set_text('') + self.username.set_text('') + self.password.set_text('') + + def show_all(self): + self.window.show_all() + +class ArdourShareWindow(object): + def menuitem_cb(self, window, action, widget): + print self, window, action, widget + + def add_collaborator_cb(self, window, action, widget): + if self.session: + self.add_session = AddCollaborator(self.session) + + def fetch_snapshot_cb(self, window, action, widget): + if self.session and self.collab and self.collab != g_data.get_user(): + client = ExchangeClientFactory(self.session, self.collab, self.snap, g_data.debug_mode) + reactor.connectTCP(g_data.get_collab_ip(self.session, self.collab), g_data.port, client) + + def preferences_cb(self, window, action, widget): + self.preferences = Preferences() + + def add_session_ok_file_btn_clicked(self, w): + filename = self.file_sel.get_filename() + if filename.endswith(".ardour"): + g_data.add_session(filename[0:filename.rfind("/")+1]) + self.update_session_view() + else: + raise_error("Not an Ardour session", self.window) + self.file_sel.destroy() + + def add_session_cb(self, window, action, widget): + if g_data.get_user(): + self.file_sel = gtk.FileSelection("Add Session...") + self.file_sel.ok_button.connect("clicked", self.add_session_ok_file_btn_clicked) + self.file_sel.cancel_button.connect("clicked", lambda w: self.file_sel.destroy()) + self.file_sel.connect("destroy", lambda w: self.file_sel.destroy()) + self.file_sel.show() + else: + raise_error("Set the user name in the preferences first", self.window) + + def create_session_cb(self, window, action, widget): + if g_data.get_user(): + self.file_sel = gtk.FileSelection("Create Session...") + self.file_sel.ok_button.connect("clicked", self.create_file_ok_btn_clicked) + self.file_sel.cancel_button.connect("clicked", lambda w: self.file_sel.destroy()) + self.file_sel.connect("destroy", lambda w: self.file_sel.destroy()) + self.file_sel.show() + else: + raise_error("Set the user name in the preferences first", self.window) + + def create_file_ok_btn_clicked(self, w): + filename = self.file_sel.get_filename() + if len(filename) > 0: + g_data.create_session(filename) + self.update_session_view() + else: + raise_error("Not an Ardour session", self.window) + self.file_sel.destroy() + + def update_session_view(self): + self.session_model.clear() + for session in g_data.get_sessions(): + self.session_model.set(self.session_model.append(), 0, session) + + def update_collab_view(self): + self.collab_model.clear() + for collab in g_data.get_collabs(self.session): + self.collab_model.set(self.collab_model.append(), 0, collab) + + def update_snap_view(self): + self.snap_model.clear() + for snap in g_data.get_snaps(self.session, self.collab): + self.snap_model.set(self.snap_model.append(), 0, snap) + + def cb_session_selection_changed(self, selection_object): + selected = [] + selection_object.selected_foreach(lambda model, path, iter, sel = selected: sel.append(path)) + for x in selected: + self.session = self.session_model[x][0] + self.selected_type = "session" + self.update_collab_view() + + def cb_collab_selection_changed(self, selection_object): + selected = [] + selection_object.selected_foreach(lambda model, path, iter, sel = selected: sel.append(path)) + for x in selected: + self.collab = self.collab_model[x][0] + self.selected_type = "collab" + self.update_snap_view() + + def cb_snap_selection_changed(self, selection_object): + selected = [] + selection_object.selected_foreach(lambda model, path, iter, sel = selected: sel.append(path)) + for x in selected: + self.snap = self.snap_model[x][0] + self.selected_type = "snap" + + def delete_cb(self, window, action, widget): + if self.selected_type == "session": + g_data.delete_session(self.session) + self.session = "" + self.collab = "" + self.snap = "" + elif self.selected_type == "collab": + g_data.delete_collab(self.session, self.collab) + self.collab = "" + self.snap = "" + elif self.selected_type == "snap": + g_data.delete_snap(self.session, self.collab, self.snap) + self.snap = "" + + self.update_session_view() + self.update_collab_view() + self.update_snap_view() + self.selected_type = "" + + def show_status(self, text): + mid = self.status_bar.push(self._status_cid, text) + if self._status_mid: + self.status_bar.remove(self._status_cid, self._status_mid) + self._status_mid = mid + + def __init__(self): + self.selected_type = "" + self.session = "" + self.collab = g_data.get_user() + self.snap = "" + + self.preferences = 0 + self.add_collab = 0 + self.add_session = 0 + + self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.window.set_title('Session Exchange') + self.window.set_size_request(400, 200) + self.window.connect('destroy', lambda win: gtk.main_quit()) + + accel_group = gtk.AccelGroup() + self.window.add_accel_group(accel_group) + + main_box = gtk.VBox() + self.window.add(main_box) + + menu_items = ( + ('/_File', None, None, 0, ''), + ('/File/_Add Session...','A', self.add_session_cb, 0, ''), + ('/File/Create _Session...', 'S', self.create_session_cb, 0, ''), + ('/File/sep1', None, None, 0, ''), + ('/File/_Quit', 'Q', gtk.main_quit, 0, '', gtk.STOCK_QUIT), + ('/_Edit', None, None, 0, '' ), + ('/Edit/Cu_t', 'X', self.menuitem_cb, 0, '', gtk.STOCK_CUT), + ('/Edit/_Copy', 'C', self.menuitem_cb, 0, '', gtk.STOCK_COPY), + ('/Edit/_Paste', 'V', self.menuitem_cb, 0, '', gtk.STOCK_PASTE), + ('/Edit/_Delete', None, self.delete_cb, 0, '', gtk.STOCK_DELETE), + ('/Edit/sep1', None, None, 0, ''), + ('/Edit/Add Colla_borator...','B', self.add_collaborator_cb,0,''), + ('/Edit/_Fetch Snapshot','F', self.fetch_snapshot_cb,0,''), + ('/Edit/sep1', None, None, 0, ''), + ('/Edit/_Preferences...','P', self.preferences_cb, 0, '') + ) + + #need to hold a reference to the item_factory or the menubar will disappear. + self.item_factory = gtk.ItemFactory(gtk.MenuBar, '
', accel_group) + self.item_factory.create_items(menu_items, self.window) + main_box.pack_start(self.item_factory.get_widget('
'), gtk.FALSE) + + pane1 = gtk.HPaned() + pane2 = gtk.HPaned() + pane1.pack2(pane2, gtk.TRUE, gtk.FALSE) + + scroll1 = gtk.ScrolledWindow() + scroll1.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + pane1.pack1(scroll1, gtk.TRUE, gtk.FALSE) + scroll2 = gtk.ScrolledWindow() + scroll2.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + pane2.pack1(scroll2, gtk.TRUE, gtk.FALSE) + scroll3 = gtk.ScrolledWindow() + scroll3.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + pane2.pack2(scroll3, gtk.TRUE, gtk.FALSE) + + self.session_model = gtk.ListStore(gobject.TYPE_STRING) + view1 = gtk.TreeView(self.session_model) + column1 = gtk.TreeViewColumn('Sessions', gtk.CellRendererText(), text=0) + view1.append_column(column1) + self.session_selection = view1.get_selection() + self.session_selection.connect("changed", self.cb_session_selection_changed) + scroll1.add(view1) + + self.update_session_view() + + self.collab_model = gtk.ListStore(gobject.TYPE_STRING) + view2 = gtk.TreeView(self.collab_model) + column2 = gtk.TreeViewColumn('Collaborators', gtk.CellRendererText(), text=0) + view2.append_column(column2) + self.collab_selection = view2.get_selection() + self.collab_selection.connect("changed", self.cb_collab_selection_changed) + scroll2.add(view2) + + self.snap_model = gtk.ListStore(gobject.TYPE_STRING) + view3 = gtk.TreeView(self.snap_model) + column3 = gtk.TreeViewColumn('Snapshots', gtk.CellRendererText(), text=0) + view3.append_column(column3) + self.snap_selection = view3.get_selection() + self.snap_selection.connect("changed", self.cb_snap_selection_changed) + scroll3.add(view3) + + main_box.pack_start(pane1, gtk.TRUE, gtk.TRUE) + + self.status_bar = gtk.Statusbar() + main_box.pack_start(self.status_bar, gtk.FALSE) + self._status_cid = self.status_bar.get_context_id('display') + self._status_mid = '' + + self.window.show_all() + +def print_help(): + print """ + -h, --help + -n, --no-server Only act as a client + -p, --port Defaults to 8970 + -d, --debug Infers audio files. For debugging Ardour. + -v, --version Version + """ + sys.exit(2) + +def main(): + try: + opts, args = getopt.getopt(sys.argv[1:], "hp:ndv", ["help", "port=", "no-server", "debug", "version"]) + except getopt.GetoptError: + print_help() + + server = True + for o, a in opts: + if o in ("-h", "--help"): + print_help() + if o in ("-d", "--debug"): + g_display.window.set_title('Session Exchange: Debug Mode') + g_data.debug_mode = True + if o in ("-p", "--port"): + g_data.port = int(a) + if o in ("-n", "--no-server"): + server = False + if o in ("-v", "--version"): + print VERSION + sys.exit(2) + + if (server): + try: + reactor.listenTCP(g_data.port, ExchangeServerFactory()) + except twisted.internet.error.CannotListenError: + print "Can not listen on a port number under 1024 unless run as root" + sys.exit(2) + + reactor.run() + + g_data.close() + +# global objects +g_data = Data() +g_display = ArdourShareWindow() + +if __name__ == '__main__': + main() --- ardour-2.8.2.orig/debian/ardour-opt.desktop +++ ardour-2.8.2/debian/ardour-opt.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Name=Ardour GTK2 [@optarch@] +Comment=Ardour Digital Audio Workstation (GTK2 Interface) [@optarch@] +Exec=/usr/bin/ardour2 +Terminal=false +Type=Application +Icon=/usr/share/ardour2/icons/ardour_icon_22px.png +Categories=AudioVideo;Audio; +MimeType=application/x-ardour; --- ardour-2.8.2.orig/debian/copyright +++ ardour-2.8.2/debian/copyright @@ -0,0 +1,141 @@ +This package was debianized by Robert Jordens on +Sat, 27 Apr 2002 14:24:32 +0200. + +The package is currently collaboratively maintained by the Debian +Multimedia Team + +It was downloaded from: http://ardour.org/releases/ + +Upstream Authors: Paul Davis et al. (see /usr/share/doc/ardour/AUTHORS +for a full list) + +Copyright: 2000-2007 Paul Davis + +The File gtk2_ardour/rgb_macros.h was written by Jon Trowbridge + and Havoc Pennington , and is Copyright +(C) 2000 EMC Capital Management, Inc. + +The Files gtk2_ardour/canvas-imageframe.h and gtk2_ardour/canvas-imageframe.c +were written by Federico Mena and are Copyright (C) +1998, The Free Software Foundation. + +The ardour source code and the above mentioned files are licensed +under the GNU GPL: + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your +option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUTANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +On Debian systems, the complete text of the GNU General Public License +can be found in /usr/share/common-licenses/GPL file. + +Furthermore some of the Files in gtk2_ardour/, and namely +simpleline.cc, simpleline.h, simplerect.c, simplerect.h, waveview.cc, +waveview.h, imageframe.cc, imageframe.h were written by Havoc +Pennington , and are Copyright (C) 1998 EMC Capital +Management Inc. + +Some of the Files in gtk2_ardour/, and namely canvas-curve.h, +canvas-ruler.h, canvas-simpleline.h, canvas-simplerect.h, +canvas-waveview.h, gettext.h, gtk-custom-hruler.c, +gtk-custom-hruler.h, gtk-custom-ruler.c, gtk-custom-ruler.h, , are +Copyright (C) 2001 Paul Davis + +The File libs/ardour/ardour/ladspa.h is Copyright (C) 2000-2002 +Richard W.E. Furse, Paul Barton-Davis, Stefan Westerfeld + +The File libs/ardour/gettext.h is Copyright (C) 1995-1998, 2000-2002 +Free Software Foundation, Inc. + +The File libs/ardour/ardour/spline.h is Copyright (C) 1997 David +Mosberger + +The Files under libs/clearlooks are Copyright (C) 2005 Richard +Stellingwerff + +The Files under libs/glibmm2 and libs/gtkmm2 are Copyright (C) 2002 +of The gtkmm Development Team + +The Files under libs/libgnomecanvasmm are Copyright (C) 2002 The +libgnomecanvasmm Development Team + +The Files under libs/libsndfile are Copyright 1999-2005 Erik de Castro +Lopo . + +The Files under libs/midi++2 are Copyright (C) 1998 Paul Barton-Davis + +The Files under libs/sigc++2 are Copyright 2002, The libsigc++ +Development Team + +The Files under libs/soundtouch are Copyright (c) Olli Parviainen + +The Files under libs/surfaces are Copyright (C) 1998-2006 Paul Davis + +All these files are license under the GNU LGPL: + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU Lesser General Public +License, can be found in /usr/share/common-licenses/LGPL. + +The Files under libs/appleutility are Copyright 2005 Apple Computer, +Inc. All rights reserved. + + IMPORTANT: This Apple software is supplied to you by Apple Computer, + Inc. + + ("Apple") in consideration of your agreement to the following terms, and your + use, installation, modification or redistribution of this Apple software + constitutes acceptance of these terms. If you do not agree with these terms, + please do not use, install, modify or redistribute this Apple software. + + In consideration of your agreement to abide by the following terms, and subject + to these terms, Apple grants you a personal, non-exclusive license, under Apple's + copyrights in this original Apple software (the "Apple Software"), to use, + reproduce, modify and redistribute the Apple Software, with or without + modifications, in source and/or binary forms; provided that if you redistribute + the Apple Software in its entirety and without modifications, you must retain + this notice and the following text and disclaimers in all such redistributions of + the Apple Software. Neither the name, trademarks, service marks or logos of + Apple Computer, Inc. may be used to endorse or promote products derived from the + Apple Software without specific prior written permission from Apple. Except as + expressly stated in this notice, no other rights or licenses, express or implied, + are granted by Apple herein, including but not limited to any patent rights that + may be infringed by your derivative works or by other works in which the Apple + Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO + WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED + WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN + COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION + OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT + (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- ardour-2.8.2.orig/debian/patches/100_syslibs.patch +++ ardour-2.8.2/debian/patches/100_syslibs.patch @@ -0,0 +1,78 @@ +diff -urN ardour-2.8.2/SConstruct ardour-2.8.2.new/SConstruct +--- ardour-2.8.2/SConstruct 2009-07-21 01:55:10.000000000 +1000 ++++ ardour-2.8.2.new/SConstruct 2009-08-13 09:49:56.000000000 +1000 +@@ -501,6 +501,15 @@ + else: + env['AUBIO'] = 0 + ++libraries['sndfile-ardour'] = LibraryInfo() ++libraries['sndfile-ardour'].ParseConfig('pkg-config --cflags --libs sndfile') ++ ++libraries['vamp'] = LibraryInfo () ++libraries['vamp'].ParseConfig('pkg-config --cflags --libs vamp-sdk') ++ ++libraries['vamphost'] = LibraryInfo () ++libraries['vamphost'].ParseConfig('pkg-config --cflags --libs vamp-hostsdk') ++ + env = conf.Finish () + + if env['FFT_ANALYSIS']: +@@ -855,13 +864,6 @@ + # these are part of the Ardour source tree because they are C++ + # + +-libraries['vamp'] = LibraryInfo (LIBS='vampsdk', +- LIBPATH='#libs/vamp-sdk', +- CPPPATH='#libs/vamp-sdk') +-libraries['vamphost'] = LibraryInfo (LIBS='vamphostsdk', +- LIBPATH='#libs/vamp-sdk', +- CPPPATH='#libs/vamp-sdk') +- + env['RUBBERBAND'] = False + + conf = Configure (env) +@@ -1082,10 +1084,6 @@ + # cannot use system one for the time being + # + +- libraries['sndfile-ardour'] = LibraryInfo(LIBS='libsndfile-ardour', +- LIBPATH='#libs/libsndfile', +- CPPPATH=['#libs/libsndfile/src']) +- + # libraries['libglademm'] = LibraryInfo() + # libraries['libglademm'].ParseConfig ('pkg-config --cflags --libs libglademm-2.4') + +@@ -1105,11 +1103,9 @@ + ] + + subdirs = [ +- 'libs/libsndfile', + 'libs/pbd', + 'libs/midi++2', + 'libs/ardour', +- 'libs/vamp-sdk', + 'libs/vamp-plugins/', + # these are unconditionally included but have + # tests internally to avoid compilation etc +@@ -1158,9 +1154,6 @@ + libraries['soundtouch'] = LibraryInfo(LIBS='soundtouch', + LIBPATH='#libs/soundtouch', + CPPPATH=['#libs', '#libs/soundtouch']) +- libraries['sndfile-ardour'] = LibraryInfo(LIBS='libsndfile-ardour', +- LIBPATH='#libs/libsndfile', +- CPPPATH=['#libs/libsndfile', '#libs/libsndfile/src']) + # libraries['libglademm'] = LibraryInfo(LIBS='libglademm', + # LIBPATH='#libs/libglademm', + # CPPPATH='#libs/libglademm') +@@ -1175,11 +1168,9 @@ + + subdirs = [ + 'libs/sigc++2', +- 'libs/libsndfile', + 'libs/pbd', + 'libs/midi++2', + 'libs/ardour', +- 'libs/vamp-sdk', + 'libs/vamp-plugins/', + # these are unconditionally included but have + # tests internally to avoid compilation etc --- ardour-2.8.2.orig/debian/patches/110_vamp.patch +++ ardour-2.8.2/debian/patches/110_vamp.patch @@ -0,0 +1,11 @@ +diff --git a/libs/ardour/audioanalyser.cc b/libs/ardour/audioanalyser.cc +index 3123147..ab3691d 100644 +--- a/libs/ardour/audioanalyser.cc ++++ b/libs/ardour/audioanalyser.cc +@@ -1,5 +1,5 @@ + #include +-#include ++#include + #include + #include + #include // for g_remove() --- ardour-2.8.2.orig/debian/patches/series +++ ardour-2.8.2/debian/patches/series @@ -0,0 +1,5 @@ +60-libdir.patch +80_ardourino.patch +90_ardour-x-change.patch +100_syslibs.patch +110_vamp.patch --- ardour-2.8.2.orig/debian/patches/CVE-2007-4974.patch +++ ardour-2.8.2/debian/patches/CVE-2007-4974.patch @@ -0,0 +1,39 @@ +diff -Nurad ardour-2.1~/libs/libsndfile/src/flac.c ardour-2.1/libs/libsndfile/src/flac.c +--- ardour-2.1~/libs/libsndfile/src/flac.c 2007-12-04 17:21:35.000000000 +0100 ++++ ardour-2.1/libs/libsndfile/src/flac.c 2007-12-04 17:25:32.000000000 +0100 +@@ -50,7 +50,7 @@ + ** Private static functions. + */ + +-#define ENC_BUFFER_SIZE 4096 ++#define ENC_BUFFER_SIZE 8192 + + typedef enum + { PFLAC_PCM_SHORT = 0, +@@ -172,6 +172,17 @@ + const FLAC__int32* const *buffer = pflac->wbuffer ; + unsigned i = 0, j, offset ; + ++ /* ++ ** frame->header.blocksize is variable and we're using a constant blocksize ++ ** of FLAC__MAX_BLOCK_SIZE. ++ ** Check our assumptions here. ++ */ ++ if (frame->header.blocksize > FLAC__MAX_BLOCK_SIZE) ++ { psf_log_printf (psf, "Ooops : frame->header.blocksize (%d) > FLAC__MAX_BLOCK_SIZE (%d)\n", __func__, __LINE__, frame->header.blocksize, FLAC__MAX_BLOCK_SIZE) ; ++ psf->error = SFE_INTERNAL ; ++ return 0 ; ++ } ++ + if (pflac->ptr == NULL) + { /* + ** Not sure why this code is here and not elsewhere. +@@ -180,7 +191,7 @@ + pflac->bufferbackup = SF_TRUE ; + for (i = 0 ; i < frame->header.channels ; i++) + { if (pflac->rbuffer [i] == NULL) +- pflac->rbuffer [i] = calloc (frame->header.blocksize, sizeof (FLAC__int32)) ; ++ pflac->rbuffer [i] = calloc (FLAC__MAX_BLOCK_SIZE, sizeof (FLAC__int32)) ; + memcpy (pflac->rbuffer [i], buffer [i], frame->header.blocksize * sizeof (FLAC__int32)) ; + } ; + pflac->wbuffer = (const FLAC__int32* const*) pflac->rbuffer ; --- ardour-2.8.2.orig/debian/patches/90_ardour-x-change.patch +++ ardour-2.8.2/debian/patches/90_ardour-x-change.patch @@ -0,0 +1,1979 @@ +diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript +index 2e7beab..4a12488 100644 +--- a/gtk2_ardour/SConscript ++++ b/gtk2_ardour/SConscript +@@ -179,6 +179,7 @@ imageframe_time_axis.cc + imageframe_time_axis_group.cc + imageframe_time_axis_view.cc + imageframe_view.cc ++import_helper_aaf.cc + io_selector.cc + keyboard.cc + keyeditor.cc +diff --git a/gtk2_ardour/import_helper_aaf.cc b/gtk2_ardour/import_helper_aaf.cc +new file mode 100644 +index 0000000..cb6b644 +--- /dev/null ++++ b/gtk2_ardour/import_helper_aaf.cc +@@ -0,0 +1,1389 @@ ++/* ++ Copyright (C) 2005 Paul Davis ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++*/ ++ ++#include "i18n.h" ++#include "ardour_ui.h" ++#include "import_helper_aaf.h" ++#include ++#include ++#include ++#include ++ ++#if defined (PORT_SYS_WINDOWS) && !defined(PORT_SYS_CYGWIN) ++#include ++#else ++#include ++#endif ++ ++#include ++#include ++#include ++ ++using namespace ARDOUR; ++ ++bool AafImportHelper::already_instantiated = 0; ++ ++AafImportHelper::AafImportHelper (bool use_native_importer /*= false */) ++{ ++ // We don't want multiple instances all trying ++ // to import an AAF file simultaneously. ++ if (already_instantiated) ++ throw failed_constructor(); ++ else ++ already_instantiated = true; ++ ++ if (use_native_importer) ++ { ++ // If the importer is native, ++ // we can't be using Wine. ++ importer_uses_wine = false; ++ importer_is_native = true; ++ } ++ else ++ { ++ // Set both variables to 'true'. Since 'is_native' ++ // and 'uses_wine' are mutually exclusive, setting ++ // them both to 'true' is used to indicate that we ++ // haven't yet initialized the AAF import helper. ++ // 'initialize_for_aaf_import()' will set them ++ // appropriately when it gets called, later. ++ importer_uses_wine = true; ++ importer_is_native = true; ++ } ++ ++ string spath; ++ string shome = Glib::get_home_dir(); ++ ++ /* * * * * * * * * * * * * * * * * * * * * * * * * * * */ ++ /* */ ++ /* If you write an (external) plugin for importing AAF */ ++ /* files add its path to the list of possible importer */ ++ /* locations. New apps should be nearer to the top of */ ++ /* the list. Each application can have more than one */ ++ /* possible location path. The least likely locations */ ++ /* should be nearer to the top of the list and moos */ ++ /* likely locations should be nearer the bottom. The */ ++ /* list should be terminated by an empty string. */ ++ /* */ ++ /* * * * * * * * * * * * * * * * * * * * * * * * * * * */ ++ // Push any paths that are likely to contain an importer ++ spath = shome + "/.cxoffice/default/drive_c/Program Files/ArdourXchange/ArdourXchange.exe"; ++ _aryPossibleImporterLocations.push_back(new string(spath)); ++ spath = shome + "/.wine/drive_c/Program Files/ArdourXchange/ArdourXchange.exe"; ++ _aryPossibleImporterLocations.push_back(new string(spath)); ++ spath = "/usr/lib/ardour-x-change/ArdourXchange.exe"; ++ _aryPossibleImporterLocations.push_back(new string(spath)); ++ spath = ""; // Terminate with an empty string ++ _aryPossibleImporterLocations.push_back(new string(spath)); ++ ++ // Push any paths that are likely to contain the Wine executable ++ spath = "/opt/cxoffice/bin/wine"; ++ _aryPossibleWineLocations.push_back(new string(spath)); ++ spath = "/usr/local/bin/wine"; ++ _aryPossibleWineLocations.push_back(new string(spath)); ++ spath = "/usr/bin/wine"; ++ _aryPossibleWineLocations.push_back(new string(spath)); ++ spath = ""; // Terminate with an empty string ++ _aryPossibleWineLocations.push_back(new string(spath)); ++} ++ ++AafImportHelper::~AafImportHelper () ++{ ++vector::iterator iter; ++ ++ if (_aryPossibleImporterLocations.size()) ++ for (iter=_aryPossibleImporterLocations.begin(); iter < _aryPossibleImporterLocations.end(); iter++) ++ if (*iter) ++ delete *iter; ++ ++ if (_aryPossibleWineLocations.size()) ++ for (iter=_aryPossibleWineLocations.begin(); iter < _aryPossibleWineLocations.end(); iter++) ++ if (*iter) ++ delete *iter; ++ ++ already_instantiated = false; ++} ++ ++ ++//*************************************************************** ++// ++// is_native() ++// ++// Finds out whether a native (i.e. internal) AAF importer is in ++// use or whether we're using an external plugin. Will initialize ++// this helper if initialization isn't already completed. ++// ++// Returns: ++// ++// If the importer is internal: TRUE ++// If the importer is external: FALSE ++// ++bool ++AafImportHelper::is_native (bool bSilent /*= false */) ++{ ++ if (!is_initialized()) ++ get_user_path("AAF Importer", bSilent); // Carries out initialization ++ ++ return (importer_is_native); ++} ++ ++ ++//*************************************************************** ++// ++// needs_wine() ++// ++// Finds out whether the AAF importer is an external application ++// that needs Wine (or cxMac) to be present. Will initialize ++// this helper if initialization isn't already completed. ++// ++// Returns: ++// ++// If the importer needs Wine: TRUE ++// Otherwise: FALSE ++// ++bool ++AafImportHelper::needs_wine (bool bSilent /*= false */) ++{ ++ if (!is_initialized()) ++ get_user_path("AAF Importer", bSilent); // Carries out initialization ++ ++ return (importer_uses_wine); ++} ++ ++ ++//*************************************************************** ++// ++// create_symlink() ++// ++// ArdourXchange needs 3 x symbolic links to be in place at run ++// time. This master function calls the appropriate helper func ++// to create a link if it didn't exist when ArdourXchange gets ++// run for the first time. The helper functions can be called ++// explicitly if necessary (e.g. to change a given link and ++// replace its target). Call this function if you prefer the ++// helper functions to choose automatically from an appropriate ++// set of default options. Currently supported entries are:- ++// ++// 'Wine' - creates a link to wine (or cxMac etc). ++// 'Session Base' - creates the 'base' folder for storing Ardour ++// sessions. ++// 'AAF Importer' - finds the AAF importer app and vreates a ++// links to it. ++// ++// See the c'tor for AafImportHelper for a list of appropriate ++// default path settings. ++// ++// Returns: ++// ++// The value returned from the called helper function or ++// AXERR_NOT_IMPLEMENTED if there's no matching helper func. ++// ++ax_error ++AafImportHelper::create_symlink (const string& srequested_link, bool bReplaceExisting /*= false */, bool bSilent /*= false */) ++{ ++ax_error axRet = AXERR_NONE; ++ ++ if ("Wine" == srequested_link) ++ axRet = create_link_to_wine(bReplaceExisting, bSilent); ++ else if ("Session Base" == srequested_link) ++ axRet = create_link_to_sessions(bReplaceExisting, bSilent); ++ else if ("AAF Importer" == srequested_link) ++ axRet = create_link_to_importer(bReplaceExisting, bSilent); ++ else ++ { ++ axRet = AXERR_NOT_IMPLEMENTED; ++ ++ if (!bSilent) ++ error << _("AafImportHelper::create_symlink(): unsupported option") << endmsg; ++ } ++ ++ return (axRet); ++} ++ ++ ++//*************************************************************** ++// ++// create_link_to_importer() ++// ++// The AAF importer needs 3 x symbolic links to be in place at ++// run time, one of which is a link to the AAF Import application ++// itself. This function can be used to create a link to that ++// application if the application exists but the link doesn't. ++// When creating a link you can choose whether to overwrite (i.e. ++// update) a previously existing link. You can also supply an ++// explicit path for the import application in 'spath_to_importer'. ++// If 'spath_to_importer' is empty, this function will try to ++// find an import application based on an array of likely paths ++// that were set up in this object's c'tor. ++// ++// ++// Returns: ++// ++// If the link was successfully created ++// (or if a suitable link already existed): AXERR_NONE ++// On Failure: An appropriate ax_error ++// ++ax_error ++AafImportHelper::create_link_to_importer (bool bReplaceExisting /*= false */, bool bSilent /*= false */, const string& spath_to_importer /*= "" */) ++{ ++string spath_to_use = spath_to_importer; ++ax_error axRet = AXERR_NONE; ++ ++ if ((0 == spath_to_use.length()) && (_aryPossibleImporterLocations.size())) ++ { ++ vector::iterator iter; ++ ++ // If we weren't given a specific ++ // path, try to find an importer ++ for (iter=_aryPossibleImporterLocations.begin(); iter < _aryPossibleImporterLocations.end(); iter++) ++ { ++ if (*iter) ++ { ++ spath_to_use = ((string*)*iter)->c_str(); ++ ++ if (spath_to_use.length()) ++ if (Glib::file_test(spath_to_use, Glib::FILE_TEST_EXISTS)) ++ break; ++ } ++ } ++ } ++ ++ if (0 == spath_to_use.length()) ++ { ++ axRet = AXERR_PROCESS_NOT_FOUND; ++ ++ if (!bSilent) ++ warning << _("AAF Importer could not be found") << endmsg; ++ } ++ else ++ { ++ string spath_to_symbolic_link = get_user_ardour_path(); ++ spath_to_symbolic_link += "AAF Importer"; ++ ++ // Test to see if the symbolic link already exists ++ bool bFound = Glib::file_test(spath_to_symbolic_link.c_str(), Glib::FILE_TEST_EXISTS); ++ ++ if ((!bFound) || (bReplaceExisting)) ++ { ++ // If the symbolic link already exists but we've ++ // been told to replace it, delete the existing link. ++ if (bFound) ++ if (0 != remove(spath_to_symbolic_link.c_str())) ++ { ++ axRet = AXERR_INVALID_ACCESS; ++ ++ if (!bSilent) ++ error << _("Deletion error while making a symbolic link") << endmsg; ++ } ++ ++ if (AXERR_NONE == axRet) ++ { ++ // symlink() will fail if the symbolic link's path doesn't already exist. ++ if ((axRet = create_path_folders(get_user_ardour_path().c_str())) == AXERR_NONE) ++ { ++ if (0 != symlink(spath_to_use.c_str(), spath_to_symbolic_link.c_str())) ++ { ++ axRet = AXERR_INVALID_ACCESS; ++ ++ if (!bSilent) ++ error << _("Creation error while making a symbolic link") << endmsg; ++ } ++ } ++ else if (!bSilent) ++ error << _("Access error while making a symbolic link") << endmsg; ++ } ++ } ++ else if ((bFound) && (!bReplaceExisting)) ++ { ++ int len; ++ ++ // See if the link already points to the reqested destination ++ if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) > 0) ++ { ++ // Add a NUL terminator ++ temp_path[len] = 0; ++ ++ if (spath_to_use == temp_path); ++ // Do nothing here. Assume that it's okay to have a ++ // pre-existing link if we were told not to replace. ++ else ++ { ++ axRet = AXERR_DESTINATION_ERROR; ++ ++ if (!bSilent) ++ error << _("Cannot create symbolic link (an incompatible link already exists)") << endmsg; ++ ++ } ++ } ++ } ++ } ++ ++ return (axRet); ++} ++ ++ ++//*************************************************************** ++// ++// create_link_to_sessions() ++// ++// The AAF importer needs 3 x symbolic links to be in place at ++// run time, one of which is a link to the 'base' folder that ++// will be used for storing the user's Ardour sessions. This ++// function can be used to create that folder (and create a ++// suitable link to it) if the folder or link don't already ++// exist. When creating the link you can choose whether to ++// update (i.e. overwrite) a previously existing link. You can ++// supply an explicit path for the folder in 'spath_to_sessions'. ++// If 'spath_to_sessions' is empty, this function will try to ++// create a default folder called "Ardour Sessions" inside the ++// user's home folder. ++// ++// ++// Returns: ++// ++// If the link was successfully created ++// (or if a suitable link already existed): AXERR_NONE ++// On Failure: An appropriate ax_error ++// ++ax_error ++AafImportHelper::create_link_to_sessions (bool bReplaceExisting /*= false */, bool bSilent /*= false */, const string& spath_to_sessions /*= "" */) ++{ ++string spath_to_use = spath_to_sessions; ++string shome = Glib::get_home_dir(); ++ax_error axRet = AXERR_NONE; ++ ++ if (0 == spath_to_use.length()) ++ spath_to_use = shome + "/Ardour Sessions"; ++ else ++ { ++ // Symbolic links don't like terminating forward slashes ++ size_t ilen = spath_to_use.length(); ++ ++ while ((ilen) && ('/' == spath_to_use[ilen-1])) ++ { ++ spath_to_use[--ilen] = 0; ++ } ++ } ++ ++ if (0 == spath_to_use.length()) ++ { ++ axRet = AXERR_DESTINATION_ERROR; ++ ++#if !defined(DEBUG) && !defined(_DEBUG) ++ if (!bSilent) ++#endif ++ error << _("(AafImportHelper) Invalid target supplied for Session Base folder") << endmsg; ++ } ++ else ++ { ++ string spath_to_symbolic_link = get_user_ardour_path(); ++ spath_to_symbolic_link += "Ardour Sessions"; ++ ++ // Test to see if the symbolic link already exists ++ bool bFound = Glib::file_test(spath_to_symbolic_link.c_str(), Glib::FILE_TEST_EXISTS); ++ ++ if ((!bFound) || (bReplaceExisting)) ++ { ++ // Firstly, check to see if the destination target ++ // already exists. If it does, it MUST be a folder. ++ if (Glib::file_test(spath_to_use.c_str(), Glib::FILE_TEST_EXISTS)) ++ { ++ if (!Glib::file_test(spath_to_use.c_str(), Glib::FILE_TEST_IS_DIR)) ++ { ++ axRet = AXERR_DESTINATION_ERROR; ++ ++#if !defined(DEBUG) && !defined(_DEBUG) ++ if (!bSilent) ++#endif ++ error << _("(AafImportHelper) Invalid target supplied for Session Base folder") << endmsg; ++ } ++ } ++ else ++ { ++ if ((axRet = create_path_folders(spath_to_use.c_str())) != AXERR_NONE) ++#if !defined(DEBUG) && !defined(_DEBUG) ++ if (!bSilent) ++#endif ++ error << _("Access error while creating the Session Base folder") << endmsg; ++ } ++ ++ // The target now exists and is guaranteed to be a folder. Now, if the symbolic ++ // link already exists but we've been told to replace it, delete the existing link. ++ if ((bFound) && (AXERR_NONE == axRet)) ++ if (0 != remove(spath_to_symbolic_link.c_str())) ++ { ++ axRet = AXERR_INVALID_ACCESS; ++ ++ if (!bSilent) ++ error << _("Deletion error while making a symbolic link") << endmsg; ++ } ++ ++ if (AXERR_NONE == axRet) ++ { ++ // symlink() will fail if the symbolic link's path doesn't already exist. ++ if ((axRet = create_path_folders(get_user_ardour_path().c_str())) == AXERR_NONE) ++ { ++ if (0 != symlink(spath_to_use.c_str(), spath_to_symbolic_link.c_str())) ++ { ++ axRet = AXERR_INVALID_ACCESS; ++ ++ if (!bSilent) ++ error << _("Creation error while making a symbolic link") << endmsg; ++ } ++ } ++ else if (!bSilent) ++ error << _("Access error while making a symbolic link") << endmsg; ++ } ++ } ++ else if ((bFound) && (!bReplaceExisting)) ++ { ++ int len; ++ ++ // See if the link already points to the reqested destination ++ if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) > 0) ++ { ++ // Add a NUL terminator ++ temp_path[len] = 0; ++ ++ if (spath_to_use == temp_path); ++ // Do nothing here. Assume that it's okay to have a ++ // pre-existing link if we were told not to replace. ++ else ++ { ++ axRet = AXERR_DESTINATION_ERROR; ++ ++ if (!bSilent) ++ error << _("Cannot create symbolic link (an incompatible link already exists)") << endmsg; ++ ++ } ++ } ++ } ++ } ++ ++ return (axRet); ++} ++ ++ ++//*************************************************************** ++// ++// create_link_to_wine() ++// ++// The AAF importer needs 3 x symbolic links to be in place at ++// run time, one of which is a link to the Wine utility (or cxMac ++// or cxLinux utility). This function can be used to create a link ++// to that utility if the utility exists but the link doesn't. ++// When creating a link you can choose whether to overwrite (i.e. ++// update) a previously existing link. You can also supply an ++// explicit path for the utility you wish to use in 'spath_to_wine'. ++// If 'spath_to_wine' is empty, this function will try to find a ++// suitable utility based on an array of likely paths that were set ++// up in this object's c'tor. ++// ++// ++// Returns: ++// ++// If the link was successfully created ++// (or if a suitable link already existed): AXERR_NONE ++// On Failure: An appropriate ax_error ++// ++ax_error ++AafImportHelper::create_link_to_wine (bool bReplaceExisting /*= false */, bool bSilent /*= false */, const string& spath_to_wine /*= "" */) ++{ ++string spath_to_use = spath_to_wine; ++ax_error axRet = AXERR_NONE; ++ ++ if ((0 == spath_to_use.length()) && (_aryPossibleWineLocations.size())) ++ { ++ vector::iterator iter; ++ ++ // If we weren't given a specific ++ // path for Wine, try to find it. ++ for (iter=_aryPossibleWineLocations.begin(); iter < _aryPossibleWineLocations.end(); iter++) ++ { ++ if (*iter) ++ { ++ spath_to_use = ((string*)*iter)->c_str(); ++ ++ if (spath_to_use.length()) ++ if (Glib::file_test(spath_to_use, Glib::FILE_TEST_EXISTS)) ++ break; ++ } ++ } ++ } ++ ++ if (0 == spath_to_use.length()) ++ { ++ axRet = AXERR_PROCESS_NOT_FOUND; ++ ++ if (!bSilent) ++ warning << _("Wine (or equivalent) could not be found") << endmsg; ++ } ++ else ++ { ++ string shome = Glib::get_home_dir(); ++ string spath_to_symbolic_link = shome + "/.Wine"; ++ ++ // Test to see if the symbolic link already exists ++ bool bFound = Glib::file_test(spath_to_symbolic_link.c_str(), Glib::FILE_TEST_EXISTS); ++ ++ if ((!bFound) || (bReplaceExisting)) ++ { ++ // If the symbolic link already exists but we've ++ // been told to replace it, delete the existing link. ++ if (bFound) ++ if (0 != remove(spath_to_symbolic_link.c_str())) ++ { ++ axRet = AXERR_INVALID_ACCESS; ++ ++ if (!bSilent) ++ error << _("Deletion error while making a symbolic link") << endmsg; ++ } ++ ++ if (AXERR_NONE == axRet) ++ { ++ // It's very unlikely that the user's home folder wouldn't exist but we need to be ++ // certain. symlink() will fail if the symbolic link's path doesn't already exist. ++ if ((axRet = create_path_folders(shome.c_str())) == AXERR_NONE) ++ { ++ if (0 != symlink(spath_to_use.c_str(), spath_to_symbolic_link.c_str())) ++ { ++ axRet = AXERR_INVALID_ACCESS; ++ ++ if (!bSilent) ++ error << _("Creation error while making a symbolic link") << endmsg; ++ } ++ } ++ else if (!bSilent) ++ error << _("Access error while making a symbolic link") << endmsg; ++ } ++ } ++ else if ((bFound) && (!bReplaceExisting)) ++ { ++ int len; ++ ++ // See if the link already points to the reqested destination ++ if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) > 0) ++ { ++ // Add a NUL terminator ++ temp_path[len] = 0; ++ ++ if (spath_to_use == temp_path); ++ // Do nothing here. Assume that it's okay to have a ++ // pre-existing link if we were told not to replace. ++ else ++ { ++ axRet = AXERR_DESTINATION_ERROR; ++ ++ if (!bSilent) ++ error << _("Cannot create symbolic link (an incompatible link already exists)") << endmsg; ++ ++ } ++ } ++ } ++ } ++ ++ return (axRet); ++} ++ ++ ++//*************************************************************** ++// ++// get_user_path() ++// ++// Obtains (where appropriate) a path to certain components that ++// might be needed before we can carry out an AAF import. Will ++// initialize this helper if initialization isn't already ++// completed. Pass in a string which identifies the file or path ++// that you want to identify. Currently supported entries are:- ++// ++// 'AAF Importer' - returns a path to the importer app ++// 'Wine' - returns the path to Wine, cxLinux or cxMac. ++// 'Session Base' - returns the 'base' path for storing Ardour ++// sessions. ++// ++// Note that if the file or path is successfully identified, this ++// doesn't necessarily mean that it actually exists ! ++// ++// Returns: ++// ++// If there was no relevant path ++// (e.g. the importer is native): An empty string. ++// If the path couldn't be identified: An empty string. ++// If the requested path was identified: A string containing ++// the path. ++// ++string ++AafImportHelper::get_user_path (const string& srequested_path, bool bSilent /*= false */) ++{ ++string junk, sRet; ++ax_error axRet = AXERR_NONE; ++ ++ if (!is_initialized()) ++ axRet = initialize_for_aaf_import(importer_is_native, importer_uses_wine, &junk, NULL, NULL, NULL, bSilent); ++ ++ if (AXERR_NONE == axRet) ++ { ++ if ("AAF Importer" == srequested_path) ++ axRet = get_path_to_importer(sRet, bSilent); ++ else if ("Wine" == srequested_path) ++ axRet = get_path_to_wine(sRet, bSilent); ++ else if ("Session Base" == srequested_path) ++ axRet = get_path_to_sessions(sRet, bSilent); ++ else ++ { ++ axRet = AXERR_NOT_IMPLEMENTED; ++ ++ if (!bSilent) ++ error << _("AafImportHelper::get_user_path(): unsupported option") << endmsg; ++ } ++ } ++ ++ if (AXERR_NONE != axRet) ++ sRet = ""; ++ ++ return (sRet); ++} ++ ++ ++//*************************************************************** ++// ++// get_path_to_importer() ++// ++// Opens the 'Paths' config file (if available) and reads in the ++// path for the AAF importer. If no 'Paths' file was found, it ++// attempts to locate a symbolic link to the importer and then ++// translates the symbolic link. The found path is returned in ++// 'sfound_path'. An empty string is returned if the path could ++// not be identified (or if an internal importer is specified). ++// If 'bSilent' is false, displays an error message to the user ++// if any error gets detected. ++// ++// This function will attempt to create a suitable symbolic link ++// if a pre-existing one couldn't be found. ++// ++// Returns: ++// ++// On Success: AXERR_NONE ++// On Failure: AXERR_DESTINATION_ERROR ++// ++ax_error ++AafImportHelper::get_path_to_importer (string& sfound_path, bool bSilent /*= false */) ++{ ++ax_error axRet = AXERR_NONE; ++ ++ if ((importer_is_native) && (!importer_uses_wine)) ++ sfound_path = ""; ++ else ++ { ++ sfound_path = ""; ++ ++ int len; ++ bool bPathFound = false; // TODO: Read this path from the 'Paths' file ++ ++ if (!bPathFound) ++ { ++ string spath_to_symbolic_link = get_user_ardour_path(); ++ spath_to_symbolic_link += "AAF Importer"; ++ ++ if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) >= 0) ++ { ++ // Add a NUL terminator ++ temp_path[len] = 0; ++ sfound_path = temp_path; ++ } ++ else ++ { ++ // We couldn't find a symbolic link for the ++ // AAF Import application. Try to create one. ++ if (AXERR_NONE == create_symlink("AAF Importer", false, bSilent)) ++ axRet = get_path_to_importer(sfound_path, bSilent); ++ else ++ axRet = AXERR_DESTINATION_ERROR; ++ } ++ } ++ } ++ ++ return (axRet); ++} ++ ++ ++//*************************************************************** ++// ++// get_path_to_sessions() ++// ++// Opens the 'Paths' config file (if available) and reads in the ++// user's preferred base path for saving Ardour sessions. If no ++// 'Paths' file was found, it attempts to locate a symbolic link ++// called "Ardour Sessions" and translates the symbolic link. The ++// found path is returned in 'sfound_path'. An empty string is ++// returned if the path could not be identified. If 'bSilent' is ++// false, displays an error message to the user if any error ++// gets detected. ++// ++// This function will attempt to create a suitable symbolic link ++// if a pre-existing one couldn't be found. However, it will only ++// attempt to create the link if an AAF import application is ++// already installed on the user's system. ++// ++// Returns: ++// ++// On Success: AXERR_NONE ++// On Failure: AXERR_DESTINATION_ERROR ++// ++ax_error ++AafImportHelper::get_path_to_sessions (string& sfound_path, bool bSilent /*= false */) ++{ ++int len; ++ax_error axRet = AXERR_NONE; ++ ++ bool bPathFound = false; // TODO: Read this path from the 'Paths' file ++ ++ sfound_path = ""; ++ ++ if (!bPathFound) ++ { ++ string spath_to_symbolic_link = get_user_ardour_path(); ++ spath_to_symbolic_link += "Ardour Sessions"; ++ ++ if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) >= 0) ++ { ++ // Add a NUL terminator ++ temp_path[len] = 0; ++ sfound_path = temp_path; ++ } ++ else ++ { ++ string junk; ++ ++ // We couldn't find a symbolic link for the user's session path. ++ // Assuming that an AAF Import app is present, try to create one. ++ if (AXERR_NONE == get_path_to_importer(junk, true)) ++ { ++ if (AXERR_NONE == create_symlink("Session Base", false, bSilent)) ++ axRet = get_path_to_sessions(sfound_path, bSilent); ++ else ++ axRet = AXERR_DESTINATION_ERROR; ++ } ++ else ++ { ++ axRet = AXERR_DESTINATION_ERROR; ++ ++ if (!bSilent) ++ warning << _("Symbolic link failure (could not detect an AAF importer app)") << endmsg; ++ } ++ } ++ } ++ ++ return (axRet); ++} ++ ++ ++//*************************************************************** ++// ++// get_path_to_wine() ++// ++// Opens the 'Paths' config file (if available) and reads in the ++// location of Wine (or cxLinux or cxMac) on the user's system. ++// If no 'Paths' file was found, it attempts to locate a symbolic ++// link called "Wine" and translates the symbolic link. The found ++// path is returned in 'sfound_path' (regardless of whether or not ++// Wine is actually needed). An empty string is returned if the ++// path could not be identified. If 'bSilent' is false, displays ++// an error message to the user if any error occurred. ++// ++// This function will attempt to create a suitable symbolic link ++// if a pre-existing one couldn't be found. However, it will only ++// attempt to create the link if an AAF import application is ++// already installed on the user's system. ++// ++// Returns: ++// ++// On Success: AXERR_NONE ++// On Failure: AXERR_DESTINATION_ERROR ++// ++ax_error ++AafImportHelper::get_path_to_wine (string& sfound_path, bool bSilent /*= false */) ++{ ++int len; ++ax_error axRet = AXERR_NONE; ++ ++ bool bPathFound = false; // TODO: Read this path from the 'Paths' file ++ ++ sfound_path = ""; ++ ++ if (!bPathFound) ++ { ++ string shome = Glib::get_home_dir(); ++ string spath_to_symbolic_link = shome + "/.Wine"; ++ ++ if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) >= 0) ++ { ++ // Add a NUL terminator ++ temp_path[len] = 0; ++ sfound_path = temp_path; ++ } ++ else ++ { ++ string junk; ++ ++ // We couldn't find a symbolic link for Wine. Assuming that ++ // an AAF Import app is present, try to create a link to Wine. ++ if (AXERR_NONE == get_path_to_importer(junk, true)) ++ { ++ if (AXERR_NONE == create_symlink("Wine", false, bSilent)) ++ axRet = get_path_to_wine(sfound_path, bSilent); ++ else ++ axRet = AXERR_DESTINATION_ERROR; ++ } ++ else ++ { ++ axRet = AXERR_DESTINATION_ERROR; ++ ++ if (!bSilent) ++ warning << _("Symbolic link failure (could not detect an AAF importer app)") << endmsg; ++ } ++ } ++ } ++ ++ return (axRet); ++} ++ ++ ++//*************************************************************** ++// ++// initialize_for_aaf_import() ++// ++// Calls the various 'get_path_to' functions to obtain any paths ++// that will be needed for importing an AAF file (e.g. the path ++// to the import plugin and the base path for converted sessions). ++// The base path is MANDATORY since no import process can take ++// place if the importer doesn't know where to dump the imported ++// sessions. AXERR_NOT_INITIALIZED will be issued if you pass a ++// NUL pointer to 'ppath_to_ardour_sessions'. The other paths ++// are optional. 'ppath_to_importer' returns an empty string if ++// the importer is internal. 'initialize_for_aaf_import()' will ++// optionally return (a) the user's preferred color scheme; ++// (b) whether or not he importer needs Wine, and (c) whether ++// the importer is native or external. If 'bSilent' is false, we ++// display an error message to the user if any error got detected. ++// ++// Returns: ++// ++// On Success: AXERR_NONE ++// On Failure: An appropriate ax_error ++// ++ax_error ++AafImportHelper::initialize_for_aaf_import (bool& is_native, bool& use_wine, string* ppath_to_ardour_sessions, ++ string* ppath_to_importer /*= NULL */, string* ppath_to_wine /*= NULL */, ++ string* ppreferred_color_scheme /*= NULL*/, bool bSilent /*= false */) ++{ ++ax_error axRet = AXERR_NOT_INITIALIZED; ++ ++ if (ppath_to_importer || ppath_to_wine || ppath_to_ardour_sessions) ++ { ++ string spath_to_importer; ++ axRet = AXERR_NONE; ++ ++ // Determine the current color scheme ++ if (ppreferred_color_scheme) ++ { ++ string sardour_theme = ARDOUR_UI::config()->ui_rc_file.get(); ++ ++ if (string::npos != sardour_theme.find("ui_dark")) ++ *ppreferred_color_scheme = "dark"; ++ else // assume a light theme ++ *ppreferred_color_scheme = "light"; ++ } ++ ++ // Always find a path to the importer since we ++ // can't set 'is_native' or 'use_wine' without it ++ if ((axRet = get_path_to_importer(spath_to_importer, bSilent)) != AXERR_NONE) ++ { ++ is_native = importer_is_native = false; ++ axRet = AXERR_NOT_INITIALIZED; ++ } ++ else ++ { ++ if (0 == spath_to_importer.length()) ++ { ++ // No external importer was found. If we're still ++ // uninitialized, assume we want an internal importer. ++ if ((importer_is_native) && (importer_uses_wine)) ++ { ++ is_native = importer_is_native = true; ++ use_wine = importer_uses_wine = false; ++ } ++ } ++ else ++ { ++ // The importer seems to be an external plugin. If ++ // we haven't been told explicitly to use a native ++ // importer, find out whether or not it needs Wine ++ if ((importer_is_native) && (!importer_uses_wine)) ++ { ++ // We've got a problem. An internal (native) AAF importer was ++ // requested - but the only one we could find was external. ++ axRet = AXERR_INTERNAL_ERROR; ++ ++ if (!bSilent) ++ error << _("An internal error occurred while locating the AAF importer") << endmsg; ++ } ++ else ++ { ++ is_native = importer_is_native = false; ++ ++ size_t ilen = spath_to_importer.length(); ++ size_t ipos = spath_to_importer.rfind(".exe"); ++ ++ if (ipos == string::npos) ++ ipos = spath_to_importer.rfind(".EXE"); ++ ++ // Assume that Wine is needed if the importer ends in ".exe" ++ if ((ilen > 4) && (ipos == (ilen-4))) ++ use_wine = importer_uses_wine = true; ++ else ++ use_wine = importer_uses_wine = false; ++ } ++ } ++ ++ if ((ppath_to_importer) && (!is_native)) ++ { ++ *ppath_to_importer = spath_to_importer; ++ ++ if (!axRet) ++ { ++ if (ppath_to_importer->length()) ++ { ++ // Find out if the import processor exists ++ axRet = Glib::file_test(*ppath_to_importer, Glib::FILE_TEST_EXISTS) ? AXERR_NONE : AXERR_PROCESS_NOT_FOUND; ++ if ((AXERR_PROCESS_NOT_FOUND == axRet) && (!bSilent)) ++ error << _("AAF import processor could not be found") << endmsg; ++ } ++ else ++ axRet = AXERR_NOT_INITIALIZED; ++ } ++ } ++ else if (is_native) ++ { ++ if (ppath_to_importer) ++ *ppath_to_importer = ""; ++ } ++ ++ if ((ppath_to_wine) && (!axRet)) ++ { ++ axRet = get_path_to_wine(*ppath_to_wine, bSilent); ++ ++ if (!axRet) ++ { ++ if (ppath_to_wine->length()) ++ { ++ // Find out if 'wine' exists ++ axRet = Glib::file_test(*ppath_to_wine, Glib::FILE_TEST_EXISTS) ? AXERR_NONE : AXERR_WINE_NOT_FOUND; ++ if ((AXERR_WINE_NOT_FOUND == axRet) && (!bSilent)) ++ error << _("Wine could not be found on this system") << endmsg; ++ } ++ else ++ axRet = AXERR_NOT_INITIALIZED; ++ } ++ else ++ axRet = AXERR_NOT_INITIALIZED; ++ } ++ ++ if ((ppath_to_ardour_sessions) && (!axRet)) ++ { ++ get_path_to_sessions(*ppath_to_ardour_sessions, bSilent); ++ ++ int len = ppath_to_ardour_sessions->length(); ++ ++ if (len) ++ { ++ // Now make sure that the path is ++ // terminated by a forward slash. ++ if ('/' != (*ppath_to_ardour_sessions)[len-1]) ++ *ppath_to_ardour_sessions += "/"; ++ ++ // Simply check that the path starts with a forward slash ++ if ('/' != (*ppath_to_ardour_sessions)[0]) ++ axRet = AXERR_DESTINATION_ERROR; ++ ++ if ((AXERR_DESTINATION_ERROR == axRet) && (!bSilent)) ++ { ++ error << _("The target path for your imported sessions is not a valid path") << endmsg; ++ error << _("Unable to initialize the AAF importer") << endmsg; ++ } ++ } ++ else ++ { ++ axRet = AXERR_DESTINATION_ERROR; ++ ++ if (!bSilent) ++ { ++ error << _("Could not locate the target path for your imported sessions") << endmsg; ++ error << _("Unable to initialize the AAF importer") << endmsg; ++ } ++ } ++ } ++ else if (!axRet) ++ axRet = AXERR_NOT_INITIALIZED; ++ } ++ } ++ ++ return (axRet); ++} ++ ++ ++//*************************************************************** ++// ++// import_from_aaf() ++// ++// This function identifies the AAF import process (if an import ++// process exists) and instructs it to import the file specified ++// by 'sfile_to_import'. If the import operation was successful, ++// 'spath_to_new_project' should contain the path to the imported ++// ".ardour" session. ++// ++// Returns: ++// ++// On Success: The (converted) exit code returned by the ++// AAF importer ++// On Failure: An (internally generated) ax_error ++// ++ax_error ++AafImportHelper::import_from_aaf (const string& sfile_to_import, string& spath_to_new_project) ++{ ++ax_error axRet = AXERR_SOURCE_ERROR; ++ ++ // Make sure that the file to ++ // be imported ends in ".aaf" ++ size_t ilen = sfile_to_import.length(); ++ size_t ipos = sfile_to_import.rfind(".aaf"); ++ ++ if (ipos == string::npos) ++ ipos = sfile_to_import.rfind(".AAF"); ++ ++ if ((ilen > 4) && (ipos == (ilen-4))) ++ { ++ string spreferred_color_scheme, ++ spath_to_importer, ++ spath_to_wine, ++ spath_for_ardour_sessions; ++ bool importer_is_native, ++ use_wine; ++ ++ axRet = initialize_for_aaf_import(importer_is_native, use_wine, &spath_for_ardour_sessions, ++ &spath_to_importer, &spath_to_wine, &spreferred_color_scheme); ++ ++ if (AXERR_NONE == axRet) ++ { ++ if (importer_is_native) ++ { ++ axRet = AXERR_NOT_IMPLEMENTED; ++ } ++ else if (use_wine) ++ { ++ char tmpBuf[1024], tmpBuf2[1024]; ++ ++ // Find the last forward slash in our source file ++ if (string::npos == (ipos = sfile_to_import.rfind("/"))) ++ strcpy(tmpBuf, sfile_to_import.c_str()); ++ else ++ strcpy(tmpBuf, &sfile_to_import[ipos+1]); ++ ++ // By this point, 'tmpBuf' should contain at least 5 characters ++ tmpBuf[strlen(tmpBuf)-4] = 0; ++ ++ // 'tmpBuf' now contains the name of the AAF file ++ std::string aaf_name = tmpBuf; ++ ++ // Use 'tmpBuf2' to build a path for the ardour session ++ sprintf(tmpBuf2, "z:%s%s/%s.ardour", spath_for_ardour_sessions.c_str(), aaf_name.c_str(), aaf_name.c_str()); ++ ++ // and use 'tmpBuf' to build a path for the input file ++ sprintf(tmpBuf, "z:%s", sfile_to_import.c_str()); ++ ++ // Obtain a flag for the color scheme ++ spreferred_color_scheme = attribute_to_flag(spath_to_importer, spreferred_color_scheme); ++ ++ // We now have enough information to spawn the child prpcess ++ int nRet; char cRet; ++ pid_t pidChild = fork(); ++ ++ if (0 == pidChild) ++ { ++ // We're running in the child process. Use exec() ++ // to replace the child process's excutable ++ execl (spath_to_wine.c_str(), "wine", spath_to_importer.c_str(), tmpBuf, tmpBuf2, spreferred_color_scheme.c_str(), NULL); ++ } ++ else if (pidChild != (-1)) ++ { ++ // We're running in parent process. Just ++ // wait for the child process to terminate ++ waitpid(pidChild, &nRet, 0); // waitpid() returns (qualified) status information in 'nRet' ++ cRet = (char)WEXITSTATUS(nRet); ++ nRet = cRet; // 'nRet' now equals the ACTUAL status value returned by the AAF importer ++ ++ spath_to_new_project = &tmpBuf2[2]; ++ ++ return (assign_exit_status(spath_to_importer, nRet)); ++ } ++ else ++ { ++ // fork()/exec() failed. Consider ++ // this to be a terminal failure. ++ axRet = AXERR_PROCESS_FAILURE; ++ } ++ } ++ else ++ { ++ axRet = AXERR_NOT_IMPLEMENTED; ++ } ++ } ++ } ++ ++ if (AXERR_PROCESS_FAILURE == axRet) // fork()/exec() failed. This is terminal ++ fatal << _("A fatal error occurred while launching the AAF importer") << endmsg; ++ ++ if (AXERR_SOURCE_ERROR == axRet) ++ error << _("The selected source file is not a valid AAF file") << endmsg; ++ ++ if (AXERR_NOT_INITIALIZED == axRet) ++ error << _("Unable to initialize the AAF importer") << endmsg; ++ ++ return (axRet); ++} ++ ++ ++//*************************************************************** ++// ++// create_path_folders() ++// ++// If a symbolic link needs to be created, this function ensures ++// that all folders leading to the symlink are present. ++// ++// Returns: ++// ++// On success: AXERR_NONE ++// On Failure: An appropriate ax_error ++// ++ax_error ++AafImportHelper::create_path_folders(const char *pRequestedPath) ++{ ++char ch, *tmpPath = NULL; ++bool rootfound = false; ++ ++#if defined (PORT_SYS_WINDOWS) && !defined(PORT_SYS_CYGWIN) ++char separator = '\\'; ++#else ++char separator = '/'; ++#endif ++ ++ /* Note that this function shouldn't be used to create ++ * a root drive or folder. Also, don't be tempted to ++ * use 'g_mkdir_with_parents()' either because it ++ * didn't become available until Glib v2.8, which is ++ * higher than the base requirement for Ardour. ++ */ ++ if (int length = strlen(pRequestedPath)) ++ { ++ tmpPath = new char[length+2]; ++ strcpy(tmpPath, pRequestedPath); ++ ++ // Add a trailing separator, if there isn't one ++ if (pRequestedPath[length-1] != separator) ++ { ++ strncpy(&tmpPath[length], &separator, 1); ++ strncpy(&tmpPath[length+1], "\0", 1); ++ ++ // Increment 'length' ++ length += 1; ++ } ++ ++ // Locate the SECOND separator ++ char* iter = tmpPath; ++ while (strlen(iter)) ++ { ++ ch = *iter; ++ if ((ch == separator) && (rootfound)) ++ { ++ // Replace it with a zero ++ *iter = '\0'; ++ ++ // and make the first directory ++ if (strlen(tmpPath)) ++#if defined (PORT_SYS_WINDOWS) && !defined(PORT_SYS_CYGWIN) ++ if (0 != _mkdir(tmpPath)) ++#else ++ if (0 != g_mkdir(tmpPath, (S_IRWXU | S_IRWXG | S_IRWXO))) ++#endif ++ { ++ if (EEXIST != errno) ++ { ++ delete[] tmpPath; ++ return (AXERR_PROCESS_FAILURE); ++ } ++ } ++ ++ // Now put the separator back ++ *iter = separator; ++ ++ // and move to the next character ++ ++iter; ++ ++ break; ++ } ++ else if (ch == separator) ++ rootfound = true; ++ ++ iter++; ++ } ++ ++ // Now create the remaining directories ++ while (strlen(iter)) ++ { ++ ch = *iter; ++ if (ch == separator) ++ { ++ // Replace it with a zero ++ *iter = '\0'; ++ ++ // make the directory ++ if (strlen(tmpPath)) ++#if defined (PORT_SYS_WINDOWS) && !defined(PORT_SYS_CYGWIN) ++ if (0 != _mkdir(tmpPath)) ++#else ++ if (0 != g_mkdir(tmpPath, (S_IRWXU | S_IRWXG | S_IRWXO))) ++#endif ++ { ++ if (EEXIST != errno) ++ { ++ delete[] tmpPath; ++ return (AXERR_PROCESS_FAILURE); ++ } ++ } ++ ++ // Now put the separator back ++ *iter = separator; ++ } ++ ++ // move to the next character ++ ++iter; ++ } ++ } ++ ++ delete[] tmpPath; ++ ++ return (AXERR_NONE); ++} ++ ++ ++/*************************************************************** ++* * ++* These functions are useful when we need to interface with an * ++* external helper app (e.g. when we need to import audio from * ++* an unsupported session format such as OMF or AAF). * ++* * ++****************************************************************/ ++// ++// attribute_to_flag() ++// ++// Internally, common flags may be used for specific program ++// conditions (such as "light" or "dark" to indicate the user's ++// preferred color scheme). This function converts any such ++// internal flags to a format that might be applicable to an ++// external process. For example, the string "overwrite" could ++// be used internally as an indication that an external app ++// should overwrite older versions of a file. App X might need ++// this to be sent as "/O" whereas App Y might require "-o". ++// Use this function to convert internal flags to external ones. ++// ++// Returns: ++// ++// On Success: A string representing the appropriate flag ++// On Failure: An empty string ++// ++string ++AafImportHelper::attribute_to_flag (string s_application, string s_attribute) ++{ ++string sFlag; ++ ++ // Are we dealing with ArdourXchange ? ++ if (string::npos != s_application.find("ArdourXchange.exe")) ++ { ++ // Attributes supported by ArdourXchange ++ if (s_attribute == "dark") ++ sFlag = "-D"; ++ else if (s_attribute == "light") ++ sFlag = "-L"; ++ } ++ else if (string::npos != s_application.find("put your application name here")) ++ { ++ // Attributes supported by the next app ++ } ++ ++ return (sFlag); ++} ++ ++//*************************************************************** ++// ++// assign_exit_status() ++// ++// If an external helper app is capable of returning a status ++// code, the returned status code can be converted to the nearest ++// equivalent ax_error. Pass in the relevant code and a string ++// identifying the application. ++// ++// Returns: ++// ++// On Success: An appropriate ax_error ++// On Failure: AXERR_UNKNOWN ++// ++ax_error ++AafImportHelper::assign_exit_status (string s_application, int exit_code) ++{ ++ax_error exit_status = AXERR_UNKNOWN; ++ ++ // Are we dealing with ArdourXchange ? ++ if (string::npos != s_application.find("ArdourXchange.exe")) ++ { ++ // Exit codes supported by ArdourXchange ++ switch (exit_code) { ++ case -2: exit_status = AXERR_NOT_INITIALIZED; ++ break; ++ case -1: exit_status = AXERR_FATAL_EXCEPTION; ++ break; ++ case 0: exit_status = AXERR_NONE; ++ break; ++ case 1: exit_status = AXERR_USER_ABORTED; ++ break; ++ case 2: exit_status = AXERR_MEDIA_NOT_FOUND; ++ break; ++ } ++ } ++ else if (string::npos != s_application.find("put your application name here")) ++ { ++ // Exit codes supported by the next app ++ } ++ ++ return (exit_status); ++} ++ ++ ++/*************************************************************** ++* * ++****************************************************************/ +diff --git a/gtk2_ardour/import_helper_aaf.h b/gtk2_ardour/import_helper_aaf.h +new file mode 100644 +index 0000000..37d8257 +--- /dev/null ++++ b/gtk2_ardour/import_helper_aaf.h +@@ -0,0 +1,81 @@ ++/* ++ Copyright (C) 2005 Paul Davis ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++*/ ++ ++// -*- c++ -*- ++ ++#ifndef IMPORT_HELPER_AAF_H ++#define IMPORT_HELPER_AAF_H ++ ++#include ++#include ++ ++using namespace std; ++ ++class AafImportHelper ++{ ++public: ++ AafImportHelper (bool use_native_importer = false); ++ ~AafImportHelper (); ++ ++ string get_user_path (const string& /* in */srequested_path, bool /* in */bSilent = false); ++ ax_error import_from_aaf (const string& /* in */sfile_to_import, string& /* out */spath_to_new_project); ++ ax_error create_symlink (const string& /* in */srequested_link, bool /* in */bReplaceExisting = false, bool /* in */bSilent = false); ++ ax_error create_link_to_importer (bool /* in */bReplaceExisting = false, bool /* in */bSilent = false, const string& /* in */spath_to_importer = ""); ++ ax_error create_link_to_sessions (bool /* in */bReplaceExisting = false, bool /* in */bSilent = false, const string& /* in */spath_to_sessions = ""); ++ ax_error create_link_to_wine (bool /* in */bReplaceExisting = false, bool /* in */bSilent = false, const string& /* in */spath_to_wine = ""); ++ bool is_native (bool /* in */bSilent = false); ++ bool needs_wine (bool /* in */bSilent = false); ++ bool is_initialized() { return (importer_is_native && importer_uses_wine) ? false : true; } ++ ++protected: ++ ax_error create_path_folders(const char *pRequestedPath); ++ ax_error get_path_to_importer (string& /* out */sfound_path, bool /* in */bSilent = false); ++ ax_error get_path_to_sessions (string& /* out */sfound_path, bool /* in */bSilent = false); ++ ax_error get_path_to_wine (string& /* out */sfound_path, bool /* in */bSilent = false); ++ ax_error initialize_for_aaf_import (bool& /* out */is_native, bool& /* out */uses_wine, string* /* out */ppath_to_ardour_sessions, ++ string* /* out */ppath_to_importer = NULL, string* /* out */ppath_to_wine = NULL, ++ string* /* out */ppreferred_color_scheme = NULL, bool /* in */bSilent = false); ++ ax_error assign_exit_status (string s_application, int exit_code); ++ string attribute_to_flag (string s_application, string s_attribute); ++ char temp_path[PATH_MAX+1]; ++ vector _aryPossibleImporterLocations; ++ vector _aryPossibleWineLocations; ++ ++private: ++ bool importer_is_native; ++ bool importer_uses_wine; ++ static bool already_instantiated; ++ ++private: ++ // AafImportHelper is not meant to get copied. These things ++ // are private because they are never meant to be used. ++ AafImportHelper& operator= (AafImportHelper&); // N/A ++ AafImportHelper(AafImportHelper&); // N/A ++}; ++ ++inline AafImportHelper& AafImportHelper::operator= (AafImportHelper&) ++{ ++ return *this; ++} ++ ++inline AafImportHelper::AafImportHelper(AafImportHelper&) ++{ ++} ++ ++#endif // IMPORT_HELPER_AAF_H +diff --git a/gtk2_ardour/new_session_dialog.cc b/gtk2_ardour/new_session_dialog.cc +index c02d9b1..d7c79cc 100644 +--- a/gtk2_ardour/new_session_dialog.cc ++++ b/gtk2_ardour/new_session_dialog.cc +@@ -1,5 +1,5 @@ + /* +- Copyright (C) 2005 Paul Davis ++ Copyright (C) 2005 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +@@ -43,6 +43,12 @@ using namespace PBD; + #include "i18n.h" + #include "new_session_dialog.h" + ++// Needed to launch an AAF importer ++#include "import_helper_aaf.h" ++#include "ardour_ui.h" ++#include ++#include ++ + NewSessionDialog::NewSessionDialog() + : ArdourDialog ("session control") + { +@@ -81,17 +87,15 @@ NewSessionDialog::NewSessionDialog() + session_template_label = new Gtk::Label(_("Template :")); + m_template = new Gtk::FileChooserButton(); + m_create_control_bus = new Gtk::CheckButton(_("Create Monitor Bus")); +- + Gtk::Adjustment *m_control_bus_channel_count_adj = Gtk::manage(new Gtk::Adjustment(2, 0, 100, 1, 10)); + m_control_bus_channel_count = new Gtk::SpinButton(*m_control_bus_channel_count_adj, 1, 0); +- ++ + Gtk::Adjustment *m_master_bus_channel_count_adj = Gtk::manage(new Gtk::Adjustment(2, 0, 100, 1, 10)); + m_master_bus_channel_count = new Gtk::SpinButton(*m_master_bus_channel_count_adj, 1, 0); + m_create_master_bus = new Gtk::CheckButton(_("Create Master Bus")); + advanced_table = new Gtk::Table(2, 2, true); + m_connect_inputs = new Gtk::CheckButton(_("Automatically Connect to Physical Inputs")); + m_limit_input_ports = new Gtk::CheckButton(_("Use only")); +- + Gtk::Adjustment *m_input_limit_count_adj = Gtk::manage(new Gtk::Adjustment(1, 0, 100, 1, 10)); + m_input_limit_count = new Gtk::SpinButton(*m_input_limit_count_adj, 1, 0); + input_port_limit_hbox = new Gtk::HBox(false, 0); +@@ -100,16 +104,15 @@ NewSessionDialog::NewSessionDialog() + + bus_frame = new Gtk::Frame(); + bus_table = new Gtk::Table (2, 3, false); +- ++ + input_frame = new Gtk::Frame(); + m_connect_outputs = new Gtk::CheckButton(_("Automatically Connect Outputs")); + m_limit_output_ports = new Gtk::CheckButton(_("Use only")); +- + Gtk::Adjustment *m_output_limit_count_adj = Gtk::manage(new Gtk::Adjustment(1, 0, 100, 1, 10)); + m_output_limit_count = new Gtk::SpinButton(*m_output_limit_count_adj, 1, 0); + output_port_limit_hbox = new Gtk::HBox(false, 0); + output_port_vbox = new Gtk::VBox(false, 0); +- ++ + Gtk::RadioButton::Group _RadioBGroup_m_connect_outputs_to_master; + m_connect_outputs_to_master = new Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("... to Master Bus")); + m_connect_outputs_to_physical = new Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("... to Physical Outputs")); +@@ -172,7 +175,7 @@ NewSessionDialog::NewSessionDialog() + m_create_master_bus->set_border_width(0); + advanced_table->set_row_spacings(0); + advanced_table->set_col_spacings(0); +- ++ + m_connect_inputs->set_flags(Gtk::CAN_FOCUS); + m_connect_inputs->set_relief(Gtk::RELIEF_NORMAL); + m_connect_inputs->set_mode(true); +@@ -203,7 +206,7 @@ NewSessionDialog::NewSessionDialog() + bus_frame->set_label_align(0,0.5); + bus_frame->add(*bus_hbox); + bus_frame->set_label_widget(*bus_label); +- ++ + bus_table->set_row_spacings (0); + bus_table->set_col_spacings (0); + bus_table->attach (*m_create_master_bus, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); +@@ -345,12 +348,12 @@ NewSessionDialog::NewSessionDialog() + + m_notebook->set_flags(Gtk::CAN_FOCUS); + m_notebook->set_scrollable(true); +- ++ + get_vbox()->set_homogeneous(false); + get_vbox()->set_spacing(0); + get_vbox()->pack_start(*m_notebook, Gtk::PACK_SHRINK, 0); + +- /* ++ /* + icon setting is done again in the editor (for the whole app), + but its all chickens and eggs at this point. + */ +@@ -392,7 +395,7 @@ NewSessionDialog::NewSessionDialog() + m_treeview->get_selection()->set_mode (Gtk::SELECTION_SINGLE); + + std::string path = ARDOUR::get_user_ardour_path(); +- ++ + if (path.empty()) { + path = ARDOUR::get_system_data_path(); + } +@@ -409,7 +412,7 @@ NewSessionDialog::NewSessionDialog() + } + + const std::string sys_templates_dir = ARDOUR::get_system_data_path() + template_dir_name; +- ++ + if (Glib::file_test(sys_templates_dir, Glib::FILE_TEST_IS_DIR)) + { + m_template->add_shortcut_folder(sys_templates_dir); +@@ -417,6 +420,21 @@ NewSessionDialog::NewSessionDialog() + + m_template->set_title(_("select template")); + Gtk::FileFilter* session_filter = manage (new (Gtk::FileFilter)); ++ ++ // Find out if we have an AAF importer present ++ FILE *xchange = NULL; ++ AafImportHelper importer; ++ string spath_to_importer = importer.get_user_path("AAF Importer", true); ++ if (spath_to_importer.length()) ++ xchange = fopen(spath_to_importer.c_str(), "r"); ++ if ((xchange != NULL) || ((importer.is_native()) && (importer.is_initialized()))) { ++ printf("AAF Converter found; adding support for import of AAF files.\n"); ++ session_filter->add_pattern(X_("*.aaf")); ++ ++ if (xchange) ++ fclose(xchange); ++ } ++ + session_filter->add_pattern(X_("*.ardour")); + session_filter->add_pattern(X_("*.ardour.bak")); + m_open_filechooser->set_filter (*session_filter); +@@ -463,7 +481,7 @@ NewSessionDialog::NewSessionDialog() + m_treeview->signal_row_activated().connect (mem_fun (*this, &NewSessionDialog::recent_row_activated)); + m_open_filechooser->signal_selection_changed ().connect (mem_fun (*this, &NewSessionDialog::file_chosen)); + m_template->signal_selection_changed ().connect (mem_fun (*this, &NewSessionDialog::template_chosen)); +- ++ + page_set = Pages (0); + } + +@@ -552,7 +570,7 @@ NewSessionDialog::set_session_folder(const Glib::ustring& dir) + 4) canonicalize_file_name() & realpath() have entirely + different semantics on OS X and Linux when given + a non-existent path. +- ++ + as result of all this, we take two distinct pathways through the code. + */ + +@@ -569,7 +587,6 @@ NewSessionDialog::set_session_folder(const Glib::ustring& dir) + engine_page_session_folder = realdir; + } + +- + #else + char* res; + if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) { +@@ -582,7 +599,7 @@ NewSessionDialog::set_session_folder(const Glib::ustring& dir) + m_folder->set_current_folder (res); + free (res); + } +- ++ + #endif + + } +@@ -590,7 +607,8 @@ NewSessionDialog::set_session_folder(const Glib::ustring& dir) + std::string + NewSessionDialog::session_name() const + { +- std::string str = Glib::filename_from_utf8(m_open_filechooser->get_filename()); ++ std::string str = m_filename; ++ + std::string::size_type position = str.find_last_of ('/'); + str = str.substr (position+1); + position = str.find_last_of ('.'); +@@ -602,7 +620,7 @@ NewSessionDialog::session_name() const + + if ((position = str.rfind(".bak")) != string::npos) { + str = str.substr (0, position); +- } ++ } + */ + + switch (which_page()) { +@@ -615,7 +633,7 @@ NewSessionDialog::session_name() const + return Glib::filename_from_utf8(m_name->get_text()); + default: + break; +- } ++ } + + if (m_treeview->get_selection()->count_selected_rows() == 0) { + return Glib::filename_from_utf8(str); +@@ -630,7 +648,6 @@ NewSessionDialog::session_folder() const + switch (which_page()) { + case NewPage: + return Glib::filename_from_utf8(m_folder->get_filename()); +- + case EnginePage: + if (!(page_set & OpenPage) && !(page_set & NewPage)) { + /* just engine page, nothing else */ +@@ -645,9 +662,9 @@ NewSessionDialog::session_folder() const + default: + break; + } +- ++ + if (m_treeview->get_selection()->count_selected_rows() == 0) { +- const string filename(Glib::filename_from_utf8(m_open_filechooser->get_filename())); ++ const string filename( m_filename ); + return Glib::path_get_dirname(filename); + } + +@@ -809,7 +826,7 @@ NewSessionDialog::reset_name() + { + m_name->set_text(""); + set_response_sensitive (Gtk::RESPONSE_OK, false); +- ++ + } + + void +@@ -898,11 +915,57 @@ NewSessionDialog::file_chosen () + } + + if (!m_open_filechooser->get_filename().empty()) { +- set_response_sensitive (Gtk::RESPONSE_OK, true); +- response (Gtk::RESPONSE_OK); ++ std::string selection = m_open_filechooser->get_filename(); ++ if (( selection.find(".aaf") != string::npos ) || ++ ( selection.find(".AAF") != string::npos )) { ++ ++ // Let's establish that ".aaf" is actually at the end of the string ++ size_t slen = selection.length(); ++ size_t spos = selection.rfind(".aaf"); ++ ++ if (spos == string::npos) ++ spos = selection.rfind(".AAF"); ++ ++ if (spos == (slen-4)) { ++ std::string spath_to_imported_session; ++ ++ AafImportHelper importer; ++ ++ ax_error axResult = importer.import_from_aaf (selection, spath_to_imported_session); ++ ++ // Determine the error (if any) but assume that all errors ++ // (apart from NOT_IMPLEMENTED) have already been reported. ++ switch (axResult) { ++ case AXERR_NONE: // These are the only two cases where ++ case AXERR_MEDIA_NOT_FOUND: // it's possible to load the session. ++ m_open_filechooser->set_filename( Glib::filename_to_utf8(spath_to_imported_session) ); ++ m_filename = spath_to_imported_session; ++ break; ++ case AXERR_NOT_IMPLEMENTED: ++ error << _("The requested feature is not yet available") << endmsg; ++ default: ++ m_open_filechooser->set_filename(""); ++ set_response_sensitive (Gtk::RESPONSE_OK, false); ++ if (win) { // Can't return to the previous cursor ++ win->set_cursor(/*Gdk::Cursor(Gdk::LAST_CURSOR)*/); // under 'X' so just select the desktop ++ } // cursor (will usually be the same thing) ++ ++ return; ++ } ++ } else ++ m_filename = selection; ++ } else ++ m_filename = selection; ++ ++ set_response_sensitive (Gtk::RESPONSE_OK, true); ++ response (Gtk::RESPONSE_OK); + } else { + set_response_sensitive (Gtk::RESPONSE_OK, false); + } ++ ++ if (win) { // Can't return to the previous cursor ++ win->set_cursor(/*Gdk::Cursor(Gdk::LAST_CURSOR)*/); // under 'X' so just select the desktop ++ } // cursor (will usually be the same thing) + } + + void +@@ -982,61 +1045,61 @@ NewSessionDialog::reset_recent() + std::vector *sessions; + std::vector::iterator i; + RecentSessionsSorter cmp; +- ++ + recent_model->clear (); + + ARDOUR::RecentSessions rs; + ARDOUR::read_recent_sessions (rs); +- ++ + /* sort them alphabetically */ + sort (rs.begin(), rs.end(), cmp); + sessions = new std::vector; +- ++ + for (ARDOUR::RecentSessions::iterator i = rs.begin(); i != rs.end(); ++i) { + sessions->push_back (new string ((*i).second)); + } +- ++ + for (i = sessions->begin(); i != sessions->end(); ++i) { + + std::vector* states; + std::vector item; + std::string fullpath = *(*i); +- ++ + /* remove any trailing / */ +- ++ + if (fullpath[fullpath.length()-1] == '/') { + fullpath = fullpath.substr (0, fullpath.length()-1); + } +- ++ + /* check whether session still exists */ + if (!Glib::file_test(fullpath, Glib::FILE_TEST_EXISTS)) { + /* session doesn't exist */ + continue; +- } +- ++ } ++ + /* now get available states for this session */ +- ++ + if ((states = ARDOUR::Session::possible_states (fullpath)) == 0) { + /* no state file? */ + continue; + } +- ++ + Gtk::TreeModel::Row row = *(recent_model->append()); +- ++ + row[recent_columns.visible_name] = Glib::path_get_basename (fullpath); + row[recent_columns.fullpath] = fullpath; +- ++ + if (states->size()) { +- ++ + /* add the children */ +- ++ + for (std::vector::iterator i2 = states->begin(); i2 != states->end(); ++i2) { + + Gtk::TreeModel::Row child_row = *(recent_model->append (row.children())); +- ++ + child_row[recent_columns.visible_name] = **i2; + child_row[recent_columns.fullpath] = fullpath; +- ++ + delete *i2; + } + } +diff --git a/gtk2_ardour/new_session_dialog.h b/gtk2_ardour/new_session_dialog.h +index 658b2a8..dfba157 100644 +--- a/gtk2_ardour/new_session_dialog.h ++++ b/gtk2_ardour/new_session_dialog.h +@@ -1,5 +1,5 @@ + /* +- Copyright (C) 2005 Paul Davis ++ Copyright (C) 2005 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +@@ -53,7 +53,7 @@ namespace Gtk { + class NewSessionDialog : public ArdourDialog + { + public: +- ++ + enum Pages { + NewPage = 0x1, + OpenPage = 0x2, +@@ -70,7 +70,7 @@ public: + + std::string session_name() const; + std::string session_folder() const; +- ++ + bool use_session_template() const; + std::string session_template_name() const; + +@@ -109,7 +109,7 @@ protected: + + void reset_name(); + void reset_template(); +- ++ + Gtk::Label * session_name_label; + Gtk::Label * session_location_label; + Gtk::Label * session_template_label; +@@ -155,7 +155,7 @@ protected: + + Gtk::CheckButton* m_create_master_bus; + Gtk::SpinButton* m_master_bus_channel_count; +- ++ + Gtk::CheckButton* m_create_control_bus; + Gtk::SpinButton* m_control_bus_channel_count; + +@@ -163,7 +163,7 @@ protected: + Gtk::CheckButton* m_limit_input_ports; + Gtk::SpinButton* m_input_limit_count; + +- Gtk::CheckButton* m_connect_outputs; ++ Gtk::CheckButton* m_connect_outputs; + Gtk::CheckButton* m_limit_output_ports; + Gtk::SpinButton* m_output_limit_count; + +@@ -180,7 +180,7 @@ protected: + Pages page_set; + + struct RecentSessionModelColumns : public Gtk::TreeModel::ColumnRecord { +- RecentSessionModelColumns() { ++ RecentSessionModelColumns() { + add (visible_name); + add (fullpath); + } +@@ -217,6 +217,7 @@ protected: + bool have_engine; + Glib::ustring engine_page_session_folder; + Glib::ustring engine_page_session_name; ++ string m_filename; + }; + + #endif // NEW_SESSION_DIALOG_H +diff --git a/libs/ardour/ardour/ax_errors.h b/libs/ardour/ardour/ax_errors.h +new file mode 100644 +index 0000000..ca3d396 +--- /dev/null ++++ b/libs/ardour/ardour/ax_errors.h +@@ -0,0 +1,40 @@ ++/* ax_errors.h ++ ++ A 'humanised' list of possible errors that Ardour might encounter ++ if it launches an external application. These error codes are ++ limited to the range that can be returned by the Linux API 'waitpid()' ++ Technically, it can return an int - but only the 8 least significant ++ bits are used to represent the exit status of the spawned application. ++ Therefore, although any number of error codes may be defined, their ++ values must lie in the range -128 to +127. Feel free to add to the ++ error codes already listed but please do not modify (e.g. renumber) ++ any errors that someone has already defined before you. ++*/ ++ ++#ifndef AXERRORS_INCLUDED ++#define AXERRORS_INCLUDED ++ ++enum ax_error { AXERR_LOWER_LIMIT = (-128), ++ AXERR_UNKNOWN = (-127), ++ AXERR_NOT_IMPLEMENTED = (-126), ++ AXERR_INTERNAL_ERROR = (-125), ++ AXERR_INVALID_ACCESS = (-11), ++ AXERR_INVALID_SWITCH = (-10), ++ AXERR_INVALID_PARAM = (-9), ++ AXERR_SOURCE_ERROR = (-8), ++ AXERR_DESTINATION_ERROR = (-7), ++ AXERR_PROCESS_FAILURE = (-6), ++ AXERR_PROCESS_NOT_FOUND = (-5), ++ AXERR_WINE_FAILURE = (-4), ++ AXERR_WINE_NOT_FOUND = (-3), ++ AXERR_NOT_INITIALIZED = (-2), ++ AXERR_FATAL_EXCEPTION = (-1), ++ AXERR_NONE = 0, ++ AXERR_USER_ABORTED = 1, ++ AXERR_MEDIA_NOT_FOUND = 2, ++ AXERR_UPPER_LIMIT = 127 ++ }; ++ ++#endif /* AXERRORS_INCLUDED */ ++ ++/* EOF */ --- ardour-2.8.2.orig/debian/patches/80_ardourino.patch +++ ardour-2.8.2/debian/patches/80_ardourino.patch @@ -0,0 +1,375 @@ +diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc +index 7287e6f..2ebd14d 100644 +--- a/gtk2_ardour/mixer_strip.cc ++++ b/gtk2_ardour/mixer_strip.cc +@@ -57,6 +57,7 @@ + #include "io_selector.h" + #include "utils.h" + #include "gui_thread.h" ++#include "opts.h" + + #include "i18n.h" + +@@ -211,10 +212,11 @@ MixerStrip::init () + group_button.set_name ("MixerGroupButton"); + group_label.set_name ("MixerGroupButtonLabel"); + +- comment_button.set_name ("MixerCommentButton"); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ comment_button.set_name ("MixerCommentButton"); ++ comment_button.signal_clicked().connect (mem_fun(*this, &MixerStrip::comment_button_clicked)); ++ } + +- comment_button.signal_clicked().connect (mem_fun(*this, &MixerStrip::comment_button_clicked)); +- + global_vpacker.set_border_width (0); + global_vpacker.set_spacing (0); + +@@ -242,10 +244,16 @@ MixerStrip::init () + global_vpacker.pack_start (middle_button_table,Gtk::PACK_SHRINK); + global_vpacker.pack_start (*gain_meter_alignment,Gtk::PACK_SHRINK); + global_vpacker.pack_start (bottom_button_table,Gtk::PACK_SHRINK); +- global_vpacker.pack_start (post_redirect_box, true, true); +- global_vpacker.pack_start (panners, Gtk::PACK_SHRINK); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ global_vpacker.pack_start (post_redirect_box, true, true); ++ } ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ global_vpacker.pack_start (panners, Gtk::PACK_SHRINK); ++ } + global_vpacker.pack_start (output_button, Gtk::PACK_SHRINK); +- global_vpacker.pack_start (comment_button, Gtk::PACK_SHRINK); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ global_vpacker.pack_start (comment_button, Gtk::PACK_SHRINK); ++ } + + global_frame.add (global_vpacker); + global_frame.set_shadow_type (Gtk::SHADOW_IN); +@@ -428,7 +436,10 @@ MixerStrip::set_route (boost::shared_ptr rt) + /* now force an update of all the various elements */ + + pre_redirect_box.update(); +- post_redirect_box.update(); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ post_redirect_box.update(); ++ } ++ + mute_changed (0); + solo_changed (0); + name_changed (0); +@@ -437,7 +448,9 @@ MixerStrip::set_route (boost::shared_ptr rt) + + connect_to_pan (); + +- panners.setup_pan (); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ panners.setup_pan (); ++ } + + if (is_audio_track()) { + speed_changed (); +@@ -479,10 +492,13 @@ MixerStrip::set_width (Width w, void* owner) + /* always set the gpm width again, things may be hidden */ + + gpm.set_width (w); +- panners.set_width (w); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ panners.set_width (w); ++ } + pre_redirect_box.set_width (w); +- post_redirect_box.set_width (w); +- ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ post_redirect_box.set_width (w); ++ } + _width_owner = owner; + + ensure_xml_node (); +@@ -502,18 +518,21 @@ MixerStrip::set_width (Width w, void* owner) + ((Gtk::Label*)mute_button->get_child())->set_text (_("Mute")); + ((Gtk::Label*)solo_button->get_child())->set_text (_("Solo")); + +- if (_route->comment() == "") { +- comment_button.unset_bg (STATE_NORMAL); +- ((Gtk::Label*)comment_button.get_child())->set_text (_("Comments")); +- } else { +- comment_button.modify_bg (STATE_NORMAL, color()); +- ((Gtk::Label*)comment_button.get_child())->set_text (_("*Comments*")); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ if (_route->comment() == "") { ++ comment_button.unset_bg (STATE_NORMAL); ++ ((Gtk::Label*)comment_button.get_child())->set_text (_("Comments")); ++ } else { ++ comment_button.modify_bg (STATE_NORMAL, color()); ++ ((Gtk::Label*)comment_button.get_child())->set_text (_("*Comments*")); ++ } + } +- + ((Gtk::Label*)gpm.gain_automation_style_button.get_child())->set_text (gpm.astyle_string(_route->gain_automation_curve().automation_style())); + ((Gtk::Label*)gpm.gain_automation_state_button.get_child())->set_text (gpm.astate_string(_route->gain_automation_curve().automation_state())); +- ((Gtk::Label*)panners.pan_automation_style_button.get_child())->set_text (panners.astyle_string(_route->panner().automation_style())); +- ((Gtk::Label*)panners.pan_automation_state_button.get_child())->set_text (panners.astate_string(_route->panner().automation_state())); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ ((Gtk::Label*)panners.pan_automation_style_button.get_child())->set_text (panners.astyle_string(_route->panner().automation_style())); ++ ((Gtk::Label*)panners.pan_automation_state_button.get_child())->set_text (panners.astate_string(_route->panner().automation_state())); ++ } + Gtkmm2ext::set_size_request_to_display_given_text (name_button, "long", 2, 2); + set_size_request (-1, -1); + break; +@@ -525,18 +544,21 @@ MixerStrip::set_width (Width w, void* owner) + ((Gtk::Label*)mute_button->get_child())->set_text (_("M")); + ((Gtk::Label*)solo_button->get_child())->set_text (_("S")); + +- if (_route->comment() == "") { +- comment_button.unset_bg (STATE_NORMAL); +- ((Gtk::Label*)comment_button.get_child())->set_text (_("Cmt")); +- } else { +- comment_button.modify_bg (STATE_NORMAL, color()); +- ((Gtk::Label*)comment_button.get_child())->set_text (_("*Cmt*")); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ if (_route->comment() == "") { ++ comment_button.unset_bg (STATE_NORMAL); ++ ((Gtk::Label*)comment_button.get_child())->set_text (_("Cmt")); ++ } else { ++ comment_button.modify_bg (STATE_NORMAL, color()); ++ ((Gtk::Label*)comment_button.get_child())->set_text (_("*Cmt*")); ++ } + } +- + ((Gtk::Label*)gpm.gain_automation_style_button.get_child())->set_text (gpm.short_astyle_string(_route->gain_automation_curve().automation_style())); + ((Gtk::Label*)gpm.gain_automation_state_button.get_child())->set_text (gpm.short_astate_string(_route->gain_automation_curve().automation_state())); +- ((Gtk::Label*)panners.pan_automation_style_button.get_child())->set_text (panners.short_astyle_string(_route->panner().automation_style())); +- ((Gtk::Label*)panners.pan_automation_state_button.get_child())->set_text (panners.short_astate_string(_route->panner().automation_state())); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ ((Gtk::Label*)panners.pan_automation_style_button.get_child())->set_text (panners.short_astyle_string(_route->panner().automation_style())); ++ ((Gtk::Label*)panners.pan_automation_state_button.get_child())->set_text (panners.short_astate_string(_route->panner().automation_state())); ++ } + Gtkmm2ext::set_size_request_to_display_given_text (name_button, "longest label", 2, 2); + set_size_request (max (50, gpm.get_gm_width()), -1); + break; +@@ -796,7 +818,9 @@ MixerStrip::update_input_display () + break; + } + } +- panners.setup_pan (); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ panners.setup_pan (); ++ } + } + + void +@@ -818,7 +842,9 @@ MixerStrip::update_output_display () + } + + gpm.setup_meters (); +- panners.setup_pan (); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ panners.setup_pan (); ++ } + } + + void +@@ -1214,13 +1240,17 @@ MixerStrip::map_frozen () + if (at) { + switch (at->freeze_state()) { + case AudioTrack::Frozen: +- pre_redirect_box.set_sensitive (false); +- post_redirect_box.set_sensitive (false); ++ pre_redirect_box.set_sensitive (false); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ post_redirect_box.set_sensitive (false); ++ } + speed_spinner.set_sensitive (false); + break; + default: +- pre_redirect_box.set_sensitive (true); +- post_redirect_box.set_sensitive (true); ++ pre_redirect_box.set_sensitive (true); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ post_redirect_box.set_sensitive (true); ++ } + speed_spinner.set_sensitive (true); + // XXX need some way, maybe, to retoggle redirect editors + break; +diff --git a/gtk2_ardour/opts.cc b/gtk2_ardour/opts.cc +index 2814f12..28a4d5f 100644 +--- a/gtk2_ardour/opts.cc ++++ b/gtk2_ardour/opts.cc +@@ -41,6 +41,7 @@ bool ARDOUR_COMMAND_LINE::try_hw_optimization = true; + Glib::ustring ARDOUR_COMMAND_LINE::keybindings_path = ""; /* empty means use builtin default */ + Glib::ustring ARDOUR_COMMAND_LINE::menus_file = "ardour.menus"; + bool ARDOUR_COMMAND_LINE::finder_invoked_ardour = false; ++bool ARDOUR_COMMAND_LINE::ardourino = false; + + using namespace ARDOUR_COMMAND_LINE; + +@@ -64,6 +65,7 @@ print_help (const char *execname) + << _(" [session-name] Name of session to load\n") + << _(" -C, --curvetest filename Curve algorithm debugger\n") + << _(" -k, --keybindings filename Name of key bindings to load (default is ~/.ardour2/ardour.bindings)\n") ++ << _(" -a, --ardourino Fit on screens with 800x600 resolution\n") + ; + return 1; + +@@ -99,6 +101,7 @@ ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[]) + { "sync", 0, 0, 'S' }, + { "curvetest", 1, 0, 'C' }, + { "sillyAppleUndocumentedFinderFeature", 1, 0, 'p' }, ++ { "ardourino", 0, 0, 'a' }, + { 0, 0, 0, 0 } + }; + +@@ -177,6 +180,10 @@ ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[]) + keybindings_path = optarg; + break; + ++ case 'a': ++ ardourino = true; ++ break; ++ + default: + return print_help(execname); + } +diff --git a/gtk2_ardour/opts.h b/gtk2_ardour/opts.h +index efa2656..d5fbc9b 100644 +--- a/gtk2_ardour/opts.h ++++ b/gtk2_ardour/opts.h +@@ -36,6 +36,7 @@ extern char* curvetest_file; + extern bool try_hw_optimization; + extern bool use_gtk_theme; + extern Glib::ustring keybindings_path; ++extern bool ardourino; + extern Glib::ustring menus_file; + extern bool finder_invoked_ardour; + +diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc +index e1481a1..e1bb71b 100644 +--- a/gtk2_ardour/sfdb_ui.cc ++++ b/gtk2_ardour/sfdb_ui.cc +@@ -53,6 +53,7 @@ + #include "editing.h" + #include "utils.h" + #include "gain_meter.h" ++#include "opts.h" + + #ifdef FREESOUND + #include "sfdb_freesound_mootcher.h" +@@ -422,7 +423,9 @@ SoundFileBrowser::SoundFileBrowser (Gtk::Window& parent, string title, ARDOUR::S + chooser.add_filter (custom_filter); + chooser.add_filter (matchall_filter); + chooser.set_select_multiple (true); +- chooser.signal_update_preview().connect(mem_fun(*this, &SoundFileBrowser::update_preview)); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ chooser.signal_update_preview().connect(mem_fun(*this, &SoundFileBrowser::update_preview)); ++ } + chooser.signal_file_activated().connect (mem_fun (*this, &SoundFileBrowser::chooser_file_activated)); + + if (!persistent_folder.empty()) { +@@ -433,7 +436,9 @@ SoundFileBrowser::SoundFileBrowser (Gtk::Window& parent, string title, ARDOUR::S + + hpacker.set_spacing (6); + hpacker.pack_start (notebook, true, true); +- hpacker.pack_start (preview, false, false); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ hpacker.pack_start (preview, false, false); ++ } + + get_vbox()->pack_start (hpacker, true, true); + +@@ -569,7 +574,9 @@ void + SoundFileBrowser::set_session (Session* s) + { + ArdourDialog::set_session (s); +- preview.set_session (s); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ preview.set_session (s); ++ } + if (s) { + add_gain_meter (); + } else { +@@ -634,6 +641,9 @@ SoundFileBrowser::on_custom (const FileFilter::Info& filter_info) + void + SoundFileBrowser::update_preview () + { ++ if (ARDOUR_COMMAND_LINE::ardourino) { ++ return; ++ } + if (preview.setup_labels (chooser.get_filename())) { + if (preview.autoplay()) { + Glib::signal_idle().connect (mem_fun (preview, &SoundFileBox::audition_oneshot)); +@@ -660,7 +670,9 @@ SoundFileBrowser::found_list_view_selected () + set_response_sensitive (RESPONSE_OK, false); + } + +- preview.setup_labels (file); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ preview.setup_labels (file); ++ } + } + } + +@@ -683,7 +695,9 @@ SoundFileBrowser::freesound_list_view_selected () + set_response_sensitive (RESPONSE_OK, false); + } + +- preview.setup_labels (file); ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ preview.setup_labels (file); ++ } + } + } + +@@ -1240,29 +1254,30 @@ SoundFileOmega::SoundFileOmega (Gtk::Window& parent, string title, ARDOUR::Sessi + channel_combo.set_active_text (str.front()); + channel_combo.set_sensitive (false); + +- l = manage (new Label); +- l->set_text (_("Conversion Quality:")); +- +- hbox = manage (new HBox); +- hbox->set_border_width (12); +- hbox->set_spacing (6); +- hbox->pack_start (*l, false, false); +- hbox->pack_start (src_combo, false, false); +- vbox = manage (new VBox); +- vbox->pack_start (*hbox, false, false); +- options.pack_start (*vbox, false, false); +- +- str.clear (); +- str.push_back (_("Best")); +- str.push_back (_("Good")); +- str.push_back (_("Quick")); +- str.push_back (_("Fast")); +- str.push_back (_("Fastest")); +- +- set_popdown_strings (src_combo, str); +- src_combo.set_active_text (str.front()); +- src_combo.set_sensitive (false); +- ++ if (!ARDOUR_COMMAND_LINE::ardourino) { ++ l = manage (new Label); ++ l->set_text (_("Conversion Quality:")); ++ ++ hbox = manage (new HBox); ++ hbox->set_border_width (12); ++ hbox->set_spacing (6); ++ hbox->pack_start (*l, false, false); ++ hbox->pack_start (src_combo, false, false); ++ vbox = manage (new VBox); ++ vbox->pack_start (*hbox, false, false); ++ options.pack_start (*vbox, false, false); ++ ++ str.clear (); ++ str.push_back (_("Best")); ++ str.push_back (_("Good")); ++ str.push_back (_("Quick")); ++ str.push_back (_("Fast")); ++ str.push_back (_("Fastest")); ++ ++ set_popdown_strings (src_combo, str); ++ src_combo.set_active_text (str.front()); ++ src_combo.set_sensitive (false); ++ } + reset_options (); + + action_combo.signal_changed().connect (mem_fun (*this, &SoundFileOmega::reset_options_noret)); --- ardour-2.8.2.orig/debian/patches/70_DARCH.patch +++ ardour-2.8.2/debian/patches/70_DARCH.patch @@ -0,0 +1,14 @@ +--- a/SConstruct.orig 2007-07-03 22:14:08.000000000 +0200 ++++ b/SConstruct 2007-07-03 22:12:40.000000000 +0200 +@@ -601,8 +601,9 @@ + + build_host_supports_sse = 0 + +- debug_flags.append ("-DARCH_X86") +- opt_flags.append ("-DARCH_X86") ++ if (re.search ("i[0-9]86", config[config_cpu]) != None): ++ debug_flags.append ("-DARCH_X86") ++ opt_flags.append ("-DARCH_X86") + + if config[config_kernel] == 'linux' : + --- ardour-2.8.2.orig/debian/patches/60-libdir.patch +++ ardour-2.8.2/debian/patches/60-libdir.patch @@ -0,0 +1,11 @@ +--- a/SConstruct.orig 2007-05-11 20:28:39.000000000 +0200 ++++ b/SConstruct 2007-05-11 20:28:54.000000000 +0200 +@@ -647,7 +647,7 @@ + # handle x86/x86_64 libdir properly + + if env['DIST_TARGET'] == 'x86_64': +- env['LIBDIR']='lib64' ++ env['LIBDIR']='lib' + else: + env['LIBDIR']='lib' + --- ardour-2.8.2.orig/debian/patches/s390-FTBFS.patch +++ ardour-2.8.2/debian/patches/s390-FTBFS.patch @@ -0,0 +1,404 @@ +--- ardour-2.4.1.orig/gtk2_ardour/editing.h ++++ ardour-2.4.1/gtk2_ardour/editing.h +@@ -21,6 +21,7 @@ + #define __gtk_ardour_editing_h__ + + #include ++#include + #include + #include + +only in patch2: +unchanged: +--- ardour-2.4.1.orig/gtk2_ardour/fft_result.cc ++++ ardour-2.4.1/gtk2_ardour/fft_result.cc +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + #include + + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/gtk2_ardour/actions.cc ++++ ardour-2.4.1/gtk2_ardour/actions.cc +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/gtkmm2/gtk/gtkmm/targetentry.cc ++++ ardour-2.4.1/libs/gtkmm2/gtk/gtkmm/targetentry.cc +@@ -22,6 +22,7 @@ + + #include + ++#include + + namespace Gtk + { +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/gtkmm2/gtk/gtkmm/scale.cc ++++ ardour-2.4.1/libs/gtkmm2/gtk/gtkmm/scale.cc +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + + namespace Gtk + { +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/midi++2/midichannel.cc ++++ ardour-2.4.1/libs/midi++2/midichannel.cc +@@ -18,6 +18,8 @@ + $Id: midichannel.cc 4 2005-05-13 20:47:18Z taybin $ + */ + ++#include ++ + #include + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/midi++2/mtc.cc ++++ ardour-2.4.1/libs/midi++2/mtc.cc +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/midi++2/midiparser.cc ++++ ardour-2.4.1/libs/midi++2/midiparser.cc +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include + #include + +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/midi++2/fd_midiport.cc ++++ ardour-2.4.1/libs/midi++2/fd_midiport.cc +@@ -20,6 +20,7 @@ + + #include + #include ++#include + + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/midi++2/midi.cc ++++ ardour-2.4.1/libs/midi++2/midi.cc +@@ -19,6 +19,7 @@ + */ + + #include ++#include + #include + #include + +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/ardour/utils.cc ++++ ardour-2.4.1/libs/ardour/utils.cc +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/ardour/sndfilesource.cc ++++ ardour-2.4.1/libs/ardour/sndfilesource.cc +@@ -19,6 +19,7 @@ + + #include + #include ++#include + + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/ardour/audioanalyser.cc ++++ ardour-2.4.1/libs/ardour/audioanalyser.cc +@@ -1,3 +1,5 @@ ++#include ++ + #include + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/ardour/recent_sessions.cc ++++ ardour-2.4.1/libs/ardour/recent_sessions.cc +@@ -18,6 +18,7 @@ + */ + + #include ++#include + #include + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/ardour/ardour/silentfilesource.h ++++ ardour-2.4.1/libs/ardour/ardour/silentfilesource.h +@@ -20,6 +20,8 @@ + #ifndef __ardour_silentfilesource_h__ + #define __ardour_silentfilesource_h__ + ++#include ++ + #include + + namespace ARDOUR { +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/ardour/ardour/buffer.h ++++ ardour-2.4.1/libs/ardour/ardour/buffer.h +@@ -21,6 +21,7 @@ + + #define _XOPEN_SOURCE 600 + #include // for posix_memalign ++#include + #include + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/ardour/ardour/port.h ++++ ardour-2.4.1/libs/ardour/ardour/port.h +@@ -20,6 +20,7 @@ + #ifndef __ardour_port_h__ + #define __ardour_port_h__ + ++#include + #include + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/pbd/pool.cc ++++ ardour-2.4.1/libs/pbd/pool.cc +@@ -20,6 +20,7 @@ + + #include + #include ++#include + + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/pbd/pathscanner.cc ++++ ardour-2.4.1/libs/pbd/pathscanner.cc +@@ -20,6 +20,7 @@ + + #include + #include ++#include + #include + #include + +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/pbd/base_ui.cc ++++ ardour-2.4.1/libs/pbd/base_ui.cc +@@ -22,6 +22,8 @@ + #include + #include + ++#include ++ + #include + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/pbd/mountpoint.cc ++++ ardour-2.4.1/libs/pbd/mountpoint.cc +@@ -19,6 +19,7 @@ + */ + + #include ++#include + #include + #include + +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/pbd/pbd/ringbuffer.h ++++ ardour-2.4.1/libs/pbd/pbd/ringbuffer.h +@@ -20,6 +20,8 @@ + #ifndef ringbuffer_h + #define ringbuffer_h + ++#include ++ + #include + + template +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/vamp-sdk/vamp-sdk/PluginAdapter.cpp ++++ ardour-2.4.1/libs/vamp-sdk/vamp-sdk/PluginAdapter.cpp +@@ -37,7 +37,8 @@ + #include "PluginAdapter.h" + + //#define DEBUG_PLUGIN_ADAPTER 1 +- ++#include ++#include + + namespace Vamp { + +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/vamp-sdk/vamp-sdk/PluginHostAdapter.cpp ++++ ardour-2.4.1/libs/vamp-sdk/vamp-sdk/PluginHostAdapter.cpp +@@ -34,6 +34,8 @@ + authorization. + */ + ++#include ++ + #include "PluginHostAdapter.h" + + namespace Vamp +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/vamp-sdk/vamp-sdk/hostext/PluginLoader.cpp ++++ ardour-2.4.1/libs/vamp-sdk/vamp-sdk/hostext/PluginLoader.cpp +@@ -42,6 +42,7 @@ + + #include + #include // tolower ++#include + + #ifdef _WIN32 + +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/rubberband/src/RingBuffer.h ++++ ardour-2.4.1/libs/rubberband/src/RingBuffer.h +@@ -15,6 +15,7 @@ + #ifndef _RUBBERBAND_RINGBUFFER_H_ + #define _RUBBERBAND_RINGBUFFER_H_ + ++#include + #include + + #ifndef _WIN32 +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/rubberband/src/Thread.cpp ++++ ardour-2.4.1/libs/rubberband/src/Thread.cpp +@@ -23,6 +23,8 @@ + //#define DEBUG_MUTEX 1 + //#define DEBUG_CONDITION 1 + ++#include ++ + using std::cerr; + using std::endl; + using std::string; +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/rubberband/src/main.cpp ++++ ardour-2.4.1/libs/rubberband/src/main.cpp +@@ -16,6 +16,8 @@ + + #include + #include ++#include ++#include + #include + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/rubberband/src/StretchCalculator.cpp ++++ ardour-2.4.1/libs/rubberband/src/StretchCalculator.cpp +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + namespace RubberBand + { +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/rubberband/src/FFT.cpp ++++ ardour-2.4.1/libs/rubberband/src/FFT.cpp +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + #include + + namespace RubberBand { +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/rubberband/src/Window.h ++++ ardour-2.4.1/libs/rubberband/src/Window.h +@@ -16,6 +16,7 @@ + #define _RUBBERBAND_WINDOW_H_ + + #include ++#include + #include + #include + +only in patch2: +unchanged: +--- ardour-2.4.1.orig/libs/glibmm2/glibmm/propertyproxy_base.cc ++++ ardour-2.4.1/libs/glibmm2/glibmm/propertyproxy_base.cc +@@ -20,6 +20,8 @@ + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + ++#include ++ + #include + #include + #include +only in patch2: +unchanged: +--- ardour-2.4.1/libs/sigc++2/sigc++/signal.h ++++ ardour-2.4.1.orig/libs/sigc++2/sigc++/signal.h +@@ -16,7 +16,7 @@ + #ifdef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + //Compilers, such as SUN Forte C++, that do not allow this also often + //do not allow a typedef to have the same name as a class in the typedef's definition. +- #define SIGC_TYPEDEF_REDEFINE_ALLOWED 1 ++ //#define SIGC_TYPEDEF_REDEFINE_ALLOWED 1 + #endif + + namespace sigc { +reverted: