cmake_minimum_required(VERSION 2.4)

if( COMMAND cmake_policy)
  IF( POLICY CMP0003 )
    cmake_policy( SET CMP0003 OLD)
  ENDIF( POLICY CMP0003 )
endif( COMMAND cmake_policy)

PROJECT(H3DNetworkingUtils)

IF( NOT WIN32 )
  # Add a cache variable GENERATE_CPACK_PROJECT to have the choice of generating a project
  # for packaging H3DNetworkingUtils. Default is NO since most people will not use this.
  IF( NOT DEFINED GENERATE_CPACK_PROJECT )
    SET( GENERATE_CPACK_PROJECT "NO" CACHE BOOL "Decides if a cpack project should be generated. The project in the first loaded CMakeLists will configure CPack." )
    MARK_AS_ADVANCED(GENERATE_CPACK_PROJECT)
  ENDIF( NOT DEFINED GENERATE_CPACK_PROJECT )
ENDIF( NOT WIN32 )

INCLUDE( "${H3DNetworkingUtils_SOURCE_DIR}/H3DNetworkingUtilsSourceFiles.txt" )
# Add the H3DNetworkingUtils.rc resource file if Visual Studio
IF(MSVC)
  SET( H3DNetworkingUtils_SRCS ${H3DNetworkingUtils_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/H3DNetworkingUtils.rc )
ENDIF(MSVC)

SET(optionalLibs)

INCLUDE_DIRECTORIES( ../include )

SET(requiredLibs)

IF( WIN32 )
  SET(requiredLibs ${requiredLibs} DelayImp.lib WSock32.lib)
ENDIF( WIN32 )

# Version of H3DNetworkingUtils
SET( H3DNetworkingUtils_MAJOR_VERSION 1 )
SET( H3DNetworkingUtils_MINOR_VERSION 0 )
SET( H3DNetworkingUtils_BUILD_VERSION 0 )

SET(CMAKE_MODULE_PATH  ${H3DNetworkingUtils_SOURCE_DIR}/modules $ENV{H3D_ROOT}/build/modules )
SET(RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)


#H3DUtil
FIND_PACKAGE(H3DUtil REQUIRED)

IF(H3DUTIL_FOUND)
  INCLUDE_DIRECTORIES( ${H3DUTIL_INCLUDE_DIR} ) 
  SET(requiredLibs ${requiredLibs} ${H3DUTIL_LIBRARIES} )
ENDIF(H3DUTIL_FOUND)

#HAPI
FIND_PACKAGE(HAPI REQUIRED)

IF(HAPI_FOUND)
  INCLUDE_DIRECTORIES( ${HAPI_INCLUDE_DIR} ) 
  SET(requiredLibs ${requiredLibs} ${HAPI_LIBRARIES} )
ENDIF(HAPI_FOUND)

#H3DAPI
FIND_PACKAGE(H3DAPI REQUIRED)

IF(H3DAPI_FOUND)
  INCLUDE_DIRECTORIES( ${H3DAPI_INCLUDE_DIR} ) 
  SET(requiredLibs ${requiredLibs} ${H3DAPI_LIBRARIES} )
ENDIF(H3DAPI_FOUND)

# autogenerate Config.h depending on the libraries available.
CONFIGURE_FILE( ${H3DNetworkingUtils_SOURCE_DIR}/../include/H3DNetworkingUtils/Config.cmake ${H3DNetworkingUtils_SOURCE_DIR}/../include/H3DNetworkingUtils/Config.h )

ADD_LIBRARY(H3DNetworkingUtils SHARED ${H3DNetworkingUtils_SRCS}
                                    ${H3DNetworkingUtils_HEADERS} )

# make sure that the H3DNetworkingUtils.rc contains the correct svn-version
IF( MSVC )
  EXECUTE_PROCESS( COMMAND ${H3DNetworkingUtils_SOURCE_DIR}/FindSVNVersion ${H3DNetworkingUtils_SOURCE_DIR}/../src/H3DNetworkingUtils/.svn/entries
                   OUTPUT_VARIABLE H3DNetworkingUtils_SVN_VERSION )
  # autogenerate H3DNetworkingUtils.rc depending on the version
  CONFIGURE_FILE( H3DNetworkingUtils.rc.cmake ${CMAKE_CURRENT_BINARY_DIR}/H3DNetworkingUtils.rc )

  ADD_CUSTOM_COMMAND( TARGET H3DNetworkingUtils 
                      PRE_BUILD 
                      ARGS H3DNetworkingUtils ${CMAKE_CURRENT_BINARY_DIR}/H3DNetworkingUtils.rc H3DNetworkingUtils.rc.cmake
                      ${H3DNetworkingUtils_MAJOR_VERSION} ${H3DNetworkingUtils_MINOR_VERSION}
                      ${H3DNetworkingUtils_BUILD_VERSION}
                      ${H3DNetworkingUtils_SOURCE_DIR}/../src/H3DNetworkingUtils/.svn/entries )
ENDIF(MSVC)

TARGET_LINK_LIBRARIES( H3DNetworkingUtils ${requiredLibs} ${optionalLibs} )

# make sure symbols are exported.
ADD_DEFINITIONS( -DRBP_EXPORTS )

# Debug version should have _d postfix.
SET_TARGET_PROPERTIES( H3DNetworkingUtils PROPERTIES DEBUG_POSTFIX "_d" )

IF( WIN32 )
  SET( H3DNetworkingUtils_LINK_FLAGS "" )
  SET( H3DNetworkingUtils_COMPILE_FLAGS "" )

  # change the name depending on compiler to be able to tell them apart
  # since they are not compatible with each other. 
  IF(MSVC70 OR MSVC71)
    SET_TARGET_PROPERTIES( H3DNetworkingUtils PROPERTIES OUTPUT_NAME H3DNetworkingUtils_vc7 )
  ELSEIF(MSVC80)
    SET_TARGET_PROPERTIES( H3DNetworkingUtils PROPERTIES OUTPUT_NAME H3DNetworkingUtils_vc8 )
    # remove some warnings about deprecated functions.
    SET( H3DNetworkingUtils_COMPILE_FLAGS "${H3DNetworkingUtils_COMPILE_FLAGS} -D_CRT_SECURE_NO_DEPRECATE" )
  ELSEIF(MSVC90)
    SET_TARGET_PROPERTIES( H3DNetworkingUtils PROPERTIES OUTPUT_NAME H3DNetworkingUtils_vc9 )
    # remove some warnings about deprecated functions. Compile using multi core.
    SET( H3DNetworkingUtils_COMPILE_FLAGS "${H3DNetworkingUtils_COMPILE_FLAGS} -D_CRT_SECURE_NO_DEPRECATE /MP" )
  ELSEIF(MSVC100)
    SET_TARGET_PROPERTIES( H3DNetworkingUtils PROPERTIES OUTPUT_NAME H3DNetworkingUtils_vc10 )
    # remove some warnings about deprecated functions. Compile using multi core.
    SET( H3DNetworkingUtils_COMPILE_FLAGS "${H3DNetworkingUtils_COMPILE_FLAGS} -D_CRT_SECURE_NO_DEPRECATE /MP" )
  ELSE(MSVC100)
    SET_TARGET_PROPERTIES( H3DNetworkingUtils PROPERTIES OUTPUT_NAME H3DNetworkingUtils_vc10 )
    # remove some warnings about deprecated functions. Compile using multi core.
    SET( H3DNetworkingUtils_COMPILE_FLAGS "${H3DNetworkingUtils_COMPILE_FLAGS} -D_CRT_SECURE_NO_DEPRECATE /MP" )
  ENDIF(MSVC70 OR MSVC71)

  # set link flags for H3DNetworkingUtils project
  SET_TARGET_PROPERTIES( H3DNetworkingUtils PROPERTIES LINK_FLAGS "${H3DNetworkingUtils_LINK_FLAGS}" )
  # set compile flags for H3DNetworkingUtils project
  SET_TARGET_PROPERTIES( H3DNetworkingUtils PROPERTIES COMPILE_FLAGS "${H3DNetworkingUtils_COMPILE_FLAGS}" )
  
ENDIF( WIN32 )


# If cpack should be configured.
IF( GENERATE_CPACK_PROJECT AND NOT WIN32)
  # Set information properties about the project to install.
  SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "H3DNetworkingUtils, an implementation for H3DAPI of networking nodes.")
  SET(CPACK_PACKAGE_VENDOR "CSIRO")
  SET(CPACK_PACKAGE_CONTACT "Chris.Gunn@csiro.au" )
  SET(CPACK_PACKAGE_DESCRIPTION_FILE "${H3DNetworkingUtils_SOURCE_DIR}/../ReadMe")
  SET(CPACK_RESOURCE_FILE_LICENSE "${H3DNetworkingUtils_SOURCE_DIR}/../LICENSE")

  # Project to install.
  SET(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_CURRENT_BINARY_DIR};H3DNetworkingUtils;ALL;/")

  # Installation directory for package.
  SET(CPACK_PACKAGE_INSTALL_DIRECTORY "../H3DNetworkingUtils/bin" )

  # File patterns to ignore, common for all operating systems.
  SET( H3DNetworkingUtils_CPACK_IGNORE_PATTERNS /\\\\.svn/
                                    \\\\.obj$
                                    \\\\.ncb$
                                    \\\\.log$
                                    \\\\.suo$
                                    \\\\.dir/
                                    \\\\.user$
                                    \\\\.cv$
                                    "/Debug(.)*/"
                                    "/debug(.)*/"
                                    /Release
                                    /release
                                    /linux
                                    /build/win32/
                                    /build/vc8
                                    /build/vc7
                                    /build/vc9
                                    /osx
                                    "~$" )

  SET(CPACK_PACKAGE_VERSION_MAJOR ${H3DNetworkingUtils_MAJOR_VERSION})
  SET(CPACK_PACKAGE_VERSION_MINOR ${H3DNetworkingUtils_MINOR_VERSION})
  SET(CPACK_PACKAGE_VERSION_PATCH ${H3DNetworkingUtils_BUILD_VERSION})

  SET(CPACK_SOURCE_IGNORE_FILES ${H3DNetworkingUtils_CPACK_IGNORE_PATTERNS} )
  SET(CPACK_SOURCE_INSTALLED_DIRECTORIES "${H3DNetworkingUtils_SOURCE_DIR}/../../H3DNetworkingUtils;H3DNetworkingUtils" )
  INCLUDE(CPack)
ENDIF( GENERATE_CPACK_PROJECT AND NOT WIN32 )

# set the install directory to the H3DNetworkingUtils directory on Windows
IF(WIN32 AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT )
  SET( CMAKE_INSTALL_PREFIX ${H3DNetworkingUtils_SOURCE_DIR}/.. CACHE PATH "Install path prefix, prepended onto install directories." FORCE )
ENDIF(WIN32 AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT )

IF( UNIX )
  # Install header files on non-windows system (e.g. Unix).
  INSTALL( FILES ${H3DNetworkingUtils_HEADERS}
           DESTINATION include/H3DNetworkingUtils )

ENDIF( UNIX )

# Intall directories.
INSTALL( TARGETS H3DNetworkingUtils
         LIBRARY DESTINATION lib  COMPONENT H3DNetworkingUtils_cpack_runtime
         RUNTIME DESTINATION bin  COMPONENT H3DNetworkingUtils_cpack_runtime
         ARCHIVE DESTINATION lib )


	 


    

