Reid Spencer | 26eda77 | 2004-11-25 16:11:36 +0000 | [diff] [blame] | 1 | |
| 2 | bzip2-1.0 should compile without problems on the vast majority of |
| 3 | platforms. Using the supplied Makefile, I've built and tested it |
| 4 | myself for x86-linux, sparc-solaris, alpha-linux, x86-cygwin32 and |
| 5 | alpha-tru64unix. With makefile.msc, Visual C++ 6.0 and nmake, you can |
| 6 | build a native Win32 version too. Large file support seems to work |
| 7 | correctly on at least alpha-tru64unix and x86-cygwin32 (on Windows |
| 8 | 2000). |
| 9 | |
| 10 | When I say "large file" I mean a file of size 2,147,483,648 (2^31) |
| 11 | bytes or above. Many older OSs can't handle files above this size, |
| 12 | but many newer ones can. Large files are pretty huge -- most files |
| 13 | you'll encounter are not Large Files. |
| 14 | |
| 15 | Earlier versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide |
| 16 | variety of platforms without difficulty, and I hope this version will |
| 17 | continue in that tradition. However, in order to support large files, |
| 18 | I've had to include the define -D_FILE_OFFSET_BITS=64 in the Makefile. |
| 19 | This can cause problems. |
| 20 | |
| 21 | The technique of adding -D_FILE_OFFSET_BITS=64 to get large file |
| 22 | support is, as far as I know, the Recommended Way to get correct large |
| 23 | file support. For more details, see the Large File Support |
| 24 | Specification, published by the Large File Summit, at |
| 25 | http://www.sas.com/standard/large.file/ |
| 26 | |
| 27 | As a general comment, if you get compilation errors which you think |
| 28 | are related to large file support, try removing the above define from |
| 29 | the Makefile, ie, delete the line |
| 30 | BIGFILES=-D_FILE_OFFSET_BITS=64 |
| 31 | from the Makefile, and do 'make clean ; make'. This will give you a |
| 32 | version of bzip2 without large file support, which, for most |
| 33 | applications, is probably not a problem. |
| 34 | |
| 35 | Alternatively, try some of the platform-specific hints listed below. |
| 36 | |
| 37 | You can use the spewG.c program to generate huge files to test bzip2's |
| 38 | large file support, if you are feeling paranoid. Be aware though that |
| 39 | any compilation problems which affect bzip2 will also affect spewG.c, |
| 40 | alas. |
| 41 | |
| 42 | |
| 43 | Known problems as of 1.0pre8: |
| 44 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 45 | |
| 46 | * HP/UX 10.20 and 11.00, using gcc (2.7.2.3 and 2.95.2): A large |
| 47 | number of warnings appear, including the following: |
| 48 | |
| 49 | /usr/include/sys/resource.h: In function `getrlimit': |
| 50 | /usr/include/sys/resource.h:168: |
| 51 | warning: implicit declaration of function `__getrlimit64' |
| 52 | /usr/include/sys/resource.h: In function `setrlimit': |
| 53 | /usr/include/sys/resource.h:170: |
| 54 | warning: implicit declaration of function `__setrlimit64' |
| 55 | |
| 56 | This would appear to be a problem with large file support, header |
| 57 | files and gcc. gcc may or may not give up at this point. If it |
| 58 | fails, you might be able to improve matters by adding |
| 59 | -D__STDC_EXT__=1 |
| 60 | to the BIGFILES variable in the Makefile (ie, change its definition |
| 61 | to |
| 62 | BIGFILES=-D_FILE_OFFSET_BITS=64 -D__STDC_EXT__=1 |
| 63 | |
| 64 | Even if gcc does produce a binary which appears to work (ie passes |
| 65 | its self-tests), you might want to test it to see if it works properly |
| 66 | on large files. |
| 67 | |
| 68 | |
| 69 | * HP/UX 10.20 and 11.00, using HP's cc compiler. |
| 70 | |
| 71 | No specific problems for this combination, except that you'll need to |
| 72 | specify the -Ae flag, and zap the gcc-specific stuff |
| 73 | -Wall -Winline -O2 -fomit-frame-pointer -fno-strength-reduce. |
| 74 | You should retain -D_FILE_OFFSET_BITS=64 in order to get large |
| 75 | file support -- which is reported to work ok for this HP/UX + cc |
| 76 | combination. |
| 77 | |
| 78 | |
| 79 | * SunOS 4.1.X. |
| 80 | |
| 81 | Amazingly, there are still people out there using this venerable old |
| 82 | banger. I shouldn't be too rude -- I started life on SunOS, and |
| 83 | it was a pretty darn good OS, way back then. Anyway: |
| 84 | |
| 85 | SunOS doesn't seem to have strerror(), so you'll have to use |
| 86 | perror(), perhaps by doing adding this (warning: UNTESTED CODE): |
| 87 | |
| 88 | char* strerror ( int errnum ) |
| 89 | { |
| 90 | if (errnum < 0 || errnum >= sys_nerr) |
| 91 | return "Unknown error"; |
| 92 | else |
| 93 | return sys_errlist[errnum]; |
| 94 | } |
| 95 | |
| 96 | Or you could comment out the relevant calls to strerror; they're |
| 97 | not mission-critical. Or you could upgrade to Solaris. Ha ha ha! |
| 98 | (what?? you think I've got Bad Attitude?) |
| 99 | |
| 100 | |
| 101 | * Making a shared library on Solaris. (Not really a compilation |
| 102 | problem, but many people ask ...) |
| 103 | |
| 104 | Firstly, if you have Solaris 8, either you have libbz2.so already |
| 105 | on your system, or you can install it from the Solaris CD. |
| 106 | |
| 107 | Secondly, be aware that there are potential naming conflicts |
| 108 | between the .so file supplied with Solaris 8, and the .so file |
| 109 | which Makefile-libbz2_so will make. Makefile-libbz2_so creates |
| 110 | a .so which has the names which I intend to be "official" as |
| 111 | of version 1.0.0 and onwards. Unfortunately, the .so in |
| 112 | Solaris 8 appeared before I decided on the final names, so |
| 113 | the two libraries are incompatible. We have since communicated |
| 114 | and I hope that the problems will have been solved in the next |
| 115 | version of Solaris, whenever that might appear. |
| 116 | |
| 117 | All that said: you might be able to get somewhere |
| 118 | by finding the line in Makefile-libbz2_so which says |
| 119 | |
| 120 | $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.2 $(OBJS) |
| 121 | |
| 122 | and replacing with |
| 123 | |
| 124 | $(CC) -G -shared -o libbz2.so.1.0.2 -h libbz2.so.1.0 $(OBJS) |
| 125 | |
| 126 | If gcc objects to the combination -fpic -fPIC, get rid of |
| 127 | the second one, leaving just "-fpic". |
| 128 | |
| 129 | |
| 130 | That's the end of the currently known compilation problems. |