git: 8548b1e5ed54 - main - x11/xfishtank: upgrade to 2.5
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 30 Sep 2024 13:31:40 UTC
The branch main has been updated by rodrigo:
URL: https://cgit.FreeBSD.org/ports/commit/?id=8548b1e5ed548946a3e380b63330bd236e03d97f
commit 8548b1e5ed548946a3e380b63330bd236e03d97f
Author: Rodrigo Osorio <rodrigo@FreeBSD.org>
AuthorDate: 2024-09-12 12:31:53 +0000
Commit: Rodrigo Osorio <rodrigo@FreeBSD.org>
CommitDate: 2024-09-30 13:28:53 +0000
x11/xfishtank: upgrade to 2.5
Change upstream to use sources from debian package.
Add configuration to use xfishtank with xscreensaver
and made a hard link of xfishtank into xcreensaver hack dir.
PR: 281458
Approved by: <kidon@posteo.de> (maintainer)
---
x11/xfishtank/Makefile | 28 ++-
x11/xfishtank/distinfo | 5 +-
x11/xfishtank/files/patch-Imakefile | 22 +--
x11/xfishtank/files/patch-makeh.c | 11 ++
x11/xfishtank/files/patch-medcut.c | 166 ++++++++++++++++++
x11/xfishtank/files/patch-medcut.h | 12 ++
x11/xfishtank/files/patch-xfish.c | 323 -----------------------------------
x11/xfishtank/files/xfishtank.xml.in | 24 +++
x11/xfishtank/pkg-plist | 6 +
9 files changed, 250 insertions(+), 347 deletions(-)
diff --git a/x11/xfishtank/Makefile b/x11/xfishtank/Makefile
index a99561d21b2c..b4dd79c938c5 100644
--- a/x11/xfishtank/Makefile
+++ b/x11/xfishtank/Makefile
@@ -1,18 +1,32 @@
PORTNAME= xfishtank
-PORTVERSION= 2.2
-PORTREVISION= 2
+PORTVERSION= 2.5
CATEGORIES= x11
-MASTER_SITES= http://cyber.dabamos.de/pub/distfiles/
+MASTER_SITES= DEBIAN
+MASTER_SITE_SUBDIR= pool/main/x/xfishtank/
+DISTNAME= xfishtank_2.5.orig
MAINTAINER= kidon@posteo.de
COMMENT= Make fish swim in the background of your screen
+WWW= https://sources.debian.org/src/xfishtank/2.5-1/README
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+LIB_DEPENDS= libImlib2.so:graphics/imlib2
-PLIST_FILES= bin/xfishtank
USES= imake xorg
USE_XORG= x11 xext
-WRKSRC= ${WRKDIR}/xfishtank2.0
+WRKSRC= ${WRKDIR}/xfishtank-2.5
+
+XSSHACKSDIR= bin/xscreensaver-hacks
+XSSCONFDIR= share/xscreensaver/config
+
+pre-build:
+ ${CC} ${WRKSRC}/makeh.c -o ${WRKSRC}/makeh
-post-patch:
- cd ${WRKDIR}/xfishtank2.0; make clean
+post-install:
+ ${MKDIR} ${STAGEDIR}/${PREFIX}/${XSSHACKSDIR} ${STAGEDIR}/${PREFIX}/${XSSCONFDIR}
+ ${CP} ${PATCHDIR}/${PORTNAME}.xml.in ${STAGEDIR}/${PREFIX}/${XSSCONFDIR}/${PORTNAME}.xml
+ (cd ${STAGEDIR}/${PREFIX}/${XSSHACKSDIR} ; ${LN} -f ${STAGEDIR}/${PREFIX}/bin/${PORTNAME} ${STAGEDIR}/${PREFIX}/${XSSHACKSDIR}/)
.include <bsd.port.mk>
diff --git a/x11/xfishtank/distinfo b/x11/xfishtank/distinfo
index a59a8729a7f5..69a550299e53 100644
--- a/x11/xfishtank/distinfo
+++ b/x11/xfishtank/distinfo
@@ -1,2 +1,3 @@
-SHA256 (xfishtank-2.2.tar.gz) = 4391228c074fccd73a9ea8332e090e92d79ba27f9e63693035f392387d03122c
-SIZE (xfishtank-2.2.tar.gz) = 360031
+TIMESTAMP = 1726130557
+SHA256 (xfishtank_2.5.orig.tar.gz) = bd8ce3c4e7adb0e62b294de307972c0d5e2a442b094c178a3be084e3e26a08e0
+SIZE (xfishtank_2.5.orig.tar.gz) = 153554
diff --git a/x11/xfishtank/files/patch-Imakefile b/x11/xfishtank/files/patch-Imakefile
index a9221720b1f4..db6f6e8f04ac 100644
--- a/x11/xfishtank/files/patch-Imakefile
+++ b/x11/xfishtank/files/patch-Imakefile
@@ -1,17 +1,9 @@
---- Imakefile.orig 1992-12-16 00:04:35 UTC
+--- Imakefile.orig 2024-09-12 10:01:24 UTC
+++ Imakefile
-@@ -2,12 +2,12 @@
- LOCAL_LIBRARIES = $(XLIB)
+@@ -1,5 +1,5 @@
+ EXTRA_INCLUDES = -I./fishmaps
+-LOCAL_LIBRARIES = $(XLIB)
++LOCAL_LIBRARIES = $(XLIB) -L /usr/local/lib
DEPLIBS = $(DEPXLIB)
- SYS_LIBRARIES = -lm
-- CDEBUGFLAGS = -g
-+XCOMM CDEBUGFLAGS = -g
-
- SRCS = xfish.c medcut.c read.c gifread.c
- OBJS = xfish.o medcut.o read.o gifread.o
-
--ComplexProgramTarget(xfishtank)
-+ComplexProgramTargetNoMan(xfishtank)
-
- xfishy.h: makeh FishList
- ./makeh > xfishy.h
+ SYS_LIBRARIES = -lImlib2 -lm
+ MANSRCSUFFIX = 1x
diff --git a/x11/xfishtank/files/patch-makeh.c b/x11/xfishtank/files/patch-makeh.c
new file mode 100644
index 000000000000..d9340a12e5f3
--- /dev/null
+++ b/x11/xfishtank/files/patch-makeh.c
@@ -0,0 +1,11 @@
+--- makeh.c.orig 2024-09-12 09:44:33 UTC
++++ makeh.c
+@@ -16,7 +16,7 @@
+ printf("};\n\n");
+ }
+
+-main()
++int main()
+ {
+ FILE *fp;
+ char prefix[BUFSIZ];
diff --git a/x11/xfishtank/files/patch-medcut.c b/x11/xfishtank/files/patch-medcut.c
new file mode 100644
index 000000000000..e958b7c739fa
--- /dev/null
+++ b/x11/xfishtank/files/patch-medcut.c
@@ -0,0 +1,166 @@
+--- medcut.c.orig 2013-08-09 11:59:28 UTC
++++ medcut.c
+@@ -40,10 +40,8 @@
+ int NCells;
+ struct color_rec *Tptr;
+
+-
+ void
+-InitMinMax(boxnum)
+-int boxnum;
++InitMinMax(int boxnum)
+ {
+ C_boxes[boxnum].min_pix[RED] = 256;
+ C_boxes[boxnum].max_pix[RED] = 0;
+@@ -55,8 +53,7 @@
+
+
+ struct color_rec *
+-AddHash(red, green, blue)
+-int red, green, blue;
++AddHash(int red, int green, int blue)
+ {
+ int lum;
+
+@@ -78,9 +75,7 @@
+
+
+ void
+-AddColor(cptr, boxnum)
+-struct color_rec *cptr;
+-int boxnum;
++AddColor(struct color_rec *cptr, int boxnum)
+ {
+ struct color_rec *ptr;
+
+@@ -107,9 +102,7 @@
+
+
+ void
+-CountColors(data, colrs)
+-unsigned char *data;
+-struct colr_data *colrs;
++CountColors(unsigned char *data, struct colr_data *colrs)
+ {
+ unsigned char *dptr;
+ register int i, j;
+@@ -142,8 +135,7 @@
+
+
+ int
+-FindTarget(tptr)
+-int *tptr;
++FindTarget(int *tptr)
+ {
+ int range, i, indx;
+
+@@ -175,8 +167,7 @@
+
+
+ void
+-SplitBox(boxnum, color_indx)
+-int boxnum, color_indx;
++SplitBox(int boxnum,int color_indx)
+ {
+ struct color_rec *low, *high;
+ struct color_rec *data;
+@@ -245,8 +236,7 @@
+
+
+ void
+-SplitColors(e_cnt)
+-int e_cnt;
++SplitColors(int e_cnt)
+ {
+ if (ColorCnt < e_cnt) {
+ int i;
+@@ -279,8 +269,7 @@
+ * Colors passed in 0-65535, internally are 0-255
+ */
+ void
+-ConvertColor(rp, gp, bp)
+-int *rp, *gp, *bp;
++ConvertColor(int *rp, int *gp, int *bp)
+ {
+ struct color_rec *cptr;
+ register struct color_rec *hash_ptr;
+@@ -321,9 +310,7 @@
+
+
+ void
+-ConvertData(data, colrs)
+-unsigned char *data;
+-struct colr_data *colrs;
++ConvertData( unsigned char *data, struct colr_data *colrs)
+ {
+ unsigned char *dptr;
+ register int i, j;
+@@ -349,9 +336,7 @@
+
+
+ void
+-PrintColormap(e_cnt, colrs)
+-int e_cnt;
+-struct colr_data *colrs;
++PrintColormap( int e_cnt, struct colr_data *colrs)
+ {
+ int i;
+
+@@ -382,11 +367,7 @@
+
+
+ void
+-MedianCut(data, w, h, colrs, start_cnt, end_cnt)
+-unsigned char *data;
+-int *w, *h;
+-struct colr_data *colrs;
+-int start_cnt, end_cnt;
++MedianCut(unsigned char *data, int *w, int *h, struct colr_data *colrs, int start_cnt, int end_cnt)
+ {
+ int i;
+
+@@ -440,10 +421,7 @@
+ * 0-255.
+ */
+ void
+-MedianCount(data, w, h, colrs)
+-unsigned char *data;
+-int w, h;
+-struct colr_data *colrs;
++MedianCount( unsigned char *data, int w, int h, struct colr_data *colrs)
+ {
+ unsigned char *dptr;
+ register int i, j;
+@@ -472,8 +450,7 @@
+
+
+ void
+-MedianSplit(end_cnt)
+-int end_cnt;
++MedianSplit(int end_cnt)
+ {
+ C_boxes[0].count = ColorCnt;
+ SplitColors(end_cnt);
+@@ -481,10 +458,7 @@
+
+
+ void
+-MedianConvert(data, w, h, colrs)
+-unsigned char *data;
+-int w, h;
+-struct colr_data *colrs;
++MedianConvert(unsigned char *data, int w, int h, struct colr_data *colrs)
+ {
+ Width = w;
+ Height = h;
+@@ -493,9 +467,7 @@
+
+
+ void
+-MedianMerge(colrs, end_cnt)
+-struct colr_data *colrs;
+-int end_cnt;
++MedianMerge(struct colr_data *colrs, int end_cnt)
+ {
+ int i;
+
diff --git a/x11/xfishtank/files/patch-medcut.h b/x11/xfishtank/files/patch-medcut.h
new file mode 100644
index 000000000000..a4f1b66bf6c4
--- /dev/null
+++ b/x11/xfishtank/files/patch-medcut.h
@@ -0,0 +1,12 @@
+--- medcut.h.orig 2013-08-09 11:59:28 UTC
++++ medcut.h
+@@ -4,6 +4,6 @@
+ };
+
+ extern void MedianInit();
+-extern void MedianCount();
+-extern void MedianSplit();
+-extern void ConvertColor();
++extern void MedianCount( unsigned char *data, int w, int h, struct colr_data *colrs);
++extern void MedianSplit(int end_cnt);
++extern void ConvertColor(int *rp, int *gp, int *bp);
diff --git a/x11/xfishtank/files/patch-xfish.c b/x11/xfishtank/files/patch-xfish.c
deleted file mode 100644
index 0b1d735df38c..000000000000
--- a/x11/xfishtank/files/patch-xfish.c
+++ /dev/null
@@ -1,323 +0,0 @@
---- xfish.c.orig 1992-12-17 21:26:17 UTC
-+++ xfish.c
-@@ -11,6 +11,8 @@
-
- * Ported to monocrome by Jonathan Greenblatt (jonnyg@rover.umd.edu)
-
-+ * 05/02/1996 Added TrueColor support by TJ Phan (phan@aur.alcatel.com)
-+
- TODO:
-
- Parameter parsing needs to be redone.
-@@ -46,13 +48,24 @@
-
- /* constants are based on rand(3C) returning an integer between 0 and 32767 */
-
--#if defined(ultrix) || defined(sun) || defined(linux)
-+#if defined(ultrix) || defined(sun)
- #define RAND_I_1_16 134217728
- #define RAND_F_1_8 268435455.875
- #define RAND_I_1_4 536870911
- #define RAND_I_1_2 1073741823
- #define RAND_I_3_4 1610612735
- #define RAND_F_MAX 2147483647.0
-+#else
-+#if defined(__FreeBSD__) || defined(__OpenBSD__)
-+#include <stdlib.h>
-+#include <unistd.h>
-+
-+#define RAND_I_1_16 (RAND_MAX>>4)
-+#define RAND_F_1_8 ((float)(RAND_MAX>>3))
-+#define RAND_I_1_4 (RAND_MAX>>2)
-+#define RAND_I_1_2 (RAND_MAX>>1)
-+#define RAND_I_3_4 ((RAND_MAX>>2)*3)
-+#define RAND_F_MAX ((float)RAND_MAX)
- #else
- #define RAND_I_1_16 2048
- #define RAND_F_1_8 4096.0
-@@ -61,8 +74,8 @@
- #define RAND_I_3_4 24575
- #define RAND_F_MAX 32767.0
- #endif
-+#endif
-
--
- extern unsigned char *ReadBitmap();
-
-
-@@ -850,6 +863,10 @@ putbubble(b, s, c)
- * Find the closest color by allocating it, or picking an already allocated
- * color
- */
-+Visual (*visual_info) = NULL;
-+int r_mask, g_mask, b_mask;
-+int r_shift=0, g_shift=0, b_shift=0;
-+int r_bits=0, g_bits=0, b_bits=0;
- void
- FindColor(Dpy, colormap, colr)
- Display *Dpy;
-@@ -862,6 +879,58 @@ FindColor(Dpy, colormap, colr)
- XColor def_colrs[256];
- int NumCells;
-
-+ if( visual_info == NULL && DefaultDepth(Dpy, DefaultScreen(Dpy)) >= 16 )
-+ {
-+ visual_info = DefaultVisual(Dpy, DefaultScreen(Dpy));
-+ r_mask = visual_info->red_mask;
-+ while( !(r_mask & 1) )
-+ {
-+ r_mask >>= 1;
-+ r_shift++;
-+ }
-+ while( r_mask & 1 )
-+ {
-+ r_mask >>= 1;
-+ r_bits++;
-+ }
-+
-+ g_mask = visual_info->green_mask;
-+ while( !(g_mask & 1) )
-+ {
-+ g_mask >>= 1;
-+ g_shift++;
-+ }
-+ while( g_mask & 1 )
-+ {
-+ g_mask >>= 1;
-+ g_bits++;
-+ }
-+
-+ b_mask = visual_info->blue_mask;
-+ while( !(b_mask &1) )
-+ {
-+ b_mask >>= 1;
-+ b_shift++;
-+ }
-+ while( b_mask & 1 )
-+ {
-+ b_mask >>= 1;
-+ b_bits++;
-+ }
-+ }
-+
-+ if( DefaultDepth(Dpy, DefaultScreen(Dpy)) > 8 )
-+ {
-+ colr->red >>= 16 - r_bits;
-+ colr->green >>= 16 - g_bits;
-+ colr->blue >>= 16 - b_bits;
-+
-+ colr->pixel = ((colr->red << r_shift) & visual_info->red_mask) |
-+ ((colr->green << g_shift) & visual_info->green_mask) |
-+ ((colr->blue << b_shift) & visual_info->blue_mask);
-+ return;
-+ }
-+
- if (AllocCnt < climit)
- {
- match = XAllocColor(Dpy, colormap, colr);
-@@ -982,7 +1051,6 @@ init_colormap()
- XColor hdef, edef;
- struct colr_data *cdp;
- struct colr_data colrs[256];
-- extern char *malloc();
-
- colormap = XDefaultColormap(Dpy, screen);
-
-@@ -1151,6 +1219,7 @@ MakeImage(data, width, height)
- fprintf(stderr, "Don't know how to format image for display of depth %d\n", depth);
- exit(1);
- }
-+
- if (BitmapBitOrder(Dpy) == LSBFirst)
- {
- shiftstart = 0;
-@@ -1194,7 +1263,8 @@ MakeImage(data, width, height)
- }
- }
- }
-- bytesperline = (width + linepad) * depth / 8;
-+
-+ bytesperline = (width * depth / 8 + linepad);
- newimage = XCreateImage(Dpy, DefaultVisual(Dpy, screen), depth,
- ZPixmap, 0, (char *)bit_data,
- (width + linepad), height, 8, bytesperline);
-@@ -1218,7 +1288,6 @@ init_pixmap()
- unsigned char *data;
- register int i, j, k;
- int cnt, wcnt;
-- extern char *malloc();
-
- cnt = 1;
- cnt += Pcnt;
-@@ -1341,9 +1410,14 @@ init_pixmap()
- free((char *)data);
- }
-
-+ if( DisplayPlanes(Dpy, screen) < 8 )
-+ {
-+
- j = rwidth[k] * rheight[k];
- x1A = (caddrt) malloc(rwidth[k] * rheight[k]);
- p = (caddrt) xfishRasterA[k];
-+
-+
- q = x1A;
- for (i = 0; i < j; i++)
- {
-@@ -1389,8 +1463,69 @@ init_pixmap()
- xfishB[k][2] = MakeImage(x1B, rwidth[k], rheight[k]);
- xfishB[k][1] = MakeImage(x2B, rwidth[k], rheight[k]);
-
-+ free((char *)x1A);
-+ free((char *)x2A);
-+ free((char *)x1B);
-+ free((char *)x2B);
-+
-+ }
-+ else
-+ {
- i = DisplayPlanes(Dpy, screen);
-
-+ xfishA[k][2] = XGetImage(Dpy, DefaultRootWindow(Dpy), 0, 0, rwidth[k], rheight[k], 0, ZPixmap);
-+
-+ p = (caddrt) xfishRasterA[k];
-+
-+ for (j = 0; j < rheight[k]; j++)
-+ {
-+ for( i = 0; i < rwidth[k]; i++ )
-+ {
-+ XPutPixel(xfishA[k][2], i, j, cmap[cnt + (int)(*p)]);
-+ p++;
-+ }
-+ }
-+
-+ xfishB[k][2] = XGetImage(Dpy, DefaultRootWindow(Dpy), 0, 0, rwidth[k], rheight[k], 0, ZPixmap);
-+
-+ p = (caddrt) xfishRasterB[k];
-+
-+ for (j = 0; j < rheight[k]; j++)
-+ {
-+ for( i = 0; i < rwidth[k]; i++ )
-+ {
-+ XPutPixel(xfishB[k][2], i, j, cmap[cnt + (int)(*p)]);
-+ p++;
-+ }
-+ }
-+
-+ xfishA[k][1] = XGetImage(Dpy, DefaultRootWindow(Dpy), 0, 0, rwidth[k], rheight[k], 0, ZPixmap);
-+
-+ for (j = 0; j < rheight[k]; j++)
-+ {
-+ for( i = 0; i < rwidth[k]; i++ )
-+ {
-+ XPutPixel(xfishA[k][1], i, j,
-+ XGetPixel(xfishA[k][2], rwidth[k] - i -1, j));
-+ }
-+ }
-+
-+ xfishB[k][1] = XGetImage(Dpy, DefaultRootWindow(Dpy), 0, 0, rwidth[k], rheight[k], 0, ZPixmap);
-+
-+ for (j = 0; j < rheight[k]; j++)
-+ {
-+ for( i = 0; i < rwidth[k]; i++ )
-+ {
-+ XPutPixel(xfishB[k][1], i, j,
-+ XGetPixel(xfishB[k][2], rwidth[k] - i - 1, j));
-+ }
-+ }
-+
-+ }
-+
-+
-+ i = DisplayPlanes(Dpy, screen);
-+
- pfishA[k][1] = XCreatePixmap(Dpy, wid,
- rwidth[k], rheight[k], i);
- pfishA[k][2] = XCreatePixmap(Dpy, wid,
-@@ -1400,11 +1535,6 @@ init_pixmap()
- pfishB[k][2] = XCreatePixmap(Dpy, wid,
- rwidth[k], rheight[k], i);
-
-- free((char *)x1A);
-- free((char *)x2A);
-- free((char *)x1B);
-- free((char *)x2B);
--
- if (pfishA[k][1])
- {
- XPutImage(Dpy, pfishA[k][1], gc, xfishA[k][1], 0, 0,
-@@ -1465,34 +1595,6 @@ Initialize signal so that SIGUSR1 causes secure mode t
- void
- init_signals()
- {
-- int ret;
--#ifdef linux
-- signal(SIGUSR1, toggle_secure);
--#else
--#if defined(MOTOROLA) || defined(SCO)
-- sigset(SIGUSR1, toggle_secure);
--#else
-- struct sigvec vec;
--
-- vec.sv_handler = toggle_secure;
-- vec.sv_mask = 0;
-- vec.sv_onstack = 0;
--
--#ifndef hpux
-- ret = sigvec(SIGUSR1, &vec, &vec);
-- if (ret != 0)
-- {
-- fprintf(stderr, "sigvec call failed\n");
-- }
-- else
-- {
-- fprintf(stderr, "sigvec call OK\n");
-- }
--#else
-- sigvector(SIGUSR1, &vec, &vec);
--#endif
--#endif /* MOTOROLA */
--#endif /* LINUX */
- }
-
-
-@@ -1505,7 +1607,6 @@ initialize()
- XWindowAttributes winfo;
- XSetWindowAttributes attr;
- XGCValues vals;
-- extern char *malloc();
- XSizeHints xsh;
- XImage *pimage;
- int i, size, cnt;
-@@ -1613,13 +1714,12 @@ if ((!DoClipping)||(picname[0] != '\0'))
- xsh.height = height;
- XSetNormalHints(Dpy, wid, &xsh);
-
-+ XMapWindow(Dpy, wid);
- if (picname[0] != '\0')
- {
- XPutImage(Dpy, PicMap, gc, pimage, 0, 0, 0, 0, Pwidth, Pheight);
- XSetWindowBackgroundPixmap(Dpy, wid, PicMap);
- }
--
-- XMapWindow(Dpy, wid);
- }
-
- binfo = (bubble *) malloc(blimit * sizeof(bubble));
-@@ -1965,9 +2065,15 @@ void
- high_res_sleep(seconds)
- double seconds;
- {
-+#ifndef __FreeBSD__
- int fds = 0;
-+#endif
- struct timeval timeout;
--
-+#ifdef __FreeBSD__
-+ fd_set fds;
-+ FD_ZERO(&fds);
-+#endif
-+
- timeout.tv_sec = seconds;
- timeout.tv_usec = (seconds - timeout.tv_sec) * 1000000.0;
- select(0, &fds, &fds, &fds, &timeout);
diff --git a/x11/xfishtank/files/xfishtank.xml.in b/x11/xfishtank/files/xfishtank.xml.in
new file mode 100644
index 000000000000..5c171697cc36
--- /dev/null
+++ b/x11/xfishtank/files/xfishtank.xml.in
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<screensaver name="xfishtank" _label="XFishtank">
+ <video href="https://www.youtube.com/watch?v=6Q8ZTxsopYA"/>
+
+ <file id="bgfile" _label="Background image" arg="-p %"/>
+
+ <string id="bgcolor" _arg="-c %"
+ _label="Background color (eg. red, MediumAquamarine, #ff0000)"/>
+
+ <number id="nbubbles" _label="Number of bubbles" arg="-b %"
+ high="100" low="0" step="1" default="32"/>
+
+ <number _id="nfishes" _label="Number of fishes" arg="-f %"
+ high="100" low="0" step="1" default="10"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+XFish Tank.
+
+Eric Bina (Original author), Dave Black (Linux port),
+TJ Phan (TrueColor Support), Vincent Renardias (man page, Debian packaging)
+ </_description>
+</screensaver>
diff --git a/x11/xfishtank/pkg-plist b/x11/xfishtank/pkg-plist
new file mode 100644
index 000000000000..e6192ebcb22d
--- /dev/null
+++ b/x11/xfishtank/pkg-plist
@@ -0,0 +1,6 @@
+bin/xfishtank
+bin/xscreensaver-hacks/xfishtank
+share/man/man1/xfishtank.1.gz
+share/xscreensaver/config/xfishtank.xml
+@dir share/xscreensaver/config
+@dir bin/xscreensaver-hacks