Add support for custom commands to set flags on themselves
This works for Python commands defined via a class (implement get_flags on your class) and C++ plugin commands (which can call SBCommand::GetFlags()/SetFlags())

Flags allow features such as not letting the command run if there's no target, or if the process is not stopped, ...
Commands could always check for these things themselves, but having these accessible via flags makes custom commands more consistent with built-in ones

llvm-svn: 238286
diff --git a/lldb/test/functionalities/command_script/TestCommandScript.py b/lldb/test/functionalities/command_script/TestCommandScript.py
index fab1cb2..d4210b4 100644
--- a/lldb/test/functionalities/command_script/TestCommandScript.py
+++ b/lldb/test/functionalities/command_script/TestCommandScript.py
@@ -23,11 +23,17 @@
         self.pycmd_tests ()
 
     def pycmd_tests (self):
+        self.runCmd("command source py_import")
+
+        self.expect('targetname',
+            substrs = ['a.out'], matching=False, error=True)
+
         exe = os.path.join (os.getcwd(), "a.out")
         self.expect("file " + exe,
                     patterns = [ "Current executable set to .*a.out" ])
 
-        self.runCmd("command source py_import")
+        self.expect('targetname',
+            substrs = ['a.out'], matching=True, error=False)
 
         # This is the function to remove the custom commands in order to have a
         # clean slate for the next test case.
@@ -75,9 +81,6 @@
         self.expect('welcome Enrico', matching=False, error=True,
                 substrs = ['Hello Enrico, welcome to LLDB']);
 
-        self.expect('targetname',
-            substrs = ['a.out'])
-
         self.expect('targetname fail', error=True,
                     substrs = ['a test for error in command'])
 
@@ -122,7 +125,7 @@
         self.runCmd('command script add my_command --class welcome.WelcomeCommand')
         self.expect('my_command Blah', substrs = ['Hello Blah, welcome to LLDB'])
 
-        self.runCmd('command script add my_command --function welcome.target_name_impl')
+        self.runCmd('command script add my_command --class welcome.TargetnameCommand')
         self.expect('my_command', substrs = ['a.out'])
 
         self.runCmd("command script clear")
diff --git a/lldb/test/functionalities/command_script/py_import b/lldb/test/functionalities/command_script/py_import
index 6150e02..169daac 100644
--- a/lldb/test/functionalities/command_script/py_import
+++ b/lldb/test/functionalities/command_script/py_import
@@ -3,7 +3,7 @@
 script import welcome
 script import bug11569
 command script add welcome --class welcome.WelcomeCommand
-command script add targetname --function welcome.target_name_impl
+command script add targetname --class welcome.TargetnameCommand
 command script add longwait --function welcome.print_wait_impl
 command script import mysto.py --allow-reload
 command script add tell_sync --function welcome.check_for_synchro --synchronicity sync
diff --git a/lldb/test/functionalities/command_script/welcome.py b/lldb/test/functionalities/command_script/welcome.py
index 90bd0b8..c6d4ddc 100644
--- a/lldb/test/functionalities/command_script/welcome.py
+++ b/lldb/test/functionalities/command_script/welcome.py
@@ -1,4 +1,4 @@
-import sys
+import lldb, sys
 
 class WelcomeCommand(object):
     def __init__(self, debugger, session_dict):
@@ -11,12 +11,19 @@
         print >>result,  ('Hello ' + args + ', welcome to LLDB');
         return None;
 
-def target_name_impl(debugger, args, result, dict):
-    target = debugger.GetSelectedTarget()
-    file = target.GetExecutable()
-    print >>result,  ('Current target ' + file.GetFilename())
-    if args == 'fail':
-        result.SetError('a test for error in command')
+class TargetnameCommand(object):
+    def __init__(self, debugger, session_dict):
+        pass
+
+    def __call__(self, debugger, args, exe_ctx, result):
+        target = debugger.GetSelectedTarget()
+        file = target.GetExecutable()
+        print >>result,  ('Current target ' + file.GetFilename())
+        if args == 'fail':
+            result.SetError('a test for error in command')
+    
+    def get_flags(self):
+        return lldb.eCommandRequiresTarget
 
 def print_wait_impl(debugger, args, result, dict):
     result.SetImmediateOutputFile(sys.stdout)