C Make Lists
C Make Lists
9)
project (freetuxtv C)
if(WIN32)
set(AUTO_NEWLINE_STYLE WIN32)
else()
set(AUTO_NEWLINE_STYLE UNIX)
endif()
if(CMAKE_HOST_SYSTEM MATCHES Windows)
set(HOST_WIN32 TRUE)
else()
set(HOST_WIN32 FALSE)
endif()
####################
# Macro definition
####################
####################
# Library checking
####################
# Setting up Intl
find_package (Intl REQUIRED)
find_package(Gettext REQUIRED)
include_directories(${INTL_INCLUDE_DIRS})
link_directories(${INTL_LIBRARY_DIRS})
add_definitions(-DENABLE_NLS -DGETTEXT_PACKAGE=\"${APPLICATION_PACKAGE_NAME}\")
####################
# Config file
####################
set(PACKAGE_LOCALE_DIR "${CMAKE_INSTALL_PREFIX}/share/locale")
set(PACKAGE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share")
include_directories (${PROJECT_SOURCE_DIR}/lib)
include_directories (${PROJECT_SOURCE_DIR}/src)
set(LIBDBEVOLUTION_SRC
lib/libdbevolution/db-evolution-instance.h
lib/libdbevolution/db-evolution-instance.c
)
set(LIBVLCGTK_SRC
lib/libvlc-gtk/gtk-libvlc-include.h
lib/libvlc-gtk/gtk-libvlc-instance.h
lib/libvlc-gtk/gtk-libvlc-instance.c
lib/libvlc-gtk/gtk-libvlc-media.h
lib/libvlc-gtk/gtk-libvlc-media.c
lib/libvlc-gtk/gtk-libvlc-media-player.h
lib/libvlc-gtk/gtk-libvlc-media-player.c
lib/libvlc-gtk/gtk-libvlc-private.h
)
set(FREETUXTV_LIB_SRC
src/gtk-builder-dialog.c
src/gtk-builder-dialog.h
src/gtk-builder-object.c
src/gtk-builder-object.h
src/gtk-builder-widget.c
src/gtk-builder-widget.h
src/gtk-builder-window.c
src/gtk-builder-window.h
src/gtk-date-time-picker.c
src/gtk-date-time-picker.h
src/gtk-progress-dialog.c
src/gtk-progress-dialog.h
src/lib-gmmkeys.c
src/lib-gmmkeys.h
src/lib-m3uparser.c
src/lib-m3uparser.h
)
set(FREETUXTV_SRC
src/freetuxtv-app.h
src/freetuxtv-cclosure-marshal.c
src/freetuxtv-cclosure-marshal.h
src/freetuxtv-cellrenderer-channelslist.c
src/freetuxtv-cellrenderer-channelslist.h
src/freetuxtv-cellrenderer-recordingslist.c
src/freetuxtv-cellrenderer-recordingslist.h
src/freetuxtv-channel-infos.c
src/freetuxtv-channel-infos.h
src/freetuxtv-channels-group-infos.c
src/freetuxtv-channels-group-infos.h
src/freetuxtv-channels-list.c
src/freetuxtv-channels-list.h
src/freetuxtv-db-sync.c
src/freetuxtv-db-sync.h
src/freetuxtv-fileutils.c
src/freetuxtv-fileutils.h
src/freetuxtv-gladexml.h
src/freetuxtv-i18n.h
src/freetuxtv-models.c
src/freetuxtv-models.h
src/freetuxtv-player-error-dialog.c
src/freetuxtv-player-error-dialog.h
src/freetuxtv-recording-infos.c
src/freetuxtv-recording-infos.h
src/freetuxtv-recordings-list.c
src/freetuxtv-recordings-list.h
src/freetuxtv-tv-channel-infos.c
src/freetuxtv-tv-channel-infos.h
src/freetuxtv-tv-channels-list.c
src/freetuxtv-tv-channels-list.h
src/freetuxtv-utils.c
src/freetuxtv-utils.h
src/freetuxtv-window-add-channels-group.c
src/freetuxtv-window-add-channels-group.h
src/freetuxtv-window-add-recording.c
src/freetuxtv-window-add-recording.h
src/freetuxtv-window-channel-properties.c
src/freetuxtv-window-channel-properties.h
src/freetuxtv-window-main.c
src/freetuxtv-window-main.h
src/freetuxtv-window-tv-channels-database.c
src/freetuxtv-window-tv-channels-database.h
src/main.c
)
####################
# Translations
####################
find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
if(NOT GETTEXT_MSGFMT_EXECUTABLE)
message(FATAL "msgfmt not found")
else(NOT GETTEXT_MSGFMT_EXECUTABLE)
SET(catalogname ${APPLICATION_PACKAGE_NAME})
FOREACH(_poFile ${PO_FILES})
GET_FILENAME_COMPONENT(_poFileName ${_poFile} NAME)
STRING(REGEX REPLACE "^${catalogname}_?" "" _langCode ${_poFileName} )
STRING(REGEX REPLACE "\\.po$" "" _langCode ${_langCode} )
IF( _langCode )
GET_FILENAME_COMPONENT(_lang ${_poFile} NAME_WE)
SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/po/${_lang}.gmo)
ADD_CUSTOM_COMMAND(OUTPUT ${_gmoFile}
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/po
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} $
{_poFile}
DEPENDS ${_poFile})
INSTALL(FILES ${_gmoFile} DESTINATION ${INSTALL_PATH_LOCALE}/$
{_langCode}/LC_MESSAGES/ RENAME ${catalogname}.mo)
LIST(APPEND GMO_FILES ${_gmoFile})
ENDIF( _langCode )
ENDFOREACH(_poFile ${PO_FILES})
ENDIF(NOT GETTEXT_MSGFMT_EXECUTABLE)
find_program(INTLTOOL_MERGE_EXECUTABLE intltool-merge)
if(NOT INTLTOOL_MERGE_EXECUTABLE)
message(FATAL "intltool-merge not found")
else(NOT INTLTOOL_MERGE_EXECUTABLE)
set(DESKTOP_FILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/data/menu/freetuxtv.desktop.in)
set(DESKTOP_FILE ${CMAKE_CURRENT_BINARY_DIR}/data/menu/freetuxtv.desktop)
ADD_CUSTOM_COMMAND(
OUTPUT ${DESKTOP_FILE}
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/data/menu/
COMMAND ${INTLTOOL_MERGE_EXECUTABLE} -d ${CMAKE_CURRENT_SOURCE_DIR}/po/
${DESKTOP_FILE_IN} ${DESKTOP_FILE}
DEPENDS ${DESKTOP_FILE_IN})
####################
# Create Executable
####################
############################
# Common files installation
############################
# Documentation file
set(DOCFILES_EXT "")
if(WIN32)
set(DOCFILES_EXT ".txt")
endif(WIN32)
# README file
configure_file (
"${PROJECT_SOURCE_DIR}/README"
"${PROJECT_BINARY_DIR}/README${DOCFILES_EXT}"
NEWLINE_STYLE ${AUTO_NEWLINE_STYLE}
)
install(FILES "${PROJECT_BINARY_DIR}/README${DOCFILES_EXT}" DESTINATION $
{INSTALL_PATH_DOC})
# COPYING file
configure_file (
"${PROJECT_SOURCE_DIR}/COPYING"
"${PROJECT_BINARY_DIR}/COPYING${DOCFILES_EXT}"
NEWLINE_STYLE ${AUTO_NEWLINE_STYLE}
)
install(FILES "${PROJECT_BINARY_DIR}/COPYING${DOCFILES_EXT}" DESTINATION $
{INSTALL_PATH_DOC})
# AUTHORS file
configure_file (
"${PROJECT_SOURCE_DIR}/AUTHORS"
"${PROJECT_BINARY_DIR}/AUTHORS${DOCFILES_EXT}"
NEWLINE_STYLE ${AUTO_NEWLINE_STYLE}
)
install(FILES "${PROJECT_BINARY_DIR}/AUTHORS${DOCFILES_EXT}" DESTINATION $
{INSTALL_PATH_DOC})
# ChangeLog file
configure_file (
"${PROJECT_SOURCE_DIR}/ChangeLog"
"${PROJECT_BINARY_DIR}/ChangeLog${DOCFILES_EXT}"
NEWLINE_STYLE ${AUTO_NEWLINE_STYLE}
)
install(FILES "${PROJECT_BINARY_DIR}/ChangeLog${DOCFILES_EXT}" DESTINATION $
{INSTALL_PATH_DOC})
# INSTALL file
configure_file (
"${PROJECT_SOURCE_DIR}/INSTALL"
"${PROJECT_BINARY_DIR}/INSTALL${DOCFILES_EXT}"
NEWLINE_STYLE ${AUTO_NEWLINE_STYLE}
)
install(FILES "${PROJECT_BINARY_DIR}/INSTALL${DOCFILES_EXT}" DESTINATION $
{INSTALL_PATH_DOC})
###############################
# Resources files installation
###############################
# Desktop file
if(UNIX AND NOT WIN32)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/data/menu/freetuxtv.desktop
DESTINATION ${INSTALL_PATH_APPLICATIONS})
endif(UNIX AND NOT WIN32)
# Splashscreen
install(FILES "${PROJECT_SOURCE_DIR}/data/splashscreen.png" DESTINATION $
{INSTALL_PATH_SHARE})
# Database file
install(FILES "${PROJECT_SOURCE_DIR}/data/sqlite3-create-tables.sql" DESTINATION $
{INSTALL_PATH_SHARE})
# UI files
install(DIRECTORY "${PROJECT_SOURCE_DIR}/data/ui/" DESTINATION $
{INSTALL_PATH_SHARE}/ui FILES_MATCHING PATTERN "*.glade")
# Data files
install(FILES "${PROJECT_SOURCE_DIR}/data/channels_groups.xml" DESTINATION $
{INSTALL_PATH_SHARE})
install(FILES "${PROJECT_SOURCE_DIR}/data/tv_channels.xml" DESTINATION $
{INSTALL_PATH_SHARE})
# Channels logos
install(DIRECTORY "${PROJECT_SOURCE_DIR}/data/images/channels/" DESTINATION $
{INSTALL_PATH_SHARE}/images/channels/ FILES_MATCHING PATTERN "*.png")
# Icons
install(FILES "${PROJECT_SOURCE_DIR}/data/icons/hicolor_apps_16x16_freetuxtv.png"
DESTINATION ${INSTALL_PATH_ICONS}/hicolor/16x16/apps/ RENAME freetuxtv.png)
install(FILES "${PROJECT_SOURCE_DIR}/data/icons/hicolor_apps_22x22_freetuxtv.png"
DESTINATION ${INSTALL_PATH_ICONS}/hicolor/22x22/apps/ RENAME freetuxtv.png)
install(FILES "${PROJECT_SOURCE_DIR}/data/icons/hicolor_apps_32x32_freetuxtv.png"
DESTINATION ${INSTALL_PATH_ICONS}/hicolor/32x32/apps/ RENAME freetuxtv.png)
install(FILES "${PROJECT_SOURCE_DIR}/data/icons/hicolor_apps_48x48_freetuxtv.png"
DESTINATION ${INSTALL_PATH_ICONS}/hicolor/48x48/apps/ RENAME freetuxtv.png)
install(FILES "${PROJECT_SOURCE_DIR}/data/icons/hicolor_apps_64x64_freetuxtv.png"
DESTINATION ${INSTALL_PATH_ICONS}/hicolor/64x64/apps/ RENAME freetuxtv.png)
install(FILES "${PROJECT_SOURCE_DIR}/data/icons/hicolor_apps_128x128_freetuxtv.png"
DESTINATION ${INSTALL_PATH_ICONS}/hicolor/128x128/apps/ RENAME freetuxtv.png)
install(FILES
"${PROJECT_SOURCE_DIR}/data/icons/hicolor_apps_scalable_freetuxtv.svg" DESTINATION
${INSTALL_PATH_ICONS}/hicolor/scalable/apps/ RENAME freetuxtv.svg)
#################
# Build package
#################
INCLUDE(InstallRequiredSystemLibraries)
if(WIN32)
if(CMAKE_BUILD_TYPE MATCHES Debug)
SET(CPACK_GENERATOR ZIP)
else()
SET(CPACK_GENERATOR ZIP NSIS)
endif()
elseif(APPLE)
configure_file(${PROJECT_SOURCE_DIR}/platforms/osx/Info.plist.in
${PROJECT_BINARY_DIR}/platforms/osx/Info.plist
@ONLY)
configure_file(${PROJECT_SOURCE_DIR}/platforms/osx/run.sh.in
${PROJECT_BINARY_DIR}/platforms/osx/${APPLICATION_NAME}
@ONLY)
SET(CPACK_GENERATOR Bundle)
else()
SET(CPACK_GENERATOR TGZ DEB)
endif(WIN32)
SET(CPACK_PACKAGE_NAME ${APPLICATION_PACKAGE_NAME})
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${APPLICATION_DESCRIPTION_SUMMARY})
SET(CPACK_PACKAGE_VENDOR ${APPLICATION_VENDOR_NAME})
SET(CPACK_PACKAGE_CONTACT ${APPLICATION_CONTACT})
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README$
{DOCFILES_EXT}")
SET(CPACK_PACKAGE_VERSION_MAJOR ${APPLICATION_VERSION_MAJOR})
SET(CPACK_PACKAGE_VERSION_MINOR ${APPLICATION_VERSION_MINOR})
SET(CPACK_PACKAGE_VERSION_PATCH ${APPLICATION_VERSION_PATCH}$
{APPLICATION_VERSION_BUILD})
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING$
{DOCFILES_EXT}")
SET(CPACK_PACKAGE_INSTALL_DIRECTORY ${APPLICATION_PACKAGE_NAME}) # Useful for
registry key and NSIS auto uninstaller
if(WIN32)
# NSIS
SET(CPACK_NSIS_DISPLAY_NAME "${APPLICATION_NAME}")
elseif(APPLE)
if (NOT CPACK_SYSTEM_NAME)
IF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
SET(CPACK_SYSTEM_NAME amd64)
ELSEIF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
SET(CPACK_SYSTEM_NAME i386)
ENDIF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
endif()
SET(CPACK_BUNDLE_NAME "${APPLICATION_NAME}")
else()
if (NOT CPACK_SYSTEM_NAME)
IF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
SET(CPACK_SYSTEM_NAME amd64)
ELSEIF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
SET(CPACK_SYSTEM_NAME i386)
ENDIF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
endif()
SET(CPACK_DEBIAN_PACKAGE_NAME ${APPLICATION_PACKAGE_NAME})
SET(CPACK_DEBIAN_PACKAGE_VERSION ${APPLICATION_VERSION})
SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${DEBIAN_DEPS})
SET(CPACK_DEBIAN_PACKAGE_SECTION "misc")
# SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${DEB_ARCH})
ENDIF()
SET(CPACK_PACKAGE_EXECUTABLES "${APPLICATION_EXE_NAME}" "${APPLICATION_NAME}")
include(CPack)