
set(DEUTIL_SRCS
	deClock.c
	deClock.h
	deCommandLine.c
	deCommandLine.h
	deDynamicLibrary.c
	deDynamicLibrary.h
	deFile.c
	deFile.h
	deProcess.h
	deSocket.c
	deSocket.h
	deTimer.c
	deTimer.h
	deTimerTest.c
	deTimerTest.h
	)

set(DEUTIL_LIBS debase dethread depool)

if (DE_OS_IS_FUCHSIA)
	set(DEUTIL_SRCS ${DEUTIL_SRCS} deFuchsiaProcess.cc)
	include_directories("${FUCHSIA_ROOT}/zircon/system/ulib/launchpad/include")
	include_directories("${FUCHSIA_ROOT}/zircon/system/ulib/fdio/include")
	set(DEUTIL_LIBS ${DEUTIL_LIBS} ${FUCHSIA_LIB_DIR}/liblaunchpad.so ${FUCHSIA_LIB_DIR}/libfdio.so zircon)
else ()
	set(DEUTIL_SRCS ${DEUTIL_SRCS} deProcess.c)
endif ()

include_directories(
	../debase
	../dethread
	../depool
	)

if (DE_OS_IS_UNIX)
	set(DEUTIL_LIBS ${DEUTIL_LIBS} rt dl)
endif ()

if (DE_OS_IS_ANDROID)
	# inline keyword in headers...
	set_source_files_properties(deSocket.c COMPILE_FLAGS -std=c99)

	set(DEUTIL_LIBS ${DEUTIL_LIBS} dl)
endif ()

if (DE_OS_IS_WIN32)
	set(DEUTIL_LIBS WS2_32)
endif ()

if (DE_OS_IS_UNIX)
	add_definitions(-D_XOPEN_SOURCE=600)
endif ()

add_library(deutil STATIC ${DEUTIL_SRCS})
target_link_libraries(deutil ${DEUTIL_LIBS})
