Pkgsrc on IRIX
Introduction
SGI no longer packages 'freeware' for IRIX, as it was discontinued in 2006. Nekoware aims to be a community-driven replacement but I've found many packages to be compiled with far too many dependancies (vim needing GTK, etc) and not everything I want is available. Therefore, much like my experience with Opensolaris, I turned to pkgsrc...
Build machine
Here's the `hinv` output:
2 300 MHZ IP30 Processors CPU: MIPS R12000 Processor Chip Revision: 2.3 FPU: MIPS R12010 Floating Point Chip Revision: 0.0 Main memory size: 2048 Mbytes Xbow ASIC: Revision 1.3 Instruction cache size: 32 Kbytes Data cache size: 32 Kbytes Secondary unified instruction/data cache size: 2 Mbytes Integral SCSI controller 0: Version QL1040B (rev. 2), single ended Disk drive: unit 1 on SCSI controller 0 Integral SCSI controller 1: Version QL1040B (rev. 2), single ended CDROM: unit 6 on SCSI controller 1 IOC3/IOC4 serial port: tty1 IOC3/IOC4 serial port: tty2 IOC3 parallel port: plp1 Graphics board: ESI with texture option Graphics board: ESI Integral Fast Ethernet: ef0, version 1, pci 2 Iris Audio Processor: version RAD revision 12.0, number 1
uname -a => IRIX64 IRIS 6.5 01090133 IP30
The machine is running a fresh install of IRIX 6.5.29.
Bootstrapping pkgsrc using gcc
As of pkgsrc 2007q1 pkgsrc bootstraps out of the box, unlike some earlier versions that have problems with PRIu64.
Download the SGI freeware binary of gcc from SGI freeware and read the documentation.
Make sure you have compiler_dev.sw.base installed (notably c_dev and c++_dev). These can be found on your IRIX 6.5 developer foundation CD.
Install the gcc tardist using the `tardist` command as root.
Add /usr/freeware/bin to your $PATH.
Patch your spec file if you want to default gcc to 64 bit mips4 mode as noted here or download a pre-patched spec. I had to patch on a freebsd box because IRIX' patch didn't like the diff.
Download pkgsrc 2007q1 or later from netbsd's ftp and untar it to /usr.
cd into /usr/pkgsrc/bootstrap, set CC=gcc and ./bootstrap
TO BE CONTINUED
Build problems
lang/perl5
Configure fails with invalid option -64 or some such nonsense, edit the pkgsrc Makefile and remove it.
In 32 bit mode, perl is a royal bitch. It's absolutely convinced that you want to build it in 64 bit mode on IRIX64. you have to edit the hints/irix_6 file to tell it not to do the -mabi=64 crap. Also, you need to add -lpthreads to libs in the toplevel Makefile. This was a major pain, might post detailed changes if I can ever be bothered to do it again...
fonts/fontconfig
Makes dumbass assumptions about the system. Here's a patch for pkgsrc's makefile to make it work:
diff -r1.62 Makefile 30a31 > CONFIGURE_ARGS+= --libdir=/usr/pkg/lib --includedir=/usr/pkg/include --with-arch=mips4 32a34,35 > LDFLAGS+=-L/usr/pkg/lib >
archivers/unzip
The compiler coredumps when building. To fix:
bmake build (wait for it to segfault) cd work/unzip* vi Makefile (and remove the definition of LF2) gmake clean; gmake generic2 (generic doesn't work..?) cd ../../ bmake install clean
lang/ruby
When you run ruby it complains about not being able to map the soname for libruby. The solution is:
export LD_LIBRARY64_PATH=/usr/pkg/lib
A more general solution might be around, haven't done the research yet.
For 32 bit mode, ensure that -n32 is in LDFLAGS and LDSHARED in the Makefile.
Additionally, you need to ensure that socket.c includes xti.h. This should be done by getting configure to set HAVE_XTI_H and then checking for that ifdef in socket.c. If you don't do this not all of the socket parameters will be defined right.
Also: install devel/byacc and set
TOOLS_PLATFORM.yacc?= /usr/pkg/bin/yacc
in /usr/pkg/etc/mk.conf to avoid using the ancient IRIX yacc/bison.
graphics/tiff
This fails with "invalid preprocessor flag "-c"' or something. IRIX apparently comes with tiff of some sort, so make it a builtin:
BUILTIN_PKG.tiff= tiff-3.8 USE_BUILTIN.tiff= YES
NOTE this only works for when you're using the 32 bit ABI, there's no 64 bit tiff library...
textproc/groff
groff by default depends on netpbm which depends on tiff, which won't work on 64 bit systems, so disable that stuff:
PKG_OPTIONS.groff= -x11 -groff-docs
If groff complains about a broken C++ compiler:
CXX= /usr/freeware/bin/g++
bmake clean and try to build it again.
After this, groff doesn't even work right, eqn is missing /usr/pub/eqnchar (not sure why it's looking there) and groff is missing tmac.an. I sorta "fixed" this by stealing the eqnchar file from the netbsd install on my alpha and by doing the following symlinks:
ln -sf /usr/pkg/share/groff/1.19.2/tmac /usr/lib/tmac ln -sf /usr/lib/tmac/an.tmac /usr/lib/tmac/tmac.an
No idea what the proper fix is, I assume there's some IRIX config file that's wrong or something...
devel/ncurses
This failed for me by complaining about a missing libncurses++.so when linking the demos. This apparently is a libtool issue, but it's way too complex for me to debug. I built it manually with --prefix=/usr/pkg and made it a builtin in mk.conf and things seemed to go well...
See also: a netbsd-bugs report and a reported fix that doesn't work for me
fonts/ttmkfdir2
If it complains about 'optarg' being undeclared it seems to be caused by pkgsrc using the wrong getopt.h header. I manually edited commandline.cpp to have
#include "/usr/include/getopt.h"
instead of
#include <getopt.h>
and it seemed to fix it, changing the order of the -I parameters to gcc might do it too...
devel/glib2
Fails with "/usr/pkg/bin/libtool[4381]: syntax error at line 1 : `|' unexpected". I think this is caused by there being '| |' in the command line generated by libtool. Apparently some command is being omitted, but I don't know what or why...
Make sure you build this with -lpthread or GTK2 will fail its configure test.
lang/python24
Dunno. Seems broken somehow, haven't figured it out yet.
Update: I did actually get this to build in 32 bit mode, but I forgot to document it and now I can't remember what I did... :(
Update2: Add -n32 to LDSHARED and BDSHARED in work/Python-2.X/Makefile to make it compile in 32 bit mode.
lang/erlang
The build will fail with an undeclared shiftleft in os_mon. Use the patch from here (you may have to remove the DOS style newlines...)
The install will fail because IRIX' `chmod` doesn't support the -f parameter. Run `grep chmod **/Makefile*` to find the affected makefiles and remove the use of -f
wip/esdl
To fix the undeclared declaration of 'refc' use the patch from here. If you're using 64 bit mode you need to edit c_src/Makefile and set GL_LIBS to use ${OGLDIR}/lib64.
devel/pcre
If this fails with the 'unexpected |' error, rebuild libtool-base. This probably will fix glib2 too...
multimedia/libmp4v2
Doesn't build, don't care to even investigate why.
audio/musicpd
Before you build libao ensure you've enabled IRIX support in the Makefile.common. Check if the irix plugin has been built by doing `ls /usr/pkg/lib/ao/plugins-2`
Add the following to the pkgsrc Makefile:
LDFLAGS+= -lgen CONFIGURE_ARGS+= --enable-ao
You MUST build as root, or the configure script will bitch about mapping sonames. sudo isn't good enough in this case for some reason...
audio/flac
Fails to build libFlac++.so.7.0 for some reason. I think this is related to the ncurses problem. I just edited the FLAC++ stuff out of the Makefile and did a bmake install clean. Very bad, but I needed it built.
audio/libsndfile
CFLAGS incorrectly include -pipe in the makefiles. Fix this somehow and it'll build.
perl -pi -e 's/-pipe//' **/Makefile
graphics/glitz
Inappropiate #include <stdint.h>. I've modified one of the pkgsrc patches to take care of this:
Edit patches/patch-ab and change:
# if defined(__OpenBSD__)
to
# if defined(__OpenBSD__) || defined(sgi)
you'll have to regenerate the patch checksum too; remove the line for patch-ab from distinfo and do:
digest sha1 patch-ab >> ../distinfo
to regenerate the checksum for patch-ab
audio/portaudio
This port is fucked. I got it to build though:
- bmake configure
- Edit the work/portaudio Makefile
- Ensure /usr/pkg/bin/install-sh is being used for INSTALL
- Add -laudio -lpthread to DLL_LIBS
- Remove --version-info from the link command
- Add ${SHARED_FLAGS} to the link command
lang/gcc34
This is a big one. You need to fix several getopt.h problems, you need to edit the spec file in work/obj/gcc to remove the space after the -R several times(it comes back again and again). You need to edit the Makefile in work/obj/mips-sgi-irix6.5/libstdc++-v3 and work/obj/mips-sgi-irix6.5/libobjc and comment out the MULTIDIRS line. I have obtained a working gcc 3.4 compiler using this method with SGI's freeware gcc 3.3 compiler as the host.
graphics/blender
NOTE: I haven't got blender to build within the pkgsrc framework yet, but I can get it to (mostly?)build using all the dependencies installed from pkgsrc.
- install lang/gcc34 YOU CANNOT USE 3.3!
- Install all the blender deps in pkgsrc
- untar the blender source somewhere
- patch the SConstruct file (see My patch)
- run scons but kill it after it generates the config.opts file
- edit config.opts to use g++ as the CXX compiler (I can't get it to honor $CXX..?)
- remove references to start_movie and friends from <FILEICANTREMEMBERTHENAMEOF>
www/firefox
Make sure your CFLAGS include '-DIP30 -DR10000'. Additionally, ld was missing the -n32 argument (it doesn't honor LDFLAGS). I wasn't clear how to fix this correctly, so I just did it by hand... There's also a missing -lpthread and a place where you need to change '-Wp,-traditional' to just '-traditional' when it's compiling some assembly. ugh
Also, SGIs linker hates you and you have to do `export LD_LIBRARYN32_PATH=$LD_LIBRARYN32_PATH:/usr/pkgsrc/www/firefox/work/mozilla/dist/lib` so that it can find libssl3 when it's generating a key or something.
security/sudo
Add c++ to USE_LANGUAGES in the pkgsrc Makefile.
fonts/Xft2
Add c++ to USE_LANGUAGES in the pkgsrc Makefile.
mail/postfix
Add -ldb to AUXLIBS in the pkgsrc Makefile. I've written a simple init script for postfix on IRIX that I'll link here once I have tested it more.
To enable logging add the following to /etc/syslog.conf and kill -HUP the syslog process:
# mail logging mail.info /var/adm/maillog
Ensure that the whitespace between the facilty and the logfile is a tab, NOT a space!
Also, ensure that alias_maps and alias_database are set to hash:/etc/mail/aliases in main.cf.
x11/wxGTK
Horribly annoying. The build goes fine except it fails to create the shared objects and the install fails because there aren't any WX_LINGUAS to loop over in the Makefile. I linked the shared objects manually and deleted the loop from the Makefile. Viability of the subsequent package is untested.