1include(ExternalProject)
2
3IF (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
4  include_directories("/usr/include")
5
6  add_library(lzma SHARED IMPORTED)
7  set_target_properties(lzma PROPERTIES IMPORTED_LOCATION
8    "/usr/lib/liblzma.so")
9ELSE()
10## add lzma with an external project
11set(xz_configure_opts --with-pic --enable-static)
12if (APPLE)
13  ## lzma has some assembly that doesn't work on darwin
14  list(APPEND xz_configure_opts --disable-assembler)
15endif ()
16
17list(APPEND xz_configure_opts "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}")
18if (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL drd)
19  list(APPEND xz_configure_opts --enable-debug)
20endif ()
21
22set(XZ_SOURCE_DIR "${TokuDB_SOURCE_DIR}/third_party/xz-4.999.9beta" CACHE FILEPATH "Where to find sources for xz (lzma).")
23if (NOT EXISTS "${XZ_SOURCE_DIR}/configure")
24    message(FATAL_ERROR "Can't find the xz sources.  Please check them out to ${XZ_SOURCE_DIR} or modify XZ_SOURCE_DIR.")
25endif ()
26
27if (CMAKE_GENERATOR STREQUAL Ninja)
28  ## ninja doesn't understand "$(MAKE)"
29  set(SUBMAKE_COMMAND make)
30else ()
31  ## use "$(MAKE)" for submakes so they can use the jobserver, doesn't
32  ## seem to break Xcode...
33  set(SUBMAKE_COMMAND $(MAKE))
34endif ()
35
36FILE(GLOB XZ_ALL_FILES ${XZ_SOURCE_DIR}/*)
37ExternalProject_Add(build_lzma
38    PREFIX xz
39    DOWNLOAD_COMMAND
40        cp -a "${XZ_ALL_FILES}" "<SOURCE_DIR>/"
41    CONFIGURE_COMMAND
42        "<SOURCE_DIR>/configure" ${xz_configure_opts}
43        "--prefix=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz"
44        "--libdir=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/lib"
45    BUILD_COMMAND
46        ${SUBMAKE_COMMAND} -C src/liblzma
47    INSTALL_COMMAND
48        ${SUBMAKE_COMMAND} -C src/liblzma install
49)
50FILE(GLOB_RECURSE XZ_ALL_FILES_RECURSIVE ${XZ_SOURCE_DIR}/*)
51ExternalProject_Add_Step(build_lzma reclone_src # Names of project and custom step
52    COMMENT "(re)cloning xz source..."     # Text printed when step executes
53    DEPENDERS download configure   # Steps that depend on this step
54    DEPENDS   ${XZ_ALL_FILES_RECURSIVE}   # Files on which this step depends
55)
56
57set_source_files_properties(
58  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma.h"
59  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/base.h"
60  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/bcj.h"
61  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/block.h"
62  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/check.h"
63  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/container.h"
64  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/delta.h"
65  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/filter.h"
66  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/index.h"
67  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/index_hash.h"
68  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/lzma.h"
69  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/stream_flags.h"
70  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/subblock.h"
71  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/version.h"
72  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/vli.h"
73  PROPERTIES GENERATED TRUE)
74
75include_directories("${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include")
76
77add_library(lzma STATIC IMPORTED)
78set_target_properties(lzma PROPERTIES IMPORTED_LOCATION
79  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/lib/liblzma.a")
80add_dependencies(lzma build_lzma)
81ENDIF()
82
83IF (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
84  include_directories("/usr/local/include")
85
86  add_library(snappy SHARED IMPORTED)
87  set_target_properties(snappy PROPERTIES IMPORTED_LOCATION
88    "/usr/local/lib/libsnappy.so")
89ELSE()
90## add snappy with an external project
91set(SNAPPY_SOURCE_DIR "${TokuDB_SOURCE_DIR}/third_party/snappy-1.1.2" CACHE FILEPATH "Where to find sources for snappy.")
92if (NOT EXISTS "${SNAPPY_SOURCE_DIR}/CMakeLists.txt")
93    message(FATAL_ERROR "Can't find the snappy sources.  Please check them out to ${SNAPPY_SOURCE_DIR} or modify SNAPPY_SOURCE_DIR.")
94endif ()
95
96FILE(GLOB SNAPPY_ALL_FILES ${SNAPPY_SOURCE_DIR}/*)
97ExternalProject_Add(build_snappy
98    PREFIX snappy
99    DOWNLOAD_COMMAND
100        cp -a "${SNAPPY_ALL_FILES}" "<SOURCE_DIR>/"
101    CMAKE_ARGS
102        -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
103        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
104        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
105        -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
106        -DCMAKE_AR=${CMAKE_AR}
107        -DCMAKE_NM=${CMAKE_NM}
108        -DCMAKE_RANLIB=${CMAKE_RANLIB}
109        -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
110        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
111        ${USE_PROJECT_CMAKE_MODULE_PATH}
112)
113FILE(GLOB_RECURSE SNAPPY_ALL_FILES_RECURSIVE ${SNAPPY_SOURCE_DIR}/*)
114ExternalProject_Add_Step(build_snappy reclone_src # Names of project and custom step
115    COMMENT "(re)cloning snappy source..."     # Text printed when step executes
116    DEPENDERS download configure   # Steps that depend on this step
117    DEPENDS   ${SNAPPY_ALL_FILES_RECURSIVE}   # Files on which this step depends
118)
119
120include_directories("${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/snappy/include")
121
122add_library(snappy STATIC IMPORTED)
123set_target_properties(snappy PROPERTIES IMPORTED_LOCATION
124  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/snappy/lib/libsnappy.a")
125add_dependencies(snappy build_snappy)
126ENDIF()
127