<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
<font class="Apple-style-span" face="Monaco">Daniel,</font><div><font class="Apple-style-span" face="Monaco">       I read this to mean that pretty much everything you want is already</font></div><div><font class="Apple-style-span" face="Monaco">in CMakeLists.txt, but you don't like its style/syntax so you are re-inventing</font></div><div><font class="Apple-style-span" face="Monaco">the wheel rather than extract the information that is already there.</font></div><div><font class="Apple-style-span" face="Monaco"><br></font></div><div><font class="Apple-style-span" face="Monaco">how about writing a c++ program (rather than perl or python) to extract</font></div><div><font class="Apple-style-span" face="Monaco">the information from CMakeList.txt files, rather than creating yet-another</font></div><div><font class="Apple-style-span" face="Monaco">specification language requiring yet more processing tools.</font></div><div><span class="Apple-style-span" style="font-family: Monaco; "><br></span></div><div><font class="Apple-style-span" face="Monaco"><br></font></div><div>-Peter Lawrence.</div><div><br></div><div><br><div><div>On Oct 28, 2011, at 7:10 AM, <a href="mailto:llvmdev-request@cs.uiuc.edu">llvmdev-request@cs.uiuc.edu</a> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco">What This Means For Jane "LLVM Developer" Doe</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco">---------------------------------------------</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco">In practice, this means:</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space"> </span>* LLVM requires Python to build.</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space"> </span>* When you add a file to LLVM, you will need to edit LLVMBuild.txt instead of</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>CMakeLists.txt, which will be in a slightly different, but otherwise totally</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>obvious format.</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>If you forget to do this, your file will not be built (which will most likely</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>cause a link error eventually). This is better than it being built by Make,</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>but causing CMake build failures when you check in.</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space"> </span>* When you add a new library requirement to an existing component, you will be</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>required to edit LLVMBuild.txt instead of CMakeLists.txt, which will be in a</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>slightly different, but otherwise totally obvious (hopefully) format.</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>If you forget to do this, you will either get a link error or a test</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>failure. This is better than library you need transparently getting linked in</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>(with make) because it forces you to think about whether you actually should</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>be adding that dependency.</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>The goal is that this also ensures that if LLVM links and passes tests on</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>your system, then it should for everyone else as well.</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space"> </span>* Developers not actively touching the build system should never need to touch</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space">  </span>a Makefile or a CMake file.</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco">Overall, I believe this should be a quality of life improvement for the</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco">developer community. The only downside is having to deal with a new non-standard</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco">LLVM specific format, but I plan to solve this through documentation.</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco">Comments?</font></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><br></p> <p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Monaco" size="3" style="font: 12.0px Monaco"><span class="Apple-converted-space"> </span>- Daniel</font></p> </blockquote></div><br></div></body></html>