CMake changes
[blender-staging.git] / build_files / cmake / macros.cmake
index 14bed8874fa6b660dc583ca3ce2fa87a6ccd8cb3..45dc67f9ce607cf9d1dad81c0ddd8e946917b80a 100644 (file)
@@ -388,3 +388,71 @@ macro(get_blender_version)
 
        # message(STATUS "Version (Internal): ${BLENDER_VERSION}.${BLENDER_SUBVERSION}, Version (external): ${BLENDER_VERSION}${BLENDER_VERSION_CHAR}-${BLENDER_VERSION_CYCLE}")
 endmacro()
+
+
+# hacks to override initial project settings
+# these macros must be called directly before/after project(Blender) 
+macro(blender_project_hack_pre)
+       # ----------------
+       # MINGW HACK START
+       # ignore system set flag, use our own
+       # must be before project(...)
+       # if the user wants to add their own its ok after first run.
+       if(DEFINED CMAKE_C_STANDARD_LIBRARIES)
+               set(_reset_standard_libraries OFF)
+       else()
+               set(_reset_standard_libraries ON)
+       endif()
+
+       # ------------------
+       # GCC -O3 HACK START
+       # needed because O3 can cause problems but
+       # allow the builder to set O3 manually after.
+       if(DEFINED CMAKE_C_FLAGS_RELEASE)
+               set(_reset_standard_cflags_rel OFF)
+       else()
+               set(_reset_standard_cflags_rel ON)
+       endif()
+       if(DEFINED CMAKE_CXX_FLAGS_RELEASE)
+               set(_reset_standard_cxxflags_rel OFF)
+       else()
+               set(_reset_standard_cxxflags_rel ON)
+       endif()
+endmacro()
+
+
+macro(blender_project_hack_post)
+       # --------------
+       # MINGW HACK END
+       if (_reset_standard_libraries)
+               # Must come after project(...)
+               #
+               # MINGW workaround for -ladvapi32 being included which surprisingly causes
+               # string formatting of floats, eg: printf("%.*f", 3, value). to crash blender
+               # with a meaningless stack trace. by overriding this flag we ensure we only
+               # have libs we define and that cmake & scons builds match.
+               set(CMAKE_C_STANDARD_LIBRARIES "" CACHE STRING "" FORCE)
+               set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "" FORCE)
+               mark_as_advanced(CMAKE_C_STANDARD_LIBRARIES)
+               mark_as_advanced(CMAKE_CXX_STANDARD_LIBRARIES)
+       endif()
+       unset(_reset_standard_libraries)
+
+
+       # ----------------
+       # GCC -O3 HACK END
+       if(_reset_standard_cflags_rel)
+               string(REGEX REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
+               set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "" FORCE)
+               mark_as_advanced(CMAKE_C_FLAGS_RELEASE)
+       endif()
+
+       if(_reset_standard_cxxflags_rel)
+               string(REGEX REPLACE "-O3" "-O2" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
+               set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "" FORCE)
+               mark_as_advanced(CMAKE_CXX_FLAGS_RELEASE)
+       endif()
+
+       unset(_reset_standard_cflags_rel)
+       unset(_reset_standard_cxxflags_rel)
+endmacro()