diff -urN amarok/amarok/src/mediadevice/daap/ConfigureChecks.cmake amarok.new/amarok/src/mediadevice/daap/ConfigureChecks.cmake
--- amarok/amarok/src/mediadevice/daap/ConfigureChecks.cmake	2012-04-13 01:59:24.000000000 -0500
+++ amarok.new/amarok/src/mediadevice/daap/ConfigureChecks.cmake	2012-05-06 15:18:36.000000000 -0500
@@ -14,15 +14,51 @@
   tde_message_fatal( "ruby is required, but was not found on your system" )
 endif( )
 
+# In ruby 1.9.x, ruby.h is located in a different location than previous releases.
 execute_process(
-  COMMAND ${RUBY_EXECUTABLE} -rrbconfig -e "puts Config.expand( Config::MAKEFILE_CONFIG['archdir'] )"
-  OUTPUT_VARIABLE RUBY_INCLUDE_DIR
+  COMMAND ${RUBY_EXECUTABLE} -rrbconfig -e "puts Config.expand( Config::MAKEFILE_CONFIG['MAJOR'] )"
+  OUTPUT_VARIABLE RUBY_VERSION_MAJOR
   RESULT_VARIABLE _result
   OUTPUT_STRIP_TRAILING_WHITESPACE )
 if( _result )
   tde_message_fatal( "Unable to run ${RUBY_EXECUTABLE}!\n RUBY is correctly installed?" )
 endif( )
-
+execute_process(
+  COMMAND ${RUBY_EXECUTABLE} -rrbconfig -e "puts Config.expand( Config::MAKEFILE_CONFIG['MINOR'] )"
+  OUTPUT_VARIABLE RUBY_VERSION_MINOR
+  RESULT_VARIABLE _result
+  OUTPUT_STRIP_TRAILING_WHITESPACE )
+if( _result )
+  tde_message_fatal( "Unable to run ${RUBY_EXECUTABLE}!\n RUBY is correctly installed?" )
+endif( )
+set( RUBY_VERSION ${RUBY_VERSION_MAJOR}${RUBY_VERSION_MINOR} )
+if ( "${RUBY_VERSION}" GREATER "18" )
+  execute_process(
+    COMMAND ${RUBY_EXECUTABLE} -rrbconfig -e "puts Config.expand( Config::MAKEFILE_CONFIG['rubyhdrdir'] )"
+    OUTPUT_VARIABLE RUBY_INCLUDE_DIR
+    RESULT_VARIABLE _result
+    OUTPUT_STRIP_TRAILING_WHITESPACE )
+  if( _result )
+    tde_message_fatal( "Unable to run ${RUBY_EXECUTABLE}!\n RUBY is correctly installed?" )
+  endif( )
+else( )
+  execute_process(
+    COMMAND ${RUBY_EXECUTABLE} -rrbconfig -e "puts Config.expand( Config::MAKEFILE_CONFIG['archdir'] )"
+    OUTPUT_VARIABLE RUBY_INCLUDE_DIR
+    RESULT_VARIABLE _result
+    OUTPUT_STRIP_TRAILING_WHITESPACE )
+  if( _result )
+    tde_message_fatal( "Unable to run ${RUBY_EXECUTABLE}!\n RUBY is correctly installed?" )
+  endif( )
+endif( )
+execute_process(
+  COMMAND ${RUBY_EXECUTABLE} -rrbconfig -e "puts Config.expand( Config::MAKEFILE_CONFIG['arch'] )"
+  OUTPUT_VARIABLE RUBY_ARCH
+  RESULT_VARIABLE _result
+  OUTPUT_STRIP_TRAILING_WHITESPACE )
+if( _result )
+  tde_message_fatal( "Unable to run ${RUBY_EXECUTABLE}!\n RUBY is correctly installed?" )
+endif( )
 execute_process(
   COMMAND ${RUBY_EXECUTABLE} -rrbconfig -e "puts Config.expand( Config::MAKEFILE_CONFIG['LIBRUBYARG_SHARED'] )"
   OUTPUT_VARIABLE RUBY_LDFLAGS
@@ -36,4 +72,11 @@
   message( STATUS "Found RUBY: ${RUBY_EXECUTABLE}" )
   message( STATUS "  RUBY_INCLUDE_DIR: ${RUBY_INCLUDE_DIR}" )
   message( STATUS "  RUBY_LDFLAGS: ${RUBY_LDFLAGS}" )
+  message( STATUS "  RUBY_VERSION_MAJOR: ${RUBY_VERSION_MAJOR}")
+  message( STATUS "  RUBY_VERSION_MINOR: ${RUBY_VERSION_MINOR}")
+  message( STATUS "  RUBY_ARCH: ${RUBY_ARCH}")
+endif( )
+if ( "${RUBY_VERSION_MAJOR}${RUBY_VERSION_MINOR}" VERSION_LESS "19" )
+  message( STATUS "  You have an old version of Ruby ! (<1.9)")
+  set ( HAVE_OLD_RUBY 1 CACHE INTERNAL "" )
 endif( )
diff -urN amarok/amarok/src/mediadevice/daap/mongrel/http11/CMakeLists.txt amarok.new/amarok/src/mediadevice/daap/mongrel/http11/CMakeLists.txt
--- amarok/amarok/src/mediadevice/daap/mongrel/http11/CMakeLists.txt	2012-04-13 01:59:24.000000000 -0500
+++ amarok.new/amarok/src/mediadevice/daap/mongrel/http11/CMakeLists.txt	2012-05-06 15:19:57.000000000 -0500
@@ -15,6 +15,8 @@
 )
 
 include_directories(
+  ${CMAKE_BINARY_DIR}
+  ${RUBY_INCLUDE_DIR}/${RUBY_ARCH}
   ${RUBY_INCLUDE_DIR}
 )
 
diff -urN amarok/amarok/src/mediadevice/daap/mongrel/http11/http11.c amarok.new/amarok/src/mediadevice/daap/mongrel/http11/http11.c
--- amarok/amarok/src/mediadevice/daap/mongrel/http11/http11.c	2012-04-13 03:04:44.000000000 -0500
+++ amarok.new/amarok/src/mediadevice/daap/mongrel/http11/http11.c	2012-05-06 15:13:20.000000000 -0500
@@ -2,6 +2,7 @@
  * Copyright (c) 2005 Zed A. Shaw
  * You can redistribute it and/or modify it under the same terms as Ruby.
  */
+#include "config.h"
 #include "ruby.h"
 #include "ext_help.h"
 #include <assert.h>
@@ -74,7 +75,11 @@
   f = rb_str_dup(global_http_prefix);
   f = rb_str_buf_cat(f, field, flen); 
 
-  for(ch = RSTRING(f)->ptr, end = ch + RSTRING(f)->len; ch < end; ch++) {
+#ifdef HAVE_OLD_RUBY
+   for(ch = RSTRING(f)->ptr, end = ch + RSTRING(f)->len; ch < end; ch++) {
+#else
+  for(ch = RSTRING_PTR(f), end = ch + RSTRING_LEN(f); ch < end; ch++) {
+#endif
     if(*ch == '-') {
       *ch = '_';
     } else {
@@ -157,12 +162,25 @@
 
   rb_hash_aset(req, global_gateway_interface, global_gateway_interface_value);
   if((temp = rb_hash_aref(req, global_http_host)) != Qnil) {
-    colon = strchr(RSTRING(temp)->ptr, ':');
+#ifdef HAVE_OLD_RUBY
+     colon = strchr(RSTRING(temp)->ptr, ':');
+#else
+    colon = strchr(RSTRING_PTR(temp), ':');
+#endif
     if(colon != NULL) {
-      rb_hash_aset(req, global_server_name, rb_str_substr(temp, 0, colon - RSTRING(temp)->ptr));
+#ifdef HAVE_OLD_RUBY
+       rb_hash_aset(req, global_server_name, rb_str_substr(temp, 0, colon - RSTRING(temp)->ptr));
+#else
+      rb_hash_aset(req, global_server_name, rb_str_substr(temp, 0, colon - RSTRING_PTR(temp)));
+#endif
       rb_hash_aset(req, global_server_port, 
-          rb_str_substr(temp, colon - RSTRING(temp)->ptr+1, 
-            RSTRING(temp)->len));
+#ifdef HAVE_OLD_RUBY
+           rb_str_substr(temp, colon - RSTRING(temp)->ptr+1, 
+             RSTRING(temp)->len));
+#else
+          rb_str_substr(temp, colon - RSTRING_PTR(temp)+1, 
+            RSTRING_LEN(temp)));
+#endif
     } else {
       rb_hash_aset(req, global_server_name, temp);
       rb_hash_aset(req, global_server_port, global_port_80);
@@ -281,8 +299,13 @@
   DATA_GET(self, http_parser, http);
 
   from = FIX2INT(start);
-  dptr = RSTRING(data)->ptr;
-  dlen = RSTRING(data)->len;
+#ifdef HAVE_OLD_RUBY
+   dptr = RSTRING(data)->ptr;
+   dlen = RSTRING(data)->len;
+#else
+  dptr = RSTRING_PTR(data);
+  dlen = RSTRING_LEN(data);
+#endif
 
   if(from >= dlen) {
     rb_raise(eHttpParserError, "Requested start is after data buffer end.");
@@ -512,7 +535,11 @@
     if(pref_len == 1 && uri_str[0] == '/') {
       rb_ary_push(result, uri);
     } else {
-      rb_ary_push(result, rb_str_substr(uri, pref_len, RSTRING(uri)->len));
+#ifdef HAVE_OLD_RUBY
+       rb_ary_push(result, rb_str_substr(uri, pref_len, RSTRING(uri)->len));
+#else
+      rb_ary_push(result, rb_str_substr(uri, pref_len, RSTRING_LEN(uri)));
+#endif
     }
 
     rb_ary_push(result, (VALUE)handler);
diff -urN amarok/config.h.cmake amarok.new/config.h.cmake
--- amarok/config.h.cmake	2012-04-13 01:59:26.000000000 -0500
+++ amarok.new/config.h.cmake	2012-05-06 15:02:40.000000000 -0500
@@ -16,3 +16,4 @@
 
 #cmakedefine TAGLIB_15 1
 #cmakedefine HAVE_QGLWIDGET 1
+#cmakedefine HAVE_OLD_RUBY @HAVE_OLD_RUBY@
\ No newline at end of file
diff -urN amarok/configure.in amarok.new/configure.in
--- amarok/configure.in	2012-04-13 01:59:26.000000000 -0500
+++ amarok.new/configure.in	2012-05-06 14:53:40.000000000 -0500
@@ -1162,7 +1162,14 @@
 
 AC_PATH_PROG(RUBY, ruby, no)
 
-ruby_includes=[`$RUBY -rrbconfig -e 'puts Config.expand( Config::MAKEFILE_CONFIG["archdir"] )'`]
+if test -n "$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"rubyhdrdir"@:>@)'"; then
+	# Ruby 1.9
+	ruby_includes=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"rubyhdrdir"@:>@)'`
+else
+	# not Ruby 1.9
+	ruby_includes=[`$RUBY -rrbconfig -e 'puts Config.expand( Config::MAKEFILE_CONFIG["archdir"] )'`]
+fi
+
 ruby_ldflags=[`$RUBY -rrbconfig -e 'puts Config.expand( Config::MAKEFILE_CONFIG["LIBRUBYARG_SHARED"] )'`]
 
 AC_SUBST(ruby_includes)