CMakeLists.txt 11.4 KB
Newer Older
1 2 3 4 5
#
# VLMC build system
# Authors: Rohit Yadav <rohityadav89@gmail.com>
#          Ludovic Fauvet <etix@vlmc.org>
#
Ludovic Fauvet's avatar
Ludovic Fauvet committed
6

7
# Project Info
8 9 10 11 12 13 14 15
SET(PROJECT_NAME_SHORT   "VLMC")
SET(PROJECT_NAME_LONG    "VideoLAN Movie Creator")
SET(PROJECT_DESCRIPTION  "VLMC (VideoLAN Movie Creator) is a cross-platform, non-linear video editing software based on the VLC Media Player.")
SET(PROJECT_COPYRIGHT    "Copyright (C) 2008-2010 VideoLAN")
SET(PROJECT_CONTACT      "vlmc-devel@videolan.org")
SET(PROJECT_VENDOR       "VLMC Team")
SET(ORG_WEBSITE          "videolan.org")

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
# Configuring build type
IF(NOT CMAKE_BUILD_TYPE)
    SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING
        "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
        FORCE)
    MESSAGE("Setting build type to '${CMAKE_BUILD_TYPE}'")
ELSE(NOT CMAKE_BUILD_TYPE)
    MESSAGE("Build type set to '${CMAKE_BUILD_TYPE}'")
ENDIF(NOT CMAKE_BUILD_TYPE)

IF(WIN32)
    # Building in release for WIN32
    SET(CMAKE_BUILD_TYPE "Release")
    SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE QT_NO_DEBUG)
    # Use mingw's sprintf instead of windows's
    ADD_DEFINITIONS( -D__USE_MINGW_ANSI_STDIO=1 )
ENDIF(WIN32)

34 35 36 37 38 39 40 41 42 43
# Find Git Version Patch   
FIND_PROGRAM(GIT git)
IF(GIT)
    EXECUTE_PROCESS(
        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
        COMMAND ${GIT} rev-parse --short HEAD 
        OUTPUT_VARIABLE GIT_OUT OUTPUT_STRIP_TRAILING_WHITESPACE
    )
    SET(GIT_PATCH "git${GIT_OUT}")
ENDIF(GIT)
44 45

# version: 0.2.x
Ludovic Fauvet's avatar
Ludovic Fauvet committed
46
SET(CPACK_PACKAGE_VERSION_MAJOR "0")
Hugo Beauzée-Luyssen's avatar
Hugo Beauzée-Luyssen committed
47
SET(CPACK_PACKAGE_VERSION_MINOR "2")
48
SET(CPACK_PACKAGE_VERSION_PATCH "0")
49
SET(CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
50
SET(PROJECT_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR})
51 52
SET(PROJECT_VERSION ${CPACK_PACKAGE_VERSION})

53 54
MESSAGE(STATUS "VLMC Version: ${PROJECT_VERSION}")

55 56
STRING(TOLOWER ${PROJECT_NAME_SHORT} PROJECT_NAME_SHORT_LOWER)
PROJECT(${PROJECT_NAME_SHORT_LOWER}-${PROJECT_VERSION})
57 58

# Codename of the Project :-)
59 60 61
SET(CODENAME "alpha")

# System Information
Ludovic Fauvet's avatar
Ludovic Fauvet committed
62
SITE_NAME(HOSTNAME)
63
SET(SYSNAME ${CMAKE_SYSTEM}-${CMAKE_SYSTEM_PROCESSOR})
Ludovic Fauvet's avatar
Ludovic Fauvet committed
64

65
# CMake Settings
Ludovic Fauvet's avatar
Ludovic Fauvet committed
66 67 68
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0)
SET(CMAKE_COLOR_MAKEFILE ON)
SET(CMAKE_VERBOSE_MAKEFILE OFF)
69 70

# Set path to additional CMake modules
Ludovic Fauvet's avatar
Ludovic Fauvet committed
71 72
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})

73 74 75
# Path to contribs
SET(CONTRIBS_PATH ${CMAKE_CURRENT_SOURCE_DIR}/contribs)

76
# Optionally allow embedding libvlc into the binary as
Ludovic Fauvet's avatar
Ludovic Fauvet committed
77
# VLMC requires libVLC
78
# SET (WITH_LIBVLC FALSE CACHE BOOL "Compile LibVLC in VLMC")
Ludovic Fauvet's avatar
Ludovic Fauvet committed
79

80 81
IF (UNIX)
    SET(WITH_PROFILING FALSE CACHE BOOL "Build with profiling support" )
82 83
    SET(CMAKE_INSTALL_PREFIX /usr/local)
    SET(CPACK_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
84 85
ENDIF(UNIX)

86
SET(WITH_GUI TRUE CACHE BOOL "Enable the VLMC's GUI")
87 88 89 90 91 92 93 94 95 96
SET(WITH_CRASHBUTTON FALSE CACHE BOOL "Enable the crash button")

IF(NOT APPLE)
    SET(WITH_CRASHHANDLER_GUI TRUE CACHE BOOL "Enable the crash handler GUI (with backtrace and restart capabilities)")
    SET(WITH_CRASHHANDLER TRUE CACHE BOOL "Enable the crash handler")
ELSE(NOT APPLE)
    #FIXME: Mac OS port does n't start if crash handler is enabled.
    SET(WITH_CRASHHANDLER_GUI FALSE CACHE BOOL "Disable crash handler gui...")
    SET(WITH_CRASHHANDLER False CACHE BOOL "Disable the crash handler")
    SET(CMAKE_BUILD_TYPE "Release")
97
    SET(CMAKE_OSX_ARCHITECTURES i386)
98 99
#   SET(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}")
ENDIF(NOT APPLE)
100

Ludovic Fauvet's avatar
Ludovic Fauvet committed
101 102 103 104 105 106 107
FIND_PACKAGE(LIBVLC)
  IF (NOT LIBVLC_FOUND)
    MESSAGE (SEND_ERROR "LibVLC dependency was not found (please get libvlc)!")
  ENDIF (NOT LIBVLC_FOUND)

INCLUDE_DIRECTORIES(${LIBVLC_INCLUDE_DIR})

108 109 110 111 112 113 114
FIND_PACKAGE(frei0r)
IF (NOT FREI0R_FOUND)
  MESSAGE (SEND_ERROR "frei0r not found! It is required for effects engine to work.")
ENDIF (NOT FREI0R_FOUND)

INCLUDE_DIRECTORIES(${FREI0R_INCLUDE_DIR})

Ludovic Fauvet's avatar
Ludovic Fauvet committed
115
# search for Qt4
116
IF (WITH_GUI)
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
117 118
    IF(WIN32)
        #FindQt4.cmake is so brain-dead when Xcompiling
119 120 121 122 123 124 125
        SET(QT_LIBRARY_DIR ${CONTRIBS_PATH}/lib)
        SET(QT_INCLUDE_DIR ${CONTRIBS_PATH}/include/qt4)
        ADD_DEFINITIONS( -I${CONTRIBS_PATH}/include/qt4/QtCore)
        ADD_DEFINITIONS( -I${CONTRIBS_PATH}/include/qt4/QtGui)
        ADD_DEFINITIONS( -I${CONTRIBS_PATH}/include/qt4/QtXml)
        ADD_DEFINITIONS( -I${CONTRIBS_PATH}/include/qt4/QtNetwork)
        ADD_DEFINITIONS( -I${CONTRIBS_PATH}/include/qt4/)
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
126 127 128 129 130
        ADD_DEFINITIONS( -DQT_NO_OPENSSL)
        FIND_PACKAGE(Qt4 4.5.1 COMPONENTS QtCore QtXml QtGui QtNetwork REQUIRED )
    ELSE(WIN32)
        FIND_PACKAGE(Qt4 4.5.1 COMPONENTS QtCore QtXml QtGui QtNetwork REQUIRED )
    ENDIF(WIN32)
131 132
ELSE(WITH_GUI)
    FIND_PACKAGE (Qt4 4.5.1 COMPONENTS QtCore QtNetwork QtXml REQUIRED)
133
ENDIF(WITH_GUI)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
134

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
135 136 137
IF (NOT WIN32)
    #FindQt4.cmake is so brain-dead when Xcompiling
    SET (VLMC_LIBS ${QT_QTCORE_LIBRARY}
138 139 140 141 142 143 144
          ${QT_QTGUI_LIBRARY}
          ${QT_QTNETWORK_LIBRARY}
          ${QT_QTSVG_LIBRARY}
          ${QT_QTXML_LIBRARY}
          ${LIBVLC_LIBRARY}
          ${LIBVLCCORE_LIBRARY})

145 146 147
    IF (APPLE) # Fails to link to Cocoa framework automatically
        SET (VLMC_LIBS ${VLMC_LIBS}
                       ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks/Cocoa.framework)
148 149 150 151
    ELSE (APPLE)
        IF (WITH_GUI)
            SET (VLMC_LIBS ${VLMC_LIBS} -lX11)
        ENDIF (WITH_GUI)
152 153
    ENDIF(APPLE)

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
154 155
    INCLUDE(${QT_USE_FILE})
    ADD_DEFINITIONS(${QT_DEFINITIONS})
156 157
ELSE (NOT WIN32)
    SET (VLMC_LIBS
158 159
            ${CONTRIBS_PATH}/lib/libQtNetwork.a ${CONTRIBS_PATH}/lib/libQtXml.a
            ${CONTRIBS_PATH}/lib/libqtaccessiblewidgets.a
160
            ${CONTRIBS_PATH}/lib/libQtGui.a #${CONTRIBS_PATH}/lib/libqjpeg.a
161 162 163 164
            ${CONTRIBS_PATH}/lib/libqtaccessiblewidgets.a
            ${CONTRIBS_PATH}/lib/libQtCore.a
            ${CONTRIBS_PATH}/lib/libvlccore.dll.a
            ${CONTRIBS_PATH}/lib/libvlc.dll.a
165
            ws2_32 winmm imm32)
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
166
ENDIF(NOT WIN32)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
167 168 169

# layout of VLMC installation
# (default values are platform-specific)
170 171
SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/effects)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
172

173 174
# Copy the sh launcher
IF (NOT WIN32)
175
    CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/vlmc.sh" "${CMAKE_CURRENT_BINARY_DIR}/vlmc" COPYONLY)
176 177
ENDIF(NOT WIN32)

Ludovic Fauvet's avatar
Ludovic Fauvet committed
178 179 180 181 182 183 184
# common for MAC and UNIX
SET (DEFAULT_BIN_SUBDIR     bin)
SET (DEFAULT_LIB_SUBDIR     lib)
SET (DEFAULT_DATA_SUBDIR    share)
SET (DEFAULT_SRC_SUBDIR     src)
SET (DEFAULT_INCLUDE_SUBDIR include)

185 186 187 188 189 190
SET (VLMC_BIN_SUBDIR     "${DEFAULT_BIN_SUBDIR}"        CACHE STRING "Subdirectory where executables will be installed")
SET (VLMC_LIB_SUBDIR     "${DEFAULT_LIB_SUBDIR}"        CACHE STRING "Subdirectory where libraries will be installed")
SET (VLMC_DATA_SUBDIR    "${DEFAULT_DATA_SUBDIR}"       CACHE STRING "Subdirectory where VLMC data will be installed")
SET (VLMC_SRC_SUBDIR     "${DEFAULT_SRC_SUBDIR}"        CACHE STRING "Subdirectory where VLMC source is")
SET (VLMC_INCLUDE_SUBDIR "${DEFAULT_INCLUDE_SUBDIR}"    CACHE STRING "Subdirectory where header files will be installed")

Ludovic Fauvet's avatar
Ludovic Fauvet committed
191
# full paths for the installation
192 193 194 195 196 197 198
SET (VLMC_BIN_DIR     ${CMAKE_INSTALL_PREFIX}/${VLMC_BIN_SUBDIR})
SET (VLMC_LIB_DIR     ${CMAKE_INSTALL_PREFIX}/${VLMC_LIB_SUBDIR})
SET (VLMC_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/${VLMC_INCLUDE_SUBDIR})
SET (VLMC_DATA_DIR    ${CMAKE_INSTALL_PREFIX}/${VLMC_DATA_SUBDIR}/vlmc/)
SET (VLMC_DOC_DIR     ${CMAKE_INSTALL_PREFIX}/${VLMC_DATA_SUBDIR}/doc/vlmc/)
SET (VLMC_EFFECTS_DIR ${CMAKE_INSTALL_PREFIX}/${VLMC_LIB_SUBDIR}/vlmc/effects/)
SET (VLMC_DESKTOP_DIR ${CMAKE_INSTALL_PREFIX}/${VLMC_DATA_SUBDIR}/applications/)
199
SET (VLMC_PIXMAPS_DIR ${CMAKE_INSTALL_PREFIX}/${VLMC_DATA_SUBDIR}/pixmaps/)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
200 201 202

# manual page - makes sense only on unix systems
IF (UNIX)
203 204
    SET (DEFAULT_MANUAL_SUBDIR  ${VLMC_DATA_SUBDIR}/man)
    SET (VLMC_MANUAL_SUBDIR  "${DEFAULT_MANUAL_SUBDIR}"  CACHE STRING "Subdirectory where manual files will be installed")
205 206
    MARK_AS_ADVANCED (VLMC_MANUAL_SUBDIR)
    SET (VLMC_MANUAL_DIR  ${CMAKE_INSTALL_PREFIX}/${VLMC_MANUAL_SUBDIR})
Ludovic Fauvet's avatar
Ludovic Fauvet committed
207 208
ENDIF (UNIX)

209
SUBDIRS(ts)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
210
SUBDIRS(src)
211
SUBDIRS(nsis)
212
SUBDIRS(effects)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
213

214
# Copy stuff to doc subdirectory
215
INSTALL (FILES AUTHORS COPYING INSTALL NEWS README THANKS TRANSLATORS
216
         DESTINATION ${VLMC_DOC_DIR})
Ludovic Fauvet's avatar
Ludovic Fauvet committed
217

218 219 220
# Copy .desktop file
INSTALL (FILES share/vlmc.desktop DESTINATION ${VLMC_DESKTOP_DIR})

221 222 223
# Copy the VLMC pixmap
INSTALL (FILES share/vlmc.png DESTINATION ${VLMC_PIXMAPS_DIR})

224 225 226 227 228 229
# On UNIX copy the man page
IF (UNIX)
    INSTALL (FILES ${CMAKE_SOURCE_DIR}/doc/vlmc.1
             DESTINATION ${VLMC_MANUAL_DIR}/man1)
ENDIF (UNIX)

230 231 232 233 234 235
# Copy the share directory (TODO: add checks if the dir is empty, don't install)
# INSTALL (DIRECTORY share/ DESTINATION ${VLMC_DATA_DIR}
#         PATTERN "*.desktop" EXCLUDE
#         PATTERN "*.ico" EXCLUDE
#         PATTERN "*.icns" EXCLUDE
#         PATTERN "vlmc.png" EXCLUDE)
236

Ludovic Fauvet's avatar
Ludovic Fauvet committed
237
#############################################################
238
# Package Settings
Ludovic Fauvet's avatar
Ludovic Fauvet committed
239 240 241

INCLUDE(InstallRequiredSystemLibraries)

242 243
SET(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
SET(CPACK_PACKAGE_NAME ${PROJECT_NAME_SHORT})
244 245 246 247
SET(CPACK_PACKAGE_DESCRIPTION ${PROJECT_NAME_LONG})
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_NAME_SHORT} \n ${PROJECT_DESCRIPTION}")
SET(CPACK_PACKAGE_VENDOR ${PROJECT_VENDOR})
SET(CPACK_PACKAGE_CONTACT ${PROJECT_CONTACT})
248 249 250
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README")
SET(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/README)
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING")
251 252
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")

253
# Force Package Name
254
SET(CPACK_PACKAGE_FILE_NAME ${PROJECT_NAME}${GIT_PATCH}-${CPACK_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR})
255 256

# NSIS Windows Installer
Ludovic Fauvet's avatar
Ludovic Fauvet committed
257
IF(WIN32 AND NOT UNIX)
258 259 260 261 262 263 264
    # There is a bug in NSI that does not handle full unix paths properly. Make
    # sure there is at least one set of four (4) backslashes.
    SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share\\\\vlmc.png")
    SET(CPACK_NSIS_INSTALLED_ICON_NAME "\\\\vlmc.exe")
    SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} VLMC")
    SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\vlmc.org")
    SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\vlmc.org")
265
    SET(CPACK_NSIS_CONTACT ${PROJECT_CONTACT})
266
    SET(CPACK_NSIS_MODIFY_PATH ON)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
267
ELSE(WIN32 AND NOT UNIX)
268 269
    #SET(CPACK_STRIP_FILES "VLMC")
    #SET(CPACK_SOURCE_STRIP_FILES "")
Ludovic Fauvet's avatar
Ludovic Fauvet committed
270 271
ENDIF(WIN32 AND NOT UNIX)

272
SET(PACKAGE_REQUIRES "libvlc-dev ( >= 1.1.4 ), frei0r-plugins, libqt4-gui ( >= 4.6 ), libqt4-network ( >= 4.6 ), libqt4-svg ( >= 4.6 ), libqt4-xml ( >= 4.6 )")
273

274 275
# RPM packages
INCLUDE ( ${CMAKE_MODULE_PATH}/RpmBuild.cmake )
276
IF ( RPMBUILD_FOUND AND NOT WIN32 )
277 278
    SET(CPACK_GENERATOR "RPM")
    SET(CPACK_SET_DESTDIR TRUE)
279
    SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
280
ENDIF ( RPMBUILD_FOUND AND NOT WIN32 )
281

282 283
# Debian packages
INCLUDE ( ${CMAKE_MODULE_PATH}/DpkgBuild.cmake )
284
IF ( DPKG_FOUND AND NOT WIN32 )
285 286
    SET(CPACK_GENERATOR "DEB")
    SET(CPACK_SET_DESTDIR TRUE)
287 288
    SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${PACKAGE_REQUIRES})
ENDIF ( DPKG_FOUND AND NOT WIN32 )
289

290
# Mac Bundle
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307
IF( APPLE )
    SET(CPACK_GENERATOR "DragNDrop")

    #Libraries are bundled directly
    SET(CPACK_COMPONENT_LIBRARIES_HIDDEN TRUE)

    # Bundle Properties
    SET(MACOSX_BUNDLE_BUNDLE_NAME vlmc)
    SET(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION})
    SET(MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION})
    SET(MACOSX_BUNDLE_LONG_VERSION_STRING "Version ${PROJECT_VERSION}")

    #SET(CPACK_STRIP_FILES TRUE)
ENDIF( APPLE )

SET(CPACK_PACKAGE_EXECUTABLES "vlmc" "VLMC")
INCLUDE(CPack)