id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	os	architecture	failure	difficulty	testcase	blockedby	blocking	related
5025	GHC should support -x objective-c	guest		"On OSX, gcc accepts .m files as objective-c source.  It can even trivially compile .c and .m files in the same program or library.

Unfortunately, ghc treats .m files as input to the linker step.  GHC supports -x as a means of saying what language a file is, except that unlike gcc it lacks support for ""objective-c"".  For example, if I told ghc, `-x c foo.my-c`, then ghc would invoke gcc as `gcc -x c foo.my-c` and gcc would then treat foo.my-c as C source code.

Cabal gives all C files to ghc and lets ghc invoke gcc.  This means that specifying objective-c files as ""c-sources"" results in GHC complaining about linker input.  Even setting `-pgmc` is not sufficient to trick cabal.  I spent several hours trying everything I could think of here to trick cabal, like setting my PATH and write wrapper scripts for gcc, but it seems that cabal always hands these files to ghc first.

Therefore, I propose that GHC adds support for `-x objective-c foo.m`.  Even better would be for GHC to accept .m files on OSX without the extra -x flag.  The new -x flag would be sufficient to write .cabal files that use objective-c to get access to OSX specific APIs, much like C can be used on other platforms.

I think even if cabal adds an ""objective-c-sources"" line in the .cabal file that the above solution is a nice-to-have for ghc.  I also hope that it is super easy to implement, but I haven't looked at the ghc sources to see if that's the case.

Here is the relevant section of the gcc manpage http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/gcc.1.html:
{{{
You can specify the input language explicitly with the -x option:

       -x language
           Specify explicitly the language for the following input files (rather than letting the compiler
           choose a default based on the file name suffix).  This option applies to all following input
           files until the next -x option.  Possible values for language are:

                   c  c-header  c-cpp-output
                   c++  c++-header  c++-cpp-output
                   objective-c  objective-c-header  objective-c-cpp-output
                   objective-c++ objective-c++-header objective-c++-cpp-output
                   assembler  assembler-with-cpp
                   ada
                   f95  f95-cpp-input
                   java
                   treelang

       -x none
           Turn off any specification of a language, so that subsequent files are handled according to their
           file name suffixes (as they are if -x has not been used at all).
}}}

Having ghc support all of gcc -x flags would make me super happy!  Unfortunately, I found that the order you pass -x to gcc matters (it must be passed before the corresponding input files are specified), and when I added ""-optc-x -optcobjective-c"" to the ghc commandline I found that it passed the -x flag too late.

Thanks!"	feature request	closed	high	7.2.1	Compiler	7.0.2	fixed	objective-c	dagitj@… as@…	MacOS X	Unknown/Multiple	None/Unknown	Easy (less than 1 hour)				
