Commits

olivierg  committed 6c89a76

migrating jackbeat r704 from subversion to mercurial

  • Participants

Comments (0)

Files changed (163)

+Olivier Guilyardi <olivier {at} samalyse {dot} com>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+jackbeat (0.7.6)
+    * #61: fix compiling on recent x86_64 Linux systems such as Fedora 13
+    * do not try and connect to PulseAudio by default, it may deadlock
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Wed, 08 Sep 2010 16:31:42 +0200
+
+jackbeat (0.7.5)
+    * #47: fix startup crash with gtk >= 2.19 caused by new GtkBuilder widget name
+      handling
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Sun, 25 Apr 2010 01:57:23 +0200
+
+jackbeat (0.7.4)
+    * #43: fix buffer overflow in sample file filter building routine
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Sun, 29 Nov 2009 18:29:40 +0100
+
+jackbeat (0.7.3)
+    * #40: allow to reorder tracks (move up/down)
+    * #43: fix buffer overflow in core messaging routine
+    * fix bogus track name conflict when loading jab, thanks Florent
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Mon, 23 Nov 2009 20:48:45 +0100
+
+jackbeat (0.7.2)
+    * #14: add filters in file dialogs
+    * #18: add track solo controls
+    * #37: fix opening jab files whose path contains spaces
+    * #39: fix conflict between single-letter shortcuts and UI input
+    * win32 support: now cross-compiles on Linux with mingw32
+    * wipe temporary directories in a more secure manner
+    * fix bogus modified status when changing current track
+    * libtool isn't needed anymore
+    * some consolidation
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Fri, 26 Jun 2009 17:52:05 +0200
+
+jackbeat (0.7.1)
+    * improve volume sliders mouse interaction
+    * add menu entries and shortcuts to quickly increase/decrease track volume
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Fri, 01 May 2009 20:11:54 +0200
+
+jackbeat (0.7.0)
+    * require gtk >= 2.12 (previously 2.6) for proper gtk builder support
+    * liblo is now a required dependency
+    * Portaudio is now a required dependency
+    * JACK/libjack isn't a required dependency anymore, it is now optional
+    * PulseAudio/libpulse is now an optional dependency (recommended on Ubuntu)
+    * #13: gui volume controls are now logarithmic
+    * #15: default resampling quality set to Hi-Fi (SRC_SINC_FASTEST)
+    * #16: fix quit and close dialogs
+    * #20/#21, add OSC support with methods: start, stop, rewind, set_transport,
+      mute_beat, rewind, set_bpm, mute_track, set_track_pitch, set_track_volume, 
+      set_beat, set_track_volume_db
+    * add OSC events: beat_on, beat_off, beat_changed
+    * #26: new layout system, track controls and ruler are now always visible 
+      when scrolling
+    * #27: track buttons sensitivity problem is gone with the new sequence editor
+    * #31: smartly handle jack shutdown, warning the user, allow to reconnect
+    * #32: verify that the process callback is called by JACK after client activation, 
+      otherwise fail sequence creation ; improve activation debugging and error message
+    * #36: add Mac application bundle building scripts
+    * command line: add -o to list the supported OSC methods/events, 
+      -c clientname, remove -p portprefix
+    * add preferences dialog
+    * add OSC preferences, global and per-sequence, with methods and events list
+    * add audio preferences with ability to change output device, disconnect and
+      reconnect 
+    * use libphat knobs for pitch octave, semitone and fine-tune. no more pitch
+      controls in the sequence display
+    * fix some faulty memory access and leaks
+    * new sexy growing volume sliders with wheel scroll support
+    * support compiling against GTK+ OS X (Framework and custom build): now runs
+      on Mac without X11
+    * Mac OS X integration: mac menu, file associations and native file dialogs
+    * export parameters now in an separate dialog
+    * fit initial window size to sequence
+    * build main window structure using glade
+    * use gtk builder instead of glade
+    * use sndfile's sf_command() to retrieve supported audio file extensions 
+    * now using gtk builder signals autoconnect with custom connect func
+    * add bootstrap.sh for easy installation of dependencies ; tested on osx 10.5.6
+    * add --without-jack option to configure
+    * update README
+    * new internal event layer
+    * concurrent threads can now safely access the sequence API
+    * simplify sample garbage collection
+    * changed edit/clear to edit/clear pattern: now only clears the pattern, 
+      not sample or tracks
+    * improve jack connect error message
+    * fix random krash due to memory allocation size error
+    * add about dialog
+    * new driver-based audio stream layer: direct support of JACK, Portaudio, and 
+      PulseAudio. Driver can be changed at runtime. Features an automatic driver 
+      loading mode which is the default.
+    * gui: added sexy track control background, to denote active track
+    * upgrade to libphat r118 (bundled)
+    * gui: new sequence and track properties panels
+    * gui: display sample waveform in track properties, with position animation
+    * gui: add pattern grid ruler, fancy mute button and other visual improvements
+    * gui: sequence editor encapsulation
+    * jab: add minVersion xml tag, and check if the current jackbeat version 
+      is higher than or equal to its value when opening a file. Prepare for 
+      jab BC break in a later release.
+    * now registers a single JACK client for any number of sequences
+    * auto_connect is now a stream-wide setting
+    * core: added thread pool
+    * switched to portaudio's ringbuffer (for memory barriers)
+    * sequence now use its own pool process for processing events coming from 
+      the audio thread: this is faster than the previous mechanism based on a
+      gtk timeout
+    * do not set the track name from the loaded sample filename
+    * validate track names (only letters, digits, underscores, dashes, plus 
+      signs and points)
+    * resampler type is now a global preferences setting
+    * protect all sequence functions against out of bound parameters
+    * gui: add load sample et track rename shortcuts, make active track follow
+      grid pointer, wrap pointer move
+    * grid: scroll if necessary when moving pointer with keyboard
+    * add playback menu, z shortcut for rewind and f2 for renaming track
+    * show/hide cursor on grid focus change, make grid cells fill the available space
+    * grid: add home/end shortcuts
+    * add add/remove track menu entries and shortcuts
+    * grid: use B or return for toggling beat, N for masking
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Wed, 29 Apr 2009 20:55:44 +0200
+
+jackbeat (0.6.3) 
+    * transpose volumes did not work when using phat: fixed
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Thu,  7 Feb 2008 17:36:57 +0100
+
+jackbeat (0.6.2) 
+    * new export parameters: framerate and sustain type
+    * added keyboard-based motion and toggling to the grid
+    * added (optional) support for the Phat Audio Toolkit
+    * switched from GtkFileSelection to GtkFileChooser
+    * remember export directory, export framerate and sustain type 
+    * sustain was randomly played with looping turned off: fixed
+    * properly restore rewind button sensitive-ness on startup
+    * use dots to indicate long filepath in sample history
+    * correctly remember filenames that contain spaces 
+      reported by Nicolai Lissner, nlissne {at} linux01 {dot} gwdg {dot} de
+    * properly handle JACK port registration failure
+    * reorganized gui code, and other code cleanup
+    * stopping sequence before destroying it to avoid random crash
+    * updated TODO, thanks furenku
+    * fix typo and add TODOs, thanks Henrik Bjerregaard Pedersen 
+      <henrikbp {at} vip {dot} cybercity {dot} dk>
+    * updated and converted README to reST
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Thu, 10 Jan 2008 20:56:59 +0100
+
+jackbeat (0.6.1) 
+    * New waveform export feature
+    * Now compiles on 64bit, thanks Detlef <detlef {at} links2linux {dot} de>
+    * Added support for removing a given track
+    * Start/stop playback by pressing space
+    * VU meters now use full color scale according to the sample volume peak
+    * Added a note in README about fine-tuning pitch and volume
+    * Made README's Usage less verbose about track masking
+    * Fixed incorrect jack client name when filename passed on command line
+    * Save the auto-connect setting into the rc file
+    * Use L and R suffixes for JACK ports when a track has 2 channels
+    * Automatically add .jab when saving a sequence
+    * Fixed broken Edit/Clear routine
+    * Fixed random segfault when opening/creating a sequence
+    * Added ability to cancel when loading a sample with a duplicate name
+    * Fixed broken remembering of working directories
+    * Code cleanup/optimization + various fixes
+    * Updated TODO
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Thu,  1 Mar 2007 16:42:53 +0100
+
+jackbeat (0.6) 
+    * New graphical tracks grid display
+    * Use jack ringbuffers instead of message queues for IPC
+    * Added support for Mac OS X 
+    * Remember working directories even if sample or sequence fails to load
+    * Fixed some compiler warnings
+    * SIGSEV Handler: detect the presence of execinfo/ucontext instead of relying 
+      on the i386 target. Updated crash message.
+    * README file: updated the Introduction and improved the Usage section
+    * Removed mask toggle: masking is now always enabled
+    * And others
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Fri, 24 Nov 2006 13:07:19 +0100
+
+jackbeat (0.5.4) 
+    * Added and clarified some error messages. 
+      Thanks Paul Brossier <piem {at} altern {dot} org>
+    * Added Close and Quit menu entries
+    * When launching several Jackbeats, there was a JACK client name conflict:
+      fixed. Thanks Paul Brossier <piem {at} altern {dot} org>
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Sun, 16 Oct 2005 23:07:46 +0200
+
+jackbeat (0.5.3) 
+
+    * Added basic command line options 
+    * Loading a jab or changing the resampler type stopped the playblack :
+      fixed, the beat goes on. Thanks Remy Lalanne <lalanne.remy {at} wanadoo {dot} fr>
+    * The transport type setting wasn't saved : fixed. Thanks Remy
+      Lalanne <lalanne.remy {at} wanadoo {dot} fr>
+    * When reading the sigsev handler message, users were likely to send the
+      backtrace only: fixed that message. Hopefully they will now send the 
+      whole console output.
+
+ -- Olivier Guilyardi <olivier {at} samalyse {dot} com>  Wed, 14 Sep 2005 19:57:49 +0200
+
+jackbeat (0.5.2) 
+
+    * Segfault when changing the pitch on a empty track : fixed, thanks
+      Guillaume Pellerin (http://yomix.org)
+    * The beats animation is very cpu-intensive : increased the refresh
+      period to 1000 ms as a temporary workaround
+    * The SIGSEV handler is not portable : now including it only when
+      compiling on i386. Thanks Paul Brossier (http://piem.org)
+
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Mon, 20 Jun 2005 00:08:24 +0200
+
+jackbeat (0.5.1)
+
+    * Added a SIGSEV handler to dump the backtrace to stdout on crash 
+      (glibc's execinfo)
+    * Samples filename extension were not correctly striped : fixed
+    * Not writing the resampler type into jab files anymore : this setting
+      belongs exclusively to the rc file
+    * wrote a lightweight basic resampler : greatly reduces the cpu load, 
+      performing about 5 times faster than libsamplerate's linear converter
+
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Wed, 18 May 2005 20:24:49 +0200
+
+jackbeat (0.5.0)
+
+    * Added pitch and volume controls
+    * Rewrote the sample history
+    * Masking beats might produce clicks : added an attack/release envelope
+    * Now converting sample rate in realtime instead of doing it when
+      loading a sample
+    * The song was not marked as modified when (un)muting a track, neither
+      when enabling/disabling a mask : fixed
+    * Muting/unmuting a track is now wrapped by a an attack/release envelope
+      (as masking) to avoid clicks
+    * Sometimes tryed to highlight an unexistent beat, segfault'ing : fixed 
+    * Added standalone Mute buttons.
+    * Changed the "Play" button into Play and Pause icons
+    * Added a Rewind button
+    * Now require GTK >= 2.6 (was >= 2.0)
+    * Added an option to select the converter type to be used by libsamplerate
+    * Fixed a bug with the XML description generation : float numbers (bpm, 
+      pitch, volume, etc..) were written in a locale-sensitive manner, which 
+      either wrote points or commas. Now always using the C locale internally.
+    * Added a volume "transposer" feature : acts as a pseudo-master,
+      transposing all tracks volumes by a given percentage
+    * New "Smoothing" feature : a sample starting over itself might produce a
+      click. This feature uses a short envelope to kindly stop the sample 
+      before its gets started again.  It is enabled by default on all tracks.
+
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Tue,  3 May 2005 15:52:31 +0200
+
+jackbeat (0.4.3)
+
+    * New track-masking feature : allows to insert silences into a track, as 
+      requested by Guillaume Pellerin (http://yomix.org)
+    * When loading the same sample on several tracks, these tracks were
+      automatically assigned identical names, which caused Jack ports to 
+      conflict : a dialog now opens, asking for an alternate name. Additionally, 
+      it is possible to rename tracks at any time
+    * Serious bug which left temporary data into /tmp everytime a jab file was
+      loaded, including extracted sample files : corrected
+    * And a few cosmetic fixes
+
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Tue, 12 Apr 2005 22:20:23 +0200
+ 
+jackbeat (0.4.2)
+
+    * Support for sample rate conversion when loading samples, to match 
+      Jack's framerate : added, using libsamplerate's best converter
+    * Progress bars when loading/saving samples/sequences : added, in a modal
+      window
+    * Some variables names in sample loading routines were obscure : clarified
+    * Unused samples were not cleant up : fixed, now freeing associated memory
+    * With Jack already rolling, lauching Jackbeat produced some noise : fixed
+    * Muting/unmuting a track often failed due to an IPC bug : squashed
+
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Wed, 30 Mar 2005 19:51:02 +0200
+
+jackbeat (0.4.1)
+
+    * Tracks/beats spin buttons where randomly stepping by 1 or 2 : fixed
+    * gcc was passed the -g option by default : suppressed. The binary size 
+      droped from 530 to 80 kb. For debugging informations, run 
+      "export CFLAGS=-g" before "./configure"
+
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Wed, 16 Mar 2005 18:33:53 +0100
+
+jackbeat (0.4.0)
+
+    * When unsetting the active beat on a given track, the sample continued 
+      playing. With an empty track, a long sample would then play entirely, 
+      which is quite pointless : Unsetting an active beat now stops the track
+    * New "Double" feature : duplicate the sequence, copying beats
+    * Pattern nesting code was a nightmare : wiped out
+    * .jackbeat directory was not properly created : fixed
+    * Freeing unallocated pointers at shutdown : fixed
+    * Samples working directory wasn't saved at shutdown : fixed
+    * README file : corrected and updated
+      
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Fri,  4 Mar 2005 15:05:16 +0100
+
+jackbeat (0.3.3)
+
+    * Looping couldn't be turned off : fixed
+    * Experimental code for pattern nesting is very krash-prone : hidden until
+    it gets better
+
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Sun, 20 Feb 2005 20:09:42 +0100
+
+jackbeat (0.3.2)
+
+    * Loading and saving song got rewritten : a new format is now implemented.
+      It stores metadata in an XML file, and samples as separate files in
+      a subdirectory. All that is then packed in a tar archive. 
+    * The above feature adds a new requirement : libxml2 (http://xmlsoft.org)
+    
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Wed,  6 Oct 2004 01:10:27 +0200
+
+jackbeat (0.3.1)
+
+    * ftok() was passed the content of argv[0] (program name) as pathname.
+      That easily failed : fixed. Thanks Leito <leito69 {at} yahoo {dot} com>
+
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Fri, 20 Aug 2004 14:17:18 +0200
+
+jackbeat (0.3.0)
+
+    * Note : This is a fork from version 0.2, so it does not include the
+      bugfixes of the subsequent 0.2 serie (0.2.1,  ...). 80% of 
+      the code has been rewritten, so changes are countless. I won't
+      enumerate them in here. This version is a development release,
+      with (enjoy ;-) broken features and high unstability.
+    * TODO file : that is the main new feature :-) Please contribute.  
+    * Improved the visual effect while playing : now beats are highlighted
+      according to the sample duration
+   
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Mon, 16 Aug 2004 21:08:02 +0200
+ 
+jackbeat (0.2)
+
+    * The first frames of samples where almost never played : fixed
+    * Added support for JACK transport control (start, stop, and frame position)
+    * While playing, loading a sample always caused it to be played once:fixed
+    * Added a highlight effect to follow the sequence progress
+    * Changing the bpm rate when playing sometimes resulted in a
+      segfault : fixed
+      
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Sat, 26 Jun 2004 15:11:44 +0200
+
+jackbeat (0.1)
+
+    * Initial release
+
+ -- Olivier Guilyardi <olivier {at} xung {dot} org>  Thu, 24 Jun 2004 01:49:04 +0200
+
+SUBDIRS = src pkgdata
+=============
+Jackbeat News
+=============
+
+New release: 0.7.6
+==================
+
+- A issue which prevented Jackbeat to compile on recent 64bit Linux systems
+  has been fixed. This affected Fedora 13, Ubuntu 10.10, Arch Linux and 
+  possibly others.
+- Jackbeat doesn't try and connect to PulseAudio by default anymore, since this
+  may hang on certain systems. The PulseAudio output driver must be explicitly
+  selected in the preferences.
+
+Olivier Guilyardi - September 8th, 2010
+
+New release: 0.7.5
+==================
+
+- A critical compatibility issue with gtk >= 2.19 has been fixed
+
+Olivier Guilyardi - April 25th, 2010
+
+New release: 0.7.4
+==================
+
+- A bug which may prevent to load samples have been fixed
+
+Olivier Guilyardi - November 29rd, 2009
+
+------------------------------------------------------------------------
+
+New release: 0.7.3
+==================
+
+- Tracks can now be reordered
+- A buffer overflow and a bug preventing to load some jab files have been fixed
+
+Olivier Guilyardi - November 23rd, 2009
+
+------------------------------------------------------------------------
+
+New release: 0.7.2
+==================
+
+- Jackbeat now runs on Windows in addition to Mac OS X and Linux
+- Track solo controls have been added, OSC bindings included
+- Minor file access and user interface bugs have been fixed
+
+Olivier Guilyardi - June 26th, 2009
+
+------------------------------------------------------------------------
+
+New release: 0.7.0
+==================
+
+- The GUI has been re-designed for the pleasure of the eye and more ergonomy
+- New shortcuts, knobs and waveform animation bring more interactivity
+- OSC is now supported with a fair amount of methods and events
+- Mac OS X integration has been much improved
+- ALSA, CoreAudio and PulseAudio are now directly supported in addition to JACK
+- Several bugs and usability issues have been fixed
+- The internal architecture has been improved
+
+Olivier Guilyardi - April 29th, 2009
+
+------------------------------------------------------------------------
+
+New release: 0.6.2
+==================
+
+- The export framerate and sustain handling can now be customized
+- The pattern can be edited using the keyboard
+- The GUI has been improved and fixed
+- Optional support for the Phat Audio Toolkit is available
+- Some audio processing and JACK issues have been fixed
+- Simple drum kits are now available from Jackbeat's homepage
+
+Olivier Guilyardi - January 10th, 2008
+
+------------------------------------------------------------------------
+
+New release: 0.6.1
+==================
+
+- The sequence can now be exported as a WAV file
+- The intel 64bit platform is supported
+- VU meters now use full color scale
+- The user interface has been improved and several issues fixed
+- The code has been optimized and some random krash fixed
+
+Olivier Guilyardi - March 1st, 2007
+
+------------------------------------------------------------------------
+
+New release: 0.6
+================
+
+- The drummachine interface is more interactive and features VU meters
+- The JACK realtime thread now uses ringbuffers, for syscall-free operation 
+- Support for Mac OS X is now complete
+- Various other minor issues have been fixed
+- Jackbeat is now available through Subversion
+
+Olivier Guilyardi - November 24th, 2006
+
+------------------------------------------------------------------------
+
+New release: 0.5.4
+==================
+
+- The JACK client name handling has been improved
+- Errors are now better detected and reported
+- Usability has been slightly improved
+
+Olivier Guilyardi - October 20th, 2005
+
+------------------------------------------------------------------------
+
+New release: 0.5.3 
+==================
+
+- A set of basic command line options is now supported
+- A few bugs that disturbed the user experience were fixed
+- The debugging output was slightly improved
+
+Olivier Guilyardi - September 14th, 2005
+
+------------------------------------------------------------------------
+
+New release: 0.5.2 
+==================
+
+- A ennoying bug that forbade jab files containing empty tracks to load
+  has been fixed.
+- The helpful segfault handler is unfortunately not very portable,
+  it has caused troubles on the powerpc and is now only included when
+  compiling on the i386 architecture.
+- The current graphical animation which is heavy due to a design problem,
+  is now refreshed at a much lower rate, as a cpu-friendly workaround.
+
+Olivier Guilyardi - June 20th, 2005
+
+------------------------------------------------------------------------
+===============================
+Jackbeat - Audio Sequencer
+===============================
+
+Introduction
+============
+
+Jackbeat is an audio sequencer running on Linux and Mac OS X, for musicians 
+and sound artists:
+
+* Drummachine interface with animations for easy and playful editing
+* Built for both composition and live setups with high interactivity needs
+* Extremely easy to use but yet powerful by connecting with other 
+  applications and plugins using JACK and OSC
+* Loads and saves .jab files, Jackbeat's xml+tar open file format
+* Supports native audio devices, PulseAudio and JACK
+
+Requirements
+============
+
+Required dependencies
+~~~~~~~~~~~~~~~~~~~~~
+
+* PortAudio (http://www.portaudio.com/)
+
+* Linux only: libasound (http://www.alsa-project.org)
+
+* GTK+-2.0 (gtk.org)
+
+* libsndfile (www.mega-nerd.com/libsndfile)
+
+* libxml2 (http://xmlsoft.org)
+
+* libsamplerate (http://www.mega-nerd.com/SRC)
+
+* liblo (http://liblo.sourceforge.net)
+
+Optional dependencies
+~~~~~~~~~~~~~~~~~~~~~
+
+* JACK, the Jack Audio Connection Kit (http://jackaudio.org) : a running server
+  as well as the API header files. Mac OS X users should see 
+  http://www.jackosx.com
+
+* PulseAudio (http://www.pulseaudio.org)
+
+Installation
+============
+
+Jackbeat uses autoconf and automake, so you should just need to type:: 
+
+    ./configure
+    make 
+    make install
+
+This should be straightforward on Linux. 
+
+For Mac OS X please check:
+http://jackbeat.samalyse.org/wiki/MacInstallation
+
+For Windows please see:
+http://jackbeat.samalyse.org/browser/trunk/mingw/README
+
+Developer/maintainer mode
+=========================
+
+If you want to compile Jackbeat and run it without installation, you
+need to::
+
+    ./configure --enable-devmode
+    make
+    # run jackbeat from the current directory:
+    src/jackbeat
+
+Usage
+=====
+
+Jackbeat is pretty simple to use. Browse through the main menu, it is meant to
+be quite obvious. The Sequence and Track buttons at the bottom of the window
+open the corresponding properties panel where you'll find convenient functions.
+
+To begin, just a load a few samples using the track panel properties or the edit menu. 
+Then by toggling some of the buttons on the drummachine and clicking Play you shall 
+hear some music. Well... hopefully ;)
+
+Notes about export parameters
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When you export the current sequence as a WAV file, you are given a choice
+about how to handle samples that continue playing passed the end of the sequence:
+
+  - loop: mix at the beginning. This is optimal for playing the exported
+    WAV file as a loop in some external software.
+  - truncate: don't play at all. This will sound like the initial sequence
+    playback, before it has looped at least once.
+  - keep: continue playing samples until they terminate. Beware that the
+    exported file may thus be (much) longer than the sequence.
+
+The double function
+~~~~~~~~~~~~~~~~~~~
+
+Available in the Edit menu, Double increases the beats number by a factor of 2, 
+and duplicates the beats data. This feature allows you to increase your workspace 
+size, while keeping the output unchanged.
+
+About track masking
+~~~~~~~~~~~~~~~~~~~
+
+Track masks allow you to insert silences into a track interactively.
+  
+Use Shift-Click (or press N) to toggle the mask for a given beat. The corresponding track 
+will then get muted during the duration of that beat. 
+
+Keyboard shortcuts
+~~~~~~~~~~~~~~~~~~
+
+You can learn about most of the keyboard shortcuts by looking at the main menu.
+
+There also are a few pattern editing shortcuts:
+
+- B or <return>: toggle beat
+- N: toggle mask
+- <up>/<down>/<right>/<left>/<home>/<end> : move
+
+Feedback and Support
+====================
+
+Please give me some feedback. Tell me if Jackbeat inspires you. 
+
+For user support, mailing list and bug reports please see:
+http://jackbeat.samalyse.org/wiki/UserSupport
+
+You may also send me links to your musical productions so that I can include 
+them on the musical examples page at: 
+http://jackbeat.samalyse.org/wiki/MusicExamples
+
+Contact
+=======
+
+Home page : http://jackbeat.samalyse.org
+
+Olivier Guilyardi <olivier {at} samalyse {dot} com>
+
+ 
+#!/bin/sh
+
+aclocal $@ \
+&& autoheader \
+&& automake --force --gnu --add-missing \
+&& autoconf

File bootstrap-libs.sh

+#!/bin/bash
+
+# This script downloads, builds and install Jackbeat's dependencies  
+# into ./local-libs or into ./local-libs-mingw if you pass "mingw" as first
+# argument. When bootstraping for mingw, gtk is downloaded automatically,
+# but on other targets you must install gtk manually.
+
+if [ "$1" == "mingw" ]
+then
+    TARGET=mingw
+    TARGET_DIR=$(pwd)/local-libs-mingw
+else
+    TARGET=posix
+    TARGET_DIR=$(pwd)/local-libs
+fi
+
+if [ -n "$2" ]
+then
+    ONLY="$2"
+else
+    ONLY=""
+fi
+
+if wget --version 2> /dev/null | grep Wget > /dev/null
+then
+    DOWNLOAD="wget -O"
+else
+    DOWNLOAD="curl -o"
+fi
+
+ROOT=$(pwd)
+
+function cleanup
+{
+    rm -f $TARGET_DIR/download/*
+}
+
+function info
+{
+    printf "\n\x1B[32m$1\x1B[0m\n\n"
+}
+
+function error
+{
+    printf "\n\x1B[31mERROR: $1\x1B[0m\n\n"
+    cleanup
+    exit 1
+}
+
+function init_dir
+{
+    if ! [ -f $1 ]
+    then
+        mkdir -p $1 || error "Can't create directory $1"
+    fi
+}
+
+function install_package
+{
+    pkg=$1
+
+    if [ -z $ONLY ] || echo "$pkg" | grep "$ONLY" > /dev/null
+    then
+        remote=$2
+        src_dir="$3"
+        opts="$4"
+        if [ -z "$src_dir" ]
+        then
+            src_dir=$pkg
+        fi
+        file=$pkg.tar.gz
+        prefix=$TARGET_DIR/build
+        info "Downloading $pkg"
+        $DOWNLOAD $TARGET_DIR/download/$file $remote/$file || error "Failed to download $pkg"
+        tar -xzvf $TARGET_DIR/download/$file -C $TARGET_DIR/src
+        cd $TARGET_DIR/src/$src_dir || error "Couldn't change to directory $TARGET_DIR/src/$src_dir"
+        info "Configuring $pkg"
+        if [ $TARGET == "mingw" ]
+        then
+            host="--host=i586-mingw32msvc"
+        else
+            host=""
+        fi
+        ./configure --prefix=$prefix $host $opts || error "Failed to configure $pkg"
+        info "Building $pkg"
+        make -j2 || error "Failed to build $pkg"
+        make install || error "Failed to install $pkg (prefix: $prefix)"
+    else
+        info "Skipping $pkg"
+    fi
+}
+
+function install_portaudio
+{
+    if [ -z $ONLY ] || [ $ONLY == "portaudio" ]
+    then
+        if [ $TARGET != "mingw" ]
+        then
+            if [ $ONLY == "portaudio" ]; then ONLY=pa_stable; fi
+            install_package pa_stable_v19_20071207  http://www.portaudio.com/archives portaudio
+        else
+            info "Building Asio"
+            cd $ROOT
+            asio_dir=$TARGET_DIR/src/ASIOSDK2
+            cp mingw/Makefile.asio $asio_dir/Makefile
+            cd $asio_dir
+            make
+
+            info "Downloading DirectX"
+            $DOWNLOAD $TARGET_DIR/download/DirectX90c.DevPak http://www.g-productions.net/files/devpak/DirectX90c.DevPak
+            tar -xjvf $TARGET_DIR/download/DirectX90c.DevPak -C $TARGET_DIR/src
+            rmdir $TARGET_DIR/src/DirectX90c\\*  # To delete some created windows style dirs
+
+            info "Downloading Portaudio"
+            $DOWNLOAD $TARGET_DIR/download/pa_stable_v19_061121.tar.gz http://www.portaudio.com/archives/pa_stable_v19_061121.tar.gz
+            rm -rf $TARGET_DIR/src/portaudio
+            tar -xzvf $TARGET_DIR/download/pa_stable_v19_061121.tar.gz -C $TARGET_DIR/src
+
+            info "Patching Portaudio"
+            cd $TARGET_DIR/src/portaudio
+            patch -p1 < ../../../mingw/portaudio-v19_061121.diff
+
+            info "Preparing Portaudio SConstruct'ion"
+            cd $ROOT
+            cp mingw/portaudio.SConstruct $TARGET_DIR/src/portaudio/SConstruct.crossmingw
+            cd $TARGET_DIR/src/portaudio
+            $DOWNLOAD crossmingw.py http://iua-share.upf.edu/svn/clam/trunk/CLAM/scons/sconstools/crossmingw.py
+
+            info "Building Portaudio"
+            scons -f SConstruct.crossmingw install prefix=$TARGET_DIR/build
+
+            info "Generating Portaudio .pc file"
+            pc=$TARGET_DIR/build/lib/pkgconfig/portaudio-2.0.pc
+            cp "portaudio-2.0.pc.in" $pc
+            sed -i "s#@prefix@#$TARGET_DIR/build#" $pc
+            sed -i 's#@exec_prefix@#${prefix}#' $pc
+            sed -i 's#@libdir@#${exec_prefix}/lib#' $pc
+            sed -i 's#@includedir@#${prefix}/include#' $pc
+            sed -i 's#@.*@##' $pc
+        fi
+    else
+        info "Skipping portaudio"
+    fi
+}
+
+init_dir $TARGET_DIR/download
+init_dir $TARGET_DIR/src
+init_dir $TARGET_DIR/build/lib
+init_dir $TARGET_DIR/build/include
+
+cleanup
+
+if [ "$TARGET" != "mingw" ]
+then
+	install_package pkg-config-0.23 http://pkgconfig.freedesktop.org/releases
+	export PATH=$PATH:$TARGET_DIR/build/bin
+else
+    if [ -z $ONLY ] || [ $ONLY == "pthread" ]
+    then
+        info "Downloading pthreads-win32"
+        $DOWNLOAD $TARGET_DIR/build/lib/libpthread.a ftp://sourceware.org/pub/pthreads-win32/dll-latest/lib/libpthreadGC2.a
+	    $DOWNLOAD $TARGET_DIR/build/bin/pthreadGC2.dll ftp://sourceware.org/pub/pthreads-win32/dll-latest/lib/pthreadGC2.dll
+        $DOWNLOAD $TARGET_DIR/build/include/pthread.h ftp://sourceware.org/pub/pthreads-win32/dll-latest/include/pthread.h
+        $DOWNLOAD $TARGET_DIR/build/include/semaphore.h ftp://sourceware.org/pub/pthreads-win32/dll-latest/include/semaphore.h
+        $DOWNLOAD $TARGET_DIR/build/include/sched.h ftp://sourceware.org/pub/pthreads-win32/dll-latest/include/sched.h
+    else
+        info "Skipping pthreads-win32"
+    fi
+
+    if [ -z $ONLY ] || [ $ONLY == "gtk" ]
+    then
+        info "Downloading GTK"
+        $DOWNLOAD $TARGET_DIR/download/gtk+-2.16.zip http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.16/gtk+-bundle_2.16.2-20090601_win32.zip
+        init_dir $TARGET_DIR/gtk
+        cd $TARGET_DIR/gtk
+        unzip $TARGET_DIR/download/gtk+-2.16.zip
+        info "Fixing GTK .pc files"
+        sed -i "s#^prefix=.*#prefix=$TARGET_DIR/gtk#" lib/pkgconfig/*.pc
+    else
+        info "Skipping GTK"
+    fi
+
+    export PKG_CONFIG_LIBDIR="/tmp/junk"
+fi
+
+install_package libsndfile-1.0.19       http://www.mega-nerd.com/libsndfile
+install_package libsamplerate-0.1.7     http://www.mega-nerd.com/SRC
+
+if [ "$TARGET" == "mingw" ]
+then
+	CFLAGS="-I$TARGET_DIR/build/include $CFLAGS" LDFLAGS="-L$TARGET_DIR/build/lib $LDFLAGS" \
+	install_package liblo-0.26              http://ovh.dl.sourceforge.net/project/liblo/liblo/0.26
+else
+	install_package liblo-0.26              http://ovh.dl.sourceforge.net/project/liblo/liblo/0.26
+fi
+
+install_package libxml2-2.7.3           ftp://xmlsoft.org/libxml2 "" "--without-python"
+install_portaudio
+
+cleanup
+
+info "Done bootstrapping"

File bundle/Info.plist

+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+
+    <key>CFBundleDocumentTypes</key>
+    <array>
+        <dict>
+            <key>CFBundleTypeExtensions</key>
+            <array>
+                <string>jab</string>
+            </array>
+            <key>CFBundleTypeName</key>
+            <string>Jackbeat Song</string>
+            <key>CFBundleTypeRole</key>
+            <string>Editor</string>
+            <key>CFBundleTypeIconFile</key>
+            <string>Jackbeat</string>
+        </dict>
+    </array>
+
+    <key>CFBundleExecutable</key>
+    <string>Jackbeat</string>
+    <key>CFBundleGetInfoString</key>
+    <string>0.7.6, Copyright 2004-2009 Olivier Guilyardi - Samalyse</string>
+    <!--
+    <key>CFBundleIconFile</key>
+    <string>Giggle.icns</string>
+    -->
+    <key>CFBundleIdentifier</key>
+    <string>com.samalyse.Jackbeat</string>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleShortVersionString</key>
+    <string>0.7.6</string>
+    <key>CFBundleSignature</key>
+    <string>jabt</string>
+    <key>CFBundleVersion</key>
+    <string>0.7.6</string>
+    <key>CFBundleIconFile</key>
+    <string>Jackbeat</string>
+    <key>NSHumanReadableCopyright</key>
+    <string>Copyright (c) 2004-2009 Olivier Guilyardi - Samalyse - GNU General Public License.</string>
+    <key>LSMinimumSystemVersion</key>
+    <string>10.4</string>
+</dict>
+</plist>

File bundle/Jackbeat.bundle

+<?xml version="1.0"?> <!-- vim: set ft=xml: -->
+<app-bundle>
+  <meta>
+    <prefix name="default">${env:PREFIX}</prefix>
+    <prefix name="build">${project}/build</prefix>
+    <prefix name="libs">${env:JACKBEAT_LIBS_PREFIX}</prefix>
+    <prefix name="jack">/usr/local</prefix>
+    <destination overwrite="yes"></destination>
+  </meta>
+
+  <plist>${project}/Info.plist</plist>
+
+  <main-binary>${prefix:build}/bin/jackbeat</main-binary>
+  <!--
+  <binary>${prefix}/lib/gtk-2.0</binary>
+  -->
+  <binary>${prefix}/lib/gtk-2.0/${pkg:gtk+-2.0:gtk_binary_version}/loaders/*.so</binary>
+  <binary>${prefix}/lib/gtk-2.0/${pkg:gtk+-2.0:gtk_binary_version}/engines/libclearlooks.so</binary>
+
+  <data> ${prefix:build}/share/jackbeat </data>
+  <data>${prefix}/share/themes/Clearlooks</data>
+  <data dest="${bundle}/Contents/Resources/etc/gtk-2.0/gtkrc">${project}/gtkrc</data>
+
+  <!--
+  <icon-theme icons="auto">Tango</icon-theme>
+  <icon-theme icons="auto">gnome</icon-theme>
+  -->
+</app-bundle>
+

File bundle/Jackbeat.icns

Binary file added.

File bundle/Makefile

+VERSION = 0.7.6
+OSXFLAVOUR = intel
+FOLDER = jackbeat-$(VERSION).$(OSXFLAVOUR)
+
+.PHONY: build
+build: clean-build
+	cd .. && ./autogen.sh -I ./local-libs/build/share/aclocal
+	cd .. && \
+	export PKG_CONFIG_PATH=`pwd`/local-libs/build/lib/pkgconfig:$$PKG_CONFIG_PATH; \
+	export PATH=`pwd`/local-libs/build/bin:$$PATH; \
+	./configure --enable-macbundle --without-jack --prefix=`pwd`/bundle/build
+	cd .. && make clean
+	cd .. && make
+	cd .. && make install
+	
+.PHONY: bundle
+bundle: clean-bundle
+	export JACKBEAT_LIBS_PREFIX=`dirname $$PWD`/local-libs/build; \
+	ige-mac-bundler Jackbeat.bundle
+	cp Jackbeat.icns Jackbeat.app/Contents/Resources/
+	mkdir $(FOLDER)
+	mv Jackbeat.app $(FOLDER)
+
+.PHONY: dmg
+dmg: clean-dmg
+	hdiutil create -imagekey zlib-level=9 -srcfolder $(FOLDER) $(FOLDER).dmg
+
+.PHONY: clean
+clean: clean-bundle clean-dmg clean-build
+
+.PHONY: clean-bundle
+clean-bundle:
+	rm -rf Jackbeat.app 
+	rm -rf $(FOLDER)
+
+.PHONY: clean-build
+clean-build:
+	rm -rf build
+
+.PHONY: clean-dmg
+clean-dmg:
+	rm -rf $(FOLDER).dmg

File bundle/README

+=========================================
+Mac application bundle build instructions
+=========================================
+
+Prerequisites
+-------------
+
+* GTK+ OS X built from source into $HOME/gtk. See: http://live.gnome.org/GTK%2B/OSX
+
+* ige-mac-bundler: http://live.gnome.org/GTK%2B/OSX/AppBundles
+
+* Clearlooks engine. Install with::
+
+    jhbuild buildone gtk-engines
+
+* Jackbeat dependencies. Use the bootstrap-libs.sh script::
+
+    ./bootstrap-libs
+
+Application bundle
+------------------
+
+Edit the Makefile and set the VERSION and OSXFLAVOUR to appropriate values.
+
+Make the bundle within a jhbuild shell::
+    
+    jhbuild shell
+    make build
+    make bundle
+
+The output is placed into jackbeat-$VERSION.$OSXFLAVOUR
+
+DMG disk image
+--------------
+    
+Simply run the following to build jackbeat.$VERSION.$OSXFLAVOUR.dmg::
+    
+    make dmg
+        
+Cleaning
+--------
+
+A clean target is available::
+
+    make clean
+
+TODO
+----
+
+* try reducing the overall size of the bundle. Only bundle needed icons.

File bundle/gtkrc

+gtk-icon-theme-name = "Tango"
+gtk-font-name = "Lucida Grande 11"
+gtk-enable-mnemonics = 0
+gtk-theme-name = "Clearlooks"
+
+include "../../share/themes/Clearlooks/gtk-2.0/gtkrc"
+
+style "my-clearlooks" = "clearlooks-default"
+{
+  engine "clearlooks"
+  {
+    style = CLASSIC
+  }
+}
+class "*" style "my-clearlooks"

File bundle/gtkrc.alt

+gtk-font-name = "Lucida Grande 11"
+# Sneaking through the code are we.? ;)
+style "clearlooks-default"
+{
+	GtkMenuItem::selected_shadow_type = out
+	GtkWidget::interior_focus = 1
+	GtkButton::default_border = { 1, 1, 1, 1 }
+	GtkButton::default_outside_border = { 0, 0, 0, 0 }
+	GtkRange::trough_border = 0
+	GtkWidget::focus_padding = 1
+	GtkPaned::handle_size = 6
+	GtkRange::slider_width = 15
+	GtkRange::stepper_size = 15
+	GtkScrollbar::min_slider_length = 30
+	GtkCheckButton::indicator_size = 12
+	GtkMenuBar::internal-padding = 0
+	#GtkOptionMenu::indicator_size = { 11, 6 }
+	#GtkOptionMenu::indicator_spacing = { 4, 5, 2, 2 }
+	GtkTreeView::expander_size = 14
+	GtkExpander::expander_size = 16
+	xthickness = 1
+	ythickness = 1
+	fg[NORMAL]        = "#CACAC6"
+	fg[ACTIVE]        = "#CACAC6"
+	fg[INSENSITIVE]   = "#000000"
+	fg[PRELIGHT]      = "#E2E2E2"
+	fg[SELECTED]      = "#E2E2E2"
+
+	bg[ACTIVE]        = "#484949"
+	bg[NORMAL]        = "#5A5C5F"
+	bg[INSENSITIVE]   = "#505050"
+	bg[PRELIGHT]      = "#6A6C6F"
+#	bg[SELECTED]      = "#424446"
+	bg[SELECTED]      = "#990000"
+
+	base[NORMAL]      = "#919499"
+	base[ACTIVE]      = "#5A5C5F"
+	base[INSENSITIVE] = "#5A5C5F"
+	base[PRELIGHT]    = "#646668"
+#	base[SELECTED]    = "#5A5C5F"
+	base[SELECTED]    = "#990000"
+
+	text[NORMAL]      = "#000000"
+	text[ACTIVE]      = "#000000"
+	text[PRELIGHT]    = "#000000"
+	text[SELECTED]    = "#E0D6AD"
+	text[INSENSITIVE] = "#777777"
+
+  engine "clearlooks"
+  {
+    contrast		= 1.1
+    menubarstyle	= 2
+    #animation           = TRUE
+    #menuitemstyle	= 2
+    #progressbarstyle	= 0
+    #style		= CLASSIC 
+  }
+}
+
+style "clearlooks-wide" = "clearlooks-default"
+{
+  xthickness = 2
+  ythickness = 2
+}
+
+style "clearlooks-notebook" = "clearlooks-wide"
+{
+  bg[NORMAL] = "#5a5c5f"
+}
+style "clearlooks-tasklist" = "clearlooks-default"
+{
+  xthickness = 5
+  ythickness = 3
+}
+
+style "clearlooks-menu" = "clearlooks-default"
+{
+  xthickness = 2
+  ythickness = 1
+}
+
+style "clearlooks-menu-item" = "clearlooks-default"
+{
+  xthickness = 2
+  ythickness = 3
+}
+
+style "clearlooks-menu-itembar" = "clearlooks-default"
+{
+  xthickness = 3
+  ythickness = 3
+}
+style "clearlooks-tree" = "clearlooks-default"
+{
+  xthickness = 2
+  ythickness = 2
+}
+
+style "clearlooks-frame-title" = "clearlooks-default"
+{
+  fg[NORMAL] = "#FFFFFF"
+}
+
+style "clearlooks-panel" = "clearlooks-default"
+{
+  xthickness = 3
+  ythickness = 3
+}
+
+style "clearlooks-tooltips" = "clearlooks-default"
+{
+  xthickness = 4
+  ythickness = 4
+  bg[NORMAL] = "#404040"
+}
+style "clearlooks-progressbar"          = "clearlooks-default"
+{
+  xthickness = 0
+  ythickness = 0
+  fg[PRELIGHT]  = "#000000"
+}
+
+style "clearlooks-combo" = "clearlooks-default"
+{
+  xthickness = 1
+  ythickness = 2
+}
+
+style "metacity-frame"
+{
+  # Normal base color
+  #bg[NORMAL]  = "#bbbbbb"
+
+  # Unfocused title background color
+  #bg[INSENSITIVE]  = { 0.8, 0.8, 0.8 }
+
+  # Unfocused title text color
+  #fg[INSENSITIVE]  = { 1.55, 1.55, 1.55 }
+
+  # Focused icon color
+  #fg[NORMAL]  = { 0.2, 0.2, 0.2 }
+
+  # Focused title background color
+  #bg[SELECTED]  = { 0.5, 0.8, 0.5 }
+
+  # Focused title text color
+  #fg[SELECTED]  = "black"
+}
+style "clearlooks-scale" = "clearooks-button"
+{
+	GtkRange::trough-side-details = 1
+}
+class "GtkWidget" style "clearlooks-default"
+class "GtkButton" style "clearlooks-wide"
+class "GtkRange" style "clearlooks-wide"
+class "GtkFrame" style "clearlooks-wide"
+class "GtkStatusbar" style "clearlooks-wide"
+class "GtkMenu" style "clearlooks-menu"
+class "GtkMenuItem" style "clearlooks-menu-item"
+widget_class "*.GtkMenuItem.*" style "clearlooks-menu-item"
+widget_class "*.GtkAccelMenuItem.*" style "clearlooks-menu-item"
+widget_class "*.GtkRadioMenuItem.*" style "clearlooks-menu-item"
+widget_class "*.GtkCheckMenuItem.*" style "clearlooks-menu-item"
+widget_class "*.GtkImageMenuItem.*" style "clearlooks-menu-item"
+widget_class "*.GtkSeparatorMenuItem.*" style "clearlooks-menu-item"
+class "GtkEntry" style "clearlooks-wide"
+widget_class "*.tooltips.*.GtkToggleButton" style "clearlooks-tasklist"
+widget_class "*.GtkTreeView.GtkButton" style "clearlooks-tree"
+widget_class "*.GtkCTree.GtkButton" style "clearlooks-tree"
+widget_class "*.GtkList.GtkButton" style "clearlooks-tree"
+widget_class "*.GtkCList.GtkButton" style "clearlooks-tree"
+widget_class "*.GtkFrame.GtkLabel" style "clearlooks-frame-title"
+widget_class "BasePWidget.GtkEventBox.GtkTable.GtkFrame" style "clearlooks-panel"
+widget "gtk-tooltips" style "clearlooks-tooltips"
+class "GtkNotebook" style "clearlooks-notebook"
+class "GtkProgressBar" style "clearlooks-progressbar"
+widget_class "*.GtkComboBox.GtkButton" style "clearlooks-combo"
+widget_class "*.GtkCombo.GtkButton" style "clearlooks-combo"
+class "MetaFrames" style "metacity-frame"

File configure.ac

+AC_INIT([jackbeat],[0.7.6])
+AC_CANONICAL_HOST
+AM_INIT_AUTOMAKE(jackbeat,0.7.6)
+AM_CONFIG_HEADER(src/config.h)
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_RANLIB
+
+GLOBAL_CFLAGS="-O3"
+GLOBAL_LDFLAGS=""
+
+case "$host_os" in
+    darwin*) 
+        GLOBAL_LDFLAGS="$GLOBAL_LDFLAGS -bind_at_load"
+        # Adding the path where JackOSX puts jack.pc into 
+        export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
+    	;;
+    mingw32*)
+    	GLOBAL_CFLAGS="$GLOBAL_CFLAGS -Wall" 
+        is_mingw32=1
+        ;;
+    *) 
+    	GLOBAL_CFLAGS="$GLOBAL_CFLAGS -Wall -rdynamic" 
+     	GLOBAL_LDFLAGS="$GLOBAL_LDFLAGS -rdynamic" 
+	;;
+esac    
+
+if echo "$host_os" | grep -i linux > /dev/null
+then
+  is_linux=1
+fi
+
+AC_CHECK_HEADERS([execinfo.h])
+AC_CHECK_HEADERS([ucontext.h])
+
+AM_CONDITIONAL(MINGW32, [test "$is_mingw32" = "1"])
+
+PKG_CHECK_MODULES(PORTAUDIO, portaudio-2.0 >= 19, true,
+                  AC_MSG_ERROR([you need portaudio-2.0 >= 19 - Please see http://www.portaudio.com ]))
+AC_SUBST(PORTAUDIO_CFLAGS)
+AC_SUBST(PORTAUDIO_LIBS)
+
+if test "$is_linux" == "1"
+then
+  PKG_CHECK_MODULES(ALSA, alsa >= 1.0, true,
+                    AC_MSG_ERROR([libasound >= 1.0 is required on Linux - http://www.alsa-project.org ]))
+  AC_SUBST(ALSA_CFLAGS)
+  AC_SUBST(ALSA_LIBS)
+fi  
+
+AC_ARG_WITH([jack], [AS_HELP_STRING([--without-jack], [disable JACK support])], [], [with_jack=yes])
+          
+if test "x$with_jack" != xno
+then
+  PKG_CHECK_MODULES(JACK, jack >= 0.101, [have_jack=1], true)
+else
+  AC_MSG_CHECKING([for JACK])
+  AC_MSG_RESULT([disabled])
+fi
+
+if test "$have_jack" != ""
+then
+  AC_DEFINE(HAVE_JACK, [1], [Jack support])
+fi
+
+AC_SUBST(JACK_CFLAGS)
+AC_SUBST(JACK_LIBS)
+AM_CONDITIONAL(HAVE_JACK, [test "$have_jack" = "1"])
+
+PKG_CHECK_MODULES(PULSE, libpulse-simple >= 0.9.10, [have_pulse=1], true)
+AC_SUBST(PULSE_CFLAGS)
+AC_SUBST(PULSE_LIBS)
+if test "$have_pulse" = "1"
+then
+  AC_DEFINE(HAVE_PULSE, [1], [PulseAudio support])
+fi
+AM_CONDITIONAL(HAVE_PULSE, [test "$have_pulse" = "1"])
+
+if test "$have_pulse" = "" && test "$is_linux" = "1"
+then
+  AC_MSG_WARN([Can't find libpulse, PulseAudio will not be supported])
+fi
+
+PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.12, [have_pkg_gtk=true], true)
+
+if test x$have_pkg_gtk = xtrue
+then
+  AC_MSG_CHECKING([whether this is gtk-quartz])
+  if test "`pkg-config --variable=target gtk+-2.0`" == "quartz"
+  then
+      AC_MSG_RESULT([yes])
+      quartz=true
+      AC_DEFINE(HAVE_GTK_QUARTZ, 1, [Whether GTK is running on Mac OS X Quartz])
+      PKG_CHECK_MODULES(MACINTEGRATION, ige-mac-integration >= 0.8.2, true,
+                        AC_MSG_ERROR([you need ige-mac-integration >= 0.8.2 - Please see http://developer.imendio.com/projects/gtk-macosx]))
+      MACINTEGRATION_CFLAGS="$MACINTEGRATION_CFLAGS -I/System/Library/Frameworks/Carbon.framework/Headers"
+      MACINTEGRATION_LIBS="$MACINTEGRATION_LIBS -framework Carbon"
+      AC_SUBST(MACINTEGRATION_CFLAGS)
+      AC_SUBST(MACINTEGRATION_LIBS)
+  else    
+      AC_MSG_RESULT([no])
+  fi
+else
+  AC_MSG_CHECKING([for GTK-OSX framework])
+  if test -f /Library/Frameworks/Gtk.framework/Headers/gtk/gtk.h
+  then
+      AC_MSG_RESULT([yes])
+      quartz=true
+      AC_DEFINE(HAVE_GTK_QUARTZ, 1, [Whether GTK is running on Mac OS X Quartz])
+      GTK_CFLAGS="-I/Library/Frameworks/Gtk.framework/Headers -I/Library/Frameworks/GLib.framework/Headers -I/Library/Frameworks/Cairo.framework/Headers -I/System/Library/Frameworks/Carbon.framework/Headers"
+      GTK_LIBS="-framework Gtk -framework GLib -framework Cairo -framework Carbon"
+  else    
+      AC_MSG_RESULT([no])
+      AC_MSG_ERROR([you need gtk+ >= 2.12 - Please see http://www.gtk.org ])
+  fi  
+fi
+
+AC_SUBST(GTK_CFLAGS)
+AC_SUBST(GTK_LIBS)
+
+AC_DEFINE(USE_PHAT, 1, [Whether to use the (modified) Phat Audio Toolkit])
+use_phat=true
+
+AM_CONDITIONAL(USE_PHAT, [test x$use_phat = xtrue])
+AM_CONDITIONAL(GTK_QUARTZ, [test x$quartz = xtrue])
+
+PKG_CHECK_MODULES(SNDFILE, sndfile >= 1.0.15, true,
+                  AC_MSG_ERROR([you need libsndfile >= 1.0.15 - Please see http://www.mega-nerd.com/libsndfile ]))
+AC_SUBST(SNDFILE_CFLAGS)
+AC_SUBST(SNDFILE_LIBS)
+
+PKG_CHECK_MODULES(XML, libxml-2.0 >= 2.6, true,
+                  AC_MSG_ERROR([you need libxml >= 2.6 - Please see http://xmlsoft.org ]))
+AC_SUBST(XML_CFLAGS)
+AC_SUBST(XML_LIBS)
+
+PKG_CHECK_MODULES(SRC, samplerate >= 0.1.2, true,
+                  AC_MSG_ERROR([you need libsamplerate >= 0.1.2 - Please see http://www.mega-nerd.com/SRC ]))
+AC_SUBST(SRC_CFLAGS)
+AC_SUBST(SRC_LIBS)
+
+PKG_CHECK_MODULES(LIBLO, liblo >= 0.22, true,
+                  AC_MSG_ERROR([you need liblo >= 0.22 - http://liblo.sourceforge.net ]))
+AC_SUBST(LIBLO_CFLAGS)
+AC_SUBST(LIBLO_LIBS)
+
+AC_ARG_ENABLE([dmalloc], AS_HELP_STRING([--enable-dmalloc],
+            [link against dmalloc, for memory debugging (default: no)]),
+            [AC_DEFINE(DMALLOC,1,[Whether to link against dmalloc]) GLOBAL_LDFLAGS="$GLOBAL_LDFLAGS -ldmalloc"])
+
+AC_ARG_ENABLE([memdebug], AS_HELP_STRING([--enable-memdebug],
+            [include built-in memory debugging routines (default: no)]),
+            [AC_DEFINE(MEMDEBUG,1,[Whether to include built-in memory debugging routines]) memdebug=true])
+
+AM_CONDITIONAL(MEMDEBUG, test x$memdebug = xtrue)
+
+AC_ARG_ENABLE([devmode], AS_HELP_STRING([--enable-devmode],
+            [enable developer mode]),
+            [AC_DEFINE(DEVMODE,1,[Developer mode])])
+
+AC_ARG_ENABLE([macbundle], AS_HELP_STRING([--enable-macbundle],
+            [enable mac bundle packaging]),
+            [AC_DEFINE(MACBUNDLE,1,[Mac bundle mode])])
+
+AC_SUBST(MEMDEBUG_SOURCES)
+AC_SUBST(GLOBAL_CFLAGS)
+AC_SUBST(GLOBAL_LDFLAGS)
+
+AC_CONFIG_FILES([ \
+    Makefile \
+    src/Makefile \
+    src/core/Makefile \
+    src/stream/Makefile \
+    pkgdata/Makefile \
+    pkgdata/glade/Makefile \
+    pkgdata/help/Makefile \
+    pkgdata/pixmaps/Makefile \
+])
+AC_OUTPUT
+

File mingw/Makefile

+LIBDIR = $$PWD/local-libs-mingw
+OUTPUT = $$PWD/win32-build
+
+.PHONY: build
+build:
+	cd .. && \
+		PKG_CONFIG_LIBDIR=$(LIBDIR)/build/lib/pkgconfig:$(LIBDIR)/gtk/lib/pkgconfig \
+		CFLAGS="-I$(LIBDIR)/build/include $$CFLAGS" \
+		LDFLAGS="-L$(LIBDIR)/build/lib $$LDFLAGS" \
+		./configure --prefix=$(OUTPUT) --host=i586-mingw32msvc
+	cd .. && make clean
+	cd .. && make
+	cd .. && make install
+
+.PHONY: package
+package:
+	cd .. && JACKBEAT_GTK_PATH=$(LIBDIR)/gtk bash mingw/package.sh
+
+.PHONY: clean
+clean:
+	cd .. && rm -rf $(OUTPUT)

File mingw/Makefile.asio

+CXX=i586-mingw32msvc-g++
+AR=i586-mingw32msvc-ar
+BIN=asiosdk2.a
+SOURCES:= \
+    common/asio.cpp \
+    common/combase.cpp \
+    common/debugmessage.cpp \
+    common/register.cpp \
+    host/ASIOConvertSamples.cpp \
+    host/asiodrivers.cpp \
+    host/pc/asiolist.cpp 
+
+OBJS:=$(SOURCES:.cpp=.o)
+CFLAGS=-Icommon -Ihost -Ihost/pc/
+LDFLAGS=-lkernel32 -luser32 -lgdi32 -lshell32 -luuid -lole32 -lwinmm
+
+${BIN}: $(OBJS)
+	${AR} rcs $(BIN) $(OBJS)
+
+%.o: %.cpp
+	${CXX} ${CFLAGS} -c $< -o $@
+

File mingw/README

+==================================
+MinGW cross-compiling instructions
+==================================
+
+Prerequisites
+-------------
+
+* MinGW and Wine (aptitude install mingw wine)
+
+* ASIO SDK extracted into ./local-libs-mingw/src/ASIOSDK2, ie::
+
+    mkdir -p local-libs-mingw/src
+    cd local-libs-mingw/src
+    unzip path/to/asiosdk2.2.zip
+
+* Jackbeat dependencies. Use the bootstrap-libs.sh script::
+
+    ./bootstrap-libs.sh mingw
+
+
+Building and packaging
+----------------------
+
+To build jackbeat into ./win32-build, simply type:
+
+    cd mingw 
+    make
+
+Before running and/or deploying jackbeat you need to bundle dependencies into
+the output directory using the package target::
+
+    make package
+
+Then simply double click on jackbeat.exe in ./win32-build/bin
+
+A clean target is also available, which will remove ./win32-build::
+
+    make clean
+
+The win32-build folder should be relocatable. Move it whereever you need.
+
+The provided jackbeat.ci file allows to create a windows installer using
+CreateInstall Free.

File mingw/configure.sh

+#!/bin/bash
+
+gtk="$JACKBEAT_GTK_PATH"
+if [ -z "$gtk" ]
+then
+    gtk="/c/gtk"
+fi
+
+export PATH="$gtk/bin:$PATH"
+export PKG_CONFIG_PATH="$(pwd)/local-libs/build/lib/pkgconfig:$PKG_CONFIG_PATH"
+CFLAGS="-I$(pwd)/local-libs/build/include $CFLAGS" LDFLAGS="-L$(pwd)/local-libs/build/lib $LDFLAGS" \
+    ./configure --prefix=$(pwd)/win32-build

File mingw/exetype.pl

+#!perl -w
+use strict;
+
+# All the IMAGE_* structures are defined in the WINNT.H file
+# of the Microsoft Platform SDK.
+
+my %subsys = (NATIVE    => 1,
+              WINDOWS   => 2,
+              CONSOLE   => 3,
+              POSIX     => 7,
+              WINDOWSCE => 9);
+
+unless (0 < @ARGV && @ARGV < 3) {
+    printf "Usage: $0 exefile [%s]\n", join '|', sort keys %subsys;
+    exit;
+}
+
+$ARGV[1] = uc $ARGV[1] if $ARGV[1];
+unless (@ARGV == 1 || defined $subsys{$ARGV[1]}) {
+    (my $subsys = join(', ', sort keys %subsys)) =~ s/, (\w+)$/ or $1/;
+    print "Invalid subsystem $ARGV[1], please use $subsys\n";
+    exit;
+}
+
+my ($record,$magic,$signature,$offset,$size);
+open EXE, "+< $ARGV[0]" or die "Cannot open $ARGV[0]: $!\n";
+binmode EXE;
+
+# read IMAGE_DOS_HEADER structure
+read EXE, $record, 64;
+($magic,$offset) = unpack "Sx58L", $record;
+
+die "$ARGV[0] is not an MSDOS executable file.\n"
+    unless $magic == 0x5a4d; # "MZ"
+
+# read signature, IMAGE_FILE_HEADER and first WORD of IMAGE_OPTIONAL_HEADER
+seek EXE, $offset, 0;
+read EXE, $record, 4+20+2;
+($signature,$size,$magic) = unpack "Lx16Sx2S", $record;
+
+die "PE header not found" unless $signature == 0x4550; # "PE\0\0"
+
+die "Optional header is neither in NT32 nor in NT64 format"
+    unless ($size == 224 && $magic == 0x10b) || # IMAGE_NT_OPTIONAL_HDR32_MAGIC
+           ($size == 240 && $magic == 0x20b);   # IMAGE_NT_OPTIONAL_HDR64_MAGIC
+
+# Offset 68 in the IMAGE_OPTIONAL_HEADER(32|64) is the 16 bit subsystem code
+seek EXE, $offset+4+20+68, 0;
+if (@ARGV == 1) {
+    read EXE, $record, 2;
+    my ($subsys) = unpack "S", $record;
+    $subsys = {reverse %subsys}->{$subsys} || "UNKNOWN($subsys)";
+    print "$ARGV[0] uses the $subsys subsystem.\n";
+}
+else {
+    print EXE pack "S", $subsys{$ARGV[1]};
+}
+close EXE;
+__END__
+
+=head1 NAME
+
+exetype - Change executable subsystem type between "Console" and "Windows"
+
+=head1 SYNOPSIS
+
+	C:\perl\bin> copy perl.exe guiperl.exe
+	C:\perl\bin> exetype guiperl.exe windows
+
+=head1 DESCRIPTION
+
+This program edits an executable file to indicate which subsystem the
+operating system must invoke for execution.
+
+You can specify any of the following subsystems:
+
+=over
+
+=item CONSOLE
+
+The CONSOLE subsystem handles a Win32 character-mode application that
+use a console supplied by the operating system.
+
+=item WINDOWS
+
+The WINDOWS subsystem handles an application that does not require a
+console and creates its own windows, if required.
+
+=item NATIVE
+
+The NATIVE subsystem handles a Windows NT device driver.
+
+=item WINDOWSCE
+