couchbase-memcached 1.2.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (539) hide show
  1. data.tar.gz.sig +2 -0
  2. data/BENCHMARKS +134 -0
  3. data/CHANGELOG +127 -0
  4. data/LICENSE +184 -0
  5. data/Manifest +535 -0
  6. data/README +118 -0
  7. data/Rakefile +83 -0
  8. data/TODO +4 -0
  9. data/couchbase-memcached.gemspec +33 -0
  10. data/ext/extconf-make.rb +25 -0
  11. data/ext/extconf.rb +91 -0
  12. data/ext/libmemcached-0.50/AUTHORS +11 -0
  13. data/ext/libmemcached-0.50/COPYING +33 -0
  14. data/ext/libmemcached-0.50/ChangeLog +392 -0
  15. data/ext/libmemcached-0.50/Makefile.am +114 -0
  16. data/ext/libmemcached-0.50/Makefile.in +4232 -0
  17. data/ext/libmemcached-0.50/NEWS +1 -0
  18. data/ext/libmemcached-0.50/README +43 -0
  19. data/ext/libmemcached-0.50/README.FIRST +31 -0
  20. data/ext/libmemcached-0.50/README.win32 +25 -0
  21. data/ext/libmemcached-0.50/THANKS +14 -0
  22. data/ext/libmemcached-0.50/TODO +11 -0
  23. data/ext/libmemcached-0.50/aclocal.m4 +1077 -0
  24. data/ext/libmemcached-0.50/clients/client_options.h +45 -0
  25. data/ext/libmemcached-0.50/clients/execute.cc +131 -0
  26. data/ext/libmemcached-0.50/clients/execute.h +30 -0
  27. data/ext/libmemcached-0.50/clients/generator.cc +96 -0
  28. data/ext/libmemcached-0.50/clients/generator.h +36 -0
  29. data/ext/libmemcached-0.50/clients/include.am +116 -0
  30. data/ext/libmemcached-0.50/clients/memaslap.c +908 -0
  31. data/ext/libmemcached-0.50/clients/memcapable.cc +2094 -0
  32. data/ext/libmemcached-0.50/clients/memcat.cc +242 -0
  33. data/ext/libmemcached-0.50/clients/memcp.cc +317 -0
  34. data/ext/libmemcached-0.50/clients/memdump.cc +183 -0
  35. data/ext/libmemcached-0.50/clients/memerror.cc +102 -0
  36. data/ext/libmemcached-0.50/clients/memflush.cc +154 -0
  37. data/ext/libmemcached-0.50/clients/memparse.cc +68 -0
  38. data/ext/libmemcached-0.50/clients/memrm.cc +177 -0
  39. data/ext/libmemcached-0.50/clients/memslap.cc +495 -0
  40. data/ext/libmemcached-0.50/clients/memstat.cc +349 -0
  41. data/ext/libmemcached-0.50/clients/ms_atomic.h +69 -0
  42. data/ext/libmemcached-0.50/clients/ms_conn.c +3413 -0
  43. data/ext/libmemcached-0.50/clients/ms_conn.h +241 -0
  44. data/ext/libmemcached-0.50/clients/ms_memslap.h +132 -0
  45. data/ext/libmemcached-0.50/clients/ms_setting.c +1068 -0
  46. data/ext/libmemcached-0.50/clients/ms_setting.h +181 -0
  47. data/ext/libmemcached-0.50/clients/ms_sigsegv.c +126 -0
  48. data/ext/libmemcached-0.50/clients/ms_sigsegv.h +34 -0
  49. data/ext/libmemcached-0.50/clients/ms_stats.c +307 -0
  50. data/ext/libmemcached-0.50/clients/ms_stats.h +69 -0
  51. data/ext/libmemcached-0.50/clients/ms_task.c +1114 -0
  52. data/ext/libmemcached-0.50/clients/ms_task.h +94 -0
  53. data/ext/libmemcached-0.50/clients/ms_thread.c +351 -0
  54. data/ext/libmemcached-0.50/clients/ms_thread.h +78 -0
  55. data/ext/libmemcached-0.50/clients/utilities.cc +231 -0
  56. data/ext/libmemcached-0.50/clients/utilities.h +64 -0
  57. data/ext/libmemcached-0.50/config.h.in +647 -0
  58. data/ext/libmemcached-0.50/config/autorun.sh +126 -0
  59. data/ext/libmemcached-0.50/config/compile +143 -0
  60. data/ext/libmemcached-0.50/config/config.guess +1517 -0
  61. data/ext/libmemcached-0.50/config/config.rpath +666 -0
  62. data/ext/libmemcached-0.50/config/config.sub +1760 -0
  63. data/ext/libmemcached-0.50/config/depcomp +630 -0
  64. data/ext/libmemcached-0.50/config/install-sh +520 -0
  65. data/ext/libmemcached-0.50/config/ltmain.sh +9642 -0
  66. data/ext/libmemcached-0.50/config/missing +376 -0
  67. data/ext/libmemcached-0.50/config/pandora-plugin +752 -0
  68. data/ext/libmemcached-0.50/config/uncrustify.cfg +1112 -0
  69. data/ext/libmemcached-0.50/configure +27103 -0
  70. data/ext/libmemcached-0.50/configure.ac +186 -0
  71. data/ext/libmemcached-0.50/docs/conf.py.in +354 -0
  72. data/ext/libmemcached-0.50/docs/include.am +240 -0
  73. data/ext/libmemcached-0.50/docs/man/hashkit_clone.3 +88 -0
  74. data/ext/libmemcached-0.50/docs/man/hashkit_crc32.3 +105 -0
  75. data/ext/libmemcached-0.50/docs/man/hashkit_create.3 +88 -0
  76. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1_32.3 +105 -0
  77. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1_64.3 +105 -0
  78. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1a_32.3 +105 -0
  79. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1a_64.3 +105 -0
  80. data/ext/libmemcached-0.50/docs/man/hashkit_free.3 +88 -0
  81. data/ext/libmemcached-0.50/docs/man/hashkit_functions.3 +105 -0
  82. data/ext/libmemcached-0.50/docs/man/hashkit_hsieh.3 +105 -0
  83. data/ext/libmemcached-0.50/docs/man/hashkit_is_allocated.3 +88 -0
  84. data/ext/libmemcached-0.50/docs/man/hashkit_jenkins.3 +105 -0
  85. data/ext/libmemcached-0.50/docs/man/hashkit_md5.3 +105 -0
  86. data/ext/libmemcached-0.50/docs/man/hashkit_murmur.3 +105 -0
  87. data/ext/libmemcached-0.50/docs/man/hashkit_value.3 +66 -0
  88. data/ext/libmemcached-0.50/docs/man/libhashkit.3 +57 -0
  89. data/ext/libmemcached-0.50/docs/man/libmemcached.3 +208 -0
  90. data/ext/libmemcached-0.50/docs/man/libmemcached_check_configuration.3 +293 -0
  91. data/ext/libmemcached-0.50/docs/man/libmemcached_configuration.3 +293 -0
  92. data/ext/libmemcached-0.50/docs/man/libmemcached_examples.3 +144 -0
  93. data/ext/libmemcached-0.50/docs/man/libmemcachedutil.3 +68 -0
  94. data/ext/libmemcached-0.50/docs/man/memaslap.1 +1222 -0
  95. data/ext/libmemcached-0.50/docs/man/memcached.3 +293 -0
  96. data/ext/libmemcached-0.50/docs/man/memcached_add.3 +132 -0
  97. data/ext/libmemcached-0.50/docs/man/memcached_add_by_key.3 +132 -0
  98. data/ext/libmemcached-0.50/docs/man/memcached_analyze.3 +77 -0
  99. data/ext/libmemcached-0.50/docs/man/memcached_append.3 +111 -0
  100. data/ext/libmemcached-0.50/docs/man/memcached_append_by_key.3 +111 -0
  101. data/ext/libmemcached-0.50/docs/man/memcached_behavior_get.3 +333 -0
  102. data/ext/libmemcached-0.50/docs/man/memcached_behavior_set.3 +333 -0
  103. data/ext/libmemcached-0.50/docs/man/memcached_callback_get.3 +159 -0
  104. data/ext/libmemcached-0.50/docs/man/memcached_callback_set.3 +159 -0
  105. data/ext/libmemcached-0.50/docs/man/memcached_cas.3 +91 -0
  106. data/ext/libmemcached-0.50/docs/man/memcached_cas_by_key.3 +91 -0
  107. data/ext/libmemcached-0.50/docs/man/memcached_clone.3 +99 -0
  108. data/ext/libmemcached-0.50/docs/man/memcached_create.3 +99 -0
  109. data/ext/libmemcached-0.50/docs/man/memcached_decrement.3 +124 -0
  110. data/ext/libmemcached-0.50/docs/man/memcached_decrement_with_initial.3 +124 -0
  111. data/ext/libmemcached-0.50/docs/man/memcached_delete.3 +83 -0
  112. data/ext/libmemcached-0.50/docs/man/memcached_delete_by_key.3 +83 -0
  113. data/ext/libmemcached-0.50/docs/man/memcached_destroy_sasl_auth_data.3 +95 -0
  114. data/ext/libmemcached-0.50/docs/man/memcached_dump.3 +77 -0
  115. data/ext/libmemcached-0.50/docs/man/memcached_fetch.3 +174 -0
  116. data/ext/libmemcached-0.50/docs/man/memcached_fetch_execute.3 +174 -0
  117. data/ext/libmemcached-0.50/docs/man/memcached_fetch_result.3 +174 -0
  118. data/ext/libmemcached-0.50/docs/man/memcached_flush_buffers.3 +72 -0
  119. data/ext/libmemcached-0.50/docs/man/memcached_free.3 +99 -0
  120. data/ext/libmemcached-0.50/docs/man/memcached_generate_hash.3 +85 -0
  121. data/ext/libmemcached-0.50/docs/man/memcached_generate_hash_value.3 +85 -0
  122. data/ext/libmemcached-0.50/docs/man/memcached_get.3 +174 -0
  123. data/ext/libmemcached-0.50/docs/man/memcached_get_by_key.3 +174 -0
  124. data/ext/libmemcached-0.50/docs/man/memcached_get_memory_allocators.3 +111 -0
  125. data/ext/libmemcached-0.50/docs/man/memcached_get_sasl_callbacks.3 +95 -0
  126. data/ext/libmemcached-0.50/docs/man/memcached_get_user_data.3 +79 -0
  127. data/ext/libmemcached-0.50/docs/man/memcached_increment.3 +124 -0
  128. data/ext/libmemcached-0.50/docs/man/memcached_increment_with_initial.3 +124 -0
  129. data/ext/libmemcached-0.50/docs/man/memcached_lib_version.3 +76 -0
  130. data/ext/libmemcached-0.50/docs/man/memcached_mget.3 +174 -0
  131. data/ext/libmemcached-0.50/docs/man/memcached_mget_by_key.3 +174 -0
  132. data/ext/libmemcached-0.50/docs/man/memcached_mget_execute.3 +174 -0
  133. data/ext/libmemcached-0.50/docs/man/memcached_mget_execute_by_key.3 +174 -0
  134. data/ext/libmemcached-0.50/docs/man/memcached_pool_behavior_get.3 +139 -0
  135. data/ext/libmemcached-0.50/docs/man/memcached_pool_behavior_set.3 +139 -0
  136. data/ext/libmemcached-0.50/docs/man/memcached_pool_create.3 +139 -0
  137. data/ext/libmemcached-0.50/docs/man/memcached_pool_destroy.3 +139 -0
  138. data/ext/libmemcached-0.50/docs/man/memcached_pool_pop.3 +139 -0
  139. data/ext/libmemcached-0.50/docs/man/memcached_pool_push.3 +139 -0
  140. data/ext/libmemcached-0.50/docs/man/memcached_pool_st.3 +139 -0
  141. data/ext/libmemcached-0.50/docs/man/memcached_prepend.3 +111 -0
  142. data/ext/libmemcached-0.50/docs/man/memcached_prepend_by_key.3 +111 -0
  143. data/ext/libmemcached-0.50/docs/man/memcached_quit.3 +74 -0
  144. data/ext/libmemcached-0.50/docs/man/memcached_replace.3 +132 -0
  145. data/ext/libmemcached-0.50/docs/man/memcached_replace_by_key.3 +132 -0
  146. data/ext/libmemcached-0.50/docs/man/memcached_sasl_set_auth_data.3 +95 -0
  147. data/ext/libmemcached-0.50/docs/man/memcached_server_add.3 +141 -0
  148. data/ext/libmemcached-0.50/docs/man/memcached_server_count.3 +141 -0
  149. data/ext/libmemcached-0.50/docs/man/memcached_server_cursor.3 +141 -0
  150. data/ext/libmemcached-0.50/docs/man/memcached_server_list.3 +141 -0
  151. data/ext/libmemcached-0.50/docs/man/memcached_server_list_append.3 +111 -0
  152. data/ext/libmemcached-0.50/docs/man/memcached_server_list_count.3 +111 -0
  153. data/ext/libmemcached-0.50/docs/man/memcached_server_list_free.3 +111 -0
  154. data/ext/libmemcached-0.50/docs/man/memcached_server_push.3 +141 -0
  155. data/ext/libmemcached-0.50/docs/man/memcached_servers_parse.3 +111 -0
  156. data/ext/libmemcached-0.50/docs/man/memcached_set.3 +132 -0
  157. data/ext/libmemcached-0.50/docs/man/memcached_set_by_key.3 +132 -0
  158. data/ext/libmemcached-0.50/docs/man/memcached_set_memory_allocators.3 +111 -0
  159. data/ext/libmemcached-0.50/docs/man/memcached_set_sasl_callbacks.3 +95 -0
  160. data/ext/libmemcached-0.50/docs/man/memcached_set_user_data.3 +79 -0
  161. data/ext/libmemcached-0.50/docs/man/memcached_stat.3 +116 -0
  162. data/ext/libmemcached-0.50/docs/man/memcached_stat_execute.3 +116 -0
  163. data/ext/libmemcached-0.50/docs/man/memcached_stat_get_keys.3 +116 -0
  164. data/ext/libmemcached-0.50/docs/man/memcached_stat_get_value.3 +116 -0
  165. data/ext/libmemcached-0.50/docs/man/memcached_stat_servername.3 +116 -0
  166. data/ext/libmemcached-0.50/docs/man/memcached_strerror.3 +69 -0
  167. data/ext/libmemcached-0.50/docs/man/memcached_verbosity.3 +66 -0
  168. data/ext/libmemcached-0.50/docs/man/memcached_version.3 +76 -0
  169. data/ext/libmemcached-0.50/docs/man/memcapable.1 +92 -0
  170. data/ext/libmemcached-0.50/docs/man/memcat.1 +71 -0
  171. data/ext/libmemcached-0.50/docs/man/memcp.1 +77 -0
  172. data/ext/libmemcached-0.50/docs/man/memdump.1 +66 -0
  173. data/ext/libmemcached-0.50/docs/man/memerror.1 +65 -0
  174. data/ext/libmemcached-0.50/docs/man/memflush.1 +73 -0
  175. data/ext/libmemcached-0.50/docs/man/memrm.1 +72 -0
  176. data/ext/libmemcached-0.50/docs/man/memslap.1 +59 -0
  177. data/ext/libmemcached-0.50/docs/man/memstat.1 +70 -0
  178. data/ext/libmemcached-0.50/example/include.am +24 -0
  179. data/ext/libmemcached-0.50/example/interface_v0.c +594 -0
  180. data/ext/libmemcached-0.50/example/interface_v1.c +411 -0
  181. data/ext/libmemcached-0.50/example/memcached_light.c +474 -0
  182. data/ext/libmemcached-0.50/example/memcached_light.h +7 -0
  183. data/ext/libmemcached-0.50/example/storage.c +172 -0
  184. data/ext/libmemcached-0.50/example/storage.h +27 -0
  185. data/ext/libmemcached-0.50/example/storage_innodb.c +535 -0
  186. data/ext/libmemcached-0.50/libhashkit/algorithm.cc +69 -0
  187. data/ext/libmemcached-0.50/libhashkit/algorithm.h +96 -0
  188. data/ext/libmemcached-0.50/libhashkit/behavior.cc +9 -0
  189. data/ext/libmemcached-0.50/libhashkit/behavior.h +26 -0
  190. data/ext/libmemcached-0.50/libhashkit/common.h +33 -0
  191. data/ext/libmemcached-0.50/libhashkit/configure.h.in +19 -0
  192. data/ext/libmemcached-0.50/libhashkit/crc32.cc +86 -0
  193. data/ext/libmemcached-0.50/libhashkit/digest.cc +62 -0
  194. data/ext/libmemcached-0.50/libhashkit/digest.h +30 -0
  195. data/ext/libmemcached-0.50/libhashkit/fnv.cc +75 -0
  196. data/ext/libmemcached-0.50/libhashkit/function.cc +156 -0
  197. data/ext/libmemcached-0.50/libhashkit/function.h +44 -0
  198. data/ext/libmemcached-0.50/libhashkit/hashkit.cc +100 -0
  199. data/ext/libmemcached-0.50/libhashkit/hashkit.h +95 -0
  200. data/ext/libmemcached-0.50/libhashkit/hashkit.hpp +97 -0
  201. data/ext/libmemcached-0.50/libhashkit/hsieh.cc +70 -0
  202. data/ext/libmemcached-0.50/libhashkit/include.am +69 -0
  203. data/ext/libmemcached-0.50/libhashkit/jenkins.cc +214 -0
  204. data/ext/libmemcached-0.50/libhashkit/ketama.cc +164 -0
  205. data/ext/libmemcached-0.50/libhashkit/md5.cc +367 -0
  206. data/ext/libmemcached-0.50/libhashkit/murmur.cc +77 -0
  207. data/ext/libmemcached-0.50/libhashkit/one_at_a_time.cc +34 -0
  208. data/ext/libmemcached-0.50/libhashkit/str_algorithm.cc +58 -0
  209. data/ext/libmemcached-0.50/libhashkit/str_algorithm.h +48 -0
  210. data/ext/libmemcached-0.50/libhashkit/strerror.cc +25 -0
  211. data/ext/libmemcached-0.50/libhashkit/strerror.h +23 -0
  212. data/ext/libmemcached-0.50/libhashkit/types.h +90 -0
  213. data/ext/libmemcached-0.50/libhashkit/visibility.h +48 -0
  214. data/ext/libmemcached-0.50/libmemcached/allocators.cc +119 -0
  215. data/ext/libmemcached-0.50/libmemcached/allocators.h +87 -0
  216. data/ext/libmemcached-0.50/libmemcached/analyze.cc +110 -0
  217. data/ext/libmemcached-0.50/libmemcached/analyze.h +66 -0
  218. data/ext/libmemcached-0.50/libmemcached/array.c +128 -0
  219. data/ext/libmemcached-0.50/libmemcached/array.h +75 -0
  220. data/ext/libmemcached-0.50/libmemcached/auto.cc +383 -0
  221. data/ext/libmemcached-0.50/libmemcached/auto.h +111 -0
  222. data/ext/libmemcached-0.50/libmemcached/basic_string.h +55 -0
  223. data/ext/libmemcached-0.50/libmemcached/behavior.cc +590 -0
  224. data/ext/libmemcached-0.50/libmemcached/behavior.h +86 -0
  225. data/ext/libmemcached-0.50/libmemcached/byteorder.cc +90 -0
  226. data/ext/libmemcached-0.50/libmemcached/byteorder.h +52 -0
  227. data/ext/libmemcached-0.50/libmemcached/callback.cc +160 -0
  228. data/ext/libmemcached-0.50/libmemcached/callback.h +61 -0
  229. data/ext/libmemcached-0.50/libmemcached/common.h +182 -0
  230. data/ext/libmemcached-0.50/libmemcached/configure.h.in +52 -0
  231. data/ext/libmemcached-0.50/libmemcached/connect.cc +626 -0
  232. data/ext/libmemcached-0.50/libmemcached/constants.h +167 -0
  233. data/ext/libmemcached-0.50/libmemcached/delete.cc +266 -0
  234. data/ext/libmemcached-0.50/libmemcached/delete.h +57 -0
  235. data/ext/libmemcached-0.50/libmemcached/do.cc +100 -0
  236. data/ext/libmemcached-0.50/libmemcached/do.hpp +49 -0
  237. data/ext/libmemcached-0.50/libmemcached/dump.cc +107 -0
  238. data/ext/libmemcached-0.50/libmemcached/dump.h +51 -0
  239. data/ext/libmemcached-0.50/libmemcached/error.cc +419 -0
  240. data/ext/libmemcached-0.50/libmemcached/error.h +61 -0
  241. data/ext/libmemcached-0.50/libmemcached/error.hpp +87 -0
  242. data/ext/libmemcached-0.50/libmemcached/exception.hpp +63 -0
  243. data/ext/libmemcached-0.50/libmemcached/fetch.cc +267 -0
  244. data/ext/libmemcached-0.50/libmemcached/fetch.h +53 -0
  245. data/ext/libmemcached-0.50/libmemcached/flush.cc +149 -0
  246. data/ext/libmemcached-0.50/libmemcached/flush.h +49 -0
  247. data/ext/libmemcached-0.50/libmemcached/flush_buffers.cc +66 -0
  248. data/ext/libmemcached-0.50/libmemcached/flush_buffers.h +49 -0
  249. data/ext/libmemcached-0.50/libmemcached/get.cc +842 -0
  250. data/ext/libmemcached-0.50/libmemcached/get.h +135 -0
  251. data/ext/libmemcached-0.50/libmemcached/hash.cc +178 -0
  252. data/ext/libmemcached-0.50/libmemcached/hash.h +68 -0
  253. data/ext/libmemcached-0.50/libmemcached/hosts.cc +516 -0
  254. data/ext/libmemcached-0.50/libmemcached/include.am +183 -0
  255. data/ext/libmemcached-0.50/libmemcached/initialize_query.cc +70 -0
  256. data/ext/libmemcached-0.50/libmemcached/initialize_query.h +51 -0
  257. data/ext/libmemcached-0.50/libmemcached/internal.h +46 -0
  258. data/ext/libmemcached-0.50/libmemcached/io.cc +920 -0
  259. data/ext/libmemcached-0.50/libmemcached/io.h +119 -0
  260. data/ext/libmemcached-0.50/libmemcached/is.h +48 -0
  261. data/ext/libmemcached-0.50/libmemcached/key.cc +23 -0
  262. data/ext/libmemcached-0.50/libmemcached/libmemcached_probes.d +30 -0
  263. data/ext/libmemcached-0.50/libmemcached/libmemcached_probes.h +118 -0
  264. data/ext/libmemcached-0.50/libmemcached/memcached.cc +437 -0
  265. data/ext/libmemcached-0.50/libmemcached/memcached.h +214 -0
  266. data/ext/libmemcached-0.50/libmemcached/memcached.hpp +799 -0
  267. data/ext/libmemcached-0.50/libmemcached/memcached/README.txt +7 -0
  268. data/ext/libmemcached-0.50/libmemcached/memcached/protocol_binary.h +726 -0
  269. data/ext/libmemcached-0.50/libmemcached/memcached/vbucket.h +26 -0
  270. data/ext/libmemcached-0.50/libmemcached/memcached_util.h +44 -0
  271. data/ext/libmemcached-0.50/libmemcached/memory.h +79 -0
  272. data/ext/libmemcached-0.50/libmemcached/options.cc +178 -0
  273. data/ext/libmemcached-0.50/libmemcached/options.h +49 -0
  274. data/ext/libmemcached-0.50/libmemcached/options.hpp +56 -0
  275. data/ext/libmemcached-0.50/libmemcached/options/context.h +151 -0
  276. data/ext/libmemcached-0.50/libmemcached/options/include.am +19 -0
  277. data/ext/libmemcached-0.50/libmemcached/options/parser.am +0 -0
  278. data/ext/libmemcached-0.50/libmemcached/options/parser.cc +2324 -0
  279. data/ext/libmemcached-0.50/libmemcached/options/parser.h +122 -0
  280. data/ext/libmemcached-0.50/libmemcached/options/scanner.cc +3203 -0
  281. data/ext/libmemcached-0.50/libmemcached/options/scanner.h +479 -0
  282. data/ext/libmemcached-0.50/libmemcached/options/server.h +60 -0
  283. data/ext/libmemcached-0.50/libmemcached/options/symbol.h +57 -0
  284. data/ext/libmemcached-0.50/libmemcached/parse.cc +110 -0
  285. data/ext/libmemcached-0.50/libmemcached/parse.h +23 -0
  286. data/ext/libmemcached-0.50/libmemcached/platform.h +56 -0
  287. data/ext/libmemcached-0.50/libmemcached/prefix_key.cc +65 -0
  288. data/ext/libmemcached-0.50/libmemcached/prefix_key.h +49 -0
  289. data/ext/libmemcached-0.50/libmemcached/protocol/ascii_handler.c +963 -0
  290. data/ext/libmemcached-0.50/libmemcached/protocol/ascii_handler.h +40 -0
  291. data/ext/libmemcached-0.50/libmemcached/protocol/binary_handler.c +1121 -0
  292. data/ext/libmemcached-0.50/libmemcached/protocol/binary_handler.h +47 -0
  293. data/ext/libmemcached-0.50/libmemcached/protocol/cache.c +149 -0
  294. data/ext/libmemcached-0.50/libmemcached/protocol/cache.h +116 -0
  295. data/ext/libmemcached-0.50/libmemcached/protocol/callback.h +418 -0
  296. data/ext/libmemcached-0.50/libmemcached/protocol/common.h +163 -0
  297. data/ext/libmemcached-0.50/libmemcached/protocol/include.am +26 -0
  298. data/ext/libmemcached-0.50/libmemcached/protocol/pedantic.c +202 -0
  299. data/ext/libmemcached-0.50/libmemcached/protocol/protocol_handler.c +365 -0
  300. data/ext/libmemcached-0.50/libmemcached/protocol_handler.h +215 -0
  301. data/ext/libmemcached-0.50/libmemcached/purge.cc +90 -0
  302. data/ext/libmemcached-0.50/libmemcached/quit.cc +139 -0
  303. data/ext/libmemcached-0.50/libmemcached/quit.h +55 -0
  304. data/ext/libmemcached-0.50/libmemcached/response.cc +619 -0
  305. data/ext/libmemcached-0.50/libmemcached/response.h +57 -0
  306. data/ext/libmemcached-0.50/libmemcached/result.cc +173 -0
  307. data/ext/libmemcached-0.50/libmemcached/result.h +100 -0
  308. data/ext/libmemcached-0.50/libmemcached/return.h +98 -0
  309. data/ext/libmemcached-0.50/libmemcached/sasl.c +408 -0
  310. data/ext/libmemcached-0.50/libmemcached/sasl.h +86 -0
  311. data/ext/libmemcached-0.50/libmemcached/server.cc +351 -0
  312. data/ext/libmemcached-0.50/libmemcached/server.h +169 -0
  313. data/ext/libmemcached-0.50/libmemcached/server_list.cc +88 -0
  314. data/ext/libmemcached-0.50/libmemcached/server_list.h +77 -0
  315. data/ext/libmemcached-0.50/libmemcached/stats.cc +623 -0
  316. data/ext/libmemcached-0.50/libmemcached/stats.h +96 -0
  317. data/ext/libmemcached-0.50/libmemcached/storage.cc +567 -0
  318. data/ext/libmemcached-0.50/libmemcached/storage.h +133 -0
  319. data/ext/libmemcached-0.50/libmemcached/strerror.cc +189 -0
  320. data/ext/libmemcached-0.50/libmemcached/strerror.h +50 -0
  321. data/ext/libmemcached-0.50/libmemcached/string.cc +253 -0
  322. data/ext/libmemcached-0.50/libmemcached/string.h +121 -0
  323. data/ext/libmemcached-0.50/libmemcached/touch.cc +106 -0
  324. data/ext/libmemcached-0.50/libmemcached/touch.h +59 -0
  325. data/ext/libmemcached-0.50/libmemcached/types.h +117 -0
  326. data/ext/libmemcached-0.50/libmemcached/util.h +40 -0
  327. data/ext/libmemcached-0.50/libmemcached/util/flush.cc +61 -0
  328. data/ext/libmemcached-0.50/libmemcached/util/flush.h +50 -0
  329. data/ext/libmemcached-0.50/libmemcached/util/include.am +34 -0
  330. data/ext/libmemcached-0.50/libmemcached/util/ping.cc +62 -0
  331. data/ext/libmemcached-0.50/libmemcached/util/ping.h +49 -0
  332. data/ext/libmemcached-0.50/libmemcached/util/pool.cc +392 -0
  333. data/ext/libmemcached-0.50/libmemcached/util/pool.h +78 -0
  334. data/ext/libmemcached-0.50/libmemcached/util/version.cc +87 -0
  335. data/ext/libmemcached-0.50/libmemcached/util/version.h +53 -0
  336. data/ext/libmemcached-0.50/libmemcached/verbosity.cc +97 -0
  337. data/ext/libmemcached-0.50/libmemcached/verbosity.h +50 -0
  338. data/ext/libmemcached-0.50/libmemcached/version.cc +214 -0
  339. data/ext/libmemcached-0.50/libmemcached/version.h +52 -0
  340. data/ext/libmemcached-0.50/libmemcached/virtual_bucket.c +118 -0
  341. data/ext/libmemcached-0.50/libmemcached/virtual_bucket.h +59 -0
  342. data/ext/libmemcached-0.50/libmemcached/visibility.h +51 -0
  343. data/ext/libmemcached-0.50/libmemcached/watchpoint.h +110 -0
  344. data/ext/libmemcached-0.50/libtest/callbacks.h +21 -0
  345. data/ext/libmemcached-0.50/libtest/collection.h +19 -0
  346. data/ext/libmemcached-0.50/libtest/common.h +50 -0
  347. data/ext/libmemcached-0.50/libtest/core.h +11 -0
  348. data/ext/libmemcached-0.50/libtest/error.h +18 -0
  349. data/ext/libmemcached-0.50/libtest/failed.h +52 -0
  350. data/ext/libmemcached-0.50/libtest/framework.cc +57 -0
  351. data/ext/libmemcached-0.50/libtest/framework.h +137 -0
  352. data/ext/libmemcached-0.50/libtest/get.h +22 -0
  353. data/ext/libmemcached-0.50/libtest/include.am +52 -0
  354. data/ext/libmemcached-0.50/libtest/runner.h +19 -0
  355. data/ext/libmemcached-0.50/libtest/server.c +355 -0
  356. data/ext/libmemcached-0.50/libtest/server.h +43 -0
  357. data/ext/libmemcached-0.50/libtest/stats.h +30 -0
  358. data/ext/libmemcached-0.50/libtest/strerror.h +14 -0
  359. data/ext/libmemcached-0.50/libtest/test.cc +319 -0
  360. data/ext/libmemcached-0.50/libtest/test.h +162 -0
  361. data/ext/libmemcached-0.50/libtest/test.hpp +46 -0
  362. data/ext/libmemcached-0.50/libtest/visibility.h +69 -0
  363. data/ext/libmemcached-0.50/m4/ac_cxx_header_stdcxx_98.m4 +83 -0
  364. data/ext/libmemcached-0.50/m4/acx_pthread.m4 +271 -0
  365. data/ext/libmemcached-0.50/m4/byteorder.m4 +19 -0
  366. data/ext/libmemcached-0.50/m4/deprecated.m4 +17 -0
  367. data/ext/libmemcached-0.50/m4/eagain.m4 +28 -0
  368. data/ext/libmemcached-0.50/m4/enable_utillib.m4 +16 -0
  369. data/ext/libmemcached-0.50/m4/gettext.m4 +379 -0
  370. data/ext/libmemcached-0.50/m4/hsieh.m4 +18 -0
  371. data/ext/libmemcached-0.50/m4/iconv.m4 +214 -0
  372. data/ext/libmemcached-0.50/m4/lib-ld.m4 +110 -0
  373. data/ext/libmemcached-0.50/m4/lib-link.m4 +767 -0
  374. data/ext/libmemcached-0.50/m4/lib-prefix.m4 +221 -0
  375. data/ext/libmemcached-0.50/m4/libtool.m4 +7851 -0
  376. data/ext/libmemcached-0.50/m4/ltoptions.m4 +369 -0
  377. data/ext/libmemcached-0.50/m4/ltsugar.m4 +123 -0
  378. data/ext/libmemcached-0.50/m4/ltversion.m4 +23 -0
  379. data/ext/libmemcached-0.50/m4/lt~obsolete.m4 +98 -0
  380. data/ext/libmemcached-0.50/m4/memaslap.m4 +9 -0
  381. data/ext/libmemcached-0.50/m4/memcached.m4 +31 -0
  382. data/ext/libmemcached-0.50/m4/murmur.m4 +18 -0
  383. data/ext/libmemcached-0.50/m4/pandora_64bit.m4 +60 -0
  384. data/ext/libmemcached-0.50/m4/pandora_bison.m4 +33 -0
  385. data/ext/libmemcached-0.50/m4/pandora_canonical.m4 +418 -0
  386. data/ext/libmemcached-0.50/m4/pandora_check_compiler_version.m4 +37 -0
  387. data/ext/libmemcached-0.50/m4/pandora_check_cxx_standard.m4 +23 -0
  388. data/ext/libmemcached-0.50/m4/pandora_cinttypes.m4 +39 -0
  389. data/ext/libmemcached-0.50/m4/pandora_clock_gettime.m4 +15 -0
  390. data/ext/libmemcached-0.50/m4/pandora_compile_stdcxx_0x.m4 +103 -0
  391. data/ext/libmemcached-0.50/m4/pandora_cstdint.m4 +38 -0
  392. data/ext/libmemcached-0.50/m4/pandora_cxx_demangle.m4 +27 -0
  393. data/ext/libmemcached-0.50/m4/pandora_enable_dtrace.m4 +60 -0
  394. data/ext/libmemcached-0.50/m4/pandora_ensure_gcc_version.m4 +62 -0
  395. data/ext/libmemcached-0.50/m4/pandora_extensions.m4 +16 -0
  396. data/ext/libmemcached-0.50/m4/pandora_fdatasync.m4 +25 -0
  397. data/ext/libmemcached-0.50/m4/pandora_flex.m4 +33 -0
  398. data/ext/libmemcached-0.50/m4/pandora_have_better_malloc.m4 +66 -0
  399. data/ext/libmemcached-0.50/m4/pandora_have_boost.m4 +93 -0
  400. data/ext/libmemcached-0.50/m4/pandora_have_gcc_atomics.m4 +37 -0
  401. data/ext/libmemcached-0.50/m4/pandora_have_innodb.m4 +41 -0
  402. data/ext/libmemcached-0.50/m4/pandora_have_libaio.m4 +56 -0
  403. data/ext/libmemcached-0.50/m4/pandora_have_libavahi.m4 +41 -0
  404. data/ext/libmemcached-0.50/m4/pandora_have_libbdb.m4 +40 -0
  405. data/ext/libmemcached-0.50/m4/pandora_have_libboost_date_time.m4 +46 -0
  406. data/ext/libmemcached-0.50/m4/pandora_have_libboost_filesystem.m4 +47 -0
  407. data/ext/libmemcached-0.50/m4/pandora_have_libboost_iostreams.m4 +49 -0
  408. data/ext/libmemcached-0.50/m4/pandora_have_libboost_options.m4 +47 -0
  409. data/ext/libmemcached-0.50/m4/pandora_have_libboost_regex.m4 +54 -0
  410. data/ext/libmemcached-0.50/m4/pandora_have_libboost_test.m4 +45 -0
  411. data/ext/libmemcached-0.50/m4/pandora_have_libboost_thread.m4 +54 -0
  412. data/ext/libmemcached-0.50/m4/pandora_have_libcassandra.m4 +44 -0
  413. data/ext/libmemcached-0.50/m4/pandora_have_libcurl.m4 +62 -0
  414. data/ext/libmemcached-0.50/m4/pandora_have_libdl.m4 +51 -0
  415. data/ext/libmemcached-0.50/m4/pandora_have_libdrizzle.m4 +61 -0
  416. data/ext/libmemcached-0.50/m4/pandora_have_libevent.m4 +66 -0
  417. data/ext/libmemcached-0.50/m4/pandora_have_libgearman.m4 +41 -0
  418. data/ext/libmemcached-0.50/m4/pandora_have_libgtest.m4 +47 -0
  419. data/ext/libmemcached-0.50/m4/pandora_have_libhaildb.m4 +43 -0
  420. data/ext/libmemcached-0.50/m4/pandora_have_libhashkit.m4 +42 -0
  421. data/ext/libmemcached-0.50/m4/pandora_have_libinnodb.m4 +64 -0
  422. data/ext/libmemcached-0.50/m4/pandora_have_libldap.m4 +73 -0
  423. data/ext/libmemcached-0.50/m4/pandora_have_libmemcached.m4 +106 -0
  424. data/ext/libmemcached-0.50/m4/pandora_have_libmysqlclient.m4 +146 -0
  425. data/ext/libmemcached-0.50/m4/pandora_have_libndbclient.m4 +80 -0
  426. data/ext/libmemcached-0.50/m4/pandora_have_libpcre.m4 +73 -0
  427. data/ext/libmemcached-0.50/m4/pandora_have_libpq.m4 +46 -0
  428. data/ext/libmemcached-0.50/m4/pandora_have_libpqxx.m4 +44 -0
  429. data/ext/libmemcached-0.50/m4/pandora_have_libsqlite3.m4 +42 -0
  430. data/ext/libmemcached-0.50/m4/pandora_have_libtokyocabinet.m4 +54 -0
  431. data/ext/libmemcached-0.50/m4/pandora_have_libuuid.m4 +55 -0
  432. data/ext/libmemcached-0.50/m4/pandora_have_libvbucket.m4 +40 -0
  433. data/ext/libmemcached-0.50/m4/pandora_have_libxml2.m4 +52 -0
  434. data/ext/libmemcached-0.50/m4/pandora_have_libz.m4 +51 -0
  435. data/ext/libmemcached-0.50/m4/pandora_have_protobuf.m4 +82 -0
  436. data/ext/libmemcached-0.50/m4/pandora_have_sasl.m4 +133 -0
  437. data/ext/libmemcached-0.50/m4/pandora_have_thrift.m4 +45 -0
  438. data/ext/libmemcached-0.50/m4/pandora_header_assert.m4 +23 -0
  439. data/ext/libmemcached-0.50/m4/pandora_header_stdcxx_98.m4 +83 -0
  440. data/ext/libmemcached-0.50/m4/pandora_intltool.m4 +225 -0
  441. data/ext/libmemcached-0.50/m4/pandora_libtool.m4 +25 -0
  442. data/ext/libmemcached-0.50/m4/pandora_optimize.m4 +75 -0
  443. data/ext/libmemcached-0.50/m4/pandora_platform.m4 +117 -0
  444. data/ext/libmemcached-0.50/m4/pandora_plugins.m4 +62 -0
  445. data/ext/libmemcached-0.50/m4/pandora_print_callstack.m4 +61 -0
  446. data/ext/libmemcached-0.50/m4/pandora_pthread.m4 +258 -0
  447. data/ext/libmemcached-0.50/m4/pandora_python3_devel.m4 +236 -0
  448. data/ext/libmemcached-0.50/m4/pandora_run_cpplint.m4 +8 -0
  449. data/ext/libmemcached-0.50/m4/pandora_sasl.m4 +133 -0
  450. data/ext/libmemcached-0.50/m4/pandora_shared_ptr.m4 +59 -0
  451. data/ext/libmemcached-0.50/m4/pandora_stack_direction.m4 +39 -0
  452. data/ext/libmemcached-0.50/m4/pandora_stl_hash.m4 +94 -0
  453. data/ext/libmemcached-0.50/m4/pandora_swig.m4 +39 -0
  454. data/ext/libmemcached-0.50/m4/pandora_use_pipe.m4 +36 -0
  455. data/ext/libmemcached-0.50/m4/pandora_vc_build.m4 +168 -0
  456. data/ext/libmemcached-0.50/m4/pandora_version.m4 +11 -0
  457. data/ext/libmemcached-0.50/m4/pandora_visibility.m4 +75 -0
  458. data/ext/libmemcached-0.50/m4/pandora_warnings.m4 +447 -0
  459. data/ext/libmemcached-0.50/m4/pandora_with_gettext.m4 +44 -0
  460. data/ext/libmemcached-0.50/m4/pandora_with_lua.m4 +55 -0
  461. data/ext/libmemcached-0.50/m4/pandora_with_memcached.m4 +41 -0
  462. data/ext/libmemcached-0.50/m4/pandora_with_perl.m4 +81 -0
  463. data/ext/libmemcached-0.50/m4/pandora_with_php.m4 +56 -0
  464. data/ext/libmemcached-0.50/m4/pandora_with_python.m4 +37 -0
  465. data/ext/libmemcached-0.50/m4/pandora_with_python3.m4 +44 -0
  466. data/ext/libmemcached-0.50/m4/pandora_with_r.m4 +33 -0
  467. data/ext/libmemcached-0.50/m4/pandora_with_ruby.m4 +79 -0
  468. data/ext/libmemcached-0.50/m4/pandora_with_valgrind.m4 +17 -0
  469. data/ext/libmemcached-0.50/m4/pkg.m4 +157 -0
  470. data/ext/libmemcached-0.50/m4/po.m4 +449 -0
  471. data/ext/libmemcached-0.50/m4/progtest.m4 +92 -0
  472. data/ext/libmemcached-0.50/m4/protocol_binary.m4 +36 -0
  473. data/ext/libmemcached-0.50/m4/setsockopt.m4 +73 -0
  474. data/ext/libmemcached-0.50/m4/socket_send_flags.m4 +66 -0
  475. data/ext/libmemcached-0.50/poll/include.am +8 -0
  476. data/ext/libmemcached-0.50/poll/poll.c +77 -0
  477. data/ext/libmemcached-0.50/poll/poll.h +45 -0
  478. data/ext/libmemcached-0.50/support/include.am +11 -0
  479. data/ext/libmemcached-0.50/support/libmemcached-fc.spec.in +105 -0
  480. data/ext/libmemcached-0.50/support/libmemcached.pc.in +10 -0
  481. data/ext/libmemcached-0.50/support/libmemcached.spec.in +281 -0
  482. data/ext/libmemcached-0.50/support/set_benchmark.sh +5 -0
  483. data/ext/libmemcached-0.50/tests/atomsmasher.cc +295 -0
  484. data/ext/libmemcached-0.50/tests/basic.cc +134 -0
  485. data/ext/libmemcached-0.50/tests/basic.h +66 -0
  486. data/ext/libmemcached-0.50/tests/cpp_example.cc +195 -0
  487. data/ext/libmemcached-0.50/tests/deprecated.cc +72 -0
  488. data/ext/libmemcached-0.50/tests/deprecated.h +49 -0
  489. data/ext/libmemcached-0.50/tests/error_conditions.cc +63 -0
  490. data/ext/libmemcached-0.50/tests/error_conditions.h +48 -0
  491. data/ext/libmemcached-0.50/tests/hash_plus.cc +225 -0
  492. data/ext/libmemcached-0.50/tests/hash_results.h +127 -0
  493. data/ext/libmemcached-0.50/tests/hashkit_functions.cc +619 -0
  494. data/ext/libmemcached-0.50/tests/include.am +342 -0
  495. data/ext/libmemcached-0.50/tests/ketama_test_cases.h +121 -0
  496. data/ext/libmemcached-0.50/tests/ketama_test_cases_spy.h +118 -0
  497. data/ext/libmemcached-0.50/tests/libmemcached_world.h +205 -0
  498. data/ext/libmemcached-0.50/tests/mem_functions.cc +6648 -0
  499. data/ext/libmemcached-0.50/tests/mem_udp.cc +510 -0
  500. data/ext/libmemcached-0.50/tests/output_plus.res +5 -0
  501. data/ext/libmemcached-0.50/tests/parser.cc +599 -0
  502. data/ext/libmemcached-0.50/tests/parser.h +109 -0
  503. data/ext/libmemcached-0.50/tests/plus.cpp +240 -0
  504. data/ext/libmemcached-0.50/tests/pool.cc +78 -0
  505. data/ext/libmemcached-0.50/tests/pool.h +49 -0
  506. data/ext/libmemcached-0.50/tests/print.cc +58 -0
  507. data/ext/libmemcached-0.50/tests/print.h +51 -0
  508. data/ext/libmemcached-0.50/tests/replication.cc +333 -0
  509. data/ext/libmemcached-0.50/tests/replication.h +64 -0
  510. data/ext/libmemcached-0.50/tests/start.cc +29 -0
  511. data/ext/libmemcached-0.50/tests/string.cc +174 -0
  512. data/ext/libmemcached-0.50/tests/string.h +67 -0
  513. data/ext/libmemcached-0.50/tests/virtual_buckets.cc +143 -0
  514. data/ext/libmemcached-0.50/tests/virtual_buckets.h +51 -0
  515. data/ext/libmemcached-0.50/win32/include.am +11 -0
  516. data/ext/libmemcached-0.50/win32/wrappers.h +55 -0
  517. data/ext/rlibmemcached.i +263 -0
  518. data/ext/rlibmemcached_wrap.c +16732 -0
  519. data/lib/memcached.rb +32 -0
  520. data/lib/memcached/auth.rb +16 -0
  521. data/lib/memcached/behaviors.rb +77 -0
  522. data/lib/memcached/exceptions.rb +84 -0
  523. data/lib/memcached/experimental.rb +48 -0
  524. data/lib/memcached/memcached.rb +660 -0
  525. data/lib/memcached/rails.rb +133 -0
  526. data/test/profile/benchmark.rb +245 -0
  527. data/test/profile/c_profiler.rb +14 -0
  528. data/test/profile/exercise.rb +185 -0
  529. data/test/profile/rb_profiler.rb +21 -0
  530. data/test/profile/valgrind.rb +10 -0
  531. data/test/setup.rb +30 -0
  532. data/test/teardown.rb +0 -0
  533. data/test/test_helper.rb +19 -0
  534. data/test/unit/binding_test.rb +8 -0
  535. data/test/unit/memcached_experimental_test.rb +274 -0
  536. data/test/unit/memcached_test.rb +1293 -0
  537. data/test/unit/rails_test.rb +122 -0
  538. metadata +650 -0
  539. metadata.gz.sig +0 -0
@@ -0,0 +1,376 @@
1
+ #! /bin/sh
2
+ # Common stub for a few missing GNU programs while installing.
3
+
4
+ scriptversion=2009-04-28.21; # UTC
5
+
6
+ # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
7
+ # 2008, 2009 Free Software Foundation, Inc.
8
+ # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
9
+
10
+ # This program is free software; you can redistribute it and/or modify
11
+ # it under the terms of the GNU General Public License as published by
12
+ # the Free Software Foundation; either version 2, or (at your option)
13
+ # any later version.
14
+
15
+ # This program is distributed in the hope that it will be useful,
16
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ # GNU General Public License for more details.
19
+
20
+ # You should have received a copy of the GNU General Public License
21
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
22
+
23
+ # As a special exception to the GNU General Public License, if you
24
+ # distribute this file as part of a program that contains a
25
+ # configuration script generated by Autoconf, you may include it under
26
+ # the same distribution terms that you use for the rest of that program.
27
+
28
+ if test $# -eq 0; then
29
+ echo 1>&2 "Try \`$0 --help' for more information"
30
+ exit 1
31
+ fi
32
+
33
+ run=:
34
+ sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
35
+ sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
36
+
37
+ # In the cases where this matters, `missing' is being run in the
38
+ # srcdir already.
39
+ if test -f configure.ac; then
40
+ configure_ac=configure.ac
41
+ else
42
+ configure_ac=configure.in
43
+ fi
44
+
45
+ msg="missing on your system"
46
+
47
+ case $1 in
48
+ --run)
49
+ # Try to run requested program, and just exit if it succeeds.
50
+ run=
51
+ shift
52
+ "$@" && exit 0
53
+ # Exit code 63 means version mismatch. This often happens
54
+ # when the user try to use an ancient version of a tool on
55
+ # a file that requires a minimum version. In this case we
56
+ # we should proceed has if the program had been absent, or
57
+ # if --run hadn't been passed.
58
+ if test $? = 63; then
59
+ run=:
60
+ msg="probably too old"
61
+ fi
62
+ ;;
63
+
64
+ -h|--h|--he|--hel|--help)
65
+ echo "\
66
+ $0 [OPTION]... PROGRAM [ARGUMENT]...
67
+
68
+ Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
69
+ error status if there is no known handling for PROGRAM.
70
+
71
+ Options:
72
+ -h, --help display this help and exit
73
+ -v, --version output version information and exit
74
+ --run try to run the given command, and emulate it if it fails
75
+
76
+ Supported PROGRAM values:
77
+ aclocal touch file \`aclocal.m4'
78
+ autoconf touch file \`configure'
79
+ autoheader touch file \`config.h.in'
80
+ autom4te touch the output file, or create a stub one
81
+ automake touch all \`Makefile.in' files
82
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
83
+ flex create \`lex.yy.c', if possible, from existing .c
84
+ help2man touch the output file
85
+ lex create \`lex.yy.c', if possible, from existing .c
86
+ makeinfo touch the output file
87
+ tar try tar, gnutar, gtar, then tar without non-portable flags
88
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
89
+
90
+ Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
91
+ \`g' are ignored when checking the name.
92
+
93
+ Send bug reports to <bug-automake@gnu.org>."
94
+ exit $?
95
+ ;;
96
+
97
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
98
+ echo "missing $scriptversion (GNU Automake)"
99
+ exit $?
100
+ ;;
101
+
102
+ -*)
103
+ echo 1>&2 "$0: Unknown \`$1' option"
104
+ echo 1>&2 "Try \`$0 --help' for more information"
105
+ exit 1
106
+ ;;
107
+
108
+ esac
109
+
110
+ # normalize program name to check for.
111
+ program=`echo "$1" | sed '
112
+ s/^gnu-//; t
113
+ s/^gnu//; t
114
+ s/^g//; t'`
115
+
116
+ # Now exit if we have it, but it failed. Also exit now if we
117
+ # don't have it and --version was passed (most likely to detect
118
+ # the program). This is about non-GNU programs, so use $1 not
119
+ # $program.
120
+ case $1 in
121
+ lex*|yacc*)
122
+ # Not GNU programs, they don't have --version.
123
+ ;;
124
+
125
+ tar*)
126
+ if test -n "$run"; then
127
+ echo 1>&2 "ERROR: \`tar' requires --run"
128
+ exit 1
129
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
130
+ exit 1
131
+ fi
132
+ ;;
133
+
134
+ *)
135
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
136
+ # We have it, but it failed.
137
+ exit 1
138
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
139
+ # Could not run --version or --help. This is probably someone
140
+ # running `$TOOL --version' or `$TOOL --help' to check whether
141
+ # $TOOL exists and not knowing $TOOL uses missing.
142
+ exit 1
143
+ fi
144
+ ;;
145
+ esac
146
+
147
+ # If it does not exist, or fails to run (possibly an outdated version),
148
+ # try to emulate it.
149
+ case $program in
150
+ aclocal*)
151
+ echo 1>&2 "\
152
+ WARNING: \`$1' is $msg. You should only need it if
153
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
154
+ to install the \`Automake' and \`Perl' packages. Grab them from
155
+ any GNU archive site."
156
+ touch aclocal.m4
157
+ ;;
158
+
159
+ autoconf*)
160
+ echo 1>&2 "\
161
+ WARNING: \`$1' is $msg. You should only need it if
162
+ you modified \`${configure_ac}'. You might want to install the
163
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
164
+ archive site."
165
+ touch configure
166
+ ;;
167
+
168
+ autoheader*)
169
+ echo 1>&2 "\
170
+ WARNING: \`$1' is $msg. You should only need it if
171
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
172
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
173
+ from any GNU archive site."
174
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
175
+ test -z "$files" && files="config.h"
176
+ touch_files=
177
+ for f in $files; do
178
+ case $f in
179
+ *:*) touch_files="$touch_files "`echo "$f" |
180
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
181
+ *) touch_files="$touch_files $f.in";;
182
+ esac
183
+ done
184
+ touch $touch_files
185
+ ;;
186
+
187
+ automake*)
188
+ echo 1>&2 "\
189
+ WARNING: \`$1' is $msg. You should only need it if
190
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
191
+ You might want to install the \`Automake' and \`Perl' packages.
192
+ Grab them from any GNU archive site."
193
+ find . -type f -name Makefile.am -print |
194
+ sed 's/\.am$/.in/' |
195
+ while read f; do touch "$f"; done
196
+ ;;
197
+
198
+ autom4te*)
199
+ echo 1>&2 "\
200
+ WARNING: \`$1' is needed, but is $msg.
201
+ You might have modified some files without having the
202
+ proper tools for further handling them.
203
+ You can get \`$1' as part of \`Autoconf' from any GNU
204
+ archive site."
205
+
206
+ file=`echo "$*" | sed -n "$sed_output"`
207
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
208
+ if test -f "$file"; then
209
+ touch $file
210
+ else
211
+ test -z "$file" || exec >$file
212
+ echo "#! /bin/sh"
213
+ echo "# Created by GNU Automake missing as a replacement of"
214
+ echo "# $ $@"
215
+ echo "exit 0"
216
+ chmod +x $file
217
+ exit 1
218
+ fi
219
+ ;;
220
+
221
+ bison*|yacc*)
222
+ echo 1>&2 "\
223
+ WARNING: \`$1' $msg. You should only need it if
224
+ you modified a \`.y' file. You may need the \`Bison' package
225
+ in order for those modifications to take effect. You can get
226
+ \`Bison' from any GNU archive site."
227
+ rm -f y.tab.c y.tab.h
228
+ if test $# -ne 1; then
229
+ eval LASTARG="\${$#}"
230
+ case $LASTARG in
231
+ *.y)
232
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
233
+ if test -f "$SRCFILE"; then
234
+ cp "$SRCFILE" y.tab.c
235
+ fi
236
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
237
+ if test -f "$SRCFILE"; then
238
+ cp "$SRCFILE" y.tab.h
239
+ fi
240
+ ;;
241
+ esac
242
+ fi
243
+ if test ! -f y.tab.h; then
244
+ echo >y.tab.h
245
+ fi
246
+ if test ! -f y.tab.c; then
247
+ echo 'main() { return 0; }' >y.tab.c
248
+ fi
249
+ ;;
250
+
251
+ lex*|flex*)
252
+ echo 1>&2 "\
253
+ WARNING: \`$1' is $msg. You should only need it if
254
+ you modified a \`.l' file. You may need the \`Flex' package
255
+ in order for those modifications to take effect. You can get
256
+ \`Flex' from any GNU archive site."
257
+ rm -f lex.yy.c
258
+ if test $# -ne 1; then
259
+ eval LASTARG="\${$#}"
260
+ case $LASTARG in
261
+ *.l)
262
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
263
+ if test -f "$SRCFILE"; then
264
+ cp "$SRCFILE" lex.yy.c
265
+ fi
266
+ ;;
267
+ esac
268
+ fi
269
+ if test ! -f lex.yy.c; then
270
+ echo 'main() { return 0; }' >lex.yy.c
271
+ fi
272
+ ;;
273
+
274
+ help2man*)
275
+ echo 1>&2 "\
276
+ WARNING: \`$1' is $msg. You should only need it if
277
+ you modified a dependency of a manual page. You may need the
278
+ \`Help2man' package in order for those modifications to take
279
+ effect. You can get \`Help2man' from any GNU archive site."
280
+
281
+ file=`echo "$*" | sed -n "$sed_output"`
282
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
283
+ if test -f "$file"; then
284
+ touch $file
285
+ else
286
+ test -z "$file" || exec >$file
287
+ echo ".ab help2man is required to generate this page"
288
+ exit $?
289
+ fi
290
+ ;;
291
+
292
+ makeinfo*)
293
+ echo 1>&2 "\
294
+ WARNING: \`$1' is $msg. You should only need it if
295
+ you modified a \`.texi' or \`.texinfo' file, or any other file
296
+ indirectly affecting the aspect of the manual. The spurious
297
+ call might also be the consequence of using a buggy \`make' (AIX,
298
+ DU, IRIX). You might want to install the \`Texinfo' package or
299
+ the \`GNU make' package. Grab either from any GNU archive site."
300
+ # The file to touch is that specified with -o ...
301
+ file=`echo "$*" | sed -n "$sed_output"`
302
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
303
+ if test -z "$file"; then
304
+ # ... or it is the one specified with @setfilename ...
305
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
306
+ file=`sed -n '
307
+ /^@setfilename/{
308
+ s/.* \([^ ]*\) *$/\1/
309
+ p
310
+ q
311
+ }' $infile`
312
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
313
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
314
+ fi
315
+ # If the file does not exist, the user really needs makeinfo;
316
+ # let's fail without touching anything.
317
+ test -f $file || exit 1
318
+ touch $file
319
+ ;;
320
+
321
+ tar*)
322
+ shift
323
+
324
+ # We have already tried tar in the generic part.
325
+ # Look for gnutar/gtar before invocation to avoid ugly error
326
+ # messages.
327
+ if (gnutar --version > /dev/null 2>&1); then
328
+ gnutar "$@" && exit 0
329
+ fi
330
+ if (gtar --version > /dev/null 2>&1); then
331
+ gtar "$@" && exit 0
332
+ fi
333
+ firstarg="$1"
334
+ if shift; then
335
+ case $firstarg in
336
+ *o*)
337
+ firstarg=`echo "$firstarg" | sed s/o//`
338
+ tar "$firstarg" "$@" && exit 0
339
+ ;;
340
+ esac
341
+ case $firstarg in
342
+ *h*)
343
+ firstarg=`echo "$firstarg" | sed s/h//`
344
+ tar "$firstarg" "$@" && exit 0
345
+ ;;
346
+ esac
347
+ fi
348
+
349
+ echo 1>&2 "\
350
+ WARNING: I can't seem to be able to run \`tar' with the given arguments.
351
+ You may want to install GNU tar or Free paxutils, or check the
352
+ command line arguments."
353
+ exit 1
354
+ ;;
355
+
356
+ *)
357
+ echo 1>&2 "\
358
+ WARNING: \`$1' is needed, and is $msg.
359
+ You might have modified some files without having the
360
+ proper tools for further handling them. Check the \`README' file,
361
+ it often tells you about the needed prerequisites for installing
362
+ this package. You may also peek at any GNU archive site, in case
363
+ some other package would contain this missing \`$1' program."
364
+ exit 1
365
+ ;;
366
+ esac
367
+
368
+ exit 0
369
+
370
+ # Local variables:
371
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
372
+ # time-stamp-start: "scriptversion="
373
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
374
+ # time-stamp-time-zone: "UTC"
375
+ # time-stamp-end: "; # UTC"
376
+ # End:
@@ -0,0 +1,752 @@
1
+ #!/usr/bin/python
2
+
3
+ # Copyright (C) 2009 Sun Microsystems, Inc.
4
+ # Copyright (C) 2010, 2011 Monty Taylor
5
+ #
6
+ # This program is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; version 2 of the License.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
+
19
+ pandora_plugin_file = 'config/pandora-plugin.ini'
20
+
21
+ # Find plugins in the tree and add them to the build system
22
+
23
+ import ConfigParser, os, sys
24
+ import datetime, time
25
+ import subprocess
26
+
27
+ plugin_am_file=None
28
+ plugin_ac_file=None
29
+ plugin_doc_index=None
30
+
31
+ class ChangeProtectedFile(object):
32
+
33
+ def __init__(self, fname):
34
+ self.bogus_file= False
35
+ self.real_fname= fname
36
+ self.new_fname= "%s.new" % fname
37
+ try:
38
+ self.new_file= open(self.new_fname,'w+')
39
+ except IOError:
40
+ self.bogus_file= True
41
+
42
+ def write(self, text):
43
+ if not self.bogus_file:
44
+ self.new_file.write(text)
45
+
46
+ # We've written all of this out into .new files, now we only copy them
47
+ # over the old ones if they are different, so that we don't cause
48
+ # unnecessary recompiles
49
+ def close(self):
50
+ """Return True if the file had changed."""
51
+ if self.bogus_file:
52
+ return
53
+ self.new_file.seek(0)
54
+ new_content = self.new_file.read()
55
+ self.new_file.close()
56
+ try:
57
+ old_file = file(self.real_fname, 'r')
58
+ old_content = old_file.read()
59
+ old_file.close()
60
+ except IOError:
61
+ old_content = None
62
+ if new_content != old_content:
63
+ if old_content != None:
64
+ os.unlink(self.real_fname)
65
+ os.rename(self.new_fname, self.real_fname)
66
+ return True
67
+ else:
68
+ try:
69
+ os.unlink(self.new_fname)
70
+ except:
71
+ pass
72
+
73
+
74
+ def write_external_configure(plugin, plugin_file):
75
+ """Write the initial bits of the configure.ac file"""
76
+ if not os.path.exists('m4'):
77
+ os.mkdir('m4')
78
+ plugin_file.write("""
79
+ AC_PREREQ(2.59)dnl Minimum Autoconf version required.
80
+ AC_INIT([%(name)s],[%(version)s],[%(url)s])
81
+ AC_CONFIG_SRCDIR([%(main_source)s])
82
+ AC_CONFIG_AUX_DIR(config)
83
+
84
+ PANDORA_CANONICAL_TARGET(less-warnings, warnings-always-on, require-cxx, force-gcc42,skip-visibility)
85
+
86
+ PANDORA_REQUIRE_LIBPROTOBUF
87
+ PANDORA_PROTOBUF_REQUIRE_VERSION([2.1.0])
88
+ PANDORA_REQUIRE_PROTOC
89
+
90
+ AC_LANG_PUSH(C++)
91
+ PANDORA_REQUIRE_PTHREAD
92
+ PANDORA_REQUIRE_LIBDL
93
+ AC_LANG_POP
94
+
95
+ PANDORA_USE_BETTER_MALLOC
96
+
97
+ PANDORA_DRIZZLE_BUILD
98
+ """ % plugin)
99
+
100
+ write_plugin_ac(plugin, plugin_file)
101
+
102
+ plugin_file.write("""
103
+ AC_CONFIG_FILES(Makefile)
104
+
105
+ AC_OUTPUT
106
+
107
+ echo "---"
108
+ echo "Configuration summary for $PACKAGE_NAME version $VERSION $PANDORA_RELEASE_COMMENT"
109
+ echo ""
110
+ echo " * Installation prefix: $prefix"
111
+ echo " * System type: $host_vendor-$host_os"
112
+ echo " * Host CPU: $host_cpu"
113
+ echo " * C Compiler: $CC_VERSION"
114
+ echo " * C++ Compiler: $CXX_VERSION"
115
+ echo " * Debug enabled: $with_debug"
116
+ echo " * Warnings as failure: $ac_cv_warnings_as_errors"
117
+ echo " * C++ cstdint location: $ac_cv_cxx_cstdint"
118
+ echo " * C++ hash_map location: $ac_cv_cxx_hash_map"
119
+ echo " * C++ hash namespace: $ac_cv_cxx_hash_namespace"
120
+ echo " * C++ shared_ptr namespace: $ac_cv_shared_ptr_namespace"
121
+ echo ""
122
+ echo "---"
123
+
124
+ """ % plugin)
125
+
126
+ def write_external_makefile(plugin, plugin_file):
127
+
128
+ plugin_file.write("""
129
+ ACLOCAL_AMFLAGS = -I m4 --force
130
+ VERSION=$(PANDORA_RELEASE_VERSION)
131
+
132
+ pkgplugindir=%(pkgplugindir)s
133
+ EXTRA_DIST = plugin.ini
134
+
135
+ noinst_HEADERS=
136
+ nobase_include_HEADERS=
137
+ nobase_pkginclude_HEADERS=
138
+ check_PROGRAMS=
139
+ noinst_LTLIBRARIES=
140
+ bin_PROGRAMS=
141
+
142
+
143
+ """ % plugin)
144
+ if plugin['headers'] != "":
145
+ plugin_file.write("noinst_HEADERS += %(headers)s\n" % plugin)
146
+ if plugin['install_headers'] != "":
147
+ plugin_file.write("nobase_pkginclude_HEADERS += %(install_headers)s\n" % plugin)
148
+ if plugin['testsuite']:
149
+ if plugin.has_key('testsuitedir') and plugin['testsuitedir'] != "":
150
+ plugin_file.write("EXTRA_DIST += %(testsuitedir)s\n" % plugin)
151
+ plugin_file.write("""
152
+ pkgplugin_LTLIBRARIES=%(libname)s.la
153
+ %(libname)s_la_LDFLAGS=-avoid-version -rpath $(pkgplugindir) $(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
154
+ %(libname)s_la_LIBADD=%(libs)s
155
+ %(libname)s_la_DEPENDENCIES=%(libs)s
156
+ %(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_DYNAMIC_PLUGIN -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='%(author)s' -DPANDORA_MODULE_TITLE='%(title)s' -DPANDORA_MODULE_VERSION='%(version)s' -DPANDORA_MODULE_LICENSE=%(license)s %(cppflags)s
157
+ %(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
158
+ %(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
159
+ %(libname)s_la_SOURCES=%(sources)s
160
+ check_PROGRAMS += %(tests)s
161
+ """ % plugin)
162
+ plugin_am_file=os.path.join(plugin['rel_path'],'plugin.am')
163
+ if os.path.exists(plugin_am_file):
164
+ plugin_file.write('include %s\n' % plugin_am_file)
165
+
166
+ def write_external_plugin():
167
+ """Return True if the plugin had changed."""
168
+ plugin = read_plugin_ini('.')
169
+ expand_plugin_ini(plugin)
170
+ plugin_file = ChangeProtectedFile('configure.ac')
171
+ write_external_configure(plugin, plugin_file)
172
+ result = plugin_file.close()
173
+ plugin_file = ChangeProtectedFile('Makefile.am')
174
+ write_external_makefile(plugin, plugin_file)
175
+ # Write some stub configure.ac and Makefile.am files that include the above
176
+ result = plugin_file.close() or result
177
+ return result
178
+
179
+ def write_plugin(plugin, plugin_ini_list):
180
+ # Since this function is recursive, make sure we're not already in it.
181
+ if plugin.has_key('writing_status'):
182
+ if plugin['writing_status'] == 'done':
183
+ return
184
+ else:
185
+ print "Dependency loop detected with %s" % plugin['name']
186
+ exit(1)
187
+
188
+ plugin['writing_status'] = 'dependencies'
189
+
190
+ # Write all dependencies first to get around annoying automake bug
191
+ for dependency in plugin['dependency_list']:
192
+ found = False
193
+ for find_plugin in plugin_ini_list:
194
+ if find_plugin['module_name'] == dependency:
195
+ found = True
196
+ write_plugin(find_plugin, plugin_ini_list)
197
+ break
198
+ if found is False:
199
+ print "Could not find dependency %s: %s" % (plugin['name'], dependency)
200
+ exit(1)
201
+
202
+ write_plugin_ac(plugin, plugin_ac_file)
203
+ write_plugin_am(plugin, plugin_am_file)
204
+ write_plugin_docs(plugin, plugin_doc_index, plugin_am_file)
205
+ plugin['writing_status'] = 'done'
206
+
207
+ def write_plugin_docs(plugin, doc_index, plugin_am):
208
+ if plugin['docs'] is not None and os.path.isdir("docs/plugins"):
209
+ if not os.path.exists(os.path.join("docs/plugins",plugin["name"])):
210
+ os.symlink(os.path.abspath(plugin["docs"]), os.path.join("docs/plugins",plugin["name"]))
211
+ doc_index.write("""
212
+ %(name)s/index""" % plugin)
213
+ plugin_am.write("""
214
+ EXTRA_DIST+=${top_srcdir}/docs/plugins/%(name)s/*.rst
215
+ """ % plugin)
216
+
217
+ def write_plugin_ac(plugin, plugin_ac):
218
+ #
219
+ # Write plugin config instructions into plugin.ac file.
220
+ #
221
+ plugin_ac_file=os.path.join(plugin['rel_path'],'plugin.ac')
222
+ plugin_m4_dir=os.path.join(plugin['rel_path'],'m4')
223
+ plugin_m4_files=[]
224
+ if os.path.exists(plugin_m4_dir) and os.path.isdir(plugin_m4_dir):
225
+ for m4_file in os.listdir(plugin_m4_dir):
226
+ if os.path.splitext(m4_file)[-1] == '.m4':
227
+ plugin_m4_files.append(os.path.join(plugin['rel_path'], m4_file))
228
+ plugin_ac.write("""
229
+ dnl Config for %(title)s
230
+ """ % plugin)
231
+ for m4_file in plugin_m4_files:
232
+ plugin_ac.write('m4_sinclude([%s])\n' % m4_file)
233
+ plugin['plugin_dep_libs']=" ".join(["\${top_builddir}/%s" % f for f in plugin['libs'].split()])
234
+
235
+ plugin_ac.write("""
236
+ AC_ARG_WITH([%(name_with_dashes)s-plugin],[
237
+ dnl indented wierd to make the help output correct
238
+ AS_HELP_STRING([--with-%(name_with_dashes)s-plugin],[Build %(title)s. @<:@default=%(enabled)s@:>@])
239
+ AS_HELP_STRING([--without-%(name_with_dashes)s-plugin],[Disable building %(title)s])
240
+ ],[
241
+ with_%(name)s_plugin="$withval"
242
+ AS_IF([test "x$with_%(name)s_plugin" = "xyes"],[
243
+ requested_%(name)s_plugin="yes"
244
+ ],[
245
+ requested_%(name)s_plugin="no"
246
+ ])
247
+ ],[
248
+ with_%(name)s_plugin="%(enabled)s"
249
+ requested_%(name)s_plugin="no"
250
+ ])
251
+ AC_ARG_WITH([static-%(name_with_dashes)s-plugin],[
252
+ AS_HELP_STRING([--with-static-%(name_with_dashes)s-plugin],[Build Archive Storage Engine. @<:@default=%(static_yesno)s@:>@])
253
+ AS_HELP_STRING([--without-static-%(name_with_dashes)s-plugin],[Disable building Archive Storage Engine])
254
+ ],[
255
+ with_static_%(name)s_plugin=${withval}
256
+ ],[
257
+ with_static_%(name)s_plugin=%(static_yesno)s
258
+ ])
259
+ AS_IF([test "x${with_static_%(name)s_plugin}" = "xyes" -o "x${with_all_static}" = "xyes"],[
260
+ shared_%(name)s_plugin=no
261
+ ],[
262
+ shared_%(name)s_plugin=yes
263
+ ])
264
+ AC_ARG_ENABLE([%(name_with_dashes)s-plugin],[
265
+ dnl indented wierd to make the help output correct
266
+ AS_HELP_STRING([--enable-%(name_with_dashes)s-plugin],[Enable loading %(title)s by default. @<:@default=%(default_yesno)s@:>@])
267
+ AS_HELP_STRING([--disable-%(name_with_dashes)s-plugin],[Disable loading %(title)s by default.])
268
+ ],
269
+ [enable_%(name)s_plugin="$enableval"],
270
+ [enable_%(name)s_plugin=%(default_yesno)s])
271
+
272
+ """ % plugin)
273
+ if os.path.exists(plugin_ac_file):
274
+ plugin_ac.write('m4_sinclude([%s])\n' % plugin_ac_file)
275
+ # The plugin author has specified some check to make to determine
276
+ # if the plugin can be built. If the plugin is turned on and this
277
+ # check fails, then configure should error out. If the plugin is not
278
+ # turned on, then the normal conditional build stuff should just let
279
+ # it silently not build
280
+ if plugin['has_build_conditional']:
281
+ plugin_ac.write("""
282
+ AS_IF([test %(build_conditional)s],
283
+ [], dnl build_conditional can only negate
284
+ [
285
+ AS_IF([test "x${requested_%(name)s_plugin}" = "xyes"],
286
+ [AC_MSG_ERROR([Plugin %(name)s was explicitly requested, yet failed build dependency checks. Aborting!])])
287
+ with_%(name)s_plugin=no
288
+ ])
289
+
290
+ """ % plugin)
291
+ if not plugin['unconditional']:
292
+ plugin_ac.write("""
293
+ AM_CONDITIONAL([%(static_build_conditional_tag)s],
294
+ [test %(build_conditional)s -a ! %(shared_build)s])
295
+ AM_CONDITIONAL([%(shared_build_conditional_tag)s],
296
+ [test %(build_conditional)s -a %(shared_build)s])
297
+ AM_CONDITIONAL([%(build_conditional_tag)s],
298
+ [test %(build_conditional)s])
299
+ """ % plugin)
300
+
301
+ plugin_ac.write("""
302
+ AS_IF([test "x$with_%(name)s_plugin" = "xyes"],[
303
+ """ % plugin)
304
+ if plugin['testsuite']:
305
+ plugin_ac.write("""
306
+ pandora_plugin_test_list="%(name)s,${pandora_plugin_test_list}"
307
+ """ % plugin)
308
+ plugin_ac.write("""
309
+ AS_IF([test "x${with_static_%(name)s_plugin}" = "xyes" -o "x${with_all_static}" = "xyes"],[
310
+
311
+ AS_IF([test "x$enable_%(name)s_plugin" = "xyes"],[
312
+ pandora_builtin_load_list="%(module_name)s,${pandora_builtin_load_list}"
313
+ pandora_builtin_load_symbols_list="_drizzled_%(module_name)s_plugin_,${pandora_builtin_load_symbols_list}"
314
+ PANDORA_PLUGIN_DEP_LIBS="${PANDORA_PLUGIN_DEP_LIBS} %(plugin_dep_libs)s"
315
+ ])
316
+ pandora_builtin_list="%(module_name)s,${pandora_builtin_list}"
317
+ pandora_builtin_symbols_list="_drizzled_%(module_name)s_plugin_,${pandora_builtin_symbols_list}"
318
+ pandora_plugin_libs="${pandora_plugin_libs} \${top_builddir}/%(root_plugin_dir)s/%(libname)s.la"
319
+ ],[
320
+ AS_IF([test "x$enable_%(name)s_plugin" = "xyes"],[
321
+ pandora_default_plugin_list="%(name)s,${pandora_default_plugin_list}"
322
+ ])
323
+ ])
324
+ """ % plugin)
325
+ plugin_ac.write("])\n")
326
+
327
+ def fix_file_paths(plugin, files):
328
+ # TODO: determine path to plugin dir relative to top_srcdir... append it to
329
+ # source files if they don't already have it
330
+ new_files=""
331
+ if plugin['plugin_dir'] != ".":
332
+ for file in files.split():
333
+ if not file.startswith(plugin['rel_path']):
334
+ file= os.path.join(plugin['rel_path'], file)
335
+ new_files= "%s %s" % (new_files, file)
336
+ else:
337
+ new_files= " ".join(plugin['sources'].split())
338
+ if new_files != "":
339
+ return new_files
340
+ return files
341
+
342
+ def expand_plugin_ini(plugin):
343
+ if plugin['name'] == "**OUT-OF-TREE**":
344
+ print "Out of tree plugins require the name field to be specified in plugin.ini"
345
+ sys.exit(1)
346
+
347
+ if plugin['plugin_dir'] == ".":
348
+ plugin['rel_path']= plugin['plugin_dir']
349
+ plugin['unconditional']=True
350
+ else:
351
+ plugin['rel_path']= plugin['plugin_dir'][len(config['top_srcdir'])+len(os.path.sep):]
352
+ plugin['unconditional']=False
353
+
354
+ plugin['sources']= fix_file_paths(plugin, plugin['sources'])
355
+ plugin['main_source']= plugin['sources'].split()[0]
356
+ plugin['headers']= fix_file_paths(plugin, plugin['headers'])
357
+ plugin['install_headers']= fix_file_paths(plugin, plugin['install_headers'])
358
+ plugin['tests']= fix_file_paths(plugin, plugin['tests'])
359
+
360
+ # Make a yes/no version for autoconf help messages
361
+ if plugin['load_by_default']:
362
+ plugin['default_yesno']="yes"
363
+ else:
364
+ plugin['default_yesno']="no"
365
+
366
+ if plugin.has_key('extra_dist'):
367
+ plugin['extra_dist']=" ".join([os.path.join(plugin['rel_path'],f) for f in plugin['extra_dist'].split()])
368
+
369
+
370
+ if plugin['static']:
371
+ plugin['static_yesno']="yes"
372
+ else:
373
+ plugin['static_yesno']="no"
374
+ plugin['build_conditional_tag']= "BUILD_%s_PLUGIN" % plugin['name'].upper()
375
+ plugin['shared_build_conditional_tag']= "BUILD_%s_PLUGIN_SHARED" % plugin['name'].upper()
376
+ plugin['static_build_conditional_tag']= "BUILD_%s_PLUGIN_STATIC" % plugin['name'].upper()
377
+ plugin['name_with_dashes']= plugin['name'].replace('_','-')
378
+ if plugin.has_key('build_conditional'):
379
+ plugin['has_build_conditional']=True
380
+ plugin['build_conditional']='"x${with_%(name)s_plugin}" = "xyes" -a %(build_conditional)s' % plugin
381
+ else:
382
+ plugin['has_build_conditional']=False
383
+ plugin['build_conditional']='"x${with_%(name)s_plugin}" = "xyes"' %plugin
384
+ plugin['shared_build']='"x${shared_%(name)s_plugin}" = "xyes"' %plugin
385
+
386
+ if plugin['install']:
387
+ plugin['library_type']= 'pkgplugin'
388
+ else:
389
+ plugin['library_type']= 'noinst'
390
+
391
+ def find_testsuite(plugin_dir):
392
+ for testdir in ['drizzle-tests','tests']:
393
+ if os.path.isdir(os.path.join(plugin_dir,testdir)):
394
+ return testdir
395
+ if os.path.isdir(os.path.join('tests','suite',os.path.basename(plugin_dir))):
396
+ return ""
397
+ return None
398
+
399
+ def find_docs(plugin_dir):
400
+ if os.path.isfile(os.path.join(plugin_dir, "docs", "index.rst")):
401
+ return os.path.join(plugin_dir, "docs")
402
+
403
+ def read_plugin_ini(plugin_dir):
404
+ sources_default=""
405
+ if plugin_dir == ".":
406
+ plugin_name="**OUT-OF-TREE**"
407
+ module_name="**OUT-OF-TREE**"
408
+ else:
409
+ sources_default="%s.cc" % os.path.basename(plugin_dir)
410
+ plugin_name = plugin_dir[plugin_dir.index(config['root_plugin_dir']) + len(config['root_plugin_dir']) + 1:]
411
+ module_name = plugin_name.replace("/", config['module_name_separator']).replace("\\", config['module_name_separator'])
412
+ plugin_name = plugin_name.replace("/", config['plugin_name_separator']).replace("\\", config['plugin_name_separator'])
413
+
414
+
415
+ plugin_file= os.path.join(plugin_dir,config['plugin_ini_fname'])
416
+ plugin_defaults= dict(sources=sources_default,
417
+ headers="",
418
+ install_headers="",
419
+ cflags="",
420
+ cppflags="",
421
+ cxxflags="",
422
+ libs="",
423
+ ldflags="",
424
+ author="",
425
+ title="",
426
+ description="",
427
+ license="PLUGIN_LICENSE_GPL",
428
+ name=plugin_name,
429
+ module_name=module_name,
430
+ load_by_default=config['default_load_by_default'],
431
+ disabled="False",
432
+ static="False",
433
+ dependencies="",
434
+ dependency_aliases="",
435
+ tests="",
436
+ install=config['default_install'])
437
+ parser=ConfigParser.ConfigParser(defaults= plugin_defaults)
438
+ parser.read(plugin_file)
439
+ plugin=dict(parser.items('plugin'))
440
+ plugin['plugin_dir'] = plugin_dir
441
+ if plugin_dir == '.':
442
+ if not plugin.has_key('url'):
443
+ print "External Plugins are required to specifiy a url"
444
+ plugin['url']= 'http://launchpad.net/%(name)s' % plugin
445
+ sys.exit(1)
446
+ if plugin_dir == '.' and not plugin.has_key('version'):
447
+ print "External Plugins are required to specifiy a version"
448
+ sys.exit(1)
449
+ if not plugin.has_key('version'):
450
+ plugin['version'] = config['default_plugin_version']
451
+ if plugin.has_key('load_by_default'):
452
+ plugin['load_by_default']=parser.getboolean('plugin','load_by_default')
453
+ if plugin.has_key('disabled'):
454
+ plugin['disabled']=parser.getboolean('plugin','disabled')
455
+ if plugin['disabled']:
456
+ plugin['enabled']="no"
457
+ else:
458
+ plugin['enabled']="yes"
459
+ if plugin.has_key('static'):
460
+ try:
461
+ plugin['static']= parser.getboolean('plugin','static')
462
+ except:
463
+ if plugin['static'][:5] == os.sys.platform[:5]:
464
+ plugin['static']= True
465
+ else:
466
+ plugin['static']= False
467
+ if plugin.has_key('install'):
468
+ plugin['install']= parser.getboolean('plugin','install')
469
+ if plugin.has_key('testsuite'):
470
+ if plugin['testsuite'] == 'disable':
471
+ plugin['testsuite']= False
472
+ plugin['dist_testsuite']= find_testsuite(plugin_dir)
473
+ else:
474
+ plugin_testsuite= find_testsuite(plugin_dir)
475
+ plugin['testsuitedir']=plugin_testsuite
476
+ if plugin_testsuite is not None:
477
+ plugin['testsuite']=True
478
+ else:
479
+ plugin['testsuite']=False
480
+ plugin['docs']= find_docs(plugin_dir)
481
+
482
+ plugin['cflags']+= ' ' + config['extra_cflags']
483
+ plugin['cppflags']+= ' ' + config['extra_cppflags']
484
+ plugin['cxxflags']+= ' ' + config['extra_cxxflags']
485
+
486
+ plugin['libname']= "lib%s%s%s" % (config['plugin_prefix'],
487
+ plugin['name'],
488
+ config['plugin_suffix'])
489
+ if config['force_lowercase_libname']:
490
+ plugin['libname']= plugin['libname'].lower()
491
+
492
+ plugin['root_plugin_dir']= config['root_plugin_dir']
493
+ plugin['plugin_prefix']= config['plugin_prefix']
494
+ plugin['plugin_suffix']= config['plugin_suffix']
495
+ plugin['pkgplugindir']= config['pkgplugindir']
496
+
497
+ # Dependencies must have a module but dependency aliases are simply added
498
+ # to the variable passed during compile.
499
+ plugin['dependency_list'] = plugin['dependencies'].split()
500
+ dependency_aliases = plugin['dependency_aliases'].split()
501
+ plugin['dependencies'] = ','.join(plugin['dependency_list'] +
502
+ plugin['dependency_aliases'].split())
503
+ dependency_libs = ["%s/lib%s%s.la" % (config['root_plugin_dir'],
504
+ dependency.lower().replace('::', '_'),
505
+ config['plugin_suffix'])
506
+ for dependency in plugin['dependency_list']]
507
+ plugin['libs'] = " ".join(plugin['libs'].split() + dependency_libs);
508
+
509
+ # Libtool is going to expand:
510
+ # -DPANDORA_MODULE_AUTHOR='"Padraig O'"'"'Sullivan"'
511
+ # to:
512
+ # "-DPANDORA_MODULE_AUTHOR=\"Padraig O'Sullivan\""
513
+ # So we have to replace internal ''s to '"'"'
514
+ for key in ('author','title','description','version'):
515
+ plugin[key]=plugin[key].replace('"','\\"')
516
+ plugin[key]=plugin[key].replace("'","'\"'\"'")
517
+ return plugin
518
+
519
+
520
+ def write_plugin_am(plugin, plugin_am):
521
+ """Write an automake fragment for this plugin.
522
+
523
+ :param plugin: The plugin dict.
524
+ :param plugin_am: The file to write to.
525
+ """
526
+ # The .plugin.ini.stamp avoids changing the datestamp on plugin.ini which can
527
+ # confuse VCS systems.
528
+ plugin_am.write("""
529
+ EXTRA_DIST += %(rel_path)s/plugin.ini
530
+
531
+ # Prevent errors when a plugin dir is removed
532
+ %(rel_path)s/plugin.ini:
533
+
534
+ """ % plugin)
535
+ if plugin.has_key('extra_dist') and plugin['extra_dist'] != "":
536
+ plugin_am.write("EXTRA_DIST += %(extra_dist)s\n" % plugin)
537
+ if plugin['headers'] != "":
538
+ plugin_am.write("noinst_HEADERS += %(headers)s\n" % plugin)
539
+ if plugin['install_headers'] != "":
540
+ plugin_am.write("nobase_pkginclude_HEADERS += %(install_headers)s\n" % plugin)
541
+ if plugin['testsuite']:
542
+ if plugin.has_key('testsuitedir') and plugin['testsuitedir'] != "":
543
+ plugin_am.write("EXTRA_DIST += %(rel_path)s/%(testsuitedir)s\n" % plugin)
544
+ if plugin.has_key('dist_testsuite') and plugin['dist_testsuite'] != "":
545
+ plugin_am.write("EXTRA_DIST += %(rel_path)s/%(dist_testsuite)s\n" % plugin)
546
+ if plugin['docs'] is not None:
547
+ plugin_am.write("EXTRA_DIST += ${top_srcdir}/%(rel_path)s/docs/*.rst\n" % plugin)
548
+ plugin_am.write("""
549
+ %(root_plugin_dir)s_%(plugin_prefix)s%(name)s_dir=${top_srcdir}/%(rel_path)s
550
+ # Include sources in EXTRA_DIST because we might not build this, but we
551
+ # still want the sources to wind up in a tarball
552
+ EXTRA_DIST += %(rel_path)s/plugin.ini %(sources)s
553
+ if %(static_build_conditional_tag)s
554
+ noinst_LTLIBRARIES+=%(root_plugin_dir)s/%(libname)s.la
555
+ %(root_plugin_dir)s_%(libname)s_la_LIBADD=%(libs)s
556
+ %(root_plugin_dir)s_%(libname)s_la_DEPENDENCIES=%(libs)s
557
+ %(root_plugin_dir)s_%(libname)s_la_LDFLAGS=$(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
558
+ %(root_plugin_dir)s_%(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='%(author)s' -DPANDORA_MODULE_TITLE='%(title)s' -DPANDORA_MODULE_VERSION='%(version)s' -DPANDORA_MODULE_LICENSE=%(license)s -DPANDORA_MODULE_DEPENDENCIES='%(dependencies)s' %(cppflags)s
559
+ %(root_plugin_dir)s_%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
560
+ %(root_plugin_dir)s_%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
561
+ %(root_plugin_dir)s_%(libname)s_la_SOURCES=%(sources)s
562
+ check_PROGRAMS += %(tests)s
563
+ PANDORA_DYNAMIC_LDADDS+=${top_builddir}/%(root_plugin_dir)s/%(libname)s.la
564
+ endif
565
+ EXTRA_DIST += %(rel_path)s/plugin.ini
566
+ if %(shared_build_conditional_tag)s
567
+ %(library_type)s_LTLIBRARIES+=%(root_plugin_dir)s/%(libname)s.la
568
+ %(root_plugin_dir)s_%(libname)s_la_LDFLAGS=-avoid-version -rpath $(pkgplugindir) $(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
569
+ %(root_plugin_dir)s_%(libname)s_la_LIBADD=%(libs)s
570
+ %(root_plugin_dir)s_%(libname)s_la_DEPENDENCIES=%(libs)s
571
+ %(root_plugin_dir)s_%(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_DYNAMIC_PLUGIN -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='%(author)s' -DPANDORA_MODULE_TITLE='%(title)s' -DPANDORA_MODULE_VERSION='%(version)s' -DPANDORA_MODULE_LICENSE=%(license)s -DPANDORA_MODULE_DEPENDENCIES='%(dependencies)s' %(cppflags)s
572
+ %(root_plugin_dir)s_%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
573
+ %(root_plugin_dir)s_%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
574
+ %(root_plugin_dir)s_%(libname)s_la_SOURCES=%(sources)s
575
+ check_PROGRAMS += %(tests)s
576
+ endif
577
+ """ % plugin)
578
+ plugin_am_file=os.path.join(plugin['rel_path'],'plugin.am')
579
+ if os.path.exists(plugin_am_file):
580
+ plugin_am.write('include %s\n' % plugin_am_file)
581
+
582
+ #
583
+ # MAIN STARTS HERE:
584
+ #
585
+
586
+ # Parse the pandora-plugin config file
587
+
588
+ config_defaults= dict(
589
+ top_srcdir='.',
590
+ top_builddir='.',
591
+ plugin_ini_fname='plugin.ini',
592
+ plugin_prefix='',
593
+ plugin_suffix='',
594
+ extra_cflags='',
595
+ extra_cppflags='',
596
+ extra_cxxflags='',
597
+ root_plugin_dir='',
598
+ pkgplugindir='',
599
+ default_install='True',
600
+ default_plugin_version='',
601
+ default_load_by_default='False',
602
+ force_lowercase_libname='True',
603
+ plugin_name_separator='_',
604
+ module_name_separator='::'
605
+ )
606
+
607
+ config_parser = ConfigParser.ConfigParser(defaults=config_defaults)
608
+ config_parser.read(pandora_plugin_file)
609
+ config = dict(config_parser.items('pandora-plugin'))
610
+ config['force_lowercase_libname']=config_parser.getboolean('pandora-plugin','force_lowercase_libname')
611
+
612
+ # I'm 3 seconds away from writing a comprehensive build solution
613
+ if not os.path.exists('config/pandora_vc_revinfo'):
614
+ if os.path.exists('.bzr'):
615
+ bzr_revno= subprocess.Popen(["bzr", "revno"], stdout=subprocess.PIPE).communicate()[0].strip()
616
+ rev_date= datetime.date.fromtimestamp(time.time())
617
+ config['default_plugin_version'] = "%d.%02d.%s" % (rev_date.year, rev_date.month, bzr_revno)
618
+ else:
619
+ config['default_plugin_version']=datetime.date.fromtimestamp(time.time()).isoformat()
620
+ else:
621
+ # need to read config/pandora_vc_revno
622
+ pandora_vc_revno=open('config/pandora_vc_revinfo','r').read().split()
623
+ rev_date=""
624
+ bzr_revno=""
625
+ for revno_line in pandora_vc_revno:
626
+ (revno_key,revno_val)= revno_line.split("=")
627
+ if revno_key == 'PANDORA_VC_REVNO':
628
+ bzr_revno=revno_val.strip()
629
+ elif revno_key == 'PANDORA_RELEASE_DATE':
630
+ rev_date=revno_val.strip()
631
+
632
+ config['default_plugin_version'] = "%s.%s" % (rev_date, bzr_revno)
633
+
634
+ actions=[]
635
+ for arg in sys.argv:
636
+ if arg.startswith('--top_srcdir='):
637
+ config['top_srcdir']=arg[12:]
638
+ elif arg.startswith('--top_builddir='):
639
+ config['top_builddir']=arg[14:]
640
+ elif arg == "--force-all":
641
+ actions=['plugin-list','pandora-plugin.am','write']
642
+ break
643
+ else:
644
+ actions.append(arg)
645
+ if len(actions) == 0:
646
+ actions.append('write')
647
+
648
+ plugin_list=[]
649
+
650
+ def accumulate_plugins(arg, dirname, fnames):
651
+ # plugin_ini_fname is a name in dirname indicating dirname is a plugin.
652
+ if config['plugin_ini_fname'] in fnames:
653
+ arg.append(dirname)
654
+
655
+ os.path.walk(os.path.join(config['top_srcdir'],
656
+ config['root_plugin_dir']),
657
+ accumulate_plugins,
658
+ plugin_list)
659
+
660
+ if not os.path.exists("config/pandora-plugin.am") or "write" in actions:
661
+ plugin_am_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.am'))
662
+ plugin_am_file.write("""
663
+ # always the current list, generated every build so keep this lean.
664
+ # pandora-plugin.list: datestamp preserved list
665
+ ${srcdir}/config/pandora-plugin.list: .plugin.scan
666
+ .plugin.scan:
667
+ @cd ${top_srcdir} && python config/pandora-plugin plugin-list
668
+
669
+ # Plugins affect configure; so to prevent configure running twice in a tarball
670
+ # build (once up front, once with the right list of plugins, we ship the
671
+ # generated list of plugins and the housekeeping material for that list so it
672
+ # is likewise not updated.
673
+ EXTRA_DIST += \
674
+ config/pandora-plugin.am \
675
+ config/pandora-plugin.ac \
676
+ config/pandora-plugin \
677
+ config/pandora-plugin.ini
678
+
679
+
680
+ # Seed the list of plugin LDADDS which plugins may extend.
681
+ PANDORA_DYNAMIC_LDADDS=
682
+
683
+ # plugin.stamp: graph dominator for creating all per pandora-plugin.ac/am
684
+ # files. This is invoked when the code to generate such files has altered.""")
685
+
686
+ if not os.path.exists("config/pandora-plugin.ac") or "write" in actions:
687
+ plugin_ac_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.ac'))
688
+ plugin_ac_file.write("dnl Generated file, run make to rebuild\n")
689
+ plugin_ac_file.write("""
690
+ AC_ARG_WITH([all-static],[
691
+ AS_HELP_STRING([--with-all-static],[Link all plugins staticly into the server @<:@default=no@:>@])
692
+ ],[
693
+ with_all_static="$withval"
694
+ ],[
695
+ with_all_static=no
696
+ ])
697
+ """)
698
+
699
+ if os.path.exists("docs/plugins"):
700
+ if not os.path.exists("docs/plugins/list.rst") or "write" in actions:
701
+ plugin_doc_index = ChangeProtectedFile("docs/plugins/list.rst")
702
+ plugin_doc_index.write("""
703
+ Plugin Documentation
704
+ ====================
705
+
706
+ .. toctree::
707
+ :maxdepth: 2
708
+ """)
709
+
710
+
711
+ if os.path.exists('plugin.ini'):
712
+ # Are we in a plugin dir which wants to have a self-sufficient build system?
713
+ plugin_list=['.']
714
+
715
+ write_external_plugin()
716
+ else:
717
+ plugin_list_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.list'))
718
+ for p in plugin_list:
719
+ plugin_list_file.write(p)
720
+ plugin_list_file.write("\n")
721
+ plugin_list.sort()
722
+ plugin_list_file.close()
723
+
724
+ if not os.path.exists("config/pandora-plugin.am") or 'write' in actions:
725
+ plugin_am_file.write("\n${top_srcdir}/config/pandora-plugin.am: ${top_srcdir}/config/pandora-plugin.list ${top_srcdir}/config/pandora-plugin ")
726
+ for plugin_dir in plugin_list:
727
+ plugin_am_file.write("\\\n\t%s/plugin.ini " % plugin_dir)
728
+ plugin_am_file.write("\n\tcd ${top_srcdir} && python config/pandora-plugin write\n")
729
+ plugin_ini_list=[]
730
+
731
+ # Load all plugin.ini files first so we can do dependency tracking.
732
+ for plugin_dir in plugin_list:
733
+ plugin = read_plugin_ini(plugin_dir)
734
+ expand_plugin_ini(plugin)
735
+ plugin_ini_list.append(plugin)
736
+
737
+ # Check for duplicates
738
+ plugin_name_list = [plugin['libname'] for plugin in plugin_ini_list]
739
+ for plugin in plugin_ini_list:
740
+ if plugin_name_list.count(plugin['libname']) != 1:
741
+ print "Duplicate module name %s" % plugin['libname']
742
+ exit(1)
743
+
744
+ for plugin in plugin_ini_list:
745
+ write_plugin(plugin, plugin_ini_list)
746
+
747
+ if plugin_am_file is not None:
748
+ plugin_am_file.close()
749
+ if plugin_ac_file is not None:
750
+ plugin_ac_file.close()
751
+ if plugin_doc_index is not None:
752
+ plugin_doc_index.close()