<div dir="auto"><div>In case it helps: the GUI can contains a regex explorer where you can play with rexexes. But beware: there are some corner cases around quoting special things.<div dir="auto"><br></div><div dir="auto">I'd suggest to use if( ... MATCHES ...) And read the match from the CMAKE_MATCH_<n> variables.</div><br><div class="gmail_extra"><br><div class="gmail_quote">On Oct 24, 2017 11:16, "Edoardo Pasca" <<a href="mailto:edo.paskino@gmail.com" target="_blank">edo.paskino@gmail.com</a>> wrote:<br type="attribution"><blockquote class="m_2871914098881306712quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Dear all, <div><br></div><div>I'm trying to determine the active conda environment (name and path) at cmake runtime. </div><div><br></div><div>To do that I issue the command</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag">conda env list, which yields lines with the active environment highlighted with an asterisk: something similar to this:</div><div><br></div><div>env1       /path/to/env1</div><div>env2       / path/to/env2</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">env3   *  /path/to/env3<br clear="all"><div><br></div><div>It is a perfect task for a match of REGEX but I cannot get it right and I defaulted to using brute force to achieve my goal.</div><div><br></div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag">My brute force method is </div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">1) splitting the lines by replacing \n with ;</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">2) now that I have a LIST (or I think that is a list) I can run a foreach to see if line-by-line I match the following string(REGEX MATCHALL "(.+)[*](.+)" match ${line})</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag"><br></div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">Now, I'd expect to find in ${match} a list with the captured strings, i.e. env3;/path/to/env3. However that's not the case ${match} contains the whole line. So now I REPLACE "*" with ";" and now I have a almost LIST. Actually I do this:</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag"><div><br></div><div>string(REPLACE "*" ";" ENV_DIR ${match})</div><div>list (APPEND cc "")</div><div>foreach(conda ${ENV_DIR})</div><div>     string(STRIP ${conda} stripped)</div><div>     list(APPEND cc ${stripped})</div><div>endforeach()</div></div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag"><br></div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">Finally I've got my list ${cc} with the name and path of the environment as first and second element.</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag"><br></div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag">The question is, how would I use MATCHALL to achieve my goal (if possible)?</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag"><br></div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag">for the record I attach here the whole script.</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag"><br></div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag">Thanks for your help</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag"><br></div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag">Edo</div><div><br></div><div><br></div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag"><div>execute_process(COMMAND "conda" "env" "list"</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                                  </span>OUTPUT_VARIABLE _CONDA_ENVS</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                                      </span>RESULT_VARIABLE _CONDA_RESULT</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                                    </span>ERROR_VARIABLE _CONDA_ERR)</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                       </span>if(NOT _CONDA_RESULT)</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag"><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                               </span>string(REPLACE "\n" ";" ENV_LIST ${_CONDA_ENVS})</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                             </span>foreach(line ${ENV_LIST})</div><div class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag"><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                           </span>  string(REGEX MATCHALL "(.+)[*](.+)" match ${line})</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                          </span>  if (NOT ${match} EQUAL "")</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                          </span>    string(REPLACE "*" ";" ENV_DIR ${match})</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                               </span>    list (APPEND cc "")</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                              </span>    foreach(conda ${ENV_DIR})</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                          </span>      string(STRIP ${conda} stripped)</div><div>                                       list(APPEND cc ${stripped})</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                            </span>    endforeach()</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                               </span>    list(LENGTH cc Ns)</div><div>                                    if (${Ns} EQUAL 2)</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                          </span>      list(GET cc 0 CONDA_ENVIRONMENT)</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                                </span>      list(GET cc 1 CONDA_ENVIRONMENT_PATH)</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                           </span>    endif()</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                            </span>  endif()</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                               </span>endforeach()</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                     </span>else()</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                           </span>message(FATAL_ERROR "ERROR with conda command " ${_CONDA_ERR})</div><div><span style="white-space:pre-wrap" class="m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125gmail-cye-lm-tag m_2871914098881306712m_1226039665474222125cye-lm-tag">                 </span>endif()</div></div><font color="#888888"><div><br></div><div><br></div>-- <br><div class="m_2871914098881306712m_1226039665474222125gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Edo</div><div>I know you think you understand what you thought I said, but I'm not sure you realize that what you heard is not what I meant (prob. Alan Greenspan)<br>:wq</div></div></div></div></div>
</font></div></div>
<br>--<br>
<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Please keep messages on-topic and check the CMake FAQ at: <a href="http://www.cmake.org/Wiki/CMake_FAQ" rel="noreferrer" target="_blank">http://www.cmake.org/Wiki/CMak<wbr>e_FAQ</a><br>
<br>
Kitware offers various services to support the CMake community. For more information on each offering, please visit:<br>
<br>
CMake Support: <a href="http://cmake.org/cmake/help/support.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/su<wbr>pport.html</a><br>
CMake Consulting: <a href="http://cmake.org/cmake/help/consulting.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/co<wbr>nsulting.html</a><br>
CMake Training Courses: <a href="http://cmake.org/cmake/help/training.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/tr<wbr>aining.html</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/opensou<wbr>rce/opensource.html</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/cmake" rel="noreferrer" target="_blank">http://public.kitware.com/mail<wbr>man/listinfo/cmake</a><br></blockquote></div><br></div></div></div>