# mkoctfile -I../../QtInstall/Qt-4.7.3/include/QtNetwork -I../../QtInstall/Qt-4.7.3/include/QtCore -I../../QtInstall/Qt-4.7.3/include -L../../QtInstall/Qt-4.7.3/lib -lQtCore -lQtNetwork getEclipseProperty.cpp

set(CPP_SOURCES
  riGetActiveCellProperty.cpp
  riSetActiveCellProperty.cpp
  riGetActiveCellInfo.cpp
  riGetMainGridDimensions.cpp
)

if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    set(RPATH_COMMAND "-Wl,-rpath=${RESINSIGHT_FINAL_INSTALL_PATH} -Wl,-rpath=.")
endif()

if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
    set (QT_LIBRARY_POSTFIX 4)
endif()

set(OCTAVE_BINARY_OCT_FILES)

# On Windows, the Octave plugins are compiled using 32-bit VS2010
# To be able to do so, we need to establish all Qt-related variables for a 32-bit configuration
# In addition, VS2010 32-bit compile environment must be launched
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND CMAKE_CL_64)
    find_program(32BIT_QMAKE 32bitqmake)
    if(32BIT_QMAKE)
        get_filename_component(32BIT_QMAKE_PATH ${32BIT_QMAKE} PATH)    # Get path to 32-bit Qt binary directory
        STRING(REPLACE "/bin" "" OCTAVE_QT_ROOT ${32BIT_QMAKE_PATH})

        SET(OCTAVE_QT_INCLUDE_DIR            ${OCTAVE_QT_ROOT}/include)
        SET(OCTAVE_QT_QTCORE_INCLUDE_DIR     ${OCTAVE_QT_ROOT}/include/QtCore)
        SET(OCTAVE_QT_QTNETWORK_INCLUDE_DIR  ${OCTAVE_QT_ROOT}/include/QtNetwork)
        SET(OCTAVE_QT_LIBRARY_DIR            ${OCTAVE_QT_ROOT}/lib)
    endif()
else()
    SET(OCTAVE_QT_INCLUDE_DIR            ${QT_INCLUDE_DIR})
    SET(OCTAVE_QT_QTCORE_INCLUDE_DIR     ${QT_QTCORE_INCLUDE_DIR})
    SET(OCTAVE_QT_QTNETWORK_INCLUDE_DIR  ${QT_QTNETWORK_INCLUDE_DIR})
    SET(OCTAVE_QT_LIBRARY_DIR            ${QT_LIBRARY_DIR})
endif()

    
find_program(MKOCTFILE_EXECUTABLE mkoctfile)
if(NOT MKOCTFILE_EXECUTABLE)
  message(WARNING "Failed to find mkoctfile")
else()

  # Get path to Octave binary directory to be able to build .oct files if Octave is not in path
  get_filename_component(OCTAVE_PATH ${MKOCTFILE_EXECUTABLE} PATH)

  foreach(srcFileName IN LISTS CPP_SOURCES)
  
    if(NOT IS_ABSOLUTE "${srcFileName}")
        set(srcFileName "${CMAKE_CURRENT_SOURCE_DIR}/${srcFileName}")
    endif()
  
    get_filename_component(baseFilename "${srcFileName}" NAME_WE)

    set(octFileName "${CMAKE_CURRENT_BINARY_DIR}/${baseFilename}.oct")
    
    if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
        if (CMAKE_CL_64)
            # The following line calls the build configuration for x86 VS2010 compiler
            # call "\"%VS100COMNTOOLS%../../VC/vcvarsall.bat\"" x86
            add_custom_command(
                OUTPUT "${octFileName}"
                COMMAND call "\"%VS100COMNTOOLS%../../VC/vcvarsall.bat\"" x86
                COMMAND ${CMAKE_COMMAND} ARGS -E chdir ${OCTAVE_PATH} ${MKOCTFILE_EXECUTABLE} -I${OCTAVE_QT_QTNETWORK_INCLUDE_DIR}
                    -I${OCTAVE_QT_QTCORE_INCLUDE_DIR} -I${OCTAVE_QT_INCLUDE_DIR} ${RPATH_COMMAND}
                    -L${OCTAVE_QT_LIBRARY_DIR} -lQtCore${QT_LIBRARY_POSTFIX} -lQtNetwork${QT_LIBRARY_POSTFIX} -o "${octFileName}" "${srcFileName}"
                DEPENDS "${srcFileName}"
                COMMENT "Generating ${octFileName}"
            )
        else()
            add_custom_command(
                OUTPUT "${octFileName}"
                COMMAND ${CMAKE_COMMAND} ARGS -E chdir ${OCTAVE_PATH} ${MKOCTFILE_EXECUTABLE} -I${OCTAVE_QT_QTNETWORK_INCLUDE_DIR}
                    -I${OCTAVE_QT_QTCORE_INCLUDE_DIR} -I${OCTAVE_QT_INCLUDE_DIR} ${RPATH_COMMAND}
                    -L${OCTAVE_QT_LIBRARY_DIR} -lQtCore${QT_LIBRARY_POSTFIX} -lQtNetwork${QT_LIBRARY_POSTFIX} -o "${octFileName}" "${srcFileName}"
                DEPENDS "${srcFileName}"
                COMMENT "Generating ${octFileName}"
            )
        endif()
    else()
        add_custom_command(
            OUTPUT "${octFileName}"
            COMMAND ${MKOCTFILE_EXECUTABLE} -I${QT_QTNETWORK_INCLUDE_DIR} -I${QT_QTCORE_INCLUDE_DIR} -I${QT_INCLUDE_DIR} ${RPATH_COMMAND} -L${QT_LIBRARY_DIR} -lQtCore${QT_LIBRARY_POSTFIX} -lQtNetwork${QT_LIBRARY_POSTFIX} -o "${octFileName}" "${srcFileName}"
            DEPENDS "${srcFileName}"
            COMMENT "Generating ${octFileName}"
        )
    endif()

    list(APPEND OCTAVE_BINARY_OCT_FILES "${octFileName}")
  
  endforeach()
  
  add_custom_target(octave_plugins ALL DEPENDS
      "${CMAKE_CURRENT_BINARY_DIR}/riGetActiveCellProperty.oct"
      "${CMAKE_CURRENT_BINARY_DIR}/riSetActiveCellProperty.oct"
      "${CMAKE_CURRENT_BINARY_DIR}/riGetActiveCellInfo.oct"
      "${CMAKE_CURRENT_BINARY_DIR}/riGetMainGridDimensions.oct"

      SOURCES ${CPP_SOURCES}
  )
endif()

install(FILES ${OCTAVE_BINARY_OCT_FILES} DESTINATION ${RESINSIGHT_FINAL_NAME})
