Compiling informxidb-1.3 on python2.2?

M

Mike S.

Hello,

Has anyone had success compiling the informixdb-1.3 module under
python 2.2? It seems the absense of makefile.pre.in in python 2.2
causes the break under py2.2. Is there an easy way around this. I've
heard rumors of a manual method, but have been unable to track down
details. Any help is very much appreciated.

Thanks in advance,
Mike
 
R

Robin Munn

Mike S. said:
Hello,

Has anyone had success compiling the informixdb-1.3 module under
python 2.2? It seems the absense of makefile.pre.in in python 2.2
causes the break under py2.2. Is there an easy way around this. I've
heard rumors of a manual method, but have been unable to track down
details. Any help is very much appreciated.

Thanks in advance,
Mike

Here's the step-by-step notes I wrote for myself when I had to do
exactly that back in May:

Steps in installing the informixdb module:

1. Download informixdb source from
http://starship.python.net/crew/sturner/informixdb.html
2. Untar, run configure
3. Edit ext/Makefile: change CFLAGS (line 100) to include
-I${INFORMIXDIR}/incl/esql
4. Cd into ext directory
5. Run "esql _informix.ec" to generate _informix.c file
6. Cd back into parent directory
7. Run make
8. Copy informixdb.py and ext/_informixdb.so into
/usr/lib/python2.2/site-packages/

I hope this helps. I did this install on a Red Hat machine that had the
Informix SDK installed, so I had the esql command available. If you
don't have esql available, then I'm not sure what you'll need to do.

Good luck!
 
M

Mike S.

2. Untar, run configure
Unfortunately, the trouble starts here at step 2. By any chance do
you have both python1.5 and python2.2 installed?

root@pe informixdb-1.3]# ./configure
loading cache ./config.cache
checking whether make sets ${MAKE}... (cached) yes
checking for python... (cached) /usr/bin/python
checking for --with-informix... /opt/informix
checking for esql... (cached) /opt/informix/bin/esql
checking for --enable-thread... no
checking for --enable-shared... yes
creating ./config.status
creating Makefile
creating ext/srcdir
creating ext/Setup
cp: cannot stat `/usr/lib/python1.5/config/Makefile.pre.in': No such
file or directory
creating ext/Makefile
make: ./Makefile.pre.in: No such file or directory
make: *** No rule to make target `./Makefile.pre.in'. Stop.
[root@pe informixdb-1.3]#
:
 
M

Mike S.

Well I managed to get the configure script to run:

../configure
loading cache ./config.cache
checking whether make sets ${MAKE}... (cached) yes
checking for python... (cached) /usr/bin/python
checking for --with-informix... /opt/informix
checking for esql... (cached) /opt/informix/bin/esql
checking for --enable-thread... no
checking for --enable-shared... yes
creating ./config.status
creating Makefile
creating ext/srcdir
creating ext/Setup
creating ext/Makefile

But got a ton of errors when trying step 5 in Robin's list:

_informixdb.ec:48:20: Python.h: No such file or directory
_informixdb.ec:49:24: longobject.h: No such file or directory
In file included from _informixdb.ec:50:
dbi.h:13: parse error before '*' token
dbi.h:14: parse error before '*' token
dbi.h:15: parse error before '*' token
dbi.h:18: parse error before '*' token
dbi.h:18: parse error before '*' token
dbi.h:18: warning: data definition has no type or storage class
dbi.h:19: parse error before '*' token
dbi.h:19: parse error before '*' token
dbi.h:19: warning: data definition has no type or storage class
dbi.h:20: parse error before '*' token
dbi.h:20: parse error before '*' token
dbi.h:20: warning: data definition has no type or storage class
dbi.h:21: parse error before '*' token
dbi.h:21: parse error before '*' token
dbi.h:21: warning: data definition has no type or storage class
dbi.h:35: parse error before '*' token
dbi.h:35: warning: data definition has no type or storage class


Make sense to anyone??


2. Untar, run configure
Unfortunately, the trouble starts here at step 2. By any chance do
you have both python1.5 and python2.2 installed?

root@pe informixdb-1.3]# ./configure
loading cache ./config.cache
checking whether make sets ${MAKE}... (cached) yes
checking for python... (cached) /usr/bin/python
checking for --with-informix... /opt/informix
checking for esql... (cached) /opt/informix/bin/esql
checking for --enable-thread... no
checking for --enable-shared... yes
creating ./config.status
creating Makefile
creating ext/srcdir
creating ext/Setup
cp: cannot stat `/usr/lib/python1.5/config/Makefile.pre.in': No such
file or directory
creating ext/Makefile
make: ./Makefile.pre.in: No such file or directory
make: *** No rule to make target `./Makefile.pre.in'. Stop.
[root@pe informixdb-1.3]#
:

Robin Munn said:
Here's the step-by-step notes I wrote for myself when I had to do
exactly that back in May:

Steps in installing the informixdb module:

1. Download informixdb source from
http://starship.python.net/crew/sturner/informixdb.html
2. Untar, run configure
3. Edit ext/Makefile: change CFLAGS (line 100) to include
-I${INFORMIXDIR}/incl/esql
4. Cd into ext directory
5. Run "esql _informix.ec" to generate _informix.c file
6. Cd back into parent directory
7. Run make
8. Copy informixdb.py and ext/_informixdb.so into
/usr/lib/python2.2/site-packages/

I hope this helps. I did this install on a Red Hat machine that had the
Informix SDK installed, so I had the esql command available. If you
don't have esql available, then I'm not sure what you'll need to do.

Good luck!
 
W

webmaster

I'm trying to compile it in order to use it on Zope 2.6.1 (python
2.1.3) on a RedHat 7.3, with Informix SDK csdk280_UC21LIN. Is it
possible at least ?

I've find a few infos about it in the ng, and here's what I dit :

cd $INFORMIXDIR/lib/esql
mkdir tmp
cp libifgen.so orig_libifgen.so
cp libifgen.a tmp
cd tmp
ar x libifgen.a
gcc -shared -o libifgen.so *.o
cp libifgen.so ..
cd ..
rm -rf tmp
su - root
ldconfig

In informixdb-1.3 sources directory:
../configure
Edit ext/Makefile: change CFLAGS (line 100) to include
-I${INFORMIXDIR}/incl/esql
esql ext/_informix.ec"

and here's what I get :

/usr/informix/lib/esql/libifos.so: the use of `mktemp' is dangerous,
better use `mkstemp'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../crt1.o: In function
`_start':
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../crt1.o(.text+0x18):
undefined reference to `main'
/tmp/cc3c2Xz6.o: In function `ifxdbCursor':
/tmp/cc3c2Xz6.o(.text+0x346): undefined reference to `PyObject_Init'
/tmp/cc3c2Xz6.o: In function `ifxdbCurClose':
/tmp/cc3c2Xz6.o(.text+0x5bc): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x5c1): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o: In function `ifxdbPrintError':
/tmp/cc3c2Xz6.o(.text+0x753): undefined reference to `PyErr_SetString'
/tmp/cc3c2Xz6.o: In function `ifxdbClose':
/tmp/cc3c2Xz6.o(.text+0x7e2): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x7e7): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o: In function `connectionGetAttr':
/tmp/cc3c2Xz6.o(.text+0x833): undefined reference to `Py_FindMethod'
/tmp/cc3c2Xz6.o: In function `ifxdbCommit':
/tmp/cc3c2Xz6.o(.text+0x90e): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x913): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o: In function `ifxdbRollback':
/tmp/cc3c2Xz6.o(.text+0x9aa): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x9af): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o: In function `ibindRaw':
/tmp/cc3c2Xz6.o(.text+0xbb5): undefined reference to `dbiValue'
/tmp/cc3c2Xz6.o(.text+0xbc8): undefined reference to `PyObject_Str'
/tmp/cc3c2Xz6.o: In function `ibindDate':
/tmp/cc3c2Xz6.o(.text+0xcb5): undefined reference to `dbiValue'
/tmp/cc3c2Xz6.o(.text+0xcc0): undefined reference to `PyNumber_Long'
/tmp/cc3c2Xz6.o(.text+0xcdd): undefined reference to `PyLong_AsLong'
/tmp/cc3c2Xz6.o(.text+0xd93): undefined reference to `PyErr_SetString'
/tmp/cc3c2Xz6.o: In function `ibindString':
/tmp/cc3c2Xz6.o(.text+0xdb9): undefined reference to `PyObject_Str'
/tmp/cc3c2Xz6.o(.text+0xe36): undefined reference to `PyLong_Type'
/tmp/cc3c2Xz6.o: In function `ibindFcn':
/tmp/cc3c2Xz6.o(.text+0xeb5): undefined reference to `dbiIsRaw'
/tmp/cc3c2Xz6.o(.text+0xed3): undefined reference to `dbiIsDate'
/tmp/cc3c2Xz6.o(.text+0xeeb): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o: In function `bindInput':
/tmp/cc3c2Xz6.o(.text+0x10b4): undefined reference to `PyObject_Size'
/tmp/cc3c2Xz6.o(.text+0x1112): undefined reference to
`PySequence_GetItem'
/tmp/cc3c2Xz6.o(.text+0x1187): undefined reference to
`PyErr_SetString'
/tmp/cc3c2Xz6.o: In function `bindOutput':
/tmp/cc3c2Xz6.o(.text+0x1259): undefined reference to `PyTuple_New'
/tmp/cc3c2Xz6.o(.text+0x12d5): undefined reference to `Py_BuildValue'
/tmp/cc3c2Xz6.o: In function `ifxdbCurExec':
/tmp/cc3c2Xz6.o(.text+0x1538): undefined reference to
`PyArg_ParseTuple'
/tmp/cc3c2Xz6.o(.text+0x1828): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x182d): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x1839): undefined reference to
`PyEval_SaveThread'
/tmp/cc3c2Xz6.o(.text+0x187d): undefined reference to
`PyEval_RestoreThread'
/tmp/cc3c2Xz6.o(.text+0x18b3): undefined reference to `Py_BuildValue'
/tmp/cc3c2Xz6.o: In function `doCopy':
/tmp/cc3c2Xz6.o(.text+0x1a7e): undefined reference to `PyInt_FromLong'
/tmp/cc3c2Xz6.o(.text+0x1a87): undefined reference to `dbiMakeDate'
/tmp/cc3c2Xz6.o(.text+0x1aa4): undefined reference to `PyInt_FromLong'
/tmp/cc3c2Xz6.o(.text+0x1aad): undefined reference to `dbiMakeDate'
/tmp/cc3c2Xz6.o(.text+0x1b08): undefined reference to `Py_BuildValue'
/tmp/cc3c2Xz6.o(.text+0x1b20): undefined reference to
`PyFloat_FromDouble'
/tmp/cc3c2Xz6.o(.text+0x1b3c): undefined reference to
`PyFloat_FromDouble'
/tmp/cc3c2Xz6.o(.text+0x1b64): undefined reference to
`PyFloat_FromDouble'
/tmp/cc3c2Xz6.o(.text+0x1b7b): undefined reference to `PyInt_FromLong'
/tmp/cc3c2Xz6.o(.text+0x1b8d): undefined reference to `PyInt_FromLong'
/tmp/cc3c2Xz6.o(.text+0x1bba): undefined reference to
`PyString_FromStringAndSize'
/tmp/cc3c2Xz6.o(.text+0x1bc3): undefined reference to `dbiMakeRaw'
/tmp/cc3c2Xz6.o(.text+0x1bce): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x1bd3): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o: In function `processOutput':
/tmp/cc3c2Xz6.o(.text+0x1bf0): undefined reference to `PyTuple_New'
/tmp/cc3c2Xz6.o(.text+0x1c38): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o: In function `ifxdbCurFetchOne':
/tmp/cc3c2Xz6.o(.text+0x1cb7): undefined reference to
`PyEval_SaveThread'
/tmp/cc3c2Xz6.o(.text+0x1cf8): undefined reference to
`PyEval_RestoreThread'
/tmp/cc3c2Xz6.o(.text+0x1d20): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x1d25): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o: In function `ifxdbFetchCounted':
/tmp/cc3c2Xz6.o(.text+0x1d88): undefined reference to `PyList_New'
/tmp/cc3c2Xz6.o(.text+0x1df3): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x1e2e): undefined reference to `PyList_Append'
/tmp/cc3c2Xz6.o: In function `ifxdbCurFetchMany':
/tmp/cc3c2Xz6.o(.text+0x1ed5): undefined reference to
`PyArg_ParseTuple'
/tmp/cc3c2Xz6.o: In function `ifxdbCurSetInputSizes':
/tmp/cc3c2Xz6.o(.text+0x1f29): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x1f2e): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o: In function `ifxdbCurSetOutputSize':
/tmp/cc3c2Xz6.o(.text+0x1f39): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x1f3e): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o: In function `cursorGetAttr':
/tmp/cc3c2Xz6.o(.text+0x1f82): undefined reference to `_Py_NoneStruct'
/tmp/cc3c2Xz6.o(.text+0x1f87): more undefined references to
`_Py_NoneStruct' follow
/tmp/cc3c2Xz6.o: In function `cursorGetAttr':
/tmp/cc3c2Xz6.o(.text+0x1fcb): undefined reference to `Py_FindMethod'
/tmp/cc3c2Xz6.o: In function `ifxdbLogon':
/tmp/cc3c2Xz6.o(.text+0x1ff5): undefined reference to
`PyArg_ParseTuple'
/tmp/cc3c2Xz6.o(.text+0x2022): undefined reference to `PyObject_Init'
/tmp/cc3c2Xz6.o(.text+0x205a): undefined reference to
`PyEval_SaveThread'
/tmp/cc3c2Xz6.o(.text+0x2083): undefined reference to
`PyEval_RestoreThread'
/tmp/cc3c2Xz6.o: In function `init_informixdb':
/tmp/cc3c2Xz6.o(.text+0x214d): undefined reference to `Py_InitModule4'
/tmp/cc3c2Xz6.o(.text+0x2167): undefined reference to `Py_BuildValue'
/tmp/cc3c2Xz6.o(.text+0x2187): undefined reference to
`PyModule_GetDict'
/tmp/cc3c2Xz6.o(.text+0x2192): undefined reference to
`PyDict_SetItemString'
/tmp/cc3c2Xz6.o(.text+0x21cc): undefined reference to `initdbi'
/tmp/cc3c2Xz6.o(.data+0x24): undefined reference to `PyType_Type'
/tmp/cc3c2Xz6.o(.data+0xe4): undefined reference to `PyType_Type'
collect2: ld returned 1 exit status

What's wrong with this ?

Thanks
 
C

cmkl

Hi Mick,

a while ago I managed the compilation of informixdb
'manually' without help of Makefiles or configure
scripts or distutils for Python-2.2.1.

Basically all you need is to compile dbi.c as well as
_informixdb.c and to link it to a shared library.
informixdb.py and _informixdb.so then has to be copied
to the proper places.

What you need as well is the help of th esql script
provided with the informix sdk and the information
provided in the lib/config/ folder of your Python
installation (used compiler switches, libraries
for linking ...).

Run:
esql -e -G -libs _informixdb.ec or
esql -e -G -thread -libs _informixdb.ec

to get a list of the informix libraries and objectfiles
needed for linking.

Of course you need to specify the path to the informix include files
and the path to the library files as well as the library files
for compilation and linking.

There are other issues with informixdb as well:

1) DBI 1-0 interface:
dates are limited to EPOCH (aka unix time) due
to limitations of the DBI-1.0 specification.
2) all Informix warnings raise an error in the
informixdb layer. In many cases this is not
wanted.

I can send you the patches I got from different
people/places.

Carl

(e-mail address removed)

Well I managed to get the configure script to run:

./configure
loading cache ./config.cache
checking whether make sets ${MAKE}... (cached) yes
checking for python... (cached) /usr/bin/python
checking for --with-informix... /opt/informix
checking for esql... (cached) /opt/informix/bin/esql
checking for --enable-thread... no
checking for --enable-shared... yes
creating ./config.status
creating Makefile
creating ext/srcdir
creating ext/Setup
creating ext/Makefile

But got a ton of errors when trying step 5 in Robin's list:

_informixdb.ec:48:20: Python.h: No such file or directory
_informixdb.ec:49:24: longobject.h: No such file or directory
In file included from _informixdb.ec:50:
dbi.h:13: parse error before '*' token
dbi.h:14: parse error before '*' token
dbi.h:15: parse error before '*' token
dbi.h:18: parse error before '*' token
dbi.h:18: parse error before '*' token
dbi.h:18: warning: data definition has no type or storage class
dbi.h:19: parse error before '*' token
dbi.h:19: parse error before '*' token
dbi.h:19: warning: data definition has no type or storage class
dbi.h:20: parse error before '*' token
dbi.h:20: parse error before '*' token
dbi.h:20: warning: data definition has no type or storage class
dbi.h:21: parse error before '*' token
dbi.h:21: parse error before '*' token
dbi.h:21: warning: data definition has no type or storage class
dbi.h:35: parse error before '*' token
dbi.h:35: warning: data definition has no type or storage class


Make sense to anyone??


2. Untar, run configure
Unfortunately, the trouble starts here at step 2. By any chance do
you have both python1.5 and python2.2 installed?

root@pe informixdb-1.3]# ./configure
loading cache ./config.cache
checking whether make sets ${MAKE}... (cached) yes
checking for python... (cached) /usr/bin/python
checking for --with-informix... /opt/informix
checking for esql... (cached) /opt/informix/bin/esql
checking for --enable-thread... no
checking for --enable-shared... yes
creating ./config.status
creating Makefile
creating ext/srcdir
creating ext/Setup
cp: cannot stat `/usr/lib/python1.5/config/Makefile.pre.in': No such
file or directory
creating ext/Makefile
make: ./Makefile.pre.in: No such file or directory
make: *** No rule to make target `./Makefile.pre.in'. Stop.
[root@pe informixdb-1.3]#
:

Robin Munn said:
Hello,

Has anyone had success compiling the informixdb-1.3 module under
python 2.2? It seems the absense of makefile.pre.in in python 2.2
causes the break under py2.2. Is there an easy way around this. I've
heard rumors of a manual method, but have been unable to track down
details. Any help is very much appreciated.

Thanks in advance,
Mike

Here's the step-by-step notes I wrote for myself when I had to do
exactly that back in May:

Steps in installing the informixdb module:

1. Download informixdb source from
http://starship.python.net/crew/sturner/informixdb.html
2. Untar, run configure
3. Edit ext/Makefile: change CFLAGS (line 100) to include
-I${INFORMIXDIR}/incl/esql
4. Cd into ext directory
5. Run "esql _informix.ec" to generate _informix.c file
6. Cd back into parent directory
7. Run make
8. Copy informixdb.py and ext/_informixdb.so into
/usr/lib/python2.2/site-packages/

I hope this helps. I did this install on a Red Hat machine that had the
Informix SDK installed, so I had the esql command available. If you
don't have esql available, then I'm not sure what you'll need to do.

Good luck!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,164
Messages
2,570,898
Members
47,439
Latest member
shasuze

Latest Threads

Top