1
cmake_minimum_required (VERSION 2.8)
2
# 2.8 needed because of ExternalProject
7
# About MySQL and CMake
8
# http://dev.mysql.com/doc/internals/en/autotools-to-cmake.html
9
# http://www.lenzg.net/archives/291-Building-MySQL-Server-with-CMake-on-LinuxUnix.html
11
#-----------------------------------------------------------------------
12
# Find packages and other useful checks
13
#-----------------------------------------------------------------------
15
# Look for our custom modules in cmake/Modules:
16
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/build/cmake/Modules/")
18
find_package(PkgConfig REQUIRED)
20
find_package(GTK2 2.6.2 REQUIRED gtk gtkmm)
21
pkg_check_modules(GTHREAD REQUIRED gthread-2.0)
22
pkg_check_modules(GMODULE REQUIRED gmodule-2.0)
23
set(GTK2_INCLUDE_DIRS ${GTK2_INCLUDE_DIRS} ${GTHREAD_INCLUDE_DIRS} ${GMODULE_INCLUDE_DIRS})
24
list(REMOVE_DUPLICATES GTK2_INCLUDE_DIRS)
25
set(GTK2_LIBRARIES ${GTK2_LIBRARIES} ${GTHREAD_LIBRARIES} ${GMODULE_LIBRARIES})
26
list(REMOVE_DUPLICATES GTK2_LIBRARIES)
28
pkg_check_modules(GLIB REQUIRED glib-2.0)
30
if (USE_BUNDLED_MYSQLDUMP)
31
set(USE_BUNDLED_MYSQLDUMP -DHAVE_BUNDLED_MYSQLDUMP=1)
35
find_package(SWIG REQUIRED)
36
include(${SWIG_USE_FILE})
38
# All known publicly available versions of Antlr3C are buggy
40
if (SKIP_BUNDLED_ANTLR)
44
set(ANTLR3C_REQUIRED_VERSION "3.4")
45
if (${ANTLR3C_VERSION} VERSION_LESS ${ANTLR3C_REQUIRED_VERSION})
46
message("Required antlr3c version ${ANTLR3C_REQUIRED_VERSION} but ${ANTLR3C_VERSION} found, using bundled version")
51
# In Ubuntu 13.04, the built-in check for python fails.. so we have to resort to the check with pkg-config (which doesn't work in many distros)
52
find_package(PythonLibs 2.6)
53
if (NOT PYTHONLIBS_FOUND)
54
pkg_check_modules(PYTHON REQUIRED python)
56
set(GRT_DEFINITIONS -DENABLE_PYTHON_MODULES)
60
set(GRT_DEFINITIONS ${GRT_DEFINITIONS} -DENABLE_LUA_MODULES)
63
find_package(MySQL REQUIRED)
65
set(MYSQL_DEFINITIONS "-DBIG_JOINS=1" "-fno-strict-aliasing")
68
find_package(LibXml2 REQUIRED)
70
find_package(OpenGL REQUIRED)
72
find_package(CTemplate)
73
find_package(MySQLCppConn REQUIRED)
74
find_package(VSqlite REQUIRED)
75
find_package(TinyXML REQUIRED)
78
option(USE_UNIXODBC "Use unixODBC instead of iODBC" OFF)
80
find_package(UNIXODBC REQUIRED)
81
set(ODBC_LIBRARIES ${UNIXODBC_LIBRARIES})
82
set(ODBC_INCLUDE_DIRS ${UNIXODBC_INCLUDE_DIRS})
83
set(ODBC_DEFINITIONS ${UNIXODBC_DEFINITIONS})
85
find_package(IODBC REQUIRED)
86
set(ODBC_LIBRARIES ${IODBC_LIBRARIES})
87
set(ODBC_INCLUDE_DIRS ${IODBC_INCLUDE_DIRS})
88
set(ODBC_DEFINITIONS ${IODBC_DEFINITIONS})
92
pkg_check_modules(PCRE REQUIRED libpcre libpcrecpp)
93
pkg_check_modules(CAIRO REQUIRED cairo>=1.5.12)
94
pkg_check_modules(UUID REQUIRED uuid)
95
pkg_check_modules(LIBZIP REQUIRED libzip)
97
pkg_check_modules(GNOME_KEYRING gnome-keyring-1)
98
if (GNOME_KEYRING_FOUND)
99
set(KEYRING_DEFINITION "HAVE_GNOME_KEYRING")
101
pkg_check_modules(GNOME_KEYRING gnome-keyring)
102
if (GNOME_KEYRING_FOUND)
103
set(KEYRING_DEFINITION "HAVE_OLD_GNOME_KEYRING")
108
include (CheckFunctionExists)
109
check_function_exists (strtol HAVE_STRTOL)
110
check_function_exists (strtoll HAVE_STRTOLL)
111
check_function_exists (strtold HAVE_STRTOLD)
112
check_function_exists (strtoull HAVE_STRTOULL)
113
check_function_exists (strtoimax HAVE_STRTOIMAX)
114
check_function_exists (strtoumax HAVE_STRTOUMAX)
117
if (NOT LIB_INSTALL_DIR)
118
set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib")
120
if (NOT SHARE_INSTALL_PREFIX)
121
set(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share")
123
if (NOT ETC_INSTALL_DIR)
124
set(ETC_INSTALL_DIR "/etc")
126
if (NOT REAL_EXECUTABLE_DIR)
127
set(REAL_EXECUTABLE_DIR "${CMAKE_INSTALL_PREFIX}/bin")
130
set(WB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}")
131
set(WB_INSTALL_DIR_EXECUTABLE "${REAL_EXECUTABLE_DIR}")
132
set(WB_INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin")
133
set(WB_INSTALL_LIB_DIR "${LIB_INSTALL_DIR}/mysql-workbench")
134
set(WB_PYTHON_MODULES_DIR "${WB_INSTALL_LIB_DIR}/modules")
135
set(WB_INSTALL_SHARED_DIR "${SHARE_INSTALL_PREFIX}")
136
set(WB_INSTALL_ETC_DIR "${ETC_INSTALL_DIR}")
137
set(WB_PACKAGE_SHARED_DIR "${SHARE_INSTALL_PREFIX}/mysql-workbench")
138
set(WB_PACKAGE_PLUGINS_DIR "${LIB_INSTALL_DIR}/mysql-workbench/plugins")
139
set(WB_PYTHON_MODULES_DATA_DIR "${SHARE_INSTALL_PREFIX}/mysql-workbench/modules/data")
140
set(WB_INSTALL_DOC_DIR "${SHARE_INSTALL_PREFIX}/doc/mysql-workbench")
143
include(ExternalProject)
145
if (NOT ANTLR3C_FOUND)
146
message("Using bundled Antlr C runtime")
147
# Use for Antlr3 the one we have in /ext:
148
set(ANTLR3C_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/ext/antlr-runtime ${PROJECT_SOURCE_DIR}/ext/antlr-runtime/include)
149
set(ANTLR3C_LIBRARIES "-L${PROJECT_BINARY_DIR}/antlr-wb -lantlr3c_wb")
151
ExternalProject_Add(antlr-wb
152
SOURCE_DIR ${PROJECT_SOURCE_DIR}/ext/antlr-runtime
153
CONFIGURE_COMMAND autoreconf -i -s && ${PROJECT_SOURCE_DIR}/ext/antlr-runtime/configure
154
--prefix=${PROJECT_BINARY_DIR}/antlr-wb
155
--libdir=${PROJECT_BINARY_DIR}/antlr-wb
159
INSTALL_COMMAND make install
162
link_directories(${PROJECT_BINARY_DIR}/antlr-wb)
165
# Uncomment these lines if at any time you want to force the configure and/or build
167
#ExternalProject_Add_Step(antlr-wb forceconfigure
168
# COMMAND ${CMAKE_COMMAND} -E echo "Force configure of antlr-wb"
170
# DEPENDERS configure
173
#ExternalProject_Add_Step(antlr-wb forcebuild
174
# COMMAND ${CMAKE_COMMAND} -E echo "Force build of antlr-wb"
175
# DEPENDEES configure
181
#include(CheckCXXCompilerFlag)
182
#check_cxx_compiler_flag(-Wall HAS_ALL_WARNS)
184
# add_definitions(-Wall)
186
#check_cxx_compiler_flag(-Wsign-compare HAS_SIGN_COMPARE)
187
#if (HAS_SIGN_COMPARE)
188
# add_definitions(-Wsign-compare)
190
add_definitions(-D__STDC_FORMAT_MACROS)
192
set(BUILD_SHARED_LIBS ON) # By default all libs will be built as shared libs
194
# Add some common compiler flags. TODO: Shouldn't this be done checking if whatever compiler
195
# we use supports each flag to allow for non-gcc compilers in Linux (as above)?
196
if (CMAKE_COMPILER_IS_GNUCXX)
197
set(MY_CXXFLAGS "-Wall -Wextra -Wno-unused-parameter -Wno-deprecated -DTIXML_USE_STL=1")
199
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Werror -ggdb3 ${MY_CXXFLAGS}")
200
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MY_CXXFLAGS}")
204
#-----------------------------------------------------------------------
205
# Define some useful variables and options
206
#-----------------------------------------------------------------------
208
#set(NCORES 3) # Use this number of cores when compiling
209
#if(CMAKE_COMPILER_IS_GNUCXX)
210
# set(CMAKE_CXX_FLAGS "${CMAKE_CKK_FLAGS} -j${NCORES}")
211
# message(STATUS "CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}")
212
# #set(CMAKE_EXE_LINKER_FLAGS "-s") ## Strip binary
215
set(GRT_LIBRARIES ${PYTHON_LIBRARIES} ${LUA_LIBRARIES} ${LIBXML2_LIBRARIES})
216
set(GRT_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} ${LUA_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR})
218
configure_file(${PROJECT_SOURCE_DIR}/mysql-workbench.desktop.in mysql-workbench.desktop)
220
# FIXME: Should this go here? ---v
221
include_directories(${PROJECT_SOURCE_DIR}/plugins/migration/copytable ${PROJECT_SOURCE_DIR}/library/base)
222
include_directories(${GTK2_INCLUDE_DIRS})
224
add_subdirectory(tools)
225
add_subdirectory(backend)
226
add_subdirectory(ext)
227
add_subdirectory(frontend)
228
add_subdirectory(images)
229
add_subdirectory(library)
230
add_subdirectory(modules)
231
add_subdirectory(plugins)
232
add_subdirectory(res)
233
if (IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/internal)
234
add_subdirectory(internal)
237
install(FILES ${CMAKE_BINARY_DIR}/mysql-workbench.desktop DESTINATION ${WB_INSTALL_SHARED_DIR}/applications)
239
if (EXISTS ${PROJECT_SOURCE_DIR}/COPYING)
240
install(FILES README COPYING DESTINATION ${WB_INSTALL_DOC_DIR})
241
install(FILES build/debian/mysql-workbench-community.sharedmimeinfo DESTINATION ${WB_INSTALL_SHARED_DIR}/mime/packages RENAME mysql-workbench.xml)
242
install(FILES build/debian/mysql-workbench-community.mime DESTINATION ${WB_INSTALL_SHARED_DIR}/mime-info RENAME mysql-workbench.mime)
244
install(FILES README LICENSE.mysql DESTINATION ${WB_INSTALL_DOC_DIR})
245
install(FILES build/debian/mysql-workbench-commercial.sharedmimeinfo DESTINATION ${WB_INSTALL_SHARED_DIR}/mime/packages RENAME mysql-workbench.xml)
246
install(FILES build/debian/mysql-workbench-commercial.mime DESTINATION ${WB_INSTALL_SHARED_DIR}/mime-info RENAME mysql-workbench.mime)
249
install(FILES build/build_freetds.sh
250
samples/models/sakila_full.mwb
251
DESTINATION ${WB_PACKAGE_SHARED_DIR}/extras