|
CMakeLists.txt CYGWIN vs. CMAKE_COMPILER_IS_GNUCC: msg#00031lisp.scheme.chicken
Sometimes a test is given like IF(WIN32 AND NOT CYGWIN) when really what is warranted is IF(WIN32 AND NOT CMAKE_COMPILER_IS_GNUCC) MinGW is of course a GCC variant. It has some of the same capabilities as Cygwin, and lacks others. The Cygwin stuff is specific to cygwin-1.dll, not to the compiler itself. For instance, the MinGW compiler seems to handle library names in Unix-y fashion, prepending lib* to the output. So the following is desired: # since libchicken has to be the name of the dll or .so to load # On unix lib is the default prefix added to any library. # For windows we change the name of the library to be libchicken. IF(WIN32 AND NOT CMAKE_COMPILER_IS_GNUCC) SET(CHICKEN_LIB_NAME libchicken) SET(CHICKEN_UNSAFE_LIB_NAME libuchicken) ELSE(WIN32 AND NOT CMAKE_COMPILER_IS_GNUCC) SET(CHICKEN_LIB_NAME chicken) SET(CHICKEN_UNSAFE_LIB_NAME uchicken) ENDIF(WIN32 AND NOT CMAKE_COMPILER_IS_GNUCC) Or at least, this fixes a problem in library output names. Without it, CMake generates liblibchicken.dll, and later stuff fails because libchicken.dll can't be found. I'm not entirely sure if this is due to MinGW's behavior, or if CMake is generating stuff erroneously, but the above seems reasonable. Similarly, I will hazard a guess that we really want: IF(WIN32 AND NOT CMAKE_COMPILER_IS_GNUCC) ADD_DEFINITIONS(-DC_DEFAULT_TARGET_STACK_SIZE=300000) ADD_DEFINITIONS(-DHAVE_LOADLIBRARY) ADD_DEFINITIONS(-DHAVE_GETPROCADDRESS) ENDIF(WIN32 AND NOT CMAKE_COMPILER_IS_GNUCC) but I am not actually sure of this. Is this a VC++ specific issue, or a non-GCC issue? If it's VC++ specific, then VC++ should be explicitly tested for. I'm not sure what the best test variable is for this. The CMake documentation is decidedly mediocre as far as documenting the test variables. There's a list of stuff on the CMake wiki, kinda buried amid other things, and doesn't seem to be complete either. Also, the above changes aren't fullly working solutions yet. They're only a piece of the problem: fixing the MinGW behavior is creating a make target name collision for chicken.exe and libchicken.dll. They both get a make target of "chicken." I've got some stuff to straighten out; meanwhile, be aware that CYGWIN isn't the only GCC on Windows. Cheers, Brandon Van Every RTFM ISA PITA |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | CMakeLists.txt CONFIGURE_FILE bug and paradigm: 00031, Brandon J. Van Every |
|---|---|
| Next by Date: | Re: CMakeLists.txt from darcs doesn't work: 00031, felix winkelmann |
| Previous by Thread: | CMakeLists.txt CONFIGURE_FILE bug and paradigmi: 00031, Brandon J. Van Every |
| Next by Thread: | Re: CMakeLists.txt CYGWIN vs. CMAKE_COMPILER_IS_GNUCC: 00031, felix winkelmann |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |