Bug 180121

Summary: devel/subversion-static fails to link libm and to include serf
Product: Ports & Packages Reporter: Trond Endrestøl <Trond.Endrestol>
Component: Individual Port(s)Assignee: Lev A. Serebryakov <lev>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: Latest   
Hardware: Any   
OS: Any   
Attachments:
Description Flags
file.diff none

Description Trond Endrestøl 2013-06-30 11:30:00 UTC
devel/subversion-static fails to link libm resulting in isnan() being undefined. This could very well be a problem with devel/apr1.

devel/subversion-static fails to include serf.
neon is replaced by serf but devel/subversion-static/Makefile doesn't reflect this change in the list of slave options.

Fix: Apply these two patches.
The first one is for devel/subversion-static/work/subversion-1.8.0/Makefile.
The second is for devel/subversion-static/Makefile.

top_builddir = .
 top_srcdir = .
 abs_builddir = /usr/ports/workdirs/usr/ports/devel/subversion-static/work/subversion-1.8.0
 abs_srcdir = /usr/ports/workdirs/usr/ports/devel/subversion-static/work/subversion-1.8.0
 VPATH = .

 SVN_RA_LIB_DEPS = $(RA_LOCAL_DEPS) $(RA_SVN_DEPS)
 SVN_RA_LIB_INSTALL_DEPS = install-ramod-lib
 SVN_RA_LIB_LINK = $(RA_LOCAL_LINK) $(RA_SVN_LINK)

 SVN_FS_LIB_DEPS = $(FS_FS_DEPS)
 SVN_FS_LIB_INSTALL_DEPS = install-fsmod-lib
 SVN_FS_LIB_LINK = $(FS_FS_LINK)

 SWIG_SRC_DIR = $(abs_srcdir)/subversion/bindings/swig
 SWIG_BUILD_DIR = $(abs_builddir)/subversion/bindings/swig

 SCHEMA_DIR = subversion/svn/schema

-SVN_APR_LIBS = -L/usr/local/lib -lapr-1 -lcrypt -pthread
+SVN_APR_LIBS = -L/usr/local/lib -lapr-1 -lcrypt -pthread -lm
 SVN_APRUTIL_LIBS = -L/usr/local/lib -laprutil-1 -ldb-4.2 -lgdbm -lexpat -liconv
 SVN_APR_MEMCACHE_LIBS =
 SVN_DB_LIBS =
 SVN_GPG_AGENT_LIBS = @SVN_GPG_AGENT_LIBS@
 SVN_GNOME_KEYRING_LIBS =
 SVN_KWALLET_LIBS =
 SVN_MAGIC_LIBS = -lmagic
 SVN_SASL_LIBS =
 SVN_SERF_LIBS =
 SVN_SQLITE_LIBS = -L/usr/local/lib -lsqlite3
 SVN_XML_LIBS = -lexpat
 SVN_ZLIB_LIBS = -lz

 LIBS = -lintl

 prefix = /usr/local
 exec_prefix = ${prefix}
 libdir = ${exec_prefix}/lib
 fsmod_libdir = ${exec_prefix}/lib
 ramod_libdir = ${exec_prefix}/lib





PKGNAMESUFFIX= -static

 CONFLICTS_INSTALL=     ${PORTNAME}-[0-9]*
 LATEST_LINK=   ${PORTNAME}${PKGNAMESUFFIX}

 OPTIONS_EXCLUDE=       ${OPTIONS_DEFINE}
-OPTIONS_SLAVE= NEON STATIC FREEBSD_TEMPLATE ENHANCED_KEYWORD
+OPTIONS_SLAVE= SERF STATIC FREEBSD_TEMPLATE ENHANCED_KEYWORD

 MASTERDIR=     ${.CURDIR}/../subversion
 PKGMESSAGE=    ${.CURDIR}/pkg-message

 .include "${MASTERDIR}/Makefile"--RQXjKsPryVhKAuzN0m6WMSJvEdEdFTjhMeNPyrQxeRFCmRjh
Content-Type: text/plain; name="file.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="file.diff"

--- Makefile.orig       2013-06-30 11:26:00.000000000 +0200
+++ Makefile    2013-06-30 11:32:11.000000000 +0200
@@ -23,41 +23,41 @@
How-To-Repeat: Install devel/subversion-static from scratch.
Comment 1 Edwin Groothuis freebsd_committer freebsd_triage 2013-06-30 11:30:09 UTC
Responsible Changed
From-To: freebsd-ports-bugs->lev

Over to maintainer (via the GNATS Auto Assign Tool)
Comment 2 dfilter service freebsd_committer freebsd_triage 2013-07-13 16:37:06 UTC
Author: lev
Date: Sat Jul 13 15:36:50 2013
New Revision: 322938
URL: http://svnweb.freebsd.org/changeset/ports/322938

Log:
   (1) Fix subversion-static port to use SERF.
   (2) Backport fix of issue #4383: problems with symbolic-link WC.
   (3) Backport change r1500762 (no isue # found): conflict between
       GPG Agent and other password stories.
   (4) Fix error message when Subversion is configured with BDB abd
       APR is not.
  
  PR:		ports/179807, ports/180121, ports/180121
  Submitted by:	[3] eugen@grosbein.pp.ru

Added:
  head/devel/subversion/files/patch-fix4383   (contents, props changed)
  head/devel/subversion/files/patch-subversion--libsvn_subr--gpg_agent.c   (contents, props changed)
Modified:
  head/devel/subversion-static/Makefile
  head/devel/subversion/Makefile
  head/devel/subversion/Makefile.common

Modified: head/devel/subversion-static/Makefile
==============================================================================
--- head/devel/subversion-static/Makefile	Sat Jul 13 15:33:23 2013	(r322937)
+++ head/devel/subversion-static/Makefile	Sat Jul 13 15:36:50 2013	(r322938)
@@ -3,10 +3,10 @@
 PKGNAMESUFFIX=	-static
 
 CONFLICTS_INSTALL=	${PORTNAME}-[0-9]*
-LATEST_LINK=	${PORTNAME}${PKGNAMESUFFIX}
+LATEST_LINK=		${PORTNAME}${PKGNAMESUFFIX}
 
 OPTIONS_EXCLUDE=	${OPTIONS_DEFINE}
-OPTIONS_SLAVE=	NEON STATIC FREEBSD_TEMPLATE ENHANCED_KEYWORD
+OPTIONS_SLAVE=		FREEBSD_TEMPLATE P4_STYLE_MARKERS SERF STATIC
 
 MASTERDIR=	${.CURDIR}/../subversion
 PKGMESSAGE=	${.CURDIR}/pkg-message

Modified: head/devel/subversion/Makefile
==============================================================================
--- head/devel/subversion/Makefile	Sat Jul 13 15:33:23 2013	(r322937)
+++ head/devel/subversion/Makefile	Sat Jul 13 15:36:50 2013	(r322938)
@@ -15,9 +15,10 @@ MAN8=		svnserve.8
 
 TXT_DOCS=	BUGS CHANGES COMMITTERS INSTALL README
 
-OPTIONS_DEFINE=	BDB BOOK GNOME_KEYRING KDE_KWALLET MAINTAINER_DEBUG \
-		MOD_DAV_SVN P4_STYLE_MARKERS FREEBSD_TEMPLATE SASL \
-		SERF STATIC SVNSERVE_WRAPPER TEST TOOLS \
+OPTIONS_DEFINE=	BDB BOOK DOCS GNOME_KEYRING KDE_KWALLET \
+		MAINTAINER_DEBUG MOD_DAV_SVN NLS P4_STYLE_MARKERS \
+		FREEBSD_TEMPLATE SASL SERF STATIC SVNSERVE_WRAPPER \
+		TEST TOOLS
 
 OPTIONS_DEFAULT=P4_STYLE_MARKERS FREEBSD_TEMPLATE SERF
 
@@ -212,8 +213,8 @@ pre-configure:
 	@BDB_VERSION=`${APR_APU_DIR}/${APU_CONFIG} --db-version`; \
 	if [ "$${BDB_VERSION}" != "4" -a "$${BDB_VERSION}" != "5" ] ; then \
 		${ECHO_MSG} "" ; \
-		${ECHO_MSG} 'You should build `'"${APR_PORT}' with Berkeley DB (4 or 5) support to use subversion with it." ; \
-		${ECHO_MSG} 'Please rebuild `'"${APR_PORT}' with option "'`'"${OPT_NAME}' and try again." ; \
+		${ECHO_MSG} 'You should build `'"devel/apr1' with Berkeley DB (4 or 5) support to use subversion with it." ; \
+		${ECHO_MSG} 'Please rebuild `'"devel/apr1' with option "'`'"${OPT_NAME}' and try again." ; \
 		${ECHO_MSG} "" ; \
 		${ECHO_MSG} "Or you can disable Berkeley DB support. Only 'fs' repository backend will be available." ; \
 		${ECHO_MSG} "" ; \

Modified: head/devel/subversion/Makefile.common
==============================================================================
--- head/devel/subversion/Makefile.common	Sat Jul 13 15:33:23 2013	(r322937)
+++ head/devel/subversion/Makefile.common	Sat Jul 13 15:36:50 2013	(r322938)
@@ -3,7 +3,7 @@
 
 PORTNAME=	subversion
 PORTVERSION=	1.8.0
-PORTREVISION?=	2
+PORTREVISION?=	3
 CATEGORIES+=	devel
 MASTER_SITES=	${MASTER_SITE_APACHE:S/$/:main/} \
 		${MASTER_SITE_LOCAL:S/$/:book/}

Added: head/devel/subversion/files/patch-fix4383
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/subversion/files/patch-fix4383	Sat Jul 13 15:36:50 2013	(r322938)
@@ -0,0 +1,77 @@
+Index: subversion/libsvn_wc/wc_db_wcroot.c
+===================================================================
+--- subversion/libsvn_wc/wc_db_wcroot.c	(revision 1496006)
++++ subversion/libsvn_wc/wc_db_wcroot.c	(revision 1496007)
+@@ -434,6 +434,8 @@
+   svn_boolean_t always_check = FALSE;
+   int wc_format = 0;
+   const char *adm_relpath;
++  /* Non-NULL if WCROOT is found through a symlink: */
++  const char *symlink_wcroot_abspath = NULL;
+ 
+   /* ### we need more logic for finding the database (if it is located
+      ### outside of the wcroot) and then managing all of that within DB.
+@@ -611,6 +613,7 @@
+                   if (found_wcroot)
+                     break;
+ 
++                  symlink_wcroot_abspath = local_abspath;
+                   SVN_ERR(read_link_target(&local_abspath, local_abspath,
+                                            scratch_pool));
+ try_symlink_as_dir:
+@@ -632,6 +635,7 @@
+       local_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+ 
+       moved_upwards = TRUE;
++      symlink_wcroot_abspath = NULL;
+ 
+       /* Is the parent directory recorded in our hash?  */
+       found_wcroot = svn_hash_gets(db->dir_data, local_abspath);
+@@ -669,7 +673,10 @@
+          (ie. where we found it).  */
+ 
+       err = svn_wc__db_pdh_create_wcroot(wcroot,
+-                            apr_pstrdup(db->state_pool, local_abspath),
++                            apr_pstrdup(db->state_pool,
++                                        symlink_wcroot_abspath
++                                          ? symlink_wcroot_abspath
++                                          : local_abspath),
+                             sdb, wc_id, FORMAT_FROM_SDB,
+                             db->verify_format, db->enforce_empty_wq,
+                             db->state_pool, scratch_pool);
+@@ -737,7 +744,10 @@
+         }
+ 
+       SVN_ERR(svn_wc__db_pdh_create_wcroot(wcroot,
+-                            apr_pstrdup(db->state_pool, local_abspath),
++                            apr_pstrdup(db->state_pool,
++                                        symlink_wcroot_abspath
++                                          ? symlink_wcroot_abspath
++                                          : local_abspath),
+                             NULL, UNKNOWN_WC_ID, wc_format,
+                             db->verify_format, db->enforce_empty_wq,
+                             db->state_pool, scratch_pool));
+@@ -809,6 +819,7 @@
+                                              scratch_pool));
+           if (resolved_kind == svn_node_dir)
+             {
++              symlink_wcroot_abspath = original_abspath;
+               SVN_ERR(read_link_target(&local_abspath, original_abspath,
+                                        scratch_pool));
+               /* This handle was opened in this function but is not going
+@@ -826,6 +837,15 @@
+                 apr_pstrdup(db->state_pool, local_dir_abspath),
+                 *wcroot);
+ 
++  /* If the WCROOT was found through a symlink pointing at the root of
++   * the WC, its cache entry is now keyed on the link's target path.
++   * Cache the WCROOT under the symlink's path as well. Otherwise, future
++   * wcroot queries for the symlink path would construct a fresh wcroot. */
++  if (symlink_wcroot_abspath)
++    svn_hash_sets(db->dir_data,
++                  apr_pstrdup(db->state_pool, symlink_wcroot_abspath),
++                  *wcroot);
++
+   /* Did we traverse up to parent directories?  */
+   if (!moved_upwards)
+     {

Added: head/devel/subversion/files/patch-subversion--libsvn_subr--gpg_agent.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/subversion/files/patch-subversion--libsvn_subr--gpg_agent.c	Sat Jul 13 15:36:50 2013	(r322938)
@@ -0,0 +1,145 @@
+--- subversion/libsvn_subr/gpg_agent.c	2013/07/08 14:27:14	1500761
++++ subversion/libsvn_subr/gpg_agent.c	2013/07/08 14:29:04	1500762
+@@ -156,42 +156,28 @@
+   return (strncmp(buf, "OK", 2) == 0);
+ }
+ 
+-/* Implementation of svn_auth__password_get_t that retrieves the password
+-   from gpg-agent */
++
++/* Locate a running GPG Agent, and return an open file descriptor
++ * for communication with the agent in *NEW_SD. If no running agent
++ * can be found, set *NEW_SD to -1. */
+ static svn_error_t *
+-password_get_gpg_agent(svn_boolean_t *done,
+-                       const char **password,
+-                       apr_hash_t *creds,
+-                       const char *realmstring,
+-                       const char *username,
+-                       apr_hash_t *parameters,
+-                       svn_boolean_t non_interactive,
+-                       apr_pool_t *pool)
++find_running_gpg_agent(int *new_sd, apr_pool_t *pool)
+ {
+-  int sd;
++  char *buffer;
+   char *gpg_agent_info = NULL;
++  const char *socket_name = NULL;
++  const char *request = NULL;
+   const char *p = NULL;
+   char *ep = NULL;
+-  char *buffer;
+-
+-  apr_array_header_t *socket_details;
+-  const char *request = NULL;
+-  const char *cache_id = NULL;
+-  struct sockaddr_un addr;
+-  const char *tty_name;
+-  const char *tty_type;
+-  const char *lc_ctype;
+-  const char *display;
+-  const char *socket_name = NULL;
+-  svn_checksum_t *digest = NULL;
+-  char *password_prompt;
+-  char *realm_prompt;
++  int sd;
+ 
+-  *done = FALSE;
++  *new_sd = -1;
+ 
+   gpg_agent_info = getenv("GPG_AGENT_INFO");
+   if (gpg_agent_info != NULL)
+     {
++      apr_array_header_t *socket_details;
++
+       socket_details = svn_cstring_split(gpg_agent_info, ":", TRUE,
+                                          pool);
+       socket_name = APR_ARRAY_IDX(socket_details, 0, const char *);
+@@ -201,6 +187,8 @@
+ 
+   if (socket_name != NULL)
+     {
++      struct sockaddr_un addr;
++
+       addr.sun_family = AF_UNIX;
+       strncpy(addr.sun_path, socket_name, sizeof(addr.sun_path) - 1);
+       addr.sun_path[sizeof(addr.sun_path) - 1] = '\0';
+@@ -273,6 +261,44 @@
+       return SVN_NO_ERROR;
+     }
+ 
++  *new_sd = sd;
++  return SVN_NO_ERROR;
++}
++
++/* Implementation of svn_auth__password_get_t that retrieves the password
++   from gpg-agent */
++static svn_error_t *
++password_get_gpg_agent(svn_boolean_t *done,
++                       const char **password,
++                       apr_hash_t *creds,
++                       const char *realmstring,
++                       const char *username,
++                       apr_hash_t *parameters,
++                       svn_boolean_t non_interactive,
++                       apr_pool_t *pool)
++{
++  int sd;
++  const char *p = NULL;
++  char *ep = NULL;
++  char *buffer;
++  const char *request = NULL;
++  const char *cache_id = NULL;
++  const char *tty_name;
++  const char *tty_type;
++  const char *lc_ctype;
++  const char *display;
++  svn_checksum_t *digest = NULL;
++  char *password_prompt;
++  char *realm_prompt;
++
++  *done = FALSE;
++
++  SVN_ERR(find_running_gpg_agent(&sd, pool));
++  if (sd == -1)
++    return SVN_NO_ERROR;
++
++  buffer = apr_palloc(pool, BUFFER_SIZE);
++
+   /* Send TTY_NAME to the gpg-agent daemon. */
+   tty_name = getenv("GPG_TTY");
+   if (tty_name != NULL)
+@@ -388,8 +414,8 @@
+    password in GPG Agent if that's how this particular integration
+    worked.  But it isn't.  GPG Agent stores the password provided by
+    the user via the pinentry program immediately upon its provision
+-   (and regardless of its accuracy as passwords go), so there's
+-   nothing really to do here.  */
++   (and regardless of its accuracy as passwords go), so we just need
++   to check if a usable GPG Agent exists. */
+ static svn_error_t *
+ password_set_gpg_agent(svn_boolean_t *done,
+                        apr_hash_t *creds,
+@@ -400,7 +426,21 @@
+                        svn_boolean_t non_interactive,
+                        apr_pool_t *pool)
+ {
+-  *done = TRUE;
++  int sd;
++  const char *tty_name;
++
++  *done = FALSE;
++
++  SVN_ERR(find_running_gpg_agent(&sd, pool));
++  if (sd == -1)
++    return SVN_NO_ERROR;
++
++  close(sd);
++
++  /* Also ensure that GPG_TTY is set in the evironment.
++   * If it isn't set the user won't be prompted by the agent. */
++  tty_name = getenv("GPG_TTY");
++  *done = (tty_name != NULL);
+ 
+   return SVN_NO_ERROR;
+ }
_______________________________________________
svn-ports-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-ports-all
To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
Comment 3 dfilter service freebsd_committer freebsd_triage 2013-07-13 16:37:06 UTC
Author: lev
Date: Sat Jul 13 15:36:50 2013
New Revision: 322938
URL: http://svnweb.freebsd.org/changeset/ports/322938

Log:
   (1) Fix subversion-static port to use SERF.
   (2) Backport fix of issue #4383: problems with symbolic-link WC.
   (3) Backport change r1500762 (no isue # found): conflict between
       GPG Agent and other password stories.
   (4) Fix error message when Subversion is configured with BDB abd
       APR is not.
  
  PR:		ports/179807, ports/180121, ports/180121
  Submitted by:	[3] eugen@grosbein.pp.ru

Added:
  head/devel/subversion/files/patch-fix4383   (contents, props changed)
  head/devel/subversion/files/patch-subversion--libsvn_subr--gpg_agent.c   (contents, props changed)
Modified:
  head/devel/subversion-static/Makefile
  head/devel/subversion/Makefile
  head/devel/subversion/Makefile.common

Modified: head/devel/subversion-static/Makefile
==============================================================================
--- head/devel/subversion-static/Makefile	Sat Jul 13 15:33:23 2013	(r322937)
+++ head/devel/subversion-static/Makefile	Sat Jul 13 15:36:50 2013	(r322938)
@@ -3,10 +3,10 @@
 PKGNAMESUFFIX=	-static
 
 CONFLICTS_INSTALL=	${PORTNAME}-[0-9]*
-LATEST_LINK=	${PORTNAME}${PKGNAMESUFFIX}
+LATEST_LINK=		${PORTNAME}${PKGNAMESUFFIX}
 
 OPTIONS_EXCLUDE=	${OPTIONS_DEFINE}
-OPTIONS_SLAVE=	NEON STATIC FREEBSD_TEMPLATE ENHANCED_KEYWORD
+OPTIONS_SLAVE=		FREEBSD_TEMPLATE P4_STYLE_MARKERS SERF STATIC
 
 MASTERDIR=	${.CURDIR}/../subversion
 PKGMESSAGE=	${.CURDIR}/pkg-message

Modified: head/devel/subversion/Makefile
==============================================================================
--- head/devel/subversion/Makefile	Sat Jul 13 15:33:23 2013	(r322937)
+++ head/devel/subversion/Makefile	Sat Jul 13 15:36:50 2013	(r322938)
@@ -15,9 +15,10 @@ MAN8=		svnserve.8
 
 TXT_DOCS=	BUGS CHANGES COMMITTERS INSTALL README
 
-OPTIONS_DEFINE=	BDB BOOK GNOME_KEYRING KDE_KWALLET MAINTAINER_DEBUG \
-		MOD_DAV_SVN P4_STYLE_MARKERS FREEBSD_TEMPLATE SASL \
-		SERF STATIC SVNSERVE_WRAPPER TEST TOOLS \
+OPTIONS_DEFINE=	BDB BOOK DOCS GNOME_KEYRING KDE_KWALLET \
+		MAINTAINER_DEBUG MOD_DAV_SVN NLS P4_STYLE_MARKERS \
+		FREEBSD_TEMPLATE SASL SERF STATIC SVNSERVE_WRAPPER \
+		TEST TOOLS
 
 OPTIONS_DEFAULT=P4_STYLE_MARKERS FREEBSD_TEMPLATE SERF
 
@@ -212,8 +213,8 @@ pre-configure:
 	@BDB_VERSION=`${APR_APU_DIR}/${APU_CONFIG} --db-version`; \
 	if [ "$${BDB_VERSION}" != "4" -a "$${BDB_VERSION}" != "5" ] ; then \
 		${ECHO_MSG} "" ; \
-		${ECHO_MSG} 'You should build `'"${APR_PORT}' with Berkeley DB (4 or 5) support to use subversion with it." ; \
-		${ECHO_MSG} 'Please rebuild `'"${APR_PORT}' with option "'`'"${OPT_NAME}' and try again." ; \
+		${ECHO_MSG} 'You should build `'"devel/apr1' with Berkeley DB (4 or 5) support to use subversion with it." ; \
+		${ECHO_MSG} 'Please rebuild `'"devel/apr1' with option "'`'"${OPT_NAME}' and try again." ; \
 		${ECHO_MSG} "" ; \
 		${ECHO_MSG} "Or you can disable Berkeley DB support. Only 'fs' repository backend will be available." ; \
 		${ECHO_MSG} "" ; \

Modified: head/devel/subversion/Makefile.common
==============================================================================
--- head/devel/subversion/Makefile.common	Sat Jul 13 15:33:23 2013	(r322937)
+++ head/devel/subversion/Makefile.common	Sat Jul 13 15:36:50 2013	(r322938)
@@ -3,7 +3,7 @@
 
 PORTNAME=	subversion
 PORTVERSION=	1.8.0
-PORTREVISION?=	2
+PORTREVISION?=	3
 CATEGORIES+=	devel
 MASTER_SITES=	${MASTER_SITE_APACHE:S/$/:main/} \
 		${MASTER_SITE_LOCAL:S/$/:book/}

Added: head/devel/subversion/files/patch-fix4383
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/subversion/files/patch-fix4383	Sat Jul 13 15:36:50 2013	(r322938)
@@ -0,0 +1,77 @@
+Index: subversion/libsvn_wc/wc_db_wcroot.c
+===================================================================
+--- subversion/libsvn_wc/wc_db_wcroot.c	(revision 1496006)
++++ subversion/libsvn_wc/wc_db_wcroot.c	(revision 1496007)
+@@ -434,6 +434,8 @@
+   svn_boolean_t always_check = FALSE;
+   int wc_format = 0;
+   const char *adm_relpath;
++  /* Non-NULL if WCROOT is found through a symlink: */
++  const char *symlink_wcroot_abspath = NULL;
+ 
+   /* ### we need more logic for finding the database (if it is located
+      ### outside of the wcroot) and then managing all of that within DB.
+@@ -611,6 +613,7 @@
+                   if (found_wcroot)
+                     break;
+ 
++                  symlink_wcroot_abspath = local_abspath;
+                   SVN_ERR(read_link_target(&local_abspath, local_abspath,
+                                            scratch_pool));
+ try_symlink_as_dir:
+@@ -632,6 +635,7 @@
+       local_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+ 
+       moved_upwards = TRUE;
++      symlink_wcroot_abspath = NULL;
+ 
+       /* Is the parent directory recorded in our hash?  */
+       found_wcroot = svn_hash_gets(db->dir_data, local_abspath);
+@@ -669,7 +673,10 @@
+          (ie. where we found it).  */
+ 
+       err = svn_wc__db_pdh_create_wcroot(wcroot,
+-                            apr_pstrdup(db->state_pool, local_abspath),
++                            apr_pstrdup(db->state_pool,
++                                        symlink_wcroot_abspath
++                                          ? symlink_wcroot_abspath
++                                          : local_abspath),
+                             sdb, wc_id, FORMAT_FROM_SDB,
+                             db->verify_format, db->enforce_empty_wq,
+                             db->state_pool, scratch_pool);
+@@ -737,7 +744,10 @@
+         }
+ 
+       SVN_ERR(svn_wc__db_pdh_create_wcroot(wcroot,
+-                            apr_pstrdup(db->state_pool, local_abspath),
++                            apr_pstrdup(db->state_pool,
++                                        symlink_wcroot_abspath
++                                          ? symlink_wcroot_abspath
++                                          : local_abspath),
+                             NULL, UNKNOWN_WC_ID, wc_format,
+                             db->verify_format, db->enforce_empty_wq,
+                             db->state_pool, scratch_pool));
+@@ -809,6 +819,7 @@
+                                              scratch_pool));
+           if (resolved_kind == svn_node_dir)
+             {
++              symlink_wcroot_abspath = original_abspath;
+               SVN_ERR(read_link_target(&local_abspath, original_abspath,
+                                        scratch_pool));
+               /* This handle was opened in this function but is not going
+@@ -826,6 +837,15 @@
+                 apr_pstrdup(db->state_pool, local_dir_abspath),
+                 *wcroot);
+ 
++  /* If the WCROOT was found through a symlink pointing at the root of
++   * the WC, its cache entry is now keyed on the link's target path.
++   * Cache the WCROOT under the symlink's path as well. Otherwise, future
++   * wcroot queries for the symlink path would construct a fresh wcroot. */
++  if (symlink_wcroot_abspath)
++    svn_hash_sets(db->dir_data,
++                  apr_pstrdup(db->state_pool, symlink_wcroot_abspath),
++                  *wcroot);
++
+   /* Did we traverse up to parent directories?  */
+   if (!moved_upwards)
+     {

Added: head/devel/subversion/files/patch-subversion--libsvn_subr--gpg_agent.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/subversion/files/patch-subversion--libsvn_subr--gpg_agent.c	Sat Jul 13 15:36:50 2013	(r322938)
@@ -0,0 +1,145 @@
+--- subversion/libsvn_subr/gpg_agent.c	2013/07/08 14:27:14	1500761
++++ subversion/libsvn_subr/gpg_agent.c	2013/07/08 14:29:04	1500762
+@@ -156,42 +156,28 @@
+   return (strncmp(buf, "OK", 2) == 0);
+ }
+ 
+-/* Implementation of svn_auth__password_get_t that retrieves the password
+-   from gpg-agent */
++
++/* Locate a running GPG Agent, and return an open file descriptor
++ * for communication with the agent in *NEW_SD. If no running agent
++ * can be found, set *NEW_SD to -1. */
+ static svn_error_t *
+-password_get_gpg_agent(svn_boolean_t *done,
+-                       const char **password,
+-                       apr_hash_t *creds,
+-                       const char *realmstring,
+-                       const char *username,
+-                       apr_hash_t *parameters,
+-                       svn_boolean_t non_interactive,
+-                       apr_pool_t *pool)
++find_running_gpg_agent(int *new_sd, apr_pool_t *pool)
+ {
+-  int sd;
++  char *buffer;
+   char *gpg_agent_info = NULL;
++  const char *socket_name = NULL;
++  const char *request = NULL;
+   const char *p = NULL;
+   char *ep = NULL;
+-  char *buffer;
+-
+-  apr_array_header_t *socket_details;
+-  const char *request = NULL;
+-  const char *cache_id = NULL;
+-  struct sockaddr_un addr;
+-  const char *tty_name;
+-  const char *tty_type;
+-  const char *lc_ctype;
+-  const char *display;
+-  const char *socket_name = NULL;
+-  svn_checksum_t *digest = NULL;
+-  char *password_prompt;
+-  char *realm_prompt;
++  int sd;
+ 
+-  *done = FALSE;
++  *new_sd = -1;
+ 
+   gpg_agent_info = getenv("GPG_AGENT_INFO");
+   if (gpg_agent_info != NULL)
+     {
++      apr_array_header_t *socket_details;
++
+       socket_details = svn_cstring_split(gpg_agent_info, ":", TRUE,
+                                          pool);
+       socket_name = APR_ARRAY_IDX(socket_details, 0, const char *);
+@@ -201,6 +187,8 @@
+ 
+   if (socket_name != NULL)
+     {
++      struct sockaddr_un addr;
++
+       addr.sun_family = AF_UNIX;
+       strncpy(addr.sun_path, socket_name, sizeof(addr.sun_path) - 1);
+       addr.sun_path[sizeof(addr.sun_path) - 1] = '\0';
+@@ -273,6 +261,44 @@
+       return SVN_NO_ERROR;
+     }
+ 
++  *new_sd = sd;
++  return SVN_NO_ERROR;
++}
++
++/* Implementation of svn_auth__password_get_t that retrieves the password
++   from gpg-agent */
++static svn_error_t *
++password_get_gpg_agent(svn_boolean_t *done,
++                       const char **password,
++                       apr_hash_t *creds,
++                       const char *realmstring,
++                       const char *username,
++                       apr_hash_t *parameters,
++                       svn_boolean_t non_interactive,
++                       apr_pool_t *pool)
++{
++  int sd;
++  const char *p = NULL;
++  char *ep = NULL;
++  char *buffer;
++  const char *request = NULL;
++  const char *cache_id = NULL;
++  const char *tty_name;
++  const char *tty_type;
++  const char *lc_ctype;
++  const char *display;
++  svn_checksum_t *digest = NULL;
++  char *password_prompt;
++  char *realm_prompt;
++
++  *done = FALSE;
++
++  SVN_ERR(find_running_gpg_agent(&sd, pool));
++  if (sd == -1)
++    return SVN_NO_ERROR;
++
++  buffer = apr_palloc(pool, BUFFER_SIZE);
++
+   /* Send TTY_NAME to the gpg-agent daemon. */
+   tty_name = getenv("GPG_TTY");
+   if (tty_name != NULL)
+@@ -388,8 +414,8 @@
+    password in GPG Agent if that's how this particular integration
+    worked.  But it isn't.  GPG Agent stores the password provided by
+    the user via the pinentry program immediately upon its provision
+-   (and regardless of its accuracy as passwords go), so there's
+-   nothing really to do here.  */
++   (and regardless of its accuracy as passwords go), so we just need
++   to check if a usable GPG Agent exists. */
+ static svn_error_t *
+ password_set_gpg_agent(svn_boolean_t *done,
+                        apr_hash_t *creds,
+@@ -400,7 +426,21 @@
+                        svn_boolean_t non_interactive,
+                        apr_pool_t *pool)
+ {
+-  *done = TRUE;
++  int sd;
++  const char *tty_name;
++
++  *done = FALSE;
++
++  SVN_ERR(find_running_gpg_agent(&sd, pool));
++  if (sd == -1)
++    return SVN_NO_ERROR;
++
++  close(sd);
++
++  /* Also ensure that GPG_TTY is set in the evironment.
++   * If it isn't set the user won't be prompted by the agent. */
++  tty_name = getenv("GPG_TTY");
++  *done = (tty_name != NULL);
+ 
+   return SVN_NO_ERROR;
+ }
_______________________________________________
svn-ports-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-ports-all
To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
Comment 4 Lev A. Serebryakov freebsd_committer freebsd_triage 2013-07-13 16:40:52 UTC
Hello, Bug-followup.

  I could not reproduce bug wirh `-lm' on FreeBSD 9, it looks like FreeBSD
 10-specific problem.
  Anyway, could you report this to devel/apr1 maintainers, as it looks like
 apr problem, not subversion-specific -- these libraries are output of
 `apr-1-config' command.

  SERF problem fixed & commited, thanks!

-- 
// Black Lion AKA Lev Serebryakov <lev@FreeBSD.org>
Comment 5 Lev A. Serebryakov freebsd_committer freebsd_triage 2013-07-13 16:51:09 UTC
State Changed
From-To: open->feedback


Submitter asked to re-check report and, maybe, send it to other port.
Comment 6 Trond Endrestøl 2013-07-14 08:57:35 UTC
On Sat, 13 Jul 2013 15:51-0000, lev@FreeBSD.org wrote:

> Submitter asked to re-check report and, maybe, send it to other port.

One thing is surely strange: the very same devel/apr1 links perfectly 
with the dynamically linked subversion, but not with the statically 
linked subversion unless we also link libm.

If you care to wade through long reams of script(1) output, I have a 
couple of text files available at this URL:

http://ximalas.info/~trond/subversion-static-vs-dynamic/

Granted the 10.0-CURRENT is the research vessel of FreeBSD, this 
hiccup with devel/subversion-static, devel/apr1 and libm probably 
won't matter until 10.0 becomes ready for production use.

-- 
----------------------------------------------------------------------
Trond Endrestøl                     |     Trond.Endrestol@ximalas.info
ACM, NAS, NUUG, SAGE, USENIX        |   FreeBSD 9.1-S & re-Alpine 2.03
Comment 7 dfilter service freebsd_committer freebsd_triage 2014-02-15 12:56:30 UTC
Author: lev
Date: Sat Feb 15 12:56:16 2014
New Revision: 344380
URL: http://svnweb.freebsd.org/changeset/ports/344380
QAT: https://qat.redports.org/buildarchive/r344380/

Log:
   (1) Make possible to build subversion with db6.
   (2) Fix and STAGEfy subversion-static.
   (3) Allow not to override/deinstall modified svnserve script if it is used.
  
  PR:		ports/185005, ports/180121, ports/181340, ports/186446, ports/186764

Modified:
  head/devel/subversion-static/Makefile
  head/devel/subversion/Makefile
  head/devel/subversion/Makefile.common
  head/devel/subversion/pkg-plist

Modified: head/devel/subversion-static/Makefile
==============================================================================
--- head/devel/subversion-static/Makefile	Sat Feb 15 12:50:46 2014	(r344379)
+++ head/devel/subversion-static/Makefile	Sat Feb 15 12:56:16 2014	(r344380)
@@ -11,5 +11,13 @@ OPTIONS_SLAVE=		FREEBSD_TEMPLATE P4_STYL
 MASTERDIR=	${.CURDIR}/../subversion
 PKGMESSAGE=	${.CURDIR}/pkg-message
 
-NO_STAGE=	yes
+# Set these by hands, as options are undefined
+PLIST_SUB+=	TOOLS="@comment " \
+		SVNSERVE_WRAPPER="@comment " \
+		GNOME_KEYRING="@comment " \
+		KDE_KWALLET="@comment " \
+		BDB="@comment " \
+		MOD_DAV_SVN="@comment " \
+		NLS="@comment "
+
 .include "${MASTERDIR}/Makefile"

Modified: head/devel/subversion/Makefile
==============================================================================
--- head/devel/subversion/Makefile	Sat Feb 15 12:50:46 2014	(r344379)
+++ head/devel/subversion/Makefile	Sat Feb 15 12:56:16 2014	(r344380)
@@ -62,8 +62,10 @@ EXTRA_PATCHES+=	${PATCHDIR}/extra-patch-
 
 .if ${PORT_OPTIONS:MSVNSERVE_WRAPPER}
 SUB_LIST+=	SVNSERVE_BIN_EXT=".bin"
+PLIST_SUB+=	NO_SVNSERVE_WRAPPER="@comment "
 .else
 SUB_LIST+=	SVNSERVE_BIN_EXT=""
+PLIST_SUB+=	NO_SVNSERVE_WRAPPER=""
 .endif
 
 .if ${PORT_OPTIONS:MMOD_DAV_SVN}
@@ -87,6 +89,7 @@ USES+=			gettext:build
 .  endif
 .  if ${PORT_OPTIONS:MBDB}
 BDB_BUILD_DEPENDS=	yes
+.else
 .  endif
 OLD_LIB_DEPENDS:=	${LIB_DEPENDS:S!^!${LOCALBASE}/lib/!:C!(\.so|\.[0-9]+)?:!.a:!}
 BUILD_DEPENDS+=		${OLD_LIB_DEPENDS}
@@ -96,6 +99,12 @@ PLIST_SUB+=		DYNAMIC_ENABLED="@comment "
 PLIST_SUB+=		DYNAMIC_ENABLED=""
 .endif
 
+.if ${PORT_OPTIONS:MBDB}
+CONFIGURE_ARGS+=	--enable-bdb6
+.else
+CONFIGURE_ARGS+=	--without-berkeley-db
+.endif
+
 .if make(repository)
 WITH_REPOSITORY_CREATION=	yes
 .endif
@@ -193,12 +202,10 @@ post-install:	${MKREPOS_TARGET}
 .endif
 	@${MKDIR} ${STAGEDIR}${DATADIR}
 	(cd ${WRKSRC}/tools.examples && ${TAR} --exclude '*.in' -cf - * | ${TAR} -C ${STAGEDIR}${DATADIR} -xof - )
-
 	@${MKDIR} ${STAGEDIR}${DOCSDIR}
 	${INSTALL_MAN} ${PORTDOCS:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR}
-
 .if ${PORT_OPTIONS:MSVNSERVE_WRAPPER}
-	@${INSTALL_SCRIPT} ${FILESDIR}/svnserve.wrapper ${STAGEDIR}${PREFIX}/bin/svnserve
+	@${INSTALL_SCRIPT} ${FILESDIR}/svnserve.wrapper ${STAGEDIR}${PREFIX}/bin/svnserve.sample
 .endif
 
 # ===============================================================================

Modified: head/devel/subversion/Makefile.common
==============================================================================
--- head/devel/subversion/Makefile.common	Sat Feb 15 12:50:46 2014	(r344379)
+++ head/devel/subversion/Makefile.common	Sat Feb 15 12:56:16 2014	(r344380)
@@ -3,7 +3,7 @@
 
 PORTNAME=	subversion
 PORTVERSION=	1.8.5
-PORTREVISION?=	1
+PORTREVISION?=	2
 CATEGORIES+=	devel
 MASTER_SITES=	${MASTER_SITE_APACHE}
 DIST_SUBDIR=	subversion18

Modified: head/devel/subversion/pkg-plist
==============================================================================
--- head/devel/subversion/pkg-plist	Sat Feb 15 12:50:46 2014	(r344379)
+++ head/devel/subversion/pkg-plist	Sat Feb 15 12:56:16 2014	(r344380)
@@ -13,8 +13,11 @@ bin/svnlook
 bin/svnmucc
 %%TOOLS%%bin/svnraisetreeconflict
 bin/svnrdump
-bin/svnserve
+%%NO_SVNSERVE_WRAPPER%%bin/svnserve
+%%SVNSERVE_WRAPPER%%@unexec if cmp -s %D/bin/svnserve.sample %D/bin/svnserve; then rm -r %D/bin/svnserve; fi
 %%SVNSERVE_WRAPPER%%bin/svnserve.bin
+%%SVNSERVE_WRAPPER%%bin/svnserve.sample
+%%SVNSERVE_WRAPPER%%@exec if [ ! -f %D/bin/svnserve ] ; then cp -p %D/%F %B/bin/svnserve; fi
 bin/svnsync
 bin/svnversion
 include/subversion-1/mod_authz_svn.h
_______________________________________________
svn-ports-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-ports-all
To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
Comment 8 Lev A. Serebryakov freebsd_committer freebsd_triage 2014-02-15 12:57:03 UTC
State Changed
From-To: feedback->closed


Fixed