#
# CMake project file for cluster analysis from WHAM for oligomeric proteins  
# 

enable_language (Fortran C)

#================================
# Set source file lists
#================================
set(UNRES_CLUSTER_WHAM_M_SRC0 
	arcos.f
	cartprint.f
	chainbuild.f
	contact.f
	convert.f
	energy_p_new.F
	fitsq.f
	geomout.F
	gnmr1.f
	hc.f
	icant.f
	initialize_p.F
	intcor.f
	int_from_cart1.f
	main_clust.F
	matmult.f
	misc.f
	noyes.f
	parmread.F
	permut.f
	pinorm.f
	printmat.f
	probabl.F
	read_coords.F
	readpdb.f
	readrtns.F
	rescode.f
	setup_var.f
	srtclust.f
    ssMD.F
	timing.F
	track.F
	wrtclust.f
	work_partition.F
)

set(UNRES_CLUSTER_WHAM_M_PP_SRC
	energy_p_new.F
	initialize_p.F
	geomout.F
	main_clust.F
	parmread.F
	probabl.F
	read_coords.F
	readrtns.F
    ssMD.F
	timing.F
	track.F
	work_partition.F
) 


#================================================
# Set comipiler flags for different sourcefiles  
#================================================
if (Fortran_COMPILER_NAME STREQUAL "ifort")
  set(FFLAGS0 "-mcmodel=medium -shared-intel -ip -w -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres"  ) 
elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
  set(FFLAGS0 "-std=legacy -I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres" ) 
else ()
  set(FFLAGS0 "-I. -I${CMAKE_CURRENT_SOURCE_DIR}/include_unres" ) 
endif (Fortran_COMPILER_NAME STREQUAL "ifort")

#=========================================
# Add MPI compiler flags
#=========================================
if(UNRES_WITH_MPI)
  set(FFLAGS0 "${FFLAGS0} -I${MPI_Fortran_INCLUDE_PATH}")
endif(UNRES_WITH_MPI)

set_property(SOURCE ${UNRES_CLUSTER_WHAM_M_SRC0} PROPERTY COMPILE_FLAGS ${FFLAGS0} )

#=========================================
#  Settings for GAB force field
#=========================================
if(UNRES_MD_FF STREQUAL "GAB" )
   # set preprocesor flags   
   set(CPPFLAGS "PROCOR  -DSPLITELE -DCRYST_BOND  -DCRYST_THETA -DCRYST_SC  -DSCCORPDB" )
 
#=========================================
#  Settings for E0LL2Y force field
#=========================================
elseif(UNRES_MD_FF STREQUAL "E0LL2Y")
   # set preprocesor flags   
   set(CPPFLAGS "PROCOR  -DSPLITELE -DSCCORPDB" )
endif(UNRES_MD_FF STREQUAL "GAB")

#=========================================
# Additional flags
#=========================================
set(CPPFLAGS "${CPPFLAGS} -DUNRES -DISNAN") 

#=========================================
# Compiler specific flags
#=========================================
if (Fortran_COMPILER_NAME STREQUAL "ifort")
  # Add ifort preprocessor flags
  set(CPPFLAGS "${CPPFLAGS} -DPGI" ) 
elseif (Fortran_COMPILER_NAME STREQUAL "f95")
  # Add new gfortran flags
  set(CPPFLAGS "${CPPFLAGS} -DG77") 
elseif (Fortran_COMPILER_NAME STREQUAL "gfortran")
  # Add old gfortran flags
  set(CPPFLAGS "${CPPFLAGS} -DG77") 
endif (Fortran_COMPILER_NAME STREQUAL "ifort")


#=========================================
# System specific flags
#=========================================
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
  set(CPPFLAGS "${CPPFLAGS} -DLINUX") 
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")

#=========================================
# Add MPI preprocessor flags
#=========================================
if (UNRES_WITH_MPI)
  set(CPPFLAGS "${CPPFLAGS} -DMP -DMPI") 
endif(UNRES_WITH_MPI)


#=========================================
# Apply preprocesor flags to *.F files
#=========================================
set_property(SOURCE ${UNRES_CLUSTER_WHAM_M_PP_SRC} PROPERTY COMPILE_DEFINITIONS ${CPPFLAGS} )  

set_property(SOURCE proc_proc.c PROPERTY COMPILE_DEFINITIONS "LINUX -DPGI" )

#========================================
#  Setting binary name
#========================================
set(UNRES_CLUSTER_WHAM_M_BIN
"cluster_wham-M_${Fortran_COMPILER_NAME}_${UNRES_MD_FF}.exe")

#=========================================
# Set full unres CLUSTER sources
#=========================================
set(UNRES_CLUSTER_WHAM_M_SRCS ${UNRES_CLUSTER_WHAM_M_SRC0} proc_proc.c)

#=========================================
# Build the binary
#=========================================
add_executable(UNRES_CLUSTER_WHAM_M_BIN ${UNRES_CLUSTER_WHAM_M_SRCS} )
set_target_properties(UNRES_CLUSTER_WHAM_M_BIN PROPERTIES OUTPUT_NAME ${UNRES_CLUSTER_WHAM_M_BIN})
set_property(TARGET UNRES_CLUSTER_WHAM_M_BIN PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )

#=========================================
# Link libraries
#=========================================
# link MPI libraries
if(UNRES_WITH_MPI)
  target_link_libraries( UNRES_CLUSTER_WHAM_M_BIN ${MPI_Fortran_LIBRARIES} )
endif(UNRES_WITH_MPI)
# link libxdrf.a 
target_link_libraries( UNRES_CLUSTER_WHAM_M_BIN xdrf )


#=========================================
# Install Path
#=========================================
install(TARGETS UNRES_CLUSTER_WHAM_M_BIN DESTINATION ${CMAKE_INSTALL_PREFIX}/cluster)

