2010-10-17 05:32:01 +02:00
PROJECT ( tomahawk )
CMAKE_MINIMUM_REQUIRED ( VERSION 2.8 )
2011-08-12 14:25:42 +02:00
SET ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules" )
2010-10-17 05:32:01 +02:00
2011-04-12 11:00:07 -04:00
IF ( ${ CMAKE_VERSION } VERSION_GREATER 2.8.3 )
CMAKE_POLICY ( SET CMP0017 NEW )
ENDIF ( ${ CMAKE_VERSION } VERSION_GREATER 2.8.3 )
2011-04-12 10:53:32 -04:00
2011-03-02 04:34:59 +01:00
###
### Tomahawk application info
###
2011-04-04 16:44:39 +02:00
SET ( TOMAHAWK_ORGANIZATION_NAME "Tomahawk" )
SET ( TOMAHAWK_ORGANIZATION_DOMAIN "tomahawk-player.org" )
SET ( TOMAHAWK_APPLICATION_NAME "Tomahawk" )
2011-07-07 02:52:31 +02:00
SET ( TOMAHAWK_DESCRIPTION_SUMMARY "The social media player" )
SET ( TOMAHAWK_VERSION_MAJOR 0 )
2011-11-10 15:55:08 +01:00
SET ( TOMAHAWK_VERSION_MINOR 3 )
2011-11-13 19:26:33 +01:00
SET ( TOMAHAWK_VERSION_PATCH 99 )
2011-07-07 03:18:12 +02:00
2011-08-15 21:50:07 +02:00
#SET( TOMAHAWK_VERSION_RC 0 )
2011-07-07 03:18:12 +02:00
2011-08-08 14:05:51 +02:00
# build options
option ( BUILD_GUI "Build Tomahawk with GUI" ON )
2011-08-13 22:42:08 +02:00
option ( BUILD_RELEASE "Generate TOMAHAWK_VERSION without GIT info" OFF )
2011-08-08 14:05:51 +02:00
# generate version string
2011-07-07 03:18:12 +02:00
2011-08-13 22:42:08 +02:00
# base string used in release and unstable builds
2011-07-07 02:52:31 +02:00
SET ( TOMAHAWK_VERSION ${ TOMAHAWK_VERSION_MAJOR } . ${ TOMAHAWK_VERSION_MINOR } . ${ TOMAHAWK_VERSION_PATCH } )
2011-07-07 03:18:12 +02:00
IF ( TOMAHAWK_VERSION_RC )
2011-08-13 22:42:08 +02:00
SET ( TOMAHAWK_VERSION ${ TOMAHAWK_VERSION } rc ${ TOMAHAWK_VERSION_RC } )
2011-07-07 03:18:12 +02:00
ENDIF ( )
2011-08-13 22:42:08 +02:00
# additional info for non-release builds
IF ( NOT BUILD_RELEASE )
2011-08-13 23:00:00 +02:00
INCLUDE ( CMakeDateStamp )
SET ( TOMAHAWK_VERSION_DATE "${CMAKE_DATESTAMP_YEAR}${CMAKE_DATESTAMP_MONTH}${CMAKE_DATESTAMP_DAY}" )
IF ( ${ TOMAHAWK_VERSION_DATE } GREATER 0 )
2011-08-13 22:42:08 +02:00
SET ( TOMAHAWK_VERSION ${ TOMAHAWK_VERSION } . ${ TOMAHAWK_VERSION_DATE } )
ENDIF ( )
INCLUDE ( CMakeVersionSource )
IF ( CMAKE_VERSION_SOURCE )
SET ( TOMAHAWK_VERSION ${ TOMAHAWK_VERSION } - ${ CMAKE_VERSION_SOURCE } )
ENDIF ( )
2011-07-07 03:18:12 +02:00
ENDIF ( )
2011-03-02 04:34:59 +01:00
# set paths
2011-02-21 13:10:30 +01:00
SET ( THIRDPARTY_DIR ${ CMAKE_SOURCE_DIR } /thirdparty )
2011-07-07 02:52:31 +02:00
SET ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" )
SET ( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" )
SET ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" )
# installer creation
2011-08-13 21:51:31 +02:00
INCLUDE ( TomahawkCPack.cmake )
2010-10-17 05:32:01 +02:00
2011-08-08 14:05:51 +02:00
#deps
INCLUDE ( MacroOptionalFindPackage )
INCLUDE ( MacroLogFeature )
2010-10-17 05:32:01 +02:00
# Check if we need qtgui:
2011-08-08 14:05:51 +02:00
SET ( NEEDED_QT4_COMPONENTS QtCore QtXml QtNetwork )
IF ( NOT BUILD_GUI )
2010-10-17 05:32:01 +02:00
ADD_DEFINITIONS ( -DENABLE_HEADLESS )
2011-07-20 05:51:40 +02:00
MESSAGE ( STATUS "Building Tomahawk ${TOMAHAWK_VERSION} in HEADLESS mode ***" )
2010-10-17 05:32:01 +02:00
ELSE ( )
2011-07-20 05:51:40 +02:00
MESSAGE ( STATUS "Building Tomahawk ${TOMAHAWK_VERSION} full GUI version ***" )
2011-08-12 04:01:39 +02:00
LIST ( APPEND NEEDED_QT4_COMPONENTS "QtGui" "QtWebkit" )
2010-10-17 05:32:01 +02:00
ENDIF ( )
2011-08-26 18:40:19 -04:00
IF ( BUILD_GUI AND UNIX AND NOT APPLE )
FIND_PACKAGE ( X11 )
ENDIF ( )
2011-08-08 14:05:51 +02:00
macro_optional_find_package ( Qt4 4.7.0 COMPONENTS ${ NEEDED_QT4_COMPONENTS } )
2011-08-12 04:01:39 +02:00
macro_log_feature ( QT4_FOUND "Qt" "A cross-platform application and UI framework" "http://qt.nokia.com" TRUE "" "If you see this, although libqt4-devel is installed, check whether \n the qtwebkit-devel package is installed as well" )
2011-02-21 18:00:02 +01:00
2011-08-08 14:05:51 +02:00
macro_optional_find_package ( Phonon 4.5.0 )
macro_log_feature ( PHONON_FOUND "Phonon" "The Phonon multimedia library" "http://phonon.kde.org" TRUE "" "" )
if ( PHONON_FOUND )
message ( STATUS "Phonon found; ensure that phonon-vlc is at least 0.4" )
2011-04-30 11:25:28 -04:00
endif ( )
2011-04-22 09:58:30 -04:00
2011-10-03 15:35:48 -04:00
macro_optional_find_package ( LibEchonest 1.1.10 )
macro_log_feature ( LIBECHONEST_FOUND "Echonest" "Qt library for communicating with The Echo Nest" "http://projects.kde.org/libechonest" TRUE "" "libechonest 1.1.10 is needed for dynamic playlists and the infosystem" )
2011-02-21 18:00:02 +01:00
macro_optional_find_package ( CLucene 0.9.23 )
macro_log_feature ( CLucene_FOUND "CLucene" "The open-source, C++ search engine" "http://clucene.sf.net" TRUE "" "CLucene is used for indexing the collection" )
macro_optional_find_package ( QJSON )
macro_log_feature ( QJSON_FOUND "QJson" "Qt library that maps JSON data to QVariant objects" "http://qjson.sf.net" TRUE "" "libqjson is used for encoding communication between Tomahawk instances" )
macro_optional_find_package ( Taglib 1.6.0 )
macro_log_feature ( TAGLIB_FOUND "TagLib" "Audio Meta-Data Library" "http://developer.kde.org/~wheeler/taglib.html" TRUE "" "taglib is needed for reading meta data from audio files" )
2011-08-08 14:05:51 +02:00
include ( CheckTagLibFileName )
check_taglib_filename ( COMPLEX_TAGLIB_FILENAME )
2011-08-12 03:56:30 +02:00
macro_optional_find_package ( Boost )
macro_log_feature ( Boost_FOUND "Boost" "Provides free peer-reviewed portable C++ source libraries" "http://www.boost.org" TRUE "" "" ) #FIXME: give useful explaination
2011-08-29 00:10:30 -04:00
macro_optional_find_package ( QCA2 )
2011-08-29 11:08:57 -04:00
macro_log_feature ( QCA2_FOUND "QCA2" "Provides encryption and signing functions required for Grooveshark resolver" "http://delta.affinix.com/qca/" FALSE "" "" )
2011-08-12 03:56:30 +02:00
2011-09-06 18:09:47 -04:00
macro_optional_find_package ( LibAttica )
macro_log_feature ( LIBATTICA_FOUND "libattica" "Provides support for automatic fetching and managing of resolvers from the tomahawk website" "https://projects.kde.org/projects/kdesupport/attica" FALSE "" "" )
2011-09-09 08:24:26 -04:00
macro_optional_find_package ( QuaZip )
2011-11-19 13:29:40 +00:00
macro_log_feature ( QuaZip_FOUND "QuaZip" "Provides support for extracting downloaded resolvers automatically." "http://quazip.sourceforge.net/" FALSE "" "" )
2011-09-09 08:24:26 -04:00
IF ( NOT QuaZip_FOUND )
2011-09-12 02:52:52 +02:00
add_subdirectory ( ${ CMAKE_SOURCE_DIR } /src/libtomahawk/thirdparty/quazip )
2011-09-17 17:06:37 +02:00
SET ( QuaZip_INCLUDE_DIR ${ CMAKE_CURRENT_BINARY_DIR } /libtomahawk/thirdparty/quazip )
2011-09-09 08:24:26 -04:00
SET ( QuaZip_LIBRARY quazip )
SET ( QuaZip_LIBRARIES ${ QuaZip_LIBRARY } )
2011-09-12 02:52:52 +02:00
SET ( QuaZip_FOUND true )
2011-11-19 13:29:40 +00:00
macro_log_feature ( QuaZip_FOUND "QuaZip" "Provides support for extracting downloaded resolvers automatically. Building internal copy" "http://quazip.sourceforge.net/" FALSE "" "" )
2011-09-09 08:24:26 -04:00
# copy headers to build/quazip so we can use proper includes inside the code
2011-09-12 02:52:52 +02:00
FILE ( COPY ${ CMAKE_SOURCE_DIR } /src/libtomahawk/thirdparty/quazip/quazip/ DESTINATION ${ CMAKE_BINARY_DIR } /libtomahawk/thirdparty/quazip )
2011-09-09 08:24:26 -04:00
ENDIF ( )
2011-08-08 14:05:51 +02:00
# required
#While we distribute our own liblastfm2, don't need to look for it
#macro_optional_find_package(LibLastFm 0.3.3)
#macro_log_feature(LIBLASTFM_FOUND "LastFm" "Qt library for the Last.fm webservices" "https://github.com/mxcl/liblastfm" FALSE "" "liblastfm is needed for scrobbling tracks to Last.fm and fetching cover artwork")
set ( LIBLASTFM_FOUND true )
2011-11-02 13:13:23 +01:00
#### submodules start
2011-02-21 18:00:02 +01:00
2011-04-17 21:25:24 +02:00
# this installs headers and such and should really be handled in a separate package by packagers
2011-11-05 10:22:50 -04:00
IF ( INTERNAL_JREEN )
2011-11-02 13:13:23 +01:00
IF ( EXISTS ${ CMAKE_CURRENT_SOURCE_DIR } /.gitmodules )
EXECUTE_PROCESS ( COMMAND git submodule init WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } )
EXECUTE_PROCESS ( COMMAND git submodule update WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } )
ENDIF ( EXISTS ${ CMAKE_CURRENT_SOURCE_DIR } /.gitmodules )
ENDIF ( )
2011-04-17 21:25:24 +02:00
IF ( INTERNAL_JREEN )
2011-05-21 12:12:07 +02:00
ADD_SUBDIRECTORY ( ${ THIRDPARTY_DIR } /jreen )
2011-04-17 21:25:24 +02:00
SET ( LIBJREEN_INCLUDE_DIR ${ CMAKE_CURRENT_BINARY_DIR } /thirdparty/jreen/include )
2011-05-21 04:53:42 +02:00
SET ( LIBJREEN_LIBRARY jreen )
SET ( LIBJREEN_LIBRARIES ${ LIBJREEN_LIBRARY } )
2011-04-17 21:25:24 +02:00
SET ( LIBJREEN_FOUND true )
MESSAGE ( STATUS "INTERNAL libjreen: ${LIBJREEN_INCLUDE_DIR}, ${LIBJREEN_LIBRARY}" )
ELSE ( INTERNAL_JREEN )
macro_optional_find_package ( Jreen )
ENDIF ( INTERNAL_JREEN )
2011-08-11 02:54:32 +03:00
macro_log_feature ( LIBJREEN_FOUND "Jreen" "Qt XMPP Library" "https://github.com/euroelessar/jreen" FALSE "" "Jreen is needed for the Jabber SIP plugin. \n\n Use -DINTERNAL_JREEN=ON to build the git submodule inside Tomahawk \n Be aware this installs a full jreen with headers and everything!\n" )
2011-05-21 04:38:55 +02:00
2011-11-05 10:22:50 -04:00
macro_optional_find_package ( QTweetLib )
macro_log_feature ( QTWEETLIB_FOUND "QTweetLib" "Qt Twitter Library" "https://github.com/minimoog/QTweetLib" FALSE "" "QTweetLib is needed for the Twitter SIP plugin.\n" )
2011-11-02 13:13:23 +01:00
#### submodules end
2011-05-21 04:38:55 +02:00
2011-05-21 12:12:07 +02:00
### libportfwd
SET ( LIBPORTFWD_INCLUDE_DIR ${ THIRDPARTY_DIR } /libportfwd/include )
SET ( LIBPORTFWD_LIBRARY tomahawk_portfwd )
SET ( LIBPORTFWD_LIBRARIES ${ LIBPORTFWD_LIBRARY } )
ADD_SUBDIRECTORY ( ${ THIRDPARTY_DIR } /libportfwd )
2011-04-17 21:25:24 +02:00
2011-03-11 13:34:11 -05:00
# we need pthreads too
2011-10-17 17:23:03 +02:00
#macro_optional_find_package(Threads)
#macro_log_feature(THREADS_FOUND "Threads" "Threading Library" "" TRUE "" "Platform specific library for threading")
2011-08-08 14:05:51 +02:00
2011-08-09 22:46:50 -04:00
macro_optional_find_package ( KDE4 )
2011-08-08 14:05:51 +02:00
macro_optional_find_package ( KDE4Installed )
# this was used before we had FindKDE4Installed, just leaving it here to keep the flags
# for future kde integration
# macro_optional_find_package(KDE4)
2011-08-09 22:46:50 -04:00
IF ( KDE4_FOUND )
2011-09-06 23:45:09 +02:00
IF ( CMAKE_C_FLAGS )
# KDE4 adds and removes some compiler flags that we don't like
# (only for gcc not for clang e.g.)
STRING ( REPLACE "-std=iso9899:1990" "" CLEAN_C_FLAGS ${ CMAKE_C_FLAGS } )
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions" )
ENDIF ( )
2011-08-09 22:46:50 -04:00
ELSE ( )
SET ( CLEAN_C_FLAGS ${ CMAKE_C_FLAGS } )
ENDIF ( )
2011-02-10 11:18:59 +01:00
2011-03-07 18:31:55 -05:00
IF ( WIN32 )
find_library ( QTSPARKLE_LIBRARIES qtsparkle )
ENDIF ( WIN32 )
2011-02-21 18:00:02 +01:00
#show dep log
2011-02-21 16:29:17 +01:00
macro_display_feature_log ( )
2011-03-18 14:45:42 -04:00
SET ( INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" )
# make uninstall support
CONFIGURE_FILE (
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e _ u n i n s t a l l . c m a k e . i n "
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e "
I M M E D I A T E @ O N L Y )
2011-04-11 15:36:29 -04:00
# KDE4 defines an uninstall target for us automatically
IF ( NOT KDE4_FOUND )
ADD_CUSTOM_TARGET ( uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" )
ENDIF ( )
2011-03-18 14:45:42 -04:00
2011-03-11 13:38:32 -05:00
IF ( NOT APPLE )
# Make linking as strict on linux as it is on osx. Then we don't break linking on mac so often
2011-03-11 14:56:44 -05:00
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--no-undefined" )
2011-03-11 13:38:32 -05:00
ENDIF ( NOT APPLE )
2011-03-11 13:34:11 -05:00
2011-01-27 00:05:16 -05:00
ADD_SUBDIRECTORY ( thirdparty )
2010-12-28 06:12:48 +01:00
ADD_SUBDIRECTORY ( src/libtomahawk )
2011-05-25 03:44:33 +02:00
SET ( TOMAHAWK_LIBRARIES tomahawklib )
2010-10-17 05:32:01 +02:00
ADD_SUBDIRECTORY ( src )
2011-03-21 03:01:54 +01:00
ADD_SUBDIRECTORY ( admin )
2011-11-16 14:01:34 +01:00
IF ( BUILD_GUI )
ADD_SUBDIRECTORY ( src/breakpad/CrashReporter )
ENDIF ( )