Implement patsubt function
diff --git a/eval.go b/eval.go
index 75009a8..e3b90ae 100644
--- a/eval.go
+++ b/eval.go
@@ -32,6 +32,7 @@
vars: vars,
funcs: map[string]Func{
"subst": funcSubst,
+ "patsubst": funcPatsubst,
"wildcard": funcWildcard,
"shell": funcShell,
"warning": funcWarning,
diff --git a/func.go b/func.go
index 5d527ca..c4408a0 100644
--- a/func.go
+++ b/func.go
@@ -15,6 +15,7 @@
func funcSubst(ev *Evaluator, args []string) string {
Log("subst %q", args)
+ // TODO: Actually, having more than three arguments is valid.
if len(args) != 3 {
panic(fmt.Sprintf("*** insufficient number of arguments (%d) to function `subst'."))
}
@@ -24,6 +25,21 @@
return strings.Replace(text, from, to, -1)
}
+func funcPatsubst(ev *Evaluator, args []string) string {
+ Log("patsubst %q", args)
+ // TODO: Actually, having more than three arguments is valid.
+ if len(args) != 3 {
+ panic(fmt.Sprintf("*** insufficient number of arguments (%d) to function `patsubst'."))
+ }
+ pat := ev.evalExpr(args[0])
+ repl := ev.evalExpr(args[1])
+ texts := splitSpaces(ev.evalExpr(args[2]))
+ for i, text := range texts {
+ texts[i] = substPattern(pat, repl, text)
+ }
+ return strings.Join(texts, " ")
+}
+
// http://www.gnu.org/software/make/manual/make.html#File-Name-Functions
func funcWildcard(ev *Evaluator, args []string) string {
Log("wildcard %q", args)