How to compile Bluefish 1.3.x under OpenSolaris or Solaris Nevada

  1. Get intltool package (for example, from blastwave)

    If you use the bundled intltool, you will get the following error:

    Undefined first referenced
    symbol in file
    libintl_bind_textdomain_codeset bluefish.o
    libintl_gettext bf_lib.o
    libintl_textdomain bluefish.o
    libintl_bindtextdomain bluefish.o
    libintl_ngettext file.o
    ld: fatal: symbol referencing errors. No output written to bluefish-unstable
    collect2: ld returned 1 exit status
    gmake[3]: *** [bluefish-unstable] Error 1
    gmake[3]: Leaving directory `/var/tmp/bluefish-unstable-1.3.2/src’
    gmake[2]: *** [all-recursive] Error 1
    gmake[2]: Leaving directory `/var/tmp/bluefish-unstable-1.3.2/src’
    gmake[1]: *** [all] Error 2
    gmake[1]: Leaving directory `/var/tmp/bluefish-unstable-1.3.2/src’
    gmake: *** [all-recursive] Error 1
  2. Set the LIBS variable:
    export LIBS=”-lsocket -lnsl -L/usr/csw/lib -lintl”
  3. Put /usr/gnu/bin directory in the first place in PATH. For example:
    export PATH=/usr/gnu/bin:/usr/bin:/usr/sbin:/usr/openwin/bin:
    /sbin:/usr/dt/bin:/usr/sfw/bin:/usr/csw/bin:/usr/local/bin

    The reason is two different xgettext programs. The configure script wants the GNU version:

    checking for xgettext… (cached) /usr/bin/xgettext
    checking for msgmerge… /usr/bin/msgmerge
    checking for msgfmt… (cached) /usr/bin/msgfmt
    /usr/bin/xgettext: illegal option — version
    Usage: xgettext [-a [-x exclude-file]] [-jns][-c comment-tag]
    [-d default-domain] [-m prefix] [-M suffix] [-p pathname] files …
    xgettext -h
    ERROR: Cannot open file –version.
    configure: error: GNU gettext tools not found; required for intltool

Compiling Wine 1.1.14 for OpenSolaris or Solaris Nevada

Update 15.02.2009 @ 14:04: Same for wine 1.1.15…

The following error:

ipstats.c: In function `getInterfaceStatsByName’:
ipstats.c:279: error: called object is not a function
ipstats.c: In function `getICMPStats’:
ipstats.c:472: error: called object is not a function
ipstats.c: In function `getIPStats’:
ipstats.c:641: error: called object is not a function
ipstats.c: In function `getTCPStats’:
ipstats.c:778: error: called object is not a function
ipstats.c: In function `getUDPStats’:
ipstats.c:862: error: called object is not a function
ipstats.c: In function `getNumWithOneHeader’:
ipstats.c:985: error: called object is not a function
ipstats.c: In function `getRouteTable’:
ipstats.c:1255: error: called object is not a function
ipstats.c: In function `getTcpTable’:
ipstats.c:1607: error: called object is not a function
gmake[2]: *** [ipstats.o] Error 1
gmake[2]: Leaving directory `/var/tmp/wine-1.1.14/dlls/iphlpapi’
gmake[1]: *** [iphlpapi] Error 2
gmake[1]: Leaving directory `/var/tmp/wine-1.1.14/dlls’
gmake: *** [dlls] Error 2

Is caused by redefinition of the ERR function in the wrong place. To fix move #include “wine/debug.h” behind all includes in dlls/iphlpapi/ipstats.c:

From (line 24):
. . .
#include “config.h”
#include “wine/port.h”
#include “wine/debug.h”

#include
#include
. . .

to (line 126):

. . .
#include “windef.h”
#include “winbase.h”
#include “iprtrmib.h”
#include “ifenum.h”
#include “ipstats.h”
#include “wine/debug.h”
. . .

Upgrade x (Solaris + SqueezeCenter)

Here’s a quick way to upgrade one or both Solaris (tested with Nevada snv_107) and SqueezeCenter (tested with SC 7.4 24827).

  1. Remove the CPAN directory in the SC root directory
    # mv CPAN CPAN.orig
  2. Install missing CPAN modules
    # perl -MCPAN -e shell
    cpan> install Bundle::CPAN
    . . .
    cpan> reload CPAN
    cpan> install I18N::LangTags
    cpan> force install Scalar::Util
  3. Disable Encode::Detect::Detector module in Slim/Utils/Unicode.pm (line 40). The module can’t be compiled for Solaris.
    # vi Slim/Utils/Unicode.pm
    . . .
    #use Encode::Detect::Detector;

Jumbo frames on Solaris

For e1000g (Solaris):
Change /kernel/drv/e1000g.conf to:

MaxFrameSize=3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3;
# 0 is for normal ethernet frames.
# 1 is for upto 4k size frames.
# 2 is for upto 8k size frames.
# 3 is for upto 16k size frames.
# These are maximum frame limits, not the actual ethernet frame
# size. Your actual ethernet frame size would be determined by
# protocol stack configuration (please refer to ndd command man pages)
# For Jumbo Frame Support (9k ethernet packet)
# use 3 (upto 16k size frames)

For rge (Solaris):
Maximum MTU supported by rge is 7000.
Change /kernel/drv/rge.conf to:

default_mtu = 7000;

Then reboot.

The result:

xeon# ifconfig -a
. . .
e1000g1: flags=201000843 mtu 9000 index 2
inet 10.0.10.1 netmask ffffff00 broadcast 10.0.10.255
ether 0:18:f3:ef:2a:d1

Wine 1.1.5 for Solaris

Wine 1.1.5 is out. So are new compiling errors:

gmake[2]: Entering directory `/var/tmp/wine-1.1.5/dlls/cryptnet’
gcc -c -I. -I. -I../../include -I../../include -D__WINESRC__ -D_REENTRANT -fPIC -Wall -pipe -fno-strict-aliasing -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith -O2 -o cryptnet_main.o cryptnet_main.c
In file included from cryptnet_main.c:31:
../../include/winbase.h:1518: error: syntax error before “va_list”
../../include/winbase.h:1519: error: syntax error before “va_list”
gmake[2]: *** [cryptnet_main.o] Error 1
gmake[2]: Leaving directory `/var/tmp/wine-1.1.5/dlls/cryptnet’
gmake[1]: *** [cryptnet] Error 2
gmake[1]: Leaving directory `/var/tmp/wine-1.1.5/dlls’
gmake: *** [dlls] Error 2

The thing is, wine/debug.h must be included before any other win*.h headers in dlls/cryptnet/cryptnet_main.c

$ more dlls/cryptnet/cryptnet_main.c
. . .
#include “wine/debug.h”
#include “windef.h”
#include “winbase.h”
#include “winnt.h”
#include “winnls.h”
#include “wininet.h”
#include “objbase.h”
#define CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS
#include “wincrypt.h”
. . .

SqueezeCenter again. Testing v7.3

SqueezeCenter 7.2 is officially out and not interesting anymore ;-) Let’s have a look at version 7.3 which has a new streaming service. In this test I downloaded SqueezeCenter-7.3-22975.ZIP from here.

The first attempt to start the server (after unpacking and “chmod“-ding) gave me this error:

# ./slimserver.pl
The following modules failed to load: YAML::Syck

To download and compile them, please run: /usr/local/SqueezeCenter-7.3-22975/Bin/build-perl-modules.pl YAML::Syck

Exiting..

The “built-in” build-perl-modules.pl failed to install the CPAN module:

# /usr/local/SqueezeCenter-7.3-22975/Bin/build-perl-modules.pl YAML::Syck
Welcome to the Slim Devices perl module installer.

These packages are needed for SqueezeCenter to function.
You will need a C compiler (gcc), make, and perl installed.

You will need development libraries for MySQL. eg: libmysqlclient

You will need development libraries for expat. eg: libexpat1-dev

*** Ignore any warnings about AppConfig. ***

Please enter a perl binary to use (defaults to /usr/bin/perl)
This must be the same perl binary that you ran this program with –>
Please enter a directory to download files to –>
Downloads will use lwp to fetch tarballs.

Downloading YAML-Syck-0.64.tar.gz to: /usr/local/SqueezeCenter-7.3-22975
Something looks wrong – I couldn’t read /usr/local/SqueezeCenter-7.3-22975/YAML-Syck-0.64.tar.gz, which I just downloaded.
Uncompressing..
sh: YAML-Syck-0.64.tar.gz: cannot open
tar: blocksize = 0
Couldn’t change to YAML-Syck-0.64 : No such file or directory at /usr/local/SqueezeCenter-7.3-22975/Bin/build-perl-modules.pl line 226, line 2.

So, I decided to go the old way and get rid of the supplied with SqueezeCenter CPAN directory.

# mv CPAN CPAN-orig

… update YAML::Syck just in case…

# perl -MCPAN -e shell
. . .
cpan[1]> install YAML::Syck
YAML::Syck is up to date (1.05).
#

… and start the server again …

# ./slimserver.pl
Can’t locate Encode/Detect/Detector.pm in @INC (@INC contains: /usr/local/SqueezeCenter-7.3-22975/CPAN/arch/5.8/i86pc-solaris-64int /opt/csw/SqueezeCenter-7.3-22975/CPAN/arch/5.8/i86pc-solaris-64int/auto /usr/local/SqueezeCenter-7.3-22975/CPAN/arch/5.8.4/i86pc-solaris-64int /usr/local/SqueezeCenter-7.3-22975/CPAN/arch/5.8.4/i86pc-solaris-64int/auto /usr/local/SqueezeCenter-7.3-22975/CPAN/arch/5.8/i86pc-solaris-64int /usr/local/SqueezeCenter-7.3-22975/CPAN/arch/5.8/i86pc-solaris-64int/auto /usr/local/SqueezeCenter-7.3-22975/CPAN/arch/i86pc-solaris-64int /usr/local/SqueezeCenter-7.3-22975/lib /usr/local/SqueezeCenter-7.3-22975/CPAN /usr/local/SqueezeCenter-7.3-22975 /usr/local/SqueezeCenter-7.3-22975 /usr/perl5/5.8.4/lib/i86pc-solaris-64int /usr/perl5/5.8.4/lib /usr/perl5/site_perl/5.8.4/i86pc-solaris-64int /usr/perl5/site_perl/5.8.4 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.8.4/i86pc-solaris-64int /usr/perl5/vendor_perl/5.8.4 /usr/perl5/vendor_perl .) at /usr/local/SqueezeCenter-7.3-22975/Slim/Utils/Unicode.pm line 40.
BEGIN failed–compilation aborted at /usr/local/SqueezeCenter-7.3-22975/Slim/Utils/Unicode.pm line 40.
Compilation failed in require at /usr/local/SqueezeCenter-7.3-22975/Slim/Utils/Prefs/Namespace.pm line 30.
BEGIN failed–compilation aborted at /usr/local/SqueezeCenter-7.3-22975/Slim/Utils/Prefs/Namespace.pm line 30.
Compilation failed in require at /usr/local/SqueezeCenter-7.3-22975/Slim/Utils/Prefs.pm line 81.
BEGIN failed–compilation aborted at /usr/local/SqueezeCenter-7.3-22975/Slim/Utils/Prefs.pm line 81.
Compilation failed in require at /usr/local/slimserver/slimserver.pl line 146.
BEGIN failed–compilation aborted at /usr/local/slimserver/slimserver.pl line 146.

This error looks familiar. And after commenting line 40 in SqueezeCenter-7.3-22975/Slim/Utils/Unicode.pm (#use Encode::Detect::Detector; ) the server came alive and immediately updated the firmware of the Transporter to version 62.