## Minimum CMake Version cmake_minimum_required (VERSION 2.8.11) ## Project Name project(WORKBENCH) ## Look for our custom modules in cmake/Modules: set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/build/cmake/Modules/") find_package(PkgConfig REQUIRED) find_package(GTK2 2.6.2 REQUIRED gtk gtkmm) if (NOT GTK2_FOUND) message( FATAL_ERROR "Not all GTK2 components were found!" ) endif() pkg_check_modules(GTHREAD REQUIRED gthread-2.0) pkg_check_modules(GMODULE REQUIRED gmodule-2.0) list(APPEND GTK2_INCLUDE_DIRS ${GTHREAD_INCLUDE_DIRS} ${GMODULE_INCLUDE_DIRS}) list(REMOVE_DUPLICATES GTK2_INCLUDE_DIRS) list(APPEND GTK2_LIBRARIES ${GTK2_LIBRARIES} ${GTHREAD_LIBRARIES} ${GMODULE_LIBRARIES}) list(REMOVE_DUPLICATES GTK2_LIBRARIES) pkg_check_modules(GLIB REQUIRED glib-2.0) find_package(PythonLibs) set(GRT_DEFINITIONS -DENABLE_PYTHON_MODULES) find_package(Lua51) if (LUA51_FOUND) set(GRT_DEFINITIONS ${GRT_DEFINITIONS} -DENABLE_LUA_MODULES) endif() find_package(MySQL REQUIRED) if (UNIX) set(MYSQL_DEFINITIONS "-DBIG_JOINS=1" "-fno-strict-aliasing") endif() find_package(LibXml2 REQUIRED) find_package(OpenGL REQUIRED) find_package(CTemplate) find_package(MySQLCppConn REQUIRED) find_package(VSqlite REQUIRED) find_package(TinyXML REQUIRED) ## disabled UNIXODBC check find_package(IODBC REQUIRED) set(ODBC_LIBRARIES ${IODBC_LIBRARIES}) set(ODBC_INCLUDE_DIRS ${IODBC_INCLUDE_DIRS}) pkg_check_modules(PCRE REQUIRED libpcre libpcrecpp) pkg_check_modules(CAIRO REQUIRED cairo>=1.5.12) pkg_check_modules(SQLITE3 REQUIRED sqlite3) pkg_check_modules(UUID REQUIRED uuid) pkg_check_modules(LIBZIP REQUIRED libzip) option(USE_GNOME_KEYRING "Use gnome-keyring." OFF) if (UNIX AND USE_GNOME_KEYRING) pkg_check_modules(GNOME_KEYRING gnome-keyring-1) if (GNOME_KEYRING_FOUND) set(KEYRING_DEFINITION "HAVE_GNOME_KEYRING") else() pkg_check_modules(GNOME_KEYRING gnome-keyring) if (GNOME_KEYRING_FOUND) set(KEYRING_DEFINITION "HAVE_OLD_GNOME_KEYRING") endif() endif() if (NOT GNOME_KEYRING_FOUND) message( FATAL_ERROR "Gnome Keyring was not found but requested!" ) endif() endif() include (CheckFunctionExists) check_function_exists (strtol HAVE_STRTOL) check_function_exists (strtoll HAVE_STRTOLL) check_function_exists (strtold HAVE_STRTOLD) check_function_exists (strtoull HAVE_STRTOULL) check_function_exists (strtoimax HAVE_STRTOIMAX) check_function_exists (strtoumax HAVE_STRTOUMAX) if (UNIX) if (NOT LIB_INSTALL_DIR) set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") endif() if (NOT SHARE_INSTALL_PREFIX) set(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share") endif() if (NOT ETC_INSTALL_DIR) set(ETC_INSTALL_DIR "/etc") endif() if (NOT REAL_EXECUTABLE_DIR) set(REAL_EXECUTABLE_DIR "${CMAKE_INSTALL_PREFIX}/bin") endif() set(WB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}") set(WB_INSTALL_DIR_EXECUTABLE "${REAL_EXECUTABLE_DIR}") set(WB_INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin") set(WB_INSTALL_LIB_DIR "${LIB_INSTALL_DIR}/mysql-workbench") set(WB_PYTHON_MODULES_DIR "${WB_INSTALL_LIB_DIR}/modules") set(WB_INSTALL_SHARED_DIR "${SHARE_INSTALL_PREFIX}") set(WB_INSTALL_ETC_DIR "${ETC_INSTALL_DIR}") set(WB_PACKAGE_SHARED_DIR "${SHARE_INSTALL_PREFIX}/mysql-workbench") set(WB_PACKAGE_PLUGINS_DIR "${LIB_INSTALL_DIR}/mysql-workbench/plugins") set(WB_PYTHON_MODULES_DATA_DIR "${SHARE_INSTALL_PREFIX}/mysql-workbench/modules/data") set(WB_INSTALL_DOC_DIR "${SHARE_INSTALL_PREFIX}/doc/mysql-workbench") endif() include(ExternalProject) ## use the bundled ANTLR C runtime - currently missing "CMAKE way" to configure package message("Using bundled Antlr C runtime") ## Use for Antlr3 the one we have in /ext: set(ANTLR3C_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/ext/antlr-runtime ${PROJECT_SOURCE_DIR}/ext/antlr-runtime/include) set(ANTLR3C_LIBRARIES "-L${PROJECT_BINARY_DIR}/antlr-wb -lantlr3c_wb") ExternalProject_Add(antlr-wb SOURCE_DIR ${PROJECT_SOURCE_DIR}/ext/antlr-runtime CONFIGURE_COMMAND autoreconf -i -s && ${PROJECT_SOURCE_DIR}/ext/antlr-runtime/configure --prefix=${PROJECT_BINARY_DIR}/antlr-wb --libdir=${PROJECT_BINARY_DIR}/antlr-wb --disable-abiflags BUILD_COMMAND make BUILD_IN_SOURCE 1 INSTALL_COMMAND make install ) link_directories(${PROJECT_BINARY_DIR}/antlr-wb) ## By default all libs will be built as shared libs set(BUILD_SHARED_LIBS ON) ## Add some common compiler flags. TODO: Shouldn't this be done checking if whatever compiler ## we use supports each flag to allow for non-gcc compilers in Linux (as above)? if (CMAKE_COMPILER_IS_GNUCXX) add_definitions(-Wno-unused -Wno-deprecated -DTIXML_USE_STL=1) endif() set(GRT_LIBRARIES ${PYTHON_LIBRARIES} ${LUA_LIBRARIES} ${LIBXML2_LIBRARIES}) set(GRT_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} ${LUA_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR}) configure_file(${CMAKE_SOURCE_DIR}/mysql-workbench.desktop.in mysql-workbench.desktop) configure_file(${CMAKE_SOURCE_DIR}/mysql-workbench.conf.in mysql-workbench.conf) include_directories(${CMAKE_SOURCE_DIR}/plugins/migration/copytable ${CMAKE_SOURCE_DIR}/library/base) include_directories(${GTK2_INCLUDE_DIRS}) add_subdirectory(tools) add_subdirectory(backend) add_subdirectory(ext) add_subdirectory(frontend) add_subdirectory(images) add_subdirectory(library) add_subdirectory(modules) add_subdirectory(plugins) add_subdirectory(res) if (IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/internal) add_subdirectory(internal) endif() install(FILES ${CMAKE_BINARY_DIR}/mysql-workbench.desktop DESTINATION ${WB_INSTALL_SHARED_DIR}/applications) install(FILES ${CMAKE_BINARY_DIR}/mysql-workbench.conf DESTINATION ${WB_INSTALL_ETC_DIR}/ld.so.conf.d) ## use COPYING License File provided in source directory install(FILES ${CMAKE_SOURCE_DIR}/README ${CMAKE_SOURCE_DIR}/COPYING DESTINATION ${WB_INSTALL_DOC_DIR}) install(FILES ${CMAKE_SOURCE_DIR}/build/debian/mysql-workbench-community.sharedmimeinfo DESTINATION ${WB_INSTALL_SHARED_DIR}/mime/packages RENAME mysql-workbench.xml) install(FILES ${CMAKE_SOURCE_DIR}/build/debian/mysql-workbench-community.mime DESTINATION ${WB_INSTALL_SHARED_DIR}/mime-info RENAME mysql-workbench.mime) install(FILES ${CMAKE_SOURCE_DIR}/build/build_freetds.sh ${CMAKE_SOURCE_DIR}/samples/models/sakila_full.mwb DESTINATION ${WB_PACKAGE_SHARED_DIR}/extras )