• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

AUTHORSH A D18-Nov-2017336 2216

COPYINGH A D18-Nov-20171.7 KiB3528

ChangeLogH A D18-Nov-20175 KiB137128

INSTALLH A D18-Nov-201775 32

LICENSEH A D18-Nov-20171.7 KiB3528

NEWSH A D18-Nov-201738 42

READMEH A D18-Nov-20171.9 KiB7144

README.CVSH A D18-Nov-2017534 1711

README.OSXH A D18-Nov-20173.7 KiB10271

README.gitH A D18-Nov-2017540 1711

README.namespacingH A D18-Nov-20173.5 KiB8466

README.win32H A D31-Oct-20127.3 KiB197142

README

1ABOUT THE ILMBASE LIBRARIES
2----------------------------
3
4Half is a class that encapsulates our 16-bit floating-point format.
5
6IlmThread is a thread abstraction library for use with OpenEXR
7and other software packages.  It currently supports pthreads and
8Windows threads.
9
10Imath implements 2D and 3D vectors, 3x3 and 4x4 matrices, quaternions
11and other useful 2D and 3D math functions.
12
13Iex is an exception-handling library.
14
15If you have questions about using the IlmBase libraries, you may want
16to join our developer mailing list.  See http://www.openexr.com for
17details.
18
19
20LICENSE
21-------
22
23The IlmBase source code distribution is free software.  See the file
24named COPYING (included in this distribution) for details.
25
26
27BUILDING ILMBASE
28----------------
29
30To build IlmBase on GNU/Linux or other UNIX-like systems, do this:
31
32./configure
33make
34make install
35
36unless you obtained IlmBase directly from git, in which case you
37should first read README.git
38
39
40Please type :
41
42./configure --help
43
44for a list of options in relation to building IlmBase libraries. In
45particular, peruse README.namespaces for information regarding the
46use of namespaces in IlmBase and OpenEXR.
47
48
49See README.OSX for details on building IlmBase in MacOS X.
50
51Do `make check` to run the IlmBase confidence tests.  They should all
52pass; if you find a test that does not pass on your system, please let
53us know.
54
55Other UNIX variants haven't been tested, but should be easy to build.
56Let us know if you're having problems porting IlmBase to a particular
57platform.
58
59All include files needed to use the IlmBase libraries are installed in the
60OpenEXR subdirectory of the install prefix, e.g. /usr/local/include/OpenEXR.
61
62
63USING ILMBASE IN YOUR APPLICATIONS
64----------------------------------
65
66On systems with support for pkg-config, use `pkg-config --cflags
67IlmBase` for the C++ flags required to compile against IlmBase
68headers; and `pkg-config --libs IlmBase` for the linker flags required
69to link against IlmBase libraries.
70
71

README.CVS

1If you're using IlmBase from CVS, you should run the bootstrap script
2to create the auto* files.  It's a good idea to run this whenever you
3update IlmBase from CVS.
4
5Then run './configure' and make.
6
7Note that the configure.ac file requires a fairly new version of
8automake.  If you get this error message:
9
10running aclocal ...
11aclocal: configure.ac: 142: macro `AM_CFLAGS' not found in library
12aclocal: configure.ac: 143: macro `AM_CXXFLAGS' not found in library
13failed!
14
15you should upgrade your automake to version 1.6 or better.
16
17

README.OSX

1IlmBase on MacOS X
2------------------
3
4Building IlmBase on MacOS X is just like building it on GNU/Linux.
5Follow the instructions in the README file under BUILDLING ILMBASE,
6but see below re: shared libraries.
7
8
9Missing gnu automake tools on  Mac OS X 10.8+
10------------------
11Later versions of OS X ,10.8+, do not, by default have all the necessary
12tools for building. In particular,  Autoconf and Automake may be missing.
13
14The following commands will download and install the necessary components:
15
16cd ~/myDevLoc
17curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-2.64.tar.gz
18tar xzf autoconf-2.64.tar.gz
19cd autoconf-2.64
20./configure --prefix=~/myDevLoc/autotools-bin
21make; make install
22
23cd ~/myDevLoc
24curl -OL http://ftpmirror.gnu.org/automake/automake-1.12.tar.gz
25tar xzf automake-1.12.tar.gz
26cd automake-1.12
27./configure --prefix=~/myDevLoc/autotools-bin
28make; make install
29
30cd ~/myDevLoc
31curl -OL http://ftpmirror.gnu.org/libtool/libtool-2.4.tar.gz
32tar xzf libtool-2.4.tar.gz
33cd libtool-2.4
34./configure --prefix=~/myDevLoc/autotools-bin
35make; make install
36
37
38You may want to export the installation path for your convenience.
39Finally, make sure that you have installed the command line tools for XCode.
40
41
42Universal Builds on Mac OS X
43------------------
44OS X supports multiple architectures. By default, IlmBase will be built
45for the system doing the building. For example, if you build IlmBase on
46an Intel system, the libraries will be built for Intel.
47
48You can specify building for a different architecture, or multiple architectures,
49by passing the "--enable-osx-arch" flag to configure. Building for multiple
50architectures requires that "--disable-dependency-tracking" be passed as well.
51
52For example, to build for Intel and PowerPC:
53
54./configure --enable-osx-arch="i386 ppc" --disable-dependency-tracking.
55
56To build "4-way universal" for 32-bit and 64-bit Intel and PowerPC:
57
58./configure --enable-osx-arch="i386 ppc x86_64 ppc64" --disable-dependency-tracking.
59
60For more information on universal builds, see:
61
62http://developer.apple.com/documentation/Porting/Conceptual/PortingUNIX/compiling/chapter_4_section_3.html
63
64Earlier releases of IlmBase included an "--enable-osx-universal-binaries"
65switch, which specifies a two-way universal build: Intel and PowerPC, 32-bit only.
66This is still available, but deprecated in favor of the more flexible
67"--enable-osx-arch" and "--enable-osx-sdk" switches.
68
69
70Choosing an SDK on Mac OS X
71------------------
72OS X allows you to specify one of several SDKs, or sysroots. This allows you to
73target systems other than the system that your build machine runs.
74
75For example, if you are building on Mac OS X 10.4, but you need access to features
76that were introduced in Mac OS X 10.5, you can build against the Mac OS X 10.5
77versions of system libraries and headers.
78
79You can choose to build IlmBase with a specific SDK using the "--enable-osx-sdk"
80switch. For example:
81
82./configure --enable-osx-sdk=MacOSX10.5.sdk
83
84If you are building on Mac OS X 10.4 and want to build universal, you will need to
85specify the universal version of the 10.4 SDK: MacOSX10.4u.sdk. Otherwise, you probably
86don't need to specify an SDK.
87
88For more information on sysroots, see:
89
90http://developer.apple.com/documentation/DeveloperTools/gcc-4.2.1/gcc/Directory-Options.html
91
92
93Shared libraries
94----------------
95
96IlmBase requires the "flat namespace" option when built as a shared
97library.  You may have problems trying to use IlmBase shared libraries
98with applications that expect OS X's two-level namespace.  We have not
99tested the shared libs extensively, though they appear to work with
100exrdisplay and exrheader, but use them at your own risk.  We will
101support two-level namespace shared libs in a future release.
102

README.git

1If you're using IlmBase from github, you should run the bootstrap script
2to create the auto* files.  It's a good idea to run this whenever you
3update IlmBase from github.
4
5Then run './configure' and make.
6
7Note that the configure.ac file requires a fairly new version of
8automake.  If you get this error message:
9
10running aclocal ...
11aclocal: configure.ac: 142: macro `AM_CFLAGS' not found in library
12aclocal: configure.ac: 143: macro `AM_CXXFLAGS' not found in library
13failed!
14
15you should upgrade your automake to version 1.6 or better.
16
17

README.namespacing

1------------------------------------------------
2 On the use of namespace in IlmBase and OpenEXR
3------------------------------------------------
4
5v2.0 of the code base introduces user configurable namespaces for
6component libraries. This addition introduces the ability to deal with
7multiple versions of these libraries loaded at runtime.
8An example case:
9    Application is built with OpenEXR v1.7, but the required plugin
10    requires functionality from OpenEXR v2.0.
11
12    By injecting the version number into the (mangled) symbols, via
13    the namespacing mechanism, and changing the soname, via the build
14    system, the developer can link his plugin against the v2.0 library
15    At run time the dynamic linker can load both the 1.7 and 2.0
16    versions of the library since the library soname are different and
17    the symbols are different.
18
19
20When building IlmBase or OpenEXR the following configure script options
21are available:
22    --enable-namespaceversioning
23and
24    --enable-customusernamespace
25
26
27
28-- Internal Library Namespace
29The option, --enable-namespaceversioning, controls the namespace that
30is used in the library. Without an argument (see below) the library
31will be built with a suffix made up of the major and minor versions.
32For example, for version 2.0.0, the internal library namespaces will be
33Imath_2_0, Iex_2_0, IlmThread_2_0 etc
34
35For additional flexibility and control, this option can take an additional
36argument in which case the internal library namespace will be suffixed
37accordingly.
38For example:
39    ./configure --enable-namespaceversioning=ILM
40will result in the namespaces of the type Imath_ILM, Iex_ILM etc.
41
42This can be useful for completely isolating your local build.
43
44Code using the library should continue to use the namespace Imath, or for
45greater portability IMATH_NAMESPACE, to refer to objects in libImath.
46In particular, the explicit use of the internal namespace is discouraged.
47This ensures that code will continue to compile with customised or future
48versions of the library, which may have a different internal namespace.
49
50Similarily, for other namespaces in the libraries: Iex, IlmThread and IlmImf.
51
52Note that this scheme allows existing code to compile without modifications,
53since the 'old' namespaces Imath, Iex, IlmThread and IlmImf continue to be
54available, albeit in a slightly different form.
55This is achieved via the following, in the Imath case:
56    namespace IMATH_INTERNAL_NAMESPACE {}
57    namespace IMATH_NAMESPACE
58    {
59         using namespace IMATH_INTERNAL_NAMESPACE;
60    }
61This is included in all header files in the Imath library and similar ones
62are present for the libraries Iex, IlmThread and IlmImf.
63
64The only exception to this is where user code has forward declarations of
65objects in the Imf namespace, as these will forward declare symbols in an
66incorrect namespace
67These forward declarations should be removed, and replaced with
68    #include <ImfForward.h>,
69which forward-declares all types correctly.
70
71
72
73-- Public/User Library Namespace
74The option, --enable-customusernamespace, can override the namespace into
75which we will 'export' the internal namespace. This takes an argument
76that sets the name of the custom user namespace.
77In the example above, IMATH_NAMESPACE could be resolved into something other
78than Imath, say Imath_MySpecialNamespace.
79
80In nearly all cases, this will not be used as per the above discussion
81regarding code compatibility.
82Its presence is to provide a mechanism for not prohibiting the case when
83the application must pass objects from two different versions of the library.
84

README.win32

1IlmBase is one of five software packages that were designed to work
2together: IlmBase, OpenEXR, OpenEXR_Viewers, CTL and OpenEXR_CTL.
3You may want to build Imath by itself, or together with one or more
4of the other packages.
5
6What follows are instructions for building all five packages.
7If you want to build only IlmBase, stop after step 1.
8
9A couple of notes before getting started:
10
11- This is not the only way to do this. This document describes a path
12that doesn't involve installing libraries into default system paths,
13but rather, creates a standalone universe.
14- Some of these steps may be a bit redundant, and will be optimized in
15the future.
16- The Debug versions of the libraries and tools are not required if
17you are not going to be doing any debugging, and can be optionally
18built.
19
20The source will build under both Visual Studio versions 7 and 8, and
21there are separate directories for the corresponding build files.  The
22tag <vc7|8> is used in this document to describe the appropriate folder
23in the path that corresponds to your the version of Visual Studio.
24
25The Visual Studio project files assume, and help build out, a directory
26called "Deploy".   In the end, this directory will contain the objects
27that might then be moved away from the source for general running of the
28compiled programs.  The directory structure at the end of compiling all
29the related tools looks like this:
30
31Deploy
32  include
33  lib
34    Debug
35    Release
36  bin
37    Debug
38    Release
39openexr-cvs (name as desired)
40  IlmBase
41  OpenEXR
42  OpenEXR_Viewers
43ctl-cvs (name as desired)
44  CTL
45  OpenEXR_CTL
46fltk
47  FL
48  GL
49  lib
50nvidia
51  include
52    GL
53    glh
54  lib
55
56If OpenEXR_Viewers is not being compiled, then fltk and nvidia will
57not be needed, but that will be covered later.
58
59Step 1. Compile IlmBase
60
61  a. Point Visual Studio at the .sln file in vc\<vc7|8>\IlmBase in the
62  IlmBase subdirectory
63
64  b. Select the Release configuration and hit Build Solution.  This
65  will create the Deploy directory, and copy the relevant parts to it.
66
67  c. If the debug versions are desired, select the Debug configuration
68  and hit Build Solution.  This will add the Debug directories to Deploy.
69
70Step 2. Compile OpenEXR support
71
72  a. Retrieve the zlib binaries. The project files are set up to link
73     against the dll version of zlib, but can easily be changed to link
74     against a static version, or a self-built version if desired.
75
76    1. Go to http://www.zlib.net and download the precompiled DLL
77       version of zlib (as of writing, zlib123-dll.zip)
78
79    2. If you don't wish to put the files into your MS visual studio
80       directories and install the dll into windows\system32:
81
82        a. Put a copy of zlib1.dll into Deploy\bin\Release and
83           Deploy\bin\Debug
84
85        b. Copy the header files into Deploy\include
86
87        c. Copy zdll.lib and zdll.exp into Deploy\lib\Release and
88           Deploy\lib\Debug
89
90  b. Open the Visual Studio project in OpenEXR\vc\<vc7|8>\OpenEXR.
91
92  c. Select the Release configuration and build. The IlmImfTest
93     program runs a confidence test of your build to make sure
94     it is able to work, and may take some time to complete.
95
96  d. Optionally select the Debug configuration and build.
97
98Step 3. Compile CTL support
99
100  a. Open the Visual Studio project in CTL\vc\<vc7|8>\CTL.
101
102  b. Select the Release configuration and build. The IlmCtlTest
103     program runs a confidence test of your build to make sure it is
104     able to work, and may take some time to complete.
105
106  c. Optionally select the Debug configuration and build.
107
108Step 4. Compile OpenEXR_CTL support
109
110  a. Open the Visual Studio project in OpenEXR_CTL\vc\<vc7|8>\OpenEXR_CTL.
111
112  b. Select the Release configuration and build.
113
114  c. Optionally select the Debug configuration and build.
115
116Step 5. Compile OpenEXR_Viewers
117
118  a. Open the appropriate Visual Studio project in
119     OpenEXR_Viewers\vc\<vc7|8>\OpenEXR_Viewers depending on whether or not
120     you want CTL support.
121
122  b. exrdisplay requires fltk to work.
123
124    1. Go to http://www.fltk.org and download fltk 1.1.7
125
126    2. Open its project files and compile using the instructions they
127       provide.
128
129    3. Create the fltk directory at the top level of your directory
130       structure as presented above and copy the FL, GL, and lib folders
131       into the fltk directory
132
133    4. exrdisplay links fltk statically, so no dll is needed.
134
135  c. playexr requires the nvidia cg library as well as glut and glew.
136
137    1. Setup the cg toolkit
138
139      a. Go to http://developer.nvidia.com, the developer section and
140         download the cg toolkit, version 1.5, and install it.  The path
141         where you choose to install Cg is referred to by the
142         <Cg install location> tag in the steps below.
143
144      b. During the installation, if the integrate with visual studio
145         option is selected, the header files will be automatically found.
146         Otherwise, copy the directory <Cg install location>\Cg\include\Cg
147         to Deploy\include\Cg
148
149      b. Copy the cg.dll and cgGL.dll from the <Cg install location>\Cg\bin
150         into Deploy\bin\Release and Deploy\bin\Debug, or otherwise make
151         them available (put them in system32, add to path, etc.)
152
153      c. Copy the cg.lib and cgGL.lib from <Cg install location>\Cg\lib
154         into Deploy\lib\Release and Deploy\lib\Debug
155
156    2. Make glut available. This can be done via several mechanisms.
157       See step 4 below.
158
159    3. Make glew available. This can be done via several mechanisms.
160       http://glew.sourceforge.net is the master site for this
161       library. See step 4 below.
162
163    4. nVidia makes both glut and glew available in their SDK package,
164       which is a fairly large download, but provides a wealth of other
165       information on programming for the GPU, and is generally a useful
166       package, so that is the path chosen for this set up.
167
168      a. Go to http://developer.nvidia.com and download version 10 of the
169         SDK and install it.  It will prompt you to install the Cg toolkit,
170         but this is not necessary as it was handled in step 1.  The path
171         where you choose to install the SDK is referred to by the
172         <SDK install location> tag in the steps below.
173
174      b. Make an nvidia folder at the top level, with an include and
175         lib folder inside it.  Inside the lib folder, make Debug and
176         Release folders.
177
178      c. Copy the <SDK install location>\external\include\GL directory into
179         nvidia\include the GL and glh folders into nvidia\include.
180
181      d. Copy the glew headers in <SDK install location>\common\GLEW\include\GL
182         into nvidia\include\GL.
183
184      e. Copy <SDK install location>\common\GLEW\lib\glew32.lib and
185         <SDK install location>\external\lib\glut32.lib into Deploy\bin\Release.
186
187      f. Copy bin\glut32.dll and bin\glew32.dll into Deploy\bin\Release.
188
189  d. Build the Release configuration of the OpenEXR_Viewers.
190
191  e. Build the Debug configuration if desired.
192
193At this point, the Deploy folder should be fully built out and ready
194to be used.  Both exrdisplay and playexr are meant to be launched from
195the command line, as they originated as unix commands, so open a command
196prompt, cd to the Deploy\bin\Release folder and enjoy.
197