[PyKDE] Re: sip-4 vs sip-3

Gerard Vermeulen gvermeul at grenoble.cnrs.fr
Mon Dec 1 12:45:01 GMT 2003


On Mon, 1 Dec 2003 07:50:52 +0000
Phil Thompson <phil at riverbankcomputing.co.uk> wrote:

> On Monday 01 December 2003 7:34 am, Gerard Vermeulen wrote:
> > Phil,
> >
> > In developing PyQwt, I use two tricks to minimize the build time after
> > fixing bugs or adding new methods:
> > (1) 'smart' copying of sip's output from a buffer directory to the source
> >     directory (only copy when two sip output files differ below the time
> > stamp comment at the top).
> > (2) use of ccache
> >
> > In this respect sip-4 is a step back compared to sip-3.  With sip-4,
> > Addition of a single method to a single sip file leads always to a complete
> > rebuild of PyQwt. In addition, ccache is far less efficient with sip-4 than
> > with sip-3.
> >
> > One of the reasons (I hope the only one) is the fact that sip-4 is
> > generating names as sipNm__qwt_5151 instead of the old symbolic
> > sipName_QwtWheel. Presumably adding a new method, propagates different
> > sipNames into all the sip-generated *.{cpp,h} files.
> >
> > Could it be possible to go back to the symbolic names, or use names
> > like sipNm_ModuleName_ClassNumber_AttributeNumber to minimize changes
> > in the generated source code?
> 
> I don't think that would make any difference - a name is a name whether it's 
> symbolic or based on a number.
>
That is true for humans, but not for all computer programs.

The symbolic names in sip-v3 do not change if a new method gets added to
a sip-file. In sip-v4, a new method will produce a number-based name
that gets added somewhere in the middle of a long list.  Names for class
methods later in the list will become different.

Characteristics of the sets of *.{cpp,h} generated by  sip-v3 and sip-v4,
starting from two sets of sip files with as only difference the addition of
a single method to a single class, are:
sip-v3: only a few files are different. Those are the cmodule file and the file
        corresponding to the changed classes. All the other files are
	essentially the same (except for the time stamp header).
sip-v4: (almost?) all files are different, because the names based on a number
        scheme have been changed. 
> 
> The new build system generates Makefiles that has a very simplistic vew of 
> dependencies - I suspect this is the cause.
>
I am still using my distutils tools (with smart copy, the ccache program,
automatic production of an *.exe installer on Windows eventually, very
easy to adapt for wrapping other libs).

With sip-v4, my smart copy scheme only works for bug fixes. Not for addition
or removal of class members, because a lot of sipNames may have been changed
between the two sip runs (before and after the addition or removal of members).
Mixing sip-4's output of two such runs will surely lead to disaster. With sip-3,
this is no problem.  

Consequently, after an addition or removal of a class member in a single
sip file, the smart copy scheme will lead to two files to recompile with
sip-3 but to almost all files with sip-4. 

The ccache program calculates a hash for each input file to reduce g++'s
workload, therefore it also suffers from the (extraneous) renaming.

I understand that module size may be a reason for names like
sipNm_ModuleName_Number instead of the symbolic names, but from my point of
view a scheme like sipNm_ModuleName_ClassNumber_AttributeNumber would be less
likely to interfere with my tricks to reduce the build time.    

Gerard




More information about the PyQt mailing list