1## set up lists of sources and headers for tags
2file(GLOB_RECURSE all_srcs
3  buildheader/*.cc
4  db-benchmark-test/*.cc
5  ft/*.cc
6  include/*.cc
7  locktree/*.cc
8  portability/*.cc
9  src/*.cc
10  utils/*.cc
11  util/*.cc
12  db-benchmark-test/*.cc
13  )
14list(APPEND all_srcs
15  ${CMAKE_CURRENT_BINARY_DIR}/ft/log_code.cc
16  ${CMAKE_CURRENT_BINARY_DIR}/ft/log_print.cc
17  )
18file(GLOB_RECURSE all_hdrs
19  buildheader/*.h
20  db-benchmark-test/*.h
21  ft/*.h
22  include/*.h
23  locktree/*.h
24  portability/*.h
25  src/*.h
26  utils/*.h
27  util/*.h
28  db-benchmark-test/*.h
29  )
30list(APPEND all_hdrs
31  ${CMAKE_CURRENT_BINARY_DIR}/portability/toku_config.h
32  ${CMAKE_CURRENT_BINARY_DIR}/buildheader/db.h
33  ${CMAKE_CURRENT_BINARY_DIR}/ft/log_header.h
34  )
35
36option(USE_ETAGS "Build the etags database." ON)
37if (USE_ETAGS)
38  find_program(ETAGS "etags")
39  if (NOT ETAGS MATCHES NOTFOUND)
40    add_custom_command(
41      OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/TAGS"
42      OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/etags-stamp"
43      COMMAND ${ETAGS} -o TAGS ${all_srcs} ${all_hdrs}
44      COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/etags-stamp"
45      DEPENDS ${all_srcs} ${all_hdrs} install_tdb_h generate_config_h generate_log_code
46      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
47    add_custom_target(build_etags ALL DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/TAGS" etags-stamp)
48  endif ()
49endif ()
50
51option(USE_CTAGS "Build the ctags database." ON)
52if (USE_CTAGS AND
53    # Macs by default are not case-sensitive, so tags and TAGS clobber each other.  Do etags and not ctags in that case, because Emacs is superior. :P
54    (NOT APPLE OR NOT USE_ETAGS))
55  find_program(CTAGS "ctags")
56  if (NOT CTAGS MATCHES NOTFOUND)
57    add_custom_command(
58      OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/tags"
59      OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ctags-stamp"
60      COMMAND ${CTAGS} -o tags ${all_srcs} ${all_hdrs}
61      COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/ctags-stamp"
62      DEPENDS ${all_srcs} ${all_hdrs} install_tdb_h generate_config_h generate_log_code
63      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
64    add_custom_target(build_ctags ALL DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/tags" ctags-stamp)
65  endif ()
66endif ()
67
68option(USE_CSCOPE "Build the cscope database." ON)
69if (USE_CSCOPE)
70  find_program(CSCOPE "cscope")
71  if (NOT CSCOPE MATCHES NOTFOUND)
72    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cscope.files" "")
73    foreach(file ${all_srcs} ${all_hdrs})
74      file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/cscope.files" "${file}\n")
75    endforeach(file)
76    add_custom_command(
77      OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/cscope.out"
78      OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/cscope.in.out"
79      OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/cscope.po.out"
80      COMMAND ${CSCOPE} -b -q -R -i"${CMAKE_CURRENT_BINARY_DIR}/cscope.files" -I"${CMAKE_CURRENT_SOURCE_DIR}" -I"${CMAKE_CURRENT_SOURCE_DIR}/include" -I"${CMAKE_CURRENT_SOURCE_DIR}/portability" -I"${CMAKE_CURRENT_SOURCE_DIR}/portability" -I"${CMAKE_CURRENT_SOURCE_DIR}/ft" -I"${CMAKE_CURRENT_SOURCE_DIR}/src" -I"${CMAKE_CURRENT_SOURCE_DIR}/locktree" -I"${CMAKE_CURRENT_SOURCE_DIR}/utils" -I"${CMAKE_CURRENT_SOURCE_DIR}/db-benchmark-test" -I"${CMAKE_CURRENT_BINARY_DIR}" -I"${CMAKE_CURRENT_BINARY_DIR}/portability" -I"${CMAKE_CURRENT_BINARY_DIR}/buildheader"
81      DEPENDS ${all_srcs} ${all_hdrs} install_tdb_h generate_config_h generate_log_code
82      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
83    add_custom_target(build_cscope.out ALL DEPENDS
84      "${CMAKE_CURRENT_SOURCE_DIR}/cscope.out"
85      "${CMAKE_CURRENT_SOURCE_DIR}/cscope.in.out"
86      "${CMAKE_CURRENT_SOURCE_DIR}/cscope.po.out")
87  endif ()
88endif ()
89
90option(USE_GTAGS "Build the gtags database." ON)
91if (USE_GTAGS)
92  find_program(GTAGS "gtags")
93  if (NOT GTAGS MATCHES NOTFOUND)
94    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/gtags.files" "")
95    foreach(file ${all_srcs} ${all_hdrs})
96      file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/gtags.files" "${file}\n")
97    endforeach(file)
98    add_custom_command(
99      OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/GTAGS"
100      OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/GRTAGS"
101      OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/GPATH"
102      OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/GSYMS"
103      COMMAND ${GTAGS} -f "${CMAKE_CURRENT_BINARY_DIR}/gtags.files"
104      DEPENDS ${all_srcs} ${all_hdrs} install_tdb_h generate_config_h generate_log_code
105      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
106    add_custom_target(build_GTAGS ALL DEPENDS
107      "${CMAKE_CURRENT_SOURCE_DIR}/GTAGS"
108      "${CMAKE_CURRENT_SOURCE_DIR}/GRTAGS"
109      "${CMAKE_CURRENT_SOURCE_DIR}/GPATH"
110      "${CMAKE_CURRENT_SOURCE_DIR}/GSYMS")
111  endif ()
112endif ()
113
114option(USE_MKID "Build the idutils database." ON)
115if (USE_MKID)
116  find_program(MKID "mkid")
117  if (NOT MKID MATCHES NOTFOUND)
118    add_custom_command(
119      OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/ID"
120      COMMAND ${MKID} ${all_srcs} ${all_hdrs}
121      DEPENDS ${all_srcs} ${all_hdrs} install_tdb_h generate_config_h generate_log_code
122      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
123    add_custom_target(build_MKID ALL DEPENDS
124      "${CMAKE_CURRENT_SOURCE_DIR}/ID")
125  endif ()
126endif ()
127