More stream-lining of nimble file
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
This commit is contained in:
		
							parent
							
								
									308da25bbc
								
							
						
					
					
						commit
						f76ec9a1ef
					
				
							
								
								
									
										124
									
								
								nymph.nimble
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								nymph.nimble
									
									
									
									
									
								
							@ -15,6 +15,14 @@ requires "nim >= 2.0"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Custom tasks
 | 
					# Custom tasks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Example = tuple
 | 
				
			||||||
 | 
					    name: string
 | 
				
			||||||
 | 
					    uri: string
 | 
				
			||||||
 | 
					    source: string
 | 
				
			||||||
 | 
					    bundle: string
 | 
				
			||||||
 | 
					    dll: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const examples = to_table({
 | 
					const examples = to_table({
 | 
				
			||||||
    "amp": "urn:nymph:examples:amp"
 | 
					    "amp": "urn:nymph:examples:amp"
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
@ -29,106 +37,78 @@ proc parseArgs(): tuple[options: seq[string], args: seq[string]] =
 | 
				
			|||||||
            result.args.add(arg)
 | 
					            result.args.add(arg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
proc showArgs() =
 | 
					proc getExample(task_name: string): Example =
 | 
				
			||||||
    ## Show task environment (for debugging when writing nimble tasks)
 | 
					    let (_, args) = parseArgs()
 | 
				
			||||||
    echo "Command: ", getCommand()
 | 
					 | 
				
			||||||
    echo "ProjectName: ", projectName()
 | 
					 | 
				
			||||||
    echo "ProjectDir: ", projectDir()
 | 
					 | 
				
			||||||
    echo "ProjectPath: ", projectPath()
 | 
					 | 
				
			||||||
    echo "Task args: ", commandLineParams
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for i in 0..paramCount():
 | 
					    if args.len == 0:
 | 
				
			||||||
        echo &"Arg {i}: ", paramStr(i)
 | 
					        quit(&"Usage: nimble {task_name} <example name>")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    result.name = changeFileExt(args[^1], "")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let examplesDir = thisDir() / "examples"
 | 
				
			||||||
 | 
					    result.source = examplesDir / changeFileExt(result.name, "nim")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if not fileExists(result.source):
 | 
				
			||||||
 | 
					        quit(&"Example '{result.name}' not found.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    result.uri = examples.getOrDefault(result.name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if result.uri == "":
 | 
				
			||||||
 | 
					        quit(&"Plugin URI for example '{result.name}' not set.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    result.bundle = examplesDir / changeFileExt(result.name, "lv2")
 | 
				
			||||||
 | 
					    result.dll = result.bundle / toDll(result.name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
task build_ex, "Build given example plugin":
 | 
					task build_ex, "Build given example plugin":
 | 
				
			||||||
    #showArgs()
 | 
					    let ex = getExample("build_ex")
 | 
				
			||||||
    let (_, args) = parseArgs()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if args.len == 0:
 | 
					    switch("app", "lib")
 | 
				
			||||||
        echo "Usage: nimble build_ex <example name>"
 | 
					    switch("noMain", "on")
 | 
				
			||||||
        return
 | 
					    switch("mm", "arc")
 | 
				
			||||||
 | 
					    switch("out", ex.dll)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let example = args[^1]
 | 
					    when not defined(release) and not defined(debug):
 | 
				
			||||||
    let source = thisDir() / "examples" / example & ".nim"
 | 
					        echo &"Compiling plugin {ex.name} in release mode."
 | 
				
			||||||
    let bundle = thisDir() / "examples" / example & ".lv2"
 | 
					        switch("define", "release")
 | 
				
			||||||
    let dll = bundle / toDll(example)
 | 
					        switch("opt", "speed")
 | 
				
			||||||
 | 
					        switch("define", "lto")
 | 
				
			||||||
 | 
					        switch("define", "strip")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if fileExists(source):
 | 
					    setCommand("compile", ex.source)
 | 
				
			||||||
        switch("app", "lib")
 | 
					 | 
				
			||||||
        switch("noMain", "on")
 | 
					 | 
				
			||||||
        switch("mm", "arc")
 | 
					 | 
				
			||||||
        switch("out", dll)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        when not defined(release) and not defined(debug):
 | 
					 | 
				
			||||||
            echo &"Compiling plugin {example} in release mode."
 | 
					 | 
				
			||||||
            switch("define", "release")
 | 
					 | 
				
			||||||
            switch("opt", "speed")
 | 
					 | 
				
			||||||
            switch("define", "lto")
 | 
					 | 
				
			||||||
            switch("define", "strip")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        setCommand("compile", source)
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        echo &"Example '{example}' not found."
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
task lv2lint, "Run lv2lint check on given example plugin":
 | 
					task lv2lint, "Run lv2lint check on given example plugin":
 | 
				
			||||||
    let (_, args) = parseArgs()
 | 
					    let ex = getExample("lv2lint")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if args.len == 0:
 | 
					    if fileExists(ex.dll):
 | 
				
			||||||
        echo "Usage: nimble lv2lint <example name>"
 | 
					        exec(&"lv2lint -s NimMain -I \"{ex.bundle}\" \"{ex.uri}\"")
 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    let example = args[^1]
 | 
					 | 
				
			||||||
    let uri = examples.getOrDefault(example)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if uri == "":
 | 
					 | 
				
			||||||
        echo &"Plugin URI for example '{example}' not set."
 | 
					 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    let examplesDir = thisDir() & "/examples"
 | 
					 | 
				
			||||||
    let bundle = examplesDir & "/" & example & ".lv2"
 | 
					 | 
				
			||||||
    let dll = bundle & "/" & toDll(example)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if fileExists(dll):
 | 
					 | 
				
			||||||
        exec(&"lv2lint -s NimMain -I {bundle} \"{uri}\"")
 | 
					 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        echo &"Example '{example}' shared library not found. Use task 'build_ex' to build it."
 | 
					        echo &"Example '{ex.name}' shared library not found. Use task 'build_ex' to build it."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
task lv2bm, "Run lv2bm benchmark on given example plugin":
 | 
					task lv2bm, "Run lv2bm benchmark on given example plugin":
 | 
				
			||||||
    let (_, args) = parseArgs()
 | 
					    let ex = getExample("lv2bm")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if args.len == 0:
 | 
					    if ex.uri == "":
 | 
				
			||||||
        echo "Usage: nimble lv2bm <example name>"
 | 
					        echo &"Plugin URI for example '{ex.name}' not set."
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let example = args[^1]
 | 
					    if fileExists(ex.dll):
 | 
				
			||||||
    let uri = examples.getOrDefault(example)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if uri == "":
 | 
					 | 
				
			||||||
        echo &"Plugin URI for example '{example}' not set."
 | 
					 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    let examplesDir = thisDir() / "examples"
 | 
					 | 
				
			||||||
    let bundle = examplesDir / example & ".lv2"
 | 
					 | 
				
			||||||
    let dll = bundle / toDll(example)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if fileExists(dll):
 | 
					 | 
				
			||||||
        let lv2_path = getEnv("LV2_PATH")
 | 
					        let lv2_path = getEnv("LV2_PATH")
 | 
				
			||||||
        let tempLv2Dir = thisDir() / ".lv2"
 | 
					        let tempLv2Dir = thisDir() / ".lv2"
 | 
				
			||||||
        let bundleLink = tempLv2Dir / example & ".lv2"
 | 
					        let bundleLink = tempLv2Dir / changeFileExt(ex.name, "lv2")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        mkDir(tempLv2Dir)
 | 
					        mkDir(tempLv2Dir)
 | 
				
			||||||
        rmFile(bundleLink)
 | 
					        rmFile(bundleLink)
 | 
				
			||||||
        exec(&"ln -s \"{bundle}\" \"{bundleLink}\"")
 | 
					        exec(&"ln -s \"{ex.bundle}\" \"{bundleLink}\"")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if lv2_path == "":
 | 
					        if lv2_path == "":
 | 
				
			||||||
            putEnv("LV2_PATH", tempLv2Dir)
 | 
					            putEnv("LV2_PATH", tempLv2Dir)
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            putEnv("LV2_PATH", tempLv2Dir & ":" & lv2_path)
 | 
					            putEnv("LV2_PATH", tempLv2Dir & ":" & lv2_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        exec(&"lv2bm --full-test -i white \"{uri}\"")
 | 
					        exec(&"lv2bm --full-test -i white \"{ex.uri}\"")
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        echo &"Example '{example}' shared library not found. Use task 'build_ex' to build it."
 | 
					        echo &"Example '{ex.name}' shared library not found. Use task 'build_ex' to build it."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user