]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
CMake: Improve compile flag macros, replace "-O0" with "-O1" on Cygwin targets
authormaier <maier@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 15 Mar 2013 00:04:58 +0000 (00:04 +0000)
committermaier <maier@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 15 Mar 2013 00:04:58 +0000 (00:04 +0000)
git-svn-id: https://svn.dealii.org/trunk@28906 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/cmake/checks/check_01_system_features.cmake
deal.II/cmake/macros/macro_add_flags.cmake
deal.II/cmake/macros/macro_enable_if_links.cmake
deal.II/cmake/macros/macro_enable_if_supported.cmake
deal.II/cmake/macros/macro_replace_flag.cmake [new file with mode: 0644]
deal.II/cmake/macros/macro_strip_flag.cmake

index f5ac8662e7521aaeef933ec2f51f77361a0eca67..a85e40feccf0fc5e3b2581d980b53c8410802afb 100644 (file)
@@ -117,3 +117,13 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Windows")
   STRIP_FLAG(DEAL_II_SHARED_LINKER_FLAGS_DEBUG "-g")
 ENDIF()
 
+IF(CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
+  #
+  # Workaround for a miscompilation and linkage issue with shared libraries
+  # under Cygwin. Replacing -O0 with -O1 helps.
+  #
+  # - Matthias Maier, 2013
+  #
+  REPLACE_FLAG(DEAL_II_CXX_FLAGS_DEBUG "-O0" "-O1")
+
+ENDIF()
index 2bcddaa0a83655a1573a4837f521e16653c2f071..a56bb3ae30794456f682d678a4233cb9928919ef 100644 (file)
 #
 
 MACRO(ADD_FLAGS _variable _flags)
-  IF(NOT "${_flags}" STREQUAL "")
+  STRING(STRIP "${_flags}" _flags_stripped)
+  IF(NOT "${_flags_stripped}" STREQUAL "")
     SET(${_variable} "${${_variable}} ${_flags}")
+    STRING(STRIP "${${_variable}}" ${_variable})
   ENDIF()
 ENDMACRO()
 
index 5a8525afe3839d0ac49de4a14f99b013f357938a..2a1bf93127f19b3006f82dd68674dcdebffe58ba 100644 (file)
 #
 
 MACRO(ENABLE_IF_LINKS _variable _flag)
-  STRING(REGEX REPLACE "^-" "" _flag_name "${_flag}")
+  STRING(STRIP "${_flag}" _flag_stripped)
+  STRING(REGEX REPLACE "^-" "" _flag_name "${_flag_stripped}")
 
-  ADD_FLAGS(CMAKE_REQUIRED_FLAGS "${_flag}")
-  CHECK_CXX_SOURCE_COMPILES(
-  "
-  int main() { return 0; }
-  "
-  DEAL_II_HAVE_FLAG_${_flag_name}
-  )
-  STRIP_FLAG(CMAKE_REQUIRED_FLAGS "${_flag}")
-  IF(DEAL_II_HAVE_FLAG_${_flag_name})
-    SET(${_variable} "${${_variable}} ${_flag}")
+  IF(NOT "${_flag_stripped}" STREQUAL "")
+    ADD_FLAGS(CMAKE_REQUIRED_FLAGS "${_flag_stripped}")
+    CHECK_CXX_SOURCE_COMPILES(
+    "
+    int main() { return 0; }
+    "
+    DEAL_II_HAVE_FLAG_${_flag_name}
+    )
+    STRIP_FLAG(CMAKE_REQUIRED_FLAGS "${_flag_stripped}")
+    IF(DEAL_II_HAVE_FLAG_${_flag_name})
+      SET(${_variable} "${${_variable}} ${_flag_stripped}")
+      STRING(STRIP "${${_variable}}" ${_variable})
+    ENDIF()
   ENDIF()
 ENDMACRO()
 
index d843de50dabd2a9a85057e9bf4d0ba8bb711b6a9..ed63ec4788c66df14d6a13906b84ba33f0fe485d 100644 (file)
 #
 
 MACRO(ENABLE_IF_SUPPORTED _variable _flag)
-  IF(NOT "${_flag}" STREQUAL "")
-    STRING(REGEX REPLACE "^-" "" _flag_name "${_flag}")
+  STRING(STRIP "${_flag}" _flag_stripped)
+  IF(NOT "${_flag_stripped}" STREQUAL "")
+    STRING(REGEX REPLACE "^-" "" _flag_name "${_flag_stripped}")
     CHECK_CXX_COMPILER_FLAG(
-      "${_flag}"
+      "${_flag_stripped}"
       DEAL_II_HAVE_FLAG_${_flag_name}
       )
     IF(DEAL_II_HAVE_FLAG_${_flag_name})
-      SET(${_variable} "${${_variable}} ${_flag}")
+      SET(${_variable} "${${_variable}} ${_flag_stripped}")
+      STRING(STRIP "${${_variable}}" ${_variable})
     ENDIF()
   ENDIF()
 ENDMACRO()
diff --git a/deal.II/cmake/macros/macro_replace_flag.cmake b/deal.II/cmake/macros/macro_replace_flag.cmake
new file mode 100644 (file)
index 0000000..5ab43ca
--- /dev/null
@@ -0,0 +1,35 @@
+#####
+##
+## Copyright (C) 2012 by the deal.II authors
+##
+## This file is part of the deal.II library.
+##
+## <TODO: Full License information>
+## This file is dual licensed under QPL 1.0 and LGPL 2.1 or any later
+## version of the LGPL license.
+##
+## Author: Matthias Maier <matthias.maier@iwr.uni-heidelberg.de>
+##
+#####
+
+#
+# Replace all occurences of "${flag}" with "${replacement}" in the string
+# variable.
+#
+# Usage:
+#     STRIP_FLAG(variable flag replacement)
+#
+
+MACRO(REPLACE_FLAG _variable _flag _replacement)
+  STRING(STRIP "${_replacement}" _replacement_stripped)
+  STRING(REPLACE " " "  " ${_variable} "${${_variable}}")
+  SET(${_variable} " ${${_variable}} ")
+  STRING(REPLACE " " "  " _flag2 "${_flag}")
+  IF(NOT "${_replacement_stripped}" STREQUAL "")
+    STRING(REPLACE " ${_flag2} " " ${_replacement_stripped} " ${_variable} "${${_variable}}")
+  ELSE()
+    STRING(REPLACE " ${_flag2} " " " ${_variable} "${${_variable}}")
+  ENDIF()
+  STRING(REPLACE "  " " " ${_variable} "${${_variable}}")
+  STRING(STRIP "${${_variable}}" ${_variable})
+ENDMACRO()
index 70636c139b0f57ecea82446671669f1798d846af..d90979ad9b61c11d16f7250c509df8bfc36eaa97 100644 (file)
 #
 
 MACRO(STRIP_FLAG _variable _flag)
+  STRING(REPLACE " " "  " ${_variable} "${${_variable}}")
   SET(${_variable} " ${${_variable}} ")
-  STRING(REPLACE " ${_flag} " " " "${_variable}" ${${_variable}})
+  STRING(REPLACE " " "  " _flag2 "${_flag}")
+  STRING(REPLACE " ${_flag2} " " " ${_variable} "${${_variable}}")
+  STRING(REPLACE "  " " " ${_variable} "${${_variable}}")
   STRING(STRIP "${${_variable}}" ${_variable})
 ENDMACRO()
 

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.