# -*- mode: cmake; -*-
cmake_minimum_required(VERSION 2.6)
cmake_policy(VERSION 2.6)
if(POLICY CMP0011)
  cmake_policy(SET CMP0011 NEW)
endif(POLICY CMP0011)

project(libfac)
string(TOUPPER ${PROJECT_NAME} UPPER_PROJECT_NAME)

# have the full monty in makefiles
set(CMAKE_VERBOSE_MAKEFILE true)

set(LIBFAC_V_MAJOR 3)
set(LIBFAC_V_MINOR 1)
set(LIBFAC_V_PATCH 0)
set(LIBFAC_NAME   "Factorization and characteristic sets library")
set(LIBFAC_DATE   "Aug 2008")
set(LIBFAC_AUTHOR "M. Messollen")

#OPTION(WITH_SINGULAR "build for use with Singular" Off)
#OPTION(WITH_SINGULARERROR "use error reporting from Singular" Off)
OPTION(WITH_NOSTREAMIO    "do not require iostream include nor library" Off)
set(ADD_DEFS "NOSTREAMIO;${_OSDEF};HAVE_CONFIG_H;SINGULAR")


###################################################################################################
# No user settings below
###################################################################################################
include(LibfacMacros)

###################################################################################################
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
  message(STATUS "Have compiler: '${CMAKE_CXX_COMPILER_ID}'")
  if (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")

    #set(CMAKE_CXX_FLAGS "-W -Wall -Wextra -Wno-non-virtual-dtor")
    set(CMAKE_CXX_FLAGS "-w -fno-rtti -pipe ")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-implicit-templates")
    #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")

    set(CMAKE_CXX_FLAGS_RELEASE "-O3 -fomit-frame-pointer -DNDEBUG")

    set(CMAKE_CXX_FLAGS_DEBUG "-Werror -O0 -g -ggdb -Wreturn-type -fno-omit-frame-pointer")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wunused-variable -Wunused-parameter")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wunused-function -Wunused")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Woverloaded-virtual -Wno-system-headers")

    # gprof and gcov support
    set(CMAKE_CXX_FLAGS_PROFILE "-O0 -g -ggdb -Wreturn-type -Woverloaded-virtual")
    set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -Wno-system-headers -pg")
    set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -fprofile-arcs -ftest-coverage")
  endif (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})

###########################################################
# Where are the additional libraries installed? Note: provide includes
# path here, subsequent checks will resolve everything else
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/charset)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/factor)
include_directories(${CMAKE_BINARY_DIR})
include_directories(${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_BINARY_DIR}/factory)
include_directories(${CMAKE_SOURCE_DIR}/factory)

libfac_mk_version(LIBFAC_VERSION_H)


##
## src and objects
##

set(FACTORSRC1  factor/SqrFree.cc factor/Factor.cc 
		factor/MVMultiHensel.cc factor/Truefactor.cc 
		factor/helpstuff.cc  factor/version.cc 
		factor/homogfactor.cc )
set(FACTORSRC2 	factor/tmpl_inst.cc)
set(FACTORSRC  	${FACTORSRC2} ${FACTORSRC1})


set(FACTORINCL 	${LIBFAC_VERSION_H} 
  factor/Factor.h factor/MVMultiHensel.h
  factor/Truefactor.h factor/tmpl_inst.h factor/SqrFree.h
  factor/helpstuff.h factor/debug.h factor/timing.h 
  factor/homogfactor.h     factor/interrupt.h)
set(CHARSETINCL charset/csutil.h charset/charset.h charset/reorder.h
  charset/alg_factor.h charset/algfactor.h)

set(charset_srcs  charset/csutil.cc charset/charset.cc
  charset/reorder.cc charset/alg_factor.cc charset/algfactor.cc
)

# define libraries
add_library(fac ${LIBFAC_VERSION_H} ${FACTORSRC} ${CHARSETSRC})
set_source_files_properties(${FACTORSRC} PROPERTIES OBJECT_DEPENDS 
  ${FACTORYCONF_H})
#add_dependencies(fac ${FACTORY_TARGET})

# debug library
#add_library(fac_g ${LIBFAC_VERSION_H} ${FACTORSRC} ${CHARSETSRC})
#set_target_properties(fac_g PROPERTIES COMPILE_FLAGS ${CMAKE_CXX_FLAGS_DEBUG})

# profile library
#add_library(fac_p ${LIBFAC_VERSION_H} ${FACTORSRC} ${CHARSETSRC})
#set_target_properties(fac_p PROPERTIES COMPILE_FLAGS ${CMAKE_CXX_FLAGS_PROFILE})

#
# libraries for Singular
if( WITH_SINGULAR )
  message(STATUS "Compiling libfac for Singular: creating libsingfac.a")
  add_library(singfac ${LIBFAC_VERSION_H} ${FACTORSRC1} ${charset_srcs})
  set_target_properties(singfac PROPERTIES 
    COMPILE_DEFINITION "${ADD_DEFS};SINGULAR")

#  # debug library
#  add_library(singfac_g ${LIBFAC_VERSION_H} ${FACTORSRC1} ${charset_srcs})
#  set_target_properties(singfac_g PROPERTIES COMPILE_FLAGS "-DSINGULAR ${CMAKE_CXX_FLAGS_DEBUG}")

#  # profile library
#  add_library(singfac_p ${LIBFAC_VERSION_H} ${FACTORSRC1} ${charset_srcs})
#  set_target_properties(singfac_p PROPERTIES COMPILE_FLAGS "-DSINGULAR ${CMAKE_CXX_FLAG_PROFILE}")
endif( WITH_SINGULAR )
