From: | "Kristofer A(dot) E(dot) Peterson" <bepeterson(at)taconic(dot)net> |
---|---|
To: | pgsql-hackers(at)postgreSQL(dot)org |
Subject: | PORTNAME and LINUX_ELF defines in interface Makefiles |
Date: | 1998-04-21 17:09:00 |
Message-ID: | 353CD2AC.7FCA790@taconic.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
I have had problems with LINUX_ELF and/or PORTNAME *not* being defined
and shared libraries *not* being compiled. I would like to make the
following observations, based on the Makefiles generated for a linux
system, with elf, and with glibc v2.06.
The configure command line was:
[/usr/src/postgresql-6.3.2/src]$ ./configure --host=i586-pc-linux
--prefix=/usr/local/pgsql --enable-locale --with-tcl --with-perl
--with-x --enable-hba
Using the following command, executed from the src directory:
[/usr/src/postgresql-6.3.2/src]$ grep -l "\(PORTNAME\)\|\(LINUX_ELF\)"
`find -regex ".*/.*Makefile\(.custom\|.global\)?"`
I found that the only Makefiles that mention the PORTNAME or LINUX_ELF
defines were the following:
./interfaces/ecpg/lib/Makefile
./interfaces/libpgtcl/Makefile
./interfaces/libpq/Makefile
./interfaces/libpq++/Makefile
./Makefile.custom
Since I created Makefile.custom myself, the other four Makefiles are the
ones to be investigated.
Of the four Makefiles, three of them (libpgtcl, ecpg, libpq) used the
following lines to determine whether a shared library should be build.
(under Linux)
ifeq ($(PORTNAME), linux)
ifdef LINUX_ELF
install-shlib-dep := install-shlib
shlib := libpq.so.$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
LDFLAGS_SL = -shared -soname libpq.so.$(SO_MAJOR_VERSION)
CFLAGS += $(CFLAGS_SL)
endif
endif
while the other Makefile (libpq++), had the following lines:
ifeq ($(PORTNAME), linux)
INSTALL-SHLIB-DEP := install-shlib
SHLIB := libpq++.so.1
LDFLAGS_SL = -shared -soname $(SHLIB)
CFLAGS += $(CFLAGS_SL)
endif
The key thing to note is that all four Makefiles require PORTNAME to be
set to 'linux' to compile a shared library, and three of them,
(libpgtcl, ecpg, libpq), also requre LINUX_ELF to be defined, whereas
the other Makefile (libpq++) does not check for this.
In addition, the following define appeared in only three out of the four
Makefiles, the same three that checked for LINUX_ELF to be defined,
(libpq, libpgtcl, ecpg). (Coincidence? I think not.)
PORTNAME=linux
In the Makefile for libpq++, PORTNAME was never defined.
So what this boils down to is, compiling out of the box, libpgtcl.so,
libecpg.so, and libpq.so, will *not* be made because LINUX_ELF is *not*
defined anywhere. However, libpq++.so will *not* be made because
PORTNAME is *not* defined or equal to 'linux'.
As a quick fix, create the file Makefile.custom in the src directory,
(place where Makefile.global lives), and put the following two lines in
it.
LINUX_ELF=true
PORTNAME='linux'
Since Makefile.custom is included by Makefile.global, and thus by every
Makefile in the tree, the interface Makefiles will be happy and make
their shared libraries.
In the future, I would suggest the these two defines be placed into
Makefile.global by the configure program (autoconf). Furthermore, the
Makefiles for libpgtcl, libecpg, and libpq should *not* define PORTNAME,
rather they should rely on PORTNAME being defined in Makefile.global.
The Makefile for libpq++ should to be changed to check for LINUX_ELF
being defined in addition to checking PORTNAME='linux'.
The checks for LINUX_ELF are probably a hold over to the days when
people compiled PostGreSQL on a.out linux boxes with funky, gnarly
shared library support. Perhaps people still do, and if they do,
LINUX_ELF should stay.
I have not played around with autoconf, so I don't know off hand what
would have to be changed to fix this, although I'll take a look if no
one else wants to.
Anyways, if you made it here, I hope you've found something entertaining
and useful. :)
- Kris
PS - I don't know if the other ports have similar Makefile problems, I
have noticed that for BSD libecpg, libpgtcl, and libpq are built shared,
but not libpq++.
From | Date | Subject | |
---|---|---|---|
Next Message | The Hermit Hacker | 1998-04-21 17:14:22 | Re: [HACKERS] PORTNAME and LINUX_ELF defines in interface Makefiles |
Previous Message | The Hermit Hacker | 1998-04-21 17:00:35 | Re: [HACKERS] configure guessing platform |