CMakeLists.txt 10.3 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 16 17 18 19
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")

STRING(TOLOWER ${PROJECT_NAME_SHORT} PROJECT_NAME_SHORT_LOWER)
PROJECT(${PROJECT_NAME_SHORT_LOWER}-${PROJECT_VERSION})

# version: 0.2.0
Ludovic Fauvet's avatar
Ludovic Fauvet committed
20
SET(CPACK_PACKAGE_VERSION_MAJOR "0")
21 22
SET(CPACK_PACKAGE_VERSION_MINOR "2")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
Ludovic Fauvet's avatar
Ludovic Fauvet committed
23
SET(COMPLETE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
24
SET(PROJECT_VERSION ${COMPLETE_VERSION})
25 26

# Codename of the Project :-)
27 28 29
SET(CODENAME "alpha")

# System Information
Ludovic Fauvet's avatar
Ludovic Fauvet committed
30
SITE_NAME(HOSTNAME)
31
SET(SYSNAME ${CMAKE_SYSTEM})
Ludovic Fauvet's avatar
Ludovic Fauvet committed
32

33
# CMake Settings
Ludovic Fauvet's avatar
Ludovic Fauvet committed
34 35 36
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0)
SET(CMAKE_COLOR_MAKEFILE ON)
SET(CMAKE_VERBOSE_MAKEFILE OFF)
37 38

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

41 42 43
# Path to contribs
SET(CONTRIBS_PATH ${CMAKE_CURRENT_SOURCE_DIR}/contribs)

44 45 46 47 48 49 50 51 52 53
# 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)

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

62
# Optionally allow embedding libvlc into the binary as
Ludovic Fauvet's avatar
Ludovic Fauvet committed
63
# VLMC requires libVLC
64
# SET (WITH_LIBVLC FALSE CACHE BOOL "Compile LibVLC in VLMC")
Ludovic Fauvet's avatar
Ludovic Fauvet committed
65

66 67
IF (UNIX)
    SET(WITH_PROFILING FALSE CACHE BOOL "Build with profiling support" )
68
    SET(CMAKE_INSTALL_PREFIX /usr)
69 70
ENDIF(UNIX)

71
SET(WITH_GUI TRUE CACHE BOOL "Enable the VLMC's GUI")
72 73 74 75 76 77 78 79 80 81
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")
82
    SET(CMAKE_OSX_ARCHITECTURES i386) # Make a universal binary
83 84
#   SET(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}")
ENDIF(NOT APPLE)
85

Ludovic Fauvet's avatar
Ludovic Fauvet committed
86 87 88 89 90 91 92
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})

93 94 95 96 97 98 99
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
100
# search for Qt4
101
IF (WITH_GUI)
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
102 103
    IF(WIN32)
        #FindQt4.cmake is so brain-dead when Xcompiling
104 105 106 107 108 109 110
        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
111 112 113 114 115
        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)
116 117
ELSE(WITH_GUI)
    FIND_PACKAGE (Qt4 4.5.1 COMPONENTS QtCore QtNetwork QtXml REQUIRED)
118
ENDIF(WITH_GUI)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
119

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
120 121 122
IF (NOT WIN32)
    #FindQt4.cmake is so brain-dead when Xcompiling
    SET (VLMC_LIBS ${QT_QTCORE_LIBRARY}
123 124 125 126 127 128 129
          ${QT_QTGUI_LIBRARY}
          ${QT_QTNETWORK_LIBRARY}
          ${QT_QTSVG_LIBRARY}
          ${QT_QTXML_LIBRARY}
          ${LIBVLC_LIBRARY}
          ${LIBVLCCORE_LIBRARY})

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
130 131
    INCLUDE(${QT_USE_FILE})
    ADD_DEFINITIONS(${QT_DEFINITIONS})
132 133
ELSE (NOT WIN32)
    SET (VLMC_LIBS
134 135 136 137 138 139 140
            ${CONTRIBS_PATH}/lib/libQtNetwork.a ${CONTRIBS_PATH}/lib/libQtXml.a
            ${CONTRIBS_PATH}/lib/libqtaccessiblewidgets.a
            ${CONTRIBS_PATH}/lib/libQtGui.a ${CONTRIBS_PATH}/lib/libqjpeg.a
            ${CONTRIBS_PATH}/lib/libqtaccessiblewidgets.a
            ${CONTRIBS_PATH}/lib/libQtCore.a
            ${CONTRIBS_PATH}/lib/libvlccore.dll.a
            ${CONTRIBS_PATH}/lib/libvlc.dll.a
141
            ws2_32 winmm imm32)
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
142
ENDIF(NOT WIN32)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
143 144 145

# layout of VLMC installation
# (default values are platform-specific)
146 147
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
148

149 150
# Copy the sh launcher
IF (NOT WIN32)
151
    CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/vlmc.sh" "${CMAKE_CURRENT_BINARY_DIR}/vlmc" COPYONLY)
152 153
ENDIF(NOT WIN32)

Ludovic Fauvet's avatar
Ludovic Fauvet committed
154 155 156 157 158 159 160
# 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)

161 162 163 164 165 166
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
167
# full paths for the installation
168 169 170 171 172 173 174
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/)
175
SET (VLMC_PIXMAPS_DIR ${CMAKE_INSTALL_PREFIX}/${VLMC_DATA_SUBDIR}/pixmaps/)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
176 177 178

# manual page - makes sense only on unix systems
IF (UNIX)
179 180 181 182
    SET (DEFAULT_MANUAL_SUBDIR  man)
    SET (VLMC_MANUAL_SUBDIR  ${DEFAULT_MANUAL_SUBDIR}  CACHE STRING "Subdirectory where manual files will be installed")
    MARK_AS_ADVANCED (VLMC_MANUAL_SUBDIR)
    SET (VLMC_MANUAL_DIR  ${CMAKE_INSTALL_PREFIX}/${VLMC_MANUAL_SUBDIR})
Ludovic Fauvet's avatar
Ludovic Fauvet committed
183 184
ENDIF (UNIX)

185
SUBDIRS(ts)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
186
SUBDIRS(src)
187
SUBDIRS(nsis)
188
SUBDIRS(effects)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
189

190
# Copy stuff to doc subdirectory
Ludovic Fauvet's avatar
Ludovic Fauvet committed
191
INSTALL (FILES AUTHORS COPYING INSTALL NEWS README TRANSLATORS
192
         DESTINATION ${VLMC_DOC_DIR})
Ludovic Fauvet's avatar
Ludovic Fauvet committed
193

194 195 196
# Copy .desktop file
INSTALL (FILES share/vlmc.desktop DESTINATION ${VLMC_DESKTOP_DIR})

197 198 199
# Copy the VLMC pixmap
INSTALL (FILES share/vlmc.png DESTINATION ${VLMC_PIXMAPS_DIR})

200
# Copy the share directory
201
INSTALL (DIRECTORY share/ DESTINATION ${VLMC_DATA_DIR}
202
         PATTERN "*.desktop" EXCLUDE
203
         PATTERN "*.ico" EXCLUDE
204
         PATTERN "*.icns" EXCLUDE
205
         PATTERN "vlmc.png" EXCLUDE)
206

Ludovic Fauvet's avatar
Ludovic Fauvet committed
207 208 209 210 211
#############################################################
# Enable packaging

INCLUDE(InstallRequiredSystemLibraries)

212 213 214
SET(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
SET(CPACK_PACKAGE_NAME ${PROJECT_NAME_SHORT})
SET(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
215 216
# Force package name
SET(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME})
217 218 219 220
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})
Ludovic Fauvet's avatar
Ludovic Fauvet committed
221 222
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
223 224
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")

Ludovic Fauvet's avatar
Ludovic Fauvet committed
225
IF(WIN32 AND NOT UNIX)
226 227 228 229 230 231 232
    # 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")
233
    SET(CPACK_NSIS_CONTACT ${PROJECT_CONTACT})
234 235
    SET(CPACK_NSIS_MODIFY_PATH ON)
    #SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "  !include \\\"${CMAKE_SOURCE_DIR}\\\\win_build\\\\extra.nsh\\\"")
Ludovic Fauvet's avatar
Ludovic Fauvet committed
236
ELSE(WIN32 AND NOT UNIX)
237 238
    #SET(CPACK_STRIP_FILES "VLMC")
    #SET(CPACK_SOURCE_STRIP_FILES "")
Ludovic Fauvet's avatar
Ludovic Fauvet committed
239 240
ENDIF(WIN32 AND NOT UNIX)

241 242 243 244 245 246 247
# RPM packages
INCLUDE ( ${CMAKE_MODULE_PATH}/RpmBuild.cmake )
IF ( RPMBUILD_FOUND )
    SET(CPACK_GENERATOR "RPM")
    SET(CPACK_SET_DESTDIR TRUE)
ENDIF ( RPMBUILD_FOUND )

248 249 250 251 252 253
# Debian packages
INCLUDE ( ${CMAKE_MODULE_PATH}/DpkgBuild.cmake )
IF ( DPKG_FOUND )
    SET(CPACK_GENERATOR "DEB")
    SET(CPACK_SET_DESTDIR TRUE)
    # FIXME: Check stuff: libvlc2 etc. in future as VLC 1.1+ releases
254
    SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt4-gui ( >= 4.6 ), libqt4-network ( >= 4.6 ), libqt4-svg ( >= 4.6 ), libqt4-xml ( >= 4.6 ), frei0r-plugins-dev")
255 256
ENDIF ( DPKG_FOUND )

257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274
#Mac
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)