<div dir="ltr">I will probably tackle this as two phases:<div><br></div><div>Phase 1:</div><div>* Python script modernization (the python swig wrapper generation)</div><div>* Move Xcode onto it.</div><div><br></div><div>Phase 2:</div><div>* The maintainer-mode, static Python binding generation changes for cmake and Xcode.</div><div><br></div><div>I want to make sure we have proven, still-functional Python from the new Python script before we move forward.  I will also probably turn on the Green Dragon OS X public builder's test running at this stage so we can also see that.</div><div><br></div><div>And I want to work out any issues with the current script logic and what OS X was doing before shifting any of this around.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 13, 2015 at 9:02 AM, Todd Fiala <span dir="ltr"><<a href="mailto:todd.fiala@gmail.com" target="_blank">todd.fiala@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi all,<div><br></div><div>I'd like to do a few things with our swig generation and handling:</div><div><br></div><div>* Create a maintainer-mode style setup where the swig Python bindings are generated and checked into the repo (I'll call it the static python binding).</div><div><br></div><div>This will be used by default, removing the need for most people and all builders/bots from having swig on their system just for lldb.  In the event that Windows needs a different version (e.g. for, say, Python 3.5 support that is incompatible with the swig-1.3.40-generated bindings), we can support multiple source bindings, or we can post process the swig-1.3.x generated bindings.</div><div><br></div><div>We'll keep them by swig-{swig-major}-{swig-minor}.  Internally over at Apple, we will stick with the swig-1.x bindings.  I don't think we will care about the dot release (1.3.40 vs. 1.3.39, for example).  We'll just make sure to use the latest for a {swig-major}.{swig-minor}.  As always, SB API changes generated by swig need to remain swig-1.3 compatible (i.e. swig-1.3 must be capable of generating usable Python wrappers).</div><div><br></div><div>Ideally we don't need more than one set of bindings so we can avoid needing to generate multiple ones when we do it.</div><div><br></div><div><br></div><div>* Add an explicit Python binding generation step.</div><div><br></div><div>This would only be used by those who are touching the bindings (adding SB API or adjusting the documentation of existing SB API).  In the event that we need two bindings, we may just need a handshake that says "okay, we'll take care of the swig 1.3 bindings, and {somebody who needs the other binding} generates it for the other."  As SBAPI is additive only, this should generally be fine as the worst case I can think of that would happen would be failure to see new SBAPI in Python for a very brief time.  Since maintainers will be writing Python tests to check their new SBAPIs, failure to do the explicit generation step will be immediately obvious as a test failure.  (The challenge here will likely be the swig 1.3.x requirement).</div><div><br></div><div>If generating and testing new binding content with the right swig (i.e. swig 1.3.x) becomes a real issue, we may be able to support a "please use my local swig, whatever it is, but don't check in the static binding), with a handshake that says "somebody with swig 1.3, please generate the modified binding and check in).  We'll see if this becomes an issue.  I don't see this as insurmountable.</div><div><br></div><div><br></div><div>* Clean up the swig generation scripts</div><div><br></div><div>These look to have been implemented as direct ports of the older OS X style bash scripts.  This Python script is very much the essence of using the paradigms of one language in another, and being the worse for it.  It implements features that are already present in the standard Python lib, and is more verbose than it needs to be.</div><div><br></div><div>Also, it is likely the script needs to be broken out into a few parts.  The scripts don't just generate the python binding using swig, they also setup (for OS X) some packaging and other bits.  Right now none of that is clearly broken out.  When we move to an explicit binding generation mode, this does need to be broken out better.</div><div><br></div><div><br></div><div>* Get OS X Xcode build using the same bindings machinery as others.</div><div><br></div><div>I tried this a while back (having Xcode adopt the Python-based swig wrapper handling code), but gave up after hitting a few bugs where the translated behavior was incorrect for Xcode.  I will move over to adopting this on Xcode if possible while going through these changes.</div><div><br></div><div>The primary goal here is to remove the requirement of having swig on the system (e.g. for builders and most developers), shifting that burden a bit more to those who actually modify the Python binding.<br></div><div><br></div><div>As a potential added benefit, this opens us up to easier modification of that binding generation step, which may prove to be useful later.</div><div><br></div><div>Let me know if you have any feedback before I dive into this.<span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><div><br></div><div><div><div dir="ltr">-Todd</div></div>
</div></font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">-Todd</div></div>
</div>