<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="markdown-here-wrapper" data-md-url="Thunderbird"
      style="">
      <p style="margin: 0px 0px 1.2em !important;">Hey everyone,</p>
      <p style="margin: 0px 0px 1.2em !important;">I’m shipping a config
        file for my library and inside I set push/pop specific policies
        so that me and the consumers of my library can target different
        policies without us clashing against each other. However I’m
        struggling with <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">cmake_policy(PUSH)</code>/<code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">cmake_policy(POP)</code>
        once they are invoked from macro/functions. </p>
      <p style="margin: 0px 0px 1.2em !important;">Here’s a minimal
        failure example illustrating my problem</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code class="hljs language-cmake" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248) none repeat scroll 0% 0%; -moz-text-size-adjust: none;">
<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">project</span>(pcl-config-test)
<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">cmake_minimum_required</span>(VERSION <span class="hljs-number" style="color: rgb(0, 128, 128);">3.5</span>)

<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">cmake_policy</span>(PUSH)

<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">macro</span>(return_early)
  <span class="hljs-comment" style="color: rgb(153, 153, 136); font-style: italic;"># clean up code</span>
  <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">cmake_policy</span>(POP)
  <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">return</span>()
<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">endmacro</span>()

<span class="hljs-comment" style="color: rgb(153, 153, 136); font-style: italic;"># 1. do a bunch of things. invoke a couple of macros/functions</span>
<span class="hljs-comment" style="color: rgb(153, 153, 136); font-style: italic;"># from within other macros/functions, etc...</span>

<span class="hljs-comment" style="color: rgb(153, 153, 136); font-style: italic;"># 2. some error occurs</span>
<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">if</span>(ERROR)
  return_early()
<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">endif</span>()

<span class="hljs-comment" style="color: rgb(153, 153, 136); font-style: italic;"># 3. Everything went well</span>
<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">cmake_policy</span>(POP)
</code></pre>
      <p style="margin: 0px 0px 1.2em !important;">This produces the
        following output</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">
CMake Error at CMakeLists.txt:27 (my_macro):
  cmake_policy POP without matching PUSH

CMake Error in CMakeLists.txt:
  cmake_policy PUSH without matching POP

-- Configuring incomplete, errors occurred!
</code></pre>
      <p style="margin: 0px 0px 1.2em !important;">I was counting on the
        policy stack being preserved for at least macros, but that is
        not the case.</p>
      <p style="margin: 0px 0px 1.2em !important;">Is there a way for me
        to return early from my config file from within macros?</p>
      <p style="margin: 0px 0px 1.2em !important;">Best regards,</p>
      <p style="margin: 0px 0px 1.2em !important;">Sérgio</p>
      <div
title="MDH:PHA+SGV5IGV2ZXJ5b25lLDwvcD48cD5JJ20gc2hpcHBpbmcgYSBjb25maWcgZmlsZSBmb3IgbXkgbGlicmFyeSBhbmQgaW5zaWRlIEkgc2V0IHB1c2gvcG9wIHNwZWNpZmljIHBvbGljaWVzIHNvIHRo
YXQgbWUgYW5kIHRoZSBjb25zdW1lcnMgb2YgbXkgbGlicmFyeSBjYW4gdGFyZ2V0IGRpZmZlcmVu
dCBwb2xpY2llcyB3aXRob3V0IHVzIGNsYXNoaW5nIGFnYWluc3QgZWFjaCBvdGhlci4gSG93ZXZl
ciBJJ20gc3RydWdnbGluZyB3aXRoIGBjbWFrZV9wb2xpY3koUFVTSClgL2BjbWFrZV9wb2xpY3ko
UE9QKWAgb25jZSB0aGV5IGFyZSBpbnZva2VkIGZyb20gbWFjcm8vZnVuY3Rpb25zLiA8YnI+PC9w
PjxwPkhlcmUncyBhIG1pbmltYWwgZmFpbHVyZSBleGFtcGxlIGlsbHVzdHJhdGluZyBteSBwcm9i
bGVtPGJyPjwvcD48cD5gYGBjbWFrZTwvcD48cD5wcm9qZWN0KHBjbC1jb25maWctdGVzdCk8YnI+
Y21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNSk8YnI+PGJyPjxicj5jbWFrZV9wb2xp
Y3koUFVTSCk8YnI+PGJyPjxicj5tYWNybyhyZXR1cm5fZWFybHkpPGJyPiZuYnNwOyAjIGNsZWFu
IHVwIGNvZGU8YnI+Jm5ic3A7IGNtYWtlX3BvbGljeShQT1ApPGJyPiZuYnNwOyByZXR1cm4oKTxi
cj5lbmRtYWNybygpPGJyPjxicj4jIDEuIGRvIGEgYnVuY2ggb2YgdGhpbmdzLiBpbnZva2UgYSBj
b3VwbGUgb2YgbWFjcm9zL2Z1bmN0aW9uczxicj4jIGZyb20gd2l0aGluIG90aGVyIG1hY3Jvcy9m
dW5jdGlvbnMsIGV0Yy4uLjxicj48YnI+IyAyLiBzb21lIGVycm9yIG9jY3Vyczxicj5pZihFUlJP
Uik8YnI+Jm5ic3A7IHJldHVybl9lYXJseSgpPGJyPmVuZGlmKCk8YnI+PGJyPiMgMy4gRXZlcnl0
aGluZyB3ZW50IHdlbGw8YnI+Y21ha2VfcG9saWN5KFBPUCk8YnI+PC9wPjxwPmBgYDwvcD48cD5U
aGlzIHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgb3V0cHV0PC9wPjxwPmBgYDwvcD48cD5DTWFrZSBF
cnJvciBhdCBDTWFrZUxpc3RzLnR4dDoyNyAobXlfbWFjcm8pOjxicj4mbmJzcDsgY21ha2VfcG9s
aWN5IFBPUCB3aXRob3V0IG1hdGNoaW5nIFBVU0g8YnI+PGJyPjxicj5DTWFrZSBFcnJvciBpbiBD
TWFrZUxpc3RzLnR4dDo8YnI+Jm5ic3A7IGNtYWtlX3BvbGljeSBQVVNIIHdpdGhvdXQgbWF0Y2hp
bmcgUE9QPGJyPjxicj48YnI+LS0gQ29uZmlndXJpbmcgaW5jb21wbGV0ZSwgZXJyb3JzIG9jY3Vy
cmVkITwvcD48cD5gYGA8L3A+PHA+PGJyPjwvcD48cD5JIHdhcyBjb3VudGluZyBvbiB0aGUgcG9s
aWN5IHN0YWNrIGJlaW5nIHByZXNlcnZlZCBmb3IgYXQgbGVhc3QgbWFjcm9zLCBidXQgdGhhdCBp
cyBub3QgdGhlIGNhc2UuPC9wPjxwPjxicj48L3A+PHA+SXMgdGhlcmUgYSB3YXkgZm9yIG1lIHRv
IHJldHVybiBlYXJseSBmcm9tIG15IGNvbmZpZyBmaWxlIGZyb20gd2l0aGluIG1hY3Jvcz88L3A+
PHA+PGJyPjwvcD48cD5CZXN0IHJlZ2FyZHMsPC9wPjxwPlPDqXJnaW88L3A+PHA+PGJyPjwvcD48
        cD48YnI+PC9wPg=="
style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;">​</div>
    </div>
  </body>
</html>