cmake_minimum_required(VERSION 2.8.12)
project(mfc1)

macro(replace_flags var these those)
  if("${${var}}" MATCHES "${these}")
    string(REGEX REPLACE "${these}" "${those}" ${var} "${${var}}")
    #message(STATUS "info: ${var} changed to '${${var}}'")
  endif()
  message(STATUS "info: ${var}='${${var}}'")
endmacro()

macro(msvc_link_to_static_crt)
  if(MSVC)
    set(has_correct_flag 0)
    foreach(lang C CXX)
    foreach(suffix "" _DEBUG _MINSIZEREL _RELEASE _RELWITHDEBINFO)
      replace_flags("CMAKE_${lang}_FLAGS${suffix}" "/MD" "/MT")
      if(CMAKE_${lang}_FLAGS${suffix} MATCHES "/MT")
        set(has_correct_flag 1)
      endif()
    endforeach()
    endforeach()
    if(NOT has_correct_flag)
      message(FATAL_ERROR "no CMAKE_*_FLAGS var contains /MT")
    endif()
  endif()
endmacro()

set(files
  ChildFrm.cpp
  ChildFrm.h
  MainFrm.cpp
  MainFrm.h
  mfc1.cpp
  mfc1.h
  mfc1.rc
  mfc1Doc.cpp
  mfc1Doc.h
  mfc1View.cpp
  mfc1View.h
  Resource.h
  stdafx.cpp
  stdafx.h
)

set(CMAKE_MFC_FLAG "@CMAKE_MFC_FLAG_VALUE@")

FIND_PACKAGE(MFC)
IF (NOT MFC_FOUND)
  MESSAGE(FATAL_ERROR "MFC Could not be found during the MFC test")
ENDIF()

if("${CMAKE_MFC_FLAG}" STREQUAL "1")
  msvc_link_to_static_crt()
else()
  # VS generators add this automatically based on the CMAKE_MFC_FLAG value,
  # but generators matching "Make" require:
  add_definitions(-D_AFXDLL)
endif()

add_executable(mfc1 WIN32 ${files})
install(TARGETS mfc1 DESTINATION bin)

if("${CMAKE_MFC_FLAG}" STREQUAL "2")
  set(CMAKE_INSTALL_MFC_LIBRARIES ON)
  include(InstallRequiredSystemLibraries)
endif()

# Encode the value inside a generator expression to test evaluation.
set(CMAKE_MFC_FLAG "$<1:${CMAKE_MFC_FLAG}>")
