Wiki

Ticket #12: cmdLnArgs-NEW-part1.patch

File cmdLnArgs-NEW-part1.patch, 12.1 KB (added by hopscc, 16 years ago)
  • HowTo/600-AccessMySQL.cobra

     
    11# .require. MySql.Data.dll 
    2 # .args. -r:System.Data -r:MySql.Data 
     2# .args. -ref:System.Data -ref:MySql.Data 
    33""" 
    44See also: 
    55    docs/mysql on the Cobra web site 
     
    1111    http://dev.mysql.com/doc/refman/5.0/en/connector-net-installation-unix.html 
    1212 
    1313To run: 
    14     cobra -r:System.Data -r:MySql.Data AccessMySQL.cobra 
     14    cobra -ref:System.Data -ref:MySql.Data AccessMySQL.cobra 
    1515 
    1616Or just compile: 
    17     cobra -c -r:System.Data -r:MySql.Data AccessMySQL.cobra 
     17    cobra -c -ref:System.Data -ref:MySql.Data AccessMySQL.cobra 
    1818and then run: 
    1919    mono mysql.exe 
    2020 
    21 You can probably leave out the "-r:<library>" and rely of `use` to locate these. 
     21You can probably leave out the "-ref:<library>" and rely of `use` to locate these. 
    2222 
    2323Mac OS X: 
    2424    For installation, MySQL docs say "Copy the MySql.Data.dll file to your Mono project installation folder." 
  • Source/Compiler.cobra

     
    482482         
    483483             
    484484    def runProcess as Process 
     485        return .runProcess(nil, nil) 
     486         
     487    def runProcess(exeName as String?, argList as List<of String>?) as Process 
    485488        """ 
    486489        Returns a new Process with startInfo.fileName and p.startInfo.arguments set appropriately 
    487         for the produced executable and the current options. 
     490        for the produced executable and the current options and any provided argslist. 
    488491        """ 
    489         # TODO: support args to the program with a - or -- separator 
    490492        p = Process() 
     493        baseExeFileName = exeName ? .baseExeFileName 
     494        fullExeFileName = exeName ? .fullExeFileName 
    491495        branch .platform 
    492496            on PlatformEnum.Microsoft 
    493                 p.startInfo.fileName = .baseExeFileName 
     497                p.startInfo.fileName = baseExeFileName 
    494498            on PlatformEnum.Novell 
    495499                p.startInfo.fileName = 'mono' 
    496500                args = '' 
    497501                # mono also needs --debug when running 
    498502                if .options.getDefault('debug', '') not in ['', '-'] 
    499503                    args += '--debug ' 
    500                 args += '"[.fullExeFileName]"' 
     504                args += '"[fullExeFileName]"' 
    501505                p.startInfo.arguments = args 
    502506            else 
    503507                throw FallThroughException(.platform) 
     508                                 
     509        if argList and argList.count  
     510            args = p.startInfo.arguments ? ''  
     511            args += Utils.join(' ', argList)  
     512            p.startInfo.arguments = args                 
    504513        return p 
    505514 
    506515    ## 
     
    751760                print ' |', line 
    752761            return refs 
    753762 
    754         parts = output.replace('-r:', '\0').split(c'\0') 
     763        parts = output.replace('-ref:', '\0').split(c'\0') 
    755764        for part in parts 
    756765            if part.trim <> '', refs.add(part.trim) 
    757766         
  • Source/CommandLine.cobra

     
    199199        }, 
    200200        { 
    201201            'name': 'reference', 
    202             'synonyms': ['r'], # TODO: lose 'r' ->'Ref', 'R', something else 
     202            'synonyms': ['ref'],  
    203203            'isAccumulator': true, 
    204204            'description': 'Add a DLL reference.', 
    205205            'args': 'Some.dll', 
     
    218218#           'args': ':Qualified.Type.Name', 
    219219#       }, 
    220220        { 
    221             'name': 'run',  # TODO: Synonym 'r' after change 'reference' switch 
     221            'name': 'run',      # this is a switch only    
     222            'synonyms': ['r'],  
    222223            'description': 'Runs the Cobra program. This is the default behavior if specify any Cobra source files.', 
    223224            'type': 'main', 
    224225        }, 
     226        {                 
     227            'name': 'run-args',  
     228            'synonyms': ['-'],  # '--'  
     229            'description': 'Remaining args are to be passed to executable.',  
     230            'eg':          '-- arg1 arg2 argThree',  
     231            'type': 'args-list',  
     232        }, 
    225233        { 
    226234            'name': 'sharp-compiler', 
    227235            'description': 'Specify the path to the backend C# compiler.', 
     
    485493        if .options.boolValue('compile')  # maybe changed by compiler directive 
    486494            return 
    487495 
    488         p = c.runProcess 
     496        exeFileName as String? = nil 
     497        runArgs = .options.getDefaultLOStr('run-args') 
     498        # exeArgs = .options.getDefaultLOStr('exe-args') 
     499        # if exeArgs.count 
     500        #   exeFileName = exeArgs[0] 
     501        #   runArgs = exeArgs[1:] 
     502        p = c.runProcess(exeFileName, runArgs) 
    489503        if _verbosity >= 1 
    490504            print 'Running: [p.startInfo.fileName] [p.startInfo.arguments]' 
    491505            print .verboseLineSeparator 
     
    635649            valueStr = 'no-value' 
    636650            fileList = List<of String>() 
    637651            mainOptions = List<of String>() 
     652            argn = 0 
    638653            for arg in args 
    639                 if not arg.trim.length 
    640                     continue 
    641                      
     654                argn += 1  # ofset next arg after current 
     655                if not arg.trim.length, continue 
     656 
    642657                isOption = arg.startsWith(optionPrefix) 
    643658                if isOption 
    644659                    name = _getOptionParts(arg, optionPrefix, out valueStr) 
     
    649664                        continue 
    650665                         
    651666                    value = _processToValue(name, valueStr, spec, mainOptions) 
     667                    if value == 'args-list' 
     668                        value = args[argn:] 
    652669                    if value is nil 
    653670                        _error('Cannot process value "[valueStr]" for option "[name]".') 
    654671                    valueDict[name] = value to ! 
    655672                    didSpecify[name] = true 
     673                    if spec['type'] to String == 'args-list' 
     674                        break   # absorbed remainder of args 
    656675                else # not isOption 
    657676                    if _optsOnly 
    658677                        _error("Filenames are not allowed here, All the args provided must be '-' prefixed options") 
     
    691710        """ 
    692711        while arg.startsWith(optionPrefix) 
    693712            arg = arg[1:] 
     713        if not arg.length # '--' 
     714            arg = 'run-args' 
    694715        return arg 
    695716                 
    696717    def splitOpt(arg as String) as IList<of String> 
     
    799820            on 'main' 
    800821                mainOptions.add(name) 
    801822                value = true 
     823            on 'args-list'  # remainder of args are for execution of exe file  
     824                value = 'args-list' 
    802825            else 
    803826                value = _interpretValue(valueStr, spec) 
    804827        return value 
     
    953976        print '  cobra <options> <command> <path(s)>' 
    954977        print '    * commands that operate on path(s) are:' 
    955978        print '      -compile ... Compile only. Also, -c' 
    956         print '      -run ....... Run the program (compile if necessary).' 
     979        print '      -run ....... Run the program (compile if necessary). Also -r (Default)' 
    957980        print '      -test ...... Run the unit tests of a library.' 
    958981        print '      -document .. Document the program (partial compilation). Also, -doc' 
    959982        print '' 
  • Tests/720-libraries/100-winforms/100-winforms.cobra

     
    11# .compile-only. 
    2 # .args. -c -t:winexe -r:System.Windows.Forms 
     2# .args. -c -t:winexe -ref:System.Windows.Forms 
    33 
    44use System.Windows.Forms 
    55 
  • Tests/320-misc-two/520-indexer-with-non-standard-name.cobra

     
    1 # .args. -r:System.Xml 
     1# .args. -ref:System.Xml 
    22 
    33# XmlNodeList has an ItemOf property instead of Item. 
    44# This test shows that Cobra is reading the DefaultMemberAttribute of the class. 
  • Tests/700-command-line/705-run-args.cobra

     
     1# Test compile+run execution specifying args to run compiled prog with  
     2class Test  
     3    def main is shared  
     4        p as System.Diagnostics.Process?  
     5        cobraPath = CobraCore.findCobraExe  
     6        assert cobraPath  
     7        if cobraPath  
     8            cmdln = "702-echo -- argA argB argC"  
     9            output = CobraCore.runCobraExe(cobraPath, cmdln, out p)  
     10            #print output  
     11            assert 'Unhandled Exception' not in output  
     12            assert 'argA argB argC' in output  
     13            assert p.exitCode == 0  
     14             
     15            cmdln = "702-echo -run-args x1arg1 x1argB x1argC"  
     16            output = CobraCore.runCobraExe(cobraPath, cmdln, out p)  
     17            #print output  
     18            assert 'Unhandled Exception' not in output  
     19            assert 'x1arg1 x1argB x1argC' in output  
     20            assert p.exitCode == 0  
     21         
     22            cmdln = "-r 702-echo -run-args x2arg1 x2argB x2argC"  
     23            output = CobraCore.runCobraExe(cobraPath, cmdln, out p)  
     24            #print output  
     25            assert 'Unhandled Exception' not in output  
     26            assert 'x2arg1 x2argB x2argC' in output  
     27            assert p.exitCode == 0  
     28             
  • Tests/700-command-line/812-lib-option.cobra

     
    11# was .args. -lib:libdir -r:foolib -c 
    2 %% args -lib:libdir -r:foolib -c 
     2%% args -lib:libdir -ref:foolib -c 
    33 
    44class Test 
    55 
  • Tests/700-command-line/300-args-reference-gac-lib.cobra

     
    1 # .args. -r:System.Xml 
     1# .args. -ref:System.Xml 
    22 
    33use System.Xml 
    44 
  • Tests/700-command-line/402-fooprog.cobra

     
    1 # .args. -embed-run-time:no -r:400-foolib.dll 
     1# .args. -embed-run-time:no -ref:400-foolib.dll 
    22 
    33class Program 
    44 
  • Tests/700-command-line/404-fooprog.cobra

     
    1 # .args. -embed-run-time:no -r:400-foolib 
     1# .args. -embed-run-time:no -ref:400-foolib 
    22 
    33# same as other fooprog, but the -r arg does not include the ".dll" extension -- both ways should work 
    44 
  • Tests/700-command-line/410-use-lowernames-dll.cobra

     
    1 # .args. -r:lowernames.dll 
     1# .args. -ref:lowernames.dll 
    22 
    33class Program 
    44 
  • Tests/700-command-line/512-lib-option.cobra

     
    11# .compile-only. 
    2 # .args. -lib:libdir -r:foolib -c 
     2# .args. -lib:libdir -ref:foolib -c 
    33 
    44class Test 
    55 
  • Tests/700-command-line/702-echo.cobra

     
     1# .skip. 
     2class Echo 
     3    def main is shared 
     4        args = CobraCore.commandLineArgs 
     5        sep='' 
     6        for a in args[1:] 
     7            print '[sep][a]' stop 
     8            sep=' ' 
     9        print  
  • Developer/IntermediateReleaseNotes.text

     
    11Post 0.8 
    22 
     3* Modified commandline options so -r becomes synonym for -run rather   
     4 than for -reference. -reference synonym becomes -ref.  
     5 Support -run-args (synonym --) option for specifying args to pass to compiled executable   
     6 
    37* Added support for "multi-arg assignment" which allows you to assign to a number of variables from contents of a list in one statement 
    48.code 
    59    a,b,c = ['val1', 'val2', 'val3'] 
    610 
    7  
    811* Added support for a new compiler directive 'args' that takes command line options and applies them to the compilation environment from that point on. 
    912.code 
    1013    %% args -target:lib -embed-run-time:no