title: how to preserve meta tags in defmacro
body: <p>How can macros be defined to preserve metadata information?</p>
  
  <pre><code>(defmacro defdynamic
    [name val]
    (let [dname (symbol (str "*" name "*"))]
      `(def ^:dynamic ~dname ~val)))
  
  (defdynamic hello 1)
  </code></pre>
  
  <p>will give a warning:</p>
  
  <pre><code>Warning: *hello* not declared dynamic and thus is not dynamically
  rebindable, but its name suggests otherwise. Please either indicate
  ^:dynamic *hello* or change the name.
  </code></pre>
  
  <p>and the var will not be dynamic</p>
  
  <pre><code>(:dynamic (meta #'*hello*))
  =&gt; nil
  </code></pre>