CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0)
PROJECT(sigar)

INCLUDE(CheckCSourceCompiles)
INCLUDE(CheckCCompilerFlag)

# I hate that they define "WIN32" ... we're about to move to Win64...I hope!
IF(WIN32 AND NOT WINDOWS)
    SET(WINDOWS TRUE)
ENDIF(WIN32 AND NOT WINDOWS)

# Bleh, let's do it for "APPLE" too.
IF(APPLE AND NOT MACOSX)
    SET(MACOSX TRUE)
ENDIF(APPLE AND NOT MACOSX)

# ...and Linux...
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
    SET(LINUX TRUE)
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")

IF(CMAKE_COMPILER_IS_GNUCC)
    SET(GCC TRUE)
ENDIF(CMAKE_COMPILER_IS_GNUCC)

ADD_DEFINITIONS(-w)  # !!! FIXME

IF(GCC)
    ADD_DEFINITIONS(-pipe -Wall -fsigned-char)

    # See if -fno-stack-protector is available to us.
    # It doesn't seem to work well, and it adds bulk to the binary.
    CHECK_C_COMPILER_FLAG("-fno-stack-protector" OVERGROWTH_GCC_HAS_STACKPROT)
    IF(OVERGROWTH_GCC_HAS_STACKPROT)
        ADD_DEFINITIONS(-fno-stack-protector)
    ENDIF(OVERGROWTH_GCC_HAS_STACKPROT)

    # CMake mailing list had this hack for getting rid of -rdynamic:
    #   http://public.kitware.com/pipermail/cmake/2006-July/010404.html
    IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
        SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS)
        SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
    ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
ENDIF(GCC)

IF(UNIX)  # This is Linux _and_ Mac OS X (and other things, too!).
    ADD_DEFINITIONS(-DPLATFORM_UNIX=1)
ENDIF(UNIX)

IF(LINUX)
    ADD_DEFINITIONS(-DPLATFORM_LINUX=1)
ENDIF(LINUX)

IF(MACOSX)
    ADD_DEFINITIONS(-DPLATFORM_LINUX=1)
ENDIF(MACOSX)

IF(WINDOWS)
    ADD_DEFINITIONS(-DPLATFORM_WINDOWS=1)
ENDIF(WINDOWS)

SET(SRCDIR "${CMAKE_SOURCE_DIR}/../Source")
SET(LIBDIR "${CMAKE_SOURCE_DIR}/../Libraries")

INCLUDE_DIRECTORIES(
    ${SRCDIR}/Internal/sigar
)

SET(SIGAR_SRCS
    ${SRCDIR}/Internal/sigar/sigar.c
    ${SRCDIR}/Internal/sigar/sigar_cache.c
    ${SRCDIR}/Internal/sigar/sigar_fileinfo.c
    ${SRCDIR}/Internal/sigar/sigar_format.c
    ${SRCDIR}/Internal/sigar/sigar_getline.c
    ${SRCDIR}/Internal/sigar/sigar_ptql.c
    ${SRCDIR}/Internal/sigar/sigar_signal.c
    ${SRCDIR}/Internal/sigar/sigar_util.c
)

IF(LINUX)
    INCLUDE_DIRECTORIES(${SRCDIR}/Internal/sigar/os/linux)
    SET(SIGAR_SRCS ${SIGAR_SRCS} ${SRCDIR}/Internal/sigar/os/linux/linux_sigar.c)
ENDIF(LINUX)
IF(WINDOWS)
    INCLUDE_DIRECTORIES(${SRCDIR}/Internal/sigar/os/win32)
    SET(SIGAR_SRCS ${SIGAR_SRCS} 
        ${SRCDIR}/Internal/sigar/os/win32/win32_sigar.c
        ${SRCDIR}/Internal/sigar/os/win32/peb.c
        ${SRCDIR}/Internal/sigar/os/win32/wmi.cpp
    )
ENDIF(WINDOWS)
IF(MACOSX)
    INCLUDE_DIRECTORIES(${SRCDIR}/Internal/sigar/os/darwin)
    SET(SIGAR_SRCS ${SIGAR_SRCS} ${SRCDIR}/Internal/sigar/os/darwin/darwin_sigar.c)
ENDIF(MACOSX)

ADD_LIBRARY(sigar STATIC ${SIGAR_SRCS})

