project (gpsshogi CXX)
cmake_minimum_required (VERSION 2.8)
set (CMAKE_VERBOSE_MAKEFILE on)

ENABLE_TESTING()

if (UNIX)
  set (CMAKE_CXX_FLAGS "-Wall")
  set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DDEBUG")
  set (CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
  add_definitions(-march=native -DBOOST_FILESYSTEM_VERSION=2) 
endif()

if(MINGW)
  set (CMAKE_CXX_FLAGS "-Wall -D_MT -mthreads -static-libgcc -static-libstdc++")
  set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DDEBUG")
  set (CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -march=pentium4 -funroll-loops -funswitch-loops -fpeel-loops --param large-function-growth=48000 --param inline-unit-growth=8000 --param max-inline-insns-single=8000 -fomit-frame-pointer")
  add_definitions(-DOSL_SMP=1 -DOSL_DFPN_SMP_SEARCH -DMORE_CHECKMATE_IF_CAPTURE_MAJOR -DBOOST_FILESYSTEM_VERSION=2 -DBOOST_THREAD_USE_LIB=1 -DUSE_BOOST_POOL_ALLOCATOR=1 -D_WIN32_WINNT=0x0500)
  set (BOOST_ROOT "$ENV{HOME}/local/src/boost_1_46_1/")
endif(MINGW)

add_definitions(-DOSL_HOME="${CMAKE_CURRENT_SOURCE_DIR}" -DUSE_TCMALLOC=0 -D_REENTRANT)

include_directories ("${PROJECT_SOURCE_DIR}")
include_directories ("${PROJECT_SOURCE_DIR}/../include")
include_directories ("${PROJECT_SOURCE_DIR}/../../osl/include")

## Pthreads
#find_package (Threads)
#if (Threads_FOUND)
#  message (STATUS "Threads: ${CMAKE_THREAD_LIBS_INIT}")
#else()
#  message (FATAL_ERROR "Threads not found")
#endif()

## bzip2
find_library(Bz2_LIBRARY bz2 PATH "/usr/i686-w64-mingw32/lib"
             NO_DEFAULT_PATH)

## psapi
find_library(Psapi_LIBRARY psapi PATH "/usr/i686-w64-mingw32/lib"
             NO_DEFAULT_PATH)

## Boost thing
#set (BOOST_ROOT "$ENV{HOME}/local/boost_1_36_0_binaries/")
set (Boost_USE_STATIC_LIBS ON)
set (Boost_USE_MULTITHREADED ON)
find_package (Boost 1.46.1 COMPONENTS program_options filesystem serialization iostreams thread_win32 system)
if (Boost_FOUND)
  include_directories (${Boost_INCLUDE_DIRS})
  message (STATUS ${Boost_INCLUDE_DIRS})
else()
  message (FATAL_ERROR "Boost installation not found")
endif()

## gpsshogi
set(GPSSHOGI_HEADERS  options.h)
set(GPSSHOGI_SRCS     gpsshogi.cc)
set(GPSSHIGI_ALL_SRCS ${GPSSHOGI_HEADERS} ${GPSSHOGI_SRCS})
add_executable(gpsshogi ${GPSSHIGI_ALL_SRCS})
target_link_libraries (gpsshogi ${PROJECT_SOURCE_DIR}/../../osl/mingw-release/libosl.a)
target_link_libraries (gpsshogi ${Boost_PROGRAM_OPTIONS_LIBRARY})
target_link_libraries (gpsshogi ${Boost_FILESYSTEM_LIBRARY})
target_link_libraries (gpsshogi ${Boost_SERIALIZATION_LIBRARY})
target_link_libraries (gpsshogi ${Boost_IOSTREAMS_LIBRARY})
target_link_libraries (gpsshogi ${Boost_SYSTEM_LIBRARY})
target_link_libraries (gpsshogi ${Bz2_LIBRARY})
target_link_libraries (gpsshogi ${Psapi_LIBRARY})
target_link_libraries (gpsshogi ${Boost_THREAD_WIN32_LIBRARY})

## gpsusi
set(GPSUSI_HEADERS  options.h)
set(GPSUSI_SRCS     gpsusi.cc)
set(GPSUSI_ALL_SRCS ${GPSUSI_HEADERS} ${GPSUSI_SRCS})
add_executable(gpsusi ${GPSUSI_ALL_SRCS})
target_link_libraries (gpsusi ${PROJECT_SOURCE_DIR}/../../osl/mingw-release/libosl.a)
target_link_libraries (gpsusi ${Boost_PROGRAM_OPTIONS_LIBRARY})
target_link_libraries (gpsusi ${Boost_FILESYSTEM_LIBRARY})
target_link_libraries (gpsusi ${Boost_SERIALIZATION_LIBRARY})
target_link_libraries (gpsusi ${Boost_IOSTREAMS_LIBRARY})
target_link_libraries (gpsusi ${Boost_SYSTEM_LIBRARY})
target_link_libraries (gpsusi ${Bz2_LIBRARY})
target_link_libraries (gpsusi ${Psapi_LIBRARY})
target_link_libraries (gpsusi ${Boost_THREAD_WIN32_LIBRARY})

## installer
set (CPACK_PACKAGE_VENDOR "TeamGPS")
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "GPSShogi by TeamGPS")
set (CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../sample/binary-dist/gpsshogi_setup/README.ja.txt")
set (CPACK_PACKAGE_VERSION_MAJOR "20111117")
set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/../sample/binary-dist/GPL-2")
#set (CPACK_PACKAGE_EXECUTABLES gpsshogi;gpsshogi) # do not create start menu
set (CPACK_PACKAGE_INSTALL_DIRECTORY "gpsshogi")

# Specific to NSIS (Windows)
#set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY HKCU "/Environment/OSL_HOME" ${CPACK_NSIS_INSTALL_ROOT})
set (CPACK_NSIS_PACKAGE_NAME "GPSShogi")
set (CPACK_NSIS_DISPLAY_NAME "GPSShogi")
set (CPACK_NSIS_URL_INFO_ABOUT "http://gps.tanaka.ecc.u-tokyo.ac.jp/gpsshogi/")
set (CPACK_NSIS_HELP_LINK "http://gps.tanaka.ecc.u-tokyo.ac.jp/gpsshogi/")
## registry key for OSL_HOME environment variable
set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS   "WriteRegStr HKCU \\\"Environment\\\" \\\"OSL_HOME\\\" \\\"$INSTDIR\\\"")
set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "DeleteRegValue HKCU \\\"Environment\\\" \\\"OSL_HOME\\\"")

## Binary
install (TARGETS gpsshogi gpsusi
  RUNTIME DESTINATION smp
  LIBRARY DESTINATION smp
  ARCHIVE DESTINATION smp
)
## Data files
file (GLOB datafiles "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.dat" "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.bin" "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.txt" "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.pair")
file (GLOB dataratingfiles "${CMAKE_CURRENT_SOURCE_DIR}/../data/rating/*.txt")
install (FILES ${datafiles}       DESTINATION "data")
install (FILES ${dataratingfiles} DESTINATION "data/rating")
## README
file (GLOB readmefiles "${CMAKE_CURRENT_SOURCE_DIR}/../sample/binary-dist/gpsshogi_setup/README*.txt")
install (FILES ${readmefiles} DESTINATION "./")
## licenses for data
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/../AUTHORS" "${CMAKE_CURRENT_SOURCE_DIR}/../COPYING" "${CMAKE_CURRENT_SOURCE_DIR}/../LICENSE" DESTINATION "data")
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/../sample/binary-dist/GPL-2" DESTINATION "data")
## licenses for binaries
### OSL
set (OSL_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../osl")
install (FILES "${OSL_SOURCE_DIR}/AUTHORS" DESTINATION "smp" RENAME "AUTHORS.osl")
install (FILES "${OSL_SOURCE_DIR}/LICENSE" DESTINATION "smp" RENAME "LICENSE.osl")
### GPS
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/../AUTHORS" DESTINATION "smp" RENAME "AUTHORS")
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/../COPYING" DESTINATION "smp" RENAME "COPYING")
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/../LICENSE" DESTINATION "smp" RENAME "LICENSE")
### GPL
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/../sample/binary-dist/GPL-2" DESTINATION "smp")
### Boost
install (FILES "${BOOST_ROOT}/LICENSE_1_0.txt" DESTINATION "smp" RENAME "copyright.boost") 
### bzip2
install (FILES "$ENV{HOME}/local/src/bzip2-1.0.6/LICENSE" DESTINATION "smp" RENAME "copyright.bzip2") 
### Mingw
install (FILES "/usr/share/doc/mingw-w64/copyright" DESTINATION "smp" RENAME "copyright.mingw")


set (CPACK_GENERATOR "NSIS")
include (CPack)
