
bzip2-1.0 should compile without problems on the vast majority of
platforms.  Using the supplied Makefile, I've built and tested it
myself for x86-linux, sparc-solaris, alpha-linux, x86-cygwin32 and
alpha-tru64unix.  With makefile.msc, Visual C++ 6.0 and nmake, you can
build a native Win32 version too.  Large file support seems to work
correctly on at least alpha-tru64unix and x86-cygwin32 (on Windows
2000).

When I say "large file" I mean a file of size 2,147,483,648 (2^31)
bytes or above.  Many older OSs can't handle files above this size,
but many newer ones can.  Large files are pretty huge -- most files
you'll encounter are not Large Files.

Earlier versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide
variety of platforms without difficulty, and I hope this version will
continue in that tradition.  However, in order to support large files,
I've had to include the define -D_FILE_OFFSET_BITS=64 in the Makefile.
This can cause problems.

The technique of adding -D_FILE_OFFSET_BITS=64 to get large file
support is, as far as I know, the Recommended Way to get correct large
file support.  For more details, see the Large File Support
Specification, published by the Large File Summit, at
   http://www.sas.com/standard/large.file/

As a general comment, if you get compilation errors which you think
are related to large file support, try removing the above define from
the Makefile, ie, delete the line
   BIGFILES=-D_FILE_OFFSET_BITS=64 
from the Makefile, and do 'make clean ; make'.  This will give you a
version of bzip2 without large file support, which, for most
applications, is probably not a problem.  

Alternatively, try some of the platform-specific hints listed below.

You can use the spewG.c program to generate huge files to test bzip2's
large file support, if you are feeling paranoid.  Be aware though that
any compilation problems which affect bzip2 will also affect spewG.c,
alas.


Known problems as of 1.0pre8:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* HP/UX 10.20 and 11.00, using gcc (2.7.2.3 and 2.95.2):  A large
  number of warnings appear, including the following:

     /usr/include/sys/resource.h: In function `getrlimit':
     /usr/include/sys/resource.h:168: 
        warning: implicit declaration of function `__getrlimit64'
     /usr/include/sys/resource.h: In function `setrlimit':
     /usr/include/sys/resource.h:170: 
        warning: implicit declaration of function `__setrlimit64'

  This would appear to be a problem with large file support, header
  files and gcc.  gcc may or may not give up at this point.  If it
  fails, you might be able to improve matters by adding 
     -D__STDC_EXT__=1
  to the BIGFILES variable in the Makefile (ie, change its definition
  to
     BIGFILES=-D_FILE_OFFSET_BITS=64 -D__STDC_EXT__=1

  Even if gcc does produce a binary which appears to work (ie passes
  its self-tests), you might want to test it to see if it works properly
  on large files.


* HP/UX 10.20 and 11.00, using HP's cc compiler.

  No specific problems for this combination, except that you'll need to
  specify the -Ae flag, and zap the gcc-specific stuff
  -Wall -Winline -O2 -fomit-frame-pointer -fno-strength-reduce.
  You should retain -D_FILE_OFFSET_BITS=64 in order to get large
  file support -- which is reported to work ok for this HP/UX + cc
  combination.


* SunOS 4.1.X.

  Amazingly, there are still people out there using this venerable old
  banger.  I shouldn't be too rude -- I started life on SunOS, and
  it was a pretty darn good OS, way back then.  Anyway:

     SunOS doesn't seem to have strerror(), so you'll have to use
     perror(), perhaps by doing adding this (warning: UNTESTED CODE):

     char* strerror ( int errnum )
     {
        if (errnum < 0 || errnum >= sys_nerr)
           return "Unknown error"; 
        else
           return sys_errlist[errnum];
     }

   Or you could comment out the relevant calls to strerror; they're
   not mission-critical.  Or you could upgrade to Solaris.  Ha ha ha!
   (what??  you think I've got Bad Attitude?) 


* Making a shared library on Solaris.  (Not really a compilation
  problem, but many people ask ...)  

  Firstly, if you have Solaris 8, either you have libbz2.so already
  on your system, or you can install it from the Solaris CD.  

  Secondly, be aware that there are potential naming conflicts
  between the .so file supplied with Solaris 8, and the .so file
  which Makefile-libbz2_so will make.  Makefile-libbz2_so creates
  a .so which has the names which I intend to be "official" as
  of version 1.0.0 and onwards.  Unfortunately, the .so in
  Solaris 8 appeared before I decided on the final names, so
  the two libraries are incompatible.  We have since communicated
  and I hope that the problems will have been solved in the next
  version of Solaris, whenever that might appear.

  All that said: you might be able to get somewhere
  by finding the line in Makefile-libbz2_so which says

  $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.2 $(OBJS)

  and replacing with 

  $(CC) -G -shared -o libbz2.so.1.0.2 -h libbz2.so.1.0 $(OBJS)
  
  If gcc objects to the combination -fpic -fPIC, get rid of
  the second one, leaving just "-fpic".


That's the end of the currently known compilation problems.
