--- 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