When porting Mercury to a BSDI BSD/386 1.1 system, I had problems with `ar' not handling long filenames. (The error message was "ar: libmercury.a: invalid file type".) If you get a similar error, try the following patch. --- library/Mmakefile Sat Jul 15 14:54:49 1995 +++ /home/mulga/pgrad/fjh/mercury/src/mercury-0.3/library/Mmakefile Mon Sep 4 04:13:18 1995 @@ -109,7 +109,10 @@ libmercury : libmercury.a libmercury.$(SO) library.init libmercury.a : $(library.os) - ar cr libmercury.a $(library.os) + # ar cr libmercury.a $(library.os) + -ln -s mercury_builtin.o m_builtin.o + ar cr libmercury.a \ + `echo $(library.os) | sed 's/mercury_builtin/m_builtin/'` $(RANLIB) libmercury.a libmercury.so : $(library.pic_os) --- boehm_gc/Makefile Sun Apr 2 19:11:25 1995 +++ /home/mulga/pgrad/fjh/mercury/src/mercury-0.3/boehm_gc/Makefile Sun Jan 1 01:01:29 1995 @@ -138,7 +138,9 @@ rm -f on_sparc_sunos5 ./if_mach SPARC SUNOS5 touch on_sparc_sunos5 ./if_mach SPARC SUNOS5 $(AR) rus gc.a $(OBJS) dyn_load.o - ./if_not_there on_sparc_sunos5 $(AR) ru gc.a $(OBJS) dyn_load.o + -ln -s solaris_threads.o s_threads.o + ./if_not_there on_sparc_sunos5 $(AR) ru gc.a \ + `echo $(OBJS) | sed 's/solaris_threads/s_threads/'` dyn_load.o ./if_not_there on_sparc_sunos5 $(RANLIB) gc.a || cat /dev/null # ignore ranlib failure; that usually means it doesn't exist, and isn't needed