ports/50558: xscreensaver-getimage-file has a problem with -STABLE Perl

Andy Sparrow spadger at best.com
Thu Apr 3 09:50:13 UTC 2003


>Number:         50558
>Category:       ports
>Synopsis:       xscreensaver-getimage-file has a problem with -STABLE Perl
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Apr 03 01:50:11 PST 2003
>Closed-Date:
>Last-Modified:
>Originator:     Andy Sparrow
>Release:        FreeBSD 4.8-RC i386
>Organization:
Not Much.
>Environment:
System: FreeBSD tureg.geek4food.org 4.8-RC FreeBSD 4.8-RC #120: Mon Mar 31 07:04:42 PST 2003 root at tureg.geek4food.org:/usr/src/sys/compile/tureg i386

I'm running XFree86 4.3, and all ports were updated (recursively)
via portupgrade after the buildworld. Everything else on the system
seem to work.

>Description:

Any xscreensaver-4.08 module that attempts to load images uses
'xscreensaver-getimage-file', a Perl script.

This now errors on a recent -STABLE, with the system Perl:

xscreensaver-getimage-file
"mode" is not defined in %Fcntl::EXPORT_TAGS at /usr/libdata/perl/5.00503/Exporter.pm line 67
        Exporter::export('Fcntl', 'main', ':mode') called at /usr/libdata/perl/5.00503/Exporter.pm line 182
        Exporter::import('Fcntl', ':mode') called at /usr/X11R6/bin/xscreensaver-getimage-file line 47
        main::BEGIN() called at /usr/X11R6/bin/xscreensaver-getimage-file line 49
        eval {...} called at /usr/X11R6/bin/xscreensaver-getimage-file line 49
Uncaught exception from user code:
        Can't continue after import errors at /usr/X11R6/bin/xscreensaver-getimage-file line 47
BEGIN failed--compilation aborted at /usr/X11R6/bin/xscreensaver-getimage-file line 49.

Here's the appropriate code section (with comments):

	require 5;
	use diagnostics;
	use strict;

	use POSIX;
	use Fcntl;

	# Apparently the "old way" to get S_ISLNK and friends is to do this:
	#
	use POSIX ':fcntl_h';

	# But apparently the "new way" is to do this:
	#
	#  use Fcntl ':mode';
	#
	# but of course that will generate an error on "old" (pre-5.6?) Perl versions.
	# So we do it like this instead:
	#
	BEGIN {
	  if (! defined(&S_ISLNK)) {  # perhaps defined by "POSIX"?
		require Fcntl;
		import  Fcntl ':mode';    # if not, look for it in "Fcntl".
	  }
	}

>How-To-Repeat:

Run any xscreensaver module that loads/manipulates images on a
recent -STABLE, or run the xscreensaver-getimage-file Perl script
directly.

>Fix:

Not obvious to me, sorry.

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list