summary refs log tree commit diff
path: root/pkgs/applications
diff options
context:
space:
mode:
authorYury G. Kudryashov <urkud.urkud@gmail.com>2012-02-06 23:03:12 +0000
committerYury G. Kudryashov <urkud.urkud@gmail.com>2012-02-06 23:03:12 +0000
commit215a07c1a9d6d208c1ba0037eccaaba7de9d6b68 (patch)
treef31e835b16c30957eb4ae3710cbfa922e8a64fbd /pkgs/applications
parentb31c67e24d56c90a6732d3a310ff13684b73e200 (diff)
parent4e3dcd925499547314567107366cae26a99c4ef7 (diff)
downloadnixlib-215a07c1a9d6d208c1ba0037eccaaba7de9d6b68.tar
nixlib-215a07c1a9d6d208c1ba0037eccaaba7de9d6b68.tar.gz
nixlib-215a07c1a9d6d208c1ba0037eccaaba7de9d6b68.tar.bz2
nixlib-215a07c1a9d6d208c1ba0037eccaaba7de9d6b68.tar.lz
nixlib-215a07c1a9d6d208c1ba0037eccaaba7de9d6b68.tar.xz
nixlib-215a07c1a9d6d208c1ba0037eccaaba7de9d6b68.tar.zst
nixlib-215a07c1a9d6d208c1ba0037eccaaba7de9d6b68.zip
svn merge ^/nixpkgs/trunk
Merge conflicts:
* unzip (almost trivial)
* dvswitch (trivial)
* gmp (copied result of `git merge`)

The last item introduced gmp-5.0.3, thus full rebuild.
+ensureDir->mkdir -p in TeX packages was catched by git but not svn.

svn path=/nixpkgs/branches/stdenv-updates/; revision=32091
Diffstat (limited to 'pkgs/applications')
-rw-r--r--pkgs/applications/audio/spotify/default.nix10
-rw-r--r--pkgs/applications/audio/xmms/alsa.patch1475
-rw-r--r--pkgs/applications/audio/xmms/default.nix21
-rw-r--r--pkgs/applications/editors/emacs-modes/emacs-w3m/default.nix2
-rw-r--r--pkgs/applications/graphics/graphicsmagick/1.3.7.nix1
-rw-r--r--pkgs/applications/graphics/graphicsmagick/default.nix1
-rw-r--r--pkgs/applications/misc/adobe-reader/default.nix6
-rw-r--r--pkgs/applications/misc/goldendict/default.nix31
-rw-r--r--pkgs/applications/misc/goldendict/goldendict-paths.diff10
-rw-r--r--pkgs/applications/misc/ikiwiki/default.nix4
-rw-r--r--pkgs/applications/misc/truecrypt/default.nix10
-rw-r--r--pkgs/applications/networking/browsers/firefox/10.0.nix (renamed from pkgs/applications/networking/browsers/firefox/8.0.nix)8
-rw-r--r--pkgs/applications/networking/browsers/firefox/11.0.nix180
-rw-r--r--pkgs/applications/networking/browsers/links2/default.nix65
-rw-r--r--pkgs/applications/networking/browsers/links2/src-for-default.nix9
-rw-r--r--pkgs/applications/networking/browsers/links2/src-info-for-default.nix4
-rw-r--r--pkgs/applications/networking/browsers/links2/stdenv.nix41
-rw-r--r--pkgs/applications/networking/esniper/default.nix8
-rw-r--r--pkgs/applications/networking/esniper/fix-build-with-latest-curl.patch10
-rw-r--r--pkgs/applications/networking/remote/rdesktop/default.nix4
-rw-r--r--pkgs/applications/networking/skype/default.nix6
-rw-r--r--pkgs/applications/office/hledger-interest/default.nix4
-rw-r--r--pkgs/applications/science/logic/hol_light/default.nix6
-rw-r--r--pkgs/applications/video/MPlayer/default.nix1
-rw-r--r--pkgs/applications/video/dvswitch/default.nix14
-rw-r--r--pkgs/applications/window-managers/icewm/default.nix20
26 files changed, 315 insertions, 1636 deletions
diff --git a/pkgs/applications/audio/spotify/default.nix b/pkgs/applications/audio/spotify/default.nix
index 38eb51b93dba..4711d0f29ea2 100644
--- a/pkgs/applications/audio/spotify/default.nix
+++ b/pkgs/applications/audio/spotify/default.nix
@@ -2,7 +2,7 @@
 
 assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
 
-let version = "0.6.2.291"; in
+let version = "0.6.6.10"; in
 
 stdenv.mkDerivation {
   name = "spotify-${version}";
@@ -10,13 +10,13 @@ stdenv.mkDerivation {
   src =
     if stdenv.system == "i686-linux" then 
       fetchurl {
-        url = "http://repository.spotify.com/pool/non-free/s/spotify/spotify-client-qt_${version}.gcccc1f5.116-1_i386.deb";
-        sha256 = "164ka9xry9nbnv77w71kzi7bjidlmccw8wnn4fyzavi8pbrpmj08";
+        url = "http://repository.spotify.com/pool/non-free/s/spotify/spotify-client-qt_${version}.gbd39032.58-1_i386.deb";
+        sha256 = "184wvw2jqihw7bbmd7pgz51nkzvk777imz9pvknv52mggai61523";
       }
     else if stdenv.system == "x86_64-linux" then 
       fetchurl {
-        url = "http://repository.spotify.com/pool/non-free/s/spotify/spotify-client-qt_${version}.gcccc1f5.116-1_amd64.deb";
-        sha256 = "08snnpqd5ldiqv98pwx3fjrhdlwp4arbgda9xnsy92wfk0s85lv8";
+        url = "http://repository.spotify.com/pool/non-free/s/spotify/spotify-client-qt_${version}.gbd39032.58-1_amd64.deb";
+        sha256 = "0qy4dgcl4y8ymqk8i9vgabik7mq0niqpbkwl3sk8z66znax4am4c";
       }
     else throw "Spotify not supported on this platform.";
 
diff --git a/pkgs/applications/audio/xmms/alsa.patch b/pkgs/applications/audio/xmms/alsa.patch
deleted file mode 100644
index 62cf7354fd25..000000000000
--- a/pkgs/applications/audio/xmms/alsa.patch
+++ /dev/null
@@ -1,1475 +0,0 @@
-diff -rc xmms-1.2.10-orig/Output/alsa/alsa.h xmms-1.2.10/Output/alsa/alsa.h
-*** xmms-1.2.10-orig/Output/alsa/alsa.h	2004-01-11 17:27:26.000000000 +0100
---- xmms-1.2.10/Output/alsa/alsa.h	2006-01-27 00:28:49.000000000 +0100
-***************
-*** 50,57 ****
-  	char *mixer_device;
-  	int buffer_time;
-  	int period_time;
-  	gboolean debug;
-- 	gboolean mmap;
-  	struct
-  	{
-  		int left, right;
---- 50,57 ----
-  	char *mixer_device;
-  	int buffer_time;
-  	int period_time;
-+ 	int thread_buffer_time;
-  	gboolean debug;
-  	struct
-  	{
-  		int left, right;
-***************
-*** 65,72 ****
-  void alsa_about(void);
-  void alsa_configure(void);
-  int alsa_get_mixer(snd_mixer_t **mixer, int card);
-- snd_mixer_elem_t* alsa_get_mixer_elem(snd_mixer_t *mixer, char *name, int index);
-- int alsa_setup_mixer(void);
-  void alsa_save_config(void);
-  
-  void alsa_get_volume(int *l, int *r);
---- 65,70 ----
-diff -rc xmms-1.2.10-orig/Output/alsa/audio.c xmms-1.2.10/Output/alsa/audio.c
-*** xmms-1.2.10-orig/Output/alsa/audio.c	2004-01-28 00:09:39.000000000 +0100
---- xmms-1.2.10/Output/alsa/audio.c	2006-01-27 00:28:49.000000000 +0100
-***************
-*** 17,52 ****
-   *  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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-   */
-  
-  #include "alsa.h"
-  #include <ctype.h>
-  #include <libxmms/xconvert.h>
-  
-  static snd_pcm_t		*alsa_pcm 	    = NULL;
-- static snd_pcm_status_t		*alsa_status 	    = NULL;
-- static snd_pcm_channel_area_t   *areas              = NULL;
-  
-  static snd_output_t		*logs 		    = NULL;
-  
-! static int 			 alsa_bps 	    = 0;
-! static guint64			 alsa_total_written = 0;
-  
-  /* Set/Get volume */
-  static snd_mixer_elem_t 	*pcm_element 	    = NULL;
-  static snd_mixer_t 		*mixer 		    = NULL;
-  
-! static gboolean mmap, force_start, going, paused;
-  
-! static gpointer buffer;
-  
-- static int alsa_can_pause;
-  
-  struct snd_format {
-  	unsigned int rate;
-  	unsigned int channels;
-  	snd_pcm_format_t format;
-  	AFormat xmms_format;
-  };
-  
-  static struct snd_format *inputf = NULL;
---- 17,72 ----
-   *  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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+  *
-+  *
-+  *  CHANGES
-+  *
-+  *  2005.01.05  Takashi Iwai <tiwai@suse.de>
-+  *	Impelemented the multi-threaded mode with an audio-thread.
-+  *	Many fixes and cleanups.
-   */
-  
-  #include "alsa.h"
-  #include <ctype.h>
-+ #include <pthread.h>
-  #include <libxmms/xconvert.h>
-  
-  static snd_pcm_t		*alsa_pcm 	    = NULL;
-  
-  static snd_output_t		*logs 		    = NULL;
-  
-! static guint64			 alsa_total_written = 0;	/* input bytes */
-! static guint64			 alsa_hw_written    = 0;	/* output bytes */
-! static gint			 output_time_offset = 0;
-! 
-! /* device buffer/period sizes in bytes */
-! static int hw_buffer_size, hw_period_size;		/* in output bytes */
-! static int hw_buffer_size_in, hw_period_size_in;	/* in input bytes */
-  
-  /* Set/Get volume */
-  static snd_mixer_elem_t 	*pcm_element 	    = NULL;
-  static snd_mixer_t 		*mixer 		    = NULL;
-  
-! static gboolean going, paused;
-  
-! static gboolean alsa_can_pause;
-! 
-! /* for audio thread */
-! static pthread_t audio_thread;		/* audio loop thread */
-! static int thread_buffer_size;		/* size of intermediate buffer in bytes */
-! static char *thread_buffer;		/* audio intermediate buffer */
-! static int rd_index, wr_index;		/* current read/write position in int-buffer */
-! static gboolean pause_request;		/* pause status currently requested */
-! static gint flush_request;		/* flush status (time) currently requested */
-  
-  
-  struct snd_format {
-  	unsigned int rate;
-  	unsigned int channels;
-  	snd_pcm_format_t format;
-  	AFormat xmms_format;
-+ 	int sample_bits;
-+ 	int bps;
-  };
-  
-  static struct snd_format *inputf = NULL;
-***************
-*** 54,61 ****
-  static struct snd_format *outputf = NULL;
-  
-  static int alsa_setup(struct snd_format *f);
-! static void alsa_mmap_audio(char *data, int length);
-! static void alsa_write_audio(gpointer data, int length);
-  
-  static struct snd_format * snd_format_from_xmms(AFormat fmt, int rate, int channels);
-  
---- 74,80 ----
-  static struct snd_format *outputf = NULL;
-  
-  static int alsa_setup(struct snd_format *f);
-! static void alsa_write_audio(char *data, int length);
-  
-  static struct snd_format * snd_format_from_xmms(AFormat fmt, int rate, int channels);
-  
-***************
-*** 71,92 ****
-  } format_table[] =
-  {{FMT_S16_LE, SND_PCM_FORMAT_S16_LE},
-   {FMT_S16_BE, SND_PCM_FORMAT_S16_BE},
-!  {FMT_S16_NE,
-! #ifdef WORDS_BIGENDIAN
-!   SND_PCM_FORMAT_S16_BE
-! #else
-!   SND_PCM_FORMAT_S16_LE
-! #endif
-!  },
-   {FMT_U16_LE, SND_PCM_FORMAT_U16_LE},
-   {FMT_U16_BE, SND_PCM_FORMAT_U16_BE},
-!  {FMT_U16_NE,
-! #ifdef WORDS_BIGENDIAN
-!   SND_PCM_FORMAT_U16_BE
-! #else
-!   SND_PCM_FORMAT_U16_LE
-! #endif
-!  },
-   {FMT_U8, SND_PCM_FORMAT_U8},
-   {FMT_S8, SND_PCM_FORMAT_S8},
-  };
---- 90,99 ----
-  } format_table[] =
-  {{FMT_S16_LE, SND_PCM_FORMAT_S16_LE},
-   {FMT_S16_BE, SND_PCM_FORMAT_S16_BE},
-!  {FMT_S16_NE, SND_PCM_FORMAT_S16},
-   {FMT_U16_LE, SND_PCM_FORMAT_U16_LE},
-   {FMT_U16_BE, SND_PCM_FORMAT_U16_BE},
-!  {FMT_U16_NE, SND_PCM_FORMAT_U16},
-   {FMT_U8, SND_PCM_FORMAT_U8},
-   {FMT_S8, SND_PCM_FORMAT_S8},
-  };
-***************
-*** 106,281 ****
-  	}
-  }
-  
-! int alsa_playing(void)
-! {
-! 	if (!going || paused)
-! 		return FALSE;
-! 
-! 	return(snd_pcm_state(alsa_pcm) == SND_PCM_STATE_RUNNING);
-! }
-! 
-! static void xrun_recover(void)
-! {
-! 	int err;
-! 
-! 	if (alsa_cfg.debug)
-! 	{
-! 		snd_pcm_status_alloca(&alsa_status);
-! 		if ((err = snd_pcm_status(alsa_pcm, alsa_status)) < 0)
-! 			g_warning("xrun_recover(): snd_pcm_status() failed");
-! 		else
-! 		{
-! 			printf("Status:\n");
-! 			snd_pcm_status_dump(alsa_status, logs);
-! 		}
-! 	}
-! 
-! 	if (snd_pcm_state(alsa_pcm) == SND_PCM_STATE_XRUN)
-! 	{
-! 		if ((err = snd_pcm_prepare(alsa_pcm)) < 0)
-! 			g_warning("xrun_recover(): snd_pcm_prepare() failed.");
-! 	}
-! }
-! 
-! static snd_pcm_sframes_t alsa_get_avail(void)
-! {
-! 	snd_pcm_sframes_t ret;
-! 	if ((ret = snd_pcm_avail_update(alsa_pcm)) == -EPIPE)
-! 		xrun_recover();
-! 	else if (ret < 0)
-! 	{
-! 		g_warning("alsa_get_avail(): snd_pcm_avail_update() failed: %s",
-! 			  snd_strerror(-ret));
-! 		return 0;
-! 	}
-! 	else
-! 		return ret;
-! 	if ((ret = snd_pcm_avail_update(alsa_pcm)) < 0)
-! 	{
-! 		g_warning("alsa_get_avail(): snd_pcm_avail_update() failed: %s",
-! 			  snd_strerror(-ret));
-! 		return 0;
-! 	}
-! 	return ret;
-! }
-! 
-! int alsa_free(void)
-! {
-! 	if (paused)
-! 		return 0;
-! 	else
-! 	{
-! 		int err;
-! 		if (force_start &&
-! 		    snd_pcm_state(alsa_pcm) == SND_PCM_STATE_PREPARED)
-! 		{
-! 			if ((err = snd_pcm_start(alsa_pcm)) < 0)
-! 				g_warning("alsa_free(): snd_pcm_start() "
-! 					  "failed: %s", snd_strerror(-err));
-! 			else
-! 				debug("Stream started");
-! 		}
-! 		force_start = TRUE;
-! 
-! 		return snd_pcm_frames_to_bytes(alsa_pcm, alsa_get_avail());
-! 	}
-! }
-! 
-! void alsa_pause(short p)
-! {
-! 	debug("alsa_pause");
-! 	if (p)
-! 		paused = TRUE;
-! 
-! 	if (alsa_can_pause)
-! 		snd_pcm_pause(alsa_pcm, p);
-! 	else if (p)
-! 		snd_pcm_drop(alsa_pcm);
-! 
-! 	if (!p)
-! 		paused = FALSE;
-! }
-! 
-! void alsa_close(void)
-! {
-! 	int err, started;
-! 
-! 	debug("Closing device");
-! 
-! 	started = going;
-! 	going = 0;
-! 
-! 	pcm_element = NULL;
-! 
-! 	if (mixer)
-! 	{
-! 		snd_mixer_close(mixer);
-! 		mixer = NULL;
-! 	}
-! 
-! 	if (alsa_pcm != NULL)
-! 	{
-! 		if (started)
-! 			if ((err = snd_pcm_drop(alsa_pcm)) < 0)
-! 				g_warning("alsa_pcm_drop() failed: %s",
-! 					  snd_strerror(-err));
-! 
-! 		if ((err = snd_pcm_close(alsa_pcm)) < 0)
-! 			g_warning("alsa_pcm_close() failed: %s",
-! 				  snd_strerror(-err));
-! 		alsa_pcm = NULL;
-! 	}
-! 
-! 	if (mmap) {
-! 		g_free(buffer);
-! 		buffer = NULL;
-! 
-! 		g_free(areas);
-! 		areas = NULL;
-! 	}
-! 
-! 	xmms_convert_buffers_destroy(convertb);
-! 	convertb = NULL;
-! 	g_free(inputf);
-! 	inputf = NULL;
-! 	g_free(effectf);
-! 	effectf = NULL;
-! 
-! 	alsa_save_config();
-! 
-! 	debug("Device closed");
-! }
-! 
-! static void alsa_reopen(struct snd_format *f)
-! {
-! 	unsigned int tmp = alsa_get_written_time();
-! 
-! 	if (alsa_pcm != NULL)
-! 	{
-! 		snd_pcm_close(alsa_pcm);
-! 		alsa_pcm = NULL;
-! 	}
-! 
-! 	if (mmap) {
-! 		g_free(buffer);
-! 		buffer = NULL;
-! 		
-! 		g_free(areas);
-! 		areas = NULL;
-! 	}
-! 
-! 	if (alsa_setup(f) < 0)
-! 		g_warning("Failed to reopen the audio device");
-! 
-! 	alsa_total_written = tmp;
-! 	snd_pcm_prepare(alsa_pcm);
-! }
-! 
-! void alsa_flush(int time)
-! {
-! 	alsa_total_written = (guint64) time * alsa_bps / 1000;
-! }
-! 
-  static void parse_mixer_name(char *str, char **name, int *index)
-  {
-  	char *end;
---- 113,121 ----
-  	}
-  }
-  
-! /*
-!  * mixer stuff
-!  */
-  static void parse_mixer_name(char *str, char **name, int *index)
-  {
-  	char *end;
-***************
-*** 337,343 ****
-  }
-  	
-  
-! snd_mixer_elem_t* alsa_get_mixer_elem(snd_mixer_t *mixer, char *name, int index)
-  {
-  	snd_mixer_selem_id_t *selem_id;
-  	snd_mixer_elem_t* elem;
---- 177,183 ----
-  }
-  	
-  
-! static snd_mixer_elem_t* alsa_get_mixer_elem(snd_mixer_t *mixer, char *name, int index)
-  {
-  	snd_mixer_selem_id_t *selem_id;
-  	snd_mixer_elem_t* elem;
-***************
-*** 353,359 ****
-  	return elem;
-  }
-  
-! int alsa_setup_mixer(void)
-  {
-  	char *name;
-  	long int a, b;
---- 193,199 ----
-  	return elem;
-  }
-  
-! static int alsa_setup_mixer(void)
-  {
-  	char *name;
-  	long int a, b;
-***************
-*** 406,411 ****
---- 246,260 ----
-  	return 0;
-  }
-  
-+ static void alsa_cleanup_mixer(void)
-+ {
-+ 	pcm_element = NULL;
-+ 	if (mixer) {
-+ 		snd_mixer_close(mixer);
-+ 		mixer = NULL;
-+ 	}
-+ }
-+ 
-  void alsa_get_volume(int *l, int *r)
-  {
-  	static gboolean first = TRUE;
-***************
-*** 461,485 ****
-  }
-  
-  
-  int alsa_get_output_time(void)
-  {
-  	snd_pcm_sframes_t delay;
-! 	ssize_t db = 0;
-  
-! 	if (!going)
-  		return 0;
-  
-! 	if (!snd_pcm_delay(alsa_pcm, &delay))
-! 		db = snd_pcm_frames_to_bytes(alsa_pcm, delay);
-! 	
-! 	if (db < alsa_total_written)
-! 		return ((alsa_total_written - db) * 1000 / alsa_bps);
-! 	return 0;
-  }
-  
-  int alsa_get_written_time(void)
-  {
-! 	return (alsa_total_written * 1000 / alsa_bps);
-  }
-  
-  #define STEREO_ADJUST(type, type2, endian)					\
---- 310,512 ----
-  }
-  
-  
-+ /*
-+  * audio stuff
-+  */
-+ 
-+ int alsa_playing(void)
-+ {
-+ 	if (!going || paused || alsa_pcm == NULL)
-+ 		return FALSE;
-+ 
-+ 	return(snd_pcm_state(alsa_pcm) == SND_PCM_STATE_RUNNING);
-+ }
-+ 
-+ 
-+ /* handle generic errors */
-+ static int alsa_handle_error(int err)
-+ {
-+ 	switch (err) {
-+ 	case -EPIPE: /* XRUN */
-+ 		if (alsa_cfg.debug) {
-+ 			snd_pcm_status_t *alsa_status;
-+ 			snd_pcm_status_alloca(&alsa_status);
-+ 			if (snd_pcm_status(alsa_pcm, alsa_status) < 0)
-+ 				g_warning("xrun_recover(): snd_pcm_status() failed");
-+ 			else {
-+ 				printf("Status:\n");
-+ 				snd_pcm_status_dump(alsa_status, logs);
-+ 			}
-+ 		}
-+ 		return snd_pcm_prepare(alsa_pcm);
-+ 
-+ 	case -ESTRPIPE: /* suspend */
-+ 		while ((err = snd_pcm_resume(alsa_pcm)) == -EAGAIN)
-+ 			sleep(1);	/* wait until suspend flag is released */
-+ 		if (err < 0) {
-+ 			g_warning("suspend_recover(): snd_pcm_resume() failed.");
-+ 			return snd_pcm_prepare(alsa_pcm);
-+ 		}
-+ 		break;
-+ 	}
-+ 
-+ 	return err;
-+ }
-+ 
-+ /* update and get the available space on h/w buffer (in frames) */
-+ static snd_pcm_sframes_t alsa_get_avail(void)
-+ {
-+ 	snd_pcm_sframes_t ret;
-+ 
-+ 	if (alsa_pcm == NULL)
-+ 		return 0;
-+ 
-+ 	while ((ret = snd_pcm_avail_update(alsa_pcm)) < 0) {
-+ 		ret = alsa_handle_error(ret);
-+ 		if (ret < 0) {
-+ 			g_warning("alsa_get_avail(): snd_pcm_avail_update() failed: %s",
-+ 				  snd_strerror(-ret));
-+ 			return 0;
-+ 		}
-+ 	}
-+ 	return ret;
-+ }
-+ 
-+ /* do pause operation */
-+ static void alsa_do_pause(gboolean p)
-+ {
-+ 	if (paused == p)
-+ 		return;
-+ 
-+ 	if (alsa_pcm) {
-+ 		if (alsa_can_pause) {
-+ 			snd_pcm_pause(alsa_pcm, p);
-+ 		} else if (p) {
-+ 			snd_pcm_drop(alsa_pcm);
-+ 			snd_pcm_prepare(alsa_pcm);
-+ 		}
-+ 	}
-+ 	paused = p;
-+ }
-+ 
-+ void alsa_pause(short p)
-+ {
-+ 	debug("alsa_pause");
-+ 	pause_request = p;
-+ }
-+ 
-+ /* close PCM and release associated resources */
-+ static void alsa_close_pcm(void)
-+ {
-+ 	if (alsa_pcm) {
-+ 		int err;
-+ 		snd_pcm_drop(alsa_pcm);
-+ 		if ((err = snd_pcm_close(alsa_pcm)) < 0)
-+ 			g_warning("alsa_pcm_close() failed: %s",
-+ 				  snd_strerror(-err));
-+ 		alsa_pcm = NULL;
-+ 	}
-+ }
-+ 
-+ /* reopen ALSA PCM */
-+ static int alsa_reopen(struct snd_format *f)
-+ {
-+ 	/* remember the current position */
-+ 	output_time_offset += (alsa_hw_written * 1000) / outputf->bps;
-+ 	alsa_hw_written = 0;
-+ 
-+ 	alsa_close_pcm();
-+ 
-+ 	return alsa_setup(f);
-+ }
-+ 
-+ /* do flush (drop) operation */
-+ static void alsa_do_flush(int time)
-+ {
-+ 	if (alsa_pcm) {
-+ 		snd_pcm_drop(alsa_pcm);
-+ 		snd_pcm_prepare(alsa_pcm);
-+ 	}
-+ 	/* correct the offset */
-+ 	output_time_offset = time;
-+ 	alsa_total_written = (guint64) time * inputf->bps / 1000;
-+ 	rd_index = wr_index = alsa_hw_written = 0;
-+ }
-+ 
-+ void alsa_flush(int time)
-+ {
-+ 	flush_request = time;
-+ 	while (flush_request != -1)
-+ 		xmms_usleep(10000);
-+ }
-+ 
-+ void alsa_close(void)
-+ {
-+ 	if (! going)
-+ 		return;
-+ 
-+ 	debug("Closing device");
-+ 
-+ 	going = 0;
-+ 
-+ 	pthread_join(audio_thread, NULL);
-+ 
-+ 	alsa_cleanup_mixer();
-+ 
-+ 	xmms_convert_buffers_destroy(convertb);
-+ 	convertb = NULL;
-+ 	g_free(inputf);
-+ 	inputf = NULL;
-+ 	g_free(effectf);
-+ 	effectf = NULL;
-+ 	g_free(outputf);
-+ 	outputf = NULL;
-+ 
-+ 	alsa_save_config();
-+ 
-+ 	if (alsa_cfg.debug)
-+ 		snd_output_close(logs);
-+ 	debug("Device closed");
-+ }
-+ 
-+ /* return the size of audio data filled in the audio thread buffer */
-+ static int get_thread_buffer_filled(void)
-+ {
-+ 	int filled = wr_index - rd_index;
-+ 	if (filled >= 0)
-+ 		return filled;
-+ 	return thread_buffer_size + filled;
-+ }
-+ 
-+ /* get the free space on buffer */
-+ int alsa_free(void)
-+ {
-+ 	return thread_buffer_size - get_thread_buffer_filled() - 1;
-+ }
-+ 
-  int alsa_get_output_time(void)
-  {
-  	snd_pcm_sframes_t delay;
-! 	guint64 bytes = 0;
-  
-! 	if (!going || alsa_pcm == NULL)
-  		return 0;
-  
-! 	if (!snd_pcm_delay(alsa_pcm, &delay)) {
-! 		bytes = snd_pcm_frames_to_bytes(alsa_pcm, delay);
-! 		if (alsa_hw_written < bytes)
-! 			bytes = 0;
-! 		else
-! 			bytes = alsa_hw_written - bytes;
-! 	}
-! 	return output_time_offset + (bytes * 1000) / outputf->bps;
-  }
-  
-  int alsa_get_written_time(void)
-  {
-! 	if (!going)
-! 		return 0;
-! 	return (alsa_total_written * 1000) / inputf->bps;
-  }
-  
-  #define STEREO_ADJUST(type, type2, endian)					\
-***************
-*** 584,636 ****
-  }
-  
-  
-! void alsa_write(gpointer data, int length)
-  {
-! 	EffectPlugin *ep;
-  
-  	if (paused)
-  		return;
-  
-! 	force_start = FALSE;
-! 
-! 	if (effects_enabled() && (ep = get_current_effect_plugin()))
-! 	{
-! 		int new_freq = inputf->rate;
-! 		int new_chn = inputf->channels;
-! 		AFormat f = inputf->xmms_format;
-  		
-! 		if (ep->query_format)
-! 		{
-! 			ep->query_format(&f, &new_freq, &new_chn);
-! 			
-! 			if (f != effectf->xmms_format ||
-! 			    new_freq != effectf->rate ||
-! 			    new_chn != effectf->channels)
-! 			{
-! 				debug("Changing audio format for effect plugin");
-! 
-! 				g_free(effectf);
-! 				effectf = snd_format_from_xmms(f, new_freq,
-! 							       new_chn);
-! 				alsa_reopen(effectf);
-! 			}
-! 			
-! 		}
-  	
-  		length = ep->mod_samples(&data, length,
-  					 inputf->xmms_format,
-  					 inputf->rate,
-  					 inputf->channels);
-  	}
-- 	else if (effectf)
-- 	{
-- 		g_free(effectf);
-- 		effectf = NULL;
-- 		effectf = snd_format_from_xmms(inputf->xmms_format,
-- 					       inputf->rate,
-- 					       inputf->channels);
-- 		alsa_reopen(inputf);
-- 	}
-  
-  	if (alsa_convert_func != NULL)
-  		length = alsa_convert_func(convertb, &data, length);
---- 611,657 ----
-  }
-  
-  
-! /* transfer data to audio h/w; length is given in bytes
-!  *
-!  * data can be modified via effect plugin, rate conversion or
-!  * software volume before passed to audio h/w
-!  */
-! static void alsa_do_write(gpointer data, int length)
-  {
-! 	EffectPlugin *ep = NULL;
-! 	int new_freq;
-! 	int new_chn;
-! 	AFormat f;
-  
-  	if (paused)
-  		return;
-  
-! 	new_freq = inputf->rate;
-! 	new_chn = inputf->channels;
-! 	f = inputf->xmms_format;
-  		
-! 	if (effects_enabled() && (ep = get_current_effect_plugin()) &&
-! 	    ep->query_format)
-! 		ep->query_format(&f, &new_freq, &new_chn);
-  	
-+ 	if (f != effectf->xmms_format || new_freq != effectf->rate ||
-+ 	    new_chn != effectf->channels) {
-+ 		debug("Changing audio format for effect plugin");
-+ 		g_free(effectf);
-+ 		effectf = snd_format_from_xmms(f, new_freq, new_chn);
-+ 		if (alsa_reopen(effectf) < 0) {
-+ 			/* fatal error... */
-+ 			alsa_close();
-+ 			return;
-+ 		}
-+ 	}
-+ 
-+ 	if (ep) {
-  		length = ep->mod_samples(&data, length,
-  					 inputf->xmms_format,
-  					 inputf->rate,
-  					 inputf->channels);
-  	}
-  
-  	if (alsa_convert_func != NULL)
-  		length = alsa_convert_func(convertb, &data, length);
-***************
-*** 644,656 ****
-  	if (alsa_cfg.soft_volume)
-  		volume_adjust(data, length, outputf->xmms_format, outputf->channels);
-  
-! 	if (mmap)
-! 		alsa_mmap_audio(data, length);
-! 	else
-! 		alsa_write_audio(data, length);
-  }
-  
-! static void alsa_write_audio(gpointer data, int length)
-  {
-  	snd_pcm_sframes_t written_frames;
-  
---- 665,693 ----
-  	if (alsa_cfg.soft_volume)
-  		volume_adjust(data, length, outputf->xmms_format, outputf->channels);
-  
-! 	alsa_write_audio(data, length);
-  }
-  
-! /* write callback */
-! void alsa_write(gpointer data, int length)
-! {
-! 	int cnt;
-! 	char *src = (char *)data;
-! 
-! 	alsa_total_written += length;
-! 	while (length > 0) {
-! 		int wr;
-! 		cnt = MIN(length, thread_buffer_size - wr_index);
-! 		memcpy(thread_buffer + wr_index, src, cnt);
-! 		wr = (wr_index + cnt) % thread_buffer_size;
-! 		wr_index = wr;
-! 		length -= cnt;
-! 		src += cnt;
-! 	}
-! }
-! 
-! /* transfer data to audio h/w via normal write */
-! static void alsa_write_audio(char *data, int length)
-  {
-  	snd_pcm_sframes_t written_frames;
-  
-***************
-*** 663,735 ****
-  		{
-  			int written = snd_pcm_frames_to_bytes(alsa_pcm,
-  							      written_frames);
-- 			alsa_total_written += written;
-  			length -= written;
-! 			data = (char*) data + written;
-  		}
-! 		else if (written_frames == -EPIPE)
-! 			xrun_recover();
-! 		else
-! 		{
-! 			g_warning("alsa_write_audio(): write error: %s",
-! 				  snd_strerror(-written_frames));
-! 			break;
-  		}
-  	}
-  }
-  
-! static void alsa_mmap_audio(char *data, int length)
-  {
-! 	int cnt = 0, err;
-! 	snd_pcm_uframes_t offset, frames, frame;
-! 	const snd_pcm_channel_area_t *chan_areas = areas;
-! 	int channel_offset = 0, channel;
-! 	ssize_t sample_size, offset_bytes, step;
-! 
-! 	alsa_get_avail();
-  
-! 	while (length > 0)
-! 	{
-! 		frames = snd_pcm_bytes_to_frames(alsa_pcm, length);
-! 		if ((err = snd_pcm_mmap_begin(alsa_pcm, &chan_areas, &offset, &frames) < 0))
-! 			g_warning("alsa_mmap_audio(): snd_pcm_mmap_begin() "
-! 				  "failed: %s", snd_strerror(-err));
-! 
-! 		cnt = snd_pcm_frames_to_bytes(alsa_pcm, frames);
-! 
-! 		sample_size = snd_pcm_samples_to_bytes(alsa_pcm, 1);
-! 		step = chan_areas[0].step / 8;
-! 		offset_bytes = offset * step;
-  
-! 		for (frame = 0; frame < frames; frame++)
-! 		{
-! 			for (channel = 0; channel < outputf->channels; channel++)
-! 			{
-! 				char *ptr = chan_areas[channel].addr;
-! 				memcpy(ptr + chan_areas[channel].first / 8 +
-! 				       offset_bytes,
-! 				       data + channel_offset, sample_size);
-! 				channel_offset += sample_size;
-  			}
-! 			offset_bytes += step;
-  		}
-- 			
-- 		err = snd_pcm_mmap_commit(alsa_pcm, offset, frames);
-- 		if (err == -EPIPE)
-- 			xrun_recover();
-- 		else if (err < 0)
-- 			g_warning("alsa_mmap_audio(): snd_pcm_mmap_commit() "
-- 				  "failed: %s", snd_strerror(-err));
-- 		else if (err != frames)
-- 			g_warning("alsa_mmap_audio(): snd_pcm_mmap_commit "
-- 				  "returned %d, expected %d", err, (int)frames);
-- 		
-- 		alsa_total_written += cnt;
-- 		
-- 		length -= cnt;
-  	}
-  }
-  
-  int alsa_open(AFormat fmt, int rate, int nch)
-  {
-  	debug("Opening device");
---- 700,785 ----
-  		{
-  			int written = snd_pcm_frames_to_bytes(alsa_pcm,
-  							      written_frames);
-  			length -= written;
-! 			data += written;
-! 			alsa_hw_written += written;
-  		}
-! 		else {
-! 			int err = alsa_handle_error((int)written_frames);
-! 			if (err < 0) {
-! 				g_warning("alsa_write_audio(): write error: %s",
-! 					  snd_strerror(-err));
-! 				break;
-! 			}
-  		}
-  	}
-  }
-  
-! /* transfer audio data from thread buffer to h/w */
-! static void alsa_write_out_thread_data(void)
-  {
-! 	gint length, cnt, avail;
-  
-! 	length = MIN(hw_period_size_in, get_thread_buffer_filled());
-! 	avail = snd_pcm_frames_to_bytes(alsa_pcm, alsa_get_avail());
-! 	length = MIN(length, avail);
-! 	while (length > 0) {
-! 		int rd;
-! 		cnt = MIN(length, thread_buffer_size - rd_index);
-! 		alsa_do_write(thread_buffer + rd_index, cnt);
-! 		rd = (rd_index + cnt) % thread_buffer_size;
-! 		rd_index = rd;
-! 		length -= cnt;
-! 	}
-! }
-  
-! /* audio thread loop */
-! /* FIXME: proper lock? */
-! static void *alsa_loop(void *arg)
-! {
-! 	int npfds = snd_pcm_poll_descriptors_count(alsa_pcm);
-! 	struct pollfd *pfds;
-! 	unsigned short *revents;
-! 
-! 	if (npfds <= 0)
-! 		goto _error;
-! 	pfds = alloca(sizeof(*pfds) * npfds);
-! 	revents = alloca(sizeof(*revents) * npfds);
-! 	while (going && alsa_pcm) {
-! 		if (! paused && get_thread_buffer_filled() > hw_period_size_in) {
-! 			snd_pcm_poll_descriptors(alsa_pcm, pfds, npfds);
-! 			if (poll(pfds, npfds, 10) > 0) { 
-! 				/* need to check revents.  poll() with dmix returns
-! 				 * a postive value even if no data is available
-! 				 */
-! 				int i;
-! 				snd_pcm_poll_descriptors_revents(alsa_pcm, pfds, npfds, revents);
-! 				for (i = 0; i < npfds; i++)
-! 					if (revents[i] & POLLOUT) {
-! 						alsa_write_out_thread_data();
-! 						break;
-! 					}
-  			}
-! 		} else
-! 			xmms_usleep(10000);
-! 
-! 		if (pause_request != paused)
-! 			alsa_do_pause(pause_request);
-! 
-! 		if (flush_request != -1) {
-! 			alsa_do_flush(flush_request);
-! 			flush_request = -1;
-  		}
-  	}
-+ 
-+  _error:
-+ 	alsa_close_pcm();
-+ 	g_free(thread_buffer);
-+ 	thread_buffer = NULL;
-+ 	pthread_exit(NULL);
-  }
-  
-+ /* open callback */
-  int alsa_open(AFormat fmt, int rate, int nch)
-  {
-  	debug("Opening device");
-***************
-*** 739,746 ****
-  	if (alsa_cfg.debug)
-  		snd_output_stdio_attach(&logs, stdout, 0);
-  
-- 	mmap = alsa_cfg.mmap;
-- 
-  	if (alsa_setup(inputf) < 0)
-  	{
-  		alsa_close();
---- 789,794 ----
-***************
-*** 751,763 ****
-  
-  	convertb = xmms_convert_buffers_new();
-  	
-! 	alsa_total_written = 0;
-  	going = TRUE;
-  	paused = FALSE;
-- 	force_start = FALSE;
-- 	
-- 	snd_pcm_prepare(alsa_pcm);
-  	
-  	return 1;
-  }
-  
---- 799,823 ----
-  
-  	convertb = xmms_convert_buffers_new();
-  	
-! 	output_time_offset = 0;
-! 	alsa_total_written = alsa_hw_written = 0;
-  	going = TRUE;
-  	paused = FALSE;
-  	
-+ 	thread_buffer_size = (guint64)alsa_cfg.thread_buffer_time * inputf->bps / 1000;
-+ 	if (thread_buffer_size < hw_buffer_size)
-+ 		thread_buffer_size = hw_buffer_size * 2;
-+ 	if (thread_buffer_size < 8192)
-+ 		thread_buffer_size = 8192;
-+ 	thread_buffer_size += hw_buffer_size;
-+ 	thread_buffer_size -= thread_buffer_size % hw_period_size;
-+ 	thread_buffer = g_malloc0(thread_buffer_size);
-+ 	wr_index = rd_index = 0;
-+ 	pause_request = FALSE;
-+ 	flush_request = -1;
-+ 
-+ 	pthread_create(&audio_thread, NULL, alsa_loop, NULL);
-+ 
-  	return 1;
-  }
-  
-***************
-*** 787,792 ****
---- 847,854 ----
-  
-  	f->rate = rate;
-  	f->channels = channels;
-+ 	f->sample_bits = snd_pcm_format_physical_width(f->format);
-+ 	f->bps = (rate * f->sample_bits * channels) >> 3;
-  
-  	return f;
-  }
-***************
-*** 806,812 ****
-  	int err;
-  	snd_pcm_hw_params_t *hwparams;
-  	snd_pcm_sw_params_t *swparams;
-! 	int alsa_buffer_time, bits_per_sample;
-  	unsigned int alsa_period_time;
-  	snd_pcm_uframes_t alsa_buffer_size, alsa_period_size;
-  
---- 868,874 ----
-  	int err;
-  	snd_pcm_hw_params_t *hwparams;
-  	snd_pcm_sw_params_t *swparams;
-! 	int alsa_buffer_time;
-  	unsigned int alsa_period_time;
-  	snd_pcm_uframes_t alsa_buffer_size, alsa_period_size;
-  
-***************
-*** 816,824 ****
-  	alsa_stereo_convert_func = NULL;
-  	alsa_frequency_convert_func = NULL;
-  
-! 	outputf = snd_format_from_xmms(effectf->xmms_format,
-! 				       effectf->rate,
-! 				       effectf->channels);
-  
-  	debug("Opening device: %s", alsa_cfg.pcm_device);
-  	/* FIXME: Can snd_pcm_open() return EAGAIN? */
---- 878,885 ----
-  	alsa_stereo_convert_func = NULL;
-  	alsa_frequency_convert_func = NULL;
-  
-! 	g_free(outputf);
-! 	outputf = snd_format_from_xmms(f->xmms_format, f->rate, f->channels);
-  
-  	debug("Opening device: %s", alsa_cfg.pcm_device);
-  	/* FIXME: Can snd_pcm_open() return EAGAIN? */
-***************
-*** 829,838 ****
-  		g_warning("alsa_setup(): Failed to open pcm device (%s): %s",
-  			  alsa_cfg.pcm_device, snd_strerror(-err));
-  		alsa_pcm = NULL;
-  		return -1;
-  	}
-- 	snd_pcm_nonblock(alsa_pcm, FALSE);
-  
-  	if (alsa_cfg.debug)
-  	{
-  		snd_pcm_info_t *info;
---- 890,903 ----
-  		g_warning("alsa_setup(): Failed to open pcm device (%s): %s",
-  			  alsa_cfg.pcm_device, snd_strerror(-err));
-  		alsa_pcm = NULL;
-+ 		g_free(outputf);
-+ 		outputf = NULL;
-  		return -1;
-  	}
-  
-+ 	/* doesn't care about non-blocking */
-+ 	/* snd_pcm_nonblock(alsa_pcm, 0); */
-+ 	
-  	if (alsa_cfg.debug)
-  	{
-  		snd_pcm_info_t *info;
-***************
-*** 856,872 ****
-  		return -1;
-  	}
-  
-! 	if (mmap &&
-! 	    (err = snd_pcm_hw_params_set_access(alsa_pcm, hwparams,
-! 						SND_PCM_ACCESS_MMAP_INTERLEAVED)) < 0)
-! 	{
-! 		g_message("alsa_setup(): Cannot set mmap'ed mode: %s. "
-! 			  "falling back to direct write", snd_strerror(-err));
-! 		mmap = 0;
-! 	}
-! 
-! 	if (!mmap &&
-! 	    (err = snd_pcm_hw_params_set_access(alsa_pcm, hwparams,
-  						SND_PCM_ACCESS_RW_INTERLEAVED)) < 0)
-  	{
-  		g_warning("alsa_setup(): Cannot set direct write mode: %s",
---- 921,927 ----
-  		return -1;
-  	}
-  
-! 	if ((err = snd_pcm_hw_params_set_access(alsa_pcm, hwparams,
-  						SND_PCM_ACCESS_RW_INTERLEAVED)) < 0)
-  	{
-  		g_warning("alsa_setup(): Cannot set direct write mode: %s",
-***************
-*** 894,910 ****
-  				break;
-  			}
-  		}
-! 		if (outputf->format != effectf->format)
-  		{
-  			outputf->xmms_format =
-  				format_from_alsa(outputf->format);
-  			debug("Converting format from %d to %d",
-! 			      effectf->xmms_format, outputf->xmms_format);
-  			if (outputf->xmms_format < 0)
-  				return -1;
-  			alsa_convert_func =
-  				xmms_convert_get_func(outputf->xmms_format,
-! 						      effectf->xmms_format);
-  			if (alsa_convert_func == NULL)
-  				return -1;
-  		}
---- 949,965 ----
-  				break;
-  			}
-  		}
-! 		if (outputf->format != f->format)
-  		{
-  			outputf->xmms_format =
-  				format_from_alsa(outputf->format);
-  			debug("Converting format from %d to %d",
-! 			      f->xmms_format, outputf->xmms_format);
-  			if (outputf->xmms_format < 0)
-  				return -1;
-  			alsa_convert_func =
-  				xmms_convert_get_func(outputf->xmms_format,
-! 						      f->xmms_format);
-  			if (alsa_convert_func == NULL)
-  				return -1;
-  		}
-***************
-*** 918,931 ****
-  	}
-  
-  	snd_pcm_hw_params_set_channels_near(alsa_pcm, hwparams, &outputf->channels);
-! 	if (outputf->channels != effectf->channels)
-  	{
-  		debug("Converting channels from %d to %d",
-! 		      effectf->channels, outputf->channels);
-  		alsa_stereo_convert_func =
-  			xmms_convert_get_channel_func(outputf->xmms_format,
-  						      outputf->channels,
-! 						      effectf->channels);
-  		if (alsa_stereo_convert_func == NULL)
-  			return -1;
-  	}
---- 973,986 ----
-  	}
-  
-  	snd_pcm_hw_params_set_channels_near(alsa_pcm, hwparams, &outputf->channels);
-! 	if (outputf->channels != f->channels)
-  	{
-  		debug("Converting channels from %d to %d",
-! 		      f->channels, outputf->channels);
-  		alsa_stereo_convert_func =
-  			xmms_convert_get_channel_func(outputf->xmms_format,
-  						      outputf->channels,
-! 						      f->channels);
-  		if (alsa_stereo_convert_func == NULL)
-  			return -1;
-  	}
-***************
-*** 936,945 ****
-  		g_warning("alsa_setup(): No usable samplerate available.");
-  		return -1;
-  	}
-! 	if (outputf->rate != effectf->rate)
-  	{
-  		debug("Converting samplerate from %d to %d",
-! 		      effectf->rate, outputf->rate);
-  		alsa_frequency_convert_func =
-  			xmms_convert_get_frequency_func(outputf->xmms_format,
-  							outputf->channels);
---- 991,1000 ----
-  		g_warning("alsa_setup(): No usable samplerate available.");
-  		return -1;
-  	}
-! 	if (outputf->rate != f->rate)
-  	{
-  		debug("Converting samplerate from %d to %d",
-! 		      f->rate, outputf->rate);
-  		alsa_frequency_convert_func =
-  			xmms_convert_get_frequency_func(outputf->xmms_format,
-  							outputf->channels);
-***************
-*** 947,960 ****
-  			return -1;
-  	}
-  
-! 	alsa_buffer_time = alsa_cfg.buffer_time * 1000;
-! 	if ((err = snd_pcm_hw_params_set_buffer_time_near(alsa_pcm, hwparams,
-! 							  &alsa_buffer_time, 0)) < 0)
-! 	{
-! 		g_warning("alsa_setup(): Set buffer time failed: %s.",
-! 			  snd_strerror(-err));
-! 		return -1;
-! 	}
-  
-  	alsa_period_time = alsa_cfg.period_time * 1000;
-  	if ((err = snd_pcm_hw_params_set_period_time_near(alsa_pcm, hwparams,
---- 1002,1009 ----
-  			return -1;
-  	}
-  
-! 	outputf->sample_bits = snd_pcm_format_physical_width(outputf->format);
-! 	outputf->bps = (outputf->rate * outputf->sample_bits * outputf->channels) >> 3;
-  
-  	alsa_period_time = alsa_cfg.period_time * 1000;
-  	if ((err = snd_pcm_hw_params_set_period_time_near(alsa_pcm, hwparams,
-***************
-*** 965,970 ****
---- 1014,1028 ----
-  		return -1;
-  	}
-  
-+ 	alsa_buffer_time = alsa_cfg.buffer_time * 1000;
-+ 	if ((err = snd_pcm_hw_params_set_buffer_time_near(alsa_pcm, hwparams,
-+ 							  &alsa_buffer_time, 0)) < 0)
-+ 	{
-+ 		g_warning("alsa_setup(): Set buffer time failed: %s.",
-+ 			  snd_strerror(-err));
-+ 		return -1;
-+ 	}
-+ 
-  	if (snd_pcm_hw_params(alsa_pcm, hwparams) < 0)
-  	{
-  		if (alsa_cfg.debug)
-***************
-*** 1011,1037 ****
-  		snd_pcm_dump(alsa_pcm, logs);
-  	}
-  
-! 	bits_per_sample = snd_pcm_format_physical_width(outputf->format);
-! 	alsa_bps = (outputf->rate * bits_per_sample * outputf->channels) >> 3;
-! 
-! 	if (mmap)
-! 	{
-! 		int chn;
-! 		buffer = g_malloc(alsa_period_size * bits_per_sample / 8 * outputf->channels);
-! 		areas = g_malloc0(outputf->channels * sizeof(snd_pcm_channel_area_t));
-! 		
-! 		for (chn = 0; chn < outputf->channels; chn++)
-! 		{
-! 			areas[chn].addr = buffer;
-! 			areas[chn].first = chn * bits_per_sample;
-! 			areas[chn].step = outputf->channels * bits_per_sample;
-! 		}
-  	}
-  
-  	debug("Device setup: buffer time: %i, size: %i.", alsa_buffer_time,
-! 	      snd_pcm_frames_to_bytes(alsa_pcm, alsa_buffer_size));
-  	debug("bits per sample: %i; frame size: %i; Bps: %i",
-! 	      bits_per_sample, snd_pcm_frames_to_bytes(alsa_pcm, 1), alsa_bps);
-  
-  	return 0;
-  }
---- 1069,1096 ----
-  		snd_pcm_dump(alsa_pcm, logs);
-  	}
-  
-! 	hw_buffer_size = snd_pcm_frames_to_bytes(alsa_pcm, alsa_buffer_size);
-! 	hw_period_size = snd_pcm_frames_to_bytes(alsa_pcm, alsa_period_size);
-! 	if (inputf->bps != outputf->bps) {
-! 		int align = (inputf->sample_bits * inputf->channels) / 8;
-! 		hw_buffer_size_in = ((guint64)hw_buffer_size * inputf->bps +
-! 				     outputf->bps/2) / outputf->bps;
-! 		hw_period_size_in = ((guint64)hw_period_size * inputf->bps +
-! 				     outputf->bps/2) / outputf->bps;
-! 		hw_buffer_size_in -= hw_buffer_size_in % align;
-! 		hw_period_size_in -= hw_period_size_in % align;
-! 	} else {
-! 		hw_buffer_size_in = hw_buffer_size;
-! 		hw_period_size_in = hw_period_size;
-  	}
-  
-  	debug("Device setup: buffer time: %i, size: %i.", alsa_buffer_time,
-! 	      hw_buffer_size);
-! 	debug("Device setup: period time: %i, size: %i.", alsa_period_time,
-! 	      hw_period_size);
-  	debug("bits per sample: %i; frame size: %i; Bps: %i",
-! 	      snd_pcm_format_physical_width(outputf->format),
-! 	      snd_pcm_frames_to_bytes(alsa_pcm, 1), outputf->bps);
-  
-  	return 0;
-  }
-diff -rc xmms-1.2.10-orig/Output/alsa/configure.c xmms-1.2.10/Output/alsa/configure.c
-*** xmms-1.2.10-orig/Output/alsa/configure.c	2004-01-28 00:09:39.000000000 +0100
---- xmms-1.2.10/Output/alsa/configure.c	2006-01-27 00:28:49.000000000 +0100
-***************
-*** 20,27 ****
-  #include <stdio.h>
-  
-  static GtkWidget *configure_win = NULL;
-! static GtkWidget *buffer_time_spin, *period_time_spin;
-! static GtkWidget *mmap_button, *mixer_card_spin, *softvolume_toggle_button;
-  
-  static GtkWidget *devices_combo, *mixer_devices_combo;
-  
---- 20,27 ----
-  #include <stdio.h>
-  
-  static GtkWidget *configure_win = NULL;
-! static GtkWidget *buffer_time_spin, *period_time_spin, *thread_buffer_time_spin;
-! static GtkWidget *mixer_card_spin, *softvolume_toggle_button;
-  
-  static GtkWidget *devices_combo, *mixer_devices_combo;
-  
-***************
-*** 36,42 ****
-  	alsa_cfg.pcm_device = GET_CHARS(GTK_COMBO(devices_combo)->entry);
-  	alsa_cfg.buffer_time = GET_SPIN_INT(buffer_time_spin);
-  	alsa_cfg.period_time = GET_SPIN_INT(period_time_spin);
-! 	alsa_cfg.mmap = GET_TOGGLE(mmap_button);
-  	alsa_cfg.soft_volume = GET_TOGGLE(softvolume_toggle_button);
-  	alsa_cfg.mixer_card = GET_SPIN_INT(mixer_card_spin);
-  	alsa_cfg.mixer_device = GET_CHARS(GTK_COMBO(mixer_devices_combo)->entry);
---- 36,42 ----
-  	alsa_cfg.pcm_device = GET_CHARS(GTK_COMBO(devices_combo)->entry);
-  	alsa_cfg.buffer_time = GET_SPIN_INT(buffer_time_spin);
-  	alsa_cfg.period_time = GET_SPIN_INT(period_time_spin);
-! 	alsa_cfg.thread_buffer_time = GET_SPIN_INT(thread_buffer_time_spin);
-  	alsa_cfg.soft_volume = GET_TOGGLE(softvolume_toggle_button);
-  	alsa_cfg.mixer_card = GET_SPIN_INT(mixer_card_spin);
-  	alsa_cfg.mixer_device = GET_CHARS(GTK_COMBO(mixer_devices_combo)->entry);
-***************
-*** 51,57 ****
-  	
-  	xmms_cfg_write_int(cfgfile, "ALSA", "buffer_time", alsa_cfg.buffer_time);
-  	xmms_cfg_write_int(cfgfile, "ALSA", "period_time", alsa_cfg.period_time);
-! 	xmms_cfg_write_boolean(cfgfile,"ALSA","mmap",alsa_cfg.mmap);
-  	xmms_cfg_write_string(cfgfile,"ALSA","pcm_device", alsa_cfg.pcm_device);
-  	xmms_cfg_write_int(cfgfile, "ALSA", "mixer_card", alsa_cfg.mixer_card);
-  	xmms_cfg_write_string(cfgfile,"ALSA","mixer_device", alsa_cfg.mixer_device);
---- 51,57 ----
-  	
-  	xmms_cfg_write_int(cfgfile, "ALSA", "buffer_time", alsa_cfg.buffer_time);
-  	xmms_cfg_write_int(cfgfile, "ALSA", "period_time", alsa_cfg.period_time);
-! 	xmms_cfg_write_int(cfgfile, "ALSA", "thread_buffer_time", alsa_cfg.thread_buffer_time);
-  	xmms_cfg_write_string(cfgfile,"ALSA","pcm_device", alsa_cfg.pcm_device);
-  	xmms_cfg_write_int(cfgfile, "ALSA", "mixer_card", alsa_cfg.mixer_card);
-  	xmms_cfg_write_string(cfgfile,"ALSA","mixer_device", alsa_cfg.mixer_device);
-***************
-*** 212,219 ****
-  	GtkWidget *dev_vbox, *adevice_frame, *adevice_box;
-  	GtkWidget *mixer_frame, *mixer_box, *mixer_card_box;
-  	GtkWidget *buffer_frame, *buffer_vbox, *buffer_table;
-! 	GtkWidget *buffer_time_label, *period_time_label;
-! 	GtkObject *buffer_time_adj, *period_time_adj, *mixer_card_adj;
-  	GtkWidget *bbox, *ok, *cancel;
-  	
-  	if (configure_win)
---- 212,219 ----
-  	GtkWidget *dev_vbox, *adevice_frame, *adevice_box;
-  	GtkWidget *mixer_frame, *mixer_box, *mixer_card_box;
-  	GtkWidget *buffer_frame, *buffer_vbox, *buffer_table;
-! 	GtkWidget *buffer_time_label, *period_time_label, *thread_buffer_time_label;
-! 	GtkObject *buffer_time_adj, *period_time_adj, *thread_buffer_time_adj, *mixer_card_adj;
-  	GtkWidget *bbox, *ok, *cancel;
-  	
-  	if (configure_win)
-***************
-*** 312,318 ****
-  	
-  	gtk_container_set_border_width(GTK_CONTAINER(buffer_vbox), 5);
-  
-! 	buffer_table = gtk_table_new(2, 2, FALSE);
-  	gtk_table_set_row_spacings(GTK_TABLE(buffer_table), 5);
-  	gtk_table_set_col_spacings(GTK_TABLE(buffer_table), 5);
-  	gtk_box_pack_start(GTK_BOX(buffer_vbox), buffer_table, FALSE, FALSE, 0);
---- 312,318 ----
-  	
-  	gtk_container_set_border_width(GTK_CONTAINER(buffer_vbox), 5);
-  
-! 	buffer_table = gtk_table_new(2, 3, FALSE);
-  	gtk_table_set_row_spacings(GTK_TABLE(buffer_table), 5);
-  	gtk_table_set_col_spacings(GTK_TABLE(buffer_table), 5);
-  	gtk_box_pack_start(GTK_BOX(buffer_vbox), buffer_table, FALSE, FALSE, 0);
-***************
-*** 345,354 ****
-  	gtk_table_attach(GTK_TABLE(buffer_table), period_time_spin,
-  			 1, 2, 1, 2, 0, 0, 0, 0);
-  	
-! 	mmap_button = gtk_check_button_new_with_label(_("Mmap mode"));
-! 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmap_button),
-! 				     alsa_cfg.mmap);
-! 	gtk_box_pack_start(GTK_BOX(buffer_vbox), mmap_button, FALSE, FALSE, 0);
-  	
-  	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), buffer_frame,
-  				 gtk_label_new(_("Advanced settings")));
---- 345,363 ----
-  	gtk_table_attach(GTK_TABLE(buffer_table), period_time_spin,
-  			 1, 2, 1, 2, 0, 0, 0, 0);
-  	
-! 	thread_buffer_time_label = gtk_label_new(_("Thread buffer time (ms):"));
-! 	gtk_label_set_justify(GTK_LABEL(thread_buffer_time_label), GTK_JUSTIFY_LEFT);
-! 	gtk_misc_set_alignment(GTK_MISC(thread_buffer_time_label), 0, 0.5);
-! 	gtk_table_attach(GTK_TABLE(buffer_table), thread_buffer_time_label,
-! 			 0, 1, 2, 3, GTK_FILL, 0, 0, 0);
-! 	thread_buffer_time_adj = gtk_adjustment_new(alsa_cfg.thread_buffer_time,
-! 						    1000, 1000000, 100, 100, 100);
-! 	thread_buffer_time_spin = gtk_spin_button_new(GTK_ADJUSTMENT(thread_buffer_time_adj),
-! 						      8, 0);
-! 	
-! 	gtk_widget_set_usize(thread_buffer_time_spin, 60, -1);
-! 	gtk_table_attach(GTK_TABLE(buffer_table), thread_buffer_time_spin,
-! 			 1, 2, 2, 3, 0, 0, 0, 0);
-  	
-  	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), buffer_frame,
-  				 gtk_label_new(_("Advanced settings")));
-diff -rc xmms-1.2.10-orig/Output/alsa/init.c xmms-1.2.10/Output/alsa/init.c
-*** xmms-1.2.10-orig/Output/alsa/init.c	2004-01-11 17:27:26.000000000 +0100
---- xmms-1.2.10/Output/alsa/init.c	2006-01-27 00:28:49.000000000 +0100
-***************
-*** 29,36 ****
-  	memset(&alsa_cfg, 0, sizeof (alsa_cfg));
-  	alsa_cfg.buffer_time = 500;
-  	alsa_cfg.period_time = 50;
-  	alsa_cfg.debug = 0;
-- 	alsa_cfg.mmap = 1;
-  	alsa_cfg.vol.left = 100;
-  	alsa_cfg.vol.right = 100;
-  
---- 29,36 ----
-  	memset(&alsa_cfg, 0, sizeof (alsa_cfg));
-  	alsa_cfg.buffer_time = 500;
-  	alsa_cfg.period_time = 50;
-+ 	alsa_cfg.thread_buffer_time = 3000;
-  	alsa_cfg.debug = 0;
-  	alsa_cfg.vol.left = 100;
-  	alsa_cfg.vol.right = 100;
-  
-***************
-*** 44,51 ****
-  	xmms_cfg_read_int(cfgfile, "ALSA", "mixer_card", &alsa_cfg.mixer_card);
-  	xmms_cfg_read_int(cfgfile, "ALSA", "buffer_time", &alsa_cfg.buffer_time);
-  	xmms_cfg_read_int(cfgfile, "ALSA", "period_time", &alsa_cfg.period_time);
-! 	xmms_cfg_read_boolean(cfgfile, "ALSA", "mmap", &alsa_cfg.mmap);
-! 	xmms_cfg_read_int(cfgfile, "ALSA", "period_time", &alsa_cfg.period_time);
-  	xmms_cfg_read_boolean(cfgfile, "ALSA", "soft_volume",
-  			      &alsa_cfg.soft_volume);
-  	xmms_cfg_read_int(cfgfile, "ALSA", "volume_left", &alsa_cfg.vol.left);
---- 44,50 ----
-  	xmms_cfg_read_int(cfgfile, "ALSA", "mixer_card", &alsa_cfg.mixer_card);
-  	xmms_cfg_read_int(cfgfile, "ALSA", "buffer_time", &alsa_cfg.buffer_time);
-  	xmms_cfg_read_int(cfgfile, "ALSA", "period_time", &alsa_cfg.period_time);
-! 	xmms_cfg_read_int(cfgfile, "ALSA", "thread_buffer_time", &alsa_cfg.thread_buffer_time);
-  	xmms_cfg_read_boolean(cfgfile, "ALSA", "soft_volume",
-  			      &alsa_cfg.soft_volume);
-  	xmms_cfg_read_int(cfgfile, "ALSA", "volume_left", &alsa_cfg.vol.left);
diff --git a/pkgs/applications/audio/xmms/default.nix b/pkgs/applications/audio/xmms/default.nix
deleted file mode 100644
index 6152e325bb61..000000000000
--- a/pkgs/applications/audio/xmms/default.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{stdenv, fetchurl, alsaLib, esound, libogg, libvorbis, glib, gtk}:
-
-stdenv.mkDerivation {
-  name = "xmms-1.2.10";
-  
-  src = fetchurl {
-    url = http://nixos.org/tarballs/xmms-1.2.10.tar.bz2;
-    md5 = "03a85cfc5e1877a2e1f7be4fa1d3f63c";
-  };
-
-  # Patch borrowed from SuSE 10.0 to fix pause/continue on ALSA.
-  patches = [./alsa.patch];
-
-  buildInputs = [alsaLib esound libogg libvorbis glib gtk];
-
-  meta = {
-    description = "A music player very similar to Winamp";
-    homepage = http://www.xmms.org;
-    platforms = stdenv.lib.platforms.linux;
-  };
-}
diff --git a/pkgs/applications/editors/emacs-modes/emacs-w3m/default.nix b/pkgs/applications/editors/emacs-modes/emacs-w3m/default.nix
index 2e182170b191..a7ff4e624a11 100644
--- a/pkgs/applications/editors/emacs-modes/emacs-w3m/default.nix
+++ b/pkgs/applications/editors/emacs-modes/emacs-w3m/default.nix
@@ -1,6 +1,6 @@
 { fetchcvs, stdenv, emacs, w3m, imagemagick, texinfo, autoconf }:
 
-let date = "2009-07-09"; in
+let date = "2012-01-15"; in
 stdenv.mkDerivation rec {
   name = "emacs-w3m-cvs${date}";
 
diff --git a/pkgs/applications/graphics/graphicsmagick/1.3.7.nix b/pkgs/applications/graphics/graphicsmagick/1.3.7.nix
index 0d33cc757b90..291d61d5f6f5 100644
--- a/pkgs/applications/graphics/graphicsmagick/1.3.7.nix
+++ b/pkgs/applications/graphics/graphicsmagick/1.3.7.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation {
     homepage = http://www.graphicsmagick.org;
     description = "Swiss army knife of image processing";
     license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.all;
   };
 }
diff --git a/pkgs/applications/graphics/graphicsmagick/default.nix b/pkgs/applications/graphics/graphicsmagick/default.nix
index 980413bc8f81..0636903d329f 100644
--- a/pkgs/applications/graphics/graphicsmagick/default.nix
+++ b/pkgs/applications/graphics/graphicsmagick/default.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation {
     homepage = http://www.graphicsmagick.org;
     description = "Swiss army knife of image processing";
     license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.all;
   };
 }
diff --git a/pkgs/applications/misc/adobe-reader/default.nix b/pkgs/applications/misc/adobe-reader/default.nix
index e56982a6680b..25bce4203eed 100644
--- a/pkgs/applications/misc/adobe-reader/default.nix
+++ b/pkgs/applications/misc/adobe-reader/default.nix
@@ -3,13 +3,13 @@
 assert stdenv.system == "i686-linux";
 
 stdenv.mkDerivation {
-  name = "adobe-reader-9.4.2-1";
+  name = "adobe-reader-9.4.7-1";
   
   builder = ./builder.sh;
   
   src = fetchurl {
-    url = http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.4.2/enu/AdbeRdr9.4.2-1_i486linux_enu.tar.bz2;
-    sha256 = "0xm8ngr7lslhxli9ly1g2w7ichip88vpf7lfx1ma0liaw4m2gv0h";
+    url = http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.4.7/enu/AdbeRdr9.4.7-1_i486linux_enu.tar.bz2;
+    sha256 = "0bzx1rcwc9bi5jkh8f8hjb354zxlvvx37lhm0l2r0mjxj8fimfb5";
   };
 
   # !!! Adobe Reader contains copies of OpenSSL, libcurl, and libicu.
diff --git a/pkgs/applications/misc/goldendict/default.nix b/pkgs/applications/misc/goldendict/default.nix
new file mode 100644
index 000000000000..881f5339bdf8
--- /dev/null
+++ b/pkgs/applications/misc/goldendict/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, qt4, libXtst, libvorbis, phonon, hunspell }:
+stdenv.mkDerivation rec {
+  name = "goldendict-1.0.1";
+  src = fetchurl {
+    url = "mirror://sourceforge/goldendict/${name}-src.tar.bz2";
+    sha256 = "19p99dd5jgs0k66sy30vck7ymqj6dv1lh6w8xw18zczdll2h9yxk";
+  };
+  buildInputs = [ qt4 libXtst libvorbis phonon hunspell ];
+  unpackPhase = ''
+    mkdir ${name}-src
+    cd ${name}-src
+    tar xf ${src}
+  '';
+  patches = [ ./goldendict-paths.diff ];
+  patchFlags = "-p 0";
+  configurePhase = ''
+    qmake
+  '';
+  installPhase = ''
+    make INSTALL_ROOT="$out" install
+    rm -rf "$out/share/app-install"
+  '';
+
+  meta = {
+    homepage = http://goldendict.org/;
+    description = "a feature-rich dictionary lookup program";
+
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.astsmtl ];
+  };
+}
diff --git a/pkgs/applications/misc/goldendict/goldendict-paths.diff b/pkgs/applications/misc/goldendict/goldendict-paths.diff
new file mode 100644
index 000000000000..6682911dbe42
--- /dev/null
+++ b/pkgs/applications/misc/goldendict/goldendict-paths.diff
@@ -0,0 +1,10 @@
+--- goldendict.pro~	2010-12-27 22:52:21.000000000 +0100
++++ goldendict.pro	2010-12-27 22:52:21.000000000 +0100
+@@ -63,2 +63,2 @@
+-    isEmpty( PREFIX ):PREFIX = /usr/local
+-    DEFINES += PROGRAM_DATA_DIR=\\\"$$PREFIX/share/apps/goldendict/\\\"
++    isEmpty( PREFIX ):PREFIX = /
++    DEFINES += PROGRAM_DATA_DIR=\\\"$$PREFIX/share/goldendict/\\\"
+@@ -66 +66 @@
+-    locale.path = $$PREFIX/share/apps/goldendict/locale/
++    locale.path = $$PREFIX/share/goldendict/locale/
diff --git a/pkgs/applications/misc/ikiwiki/default.nix b/pkgs/applications/misc/ikiwiki/default.nix
index fc800dc22225..feb507c87320 100644
--- a/pkgs/applications/misc/ikiwiki/default.nix
+++ b/pkgs/applications/misc/ikiwiki/default.nix
@@ -13,14 +13,14 @@ assert monotoneSupport -> (monotone != null);
 
 let
   name = "ikiwiki";
-  version = "3.20120109";
+  version = "3.20120115";
 in
 stdenv.mkDerivation {
   name = "${name}-${version}";
 
   src = fetchurl {
     url = "http://ftp.de.debian.org/debian/pool/main/i/ikiwiki/${name}_${version}.tar.gz";
-    sha256 = "0a47135c039f3dfd62162dd3b250397fcdab2dbb4bf4cf0433099f6e48d6f3e8";
+    sha256 = "3145372b3d86068f90348a96f9daf3a3b438d747be0e977358d82ee752499c1f";
   };
 
   buildInputs = [ perl TextMarkdown URI HTMLParser HTMLScrubber HTMLTemplate
diff --git a/pkgs/applications/misc/truecrypt/default.nix b/pkgs/applications/misc/truecrypt/default.nix
index 906817fe5a26..bd7197534519 100644
--- a/pkgs/applications/misc/truecrypt/default.nix
+++ b/pkgs/applications/misc/truecrypt/default.nix
@@ -40,17 +40,17 @@ library, use the 'NOGUI' parameter:
    $ make NOGUI=1
 */
 
-{ fetchurl, stdenv, pkgconfig, fuse, wxGTK, devicemapper,
+{ fetchurl, stdenv, pkgconfig, nasm, fuse, wxGTK, devicemapper,
   wxGUI ? true
 }:
 
 stdenv.mkDerivation {
-  name = "truecrypt-6.3a";
+  name = "truecrypt-7.1";
   builder = ./builder.sh;
 
   src = fetchurl {
-    url = http://www.sfr-fresh.com/unix/misc/TrueCrypt_6.3a_Source.tar.gz;
-    sha256 = "1vwnzay9gjlldqbdb20rhq2arhyzhdy347qc00hkpqmv2b8z070y";
+    url = http://fossies.org/unix/misc/TrueCrypt-7.1-Source.tar.gz;
+    sha256 = "1x6rdxcvklb3zpmgfc3mg5h71gzki1q55ljkzjab2vzkf9n5v0cl";
   };
 
   pkcs11h = fetchurl {
@@ -68,7 +68,7 @@ stdenv.mkDerivation {
     sha256 = "5ae6a4f32ca737e02def3bf314c9842fb89be82bf00b6f4022a97d8d565522b8";
   };
 
-  buildInputs = [ pkgconfig fuse devicemapper wxGTK ]; 
+  buildInputs = [ pkgconfig fuse devicemapper wxGTK nasm ]; 
   makeFlags = if (wxGUI) then "" else "NOGUI=1";
 
   meta = {
diff --git a/pkgs/applications/networking/browsers/firefox/8.0.nix b/pkgs/applications/networking/browsers/firefox/10.0.nix
index 823d6e0cbd28..79869b324b9b 100644
--- a/pkgs/applications/networking/browsers/firefox/8.0.nix
+++ b/pkgs/applications/networking/browsers/firefox/10.0.nix
@@ -15,14 +15,14 @@ assert stdenv.gcc ? libc && stdenv.gcc.libc != null;
 
 rec {
 
-  firefoxVersion = "8.0.1";
+  firefoxVersion = "10.0";
   
-  xulVersion = "8.0.1"; # this attribute is used by other packages
+  xulVersion = "10.0"; # this attribute is used by other packages
 
   
   src = fetchurl {
     url = "http://releases.mozilla.org/pub/mozilla.org/firefox/releases/${firefoxVersion}/source/firefox-${firefoxVersion}.source.tar.bz2";
-    sha1 = "0dd207c5cee9d53114c55aa23eeca36b754bc128";
+    sha1 = "cbf1fb0efe0a3a2b2dafaa324b136736e93de70c";
   };
   
   commonConfigureFlags =
@@ -139,7 +139,7 @@ rec {
       [ "--enable-application=browser"
         "--with-libxul-sdk=${xulrunner}/lib/xulrunner-devel-${xulrunner.version}"
         "--enable-chrome-format=jar"
-	"--disable-elf-hack"
+        "--disable-elf-hack"
       ]
       ++ commonConfigureFlags
       ++ stdenv.lib.optional enableOfficialBranding "--enable-official-branding";
diff --git a/pkgs/applications/networking/browsers/firefox/11.0.nix b/pkgs/applications/networking/browsers/firefox/11.0.nix
new file mode 100644
index 000000000000..fd72b51f5b58
--- /dev/null
+++ b/pkgs/applications/networking/browsers/firefox/11.0.nix
@@ -0,0 +1,180 @@
+{ stdenv, fetchurl, pkgconfig, gtk, pango, perl, python, zip, libIDL
+, libjpeg, libpng, zlib, cairo, dbus, dbus_glib, bzip2, xlibs
+, freetype, fontconfig, file, alsaLib, nspr, nss, libnotify
+, yasm, mesa, sqlite, unzip
+
+, # If you want the resulting program to call itself "Firefox" instead
+  # of "Shiretoko" or whatever, enable this option.  However, those
+  # binaries may not be distributed without permission from the
+  # Mozilla Foundation, see
+  # http://www.mozilla.org/foundation/trademarks/.
+  enableOfficialBranding ? false
+}:
+
+assert stdenv.gcc ? libc && stdenv.gcc.libc != null;
+
+rec {
+
+  firefoxVersion = "11.0b1";
+  
+  xulVersion = "11.0"; # this attribute is used by other packages
+
+  
+  src = fetchurl {
+    url = "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/${firefoxVersion}-candidates/build1/source/firefox-${firefoxVersion}.source.tar.bz2";
+    sha256 = "1f9p2jmjvhmb23wmvj84jj22wd9g803k6pdjm8glwmkzwnva8x1b";
+  };
+  
+  commonConfigureFlags =
+    [ "--enable-optimize"
+      "--disable-debug"
+      "--enable-strip"
+      "--with-system-jpeg"
+      "--with-system-zlib"
+      "--with-system-bz2"
+      #"--with-system-nspr" # <-- There are links to nspr 4.9.0, but no file...
+      # "--with-system-nss"
+      # "--with-system-png" # <-- "--with-system-png won't work because the system's libpng doesn't have APNG support"
+      "--enable-system-cairo"
+      "--enable-system-sqlite"
+      "--disable-crashreporter"
+      "--disable-tests"
+      "--disable-necko-wifi" # maybe we want to enable this at some point
+      "--disable-installer" 
+      "--disable-updater"
+    ];
+
+
+  xulrunner = stdenv.mkDerivation rec {
+    name = "xulrunner-${xulVersion}";
+    
+    inherit src;
+
+    buildInputs =
+      [ pkgconfig gtk perl zip libIDL libjpeg libpng zlib cairo bzip2
+        python dbus dbus_glib pango freetype fontconfig xlibs.libXi
+        xlibs.libX11 xlibs.libXrender xlibs.libXft xlibs.libXt file
+        alsaLib nspr /* nss */ libnotify xlibs.pixman yasm mesa
+        xlibs.libXScrnSaver xlibs.scrnsaverproto
+        xlibs.libXext xlibs.xextproto sqlite unzip
+      ];
+
+    configureFlags =
+      [ "--enable-application=xulrunner"
+        "--disable-javaxpcom"
+      ] ++ commonConfigureFlags;
+
+    enableParallelBuilding = true;
+      
+    # Hack to work around make's idea of -lbz2 dependency
+    preConfigure =
+      ''
+        find . -name Makefile.in -execdir sed -i '{}' -e '1ivpath %.so ${
+          stdenv.lib.concatStringsSep ":" 
+            (map (s : s + "/lib") (buildInputs ++ [stdenv.gcc.libc]))
+        }' ';'
+
+        export NIX_LDFLAGS="$NIX_LDFLAGS -L$out/lib/xulrunner-${xulVersion}"
+      '';
+
+    # !!! Temporary hack.
+    preBuild =
+      ''
+        export NIX_ENFORCE_PURITY=
+      '';
+
+    installFlags = "SKIP_GRE_REGISTRATION=1";
+
+    postInstall = ''
+      # Fix some references to /bin paths in the Xulrunner shell script.
+      substituteInPlace $out/bin/xulrunner \
+          --replace /bin/pwd "$(type -tP pwd)" \
+          --replace /bin/ls "$(type -tP ls)"
+
+      # Fix run-mozilla.sh search
+      libDir=$(cd $out/lib && ls -d xulrunner-[0-9]*)
+      echo libDir: $libDir
+      test -n "$libDir"
+      cd $out/bin
+      mv xulrunner ../lib/$libDir/
+
+      for i in $out/lib/$libDir/*; do 
+          file $i;
+          if file $i | grep executable &>/dev/null; then 
+              echo -e '#! /bin/sh\n"'"$i"'" "$@"' > "$out/bin/$(basename "$i")";
+              chmod a+x "$out/bin/$(basename "$i")";
+          fi;
+      done;
+      for i in $out/lib/$libDir/{xpcshell,plugin-container,*.so}; do
+              patchelf --set-rpath "$(patchelf --print-rpath "$i"):$out/lib/$libDir" $i || true
+      done;
+      rm -f $out/bin/run-mozilla.sh
+    ''; # */
+
+    meta = {
+      description = "Mozilla Firefox XUL runner";
+      homepage = http://www.mozilla.com/en-US/firefox/;
+    };
+
+    passthru = { inherit gtk; version = xulVersion; };
+  };
+
+
+  firefox = stdenv.mkDerivation rec {
+    name = "firefox-${firefoxVersion}";
+
+    inherit src;
+
+    enableParallelBuilding = true;
+      
+    buildInputs =
+      [ pkgconfig gtk perl zip libIDL libjpeg zlib cairo bzip2 python
+        dbus dbus_glib pango freetype fontconfig alsaLib nspr libnotify
+        xlibs.pixman yasm mesa sqlite file unzip
+      ];
+
+    propagatedBuildInputs = [xulrunner];
+
+    configureFlags =
+      [ "--enable-application=browser"
+        "--with-libxul-sdk=${xulrunner}/lib/xulrunner-devel-${xulrunner.version}"
+        "--enable-chrome-format=jar"
+	"--disable-elf-hack"
+      ]
+      ++ commonConfigureFlags
+      ++ stdenv.lib.optional enableOfficialBranding "--enable-official-branding";
+
+    # Hack to work around make's idea of -lbz2 dependency
+    preConfigure =
+      ''
+        find . -name Makefile.in -execdir sed -i '{}' -e '1ivpath %.so ${
+          stdenv.lib.concatStringsSep ":" 
+            (map (s : s + "/lib") (buildInputs ++ [stdenv.gcc.libc]))
+        }' ';'
+      '';
+
+    postInstall =
+      ''
+        ln -s ${xulrunner}/lib/xulrunner-${xulrunner.version} $(echo $out/lib/firefox-*)/xulrunner
+        for j in $out/bin/*; do 
+	    i="$(readlink "$j")";
+            file $i;
+            if file $i | grep executable &>/dev/null; then 
+	        rm "$out/bin/$(basename "$i")"
+                echo -e '#! /bin/sh\nexec "'"$i"'" "$@"' > "$out/bin/$(basename "$i")"
+                chmod a+x "$out/bin/$(basename "$i")"
+            fi;
+        done;
+      ''; # */
+
+    meta = {
+      description = "Mozilla Firefox - the browser, reloaded";
+      homepage = http://www.mozilla.com/en-US/firefox/;
+    };
+
+    passthru = {
+      inherit gtk xulrunner nspr;
+      isFirefox3Like = true;
+    };
+  };
+}
diff --git a/pkgs/applications/networking/browsers/links2/default.nix b/pkgs/applications/networking/browsers/links2/default.nix
index 587a51509d61..4e5a3658730e 100644
--- a/pkgs/applications/networking/browsers/links2/default.nix
+++ b/pkgs/applications/networking/browsers/links2/default.nix
@@ -1,33 +1,44 @@
-a :  
-let 
-  s = import ./src-for-default.nix;
-  buildInputs = with a; [
-    libpng libjpeg bzip2 zlib libtiff
-    libX11 libXau xproto gpm
-    openssl libXt pkgconfig
-  ];
-in
-rec {
-  src = a.fetchUrlFromSrcInfo s;
+{ stdenv, fetchurl
+, gpm, openssl, pkgconfig # Misc.
+, libpng, libjpeg, libtiff # graphic formats
+, bzip2, zlib, xz # Transfer encodings
+, enableFB ? true
+, enableDirectFB ? false, directfb
+, enableX11 ? true, libX11, libXt, libXau # GUI support
+}:
 
-  inherit (s) name;
-  inherit buildInputs;
-  configureFlags = [
-    "--enable-graphics"
-    "--with-ssl"
-    "--with-x"
-    "--with-fb"
-    ];
+stdenv.mkDerivation rec {
+  version = "2.5";
+  name = "links2-${version}";
+
+  src = fetchurl {
+    url = "${meta.homepage}/download/links-${version}.tar.bz2";
+    sha256 = "1wlmj8s6bxgznh0pnawihyvhffzryciz3lkagcxhf7fp64zz5izm";
+  };
+
+  buildInputs =
+    [ libpng libjpeg libtiff gpm openssl xz bzip2 zlib ]
+    ++ stdenv.lib.optionals enableX11 [ libX11 libXau libXt ]
+    ++ stdenv.lib.optional enableDirectFB [ directfb ];
+
+  buildNativeInputs = [ pkgconfig ];
+
+  configureFlags = [ "--with-ssl" ]
+    ++ stdenv.lib.optional (enableX11 || enableFB || enableDirectFB) "--enable-graphics"
+    ++ stdenv.lib.optional enableX11 "--with-x"
+    ++ stdenv.lib.optional enableFB "--with-fb"
+    ++ stdenv.lib.optional enableDirectFB "--with-directfb";
+
+  crossAttrs = {
+    preConfigure = ''
+      export CC=$crossConfig-gcc
+    '';
+  };
 
-  /* doConfigure should be removed if not needed */
-  phaseNames = ["doConfigure" "doMakeInstall"];
-      
   meta = {
+    homepage = http://links.twibright.com/;
     description = "A small browser with some graphics support";
-    maintainers = [
-      a.lib.maintainers.raskin
-    ];
-    platforms = with a.lib.platforms; 
-      linux;
+    maintainers = with stdenv.lib.maintainers; [ raskin urkud viric ];
+    platforms = stdenv.lib.platforms.linux;
   };
 }
diff --git a/pkgs/applications/networking/browsers/links2/src-for-default.nix b/pkgs/applications/networking/browsers/links2/src-for-default.nix
deleted file mode 100644
index 7e7da1a4641b..000000000000
--- a/pkgs/applications/networking/browsers/links2/src-for-default.nix
+++ /dev/null
@@ -1,9 +0,0 @@
-rec {
-   version="2.2";
-   name="links2-2.2";
-   hash="188y37rw4s9brl55ncc12q1b45w0caxcnsq1gqyby9byw1sawnq9";
-   url="http://links.twibright.com/download/links-${version}.tar.gz";
-   advertisedUrl="http://links.twibright.com/download/links-2.2.tar.gz";
-  
-  
-}
diff --git a/pkgs/applications/networking/browsers/links2/src-info-for-default.nix b/pkgs/applications/networking/browsers/links2/src-info-for-default.nix
deleted file mode 100644
index b678b251298e..000000000000
--- a/pkgs/applications/networking/browsers/links2/src-info-for-default.nix
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  downloadPage = "http://links.twibright.com/download.php";
-  baseName = "links2";
-}
diff --git a/pkgs/applications/networking/browsers/links2/stdenv.nix b/pkgs/applications/networking/browsers/links2/stdenv.nix
deleted file mode 100644
index 923d0aff0f5f..000000000000
--- a/pkgs/applications/networking/browsers/links2/stdenv.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-{ stdenv, fetchurl, libpng, libjpeg, bzip2, zlib, libtiff,  gpm, openssl, pkgconfig, directfb 
-, enableX11 ? true, libX11, libXau, xproto, libXt }:
-
-let
-  version="2.2";
-  name="links2-2.2";
-  hash="188y37rw4s9brl55ncc12q1b45w0caxcnsq1gqyby9byw1sawnq9";
-  url="http://links.twibright.com/download/links-${version}.tar.gz";
-  advertisedUrl="http://links.twibright.com/download/links-2.2.tar.gz";
-in
-
-stdenv.mkDerivation {
-  inherit name;
-
-  src = fetchurl {
-    inherit url;
-    sha256 = hash;
-  };
-
-  buildInputs = [ libpng libjpeg bzip2 zlib libtiff  gpm openssl pkgconfig directfb ]
-    ++ stdenv.lib.optionals enableX11 [ libX11 libXau xproto libXt ];
-
-  configureFlags = [
-    "--enable-graphics"
-    "--with-ssl"
-    "--with-fb"
-    ] ++ stdenv.lib.optional enableX11 "--with-x";
-
-  crossAttrs = {
-    preConfigure = ''
-      export CC=$crossConfig-gcc
-    '';
-  };
-
-  meta = {
-    description = "A small browser with some graphics support";
-    maintainers = [
-      stdenv.lib.maintainers.viric
-    ];
-  };
-}
diff --git a/pkgs/applications/networking/esniper/default.nix b/pkgs/applications/networking/esniper/default.nix
index 4c153fa6ff5a..dda0755a7383 100644
--- a/pkgs/applications/networking/esniper/default.nix
+++ b/pkgs/applications/networking/esniper/default.nix
@@ -1,17 +1,15 @@
 { stdenv, fetchurl, openssl, curl }:
 
 stdenv.mkDerivation {
-  name = "esniper-2.26.0";
+  name = "esniper-2.27.0";
 
   src = fetchurl {
-    url = "mirror://sourceforge/esniper/esniper-2-26-0.tgz";
-    sha256 = "5fd9a0f4b27b98deca303cd3d16c1ed060e05a165a40b2f4a9f8546db5e3877d";
+    url = "mirror://sourceforge/esniper/esniper-2-27-0.tgz";
+    sha256 = "0ca9946395be8958d3eb28c9abc4a1a4d4c9134e4b6b3c3816f4631e3be25c02";
   };
 
   buildInputs = [openssl curl];
 
-  patches = [ ./fix-build-with-latest-curl.patch ];
-
   postInstall = ''
     sed -e  "2i export PATH=\"$out/bin:\$PATH\"" <"frontends/snipe" >"$out/bin/snipe"
     chmod 555 "$out/bin/snipe"
diff --git a/pkgs/applications/networking/esniper/fix-build-with-latest-curl.patch b/pkgs/applications/networking/esniper/fix-build-with-latest-curl.patch
deleted file mode 100644
index 81005fd3ebe5..000000000000
--- a/pkgs/applications/networking/esniper/fix-build-with-latest-curl.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- esniper-2-26-0/http.c	2011-08-09 21:05:59.000000000 +0200
-+++ esniper/http.c	2011-08-10 00:24:43.000000000 +0200
-@@ -28,7 +28,6 @@
- #include "esniper.h"
- #include <ctype.h>
- #include <curl/curl.h>
--#include <curl/types.h>
- #include <curl/easy.h>
- #include <stdlib.h>
- #include <string.h>
diff --git a/pkgs/applications/networking/remote/rdesktop/default.nix b/pkgs/applications/networking/remote/rdesktop/default.nix
index cceb70b74fbf..c8c72160b341 100644
--- a/pkgs/applications/networking/remote/rdesktop/default.nix
+++ b/pkgs/applications/networking/remote/rdesktop/default.nix
@@ -2,12 +2,12 @@
 
 stdenv.mkDerivation (rec {
   pname = "rdesktop";
-  version = "1.7.0";
+  version = "1.7.1";
   name = "${pname}-${version}";
 
   src = fetchurl {
     url = "mirror://sourceforge/${pname}/${name}.tar.gz";
-    sha256 = "0x2hnzvm0smnanin28n4mvzx9chpj2qnjfrxy307x21mgw6l5q1v";
+    sha256 = "0yc4xz95w40m8ailpjgqp9h7bkc758vp0dlq4nj1pvr3xfnl7sni";
   };
 
   buildInputs = [openssl libX11];
diff --git a/pkgs/applications/networking/skype/default.nix b/pkgs/applications/networking/skype/default.nix
index 1eef323ae057..f94d7e125f65 100644
--- a/pkgs/applications/networking/skype/default.nix
+++ b/pkgs/applications/networking/skype/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchurl, alsaLib, libXv, libXi, libXrender, libXrandr, zlib, glib
 , libXext, libX11, libXScrnSaver, libSM, qt4, libICE, freetype, fontconfig
-, pulseaudio }:
+, pulseaudio, usePulseAudio, lib }:
 
 assert stdenv.system == "i686-linux";
 
@@ -12,9 +12,9 @@ stdenv.mkDerivation rec {
     sha256 = "157ba3ci12bq0nv2m8wlsab45ib5sccqagyna8nixnhqw9q72sxm";
   };
 
-  buildInputs = [
+  buildInputs = 
+    lib.optional usePulseAudio pulseaudio ++ [
     alsaLib
-    pulseaudio
     stdenv.glibc 
     stdenv.gcc.gcc
     libXv
diff --git a/pkgs/applications/office/hledger-interest/default.nix b/pkgs/applications/office/hledger-interest/default.nix
index 5f61138f6ec2..a400730878ea 100644
--- a/pkgs/applications/office/hledger-interest/default.nix
+++ b/pkgs/applications/office/hledger-interest/default.nix
@@ -2,8 +2,8 @@
 
 cabal.mkDerivation (self: {
   pname = "hledger-interest";
-  version = "1.3";
-  sha256 = "1sgnl3vv38cmgxv3xag3c78j1955xxwdmr5xr3f8rc78np6d0wnz";
+  version = "1.4";
+  sha256 = "0lm4jcxcig3yxzhbnka1q54fvshn5b9d91a5a2mbmkzbwhzjj0lg";
   isLibrary = false;
   isExecutable = true;
   buildDepends = [ hledgerLib mtl time ];
diff --git a/pkgs/applications/science/logic/hol_light/default.nix b/pkgs/applications/science/logic/hol_light/default.nix
index 0e688e71a2e5..88f3f788376c 100644
--- a/pkgs/applications/science/logic/hol_light/default.nix
+++ b/pkgs/applications/science/logic/hol_light/default.nix
@@ -9,11 +9,11 @@ let
 in
 
 stdenv.mkDerivation {
-  name = "hol_light-20120109";
+  name = "hol_light-20120129";
   src = fetchsvn {
     url = http://hol-light.googlecode.com/svn/trunk;
-    rev = "118";
-    sha256 = "97e72dad731338328c031421512c26d440a989ea083f3ae34820eb8413aff495";
+    rev = "122";
+    sha256 = "d837ba5fe941af9595540691ba4be34e58174ba9a9c7e1ce57620e5cd4385769";
   };
 
   buildInputs = [ ocaml findlib camlp5 ];
diff --git a/pkgs/applications/video/MPlayer/default.nix b/pkgs/applications/video/MPlayer/default.nix
index 0566b4bbe291..a594bd4e2c61 100644
--- a/pkgs/applications/video/MPlayer/default.nix
+++ b/pkgs/applications/video/MPlayer/default.nix
@@ -166,5 +166,6 @@ stdenv.mkDerivation rec {
     homepage = "http://mplayerhq.hu";
     license = "GPL";
     maintainers = [ stdenv.lib.maintainers.eelco stdenv.lib.maintainers.urkud ];
+    platforms = stdenv.lib.platforms.linux;
   };
 }
diff --git a/pkgs/applications/video/dvswitch/default.nix b/pkgs/applications/video/dvswitch/default.nix
index 097bf4f49f48..8803fe0a7868 100644
--- a/pkgs/applications/video/dvswitch/default.nix
+++ b/pkgs/applications/video/dvswitch/default.nix
@@ -1,5 +1,6 @@
-{ stdenv, fetchurl, alsaLib, boost, cmake, gtkmm, libXau, libXdmcp,
-  libXv, libav, pixman, libpthreadstubs, pkgconfig }:
+{ stdenv, fetchurl, alsaLib, boost, cmake, gtkmm, libXau, libXdmcp
+, libXv, libav, pixman, libpthreadstubs, pkgconfig 
+}:
 
 stdenv.mkDerivation rec {
   name = "dvswitch-${version}";
@@ -15,13 +16,12 @@ stdenv.mkDerivation rec {
     libpthreadstubs pixman pkgconfig
   ];
 
-  installPhase = "
-    mkdir -p $out
-    cp src/dv* $out/
-  ";
+  patchPhase = ''
+    sed -e "s@prefix /usr/local@prefix $out@" -i CMakeLists.txt
+  '';
 
   meta =  with stdenv.lib; {
-    description = "digital video mixer intended for interactive live mixing of several incoming DV video streams";
+    description = "interactive live video mixer for DV streams";
     homepage = "http://dvswitch.alioth.debian.org";
     license = licenses.gpl2Plus;
     maintainers = [ maintainers.goibhniu ];
diff --git a/pkgs/applications/window-managers/icewm/default.nix b/pkgs/applications/window-managers/icewm/default.nix
index 632bc50c8690..0b541d8104d3 100644
--- a/pkgs/applications/window-managers/icewm/default.nix
+++ b/pkgs/applications/window-managers/icewm/default.nix
@@ -1,29 +1,35 @@
-{ stdenv, fetchurl, gettext, libjpeg, libtiff, libungif, libpng, imlib
-, xlibs, automake, pkgconfig, gtk }:
+{ stdenv, fetchurl, gettext, libjpeg, libtiff, libungif, libpng, freetype
+, fontconfig, xlibs, automake, pkgconfig, gdk_pixbuf }:
 
 stdenv.mkDerivation rec {
-  name = "icewm-1.3.6";
+  name = "icewm-1.3.7";
 
   buildInputs =
-    [ gettext libjpeg libtiff libungif libpng imlib
+    [ gettext libjpeg libtiff libungif libpng
       xlibs.libX11 xlibs.libXft xlibs.libXext xlibs.libXinerama xlibs.libXrandr
-      pkgconfig gtk
+      xlibs.libICE xlibs.libSM freetype fontconfig
+      pkgconfig gdk_pixbuf
     ];
 
   src = fetchurl {
     url = "mirror://sourceforge/icewm/${name}.tar.gz";
-    sha256 = "1pr7rc10rddwvy4ncng4mf5fpxd1nqjsw34xba9ngsg32rg57b91";
+    sha256 = "0yw813d8amrl0n1fvdiyznxah92wcylj9kj1qhjc6h73d827h6na";
   };
 
   NIX_LDFLAGS = "-lfontconfig";
 
   # The fuloong2f is not supported by 1.3.6 still
+  #
+  # Don't know whether 1.3.7 supports fuloong2f and don't know how to test it
+  # on x86_64 hardware. So I left this 'cp' -- urkud
+
   preConfigure = ''
-    cp ${automake}/share/automake*/config.{sub,guess} .
+    cp -v ${automake}/share/automake*/config.{sub,guess} .
   '';
 
   meta = {
     description = "A window manager for the X Window System";
     homepage = http://www.icewm.org/;
+    platforms = stdenv.lib.platforms.unix;
   };
 }