cmake_minimum_required(VERSION 2.8.4)
project(VSResource)

string(REPLACE "/INCREMENTAL:YES" ""
  CMAKE_EXE_LINKER_FLAGS_DEBUG
  "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")

message(STATUS "CMAKE_RC_COMPILER='${CMAKE_RC_COMPILER}'")

# Because of the following avoidance techniques required for windres and VS6,
# we recommend using a configured header file, and defining preprocessor
# symbols via #define code and including that header in the rc file. Using
# add_definitions is fine for simple definitions (with no spaces and no
# quoting), but requires avoidance or work-arounds beyond that...

if(CMAKE_RC_COMPILER MATCHES windres)
  # windres rc compiler does not properly define quoted /D values as strings
  message(STATUS "CMAKE_RC_COMPILER MATCHES windres")
  add_definitions(/DCMAKE_RCDEFINE=test.txt)
  add_definitions(/DCMAKE_RCDEFINE_NO_QUOTED_STRINGS)
  if(CMAKE_CURRENT_BINARY_DIR MATCHES " ")
    # windres cannot handle spaces in include dir
    set(CMAKE_RC_NO_INCLUDE 1)
  endif()
elseif(MSVC60)
  # VS6 rc compiler does not deal well with spaces in a "/D" value, but it can
  # handle the quoting
  message(STATUS "MSVC60")
  add_definitions(/DCMAKE_RCDEFINE="test.txt")
else()
  # expected case -- rc compiler is "capable enough"
  message(STATUS
    "rc compiler handles quoted strings with spaces in values via /D")
  set(TEXTFILE_FROM_SOURCE_DIR "textfile, spaces in name, from binary dir")
  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test.txt
    "${CMAKE_CURRENT_BINARY_DIR}/test with spaces.txt" @ONLY)
  add_definitions(/DCMAKE_RCDEFINE="test with spaces.txt")
endif()

if(CMAKE_RC_NO_INCLUDE)
  add_definitions(/DCMAKE_RC_NO_INCLUDE)
else()
  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include.rc.in
    "${CMAKE_CURRENT_BINARY_DIR}/include.rc" @ONLY)
  include_directories(${CMAKE_CURRENT_BINARY_DIR})
endif()

add_library(ResourceLib STATIC lib.cpp lib.rc)

add_executable(VSResource main.cpp test.rc)
target_link_libraries(VSResource ResourceLib)

if(MSVC AND NOT MSVC_VERSION VERSION_LESS 1600)
  set_property(SOURCE test.rc PROPERTY COMPILE_FLAGS /nologo)
endif()

set_property(TARGET VSResource
  PROPERTY VS_GLOBAL_CMakeTestVsGlobalVariable "test val")

if(CMAKE_GENERATOR MATCHES "Ninja|Visual Studio")
  cmake_policy(PUSH)
  cmake_policy(SET CMP0037 OLD)
  add_library("My ResourceLib" lib.cpp lib.rc)
  cmake_policy(POP)
endif()
