COMPILING SOURCE CODE DOCUMENTATION FOR POV-Ray 3.0 1.0 INTRODUCTION AND DISCLAIMERS This documentation is to help you compile the portable C source code into a working executable version of POV-Ray. This is only for those people who want to compile a custom version of POV-Ray or to port it to an unsupported platform or compiler. This documentation DOES NOT tell you how to use POV-Ray. User documentation, sample scenes and scene "include" files are in the archives which contain the pre-compiled executable versions or as a separate archive for Unix users who have no official executable versions. You MUST HAVE the user documentation and sample scenes to use POV-Ray. See the file POVWHERE.GET for details on what to get and where to get it. The first question you should ask yourself before proceeding is "Do I really need to compile POV-Ray at all?" Official POV-Ray Team executable versions are available for MS-Dos, Windows 3.1x/95/NT, Mac 68k, Mac Power PC, Amiga, Linux for Intel x86, and SunOS. Other unofficial compiles may soon be available for other platforms. If you do not intend to add any custom or experimental features to the program, and if an executable already exists for your platform then you need not compile this program yourself. If you do want to proceed, you should be aware that you are very nearly on your own. This documentation and other related compiling documentation assumes you know what you are doing. It assumes you have an adequate C compiler installed and working. It assumes you know how to compile and link large, multi-part programs using a "make" utility or an IDE project file if your compiler supports them. Because makefiles and project files often specify drive, directory or path information, we cannot promise our makefiles or projects will work on your system. We assume you know how to make changes to makefiles and projects to specify where your system libraries and other necessary files are located. In general you should not expect any technical support from the POV-Ray Team on how to compile the program. Everything is provided here "as is". All we can say with any certainty is that we were able to compile it on our systems. If it doesn't work for you, we probably cannot tell you why. There is no technical documentation for the source code itself except for the comments in the source files. We try our best to write clear, well- commented code but some sections are barely commented at all and some comments may be out dated. We do not provide any technical support to help you to add features. We do not explain how a particular feature works. In some instances, the person who wrote a part of the program is no longer active in the Team and we don't know exactly how it works. When making any custom version of POV-Ray or any unofficial compile, please make sure you read and follow all provisions of our license in the file POVLEGAL.DOC. In general you can modify and use POV-Ray on your own however you want but if you distribute your unofficial version you must follow our rules. You may not under any circumstances use portions of POV- Ray source code in other programs. 2.0 DIRECTORY STRUCTURE POV-Ray source code is distributed in archives with files arranged in a particular hierarchy of directories or folders. When extracting the archives, you should do so in a way that keeps the directory structure intact. In general we suggest you create a directory called \povray3 and extract the files from there. The extraction will create a directory called "source" with many files and sub-directories from it. In general, there are separate archives for each hardware platform and operating system but each of these archives may support more than one compiler. For example here is the directory structure for the MS-Dos archive. SOURCE SOURCE\LIBPNG SOURCE\ZLIB SOURCE\MSDOS SOURCE\MSDOS\PMODE SOURCE\MSDOS\ZTIMER SOURCE\MSDOS\BORLAND SOURCE\MSDOS\DJGPP SOURCE\MSDOS\WATCOM The SOURCE directory contains source files for the generic parts of POV-Ray that are the same on all platforms. The SOURCE\LIBPNG contains files for compiling a library of routines used in reading and writing PNG (Portable Network Graphics) image files. The SOURCE\ZLIB contains files for compiling a library of routines used by LIBPNG to compress and uncompress data streams. All of these files are used by all platforms and compilers. They are in every version of the source archives. The SOURCE\MSDOS directory contains source files for the MS-Dos version that are common to all supported MS-Dos compilers. The SOURCE\MSDOS\PMODE SOURCE\MSDOS\ZTIMER directories contain source files for PMODE.LIB and ZTIMER.LIB which are required by all MS-Dos versions. The SOURCE\MSDOS\BORLAND, SOURCE\MSDOS\DJGPP, and SOURCE\MSDOS\WATCOM directories contain source, makefiles and project files for C compilers by Borland, DJGPP, and Watcom. The SOURCE\MSDOS directory is only in the MS-Dos archive. Similarly the Windows archive contains a SOURCE\WINDOWS directory. The Unix archive contains source/unix etc. The SOURCE\MSDOS directory contains a file CMPL_MSD.DOC which contains compiling information specific to the MS-Dos version. Other platform specific directories contain similar CMPL_xxx.DOC files and the compiler specific sub-directories also contain compiler specific CMPL_xxx.DOC files. Be sure to read all pertinent CMPL_xxx.DOC files for your platform and compiler. 3.0 CONFIGURING POV-Ray SOURCE Every platform has a header file "config.h" that is generally in the platform specific directory but may be in the compiler specific directory. Some platforms have multiple versions of this file and you may need to copy or rename it as config.h. This file is #included in every module of POV- Ray. It contains any prototypes, macros or other definitions that may be needed in the generic parts of POV-Ray but must be customized for a particular platform or compiler. For example different operating systems use different characters as a separator between directories and file names. MS-Dos uses back slash, Unix a front slash, or Mac a colon. The config.h file for MS-Dos and Windows contains the following: #define FILENAME_SEPARATOR '\\' which tells the generic part of POV-Ray to use a back slash. Every customization that the generic part of the code needs has a default setting in the file SOURCE\FRAME.H which is also included in every module after config.h. The frame.h header contains many groups of defines such as this: #ifndef FILENAME_SEPARATOR #define FILENAME_SEPARATOR '/' #endif which basically says "if we didn't define this previously in config.h then here's a default value." See frame.h to see what other values you might wish to configure. If any of the definitions are used to specify platform specific functions, you should also include a prototype for that function. For example the file source\msdos\config.h not only contains the macro: #define POV_DISPLAY_INIT(w,h) MSDOS_Display_Init ((w), (h)); to define the name of the graphics display initialization function, it contains the prototype: void MSDOS_Display_Init (int w, int h); If you plan to port POV-Ray to an unsupported platform, you should probably start with the simplest, non-display generic Unix version. Then add new custom pieces via the config.h file. 4.0 CONCLUSION We understand that this file is only the most trivial first steps but half the fun of working on POV-Ray source is digging in and figuring it out on your own. That's how the POV-Ray Team members got started. We've tried to make the code as clear as we can. Be sure to read the CMPL_xxx.DOC files in your platform specific and compiler specific directories for some more minor help if you are working on a supported platform or compiler. Good luck!