I think the conflict lies in your expectation that TDM-GCC will conform to some standard form of behavior with respect to the command line. The way I see it, once I start patching GCC to behave differently, it becomes a different compiler and should be treated as such. You can't use the same command line flags to compile a program with MSVC that you use with GCC. If you have a program that compiles with GCC, and you want to port it to MSVC, you will have to make a careful examination of the differences between the two. The same goes for vanilla GCC and TDM-GCC. A user of vanilla GCC switching to TDM-GCC needs to be aware of the differences -- they are few, extremely important, and hopefully well-documented in the TDM-GCC README.
While I somewhat agree, I still have to disagree. Although in theory you can look at TDM-GCC as it's "own" compiler, there's no way to actually test this. No third party application does have options to differentiate TDM from GCC, which is also where I have issues with SFML, because CMake doesn't know the difference between some custom GCC compiler and a normal behaving GCC compiler. While on the other hand, it supports all kind of different versions of MSVC and is able to create one NMake file, that will compile with all MSVC regardless of the version, as long as the environment variable are setup correctly.
So if we're not were to go and declare TDM-GCC it's own compiler version, it seems in my option that the website of TDM-GCC should make it clear on the front page, that the compiler should not be looked at as a normal GCC compiler. You maybe even want to drop the GCC, because GCC as describe by the official website:
The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, Ada, and Go, as well as libraries for these languages (libstdc++, libgcj,...). GCC was originally written as the compiler for the GNU operating system.
GCC represents front ends for C++, but by changing that front end to your own needs/ides, you're breaking what GCC stands for.
This also rolls over to Code::Blocks' default compiler and makes it clear, that if they go and ship a "GCC" compiler by default, it should also work like a GCC compiler.
In the case of the static-by-default change, I carefully considered my options in the implementation and decided to have TDM-GCC reject -static-lib*** with an error precisely because this is safer than making it a no-op. Licensing concerns with the GPL (and associated exception clauses) make dynamic linking of libgcc and libstdc++ extremely dangerous to the casual user, so I want TDM-GCC to error out when the user assumes vanilla GCC behavior. This isn't an appropriate time or place for me to go into detail on the legal reasons behind this, so I hope you'll take my word for it as someone who has paid close attention to the discussions of this on the GCC and mingw-users mailing lists.
Well as you might have thought, I have my doubts about this, since linking stuff dynamically has usually less legal issues, than linking something statically by default, e.g. GPL doesn't allow you to link commercial stuff statically. If you have any resources regarding this, I'd be very interested to read them (you can also PM me if you don't want to post here any further).
In order to keep the conversation constructive and focused on Code::Blocks, this will be my only contribution to the thread.
Thanks! Don't hesitate to post if you have further constructive comments though.