project(k9copy)

# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

find_package(KDE4 REQUIRED)
include (KDE4Defaults)
INCLUDE(CheckFunctionExists)
INCLUDE(CheckVariableExists)
INCLUDE(CheckTypeSize)
INCLUDE(CMakeDetermineSystem)
INCLUDE(CheckIncludeFiles)
INCLUDE(FindDvdRead)
INCLUDE(FindXine)
INCLUDE(FindFFmpeg)
INCLUDE(FindFFmpegScale)

set (VERSION 2.0.2)


########################################
# CPU and Host
########################################
MESSAGE(STATUS "Checking CPU and OS")


EXECUTE_PROCESS(
    COMMAND ${CMAKE_C_COMPILER} -dumpmachine
    OUTPUT_VARIABLE MACHINE
    OUTPUT_STRIP_TRAILING_WHITESPACE
)
MESSAGE(STATUS "Building for target ${MACHINE}")

STRING(REGEX MATCH "(i?86-*)|(athlon-*)|(pentium-*)" _machine_x86 "${MACHINE}")
IF (_machine_x86)
    MESSAGE(STATUS "Found target X86")
    SET(ADM_CPU_X86 1)
ENDIF (_machine_x86)

STRING(REGEX MATCH "(x86_64-*)|(X86_64-*)|(AMD64-*)|(amd64-*)" _machine_x86_64 "${MACHINE}")
IF (_machine_x86_64)
    MESSAGE(STATUS "Found target X86_64")
    SET(ADM_CPU_X86_64 1)
    SET(ADM_CPU_X86 0)
ENDIF (_machine_x86_64)

STRING(REGEX MATCH "(ppc-*)" _machine_ppc "${MACHINE}")
IF (_machine_ppc)
    MESSAGE(STATUS "Found target PPC")
    SET(ADM_CPU_PPC 1)
ENDIF (_machine_ppc)

#convert any 64 bit build into generic 64 tag for below
IF (ARCH_X86_64) 
  SET(ARCH64BIT 1)
ENDIF (ARCH_X86_64)

IF (ADM_CPU_X86)
	SET(ARCH_X86 1)
	SET(ARCH_X86_32 1)
ELSEIF (ADM_CPU_X86_64)
	#SET(ARCH_X86 1)
	SET(ARCH_X86_64 1)
	SET(ARCH_64_BITS 1)
ELSEIF (ADM_CPU_PPC)
	OPTION(ALTIVEC "" ON)

	SET(WORDS_BIGENDIAN 1)

	IF (ALTIVEC)
		SET(BUILD_ALTIVEC 1)
		SET(ARCH_PPC 1)
		SET(ARCH_POWERPC 1)
		SET(USE_ALTIVEC 1)
		SET(HAVE_ALTIVEC 1)

		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mabi=altivec -maltivec")
		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mabi=altivec -maltivec")

		SET(HAVE_ALTIVEC_H 1)
	ENDIF (ALTIVEC)
ENDIF (ADM_CPU_X86)



# usage: CHECK_INCLUDE_FILES (<header> <RESULT_VARIABLE> )
CHECK_INCLUDE_FILES(inttypes.h      HAVE_INTTYPES_H)                    # simapi.h
CHECK_INCLUDE_FILES(stddef.h        HAVE_STDDEF_H)                      # simapi.h
CHECK_INCLUDE_FILES(stdint.h        HAVE_STDINT_H)                      # simapi.h
CHECK_INCLUDE_FILES(stdlib.h        HAVE_STDLIB_H)                      # simapi.h
CHECK_INCLUDE_FILES(string.h        HAVE_STRING_H)                      # _core/libintl.cpp
CHECK_INCLUDE_FILES(sys/stat.h      HAVE_SYS_STAT_H)                    # gpg/gpg.cpp
CHECK_INCLUDE_FILES(sys/types.h     HAVE_SYS_TYPES_H)                   # simapi.h
CHECK_INCLUDE_FILES(unistd.h        HAVE_UNISTD_H)                      # simapi.h
CHECK_INCLUDE_FILES(malloc.h        HAVE_MALLOC_H)                      # simapi.h

FINDFFMPEGSCALE("ffmpeg/swscale.h" "swscale")


CONFIGURE_FILE(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)


# do config checks
########################################
# check dependencies
########################################
MESSAGE(STATUS "Checking dependencies" )
FINDXINE("xine.h" "xine")
FINDDVDREAD("dvdread/ifo_types.h" "dvdread")
FINDFFMPEG("ffmpeg/avcodec.h" "avcodec")


add_definitions( -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS)
add_subdirectory( src/dvdnav)
add_subdirectory( src/core )
add_subdirectory( src/mpeg2)
add_subdirectory(src/vamps)
add_subdirectory(src/devices)
add_subdirectory(src/mplayer)
add_subdirectory(src/import)
add_subdirectory(icons)
add_subdirectory(data)
add_subdirectory(po)

include_directories(
 ${CMAKE_CURRENT_SOURCE_DIR}/src/dvdnav
 ${CMAKE_CURRENT_SOURCE_DIR}/src/devices
 ${CMAKE_CURRENT_SOURCE_DIR}/src/core
 ${CMAKE_CURRENT_SOURCE_DIR}/src/vamps
 ${CMAKE_CURRENT_SOURCE_DIR}/src/backup
 ${CMAKE_CURRENT_SOURCE_DIR}/src/mpeg2
 ${CMAKE_CURRENT_SOURCE_DIR}/src/main
 ${CMAKE_CURRENT_SOURCE_DIR}/src/mplayer
 ${CMAKE_CURRENT_SOURCE_DIR}/src/import
 ${KDE4_INCLUDES} ${QT_INCLUDES} 
 )


set (devices_SRCS
   src/devices/k9cddrive.cpp
)

set (libdvdnav_SRCS
   src/dvdnav/dvdread.c
   src/dvdnav/decoder.c
   src/dvdnav/dvdnav.c
   src/dvdnav/highlight.c
   src/dvdnav/navigation.c
   src/dvdnav/read_cache.c
   src/dvdnav/remap.c
   src/dvdnav/searching.c
   src/dvdnav/settings.c
   src/dvdnav/vm.c
   src/dvdnav/vmcmd.c
)

set (vamps_SRCS
  src/vamps/cputest.cpp
  src/vamps/k9fifo.cpp
  src/vamps/k9requant.cpp
  src/vamps/k9vamps.cpp
  src/vamps/tcmemcpy.cpp
)

set (core_SRCS
  src/core/k9dvd.cpp
  src/core/k9dvdtitle.cpp
  src/core/k9dvdtitleset.cpp
  src/core/k9dvdchapter.cpp
  src/core/k9dvdsize.cpp
  src/core/k9process.cpp
  src/core/k9tools.cpp
  src/core/k9dvdread.cpp
  src/core/k9cellcopylist.cpp
  src/core/k9cell.cpp
  src/core/k9dvdprogress.cpp
  src/core/k9ifo2.cpp
  src/core/k9titleencopt.cpp
  src/core/k9config.cpp
  src/core/k9saveimage.cpp
  src/core/k9drawimage.cpp
  src/core/k9progress.cpp
  src/core/k9audiocodecs.cpp
  src/core/k9videocodecs.cpp
  src/core/k9burndvd.cpp
  src/core/k9dvdbackupinterface.cpp
  )
kde4_add_ui_files(core_SRCS 
  src/core/dvdprogress.ui
  src/core/progress.ui
  )

set (backup_SRCS
   src/backup/k9dvdbackup.cpp
   src/backup/k9script.cpp
   src/backup/k9backupdlg.cpp
   src/backup/k9dvdauthor.cpp
   src/backup/k9mp4enc.cpp
   src/backup/k9mp4dlg.cpp
)
kde4_add_ui_files(backup_SRCS 
   src/backup/backupdlg.ui
   src/backup/mp4dlg.ui
)

set (mpeg2_SRCS
   src/mpeg2/alloc.cpp
   src/mpeg2/cpu_accel.cpp
   src/mpeg2/cpu_state.cpp
   src/mpeg2/decode.cpp
   src/mpeg2/header.cpp
   src/mpeg2/idct_alpha.cpp
   src/mpeg2/idct_altivec.cpp
   src/mpeg2/idct.cpp
   src/mpeg2/idct_mmx.cpp
   src/mpeg2/k9decodethread.cpp
   src/mpeg2/k9plaympeg2.cpp
   src/mpeg2/kdecmpeg2.cpp
   src/mpeg2/motion_comp_alpha.cpp
   src/mpeg2/motion_comp_altivec.cpp
   src/mpeg2/motion_comp.cpp
   src/mpeg2/motion_comp_mmx.cpp
   src/mpeg2/motion_comp_vis.cpp
   src/mpeg2/rgb.cpp
   src/mpeg2/rgb_mmx.cpp
   src/mpeg2/rgb_vis.cpp
   src/mpeg2/slice.cpp
   src/mpeg2/uyvy.cpp
)

set (mplayer_SRCS
   src/mplayer/k9mplayer.cpp
   src/mplayer/k9xine.cpp
   src/mplayer/k9phonon.cpp
)

kde4_add_ui_files(mplayer_SRCS 
   src/mplayer/mplayer.ui
   src/mplayer/phonon.ui
)


set (import_SRCS
   src/import/k9chapteredit.cpp
   src/import/k9avidecode.cpp
   src/import/k9avifile.cpp
   src/import/k9canvasselection.cpp
   src/import/k9import.cpp
   src/import/k9lvitemimport.cpp
   src/import/k9menubutton.cpp
   src/import/k9menu.cpp
   src/import/k9menuedit.cpp
   src/import/k9menueditor.cpp
   src/import/k9newdvd.cpp
   src/import/k9newtitle.cpp
   src/import/k9title.cpp
   src/import/k9processlist.cpp
   src/import/k9importfiles.cpp
)

kde4_add_ui_files(import_SRCS 
   src/import/chapterEdit.ui
   src/import/import.ui
   src/import/menuEdit.ui
   src/import/newTitle.ui
   src/import/processList.ui
)


set (main_SRCS
   src/main/k9main.cpp
   src/main/k9langselect.cpp
   src/main/k9playbackoptions.cpp
   src/main/k9updatefactor.cpp
   src/main/kviewmpeg2.cpp
   src/main/k9glwidget.cpp
   src/main/k9titlefactor.cpp
   src/main/k9mp4title.cpp
   src/main/k9settings.cpp
   src/main/k9copy.cpp
   src/main/kconfigdlg.cpp
   src/main/k9prefdvd.cpp
   src/main/k9prefmencoder.cpp
   src/main/k9mencodercmdgen.cpp
   src/main/k9prefmpeg4.cpp
   src/main/k9prefpreview.cpp
   src/main/k9prefauthor.cpp
)

set (player_SRCS
 	src/player/main.cpp
	src/player/k9play.cpp
)

kde4_add_ui_files(main_SRCS 
   src/main/k9mainw.ui
   src/main/configDlg.ui
   src/main/playbackoptionsw.ui
   src/main/prefDVD.ui
   src/main/prefMPEG4.ui
   src/main/prefMencoder.ui
   src/main/prefAuthor.ui
   src/main/prefpreview.ui
   src/main/langselectw.ui
   src/main/viewmpeg2.ui
   src/main/titlefactor.ui
   src/main/mencoderCmdGen.ui
)


set (k9copylib_SRCS
   ${libdvdnav_SRCS}
   ${core_SRCS}
   ${vamps_SRCS}
   ${mpeg2_SRCS}
)

set(k9copy_SRCS
   ${devices_SRCS}
   ${backup_SRCS}
   ${mplayer_SRCS}
   ${import_SRCS}
   ${main_SRCS}
   main.cpp
	
 )

set(k9play_SRCS 
  ${player_SRCS}	
 )


set (k9xineplayer_SRCS
   src/xine/main.cpp
   src/xine/k9xineplayer.cpp
)


kde4_add_library(k9copylib STATIC ${k9copylib_SRCS})
target_link_libraries(k9copylib ${KDE4_KDEUI_LIBS} ${KDE4_KDE3SUPPORT_LIBS}  )

kde4_add_ui_files(k9copy_SRCS )
#kde4_add_kcfg_files(k9copy_SRCS settings.kcfgc )
kde4_add_executable(k9copy ${k9copy_SRCS})
kde4_add_executable(k9play ${k9play_SRCS})
kde4_add_executable(k9xineplayer ${k9xineplayer_SRCS})

target_link_libraries(k9copy k9copylib ${KDE4_KDEUI_LIBS} ${KDE4_KDE3SUPPORT_LIBS} ${QT_QTOPENGL_LIBRARY}  -lkfile -lphonon)
target_link_libraries(k9play k9copylib ${KDE4_KDEUI_LIBS} ${KDE4_KDE3SUPPORT_LIBS}  )
target_link_libraries(k9xineplayer ${KDE4_KDEUI_LIBS} ${KDE4_KDE3SUPPORT_LIBS} -lxine )


install(TARGETS k9copy DESTINATION ${BIN_INSTALL_DIR} )
install(TARGETS k9play DESTINATION ${BIN_INSTALL_DIR} )
install(TARGETS k9xineplayer DESTINATION ${BIN_INSTALL_DIR} )

########### install files ###############

install( FILES k9copy.desktop  DESTINATION  ${XDG_APPS_INSTALL_DIR} )
#install( FILES k9copy.kcfg  DESTINATION  ${KCFG_INSTALL_DIR} )
install( FILES k9copyui.rc  DESTINATION  ${DATA_INSTALL_DIR}/k9copy )

install(FILES k9copy_open.desktop DESTINATION
${SERVICES_INSTALL_DIR}/ServiceMenus)

kde4_install_icons( ${ICON_INSTALL_DIR} )


############package###############
SET(CPACK_PACKAGE_VERSION_MAJOR "2")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
SET(CPACK_PACKAGE_VERSION_PATCH "2")
SET(CPACK_PACKAGE_NAME "k9copy")
SET(CPACK_SOURCE_IGNORE_FILES 
"moc_"
"\\\\.a"
"\\\\.moc"
"\\\\.gmo"
"k9copy$"
"k9xineplayer$"
"ui_"
"\\\\.gz"
"\\\\.tar.Z"
"\\\\~$"
"\\\\kdevelop"
"\\\\automoc"
"Makefile$"
"CMakeCache.txt"
"/CVS/"
"/CMakeTmp/"
"/CMakeFiles/"
"/_CPack_Packages/"
"/templates/"
"/\\\\.svn/"
"\\\\.swp$"
"\\\\.#"
"/#"
)
#SET(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_CURRENT_BINARY_DIR};K9Copy;ALL;/" ) 
INCLUDE(CPack)

