浏览代码

BUG: Allow arbitrary text in values for some keywords. (And avoid warning that the arbitrary text is an unknown keyword.)

David Cole 16 年之前
父节点
当前提交
10f4e911f0
共有 1 个文件被更改,包括 30 次插入16 次删除
  1. 30 16
      Modules/ExternalProject.cmake

+ 30 - 16
Modules/ExternalProject.cmake

@@ -121,31 +121,45 @@ function(_ep_parse_arguments f name ns args)
   # upper-case letter followed by at least two more upper-case letters
   # or underscores to be keywords.
   set(key)
+
   foreach(arg IN LISTS args)
+    set(is_value 1)
+
     if(arg MATCHES "^[A-Z][A-Z_][A-Z_]+$" AND
         NOT ((arg STREQUAL "${key}") AND (key STREQUAL "COMMAND")) AND
         NOT arg MATCHES "^(TRUE|FALSE)$")
-      # Keyword
-      set(key "${arg}")
-      if(_ep_keywords_${f} AND NOT key MATCHES "${_ep_keywords_${f}}")
-        message(AUTHOR_WARNING "unknown ${f} keyword: ${key}")
-      endif()
-    elseif(key)
-      # Value
-      if(NOT arg STREQUAL "")
-        set_property(TARGET ${name} APPEND PROPERTY ${ns}${key} "${arg}")
+      if(_ep_keywords_${f} AND arg MATCHES "${_ep_keywords_${f}}")
+        set(is_value 0)
       else()
-        get_property(have_key TARGET ${name} PROPERTY ${ns}${key} SET)
-        if(have_key)
-          get_property(value TARGET ${name} PROPERTY ${ns}${key})
-          set_property(TARGET ${name} PROPERTY ${ns}${key} "${value};${arg}")
+        if(NOT (key STREQUAL "COMMAND")
+          AND NOT (key STREQUAL "CVS_MODULE")
+          AND NOT (key STREQUAL "DEPENDS")
+          )
+          message(AUTHOR_WARNING "unknown ${f} keyword: ${arg}")
+        endif()
+      endif()
+    endif()
+
+    if(is_value)
+      if(key)
+        # Value
+        if(NOT arg STREQUAL "")
+          set_property(TARGET ${name} APPEND PROPERTY ${ns}${key} "${arg}")
         else()
-          set_property(TARGET ${name} PROPERTY ${ns}${key} "${arg}")
+          get_property(have_key TARGET ${name} PROPERTY ${ns}${key} SET)
+          if(have_key)
+            get_property(value TARGET ${name} PROPERTY ${ns}${key})
+            set_property(TARGET ${name} PROPERTY ${ns}${key} "${value};${arg}")
+          else()
+            set_property(TARGET ${name} PROPERTY ${ns}${key} "${arg}")
+          endif()
         endif()
+      else()
+        # Missing Keyword
+        message(AUTHOR_WARNING "value '${arg}' with no previous keyword in ${f}")
       endif()
     else()
-      # Missing Keyword
-      message(AUTHOR_WARNING "value with no keyword in ${f}")
+      set(key "${arg}")
     endif()
   endforeach()
 endfunction(_ep_parse_arguments)