[Pythonmac-SIG] making a C extension compatible across OS versions?

has hengist.podd at virgin.net
Thu May 26 15:28:59 CEST 2005


Hi all, please forgive my crappy knowledge of C, etc. in advance... ;)

In updating my osaterminology package to support Tiger, I've added a new function, OSAGetSdef(), to its OSATerminology.so extension [1]. To allow the extension to build on older OSes, I've inserted an #ifdef as shown:

static PyObject *
PyOSA_GetSdef(PyObject* self, PyObject* args)
{
	#ifdef AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER
	...
	err = OSACopyScriptingDefinition(&fsref, 0, &sdef);
	...
	return res;
	#else
	/*
	Return None when sdef is unobtainable.
	Client can then call OSAGetTerminology() instead.
	*/
	Py_INCREF(Py_None);
	return Py_None;
	#endif
}

But now I realise this doesn't help in making a compiled extension work across different OSes, so I obviously need to do something more/else. 

Obviously the extension needs to be built on Tiger to provide sdef support, but what should I do to ensure that, say, applications containing that binary extension will still work OK when run on earlier OSes? For example, should I include both extension builds in the osaterminology package and have it import the appropriate one according to OS version, or is there a better/more elegant/official way of doing it?

Many thanks,

has

[1] This is a modified version of OSATerminology.so that's bundled in the osaterminology package, btw; I don't use the original copy in lib-dynload as it's buggy.
-- 
http://freespace.virgin.net/hamish.sanderson/


More information about the Pythonmac-SIG mailing list