# 20130121 - Project inih - http://code.google.com/p/inih/
#
cmake_minimum_required (VERSION 2.8)

project (inih)

# The version number.
set (ih_MAJOR 1)
set (ih_MINOR 0)
set (ih_AGE   27)

# to distinguish between debug and release lib in windows
if (WIN32)
    set( CMAKE_DEBUG_POSTFIX "d" ) # little effect in unix
endif (WIN32)

if(CMAKE_COMPILER_IS_GNUCXX)
    set(WARNING_FLAGS_CXX "-Wall")
    set(WARNING_FLAGS_C   "-Wall")
endif(CMAKE_COMPILER_IS_GNUCXX)

if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") 
   set (WARNING_FLAGS_CXX "-Wall -Wno-overloaded-virtual")
   set (WARNING_FLAGS_C   "-Wall")
endif() 

if(WIN32)
    if(MSVC)
        # turn off various warnings
        # foreach(warning 4244 4251 4267 4275 4290 4786 4305 4996)
        #     SET(WARNING_FLAGS "${WARNING_FLAGS} /wd${warning}")
        # endforeach(warning)
        set(MSVC_FLAGS "-DNOMINMAX -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D__CRT_NONSTDC_NO_WARNINGS")
        #if (${MSVC_VERSION} EQUAL 1600)
        #    set( MSVC_LD_FLAGS "/FORCE:MULTIPLE" )
        #endif (${MSVC_VERSION} EQUAL 1600)
    endif(MSVC)
    set(NOMINMAX 1)
endif(WIN32)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS_C} ${MSVC_FLAGS} -D_REENTRANT")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS_CXX} ${MSVC_FLAGS} -D_REENTRANT ${BOOST_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MSVC_LD_FLAGS}")

include_directories ("${PROJECT_SOURCE_DIR}/.")

# add a VERSION define
add_definitions( -DVERSION="${ih_MAJOR}.${ih_MINOR}.${ih_AGE}" )

set(ih_SRCS ini.c)
set(ih_HDRS ini.h)
add_library(inih ${ih_SRCS} ${ih_HDRS})
list(APPEND EXTRA_LIBS inih)


include_directories ("${PROJECT_SOURCE_DIR}/cpp")
set(rdr_SRCS cpp/INIReader.cpp)
set(rdr_HDRS cpp/INIReader.h)
add_library(INIReader ${rdr_SRCS} ${rdr_HDRS})
list(APPEND EXTRA_LIBS INIReader)

add_definitions( -DTEST_INI="${PROJECT_SOURCE_DIR}/examples/test.ini" )

set(tst_SRCS cpp/INIReaderTest.cpp)
add_executable(INIReaderTest ${tst_SRCS})
target_link_libraries(INIReaderTest ${EXTRA_LIBS} )
if (WIN32)
    set_target_properties(INIReaderTest PROPERTIES DEBUG_POSTFIX "d" )
endif (WIN32)
# install?

set(ex1_SRCS examples/ini_dump.c)
add_executable(ini_dump ${ex1_SRCS})
target_link_libraries(ini_dump ${EXTRA_LIBS} )
if (WIN32)
    set_target_properties(ini_dump PROPERTIES DEBUG_POSTFIX "d" )
endif (WIN32)
# install

set(ex2_SRCS examples/ini_example.c)
add_executable(ini_example ${ex2_SRCS})
target_link_libraries(ini_example ${EXTRA_LIBS} )
if (WIN32)
    set_target_properties(ini_example PROPERTIES DEBUG_POSTFIX "d" )
endif (WIN32)
# install

set(ex3_SRCS examples/ini_xmacros.c)
add_executable(ini_xmacros ${ex3_SRCS})
target_link_libraries(ini_xmacros ${EXTRA_LIBS} )
if (WIN32)
    set_target_properties(ini_xmacros PROPERTIES DEBUG_POSTFIX "d" )
endif (WIN32)
# install

add_definitions( -DTEST1_INI="${PROJECT_SOURCE_DIR}/tests/no_file.ini" )
add_definitions( -DTEST2_INI="${PROJECT_SOURCE_DIR}/tests/normal.ini" )
add_definitions( -DTEST3_INI="${PROJECT_SOURCE_DIR}/tests/bad_section.ini" )
add_definitions( -DTEST4_INI="${PROJECT_SOURCE_DIR}/tests/bad_comment.ini" )
add_definitions( -DTEST5_INI="${PROJECT_SOURCE_DIR}/tests/user_error.ini" )
add_definitions( -DTEST6_INI="${PROJECT_SOURCE_DIR}/tests/multi_line.ini" )
add_definitions( -DTEST7_INI="${PROJECT_SOURCE_DIR}/tests/bad_multi.ini" )
add_definitions( -DTEST8_INI="${PROJECT_SOURCE_DIR}/tests/bom.ini" )
set(test_SRCS tests/unittest.c)
add_executable(unittest ${test_SRCS})
target_link_libraries(unittest ${EXTRA_LIBS} )
if (WIN32)
    set_target_properties(unittest PROPERTIES DEBUG_POSTFIX "d" )
endif (WIN32)
# install

# eof
