A DSL is just an internal or external language used to express and solve a problem. Metaprogramming is a programming tool. DSLs do not rely on metaprogramming (but metaprogramming may be used to implement a DSL).
You know it is dark times when the trees riot. I think this tiny ad is their leader:
Two software engineers solve most of the world's problems in one K&R sized book