* python header puzzle
@ 2021-01-01 18:33 Marco Atzeri
2021-01-01 22:30 ` Lemures Lemniscati
0 siblings, 1 reply; 4+ messages in thread
From: Marco Atzeri @ 2021-01-01 18:33 UTC (permalink / raw)
To: cygwin
Hi All,
trying to build postgresql 12.X with python3 interface, I hit an
interesting issue
all headers
/usr/include/python{3.6-3.8}/pyport.h
are including
# if defined(__CYGWIN__)
# define PyMODINIT_FUNC
__declspec(dllexport) PyObject*
# else /* __CYGWIN__ */
# define PyMODINIT_FUNC PyObject*
# endif /* __CYGWIN__ */
and the postgresql python 3 interface has in the code and the header
src/pl/plpython/plpy_plpymodule.{h,c}
the following lines:
PyMODINIT_FUNC PyInit_plpy(void);
PyMODINIT_FUNC PyInit_plpy(void)...
Unfortunately the shared lib produced is crippled and does not
export correctly the symbols.
Changing the lines in
extern PyObject* PyInit_plpy(void);
PyObject* PyInit_plpy(void)..
solves the problem and pass all tests.
At first glance the Python headers seem the wrong one; the postgresql
code has no special CYGWIN handling in that point, just the note
* Must have external linkage, because PyMODINIT_FUNC does dllexport on
* Windows-like platforms.
Comments ?
Any one seeing similar issue with Python3 code ?
For what I see the usage of PyMODINIT_FUNC is very limited
only python-cffi and python-lxml seem to use it in their headers
Regards
Marco
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: python header puzzle
2021-01-01 18:33 python header puzzle Marco Atzeri
@ 2021-01-01 22:30 ` Lemures Lemniscati
2021-01-02 2:13 ` Lemures Lemniscati
0 siblings, 1 reply; 4+ messages in thread
From: Lemures Lemniscati @ 2021-01-01 22:30 UTC (permalink / raw)
To: cygwin
[-- Attachment #1: Type: text/plain, Size: 1711 bytes --]
On Fri, 1 Jan 2021 19:33:03 +0100, Marco Atzeri via Cygwin
> Hi All,
>
> trying to build postgresql 12.X with python3 interface, I hit an
> interesting issue
>
> all headers
> /usr/include/python{3.6-3.8}/pyport.h
>
> are including
>
> # if defined(__CYGWIN__)
> # define PyMODINIT_FUNC __declspec(dllexport) PyObject*
> # else /* __CYGWIN__ */
> # define PyMODINIT_FUNC PyObject*
> # endif /* __CYGWIN__ */
>
> and the postgresql python 3 interface has in the code and the header
> src/pl/plpython/plpy_plpymodule.{h,c}
>
> the following lines:
>
> PyMODINIT_FUNC PyInit_plpy(void);
>
> PyMODINIT_FUNC PyInit_plpy(void)...
>
> Unfortunately the shared lib produced is crippled and does not
> export correctly the symbols.
>
> Changing the lines in
>
> extern PyObject* PyInit_plpy(void);
>
> PyObject* PyInit_plpy(void)..
>
> solves the problem and pass all tests.
>
> At first glance the Python headers seem the wrong one; the postgresql
> code has no special CYGWIN handling in that point, just the note
>
> * Must have external linkage, because PyMODINIT_FUNC does dllexport on
> * Windows-like platforms.
>
> Comments ?
> Any one seeing similar issue with Python3 code ?
>
> For what I see the usage of PyMODINIT_FUNC is very limited
> only python-cffi and python-lxml seem to use it in their headers
How about like this, though it should need more refinements.
A cygport file is attached, or placed at
https://github.com/cygwin-lem/cygwin-pkg/tree/w_postgresql-12.5-1/postgresql
Regards,
Lem
[-- Attachment #2: postgresql.cygport --]
[-- Type: application/octet-stream, Size: 8664 bytes --]
NAME="postgresql"
VERSION=12.5
RELEASE=1
CATEGORY="Database"
SUMMARY="object-relational SQL database management system"
DESCRIPTION="object-relational SQL database management system"
HOMEPAGE="https://www.postgresql.org/"
SRC_URI="https://ftp.postgresql.org/pub/source/v${PV}/${PN}-${PV}.tar.bz2"
SRC_DIR="${PN}-${PV}"
BUILD_REQUIRES="\
libcrypt-devel\
libintl-devel\
libreadline-devel\
libssl-devel\
openldap\
openldap-devel\
perl_base\
python38-devel\
zlib-devel\
"
PATCH_URI="
postgresql-cygwin.patch
cygwin-soversion.diff"
DIFF_EXCLUDES="*.sql"
RESTRICT="debuginfo"
ls
MAKEOPTS="${MAKEOPTS} -j1"
PACKAGE_BUGREPORT="cygwin@cygwin.com"
CYGCONF_ARGS="--enable-nls --with-openssl --with-perl --with-python --with-ldap --with-system-tzdata=/usr/share/zoneinfo"
PYTHON="python3.8"
DEPS_PATH=/usr/sbin
PKG_NAMES="${PN} ${PN}-devel ${PN}-client ${PN}-contrib ${PN}-doc \
${PN}-plperl ${PN}-plpython \
libpq5 libpq-devel libpgtypes3 libecpg6 libecpg-compat3 libecpg-devel"
postgresql_SUMMARY="PostgreSQL Data Base Management System"
postgresql_REQUIRES="postgresql-client crypt openssl"
postgresql_devel_SUMMARY="development files for PostgreSQL server-side programming"
postgresql_devel_CATEGORY="Devel Database"
postgresql_client_SUMMARY="front-end programs for PostgreSQL"
postgresql_client_REQUIRES="crypt openssl"
postgresql_contrib_SUMMARY="additional facilities for PostgreSQL"
postgresql_doc_SUMMARY="documentation for PostgreSQL"
postgresql_plperl_SUMMARY="PL/Perl procedural language for PostgreSQL"
postgresql_plperl_REQUIRES="postgresql perl"
postgresql_plpython_SUMMARY="PL/Python procedural language for PostgreSQL"
postgresql_plpython_REQUIRES="postgresql python"
libpq5_SUMMARY="PostgreSQL C client library"
libpq5_REQUIRES="crypt openssl"
libpq5_CATEGORY="Database Libs"
libpq_devel_SUMMARY="header files for libpq5 (PostgreSQL C client library)"
libpq_devel_REQUIRES="openssl-devel"
libpq_devel_CATEGORY="Database Libs Devel"
libpgtypes3_SUMMARY="shared library pgtypes for PostgreSQL"
libpqtypes3_CATEGORY="Database Libs"
libecpg6_SUMMARY="run-time library for ECPG (Embedded PostgreSQL for C)"
libecpg6_CATEGORY="Database Libs"
libecpg_compat3_SUMMARY="run-time library for ECPG compact(Embedded PostgreSQL for C)"
libecpg_compat3_CATEGORY="Database Libs"
libecpg_devel_SUMMARY="development files for ECPG (Embedded PostgreSQL for C)"
libecpg_devel_CATEGORY="Database Libs Devel"
postgresql_CONTENTS=" \
--exclude=usr/share/postgresql/contrib \
--exclude=usr/share/postgresql/psqlrc.sample \
etc \
usr/sbin/initdb.exe \
usr/sbin/pg_controldata.exe \
usr/sbin/pg_ctl.exe \
usr/bin/pg_waldump.exe \
usr/sbin/postgres.exe \
usr/sbin/postmaster \
usr/lib/postgresql/*_and_*.dll \
usr/lib/postgresql/dict_snowball.dll \
usr/lib/postgresql/euc2004_sjis2004.dll \
usr/lib/postgresql/libpqwalreceiver.dll \
usr/lib/postgresql/plpgsql.dll \
usr/share/locale/*/LC_MESSAGES/initdb-12.mo \
usr/share/locale/*/LC_MESSAGES/pg_controldata-12.mo \
usr/share/locale/*/LC_MESSAGES/pg_ctl-12.mo \
usr/share/locale/*/LC_MESSAGES/pg_waldump-12.mo \
usr/share/locale/*/LC_MESSAGES/postgres-12.mo \
usr/share/man/man1/initdb.1.gz \
usr/share/man/man1/pg_controldata.1.gz \
usr/share/man/man1/pg_ctl.1.gz \
usr/share/man/man1/pg_waldump.1.gz \
usr/share/man/man1/postgres.1.gz \
usr/share/man/man1/postmaster.1.gz \
usr/share/doc/Cygwin/${PN}.README \
usr/share/postgresql"
postgresql_devel_CONTENTS=" \
usr/include/postgresql/server \
usr/lib/postgresql/pgxs \
usr/lib/libpostgres.a \
usr/share/man/man3"
# TODO: usr/lib/pkgconfig/
postgresql_client_CONTENTS=" \
--exclude=usr/share/locale/*/LC_MESSAGES/initdb-12.mo \
--exclude=usr/share/locale/*/LC_MESSAGES/pg_controldata-12.mo \
--exclude=usr/share/locale/*/LC_MESSAGES/pg_ctl-12.mo \
--exclude=usr/share/locale/*/LC_MESSAGES/pg_waldump-12.mo \
--exclude=usr/share/locale/*/LC_MESSAGES/postgres-12.mo \
--exclude=usr/share/locale/*/LC_MESSAGES/pg_config-12.mo \
usr/bin/clusterdb.exe \
usr/bin/createdb.exe \
usr/bin/dropdb.exe \
usr/bin/pg_archivecleanup.exe \
usr/bin/pg_basebackup.exe \
usr/bin/pg_checksums.exe \
usr/bin/pg_dump.exe \
usr/bin/pg_dumpall.exe \
usr/bin/pg_isready.exe \
usr/bin/pg_receivewal.exe \
usr/bin/pg_recvlogical.exe \
usr/bin/pg_resetwal.exe \
usr/bin/pg_rewind.exe \
usr/bin/pg_test_fsync.exe \
usr/bin/pg_test_timing.exe \
usr/bin/pg_upgrade.exe \
usr/bin/pgbench.exe \
usr/bin/psql.exe \
usr/bin/reindexdb.exe \
usr/sbin/createuser.exe \
usr/sbin/dropuser.exe \
usr/sbin/pg_restore.exe \
usr/sbin/vacuumdb.exe \
usr/share/man/man1/clusterdb.1.gz \
usr/share/man/man1/createdb.1.gz \
usr/share/man/man1/createuser.1.gz \
usr/share/man/man1/dropdb.1.gz \
usr/share/man/man1/dropuser.1.gz \
usr/share/man/man1/pg_checksums.1.gz \
usr/share/man/man1/pg_dump.1.gz \
usr/share/man/man1/pg_dumpall.1.gz \
usr/share/man/man1/pg_basebackup.1.gz \
usr/share/man/man1/pg_isready.1.gz \
usr/share/man/man1/pg_receivewal.1.gz \
usr/share/man/man1/pg_recvlogical.1.gz \
usr/share/man/man1/pg_resetwal.1.gz \
usr/share/man/man1/pg_restore.1.gz \
usr/share/man/man1/pg_rewind.1.gz \
usr/share/man/man1/psql.1.gz \
usr/share/man/man1/reindexdb.1.gz \
usr/share/man/man1/vacuumdb.1.gz \
usr/share/man/man1/vacuumlo.1.gz \
usr/share/man/man7 \
usr/share/postgresql/psqlrc.sample \
usr/share/locale/*/LC_MESSAGES/"
postgresql_contrib_CONTENTS=" \
--exclude=usr/lib/postgresql/*_and_*.dll \
--exclude=usr/lib/postgresql/dict_snowball.dll \
--exclude=usr/lib/postgresql/euc2004_sjis2004.dll \
--exclude=usr/lib/postgresql/libpqwalreceiver.dll \
--exclude=usr/lib/postgresql/pgxs \
--exclude=usr/lib/postgresql/pl*.dll \
usr/lib/postgresql \
usr/share/doc/${PN}/contrib \
usr/share/man/man1/oid2name.1.gz \
usr/share/man/man1/pg_archivecleanup.1.gz \
usr/share/man/man1/pg_standby.1.gz \
usr/share/man/man1/pg_test_fsync.1.gz \
usr/share/man/man1/pg_test_timing.1.gz \
usr/share/man/man1/pg_upgrade.1.gz \
usr/share/man/man1/pgbench.1.gz
"
postgresql_doc_CONTENTS=" \
--exclude=usr/share/doc/${PN}/contrib \
usr/share/doc/${PN}"
postgresql_plperl_CONTENTS="usr/lib/postgresql/plperl.dll"
postgresql_plpython_CONTENTS="usr/lib/postgresql/plpython3.dll"
libpq5_CONTENTS="usr/bin/cygpq-5.dll"
libpq_devel_CONTENTS=" \
usr/bin/pg_config.exe \
usr/include/libpq-fe.h \
usr/include/libpq-events.h \
usr/include/libpq/libpq-fs.h \
usr/include/pg_config*.h \
usr/include/pgtypes.h \
usr/include/postgres_ext.h \
usr/include/postgresql/internal \
usr/lib/libpgport.a \
usr/lib/libpgport_shlib.a \
usr/lib/libpq.a \
usr/lib/libpgcommon.a \
usr/lib/libpgcommon_shlib.a \
usr/lib/libpgfeutils.a \
usr/lib/pkgconfig/libpq.pc \
usr/share/man/man1/pg_config.1.gz \
usr/share/locale/*/LC_MESSAGES/pg_config-12.mo"
libpgtypes3_CONTENTS="usr/bin/cygpgtypes-3.dll"
libecpg6_CONTENTS=" \
usr/bin/ecpg.exe \
usr/bin/cygecpg-6.dll \
usr/share/man/man1/ecpg.1.gz"
libecpg_compat3_CONTENTS="usr/bin/cygecpg_compat-3.dll"
libecpg_devel_CONTENTS=" \
usr/include/ecpg*.h \
usr/include/postgresql/informix \
usr/include/pgtypes_*.h \
usr/include/sql3types.h \
usr/include/sqlca.h \
usr/include/sqlda*.h \
usr/lib/libecpg.a \
usr/lib/libecpg_compat.a \
usr/lib/libpgtypes.a \
usr/lib/pkgconfig/libecpg.pc \
usr/lib/pkgconfig/libecpg_compat.pc \
usr/lib/pkgconfig/libpgtypes.pc"
src_compile() {
export PYTHON
export LDFLAGS="-Wl,-no-undefined -Wl,-R/usr/lib"
cd ${B}
cygconf
cygmake
cd contrib
cygmake
}
src_test() {
cd ${B}
CYGWIN="ntsec binmode server" \
PATH="${D}/usr/sbin:${PATH}" \
make -j1 -i MAX_CONNECTIONS=10 check
cd contrib
CYGWIN="ntsec binmode server" \
PATH="${D}/usr/sbin:${PATH}" \
make -j1 -i MAX_CONNECTIONS=10 check
}
src_install() {
cd ${B}
# defining MAKE_DLL to install also libpostgres.a
# if somemone want to link on internals
cyginstall MAKE_DLL=true docdir=/usr/share/doc/${PN}/
mv ${D}/usr/lib/*.dll ${D}/usr/bin/
dodir /usr/sbin
for admin in createlang createuser droplang dropuser initdb \
pg_ctl pg_controldata pg_resetxlog pg_restore postgres \
postmaster vacuumdb; do
mv ${D}/usr/bin/$admin.exe ${D}/usr/sbin/;
done
dodir /etc/rc.d/init.d
cp ${C}/postgresql.initd ${D}/etc/rc.d/init.d/postgresql
chmod +x ${D}/etc/rc.d/init.d/postgresql
cp -r ${S}/doc/src/html ${D}/usr/share/doc/${PN}
dodir /usr/share/man/man1
cp ${S}/doc/src/sgml/man1/*.1 ${D}/usr/share/man/man1
dodir /usr/share/man/man3
cp ${S}/doc/src/sgml/man3/*.3 ${D}/usr/share/man/man3
dodir /usr/share/man/man7
cp ${S}/doc/src/sgml/man7/*.7 ${D}/usr/share/man/man7
make -j1 -C contrib install DESTDIR=${D} bindir=/usr/lib/postgresql/bin/ docdir=/usr/share/doc/${PN}/contrib
}
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: python header puzzle
2021-01-01 22:30 ` Lemures Lemniscati
@ 2021-01-02 2:13 ` Lemures Lemniscati
2021-01-02 6:42 ` Marco Atzeri
0 siblings, 1 reply; 4+ messages in thread
From: Lemures Lemniscati @ 2021-01-02 2:13 UTC (permalink / raw)
To: cygwin
On Sat, 02 Jan 2021 07:30:05 +0900, Lemures Lemniscati
> On Fri, 1 Jan 2021 19:33:03 +0100, Marco Atzeri via Cygwin
> > Hi All,
> >
> > trying to build postgresql 12.X with python3 interface, I hit an
> > interesting issue
> >
> > all headers
> > /usr/include/python{3.6-3.8}/pyport.h
> >
> > are including
> >
> > # if defined(__CYGWIN__)
> > # define PyMODINIT_FUNC __declspec(dllexport) PyObject*
> > # else /* __CYGWIN__ */
> > # define PyMODINIT_FUNC PyObject*
> > # endif /* __CYGWIN__ */
> >
> > and the postgresql python 3 interface has in the code and the header
> > src/pl/plpython/plpy_plpymodule.{h,c}
> >
> > the following lines:
> >
> > PyMODINIT_FUNC PyInit_plpy(void);
> >
> > PyMODINIT_FUNC PyInit_plpy(void)...
> >
> > Unfortunately the shared lib produced is crippled and does not
> > export correctly the symbols.
> >
> > Changing the lines in
> >
> > extern PyObject* PyInit_plpy(void);
> >
> > PyObject* PyInit_plpy(void)..
> >
> > solves the problem and pass all tests.
> >
> > At first glance the Python headers seem the wrong one; the postgresql
> > code has no special CYGWIN handling in that point, just the note
> >
> > * Must have external linkage, because PyMODINIT_FUNC does dllexport on
> > * Windows-like platforms.
> >
> > Comments ?
> > Any one seeing similar issue with Python3 code ?
> >
> > For what I see the usage of PyMODINIT_FUNC is very limited
> > only python-cffi and python-lxml seem to use it in their headers
>
>
> How about like this, though it should need more refinements.
>
> A cygport file is attached, or placed at
> https://github.com/cygwin-lem/cygwin-pkg/tree/w_postgresql-12.5-1/postgresql
>
I'm sorry. I was wrong.
Regards,
Lem
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: python header puzzle
2021-01-02 2:13 ` Lemures Lemniscati
@ 2021-01-02 6:42 ` Marco Atzeri
0 siblings, 0 replies; 4+ messages in thread
From: Marco Atzeri @ 2021-01-02 6:42 UTC (permalink / raw)
To: cygwin
On 02.01.2021 03:13, Lemures Lemniscati via Cygwin wrote:
> On Sat, 02 Jan 2021 07:30:05 +0900, Lemures Lemniscati
>> On Fri, 1 Jan 2021 19:33:03 +0100, Marco Atzeri via Cygwin
>>> Hi All,
>>>
>>> trying to build postgresql 12.X with python3 interface, I hit an
>>> interesting issue
>>>
>>
>> A cygport file is attached, or placed at
>> https://github.com/cygwin-lem/cygwin-pkg/tree/w_postgresql-12.5-1/postgresql
>>
> I'm sorry. I was wrong.
>
> Regards,
>
> Lem
Hi Lem,
Maybe next time; just remember to trim replies.
I am currently using python-cffi to see is I should modify
PyMODINIT_FUNC in the python code or in the packages.
There are other additional puzzling cripped DLL cases.
I am using
https://www.dependencywalker.com/
to verify if the symbol list is correcly exported. When crippled there
is usually only one symbol
Regards
Marco
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-01-02 6:42 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-01 18:33 python header puzzle Marco Atzeri
2021-01-01 22:30 ` Lemures Lemniscati
2021-01-02 2:13 ` Lemures Lemniscati
2021-01-02 6:42 ` Marco Atzeri
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).