Skip to content

Commit

Permalink
CMake3 port. Various Windows fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
meshula authored and nickrasmussen committed Aug 8, 2018
1 parent 90755f1 commit 36e8aef
Show file tree
Hide file tree
Showing 65 changed files with 466 additions and 387 deletions.
158 changes: 158 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
IF (WIN32)
CMAKE_MINIMUM_REQUIRED(VERSION 3.11)
ELSE()
CMAKE_MINIMUM_REQUIRED(VERSION 3.2)
ENDIF()

# Version
set(OPENEXR_VERSION_MAJOR 2)
set(OPENEXR_VERSION_MINOR 3)
set(OPENEXR_VERSION_PATCH 0)
set(OPENEXR_VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH})
set(OPENEXR_VERSION_API ${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR})

project(OpenEXR VERSION ${OPENEXR_VERSION})

#-------------------------------------------------------------------------------
# The following user options are cached. They are named with the OPENEXR
# prefix in order that they be grouped together in tools such as ccmake and cmake-gui.

option(OPENEXR_BUILD_ILMBASE "Build IlmBase" ON)
option(OPENEXR_BUILD_OPENEXR "Build OpenEXR" ON)
option(OPENEXR_BUILD_PYTHON_LIBS "Build the Python bindings" OFF)
option(OPENEXR_BUILD_VIEWERS "Build the viewers" OFF)
option(OPENEXR_BUILD_TESTS "Enable the tests" ON)

option(OPENEXR_BUILD_SHARED "Build Shared Libraries" ON)
option(OPENEXR_BUILD_STATIC "Build Static Libraries" OFF)
option(OPENEXR_NAMESPACE_VERSIONING "Use Namespace Versioning" ON)
option(OPENEXR_FORCE_CXX03 "Force CXX03" OFF)
set(OPENEXR_PYTHON_MAJOR "2" CACHE STRING "Python major version")
set(OPENEXR_PYTHON_MINOR "7" CACHE STRING "Python minor version")

# For more info on finding boost python:
# https://cmake.org/cmake/help/v3.11/module/FindBoost.html

# end of user options
#-------------------------------------------------------------------------------


if (OPENEXR_BUILD_VIEWERS AND NOT OPENEXR_BUILD_OPENEXR)
message(ERROR, "Configuration error, enable OPENEXR_BUILD_OPENEXR for OPENEXR_BUILD_VIEWERS")
endif()

if (WIN32 AND OPENEXR_BUILD_ILMBASE AND OPENEXR_BUILD_OPENEXR AND OPENEXR_BUILD_SHARED)
# necessary for building dwa lookup tables, and b44log tables on windows
set(BUILD_ILMBASE_STATIC ON)
elseif (OPENEXR_BUILD_ILMBASE AND OPENEXR_BUILD_STATIC)
set(BUILD_ILMBASE_STATIC ON)
else()
set(BUILD_ILMBASE_STATIC OFF)
endif()

# Testing
set(ENABLE_TESTS ${OPENEXR_BUILD_TESTS})
if(ENABLE_TESTS)
include(CTest)
enable_testing()
endif()

# CPACK
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
set(CPACK_SOURCE_IGNORE_FILES "/.git*;/.cvs*;${CPACK_SOURCE_IGNORE_FILES}")
set(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${OPENEXR_VERSION}" )
include(CPack)

# Configuration
if(OPENEXR_FORCE_CXX03)
ADD_DEFINITIONS ( -std=c++03 )
else(OPENEXR_FORCE_CXX03)
# VP18 switches to c++14, so let's do that by default
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ ISO Standard")
# but switch gnu++14 or other extensions off for portability
set(CMAKE_CXX_EXTENSIONS OFF)
endif()

add_definitions( -DHAVE_CONFIG_H )

if(NOT WIN32)
add_definitions( -pthread )
endif()

if(WIN32)
set(RUNTIME_DIR bin)
else()
set(RUNTIME_DIR lib)
endif()

set(OPENEXR_LIBSUFFIX "")
set(ILMBASE_LIBSUFFIX "")
if(OPENEXR_NAMESPACE_VERSIONING)
set( OPENEXR_LIBSUFFIX "-${OPENEXR_VERSION_API}" )
set( ILMBASE_LIBSUFFIX "-${OPENEXR_VERSION_API}" )
endif()

# MacOs/linux rpathing
set(CMAKE_MACOSX_RPATH 1)
set(BUILD_WITH_INSTALL_RPATH 1)

# Packages
find_package(ZLIB)
if(OPENEXR_BUILD_OPENEXR AND NOT ZLIB_FOUND)
message(WARNING "Make Zlib available to CMake's search path, and re-run configuration")
message(FATAL_ERROR "Zlib is a required dependency when OPENEXR_BUILD_OPENEXR is set")
endif()

if (OPENEXR_BUILD_PYTHON_LIBS)
find_package(PythonLibs ${OPENEXR_PYTHON_MAJOR}.${OPENEXR_PYTHON_MINOR})
if(NOT PythonLibs_FOUND)
message(WARNING "Make Python ${OPENEXR_PYTHON_MAJOR}.${OPENEXR_PYTHON_MINOR} available to CMake's search path, and re-run configuration")
message(FATAL_ERROR "Python is a required dependency when OPENEXR_BUILD_PYTHON_LIBS is set")
endif()

find_package(Boost COMPONENTS python${OPENEXR_PYTHON_MAJOR}${OPENEXR_PYTHON_MINOR})
if(NOT Boost_PYTHON${OPENEXR_PYTHON_MAJOR}${OPENEXR_PYTHON_MINOR}_FOUND)
message(WARNING "Make boost Python${OPENEXR_PYTHON_MAJOR}${OPENEXR_PYTHON_MINOR} available to CMake's search path, and re-run configuration")
message(FATAL_ERROR "boost Python is a required dependency when OPENEXR_BUILD_PYTHON_LIBS is set")
endif()

find_package(NumPy)
if(NOT NumPy_FOUND)
message(WARNING "Numpy not found, PyImathNumpy will not be built")
endif()
endif()

if(OPENEXR_BUILD_VIEWERS)
message(WARNING "Viewers are currently out of order. Building anyway")
SET (FLTK_SKIP_FLUID 1)
find_package(FLTK)
if(NOT FLTK_FOUND)
message(WARNING "FLTK not found, exrdisplay will not be built")
endif()
find_package(OpenGL)
if(NOT OpenGL_FOUND)
message(WARNING "OpenGL not found, exrdisplay will not be built")
endif()
endif()

# Perform the build
if(OPENEXR_BUILD_ILMBASE)
add_subdirectory(IlmBase)
endif()
if(OPENEXR_BUILD_OPENEXR)
add_subdirectory(OpenEXR)
else()
message(INFO, "Skipping OpenEXR build")
endif()
if(OPENEXR_BUILD_PYTHON_LIBS)
add_subdirectory(PyIlmBase)
else()
message(INFO, "Skipping Python bindings")
endif()
if(OPENEXR_BUILD_VIEWERS AND FLTK_FOUND AND OpenGL_FOUND)
add_subdirectory(OpenEXR_Viewers)
else()
message(INFO, "Skipping OpenEXR Viewers")
endif()
123 changes: 42 additions & 81 deletions IlmBase/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,56 +1,22 @@
# yue.nicholas@gmail.com
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT ( ilmbase )

SET(ILMBASE_VERSION_MAJOR "2")
SET(ILMBASE_VERSION_MINOR "2")
SET(ILMBASE_VERSION_PATCH "0")

SET(ILMBASE_VERSION ${ILMBASE_VERSION_MAJOR}.${ILMBASE_VERSION_MINOR}.${ILMBASE_VERSION_PATCH})
SET(ILMBASE_VERSION_API ${ILMBASE_VERSION_MAJOR}_${ILMBASE_VERSION_MINOR})


ENABLE_TESTING()

SET(CPACK_PACKAGE_VERSION_MAJOR "${ILMBASE_VERSION_MAJOR}")
SET(CPACK_PACKAGE_VERSION_MINOR "${ILMBASE_VERSION_MINOR}")
SET(CPACK_PACKAGE_VERSION_PATCH "${ILMBASE_VERSION_PATCH}")
SET(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_SOURCE_PACKAGE_FILE_NAME
"${CMAKE_PROJECT_NAME}-${ILMBASE_VERSION}"
)
set(CPACK_SOURCE_IGNORE_FILES
"/.git*;/.cvs*;${CPACK_SOURCE_IGNORE_FILES}")
INCLUDE ( CPack )


# Allow the developer to select if Dynamic or Static libraries are built
OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" ON)
OPTION (BUILD_STATIC_LIBS "Build Static Libraries" OFF)

# Enable namespace versioning
OPTION (NAMESPACE_VERSIONING "Namespace Versioning" ON)

OPTION (FORCE_CXX03 "Force CXX03" OFF)
IF (FORCE_CXX03)
ADD_DEFINITIONS ( -std=c++03 )
ELSE (FORCE_CXX03)
# VP18 switches to c++14, so let's do that by default
SET(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ ISO Standard")
# but switch gnu++14 or other extensions off for portability
SET(CMAKE_CXX_EXTENSIONS OFF)
ENDIF ()
IF (WIN32)
CMAKE_MINIMUM_REQUIRED(VERSION 3.11)
ELSE()
CMAKE_MINIMUM_REQUIRED(VERSION 3.2)
ENDIF()

# Setup osx rpathing
SET (CMAKE_MACOSX_RPATH 1)
SET (BUILD_WITH_INSTALL_RPATH 1)
PROJECT ( ilmbase )

IF ( NOT WIN32)
ADD_DEFINITIONS ( -pthread )
ENDIF ()
set(ILMBASE_BASEVERSION ${OPENEXR_BASEVERSION})
set(ILMBASE_VERSION_MAJOR ${OPENEXR_VERSION_MAJOR})
set(ILMBASE_VERSION_MINOR ${OPENEXR_VERSION_MINOR})
set(ILMBASE_VERSION_PATCH ${OPENEXR_VERSION_PATCH})
set(ILMBASE_VERSION ${OPENEXR_VERSION})
set(ILMBASE_VERSION_API ${OPENEXR_VERSION_API})

INCLUDE_DIRECTORIES ( Iex IexMath Imath Half ${CMAKE_CURRENT_BINARY_DIR}/config IlmThread IexTest ImathTest HalfTest )
INCLUDE_DIRECTORIES ( Iex IexMath Imath Half
IlmThread IexTest ImathTest HalfTest
${CMAKE_CURRENT_BINARY_DIR}/config )

# also add the current directory to pick up the autogenerated headers
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
Expand All @@ -63,7 +29,7 @@ MACRO(GET_TARGET_PROPERTY_WITH_DEFAULT _variable _target _property _default_valu
ENDMACRO (GET_TARGET_PROPERTY_WITH_DEFAULT)

MACRO(CREATE_LIBTOOL_FILE _target _install_DIR)
GET_TARGET_PROPERTY(_target_location ${_target} LOCATION)
SET(_target_location $<TARGET_FILE:${_target}>)
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_static_lib ${_target} STATIC_LIB "")
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dependency_libs ${_target} LT_DEPENDENCY_LIBS "")
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_current ${_target} LT_VERSION_CURRENT 0)
Expand All @@ -73,8 +39,8 @@ MACRO(GET_TARGET_PROPERTY_WITH_DEFAULT _variable _target _property _default_valu
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_shouldnotlink ${_target} LT_SHOULDNOTLINK yes)
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dlopen ${_target} LT_DLOPEN "")
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dlpreopen ${_target} LT_DLPREOPEN "")
GET_FILENAME_COMPONENT(_laname ${_target_location} NAME_WE)
GET_FILENAME_COMPONENT(_soname ${_target_location} NAME)
SET(_laname ${_target}${OPENEXR_LIBSUFFIX})
SET(_soname ${_laname})
SET(_laname ${PROJECT_BINARY_DIR}/${_laname}.la)
FILE(WRITE ${_laname} "# ${_laname} - a libtool library file\n")
FILE(APPEND ${_laname} "# Generated by CMake ${CMAKE_VERSION} (like GNU libtool)\n")
Expand Down Expand Up @@ -105,27 +71,20 @@ MACRO(GET_TARGET_PROPERTY_WITH_DEFAULT _variable _target _property _default_valu
INSTALL( FILES ${_laname} DESTINATION ${CMAKE_INSTALL_PREFIX}${_install_DIR})
ENDMACRO(CREATE_LIBTOOL_FILE)

IF (WIN32)
SET (RUNTIME_DIR bin)
ELSE ()
SET (RUNTIME_DIR lib)
ENDIF ()

SET (ILMBASE_LIBSUFFIX "")
IF (NAMESPACE_VERSIONING)
SET ( ILMBASE_LIBSUFFIX "-${ILMBASE_VERSION_API}" )
ENDIF ()

ADD_SUBDIRECTORY ( Half )
ADD_SUBDIRECTORY ( Iex )
ADD_SUBDIRECTORY ( IexMath )
ADD_SUBDIRECTORY ( Imath )
ADD_SUBDIRECTORY ( IlmThread )

IF (WIN32)
FILE ( COPY ${CMAKE_CURRENT_SOURCE_DIR}/config.windows/IlmBaseConfig.h
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/config
)
FILE ( WRITE ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#ifdef HAVE_PTHREAD\n" )
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "# undef HAVE_PTHREAD\n" )
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#endif\n" )
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#ifdef HAVE_POSIX_SEMAPHORES\n" )
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "# undef HAVE_POSIX_SEMAPHORES\n" )
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#endif\n" )
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#define PLATFORM_WINDOWS 1\n" )
ELSE ()
IF (APPLE)
FILE ( WRITE ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#define HAVE_PTHREAD 1\n" )
Expand All @@ -137,7 +96,7 @@ ELSE ()
ENDIF ()
ENDIF ()

IF (FORCE_CXX03)
IF (OPENEXR_FORCE_CXX03)
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#define ILMBASE_FORCE_CXX03 1\n" )
ELSEIF (NOT WIN32)
# really only care about c++11 right now for the threading bits, but this can be changed to 14
Expand All @@ -146,7 +105,7 @@ ELSEIF (NOT WIN32)
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#if __cplusplus < 201103L\n# error \"Modern C++ 11/14 not enabled but force cxx03 not set\"\n#endif\n" )
ENDIF ()

IF (NAMESPACE_VERSIONING)
IF (OPENEXR_NAMESPACE_VERSIONING)
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#define ILMBASE_INTERNAL_NAMESPACE_CUSTOM 1\n")
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#define IMATH_INTERNAL_NAMESPACE Imath_${ILMBASE_VERSION_API}\n")
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h "#define IEX_INTERNAL_NAMESPACE Iex_${ILMBASE_VERSION_API}\n")
Expand Down Expand Up @@ -184,21 +143,23 @@ ENDIF ()


# Tests

ADD_SUBDIRECTORY ( HalfTest )
ADD_SUBDIRECTORY ( IexTest )
ADD_SUBDIRECTORY ( ImathTest )
IF ( ENABLE_TESTS )
ADD_SUBDIRECTORY ( HalfTest )
ADD_SUBDIRECTORY ( IexTest )
ADD_SUBDIRECTORY ( ImathTest )
ENDIF ()

# Installation

INSTALL ( FILES
INSTALL ( FILES
${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h
DESTINATION
include/OpenEXR
)

FILE ( WRITE ${CMAKE_BINARY_DIR}/IlmBase.pc "prefix=${CMAKE_INSTALL_PREFIX}\n" )
FILE ( APPEND ${CMAKE_BINARY_DIR}/IlmBase.pc "exec_prefix=\${prefix}
IF ( NOT WIN32 )
FILE ( WRITE ${CMAKE_BINARY_DIR}/IlmBase.pc "prefix=${CMAKE_INSTALL_PREFIX}\n" )
FILE ( APPEND ${CMAKE_BINARY_DIR}/IlmBase.pc "exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
OpenEXR_includedir=\${prefix}/include/OpenEXR
Expand All @@ -210,9 +171,9 @@ Libs: -L\${libdir} -lImath${ILMBASE_LIBSUFFIX} -lIexMath${ILMBASE_LIBSUFFIX} -lH
Cflags: -pthread -I\${OpenEXR_includedir}
")

INSTALL ( FILES
${CMAKE_BINARY_DIR}/IlmBase.pc
DESTINATION
lib/pkgconfig
)

INSTALL ( FILES
${CMAKE_BINARY_DIR}/IlmBase.pc
DESTINATION
lib/pkgconfig
)
ENDIF()
Loading

0 comments on commit 36e8aef

Please sign in to comment.