7.0.2 on Solaris
| От | pgsql-hackers@thewrittenword.com |
|---|---|
| Тема | 7.0.2 on Solaris |
| Дата | |
| Msg-id | 200006280317.WAA31093@postal.thewrittenword.com обсуждение исходный текст |
| Ответы |
Re: 7.0.2 on Solaris
Re: 7.0.2 on Solaris Re: 7.0.2 on Solaris Re: 7.0.2 on Solaris |
| Список | pgsql-hackers |
I'm in the process of fixing build problems in 7.0.2 for Solaris CC
(not GCC).
1. I'm curious why src/template/solaris_sparc_cc contains: -DDISABLE_COMPLEX_MACRO
src/templates/solaris_i386_cc does not contains this definition.
This breaks the compilation:
gmake[3]: Entering directory
`/opt/build/postgresql-7.0.2/src/interfaces/ecpg/preproc'
cc -o ecpg preproc.o pgc.o type.o ecpg.o ecpg_keywords.o output.o
keywords.o c_keywords.o ../lib/typename.o descriptor.o variable.o
../../../backend/port/snprintf.o -R/opt/TWWfsw/pgsql702/lib
-R/opt/TWWfsw/tcl83/lib -R/opt/TWWfsw/tk83/lib
-R/opt/TWWfsw/readline4/lib -L/opt/TWWfsw/tcl83/lib
-L/opt/TWWfsw/tk83/lib -L/opt/TWWfsw/readline4/lib -lgen -lsocket
-lnsl -ldl -lm -lreadline -ltermcap -lcurses
Undefined first referencedsymbol in file
nocachegetattr pgc.o
The reason for this is because nocachegetattr becomes a function when
DISABLE_COMPLEX_MACRO is defined (nocachegetattr is defined in
src/backend/access/common/heaptuple.c).
The first patch below removes this macro from
src/templates/solaris_sparc_cc.
2. Solaris CC does not like "-K PIC". It does like "-KPIC" though.
3. Why is NAN defined in src/include/solaris_i386.h as:
#define NAN (*(__const double *) __nan)
#endif /* GCC. */
if the compiler is not GCC? The Solaris C compiler does not like this.
I removed it and the compilation succeeded.
4. I moved some of the information out of
src/interfaces/libpq++/Makefile.in into src/Makefile.shlib where it
belongs. Assuming that CXXFLAGS should take on the shared library
flags for CFLAGS_SL is wrong though.
5. added '-' before pl/tcl/Makefile so make does not complain if it
cannot find pl/tcl/Makefile.tcldefs (which will be automatically
generated).
6. When building C++ shared libraries and archives under Solaris with
the Sun C/C++ compiler, use it to build the libraries and archives,
not ld/ar.
7. Honor CXXFLAGS from configure command-line.
8. In configure: a) It is evil to use a library if it exists: (AC_CHECK_LIB(util,main)) It is far better to
checkfor a function in the library. Better yet, make sure that function does not exist in libc or $LIBS before
checkingin external libraries. I have fixed this for some libraries but don't know what to check for in others
(likeipc, IPC, lc, ld, compat, BSD). b) Added --with-readline=DIR to check for readline in DIR.
--
albert chin (china@thewrittenword.com)
-- snip snip
--- src/template/solaris_sparc_cc.orig Tue Jun 20 19:22:44 2000
+++ src/template/solaris_sparc_cc Tue Jun 27 22:15:44 2000
@@ -1,6 +1,6 @@AROPT:crs
-CFLAGS:-Xa -v -D__sparc__ -D__sun__ -DDISABLE_COMPLEX_MACRO
-SHARED_LIB:-K PIC
+CFLAGS:-Xa -v -D__sparc__ -D__sun__
+SHARED_LIB:-KPICALL:SRCH_INC:SRCH_LIB:
--- src/template/solaris_i386_cc.orig Tue Jun 27 21:36:15 2000
+++ src/template/solaris_i386_cc Tue Jun 27 21:36:19 2000
@@ -1,6 +1,6 @@AROPT:cqCFLAGS:
-SHARED_LIB:-K PIC
+SHARED_LIB:-KPICALL:SRCH_INC:SRCH_LIB:
--- src/include/port/solaris_i386.h.orig Tue Jun 27 11:53:06 2000
+++ src/include/port/solaris_i386.h Tue Jun 27 11:53:20 2000
@@ -31,8 +31,6 @@ double __d; }) \ {
__nan_bytes}).__d)
-#else /* Not GCC. */
-#define NAN (*(__const double *) __nan)#endif /* GCC. */#endif /* NAN */
--- src/interfaces/libpq++/Makefile.in.orig Tue Jun 20 17:55:36 2000
+++ src/interfaces/libpq++/Makefile.in Tue Jun 27 21:27:23 2000
@@ -39,22 +39,11 @@SHLIB_LINK= $(LIBPQ)endif
-# For CC on IRIX, must use CC as linker/archiver of C++ libraries
-ifeq ($(PORTNAME), irix5)
- ifeq ($(CXX), CC)
- AR = CC
- AROPT = -ar -o
- LD = CC
- endif
-endif
-# Shared library stuff, also default 'all' targetinclude $(SRCDIR)/Makefile.shlib
-
-# Pull shared-lib CFLAGS into CXXFLAGS
+# Pull shared-lib CFLAGS into CXXFLAGS CXXFLAGS+= $(CFLAGS_SL)
-.PHONY: examplesexamples:
--- src/pl/tcl/Makefile.orig Tue Jun 27 12:53:04 2000
+++ src/pl/tcl/Makefile Tue Jun 27 13:01:55 2000
@@ -19,7 +19,7 @@# NOTE: GNU make will make this file automatically if it doesn't exist,# using the make rule that
appearsbelow. Cute, eh?#
-include Makefile.tcldefs
+-include Makefile.tcldefs## Find out whether Tcl was built as a shared library --- if not,
--- src/Makefile.shlib.orig Tue Jun 27 12:22:09 2000
+++ src/Makefile.shlib Tue Jun 27 17:09:30 2000
@@ -130,16 +130,23 @@ifeq ($(PORTNAME), hpux) install-shlib-dep := install-shlib# HPUX doesn't believe in version
numbersfor shlibs
- shlib := lib$(NAME)$(DLSUFFIX)
+ shlib := lib$(NAME)$(DLSUFFIX) LDFLAGS_SL := -b
- CFLAGS += $(CFLAGS_SL)
+ CFLAGS += $(CFLAGS_SL)endififeq ($(PORTNAME), irix5)
- install-shlib-dep := install-shlib
- shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
- LDFLAGS_SL := -shared -rpath $(LIBDIR) -set_version sgi$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
- CFLAGS += $(CFLAGS_SL)
+ install-shlib-dep := install-shlib
+ shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
+ LDFLAGS_SL := -shared -rpath $(LIBDIR) -set_version sgi$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
+ CFLAGS += $(CFLAGS_SL)
+
+ # if archiving or linking C++ objects, must use CC (according to CC(1))
+ ifeq ($(CXX), CC)
+ AR = CC
+ AROPT = -ar -o
+ LD = CC
+ endifendififeq ($(PORTNAME), linux)
@@ -156,7 +163,14 @@ shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) LDFLAGS_SL
:= -G SHLIB_LINK += -ldl -lsocket -lresolv -lnsl -lm -lc
- CFLAGS += $(CFLAGS_SL)
+ CFLAGS += $(CFLAGS_SL)
+
+ # if archiving or linking C++ objects, must use CC (according to CC(1))
+ ifeq ($(CXX), CC)
+ AR := CC
+ AROPT := -xar -o
+ LD := CC
+ endifendififeq ($(PORTNAME), solaris_sparc)
@@ -164,7 +178,14 @@ shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) LDFLAGS_SL
:= -G SHLIB_LINK += -ldl -lsocket -lresolv -lnsl -lm -lc
- CFLAGS += $(CFLAGS_SL)
+ CFLAGS += $(CFLAGS_SL)
+
+ # if linking C++ objects, must use CC (according to CC(1))
+ ifeq ($(CXX), CC)
+ AR := CC
+ AROPT := -xar -o
+ LD := CC
+ endifendififeq ($(PORTNAME), alpha)
--- src/Makefile.global.in.orig Tue Jun 20 17:53:01 2000
+++ src/Makefile.global.in Tue Jun 20 17:53:14 2000
@@ -209,6 +209,7 @@LEX= @LEX@AROPT= @AROPT@CFLAGS= -I$(SRCDIR)/include -I$(SRCDIR)/backend @CPPFLAGS@ @CFLAGS@
+CXXFLAGS= @CXXFLAGS@CFLAGS_SL= @SHARED_LIB@PGSQL_INCLUDES= @PGSQL_INCLUDES@LIBS= @LIBS@
--- src/configure.in.orig Tue Jun 20 17:42:51 2000
+++ src/configure.in Tue Jun 27 16:00:11 2000
@@ -675,24 +675,46 @@AC_SUBST(YFLAGS)AC_CHECK_LIB(sfio, main)
-for curses in ncurses curses ; do
- AC_CHECK_LIB(${curses}, main,
- [LIBS="-l${curses} $LIBS"; break])
+
+for termlib in ncurses curses termcap terminfo termlib; do
+ AC_CHECK_LIB(${termlib}, tputs, [LIBS="-l${termlib} $LIBS"; break])done
-AC_CHECK_LIB(termcap, main)
-AC_CHECK_LIB(readline, main)
-AC_CHECK_LIB(readline, using_history, AC_DEFINE(HAVE_HISTORY_IN_READLINE),
- AC_CHECK_LIB(history, main) )
+AC_ARG_WITH(readline,
+[ --with-readline=DIR search DIR for readline includes and libraries],[
+ case "$with_readline" in
+ no) ;;
+ *)
+ if test "$with_readline" != "yes"; then
+ _cppflags=${CPPFLAGS}
+ _ldflags=${LDFLAGS}
+ CPPFLAGS="${CPPFLAGS} -I$with_readline/include"
+ LDFLAGS="${LDFLAGS} -L$with_readline/lib"
+ fi
+
+ AC_CHECK_HEADERS(readline.h readline/history.h readline/readline.h,
+ AC_CHECK_LIB(readline, readline)
+ AC_CHECK_LIB(readline, using_history,
+ AC_DEFINE(HAVE_HISTORY_IN_READLINE),
+ AC_CHECK_LIB(history, add_history)))
+
+ if test -z "$ac_cv_header_readline_h" -a \
+ -z "$ac_cv_header_readline_readline_h"; then
+ if test -n "${_cppflags}"; then
+ CPPFLAGS="${_cppflags}" LDFLAGS="${_ldflags}"
+ fi
+ fi
+ ;;
+ esac])if test "$PORTNAME" != "aix" -a "$PORTNAME" != "alpha"then AC_CHECK_LIB(bsd, main)fiAC_CHECK_LIB(util,
main)
-AC_CHECK_LIB(m, main)
-AC_CHECK_LIB(dl, main)
-AC_CHECK_LIB(socket, main)
-AC_CHECK_LIB(nsl, main)
+AC_CHECK_FUNC(pow, , AC_CHECK_LIB(m, pow))
+AC_CHECK_FUNC(dlopen, , AC_CHECK_LIB(dl, dlopen))
+AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent))
+AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))AC_CHECK_LIB(ipc, main)AC_CHECK_LIB(IPC,
main)AC_CHECK_LIB(lc, main)
@@ -701,7 +723,7 @@AC_CHECK_LIB(ld, main)AC_CHECK_LIB(compat, main)AC_CHECK_LIB(BSD, main)
-AC_CHECK_LIB(crypt, main)
+AC_CHECK_FUNC(crypt, , AC_CHECK_LIB(crypt, crypt))AC_CHECK_LIB(gen, main)AC_CHECK_LIB(PW, main)
В списке pgsql-hackers по дате отправления: