Bug 160050 - [patch] databases/postgresql84-server: unbreak for 9.x
Summary: [patch] databases/postgresql84-server: unbreak for 9.x
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: Normal Affects Only Me
Assignee: Eygene Ryabinkin
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-08-24 10:50 UTC by Eygene Ryabinkin
Modified: 2011-10-16 16:01 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Eygene Ryabinkin freebsd_committer freebsd_triage 2011-08-24 10:50:07 UTC
PostgreSQL 8.4, 9.0 and 9.1 are currently marked as BROKEN for 9-CURRENT.

The breakage comes from the fact that
 a. configure script detects gssapi_krb5 as the GSSAPI library;
 b. configure instructs ld to use flag '--as-needed', so when
    we're linking to the bare GSSAPI libraries and no Kerberos
    gssapi_krb5 will be thrown away from linking, because no
    symbols are used from there.

Fix: 

The patch is available at
  http://codelabs.ru/fbsd/ports/postgresql/unbreak-GSSAPI-support.diff

It was tested on my Tinderbox.  Here are the QA pages:
 * http://codelabs.ru/fbsd/ports/qa/databases/postgresql84/8.4.8_1
 * http://codelabs.ru/fbsd/ports/qa/databases/postgresql90/9.0.4_2
 * http://codelabs.ru/fbsd/ports/qa/databases/postgresql91/9.1.b3

I had also tested the patched version for postgresql90 at our local
LXR instance that indexes around 20 distinct versions of FreeBSD,
Linux and XNU kernel sources -- no regressions found yet.

It will be good to have PostgreSQL 8.4 (as being the currently-default
version) to be buildable before 9.0 will come out.
How-To-Repeat: 
Look at
 * http://www.freebsd.org/cgi/cvsweb.cgi/ports/databases/postgresql84-server/Makefile
 * http://www.freebsd.org/cgi/cvsweb.cgi/ports/databases/postgresql90-server/Makefile

Try to compile postgresql91-server with GSSAPI set to 'yes'
and no Kerberos.
Comment 1 Edwin Groothuis freebsd_committer freebsd_triage 2011-08-24 10:50:48 UTC
Responsible Changed
From-To: freebsd-ports-bugs->girgen

Over to maintainer (via the GNATS Auto Assign Tool)
Comment 2 Eygene Ryabinkin freebsd_committer freebsd_triage 2011-09-24 21:45:28 UTC
Responsible Changed
From-To: girgen->rea

Taking my own PR due to maintainer timeout.
Comment 3 dfilter service freebsd_committer freebsd_triage 2011-09-25 19:09:20 UTC
rea         2011-09-25 18:09:06 UTC

  FreeBSD ports repository

  Modified files:
    databases/postgresql84-server Makefile 
    databases/postgresql90-server Makefile 
    databases/postgresql91-server Makefile 
  Log:
  PostgreSQL: unbreak GSSAPI support
  
  The problem with GSSAPI without Kerberos is that configure.in has
  very funny logics of choosing GSSAPI libraries:
  {{{
  if test "$with_gssapi" = yes ; then
    if test "$PORTNAME" != "win32"; then
      AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
                                    [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
    else
      LIBS="$LIBS -lgssapi32"
    fi
  fi
  }}}
  
  This makes configure to happily choose -lgssapi_krb5 when the system
  has Kerberos support (NO_KERBEROS is absent), but ld's '--as-needed'
  will throw this library away when no Kerberos functions are used and
  linker won't produce 'postgres' binary whining about unresolved
  symbols:
  {{{
  cc -O2 -pipe -fno-strict-aliasing -Wall -Wmissing-prototypes \
  -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels \
  -fno-strict-aliasing -fwrapv -L../../src/port -L/usr/local/lib \
  -rpath=/usr/lib:/usr/local/lib -L/usr/local/lib  -L/usr/local/lib \
  -Wl,--as-needed -Wl,-R'/usr/local/lib' -Wl,-export-dynamic \
  [... a bunch of *.o files was stripped ...]
  ../../src/timezone/pgtz.o ../../src/port/libpgport_srv.a -lintl -lssl \
  -lcrypto -lgssapi_krb5 -lcrypt -lm -o postgres
  libpq/auth.o: In function `pg_GSS_error':
  auth.c:(.text+0x6e): undefined reference to `gss_display_status'
  auth.c:(.text+0x8e): undefined reference to `gss_release_buffer'
  auth.c:(.text+0xc5): undefined reference to `gss_display_status'
  auth.c:(.text+0xe5): undefined reference to `gss_release_buffer'
  libpq/auth.o: In function `ClientAuthentication':
  auth.c:(.text+0x82d): undefined reference to `gss_delete_sec_context'
  auth.c:(.text+0x941): undefined reference to `gss_accept_sec_context'
  auth.c:(.text+0x9f1): undefined reference to `gss_release_buffer'
  auth.c:(.text+0xaf3): undefined reference to `gss_release_cred'
  auth.c:(.text+0xb10): undefined reference to `gss_display_name'
  auth.c:(.text+0xbc8): undefined reference to `gss_release_buffer'
  auth.c:(.text+0x10b0): undefined reference to `gss_release_buffer'
  auth.c:(.text+0x111e): undefined reference to `gss_release_buffer'
  libpq/pqcomm.o: In function `pq_close':
  pqcomm.c:(.text+0x105a): undefined reference to `gss_delete_sec_context'
  pqcomm.c:(.text+0x107d): undefined reference to `gss_release_cred'
  gmake: *** [postgres] Error 1
  }}}
  
  Also, ports for PostgreSQL 8.4 and 9.0 had their <bsd.port.pre.mk>
  misplaced: OPTIONS came after it, so WITH_/WITHOUT_ knobs will not
  be really activated.
  
  PR: 160050
  Feature safe: yes
  Approved by: maintainer timeout (1 month)
  
  Revision  Changes    Path
  1.230     +8 -4      ports/databases/postgresql84-server/Makefile
  1.224     +8 -4      ports/databases/postgresql90-server/Makefile
  1.226     +7 -0      ports/databases/postgresql91-server/Makefile
_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
Comment 4 Eygene Ryabinkin freebsd_committer freebsd_triage 2011-10-16 16:01:34 UTC
State Changed
From-To: open->closed

Fixes were committed.