From 0710d08800aa69ca9579416a3d4bb6220593f229 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sat, 26 Nov 2011 13:19:22 -0600 Subject: Initial attempt at migration to standard TDE CMake build system --- CMakeLists.txt | 432 +++++++++++---------------------------------------------- 1 file changed, 78 insertions(+), 354 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 719ca20..c81549b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,56 +1,40 @@ -# Rosegarden -# A MIDI and audio sequencer and musical notation editor. +################################################# # -# This program is Copyright 2000-2008 -# Guillaume Laurent , -# Chris Cannam , -# Richard Bown +# (C) 2011 Timothy Pearson +# kb9vqf (AT) pearsoncomputing.net # -# The moral rights of Guillaume Laurent, Chris Cannam, and Richard -# Bown to claim authorship of this work have been asserted. +# Improvements and feedback are welcome # -# This file is Copyright 2006-2008 -# Pedro Lopez-Cabanillas +# This file is released under GPL >= 2 # -# Other copyrights also apply to some parts of this work. Please -# see the AUTHORS file and individual file headers for details. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. See the file -# COPYING included with this distribution for more information. +################################################# + +cmake_minimum_required( VERSION 2.8 ) + + +##### general package setup ##################### # The name of our project is "ROSEGARDEN". CMakeLists files in this project can -# refer to the root source directory of the project as ${ROSEGARDEN_SOURCE_DIR} +# refer to the root source directory of the project as ${ROSEGARDEN_SOURCE_DIR} # and to the root binary directory of the project as ${ROSEGARDEN_BINARY_DIR} PROJECT(ROSEGARDEN) -# CMake supports KDE checks since this version number -CMAKE_MINIMUM_REQUIRED(VERSION 2.4.2) -# Show full commands and messages. It generates a lot of console output. -# It is necessary for Eclipse warning/error parser, -# but it can be enabled anyway with "make VERBOSE=1" -SET(CMAKE_VERBOSE_MAKEFILE OFF) +##### include essential cmake modules ########### -# Seems that relative paths break some scripts. Don't set it ON -SET(CMAKE_USE_RELATIVE_PATHS OFF) +include( CheckCXXSourceCompiles ) +include( CheckFunctionExists ) +include( CheckIncludeFileCXX ) +include( CheckLibraryExists ) +include( CheckStructHasMember ) +include( CheckSymbolExists ) +include( CheckTypeSize ) +include( FindPkgConfig ) -# Rebuild the object files if the rules have changed, but not the actual source -# files or headers (e.g. if you changed the some compiler switches) -SET(CMAKE_SKIP_RULE_DEPENDENCY OFF) - -# Misc settings -SET(CMAKE_COLOR_MAKEFILE ON) -SET(CMAKE_INCLUDE_CURRENT_DIR ON) -SET(CMAKE_BUILD_WITH_INSTALL_RPATH ON) - -# Additional CMake modules for 3rd party library checks reside here -SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_admin") +##### set up versioning ######################### # Mark as advanced -MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH +MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH CMAKE_BACKWARDS_COMPATIBILITY) @@ -66,15 +50,32 @@ IF(VERSION_SUFFIX) ENDIF(VERSION_SUFFIX) ADD_DEFINITIONS(-D'VERSION="${VERSION}"') -# User options -OPTION(WANT_DEBUG "Include debug support" OFF) -OPTION(WANT_FULLDBG "Full debug support (BIG executables!)" OFF) -OPTION(WANT_SOUND "Include Sound support" ON) -OPTION(WANT_JACK "Include Jack (Jack Audio Connection Kit) support" ON) -OPTION(WANT_DSSI "Include DSSI support" ON) -OPTION(WANT_LIRC "Include LIRC (Linux Infrared Remote Control) support" OFF) -OPTION(WANT_PCH "Use precompiled headers" OFF) -OPTION(WANT_TEST "Perform unit tests" OFF) + +##### include our cmake modules ################# + +set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" ) +include( TDEMacros ) + + +##### setup install paths ####################### + +include( TDESetupPaths ) +tde_setup_paths( ) + + +##### user requested modules #################### + +option( BUILD_ALL "Build all" OFF ) +option( BUILD_DOC "Build doc" ${BUILD_ALL} ) +option( BUILD_TRANSLATIONS "Build translations" ${BUILD_ALL} ) +option( WANT_DEBUG "Include debug support" OFF ) +option( WANT_FULLDBG "Full debug support (BIG executables!)" OFF ) +option( WANT_SOUND "Include Sound support" ${BUILD_ALL} ) +option( WANT_JACK "Include Jack (Jack Audio Connection Kit) support" ${BUILD_ALL} ) +option( WANT_DSSI "Include DSSI support" ${BUILD_ALL} ) +option( WANT_LIRC "Include LIRC (Linux Infrared Remote Control) support" OFF ) +option( WANT_PCH "Use precompiled headers" OFF ) +option( WANT_TEST "Perform unit tests" OFF ) IF(WANT_TEST) ENABLE_TESTING() @@ -86,314 +87,37 @@ IF(NOT WANT_SOUND) ADD_DEFINITIONS(-DNO_SOUND) ENDIF(NOT WANT_SOUND) -# Check for KDE3 -FIND_PACKAGE(KDE3 REQUIRED QUIET) -IF(QT_FOUND) - ADD_DEFINITIONS(${QT_DEFINITIONS}) - MESSAGE(STATUS "Found Qt3 (version ${qt_version_str})") - #MESSAGE("QT_LIBRARIES: ${QT_LIBRARIES}") -ELSE(QT_FOUND) - MESSAGE(STATUS_ERROR "Qt3 package not found--assuming TQt4") - SET(QT_INCLUDE_DIR "/usr/include/qt4") -ENDIF(QT_FOUND) -SET(QT_UIC_EXECUTABLE "/usr/bin/uic-tqt") -SET(QT_MOC_EXECUTABLE "/usr/bin/tmoc") -IF(KDE3_FOUND) - ADD_DEFINITIONS(${KDE3_DEFINITIONS}) - #MESSAGE("KDE3PREFIX: ${KDE3PREFIX}") - KDE3_PRINT_RESULTS() - #MESSAGE("QT_AND_TDECORE_LIBS: ${QT_AND_TDECORE_LIBS}") -ELSE(KDE3_FOUND) - MESSAGE(FATAL_ERROR "KDE3 Not found") -ENDIF(KDE3_FOUND) - -# Clear the flags set by FindKDE3 -SET(CMAKE_CXX_FLAGS "-I/usr/include/tqt -include tqt.h -DTQT_THREAD_SUPPORT") -MARK_AS_ADVANCED(KDE3_BUILD_TESTS - KDE3_ENABLE_FINAL - KDE3_DCOPIDL_EXECUTABLE - KDE3_DCOPIDL2CPP_EXECUTABLE - KDE3_INCLUDE_DIR - KDE3_KCFGC_EXECUTABLE - KDE3_TDECORE_LIBRARY - KDECONFIG_EXECUTABLE ) - -# Provide the KDE3 prefix as a default prefix (if the user has CMake 2.4.4) -IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - SET(CMAKE_INSTALL_PREFIX ${KDE3PREFIX} CACHE PATH - "Install path prefix, prepended onto install directories." FORCE) -ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - -# Check for PKG-CONFIG -FIND_PACKAGE(PkgConfig REQUIRED) -IF(PKG_CONFIG_FOUND) - MESSAGE(STATUS "Program pkg-config found (${PKG_CONFIG_EXECUTABLE})") -ELSE(PKG_CONFIG_FOUND) - MESSAGE(FATAL_ERROR "Program pkg-config not found") -ENDIF(PKG_CONFIG_FOUND) - -# Initialize some variables -SET(HAVE_XFT FALSE) -SET(HAVE_ALSA FALSE) -SET(HAVE_JACK FALSE) -SET(HAVE_DSSI FALSE) -SET(HAVE_LIBLO FALSE) -SET(HAVE_LIBLRDF FALSE) -SET(HAVE_LADSPA FALSE) -SET(HAVE_LIRC FALSE) -SET(HAVE_FFTW3F FALSE) - -# Check for Xft -PKG_CHECK_MODULES(XFT xft>=2.1.0) -IF(XFT_FOUND) - ADD_DEFINITIONS(-DHAVE_XFT) - SET(HAVE_XFT TRUE) - SET(XFT_LIBS ${XFT_LIBRARIES}) - #MESSAGE("XFT_LIBS: ${XFT_LIBS}") - LIST(APPEND XFT_LIB_DIR ${XFT_LIBRARY_DIRS} ${XFT_LIBDIR}) - #MESSAGE("XFT_LIB_DIR: ${XFT_LIB_DIR}") - LIST(APPEND XFT_INC_DIR ${XFT_INCLUDE_DIRS} ${XFT_INCLUDEDIR}) - #MESSAGE("XFT_INC_DIR: ${XFT_INC_DIR}") -ENDIF(XFT_FOUND) - -IF(WANT_SOUND) - - # Check for ALSA 1.0 - PKG_CHECK_MODULES(ALSA REQUIRED alsa>=1.0) - IF(ALSA_FOUND) - SET(HAVE_ALSA TRUE) - ADD_DEFINITIONS(-DHAVE_ALSA) - SET(ALSA_LIBS ${ALSA_LIBRARIES}) - #MESSAGE("ALSA_LIBS: ${ALSA_LIBS}") - LIST(APPEND ALSA_LIB_DIR ${ALSA_LIBRARY_DIRS} ${ALSA_LIBDIR} ) - #MESSAGE("ALSA_LIB_DIR: ${ALSA_LIB_DIR}") - LIST(APPEND ALSA_INC_DIR ${ALSA_INCLUDE_DIRS} ${ALSA_INCLUDEDIR}) - #MESSAGE("ALSA_INC_DIR: ${ALSA_INC_DIR}") - ELSE(ALSA_FOUND) - MESSAGE(FATAL_ERROR "Please install the required package. Aborting") - ENDIF(ALSA_FOUND) - - IF(WANT_JACK) - PKG_CHECK_MODULES(JACK jack>=0.77) - IF(JACK_FOUND) - ADD_DEFINITIONS(-DHAVE_LIBJACK) - SET(HAVE_JACK TRUE) - SET(JACK_LIBS ${JACK_LIBRARIES}) - #MESSAGE("JACK_LIBS: ${JACK_LIBS}") - LIST(APPEND JACK_LIB_DIR ${JACK_LIBDIR} ${JACK_LIBRARY_DIRS}) - #MESSAGE("JACK_LIB_DIR: ${JACK_LIB_DIR}") - LIST(APPEND JACK_INC_DIR ${JACK_INCLUDEDIR} ${JACK_INCLUDE_DIRS}) - #MESSAGE("JACK_INC_DIR: ${JACK_INC_DIR}") - ENDIF(JACK_FOUND) - ENDIF(WANT_JACK) - - IF(WANT_DSSI) - PKG_CHECK_MODULES(DSSI dssi>=0.4) - IF(DSSI_FOUND) - ADD_DEFINITIONS(-DHAVE_DSSI) - SET(HAVE_DSSI TRUE) - LIST(APPEND DSSI_INC_DIR ${DSSI_INCLUDE_DIRS} ${DSSI_INCLUDEDIR}) - #MESSAGE("DSSI_INC_DIR: ${DSSI_INC_DIR}") - ENDIF(DSSI_FOUND) - ENDIF(WANT_DSSI) - - PKG_CHECK_MODULES(LIBLO liblo>=0.7) - IF(LIBLO_FOUND) - ADD_DEFINITIONS(-DHAVE_LIBLO) - SET(HAVE_LIBLO TRUE) - SET(LIBLO_LIBS ${LIBLO_LIBRARIES}) - #MESSAGE("LIBLO_LIBS: ${LIBLO_LIBS}") - LIST(APPEND LIBLO_LIB_DIR ${LIBLO_LIBDIR} ${LIBLO_LIBRARY_DIRS}) - #MESSAGE("LIBLO_LIB_DIR: ${LIBLO_LIB_DIR}") - LIST(APPEND LIBLO_INC_DIR ${LIBLO_INCLUDEDIR} ${LIBLO_INCLUDE_DIRS}) - #MESSAGE("LIBLO_INC_DIR: ${LIBLO_INC_DIR}") - ENDIF(LIBLO_FOUND) - - PKG_CHECK_MODULES(LRDF lrdf>=0.3) - IF(LRDF_FOUND) - SET(HAVE_LIBLRDF TRUE) - ADD_DEFINITIONS(-DHAVE_LIBLRDF) - SET(LRDF_LIBS ${LRDF_LIBRARIES}) - #MESSAGE("LRDF_LIBS: ${LRDF_LIBS}") - LIST(APPEND LRDF_LIB_DIR ${LRDF_LIBDIR} ${LRDF_LIBRARY_DIRS}) - #MESSAGE("LRDF_LIB_DIR: ${LRDF_LIB_DIR}") - LIST(APPEND LRDF_INC_DIR ${LRDF_INCLUDEDIR} ${LRDF_INCLUDE_DIRS}) - #MESSAGE("LRDF_INC_DIR: ${LRDF_INC_DIR}") - ENDIF(LRDF_FOUND) - - FIND_PACKAGE(LADSPA QUIET) - IF(LADSPA_FOUND) - SET(HAVE_LADSPA TRUE) - ADD_DEFINITIONS(-DHAVE_LADSPA) - SET(LADSPA_INC_DIR ${LADSPA_INCLUDE_DIR}) - MESSAGE(STATUS "Found LADSPA (${LADSPA_INC_DIR})") - ENDIF(LADSPA_FOUND) - -ENDIF(WANT_SOUND) - -PKG_CHECK_MODULES(FFTW3F REQUIRED fftw3f>=3.0.0) -IF(FFTW3F_FOUND) - ADD_DEFINITIONS(-DHAVE_FFTW3F) - SET(HAVE_FFTW3F TRUE) - SET(FFTW3F_LIBS ${FFTW3F_LIBRARIES}) - #MESSAGE("FFTW3F_LIBS: ${FFTW3F_LIBS}") - LIST(APPEND FFTW3F_LIB_DIR ${FFTW3F_LIBDIR} ${FFTW3F_LIBRARY_DIRS}) - #MESSAGE("FFTW3F_LIB_DIR: ${FFTW3F_LIB_DIR}") - LIST(APPEND FFTW3F_INC_DIR ${FFTW3F_INCLUDEDIR} ${FFTW3F_INCLUDE_DIRS}) - #MESSAGE("FFTW3F_INC_DIR: ${FFTW3F_INC_DIR}") -ELSE(FFTW3F_FOUND) - MESSAGE(FATAL_ERROR "Please install the required package. Aborting") -ENDIF(FFTW3F_FOUND) - -IF(WANT_LIRC) - FIND_PACKAGE(LIRC QUIET) - IF(LIRC_FOUND) - SET(HAVE_LIRC TRUE) - ADD_DEFINITIONS(-DHAVE_LIRC) - MESSAGE(STATUS "Found LIRC (${LIRC_LIBRARY})") - SET(LIRC_LIBS ${LIRC_LIBRARY}) - SET(LIRC_INC_DIR ${LIRC_INCLUDE_DIR}) - SET(LIRC_LIB_DIR ${LIRC_LIBRARY_DIR}) - #MESSAGE("LIRC_LIBS: ${LIRC_LIBS}") - #MESSAGE("LIRC_LIB_DIR: ${LIRC_LIB_DIR}") - #MESSAGE("LIRC_INC_DIR: ${LIRC_INC_DIR}") - ENDIF(LIRC_FOUND) -ENDIF(WANT_LIRC) - -FIND_PACKAGE(MSGFMT REQUIRED) -IF(MSGFMT_FOUND) - MESSAGE(STATUS "Program msgfmt found (${MSGFMT_EXECUTABLE})") -ENDIF(MSGFMT_FOUND) - -FIND_PACKAGE(KDECONFIG) -IF(KDECONFIG_EXECUTABLE) - MESSAGE(STATUS "Program kde-config found (${KDECONFIG_EXECUTABLE})") - #MESSAGE("KDE3PREFIX: ${KDE3PREFIX}") -ENDIF(KDECONFIG_EXECUTABLE) - -FIND_PACKAGE(MEINPROC REQUIRED) -IF(MEINPROC_FOUND) - MESSAGE(STATUS "Program meinproc found (${MEINPROC_EXECUTABLE})") -ENDIF(MEINPROC_FOUND) - -# Check GCC for PCH support -SET(USE_PCH FALSE) -IF(WANT_PCH) - FIND_PACKAGE(PCHSupport) - IF(PCHSupport_FOUND) - SET(USE_PCH TRUE) - ADD_DEFINITIONS(-DUSE_PCH) - MESSAGE(STATUS "Enabling precompiled headers for GCC ${gcc_compiler_version}") - ENDIF(PCHSupport_FOUND) -ENDIF(WANT_PCH) - -# Check PTHREAD_MUTEX_RECURSIVE -INCLUDE(CheckCSourceCompiles) -CHECK_C_SOURCE_COMPILES( - "#include - int main(int argc, char **argv) { - pthread_mutexattr_t attr; - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - return 0; - }" PTHREAD_HAS_MUTEX_RECURSIVE) -IF(PTHREAD_HAS_MUTEX_RECURSIVE) - ADD_DEFINITIONS(-DHAVE_PTHREAD_MUTEX_RECURSIVE) -ENDIF(PTHREAD_HAS_MUTEX_RECURSIVE) -# End of PTHREAD_MUTEX_RECURSIVE Test - -SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -w -fexceptions -DNDEBUG -include tqt.h") -SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -Wall -fexceptions -DDEBUG -include tqt.h") -SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -Wall -fexceptions -DDEBUG -include tqt.h") - -MESSAGE(STATUS "Rosegarden ${VERSION} will be built for install into ${CMAKE_INSTALL_PREFIX}") - -IF(WANT_DEBUG) - IF(WANT_FULLDBG) - MESSAGE(STATUS "Configured to compile including full debug information in the executables") - SET(CMAKE_BUILD_TYPE Debug CACHE STRING - "Choose the type of build, options are: Debug Release RelWithDebInfo" FORCE) - ELSE(WANT_FULLDBG) - MESSAGE(STATUS "Configured to compile including debug information in the executables") - SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING - "Choose the type of build, options are: Debug Release RelWithDebInfo" FORCE) - ENDIF(WANT_FULLDBG) -ELSE(WANT_DEBUG) - MESSAGE(STATUS "Configured to compile for release without debug information") - SET(CMAKE_BUILD_TYPE Release CACHE STRING - "Choose the type of build, options are: Debug Release RelWithDebInfo" FORCE) -ENDIF(WANT_DEBUG) -MARK_AS_ADVANCED(CMAKE_BUILD_TYPE) - -# Warn the user if important libraries are missing -INCLUDE(UserWarnings) - -# Recurse into the "src" subdirectory. This does not actually -# cause another cmake executable to run. The same process will walk through -# the project's entire directory structure. -# Output directory will be "RGbuild/" -ADD_SUBDIRECTORY(src RGbuild) - -# Build and install the translations directory -ADD_SUBDIRECTORY(po RGbuild/po) - -# Build and install the documentation directory -ADD_SUBDIRECTORY(docs RGbuild/docs) - -# Install data files -ADD_SUBDIRECTORY(data RGbuild/data) - -# install some documents... -# INSTALL( FILES AUTHORS COPYING README TRANSLATORS INSTALL rosegarden.lsm -# DESTINATION share/doc/rosegarden-${VERSION} ) +##### configure checks ########################## + +include( ConfigureChecks.cmake ) + + +###### global compiler settings ################# + +add_definitions( + -DHAVE_CONFIG_H +) + +set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TQT_CXX_FLAGS}" ) +set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" ) +set( CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined" ) + + +##### source directories ######################## + +add_subdirectory( src ) +add_subdirectory( data ) +tde_conditional_add_subdirectory( BUILD_DOC doc ) +tde_conditional_add_subdirectory( BUILD_TRANSLATIONS po ) + + +##### write configure files ##################### + +configure_file( config.h.cmake config.h @ONLY ) # create and install the version file FILE(WRITE version.txt "${VERSION}\n") -INSTALL( FILES version.txt - DESTINATION ${KDE3DATADIR}/rosegarden ) - -# uninstall custom target -CONFIGURE_FILE( - "${CMAKE_SOURCE_DIR}/cmake_admin/cmake_uninstall.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" - IMMEDIATE @ONLY) - -ADD_CUSTOM_TARGET(uninstall - "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") - -# Custom target trying to clean the CMake generated files -ADD_CUSTOM_TARGET ( distclean - COMMAND rm -f {,src/,po/,docs/,data/}CMakeCache.txt - COMMAND rm -f {,src/,po/,docs/,data/}cmake_install.cmake - COMMAND rm -f {,src/,po/,docs/,data/}cmake_uninstall.cmake - COMMAND rm -f {,src/,po/,docs/,data/}CPackConfig.cmake - COMMAND rm -f {,src/,po/,docs/,data/}CPackSourceConfig.cmake - COMMAND rm -f {,src/,po/,docs/,data/}install_manifest.txt - COMMAND rm -f {,src/,po/,docs/,data/}progress.make - COMMAND rm -f {,src/,po/,docs/,data/}rosegarden.spec - COMMAND rm -f {,src/,po/,docs/,data/}Makefile - COMMAND rm -rf {,src/,po/,docs/,data/}CMakeFiles - COMMAND rm -rf {,src/,po/,docs/,data/}_CPack_Packages - COMMAND rm -rf RGbuild/* - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} -) -ADD_DEPENDENCIES(distclean clean) +INSTALL( FILES version.txt DESTINATION ${DATA_INSTALL_DIR}/rosegarden ) # configure the RPM spec -CONFIGURE_FILE( - "${CMAKE_SOURCE_DIR}/rosegarden.spec.in" - "${CMAKE_SOURCE_DIR}/rosegarden.spec" - IMMEDIATE @ONLY) - -# tarball target -ADD_CUSTOM_TARGET ( tarball - COMMAND mkdir -p rosegarden-${VERSION} - COMMAND cp -r cmake_admin rosegarden-${VERSION} - COMMAND cp -r data rosegarden-${VERSION} - COMMAND cp -r docs rosegarden-${VERSION} - COMMAND cp -r po rosegarden-${VERSION} - COMMAND cp -r src rosegarden-${VERSION} - COMMAND cp CMakeLists.txt AUTHORS COPYING Doxyfile INSTALL README rosegarden.* TRANSLATORS rosegarden-${VERSION} - COMMAND tar -cj --exclude .svn --exclude gettext-0.10.35-kde -f rosegarden-${VERSION}.tar.bz2 rosegarden-${VERSION} - COMMAND rm -rf rosegarden-${VERSION} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} -) +CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/rosegarden.spec.in" "${CMAKE_SOURCE_DIR}/rosegarden.spec" IMMEDIATE @ONLY) \ No newline at end of file -- cgit v1.2.3