2011/9/21 D. Barbier <bou...@gmail.com> > On 2011/9/21 Thomas Paviot wrote: > > 2011/9/21 D. Barbier <bou...@gmail.com> > >> > >> On 2011/9/20 Thomas Paviot wrote: > >> > 2011/9/20 D. Barbier wrote > >> [...] > >> >> but get now a segmentation fault: > >> >> testHash (wrapper_features_unittest.TestWrapperFeatures) ... Test: > >> >> __hash__ overloading > >> >> Segmentation fault > >> >> > >> >> More precisely: > >> >> $ python > >> >> Python 2.6.7 (r267:88850, Aug 3 2011, 11:33:52) > >> >> [GCC 4.6.1] on linux2 > >> >> Type "help", "copyright", "credits" or "license" for more > information. > >> >> >>> import OCC.Standard > >> >> >>> s = OCC.Standard.Standard_Transient() > >> >> >>> hash1_s = s.__hash__() > >> >> >>> hash2_s = s.HashCode(pow(2,31)-1) > >> >> Segmentation fault > >> [...] > >> > When compiling pythonocc, you must pass -D__PYTHONOCCOCC_MAXINT__ > >> > integer. > >> > It's equal to 2^32-1 on 32bit platforms, 2^64-1 on 64bit. This is > >> > computed > >> > from the file environment.py > >> > > >> > ( > https://github.com/tpaviot/pythonocc/blob/master/src/wrapper/environment.py > ) > >> > called when compiling pythonocc from the setup.py script. > >> > >> Hmmm, I am confused, this is hardcoded to 2^31-1 for 32 and 64 bits: > >> > >> # Define HASHCODE_MAXINT. Even on 64 bits systems, HashCode method > >> require a 32 bits Standard_Integer > >> # > >> HASHCODE_MAXINT = pow(2,31)-1 > > > > You're right. This hack is a bit old, and I didn't remember exactly the > > reasons for creating this __PYTHONOCC_MAXINT__. Anyway, it is unuseful > since > > the value passed is always the same and independant from the platform (in > > all cases, pow(2,31)-1). It can be hardcoded into the SWIG file by using > > return $self->HashCode(2147483647). > > > > I pushed tp/__hash_-overloading to fix this issue. You should be able to > use > > your CMakeList.txt file as is (but you will have to recompile all the > > modules). > > Sorry I do not understand your reasoning; this patch does nothing, >
False. This patch removes the unnecessary __PYTHONOCC_MAXINT__. > since __PYTHONOCC_MAXINT__ is defined as 2147483647 by > environment.py. Anyway I tried your branch, and __hash__ overloading > still segfaults :( > Did you use cmake or the distutils base setup.py script? I suggest you use the latter, since the cmake builder was not tested for a while. If it stills segfault, I'll open an issue on the github issue tracker. I do not have any idea about what's going on your machine and I will need more information (python version, swig version, gcc version). In order to test only the Standard module, you can speed up the compilation process by commenting out some module names in the file named Modules.py: they will be skipped. > > Denis > Thomas
_______________________________________________ Pythonocc-users mailing list Pythonocc-users@gna.org https://mail.gna.org/listinfo/pythonocc-users