
# include(CheckCCompilerFlag)

str_from_env(CMAKE_CC_FLAGS CMAKE_CC_C_FLAGS CMAKE_CC_CXX_FLAGS)
str_from_env(CMAKE_LD_FLAGS CMAKE_SO_LD_FLAGS CMAKE_EXE_LD_FLAGS)

lists_from_env(CMAKE_LD_FLAGS_LIST CMAKE_SO_LD_FLAGS_LIST CMAKE_EXE_LD_FLAGS_LIST)
lists_from_env(CMAKE_LD_LIBS)

if ("$ENV{VERBOSE}" STREQUAL "1")
	message("# CC=$ENV{CC}")
	message("# CXX=$ENV{CXX}")
	message("# CMAKE_CC_FLAGS=${CMAKE_CC_FLAGS}")
	message("# CMAKE_CC_C_FLAGS=${CMAKE_CC_C_FLAGS}")
	message("# CMAKE_CC_CXX_FLAGS=${CMAKE_CC_CXX_FLAGS}")
	message("# CMAKE_LD_FLAGS=${CMAKE_LD_FLAGS}")
	message("# CMAKE_EXE_LD_FLAGS=${CMAKE_EXE_LD_FLAGS}")
	message("# CMAKE_SO_LD_FLAGS=${CMAKE_SO_LD_FLAGS}")
	message("# CMAKE_LD_LIBS=${CMAKE_LD_LIBS}")
endif()

if (DEFINED $ENV{SAN})
	set(SANITIZER $ENV{SAN})
endif()

#----------------------------------------------------------------------------------------------

function(extract_debug_symbols TARGET)
    if (NOT DEBUG AND NOT APPLE)
        add_custom_command(TARGET ${TARGET} POST_BUILD
            COMMAND "$ENV{MK}/extract-obj-symbols" "$<TARGET_FILE:${TARGET}>")
    endif()
endfunction()

#----------------------------------------------------------------------------------------------

function(add_target_linker_flags TARGET FLAGS)
    get_target_property(LD_FLAGS ${TARGET} LINK_FLAGS)
    if (LD_FLAGS)
        set(FLAGS "${LD_FLAGS} ${FLAGS}")
    endif()
    set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAGS})
endfunction()

#----------------------------------------------------------------------------------------------

function(setup_shared_object_target TARGET OUTPUT_NAME)
    set_target_properties(${TARGET} PROPERTIES PREFIX "")
    set_target_properties(${TARGET} PROPERTIES SUFFIX ".so")

    add_target_linker_flags(${TARGET} "-Wl,--enable-new-dtags -Wl,-rpath,\$ORIGIN")

	if ("${OUTPUT_NAME}" STREQUAL "")
		set(OUTPUT_NAME "${TARGET}")
	endif()
    set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME "${OUTPUT_NAME}")

    if (APPLE)
        set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    endif()
endfunction()

#----------------------------------------------------------------------------------------------

function(setup_cc_options)
	message("# CMAKE_C_COMPILER_ID: " ${CMAKE_C_COMPILER_ID})

	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CC_C_FLAGS}" PARENT_SCOPE)
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CC_CXX_FLAGS}" PARENT_SCOPE)

	# dirty trick to override default CMake flags (like: -O2 -DNDEBUG)
	# by appending the overiding options using add_compile_options().
	# we rely on the overiding options being defined in CMAKE_CC_FLAGS rather than the 
	# language-specific CMAKE_CC_C_FLAGS and CMAKE_CC_CXX_FLAGS.

	# need to be a list, otherwise quotes are erroneously inserted
	string(REPLACE " " ";" CMAKE_CC_FLAGS_LIST ${CMAKE_CC_FLAGS})
	add_compile_options(${CMAKE_CC_FLAGS_LIST})
	
	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_LD_FLAGS} ${CMAKE_EXE_LD_FLAGS}" PARENT_SCOPE)
	set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_LD_FLAGS} ${CMAKE_SO_LD_FLAGS}" PARENT_SCOPE)
endfunction()
