ADD_SUBDIRECTORY(overrides)
ADD_SUBDIRECTORY(test)
# Some settings are platform dependent. Let's define them per platform.
IF (WIN32)
  # Windows specific settings go here:
  SET (GNUCASH_RESOURCE_FILE gnucash.rc)

ELSE (WIN32)
  # All other platforms use these settings:
  SET (PLATFORM_FILES gnucash-valgrind)

ENDIF (WIN32)

SET (gnucash_SOURCES
  gnucash-bin.c
  ${GNUCASH_RESOURCE_FILE}  
)

ADD_EXECUTABLE (gnucash
  ${gnucash_SOURCES}
)

TARGET_COMPILE_DEFINITIONS(gnucash PRIVATE -DG_LOG_DOMAIN=\"gnc.bin\")

TARGET_LINK_LIBRARIES (gnucash
   gncmod-ledger-core gncmod-report-gnome gnc-gnome gncmod-gnome-utils gncmod-app-utils
   gncmod-engine gnc-module gnc-core-utils gnc-qof gncmod-report-system
   ${GUILE_LDFLAGS} ${GLIB2_LDFLAGS} ${GTK2_LDFLAGS} ${GTK_MAC_LDFLAGS}
)


IF (MAC_INTEGRATION)
  TARGET_COMPILE_OPTIONS(gnucash PRIVATE ${OSX_EXTRA_COMPILE_FLAGS})
  TARGET_LINK_LIBRARIES(gnucash ${OSX_EXTRA_LIBRARIES})
ENDIF(MAC_INTEGRATION)

INSTALL(TARGETS gnucash DESTINATION bin)
# No headers to install.

# Generate the gnucash-env script
SET(SCRIPT_LIST  "")
SET(SCRIPT_OUTPUT_DIR ${BINDIR_BUILD})

FOREACH (script gnucash-env gnucash-make-guids)
  SET (GNUCASH_ENV_SCRIPT ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${script})
  LIST(APPEND SCRIPT_LIST ${SCRIPT_OUTPUT_DIR}/${script})
  SET (GNC_OVERRIDES_DIR ${CMAKE_INSTALL_PREFIX}/libexec/gnucash/overrides)
  FILE(WRITE ${GNUCASH_ENV_SCRIPT} "#!/bin/sh\n")
  FILE(APPEND ${GNUCASH_ENV_SCRIPT} "PATH=\"${GNC_OVERRIDES_DIR}:\${PATH}\"\n")
  FILE(APPEND ${GNUCASH_ENV_SCRIPT} "export PATH\n")
  FILE(APPEND ${GNUCASH_ENV_SCRIPT} "\nGUILE_WARN_DEPRECATED=\"no\"\n")
  FILE(APPEND ${GNUCASH_ENV_SCRIPT} "export GUILE_WARN_DEPRECATED\n")
  FILE(APPEND ${GNUCASH_ENV_SCRIPT} "\nexec \"${script}\" \"\$@\"\n")
  FILE(COPY ${GNUCASH_ENV_SCRIPT}
       DESTINATION ${SCRIPT_OUTPUT_DIR}
       FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
  )
ENDFOREACH(script)

SET(TOP_SRC_DIR ${CMAKE_SOURCE_DIR})
SET(GNUCASH_BIN_INSTALL_NAME "gnucash")

SET(VALGRIND_OUTDIR ${BINDIR_BUILD})

CONFIGURE_FILE(gnucash.rc.in gnucash.rc @ONLY NEWLINE_STYLE WIN32)
GNC_CONFIGURE(gnucash-valgrind.in ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/gnucash-valgrind)

FILE(COPY ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/gnucash-valgrind
          DESTINATION ${VALGRIND_OUTDIR}
          FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)

## Create the environment file

FILE(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/environment.in ENV_STRINGS_IN)

SET(ENV_STRINGS_LIST "")

FOREACH(line ${ENV_STRINGS_IN})
  STRING(REGEX REPLACE "@-|-@" "@" line2 "${line}")
    STRING(REPLACE ";" "\;" line3 "${line2}")
  IF(NOT "${line3}" MATCHES "@NOTE")
    LIST(APPEND ENV_STRINGS_LIST "${line3}\n")
  ENDIF()
ENDFOREACH()

STRING(CONCAT ENV_STRINGS ${ENV_STRINGS_LIST})
STRING(CONFIGURE "${ENV_STRINGS}" ENV_STRINGS_CONF @ONLY)

SET(ENV_FILE_OUT ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/environment)
SET(BUILD_ENV_FILE_OUT ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/environment.build)

FILE(WRITE ${ENV_FILE_OUT} "${ENV_STRINGS_CONF}")
FILE(WRITE ${BUILD_ENV_FILE_OUT} "${ENV_STRINGS_CONF}")

SET(XDG_TEXT "
# GnuCash was not installed in the default location.
# XDG_DATA_DIRS will be set so that our documentation
# and gsettings schema are found.\n"
)

IF (NOT(${GNC_DBD_DIR} STREQUAL "${CMAKE_PREFIX_PATH}/lib/dbd"))
  FILE(APPEND ${ENV_FILE_OUT} "GNC_DBD_DIR=${GNC_DBD_DIR}")
ENDIF()

IF (NOT(${DATADIR} STREQUAL "/usr/share") AND NOT(${DATADIR} STREQUAL "/usr/local/share"))
  FILE(APPEND ${ENV_FILE_OUT} ${XDG_TEXT})
  FILE(APPEND ${ENV_FILE_OUT} "XDG_DATA_DIRS=${DATADIR};{XDG_DATA_DIRS};" "${GNC_SYSTEM_XDG_DATA_DIRS}\n")
ENDIF()

FILE(APPEND ${BUILD_ENV_FILE_OUT} "GNC_DBD_DIR=${LIBDBI_DRIVERS_DIR}/dbd")

FILE(APPEND ${BUILD_ENV_FILE_OUT} ${XDG_TEXT})
FILE(APPEND ${BUILD_ENV_FILE_OUT} "XDG_DATA_DIRS=${DATADIR_BUILD};{XDG_DATA_DIRS};" "${GNC_SYSTEM_XDG_DATA_DIRS}\n")

SET(PYTHON_TEXT "
# Define PYTHONPATH for non default installation path.\n"
 )
IF (NOT(${CMAKE_INSTALL_PREFIX} STREQUAL "/usr") AND NOT(${CMAKE_INSTALL_PREFIX} STREQUAL "/usr/local"))
 
  FILE(APPEND ${ENV_FILE_OUT} ${PYTHON_TEXT})
  FILE(APPEND ${ENV_FILE_OUT} "PYTHONPATH=${PYTHON_SYSCONFIG_OUTPUT};{PYTHONPATH}")
ENDIF()

FILE(APPEND ${BUILD_ENV_FILE_OUT} ${PYTHON_TEXT})
FILE(APPEND ${BUILD_ENV_FILE_OUT} "PYTHONPATH=${PYTHON_SYSCONFIG_BUILD};{PYTHONPATH}")


FILE(COPY ${BUILD_ENV_FILE_OUT}
  DESTINATION ${SYSCONFDIR_BUILD}/gnucash
  FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)
FILE(RENAME
  ${SYSCONFDIR_BUILD}/gnucash/environment.build
  ${SYSCONFDIR_BUILD}/gnucash/environment
)

SET(ENVIRONMENT_FILE_DIR ${CMAKE_CURRENT_BINARY_DIR})
FILE(COPY ${ENV_FILE_OUT}
  DESTINATION ${ENVIRONMENT_FILE_DIR}
  FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)

INSTALL(FILES ${SCRIPT_LIST} ${VALGRIND_OUTDIR}/gnucash-valgrind DESTINATION bin)
INSTALL(FILES ${ENVIRONMENT_FILE_DIR}/environment DESTINATION etc/gnucash)

SET_LOCAL_DIST(bin_DIST_local CMakeLists.txt environment.in generate-gnc-script gnucash-bin.c gnucash.rc.in gnucash-valgrind.in
        Makefile.am)
SET(bin_DIST ${bin_DIST_local} ${overrides_DIST} ${test_bin_DIST} PARENT_SCOPE)

IF (WIN32)
  # Write out a command script for windows
  SET(lib_directories boost enchant libsoup mysql pgsql libxslt)
  SET(bin_directories mingw gnutls goffice libgsf pcre gnome guile webkit regex aqbanking gwenhywfar libofx opensp
    libdbi sqlite3 mysql pgsql enchant libsoup libxslt)

  SET(CMD_LINES "")
  SET(BUILD_CMD_LINES "")
  FOREACH(dir bin lib lib/gnucash)
    FILE(TO_NATIVE_PATH ${CMAKE_INSTALL_PREFIX}/${dir} INSTALL_PATH_ITEM)
    FILE(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/${dir} BUILD_PATH_ITEM)
    LIST(APPEND CMD_LINES "set PATH=${INSTALL_PATH_ITEM}\;%PATH%\n")
    LIST(APPEND BUILD_CMD_LINES "set PATH=${BUILD_PATH_ITEM}\;%PATH%\n")
  ENDFOREACH(dir)

  FOREACH(dir ${lib_directories})
    FILE(TO_NATIVE_PATH ${CMAKE_PREFIX_PATH}/${dir}/lib PATH_ITEM)
    LIST(APPEND CMD_LINES "set PATH=${PATH_ITEM}\;%PATH%\n")
  ENDFOREACH(dir)

  FOREACH(dir ${bin_directories})
    FILE(TO_NATIVE_PATH ${CMAKE_PREFIX_PATH}/${dir}/bin PATH_ITEM)
    LIST(APPEND CMD_LINES "set PATH=${PATH_ITEM}\;%PATH%\n")
  ENDFOREACH(dir)

  SET(CMD_FILE ${CMAKE_CURRENT_BINARY_DIR}/gnucash-launcher.cmd)
  FILE(WRITE ${CMD_FILE} "@echo off\nsetlocal\n\n")
  FOREACH(line ${CMD_LINES})
    FILE(APPEND ${CMD_FILE} "${line}")
  ENDFOREACH(line)
  FILE(APPEND ${CMD_FILE} "\nstart gnucash %*\n")

  SET(BUILD_CMD_FILE ${CMAKE_BINARY_DIR}/bin/gnucash-launcher.cmd)
  FILE(WRITE ${BUILD_CMD_FILE} "@echo off\nsetlocal\n\n")
  FOREACH(line ${CMD_LINES})
     FILE(APPEND ${BUILD_CMD_FILE} "${line}")
  ENDFOREACH(line)
  FILE(APPEND ${BUILD_CMD_FILE} "\nstart gnucash %*\n")

  INSTALL(PROGRAMS ${CMD_FILE} DESTINATION bin)
ENDIF(WIN32)
