cmake_minimum_required(VERSION 3.15)
project(MocIncludeSymlink)
include("../AutogenCoreTest.cmake")

#
# Tests if MocInclude can be build when
# - The source directory is a symbolic link
# - The build directory is a symbolic link
#

# -- Utility variables
set(CS_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(CB_DIR "${CMAKE_CURRENT_BINARY_DIR}")

# Absolute MocInclude path
get_filename_component(MocIncludePath "../MocInclude" ABSOLUTE)
message("MocIncludePath: ${MocIncludePath}")

# Use nested subdirectories to ensure relatives paths are correct as well
set(BUILD_DIR_NORMAL "${CB_DIR}/Build/Normal")
set(BUILD_DIR_LINKED "${CB_DIR}/Build/Linked")

set(SL_SOURCE_DIR "${CB_DIR}/SL_Source")
set(SL_BUILD_DIR "${CB_DIR}/SL_Build")

# -- Utility macros
function(makeSymLink origin link)
    message("Creating symbolic link\n  Link: ${link}\n  To:   ${origin}")
    file(CREATE_LINK ${origin} ${link} RESULT res SYMBOLIC)
    if(NOT (${res} STREQUAL "0"))
      message("Symlink creation failed.\n  Link: ${link}\n  To:   ${origin}\n  Result: ${res}")
    endif()
endfunction()

# -- Make source directory symlink
makeSymLink(${MocIncludePath} ${SL_SOURCE_DIR} linkResult)
if(NOT EXISTS ${SL_SOURCE_DIR})
  message("Directory symlink can't be created.  Skipping test.")
  return()
endif()

# -- Make normal build directory
file(REMOVE_RECURSE ${BUILD_DIR_NORMAL})
file(MAKE_DIRECTORY ${BUILD_DIR_NORMAL})

# -- Make linked build directory and symlink
file(REMOVE_RECURSE ${BUILD_DIR_LINKED})
file(MAKE_DIRECTORY ${BUILD_DIR_LINKED})
makeSymLink(${BUILD_DIR_LINKED} ${SL_BUILD_DIR} linkResult)
if(NOT EXISTS ${SL_BUILD_DIR})
  message("Directory symlink can't be created.  Skipping test.")
  return()
endif()


# -- Building
macro(buildMocInclude sourceDir binaryDir)
  message("Building MocInclude\n  - source dir: ${sourceDir}\n  - binary dir: ${binaryDir}\n")
  try_compile(result
    "${binaryDir}"
    "${sourceDir}"
    MocInclude
    CMAKE_FLAGS "-DQT_TEST_VERSION=${QT_TEST_VERSION}"
                "-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}"
                "-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
    OUTPUT_VARIABLE output
  )
  if (result)
    message(STATUS "--- Build success. ---")
  else()
    message(STATUS "\n### Building MocInclude failed. ###\n\n--- Output ---\n${output}")
    message(FATAL_ERROR "--- Building MocInclude failed. End of output. ---")
  endif()
endmacro()

message("\nTry building with\n  - symbolic link source dir\n  - non symbolic build dir\n")
buildMocInclude(${SL_SOURCE_DIR} ${BUILD_DIR_NORMAL})

message("\nTry building with\n  - symbolic link source dir\n  - symbolic link build dir\n")
buildMocInclude(${SL_SOURCE_DIR} ${SL_BUILD_DIR})
