####################################################################
# CMake common setting.
#
# Project independent setting.
#
# Optional Variables:
#
# SET(GENERATE_DOXYFILE TRUE)
#       Generate doxyfile from doxyfile.in
#
# SET(ENABLE_GTKDOC TRUE)
# SET(GTKDOC_OUTPUT_DIR <path>)
#       Enable gtk-doc
#
# SET(GENERATE_UPLOADPKG_BATCH TRUE)
#        Generate UploadPkg.batch for Uploading to hosting host
#
####################################################################
INCLUDE(Version)

ADD_DEFINITIONS(-DPROJECT_NAME='"${PROJECT_NAME}"')

IF(NOT DEFINED PROJECT_DATADIR)
    SET(PROJECT_DATADIR "${datadir}/${PROJECT_NAME}")
ENDIF(NOT DEFINED PROJECT_DATADIR)
ADD_DEFINITIONS(-DPROJECT_DATADIR='"${PROJECT_DATADIR}"')

IF(NOT DEFINED PROJECT_DOCDIR)
    SET(PROJECT_DOCDIR "${docdir}/${PROJECT_NAME}-${PRJ_VER}")
ENDIF(NOT DEFINED PROJECT_DOCDIR)

ADD_DEFINITIONS(-DPRJ_VERSION='"${PRJ_VER_FULL}"')

# Load developer targets if DEVELOPER_SETTING_FILE exists
IF(EXISTS ${DEVELOPER_SETTING_FILE})
    INCLUDE(Developer)
    SETTING_FILE_GET_ATTRIBUTE(SSH_USER SSH_USER ${DEVELOPER_SETTING_FILE})
    SETTING_FILE_GET_ATTRIBUTE(SSH_ARGS SSH_ARGS ${DEVELOPER_SETTING_FILE})
    SETTING_FILE_GET_ATTRIBUTE(KOJI_CVS_PATH KOJI_CVS_PATH ${DEVELOPER_SETTING_FILE})

    # Start next version
    ADD_CUSTOM_TARGET(next_version
	    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/ChangeLog ${CMAKE_SOURCE_DIR}/ChangeLog.prev
	    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/SPECS/RPM-ChangeLog
		${CMAKE_SOURCE_DIR}/SPECS/RPM-ChangeLog.prev
	    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/SPECS/RPM-RELEASE-NOTES.template
	        ${CMAKE_SOURCE_DIR}/SPECS/RPM-RELEASE-NOTES.txt
	    )
ENDIF(EXISTS ${DEVELOPER_SETTING_FILE})

#==================================================================
# Configure files
#

IF (GENERATE_UPLOADPKG_BATCH)
    CONFIGURE_FILE(UploadPkg.batch.in UploadPkg.batch)
ENDIF()

FILE(READ ${CMAKE_SOURCE_DIR}/ChangeLog.prev CHANGELOG_PREV)
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/ChangeLog.in ${CMAKE_SOURCE_DIR}/ChangeLog)
FILE(READ ${CMAKE_SOURCE_DIR}/SPECS/RPM-ChangeLog.prev RPM_CHANGELOG_PREV)
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/SPECS/RPM-ChangeLog.in ${CMAKE_SOURCE_DIR}/SPECS/RPM-ChangeLog)

#==================================================================
# Make uninstall
#
CONFIGURE_FILE(
    "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
    IMMEDIATE @ONLY)

ADD_CUSTOM_TARGET(uninstall
    "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
    )

#====================================================================
# Package handling
#

SET(CPACK_PACKAGE_VENDOR "Red Hat, APAC, Inc.")
SET(CPACK_PACKAGE_VERSION ${PRJ_VER})
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
SET(SOURCE_TARBALL_OUTPUT_DIR "${CMAKE_BINARY_DIR}/SOURCES")
SET(MY_IGNORE_FILES "/BUILDROOT/")
SET(CPACK_PACKAGE_IGNORE_FILES ${MY_IGNORE_FILES})
SET(CPACK_SOURCE_IGNORE_FILES ${MY_IGNORE_FILES})

IF(EXISTS ${DEVELOPER_SETTING_FILE})
    INCLUDE(FedoraDeveloper)
 ELSE(EXISTS ${DEVELOPER_SETTING_FILE})
    INCLUDE(RPM)
ENDIF(EXISTS ${DEVELOPER_SETTING_FILE})

#====================================================================
# Doxygen Document generation
#
IF (GENERATE_DOXYFILE)
    CONFIGURE_FILE(Doxyfile.in Doxyfile)
ENDIF()

IF (EXISTS Doxyfile)
    FIND_PACKAGE(Doxygen)
    ADD_CUSTOM_TARGET(doxygen
	    COMMAND "${DOXYGEN}" "Doxyfile"
	    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
    )
    INSTALL(DIRECTORY doc/html
	DESTINATION "${docdir}/${PROJECT_NAME}-${PRJ_VER}"
    )
ENDIF()

