cmake_minimum_required(VERSION 2.8)
project(Architecture C)

function(test_for_xcode4 result_var)
  set(${result_var} 0 PARENT_SCOPE)
  if(APPLE)
    execute_process(COMMAND xcodebuild -version
      OUTPUT_VARIABLE ov RESULT_VARIABLE rv
      )
    if("${rv}" STREQUAL "0")
      if(ov MATCHES "^Xcode 4.[0-9].*$")
        set(${result_var} 1 PARENT_SCOPE)
      endif()
    endif()
  endif()
endfunction()

test_for_xcode4(is_xcode4)

set(arch0 i386)
set(arch1 ppc)

if(is_xcode4)
  # Xcode 4, use modern architectures as defaults
  # Arch 'ppc' no longer works: tools no longer available starting with Xcode 4
  set(arch0 i386)
  set(arch1 x86_64)
endif()

add_library(foo foo.c)
if(CMAKE_OSX_ARCHITECTURES)
  get_property(archs TARGET foo PROPERTY OSX_ARCHITECTURES)
  if(NOT "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "${archs}")
    message(FATAL_ERROR
      "OSX_ARCHITECTURES property not initialized by CMAKE_OSX_ARCHITECTURES.\n"
      "Expected [${CMAKE_OSX_ARCHITECTURES}], got [${archs}]."
      )
  endif()
  list(LENGTH archs archs_len)
  if(archs_len GREATER 1)
    list(GET archs 0 arch0)
    list(GET archs 1 arch1)
  endif()
endif()

message("is_xcode4='${is_xcode4}'")
message("archs='${archs}'")
message("arch0='${arch0}'")
message("arch1='${arch1}'")

set_property(TARGET foo PROPERTY OSX_ARCHITECTURES ${arch0})
set_property(TARGET foo PROPERTY OSX_ARCHITECTURES_DEBUG ${arch1})

add_executable(bar bar.c)
target_link_libraries(bar foo)

set_property(TARGET bar PROPERTY OUTPUT_NAME Architecture)
set_property(TARGET bar PROPERTY OSX_ARCHITECTURES ${arch1})
set_property(TARGET bar PROPERTY OSX_ARCHITECTURES_DEBUG ${arch0})
