Skip to content
Snippets Groups Projects
DuneUtils.cmake 3.85 KiB
Newer Older
René Fritze's avatar
René Fritze committed
	FOREACH( ARG ${ARGN} )
# 		ADD_DEFINITIONS(${ARG})
René Fritze's avatar
René Fritze committed
		LIST(APPEND MY_CXX_FLAGS ${ARG} )
	ENDFOREACH( ARG )
MACRO( LISTTOSTRING listvar targetvar )
	SET( targetvar "" )
	FOREACH( item ${listvar} )
		SET( targetvar "${targetvar} ${item}" )
	ENDFOREACH( item )
ENDMACRO( LISTTOSTRING )

function(TO_LIST_SPACES _LIST_NAME OUTPUT_VAR)
  set(NEW_LIST_SPACE)
  foreach(ITEM ${${_LIST_NAME}})
    set(NEW_LIST_SPACE ${NEW_LIST_SPACE} ${ITEM})
  endforeach()
#   string(STRIP ${NEW_LIST_SPACE} NEW_LIST_SPACE)
  set(${OUTPUT_VAR} "${NEW_LIST_SPACE}" PARENT_SCOPE)
endfunction()

MACRO(INCLUDE_DIR)
	FOREACH( ARG ${ARGN} )
		LIST(APPEND MY_CXX_FLAGS "-I${ARG}" )
    ENDFOREACH( ARG )
ENDMACRO(INCLUDE_DIR)

MACRO(INCLUDE_SYS_DIR)
	FOREACH( ARG ${ARGN} )
		LIST(APPEND MY_CXX_FLAGS "-isystem${ARG}")
        INCLUDE_DIRECTORIES(${ARG})
    ENDFOREACH( ARG )
ENDMACRO(INCLUDE_SYS_DIR)

	ADD_CUSTOM_TARGET( headercheck SOURCES ${ARGN} )
		GET_FILENAME_COMPONENT( fn ${HEADER} NAME )
		SET( TEST_NAME "headercheck_${fn}")
		#LISTTOSTRING( MY_CXX_FLAGS TEST_NAME_FLAGS )
		TO_LIST_SPACES( MY_CXX_FLAGS TEST_NAME_FLAGS )
		SET(XARGS ${TEST_NAME_FLAGS} -c ${HEADER} -o ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.o )
		ADD_CUSTOM_TARGET(  ${TEST_NAME} ${CMAKE_CXX_COMPILER} ${XARGS} )
		ADD_TEST( ${TEST_NAME} ${CMAKE_CXX_COMPILER} ${XARGS} )
		add_dependencies( headercheck ${TEST_NAME} )
	ENDFOREACH( HEADER )
ENDMACRO( HEADERCHECK )
René Fritze's avatar
René Fritze committed

MACRO( ADD_DUNE_MODULES )
	FOREACH( MODULE ${ARGN} )
		INCLUDE_SYS_DIR( ${CMAKE_CURRENT_SOURCE_DIR}/../dune-${MODULE} )
René Fritze's avatar
René Fritze committed
		LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../dune-${MODULE}/${MODULE}/.libs )
René Fritze's avatar
René Fritze committed
		FILE( GLOB_RECURSE tmp_header "${CMAKE_CURRENT_SOURCE_DIR}/../dune-${MODULE}/${MODULE}/*.hh" )
		LIST( APPEND DUNE_HEADERS ${tmp_header} )
René Fritze's avatar
René Fritze committed
	ENDFOREACH(MODULE)
René Fritze's avatar
René Fritze committed
ENDMACRO( ADD_DUNE_MODULES )

MACRO( ADD_MY_MODULES )
	FOREACH( MODULE ${ARGN} )
		INCLUDE_DIR( ${CMAKE_CURRENT_SOURCE_DIR}/../dune-${MODULE} )
		LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../dune-${MODULE}/${MODULE}/.libs )
		FILE( GLOB_RECURSE tmp_header "${CMAKE_CURRENT_SOURCE_DIR}/../dune-${MODULE}/${MODULE}/*.hh" )
		LIST( APPEND DUNE_HEADERS ${tmp_header} )
	ENDFOREACH(MODULE)
ENDMACRO( ADD_MY_MODULES )

René Fritze's avatar
René Fritze committed
MACRO( ADD_DUNE_EXECUTABLE target sources headers libs )
	ADD_EXECUTABLE(${target} ${sources} ${headers} ${DUNE_HEADERS} )
	#for some $@#&& reason these targets DO NOT inherit flags added via TARGET_LINK_LIBRARIES nor INCLUDE_DIRECTORIES
	#so we need some magic to readd them
# 	get_target_property(tmp_flags ${target} COMPILE_FLAGS  )
# 	if( NOT ${tmp_flags} )
# 		set( tmp_flags "" )
# 	endif( NOT ${tmp_flags} )
# 	LIST(APPEND MY_CXX_FLAGS ${tmp_flags} )
# 	foreach(arg ${MY_CXX_FLAGS} )
# 		set(bar "${bar} ${arg}")
# 	endforeach(arg ${MY_CXX_FLAGS} )
# 	set_target_properties( ${target} PROPERTIES COMPILE_FLAGS  ${bar} )
René Fritze's avatar
René Fritze committed
# 	get_target_property(tmp_flags ${target} LINK_FLAGS  )
# 	if( NOT ${tmp_flags} )
# 		set( tmp_flags "" )
# 	endif( NOT ${tmp_flags} )
René Fritze's avatar
René Fritze committed
# # 	message(STATUS ${tmp_flags} )
René Fritze's avatar
René Fritze committed
# 	set( tmp_flags "${bar} ${tmp_flags}" )
# 	set_target_properties( ${target} PROPERTIES LINK_FLAGS  ${tmp_flags} )
René Fritze's avatar
René Fritze committed
	TARGET_LINK_LIBRARIES(${target} ${libs} )
René Fritze's avatar
René Fritze committed
	
	add_dependencies( ${target} config_refresh )
ENDMACRO( ADD_DUNE_EXECUTABLE )

add_custom_target( config_refresh
				${CMAKE_CURRENT_SOURCE_DIR}/cmake/regen_config_header.sh ${CMAKE_CURRENT_BINARY_DIR}/cmake_config.h
				)
				
SET( CUSTOM_FLAGS
	-Wall -Wextra -pedantic -O3 -DDNDEBUG -funroll-loops -g -ggdb -DENABLE_ADAPTIVE=1 -DADAPTIVE_SOLVER -DUSE_BFG_CG_SCHEME -fno-strict-aliasing -std=c++0x CACHE LIST  
	"CUSTOM FLAGS")
FIND_PACKAGE(Boost 1.35.0 REQUIRED)
INCLUDE_DIR(${Boost_INCLUDE_DIR})
FIND_PACKAGE( PkgConfig )
pkg_check_modules( CCGNU REQUIRED libccgnu2 )
ADD_CXX_FLAGS( "${CCGNU_CFLAGS}" )
René Fritze's avatar
René Fritze committed
INCLUDE_SYS_DIR(${Boost_INCLUDE_DIR})
ENABLE_TESTING()