cmake_minimum_required(VERSION 2.8)
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()
