Re: [PATCHES] cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, - Mailing list pgsql-cygwin

From Reini Urban
Subject Re: [PATCHES] cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c,
Date
Msg-id 412C9E89.3030000@x-ray.at
Whole thread Raw
In response to Re: [PATCHES] cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, timezone/pgtz.c  (Jason Tishler <jason@tishler.net>)
Responses Re: [PATCHES] cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c,  (Jason Tishler <jason@tishler.net>)
List pgsql-cygwin
Attached is my 7.4.5 build script,
not yet converted to the new generic-build-script mechanism.

In order to fix the tcl issues I needed perl.
There are still minor tcl issues, but I'll fix them soon.

There's another short Makefile.cygwin patch to build contrib/dbase
correctly. Hope this will be accepted (or looked at) upstream.
With the standard order of libs from configure it will fail, because our
libiconv is shared.
With just the needed libs in the correct order it builds fine:
$ gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declarations dbf.o dbf2pg.o endian.o -lpq -L../../src/port
-lpgport -lintl -o dbf2pg

*************************

The first standard regression test attempt (--max-connections=10) failed
with:

creating template1 database in
/usr/src/postgresql/postgresql-7.4.5-1/src/test/regress/./tmp_check/data/base/1...
FATAL:  could not create shared memory segment: Function not implemented
DETAIL:  Failed system call was shmget(key=1, size=1081344, 03600).

Seems to be a cygserver issue. cygserver is running as service.
I'll hunt that down, but looks strange. Seems that I really linked
against cygipc and so it doesn't use cygserver :(

$ tmp_check/install/usr/bin/initdb -D "tmp_check/data" -L
tmp_check/install/usr/share/postgresql --debug --no-locale -E Latin1

creating template1 database in tmp_check/data/base/1... DEBUG:  invoking
IpcMemoryCreate(size=1081344)
FATAL:  could not create shared memory segment: Function not implemented
DETAIL:  Failed system call was shmget(key=1, size=1081344, 03600).


Jason Tishler schrieb:
> On Wed, Aug 25, 2004 at 01:12:46AM +0200, Reini Urban wrote:
>
>>Jason Tishler schrieb:
>>
>>>On Tue, Aug 24, 2004 at 09:49:51PM +0200, Reini Urban wrote:
>>>
>>>>There's on remaining issue for the cygwin build:
>>>>../../src/port/libpgport.a(dirmod.o)(.text+0x5ee):dirmod.c: undefined
>>>>reference to `__imp__CurrentMemoryContext'
>>>>../../src/port/libpgport.a(dirmod.o)(.text+0x64b):dirmod.c: undefined
>>>>reference to `__imp__CurrentMemoryContext'
>>>
>>>Note I have no experience with 8.0 so the following is a WAG...
>>>The above is likely caused by not linking against an import library
>>>(i.e., libpostgres.a).
>>
>>Yes, it is defined in libpostgres.a. Hmm, a cross-dependency problem in
>>the Makefile. With an added -lpostgres postgres.exe builds fine.
>
>
> In previous versions, postgres.exe built fine without -lpostgres.  Other
> components needed to link with libpostgres.a -- not postgres.exe.  As
> you indicated above, seems like there is a cross-dependency issue
> introduced in 8.0.

It's just one simple backend object file, so I'll try to hunt that down
later. So the developers can fix their Makefile also.

>>But I'll try to add the single object file only where it is defined.
>
>
> IMO, linking against libpostgres.a is preferable assuming the
> cross-dependency issue cannot be solved.
>
>
>>I also see that it is still linking against cygipc.
>>LIBS=-lintl -lssl -lcrypto -lz -lreadline -lcygipc -lcrypt -lresolv -lm
>
>
> The shouldn't happen.  Do you have cygipc installed?  If so, then
> uninstall and try again.  Any better?

That is probably some left-over autoconf issue.

>>Do we still need this?
>
> AFAICT, no.
>
>
>>As I see it, pgsql has its own ipc mechanism.
> Does the above imply that 8.0 will not need the IPC in cygserver?

Looks like so, but I'll check later. First I want to finish 7.4.5
because of the pending perl problems.

>>Without -lcygipc it also builds fine. ...
>
> Yes.  For example, 7.4.3 build fine against cygserver.
>
>
>>>I'm quite willing to help to ensure a smooth transition and to help
>>>minimize your "pain." :,)  Maybe 8.0 can be a joint effort, with you
>>>taking over fully with 8.0.x or 8.1?
>>
>>Sure, why not?
>
>
> Thanks!
>
>
>>But I'm also trying to build the 7.4.5 now, because I want to see the
>>changes in the new 8 branch. So you can sit and have a rest. :)
>
>
> Thanks again.  I can use the rest. :,)
>
>
>>From another thread...
>>
>>>Is "--with-template=cygwin" required?  It wasn't before.
>>
>>Yes, this is apparently new for 8.x.
>
>
> OK, I was just surprised that configure didn't automatically detect the
> platform.
>
>
>>And it does help to be precise in the configure line.
>
>
> Precise is good -- redundant is not necessarily good.
>
>
>>BTW: I will convert your build.sh to the cygwin generic-build-script
>>system. This is much easier.
>
>
> OK.
>
>
>>>Does "--with-tcl" no longer build cleanly?
>>
>>This wasn't in your 7.4.3 build.sh included and I didn't install the
>>tcl/tk sources (only under my perltk tree).
>
>
> Sorry, for the above.  I temporarily forgot that Cygwin PostgreSQL has
> TCL issues.
>
>
>>But I can have a try.
>
>
> OK, but IMO I would address the other issues first since Cygwin
> PostgreSQL never supported TCL in the past.  BTW, check the archives,
> Patrick Samson and I have made some progress in the past.
>
>
>>I have tclsh, the headers and the libs, just a tclConfig.sh script is
>>missing from the cygwin build. Should not be that hard. All the libs and
>>includes are at the standard paths.
>
>
> It may be harder than anticipated -- remember the Cygwin Tcl/Tk package
> is really a native Win32 package not a Cygwin one... :,(
>
>
>>I'll finish the 8.0.0-beta1 port to cygwin,
>
>
> Thanks.
>
>
>>and post to the patches list then the cumulative patches
>
>
> Sounds good.
>
>
>>Questions to pgsql-hackers or pgsql-cygwin?
>
>
> Depends on the question. :,)
>
>
>>The 8.x build is almost okay now. Just a remaining libreadline issue in
>>src/bin/psql/tab-complete.c
>>And testing.
>
>
> Let me know how is goes.

Uh, this was my old readline lib leftover in /usr/local/lib
It builds fine now.

>>And sockets would also be fine.
>>$ postgresql-8.0.0beta1-1/src/backend/postgres.exe
>>FATAL:  unrecognized configuration parameter "tcpip_socket"
>
>
> See the following:
>
>     http://archives.postgresql.org/pgsql-general/2004-08/msg01181.php

--
Reini Urban
http://xarch.tu-graz.ac.at/home/rurban/
#! /bin/bash

# $Id: build.sh,v 1.19 2004/01/09 15:18:13 jt Exp $

# vim: tabstop=4

# usage: CYGWIN-PATCHES/build.sh 7.4.5 1

# parse arguments
version=$1
port=$2

# constants
pkg=postgresql

# dir variables
Prefix=/usr
TmpDir=/tmp/$pkg.$$
InstallPrefix=$TmpDir$Prefix

DataDir=$InstallPrefix/share
BinDir=$InstallPrefix/bin
LibDir=$InstallPrefix/lib
ManDir=$DataDir/man
DocDir=$DataDir/doc/$pkg-$version
CygDocDir=$DataDir/doc/Cygwin
PatchDir=CYGWIN-PATCHES
SrcDocDir=doc

# you might have to add these
# special tkConfig.sh 8.4 fixes (the tcltk maintainer should really fix these paths)
# but you can also fix them in /usr/lib/t(k|cl)Config.sh
# with perl -pi.orig -e's|/cygnus/netrel/build|/usr/src|; s|/netrel/src|/usr/src|;' /usr/lib/tkConfig.sh
/usr/lib/tclConfig.sh
# mounting them is not that good...
#UsrSrcMount="`cygpath -w /usr/src`"
#mount -f -u -b "$UsrSrcMount" "/cygnus/netrel/build"
#mount -f -u -b "$UsrSrcMount" "/netrel/src"
if [ ! -d /usr/src/libtcltk ]; then
  if [ -d /usr/src/tcltk-20030901-1 ]; then
    ln -s /usr/src/tcltk-20030901-1 /usr/src/libtcltk
    withTcl="--with-tcl --with-tclconfig=/usr/lib --with-tkconfig=/usr/lib"
    echo "src package tcltk-20030901-1 found. will build --with-tcl"
  else
    echo "src package at /usr/src/tcltk-20030901-1 not found. will not build --with-tcl"
    withTcl=
  fi
else
  withTcl="--with-tcl --with-tclconfig=/usr/lib --with-tkconfig=/usr/lib"
  echo "src package libtcltk found. will build --with-tcl"
fi

# not yet ready for primetime
withTcl=

# configure
./configure --with-template=cygwin --enable-integer-datetimes --enable-nls --enable-multibyte --with-python --with-perl
--with-java--with-CXX --with-openssl $withTcl --prefix=$Prefix --sysconfdir=/etc --datadir=/usr/share
--mandir=/usr/share/man--docdir=$Prefix/share/doc/$pkg-$version 

# patch the wrong cygwin tcltk paths
if [ ! -z $withTcl ]; then
  perl -pi.orig -e's|/cygnus/netrel/build|/usr/src|; s|/netrel/src|/usr/src|;' src/Makefile.global
  # perl -pi.orig -e"s|TCL_LIBS=''|TCL_LIBS='-ltcl'|;" src/
fi
# patch Makefile.cygwin
patch -p0 <<EOF

--- src/makefiles/Makefile.cygwin.orig  2003-05-22 18:20:44.000000000 +0100
+++ src/makefiles/Makefile.cygwin       2004-08-25 14:26:18.076225800 +0100
@@ -32,6 +32,17 @@
 override CPPFLAGS+= -DUSE_DL_IMPORT
 endif

+ifneq (,$(findstring tcl,$(subdir)))
+override TCL_LIB_SPEC += -ltcl84
+override TK_LIBS += -ltk
+override TK_LIB_SPEC += -ltcl84
+endif
+
+ifneq (,$(findstring contrib/dbase,$(subdir)))
+override PG_LIBS = -lpq
+override LIBS = -lpgport -lintl
+endif
+
 override javadir := '$(shell cygpath -w $(javadir))'

 sqlmansect = 7
EOF


# make
make
make -C contrib

# make install
make DESTDIR=$TmpDir install
make DESTDIR=$TmpDir install-all-headers
make -C contrib DESTDIR=$TmpDir install

# strip executables and DLLs
find $InstallPrefix -name '*.exe' -o -name '*.dll' | xargs strip

# move DLLs from lib to bin
mv $LibDir/*.dll $BinDir

# copy libpostgres.a to lib (FIXME: temporary hack)
cp src/backend/libpostgres.a $LibDir

# create man cat dirs
mkdir $ManDir/cat1 $ManDir/catl

# convert doc symlinks into "hard" links
find $DocDir -type l | xargs -r ls -l | gawk '{i = NF - 2; print $i, $NF}' |
while read link file
do
    path=$(dirname $link)
    rm -f $link
    ln $path/$file $link
done

# copy Cygwin PostgreSQL README file
mkdir -p $CygDocDir
cp $PatchDir/README $CygDocDir/$pkg-$version.README

# copy PostgreSQL COPYRIGHT, README, etc. files
TopFiles=(COPYRIGHT HISTORY INSTALL README)
DocFiles=(FAQ FAQ_MSWIN KNOWN_BUGS MISSING_FEATURES README.mb.big5 \
    README.mb.jp bug.template)
cp ${TopFiles[*]} ${DocFiles[*]/#/$SrcDocDir/} $DocDir

# create package
tar -C $TmpDir -cjf $pkg-$version-$port.tar.bz2 usr

# remove temporary directory
rm -fr $TmpDir

# remove temporary tk mounts
#umount /cygnus/netrel/build
#umount /netrel/src

pgsql-cygwin by date:

Previous
From: Jason Tishler
Date:
Subject: Re: [PATCHES] cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, timezone/pgtz.c
Next
From: Jason Tishler
Date:
Subject: Re: [PATCHES] cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c,