A user reports problems with one of our extensions when running the
intel compiled extension on ppc and vice versa. He is building the
extension as a universal binary. Although the intel compiled version
runs fine it displays a known bug when run on a ppc.
It appears we have an endianness dependency which is statically compiled
into the binaries.
One proposed fix is to make the endian variable code dynamically change
at run time. However, I assume that under the hood the extension is
being built in multiple ways so our static definition of endianness in a
pre-processor macro needs to be dynamic.
Is there a way to get distutils to pass different macros/definitions to
the separate compilations.
Failing that does anyone know off hand exactly how this problem is
supposed to be handled? Ie if there are multiple compiles what
distinguishes them. My understanding is that up to 4 different binaries
are being squashed together in these universal binaries.
--
Robin Becker 14 1671
One proposed fix is to make the endian variable code dynamically change
at run time.
I would advise against that. Endianness depdency should be resolved at
compile time, with appropriate conditional compilation. Endianness won't
change at run-time (and no, not even for a fat binary - the x86 code
will always "see" the same endianness, and so will the ppc code).
Is there a way to get distutils to pass different macros/definitions to
the separate compilations.
No. distutils only invokes the compiler a single time, not multiple
times, for a specific universal object file. The gcc driver then invokes
different cc1 backends repeatedly.
Failing that does anyone know off hand exactly how this problem is
supposed to be handled? Ie if there are multiple compiles what
distinguishes them. My understanding is that up to 4 different binaries
are being squashed together in these universal binaries.
In the specific case, just use the WORDS_BIGENDIAN macro defined in
pyconfig.h; it will be defined if the target is bigendian, and
undefined otherwise. In the case of a universal build, it will be
undefined in the x86 compiler invocation, and defined in the ppc
invocation.
If you are curious as to how it arranges that, read the source.
Regards,
Martin
Robin Becker wrote:
A user reports problems with one of our extensions when running the
intel compiled extension on ppc and vice versa. He is building the
extension as a universal binary. Although the intel compiled version
runs fine it displays a known bug when run on a ppc.
Have you reported the problem at http://bugs.python.org/? A minimal
example could help us to fix the problem.
Christian
>A user reports problems with one of our extensions when running the
>intel compiled extension on ppc and vice versa. He is building the extension as a universal binary. Although the intel compiled version runs fine it displays a known bug when run on a ppc.
Have you reported the problem at http://bugs.python.org/? A minimal
example could help us to fix the problem.
At first, I also thought that Robin suggested that there is a problem
with Python. Upon re-reading, I now believe he rather sees the bug
in the reportlabs code, and is asking for an approach to solve it there.
Regards,
Martin
Martin v. Löwis wrote:
>>A user reports problems with one of our extensions when running the intel compiled extension on ppc and vice versa. He is building the extension as a universal binary. Although the intel compiled version runs fine it displays a known bug when run on a ppc.
Have you reported the problem at http://bugs.python.org/? A minimal example could help us to fix the problem.
At first, I also thought that Robin suggested that there is a problem
with Python. Upon re-reading, I now believe he rather sees the bug
in the reportlabs code, and is asking for an approach to solve it there. .....
Yes that's right. Unfortunately this problem doesn't arise in the python
interface, but in libart_lgpl which we depend on. I will look at the
pyconfig.h code to see how our definition should be put into libart's .h
config file. Presumably I can then remove the calculated definition we
have in our setup.py script or at least override it in the right way.
PIL may also have a similar problem as the 1.1.6 setup.py script also
defines WORDS_BIGENDIAN like this
if struct.unpack(" h", "\0\1")[0] == 1:
defs.append(("W ORDS_BIGENDIAN" , None))
probably I borrowed/stole this as we have something very similar in our
setup.py.
--
Robin Becker
Martin v. Löwis wrote:
At first, I also thought that Robin suggested that there is a problem
with Python. Upon re-reading, I now believe he rather sees the bug
in the reportlabs code, and is asking for an approach to solve it there.
I saw your posting after I sent mine. The gmane web interface is slow
and sluggish today.
The macro WORDS_BIGENDIAN isn't mentioned in the docs. The docs sure
need some extra information how to create universal binaries and how to
write endian safe C code. I'm going to create a GHOP task.
Christian
Martin v. Löwis wrote:
..........
>
In the specific case, just use the WORDS_BIGENDIAN macro defined in
pyconfig.h; it will be defined if the target is bigendian, and
undefined otherwise. In the case of a universal build, it will be
undefined in the x86 compiler invocation, and defined in the ppc
invocation.
If you are curious as to how it arranges that, read the source.
.......
OK I read the source and am slightly puzzled by the code in
pyconfig.h.in which reads
#ifdef __BIG_ENDIAN__
#define WORDS_BIGENDIAN 1
#else
#ifndef __LITTLE_ENDIAN __
#undef WORDS_BIGENDIAN
#endif
#endif
I'm puzzled why WORDS_BIGENDIAN is undefined if both __BIG_ENDIAN__ and
__LITTLE_ENDIAN __ are undefined. Surely in that case WORDS_BIGENDIAN
should be left alone (if it is already defined). If there's a compiler
for a bigendian architecture which doesn't define the gcc macros the we
seem to get the wrong result.
--
Robin Becker
#ifdef __BIG_ENDIAN__
#define WORDS_BIGENDIAN 1
#else
#ifndef __LITTLE_ENDIAN __
#undef WORDS_BIGENDIAN
#endif
#endif
I'm puzzled why WORDS_BIGENDIAN is undefined if both __BIG_ENDIAN__ and
__LITTLE_ENDIAN __ are undefined. Surely in that case WORDS_BIGENDIAN
should be left alone (if it is already defined). If there's a compiler
for a bigendian architecture which doesn't define the gcc macros the we
seem to get the wrong result.
No. pyconfig.h.in gets processed by configure into pyconfig.h; configure
replaces all #undef lines with appropriate #define lines if the macro
got define in configure. The autoconf macro AC_C_BIGENDIAN performs
a configure-time check. So
- if the compiler either defines __BIG_ENDIAN__ or __LITTLE_ENDIAN __,
that is taken for granted.
- otherwise, the configure-time value is used
On your normal big-endian compiler (e.g. SPARC), it's the
configure-time value that makes WORDS_BIGENDIAN defined.
HTH,
Martin
PIL may also have a similar problem as the 1.1.6 setup.py script also
defines WORDS_BIGENDIAN like this
if struct.unpack(" h", "\0\1")[0] == 1:
defs.append(("W ORDS_BIGENDIAN" , None))
probably I borrowed/stole this as we have something very similar in our
setup.py.
All such checks are broken for fat binaries. Fat binaries essentially
are a form of cross-compilation, and in cross-compilation, thou shalt
not infer target system properties by looking at the host system.
(IOW, autoconf is, in principle, also broken for fat binaries. Indeed,
although the current solution for WORDS_BIGENDIAN is good for ppc
vs. x86, many of the other configure-time detected properties are
incorrect for ppc vs. ppc64 or x86 vs. amd64, such as SIZEOF_LONG)
Regards,
Martin
Martin v. Löwis wrote:
........
>I'm puzzled why WORDS_BIGENDIAN is undefined if both __BIG_ENDIAN__ and __LITTLE_ENDIA N__ are undefined. Surely in that case WORDS_BIGENDIAN should be left alone (if it is already defined). If there's a compiler for a bigendian architecture which doesn't define the gcc macros the we seem to get the wrong result.
No. pyconfig.h.in gets processed by configure into pyconfig.h; configure
replaces all #undef lines with appropriate #define lines if the macro
got define in configure. The autoconf macro AC_C_BIGENDIAN performs
a configure-time check. So
>
- if the compiler either defines __BIG_ENDIAN__ or __LITTLE_ENDIAN __,
that is taken for granted.
- otherwise, the configure-time value is used
On your normal big-endian compiler (e.g. SPARC), it's the
configure-time value that makes WORDS_BIGENDIAN defined.
.......
OK I need to use something a bit more complex then; I figure this should
work
#if defined(__BIG_E NDIAN__) || defined(__LITTL E_ENDIAN__)
# ifdef __BIG_ENDIAN__
# ifdef WORDS_BIGENDIAN
# undef WORDS_BIGENDIAN
# endif
# define WORDS_BIGENDIAN 1
# else
# ifdef __LITTLE_ENDIAN __
# ifdef WORDS_BIGENDIAN
# undef WORDS_BIGENDIAN
# endif
# endif
# endif
#endif
--
Robin Becker This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Isaac Jones |
last post by:
Hello Python Community. I bring greetings from the Haskell community
(http://www.haskell.org) ;)
There has been a lot of discussion of late about creating a
grand-unified build & distribution system for "3rd party" Haskell
libraries (those not distributed with the compilers). Python's
Distutils has come up a few times. The Haskell Library Infrastructure
Project's web page is just a wiki page which can be found here:...
|
by: Phil Hornby |
last post by:
I have tried posting this to the distutils SIG list but had no response so I
am hoping the general list can help...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Okay, I love what I can do with distutils in windows - i.e. create a binary
distribution of a module/package/etc
But I have a few questions:
If I write a script to generate all the details of the distribution - files
|
by: Mathieu Malaterre |
last post by:
Hello,
I thought this would be easy but I guess I didn't get the distutil
feeling. I am trying to write a setup for install my package but I don't
understand how to do that.
organisation:
setup.py
/bin/
|
by: Colin J. Williams |
last post by:
The distutils download page has:
--------------------------------------------------------
Current stable release
The current stable release is Distutils 1.0.2; you can download it as:
* Distutils-1.0.2.tar.gz (source distribution) (233k)
* Distutils-1.0.2.zip (source distribution) (274k)
* Distutils-1.0.2.win32.exe (Windows installer) (187k)
|
by: Terry Hancock |
last post by:
Some time ago, I got the idea that I wanted to build image
resources from vector graphic originals, instead of
marshalling hundreds of tiny little icon images by hand.
I wrote "BuildImage" to do this for me, and so far, it
works very well, so I'm trying to make it easier to use
and available to more developers.
There is a brief (and somewhat dated) tutorial explaining
what BuildImage itself does at:
| |
by: Maarten Sneep |
last post by:
I'm trying to build PyBison on Mac OS X, and I'm running into some
problems with the distutils.
Just for starters: PyBison requires Pyrex. This is not a problem,
and Pyrex seems to work without problems, at least the primes sample
module shows a nice 25 to 30 fold speed increase over the pure python
version.
I used the distutils to create the module from the primes.pyx sample,
following the setup.py from the PyBison distrubution:
|
by: Paminu |
last post by:
In math this expression:
(a < b) && (b < c)
would be described as:
a < b < c
But why is it that in C these two expressions evaluate to something
different for the same values of a, b and c?
|
by: seberino |
last post by:
I have been using distuils for a while and was wondering when
Python Eggs (new project) is better?
So basically Python Eggs precompiles and compresses
binaries for you so you just have to load it to run
your app?
Chris
|
by: Immortalist |
last post by:
Various aquisition devices that guide learning along particular
pathways towards human biases. And as E.O. Wilson might say mental
development appears to be genetically constrained.
(1) Language Aquisition Device
(2) Color Aqusition Device
(3) Sound Aquistion Device
(4) Smell Aquisition Device
(5) Touch Aquisition Device
(6) Art Aquisition Device
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
| |
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |