diff --git a/configure b/configure
index 855fa6ca96dd192090b359360f105b312ed2d32c..79fe25c94011370b1fc9bb2897b8da6017d9ad54 100755
--- a/configure
+++ b/configure
@@ -311,7 +311,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS WIN16_FILES WIN16_INSTALL build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPPBIN ac_ct_CPPBIN TOOLSDIR CPP X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS LEX LEXLIB LEX_OUTPUT_ROOT XLEX BISON AS ac_ct_AS LD ac_ct_LD AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP WINDRES ac_ct_WINDRES LN_S LN EGREP LDCONFIG INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LINT LINTFLAGS DB2HTML DB2PDF DB2PS DB2TXT FONTFORGE LIBPTHREAD XLIB XFILES OPENGLFILES GLU32FILES OPENGL_LIBS GLUT_LIBS GLUT32FILES NASLIBS CURSESLIBS sane_devel SANELIBS SANEINCL ICULIBS ft_devel ft_devel2 FREETYPELIBS FREETYPEINCL FONTSSUBDIRS ARTSCCONFIG ARTSLIBS ARTSINCL ALSALIBS AUDIOIOLIBS CAPI4LINUXLIBS EXTRACFLAGS DLLEXT DLLFLAGS DLLIBS LDSHARED LDDLLFLAGS LIBEXT IMPLIBEXT DLLTOOL ac_ct_DLLTOOL DLLWRAP ac_ct_DLLWRAP LDEXECFLAGS LDLIBWINEFLAGS CROSSTEST CROSSCC CROSSWINDRES LDPATH CRTLIBS WINE_BINARIES MAIN_BINARY LDD ALLOCA LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS WIN16_FILES WIN16_INSTALL build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPPBIN ac_ct_CPPBIN TOOLSDIR CPP X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS LEX LEXLIB LEX_OUTPUT_ROOT XLEX BISON AS ac_ct_AS LD ac_ct_LD AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP WINDRES ac_ct_WINDRES LN_S LN EGREP LDCONFIG INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LINT LINTFLAGS DB2HTML DB2PDF DB2PS DB2TXT FONTFORGE LIBPTHREAD XLIB XFILES OPENGLFILES GLU32FILES OPENGL_LIBS GLUT_LIBS GLUT32FILES NASLIBS CURSESLIBS sane_devel SANELIBS SANEINCL ICULIBS ft_devel ft_devel2 FREETYPELIBS FREETYPEINCL FONTSSUBDIRS ARTSCCONFIG ARTSLIBS ARTSINCL ALSALIBS AUDIOIOLIBS CAPI4LINUXLIBS EXTRACFLAGS DLLEXT DLLFLAGS DLLIBS LDSHARED LDDLLFLAGS LIBEXT IMPLIBEXT DLLTOOL ac_ct_DLLTOOL DLLWRAP ac_ct_DLLWRAP LDEXECFLAGS LDLIBWINEFLAGS COREFOUNDATIONLIB IOKITLIB CROSSTEST CROSSCC CROSSWINDRES LDPATH CRTLIBS WINE_BINARIES MAIN_BINARY LDD ALLOCA LIBOBJS LTLIBOBJS'
 ac_subst_files='MAKE_RULES MAKE_DLL_RULES MAKE_TEST_RULES MAKE_LIB_RULES MAKE_PROG_RULES'
 
 # Initialize some variables set by options.
@@ -14046,6 +14046,11 @@ echo "${ECHO_T}$ac_cv_c_dll_macho" >&6
 
                         LDLIBWINEFLAGS="-seg1addr 0x140000"
 
+	    	    COREFOUNDATIONLIB="-framework CoreFoundation"
+
+            IOKITLIB="-framework IOKit"
+
+	    	    IOKITLIB = "$IOKITLIB $COREFOUNDATIONLIB"
           fi
         fi
       fi
@@ -20924,6 +20929,8 @@ s,@DLLWRAP@,$DLLWRAP,;t t
 s,@ac_ct_DLLWRAP@,$ac_ct_DLLWRAP,;t t
 s,@LDEXECFLAGS@,$LDEXECFLAGS,;t t
 s,@LDLIBWINEFLAGS@,$LDLIBWINEFLAGS,;t t
+s,@COREFOUNDATIONLIB@,$COREFOUNDATIONLIB,;t t
+s,@IOKITLIB@,$IOKITLIB,;t t
 s,@CROSSTEST@,$CROSSTEST,;t t
 s,@CROSSCC@,$CROSSCC,;t t
 s,@CROSSWINDRES@,$CROSSWINDRES,;t t
diff --git a/configure.ac b/configure.ac
index 97f0a0733f2b7835abcc6a1a5fdde09e7ee82a3f..7c02059d3118fadaec5ef3996de7dd70c954d030 100644
--- a/configure.ac
+++ b/configure.ac
@@ -944,6 +944,11 @@ case $host_os in
             AC_SUBST(LDEXECFLAGS,"-seg1addr 0x120000")
             dnl Relocate libwine.dyld too
             AC_SUBST(LDLIBWINEFLAGS,"-seg1addr 0x140000")
+	    dnl declare needed frameworks
+	    AC_SUBST(COREFOUNDATIONLIB,"-framework CoreFoundation")
+            AC_SUBST(IOKITLIB,"-framework IOKit")
+	    dnl using IOKit imply we use CoreFoundation too
+	    IOKITLIB = "$IOKITLIB $COREFOUNDATIONLIB"
           fi
         fi
       fi
diff --git a/dlls/kernel/Makefile.in b/dlls/kernel/Makefile.in
index 39da8588a74428da45ff1d82938c6df4c49d6bc9..88343d8da438550197c8e176c4b02666ec5ffd24 100644
--- a/dlls/kernel/Makefile.in
+++ b/dlls/kernel/Makefile.in
@@ -5,7 +5,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = kernel32.dll
 IMPORTS   = ntdll
-EXTRALIBS = $(LIBUNICODE)
+EXTRALIBS = $(LIBUNICODE) @COREFOUNDATIONLIB@
 
 SPEC_SRCS16 = \
 	comm.drv.spec \
diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in
index f6514b17832fedb18b1747f13381b2151d1f879d..cdd7a92b2aa6f72e9b799698ed3e2d2721e66410 100644
--- a/dlls/ntdll/Makefile.in
+++ b/dlls/ntdll/Makefile.in
@@ -4,7 +4,7 @@ TOPOBJDIR = ../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = ntdll.dll
-EXTRALIBS = $(LIBUNICODE)
+EXTRALIBS = $(LIBUNICODE) @IOKITLIB@
 
 C_SRCS = \
 	cdrom.c \
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 84c4b1efb84a0ea61b2ca393529783709ac48002..d8af0ae56ad7ad8527eef13e54684f4cb3c726b0 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -1349,6 +1349,68 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, PIO_STATUS_BLOCK io
                     info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
                     break;
                 }
+#elif defined (__APPLE__)
+                #include <IOKit/IOKitLib.h>
+                #include <CoreFoundation/CFNumber.h> /* for kCFBooleanTrue, kCFBooleanFalse */
+                #include <paths.h>
+                struct statfs stfs;
+                
+                info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
+		
+		if (fstatfs( fd, &stfs ) < 0) break;
+
+		/* stfs.f_type is reserved (always set to 0) so use IOKit */
+		kern_return_t kernResult = KERN_FAILURE; 
+		mach_port_t masterPort;
+		
+		char bsdName[6]; /* disk#\0 */
+		
+		strncpy(bsdName, stfs.f_mntfromname+strlen(_PATH_DEV) , 5);
+		bsdName[5] = 0;
+
+		kernResult = IOMasterPort(MACH_PORT_NULL, &masterPort);
+
+		if (kernResult == KERN_SUCCESS)
+		{
+		    CFMutableDictionaryRef matching = IOBSDNameMatching(masterPort, 0, bsdName);
+		    
+		    if (matching)
+		    {
+			CFMutableDictionaryRef properties;
+			io_service_t devService = IOServiceGetMatchingService(masterPort, matching);
+			
+			if (IORegistryEntryCreateCFProperties(devService, 
+								&properties,
+								kCFAllocatorDefault, 0) != KERN_SUCCESS)
+								    break;
+			if ( CFEqual(
+					CFDictionaryGetValue(properties, CFSTR("Removable")),
+					kCFBooleanTrue)
+			    ) info->Characteristics |= FILE_REMOVABLE_MEDIA;
+			    
+			if ( CFEqual(
+					CFDictionaryGetValue(properties, CFSTR("Writable")),
+					kCFBooleanFalse)
+			    ) info->Characteristics |= FILE_READ_ONLY_DEVICE;
+
+                        /*
+                            NB : mounted disk image (.img/.dmg) don't provide specific type
+                        */
+                    	CFStringRef type;
+			if ( (type = CFDictionaryGetValue(properties, CFSTR("Type"))) )
+			{
+			    if ( CFStringCompare(type, CFSTR("CD-ROM"), 0) == kCFCompareEqualTo
+				|| CFStringCompare(type, CFSTR("DVD-ROM"), 0) == kCFCompareEqualTo
+			    )
+			    {
+				info->DeviceType = FILE_DEVICE_CD_ROM_FILE_SYSTEM;
+			    }
+			} 
+			
+			if (properties)
+			    CFRelease(properties);
+		    }
+		}
 #else
                 static int warned;
                 if (!warned++) FIXME( "device info not properly supported on this platform\n" );
diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c
index 1d94fe42f09340979bb65a7db06229fdbdfc4a9a..e5007495b18cb5396329968af9edcb337603c915 100644
--- a/tools/winegcc/winegcc.c
+++ b/tools/winegcc/winegcc.c
@@ -607,13 +607,15 @@ static void forward(int argc, char **argv, struct options* opts)
  *          object-file-name  -llibrary -nostartfiles  -nodefaultlibs
  *          -nostdlib -s  -static  -static-libgcc  -shared  -shared-libgcc
  *          -symbolic -Wl,option  -Xlinker option -u symbol
+ *	    -framework name
  */
 static int is_linker_arg(const char* arg)
 {
     static const char* link_switches[] = 
     {
 	"-nostartfiles", "-nodefaultlibs", "-nostdlib", "-s", 
-	"-static", "-static-libgcc", "-shared", "-shared-libgcc", "-symbolic"
+	"-static", "-static-libgcc", "-shared", "-shared-libgcc", "-symbolic",
+	"-framework"
     };
     int j;
 
@@ -734,6 +736,10 @@ int main(int argc, char **argv)
 			else next_is_arg = 1;
 		    }
 		    break;
+		case 'f':
+		    if (strcmp("-framework", argv[i]) == 0)
+			next_is_arg = 1;
+		    break;
 	    }
 	    if (next_is_arg) option_arg = argv[i+1];