summaryrefslogtreecommitdiff
path: root/libmariadb/CMakeLists.txt
blob: 1f6b299d4d84ea63dab94dabc51bd69f7d626ff8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
INCLUDE(${CMAKE_SOURCE_DIR}/cmake/mariadb_connector_c.cmake)
 
SET(CONNECTOR_C_INSTALLDIR "${CMAKE_CURRENT_BINARY_DIR}/mariadb-connector-c/${CMAKE_CFG_INTDIR}" CACHE STRING "")
SET(CONNECTOR_C_INSTALL_PREFIX ${CONNECTOR_C_INSTALLDIR})


IF(NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".")
  STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${BUILD_TYPE}" CONNECTOR_C_INSTALL_PREFIX "${CONNECTOR_C_INSTALLDIR}")
ENDIF()

SET(CONNECTOR_C_GIT_TAG "v3.0-cc-server-integ-0" CACHE STRING "Git tag or branch for connector/c")
IF(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/mariadb-connector-c)
 # Building from source package
 SET(CONNECTOR_C_SOURCE_DIR  ${CMAKE_SOURCE_DIR}/mariadb-connector-c)
 SET(GIT_PARAMS)
ELSE()
 # Building from git, use git to get Connector/C
 SET(GIT_PARAMS 
  GIT_REPOSITORY "https://github.com/MariaDB/mariadb-connector-c/"
  GIT_TAG ${CONNECTOR_C_GIT_TAG}
 )
 SET(CONNECTOR_C_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/mariadb-connector-c-src)
ENDIF()

IF(TARGET zlib)
  GET_PROPERTY(ZLIB_LIBRARY_LOCATION TARGET zlib PROPERTY LOCATION)
ELSE()
  SET(ZLIB_LIBRARY_LOCATION ${ZLIB_LIBRARY})
ENDIF()


INCLUDE(ExternalProject)
ExternalProject_Add(
  mariadb_connector_c
  ${GIT_PARAMS}
  UPDATE_COMMAND ""
  PATCH_COMMAND ""
  SOURCE_DIR ${CONNECTOR_C_SOURCE_DIR}
  INSTALL_DIR ${CONNECTOR_C_INSTALLDIR}
  CMAKE_ARGS ${CC_CMAKE_OPTS}
  -DCMAKE_INSTALL_PREFIX=${CONNECTOR_C_INSTALL_PREFIX}
  -DWITH_EXTERNAL_ZLIB=1 
  -DZLIB_FOUND=1
  -DZLIB_LIBRARY=${ZLIB_LIBRARY_LOCATION}
  -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}
  -DSKIP_TESTS=1
  -DMARIADB_PORT=${MYSQL_TCP_PORT}
  -DMARIADB_UNIX_ADDR=${MYSQL_UNIX_ADDR}
  -DSHARED_LIB_MAJOR_VERSION=${SHARED_LIB_MAJOR_VERSION}
  -DPLUGINDIR=${INSTALL_PLUGINDIR}
  -DFOR_SERVER=1
  TEST_COMMAND ""
)

IF(TARGET zlib)
  ADD_DEPENDENCIES(mariadb_connector_c zlib)
ENDIF()

SET(STATIC_LIB_LOCATION "${CONNECTOR_C_INSTALLDIR}/lib/mariadb/${CMAKE_STATIC_LIBRARY_PREFIX}mysqlclient${CMAKE_STATIC_LIBRARY_SUFFIX}")

IF(WIN32)
  SET(SHARED_LIB_LOCATION "${CONNECTOR_C_INSTALLDIR}/lib/mariadb/libmysql${CMAKE_SHARED_LIBRARY_SUFFIX}")
ELSE()
  SET(SHARED_LIB_LOCATION "${CONNECTOR_C_INSTALLDIR}/lib/mariadb/libmysqlclient${CMAKE_SHARED_LIBRARY_SUFFIX}")
ENDIF()
IF(WIN32)
  # On Windows, we need to install import library. We also install PDB for debugging
  STRING(REPLACE ".dll" ".lib" IMPORT_LIB_LOCATION ${SHARED_LIB_LOCATION})
  STRING(REPLACE ".dll" ".pdb" PDB_LOCATION ${SHARED_LIB_LOCATION})
ENDIF()

ADD_LIBRARY(mariadbclient STATIC IMPORTED GLOBAL)
SET_TARGET_PROPERTIES(mariadbclient PROPERTIES IMPORTED_LOCATION ${STATIC_LIB_LOCATION})
ADD_DEPENDENCIES(mariadbclient mariadb_connector_c GenError)

ADD_LIBRARY(libmariadb SHARED IMPORTED GLOBAL)
SET_TARGET_PROPERTIES(libmariadb PROPERTIES IMPORTED_LOCATION ${SHARED_LIB_LOCATION})
ADD_DEPENDENCIES(libmariadb mariadb_connector_c GenError)

SET(CONNECTOR_C_LIBS ${STATIC_LIB_LOCATION}  ${CC_LIBS} ${ZLIB_LIBRARY} PARENT_SCOPE)


# INSTALL Connector/C files

# For multiconfig generators (Visual Studio and Xcode) 
# we need to replace CMAKE_CFG_INTDIR in filepath with CMAKE_INSTALL_CONFIG_NAME
# for cpack.
FUNCTION(GET_INSTALL_LOCATION LOC VARNAME)
  SET(val ${LOC})
  IF (NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".")
    STRING(REPLACE  "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}" val ${val})
  ENDIF()
  SET(${VARNAME} ${val} PARENT_SCOPE)
ENDFUNCTION()

GET_INSTALL_LOCATION(${STATIC_LIB_LOCATION} STATIC_LIB_INSTALL_LOCATION)
INSTALL(FILES ${STATIC_LIB_INSTALL_LOCATION} DESTINATION ${INSTALL_LIBDIR} COMPONENT Development)

IF(UNIX)
  STRING(REPLACE "mysqlclient" "mysqlclient_r" 
         STATIC_LIB_R_INSTALL_LOCATION "${STATIC_LIB_INSTALL_LOCATION}")
  INSTALL(FILES ${STATIC_LIB_R_INSTALL_LOCATION} OPTIONAL DESTINATION ${INSTALL_LIBDIR} COMPONENT Development)
ENDIF()

# Install shared library
IF(WIN32)
  # On Windows, we need to install import library. We also install PDB for debugging
  SET(SHARED_LIB_FILES ${SHARED_LIB_LOCATION} ${IMPLIB_LOCATION} ${PDB_LOCATION})
ELSE()
  STRING(REPLACE "mysqlclient" "mysqlclient_r" SHARED_LIB_R_LOCATION ${SHARED_LIB_LOCATION})
  STRING(REPLACE "mysqlclient.so" "mysqlclient.so.${SHARED_LIB_MAJOR_VERSION}"
           SHARED_LIB_LINK1_LOCATION ${SHARED_LIB_LOCATION})
  STRING(REPLACE "mysqlclient.so" "mysqlclient.so.${SHARED_LIB_MAJOR_VERSION}.0.0"
           SHARED_LIB_LINK2_LOCATION ${SHARED_LIB_LOCATION})

  SET(SHARED_LIB_FILES ${SHARED_LIB_LOCATION} ${SHARED_LIB_R_LOCATION}                    
     ${SHARED_LIB_LINK1_LOCATION} ${SHARED_LIB_LINK2_LOCATION})
  LIST(REMOVE_DUPLICATES SHARED_LIB_FILES)
ENDIF()

FOREACH(file ${SHARED_LIB_FILES})
  GET_INSTALL_LOCATION(${file} loc)
  IF(loc)
    INSTALL(FILES ${loc} DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries OPTIONAL)
  ENDIF()
ENDFOREACH()