Compare commits

..

No commits in common. "f76ec9a1ef0ad6dc63b486df5f73a03d1779f6dd" and "de6512b4202dd9e8fb68b389828a87790e5f69be" have entirely different histories.

2 changed files with 69 additions and 59 deletions

View File

@ -32,11 +32,8 @@ Install the `amp.lv2` example plugin:
them as you like (also rename `amp.lv2/amp.ttl`). I'll use `myplugin` as the them as you like (also rename `amp.lv2/amp.ttl`). I'll use `myplugin` as the
base name in the examples below. base name in the examples below.
* Edit `myplugin.lv2/manifest.ttl`: * Edit `myplugin.lv2/manifest.ttl` and change the plugin URI and change the
* Change the plugin URI. plugin's shared library name defined with `lv2:binary` to `libmyplugin.so`.
* Change the plugin's shared library name defined via `lv2:binary` to
`libmyplugin.so`.
* Change file name referenced via `rdfs:seeAlso` to `myplugin.ttl`.
* Edit `myplugin.lv2/myplugin.ttl`: * Edit `myplugin.lv2/myplugin.ttl`:
* Change the plugin URI. * Change the plugin URI.

View File

@ -1,4 +1,3 @@
import std/os except commandLineParams
import std/strformat import std/strformat
# Package definition # Package definition
@ -15,14 +14,6 @@ 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"
}) })
@ -37,78 +28,100 @@ proc parseArgs(): tuple[options: seq[string], args: seq[string]] =
result.args.add(arg) result.args.add(arg)
proc getExample(task_name: string): Example = proc showArgs() =
let (_, args) = parseArgs() ## Show task environment (for debugging when writing nimble tasks)
echo "Command: ", getCommand()
echo "ProjectName: ", projectName()
echo "ProjectDir: ", projectDir()
echo "ProjectPath: ", projectPath()
echo "Task args: ", commandLineParams
if args.len == 0: for i in 0..paramCount():
quit(&"Usage: nimble {task_name} <example name>") echo &"Arg {i}: ", paramStr(i)
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":
let ex = getExample("build_ex") #showArgs()
let (_, args) = parseArgs()
if args.len == 0:
echo "Usage: nimble build_ex <example name>"
return
let example = args[^1]
let source = thisDir() & "/examples/" & example & ".nim"
let bundle = thisDir() & "/examples/" & example & ".lv2"
let dll = bundle & "/" & toDll(example)
if fileExists(source):
switch("app", "lib") switch("app", "lib")
switch("noMain", "on") switch("noMain", "on")
switch("mm", "arc") switch("mm", "arc")
switch("out", ex.dll)
when not defined(release) and not defined(debug):
echo &"Compiling plugin {ex.name} in release mode."
switch("define", "release")
switch("opt", "speed") switch("opt", "speed")
switch("define", "lto") switch("define", "release")
switch("define", "strip") switch("out", dll)
setCommand("compile", source)
setCommand("compile", ex.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 ex = getExample("lv2lint") let (_, args) = parseArgs()
if fileExists(ex.dll): if args.len == 0:
exec(&"lv2lint -s NimMain -I \"{ex.bundle}\" \"{ex.uri}\"") echo "Usage: nimble lv2lint <example name>"
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 '{ex.name}' shared library not found. Use task 'build_ex' to build it." echo &"Example '{example}' 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 ex = getExample("lv2bm") let (_, args) = parseArgs()
if ex.uri == "": if args.len == 0:
echo &"Plugin URI for example '{ex.name}' not set." echo "Usage: nimble lv2bm <example name>"
return return
if fileExists(ex.dll): 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):
let lv2_path = getEnv("LV2_PATH") let lv2_path = getEnv("LV2_PATH")
let tempLv2Dir = thisDir() / ".lv2" let tempLv2Dir = thisDir() & "/.lv2"
let bundleLink = tempLv2Dir / changeFileExt(ex.name, "lv2") let bundleLink = tempLv2Dir & "/" & example & ".lv2"
mkDir(tempLv2Dir) mkDir(tempLv2Dir)
rmFile(bundleLink) rmFile(bundleLink)
exec(&"ln -s \"{ex.bundle}\" \"{bundleLink}\"") exec(&"ln -s \"{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 \"{ex.uri}\"") exec(&"lv2bm --full-test -i white \"{uri}\"")
else: else:
echo &"Example '{ex.name}' shared library not found. Use task 'build_ex' to build it." echo &"Example '{example}' shared library not found. Use task 'build_ex' to build it."