Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Feb 2006 16:41:59 +0100 (CET)
From:      Jean-Yves Lefort <jylefort@FreeBSD.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/93709: Update port: games/eboard (add timeseal support)
Message-ID:  <20060222154159.AAD44C181@jsite.lefort.net>
Resent-Message-ID: <200602221550.k1MFo3aU016257@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         93709
>Category:       ports
>Synopsis:       Update port: games/eboard (add timeseal support)
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Wed Feb 22 15:50:02 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Jean-Yves Lefort
>Release:        FreeBSD 6.0-RELEASE i386
>Organization:
>Environment:
System: FreeBSD jsite.lefort.net 6.0-RELEASE FreeBSD 6.0-RELEASE #0: Sat Feb 11 20:20:04 CET 2006 jylefort@jsite.lefort.net:/usr/obj/usr/src/sys/JSITE i386
>Description:
- Add timeseal support
- Take maintainership?
>How-To-Repeat:
>Fix:
diff -ruN /usr/ports/games/eboard/Makefile eboard/Makefile
--- /usr/ports/games/eboard/Makefile	Sat Feb 11 03:00:35 2006
+++ eboard/Makefile	Tue Feb 21 11:40:57 2006
@@ -7,16 +7,18 @@
 
 PORTNAME=	eboard
 PORTVERSION=	0.9.5
-PORTREVISION=	2
+PORTREVISION=	3
 EXTRAS=		1pl2 2
 CATEGORIES=	games
 MASTER_SITES=	${MASTER_SITE_SOURCEFORGE}
 MASTER_SITE_SUBDIR=	${PORTNAME}
 DISTFILES=	${DISTNAME}${EXTRACT_SUFX} eboard-extras-1pl2.tar.gz eboard-extras-2.tar.gz
 
-MAINTAINER=	petef@FreeBSD.org
+MAINTAINER=	jylefort@FreeBSD.org
 COMMENT=	GTK+ chess board interface (mainly for FICS and chessd)
 
+RUN_DEPENDS=	timeseal:${PORTSDIR}/games/timeseal
+
 HAS_CONFIGURE=	yes
 USE_GNOME=	imlib
 USE_REINPLACE=	yes
@@ -41,6 +43,7 @@
 		${WRKSRC}/configure
 
 post-install:
+	${LN} -sf ${LOCALBASE}/bin/timeseal ${DATADIR}/timeseal.FreeBSD
 .if !defined(NOPORTDOCS)
 	@${MKDIR} ${DOCSDIR}
 	${INSTALL_DATA} ${WRKSRC}/README ${DOCSDIR}
diff -ruN /usr/ports/games/eboard/files/patch-network.cc eboard/files/patch-network.cc
--- /usr/ports/games/eboard/files/patch-network.cc	Thu Jan  1 01:00:00 1970
+++ eboard/files/patch-network.cc	Wed Feb 22 16:34:49 2006
@@ -0,0 +1,56 @@
+--- network.cc.orig	Thu Nov 27 00:48:49 2003
++++ network.cc	Wed Feb 22 16:33:40 2006
+@@ -554,6 +554,7 @@
+   strcpy(HostName,"local pipe");
+   sprintf(HostAddress,"pipe[%d,%d]",pin,pout);
+   Quiet=0;
++  use_execve=0;
+ }
+ 
+ void PipeConnection::init() {
+@@ -564,6 +565,7 @@
+   strcpy(HostAddress,"unknown");
+   memset(HelperBin,0,512);
+   Quiet=0;
++  use_execve=0;
+   handshake.erase();
+ }
+ 
+@@ -594,6 +596,25 @@
+   Port=port;
+   strncpy(HostName,host,128);
+ 
++  // Special handling for timeseal on FreeBSD:
++  //
++  // On FreeBSD, the games/timeseal port provides an a.out timeseal
++  // binary. However, a.out support is disabled by default on FreeBSD
++  // >= 5.x. If the a.out kernel module is not loaded, or if a.out
++  // support is not compiled into the kernel, execvp()ing timeseal
++  // will not return (because it fallbacks to the shell when execve()
++  // returns NOEXEC): eboard will not notice the failure (in
++  // PipeConnection::open()) and will therefore not fallback to a
++  // direct connection.
++  //
++  // We solve the problem by executing timeseal with execve(), which
++  // will fail if a.out support is not available. Note that unlike
++  // execvp(), execve() does not search for the program in the path,
++  // but this is not a problem since eboard uses the absolute path to
++  // timeseal.
++  if (! strcmp(helperbin, "timeseal"))
++    use_execve = 1;
++
+   // build helper path
+   if (helpersuffix)
+     sprintf(z,"%s.%s",helperbin,helpersuffix);
+@@ -702,7 +723,10 @@
+     dup2(1,2);
+ 
+     setpgid(getpid(),0); // to broadcast SIGKILL later
+-    execvp(HelperBin,arguments);
++    if (use_execve)
++      execve(HelperBin,arguments,NULL);
++    else
++      execvp(HelperBin,arguments);
+     write(1,"exec failed\n",12);
+     global.debug("exec failed",HelperBin);
+     _exit(2); // eek
diff -ruN /usr/ports/games/eboard/files/patch-network.h eboard/files/patch-network.h
--- /usr/ports/games/eboard/files/patch-network.h	Thu Jan  1 01:00:00 1970
+++ eboard/files/patch-network.h	Wed Feb 22 16:34:59 2006
@@ -0,0 +1,10 @@
+--- network.h.orig	Thu Nov 27 00:48:49 2003
++++ network.h	Wed Feb 22 16:22:04 2006
+@@ -229,6 +229,7 @@
+   int  pid;
+   int  toid; // timeout
+   string handshake;
++  int  use_execve;
+ };
+ 
+ class FallBackConnection : public NetConnection {
diff -ruN /usr/ports/games/eboard/pkg-plist eboard/pkg-plist
--- /usr/ports/games/eboard/pkg-plist	Sat Feb 11 03:00:35 2006
+++ eboard/pkg-plist	Tue Feb 21 11:39:55 2006
@@ -70,6 +70,7 @@
 share/eboard/plastic.png
 share/eboard/themeconf.extras1
 share/eboard/themeconf.extras2
+share/eboard/timeseal.FreeBSD
 share/pixmaps/eboard.xpm
 @dirrm share/eboard
 %%PORTDOCS%%@dirrm %%DOCSDIR%%
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060222154159.AAD44C181>