Commit Diff


commit - 885512285563e8e60de40df14cb7d2ccee8f86d9
commit + 3aa36739fc1841478a8d92ab424879ced36245f0
blob - e84207efe527cecd70ba9dd52797e4f1e678aa3c
blob + bafad71d59de5d77ce8b38da1a9e822c539bc920
--- make/make.c
+++ make/make.c
@@ -898,7 +898,7 @@ struct expand_ctx *ctx;
 	extern expand_macro_into ();
 	extern subst ();
 	struct macro *m;
-	char *v, *orig = *s;
+	char *v, *orig = *s, *t;
 	str_t name, old, new;
 
 	/* parse macro name */
@@ -971,15 +971,34 @@ struct expand_ctx *ctx;
 
 			replace_all_into (out, v, str_get (&old), str_get (&new));
 			str_free (&new);
-			break;
+			goto ret;
+		} else if (strcmp (str_get (&old), "U") == 0) {
+			str_new (&new);
+
+			for (t = v; *t != '\0'; ++t)
+				str_putc (&new, toupper (*t));
+
+			free (v);
+			v = str_release (&new);
+		} else if (strcmp (str_get (&old), "L") == 0) {
+			str_new (&new);
+
+			for (t = v; *t != '\0'; ++t)
+				str_putc (&new, tolower (*t));
+
+			free (v);
+			v = str_release (&new);
 		} else {
-			errx (1, "TODO: modifiers: '${%s'", orig);
+			errx (1, "%s: invalid modifier: ':%s' in '%s'", sc_path_str (sc), str_get (&old), orig);
 		}
 	}
+
+	str_puts (out, v);
 
+ret:
 	if (**s != '}')
 		goto invalid;
-
+	++*s;
 	str_free (&old);
 	free (v);
 	return 0;