Re: 7.0.2 on Solaris - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: 7.0.2 on Solaris
Date
Msg-id 200010110056.UAA18669@candle.pha.pa.us
Whole thread Raw
In response to 7.0.2 on Solaris  (pgsql-hackers@thewrittenword.com)
Responses Re: 7.0.2 on Solaris
List pgsql-hackers
I think our source tree has diverged quite a bit from 7.0.2.  Could you
grab a snapshot and let me know what needs changing for Solaris?
Thanks.

> 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 referenced
>  symbol                             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 check for a function in the library. Better
>       yet, make sure that function does not exist in libc or $LIBS
>       before checking in external libraries. I have fixed this for
>       some libraries but don't know what to check for in others
>       (like ipc, 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:-KPIC
>  ALL:
>  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:cq
>  CFLAGS:
> -SHARED_LIB:-K PIC
> +SHARED_LIB:-KPIC
>  ALL:
>  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' target
>  include $(SRCDIR)/Makefile.shlib
>  
> -
> -# Pull shared-lib CFLAGS into CXXFLAGS
> +# Pull shared-lib CFLAGS into CXXFLAGS 
>  CXXFLAGS+= $(CFLAGS_SL)
> -
>  
>  .PHONY: examples
>  examples:
> --- 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 appears below.  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 numbers for shlibs
> -  shlib                := lib$(NAME)$(DLSUFFIX)
> +  shlib            := lib$(NAME)$(DLSUFFIX)
>    LDFLAGS_SL        := -b
> -  CFLAGS            += $(CFLAGS_SL)
> +  CFLAGS        += $(CFLAGS_SL)
>  endif
>  
>  ifeq ($(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
> +  endif
>  endif
>  
>  ifeq ($(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
> +  endif
>  endif
>  
>  ifeq ($(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
> +  endif
>  endif
>  
>  ifeq ($(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)
>  fi
>  AC_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)
>  
> 
> 


--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Proposal: More flexible backup/restore via pg_dump
Next
From: Bruce Momjian
Date:
Subject: Re: Minor buglet in update...from (I think)