origen 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (336) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ctags +0 -0
  3. data/bin/origen +165 -1
  4. data/bin/rgen +2 -0
  5. data/config/application.rb +141 -0
  6. data/config/commands.rb +72 -0
  7. data/config/development.rb +7 -0
  8. data/config/environment.rb +0 -0
  9. data/config/rgen.policy +7 -0
  10. data/config/rubocop/easy.yml +620 -0
  11. data/config/rubocop/easy_disabled.yml +271 -0
  12. data/config/rubocop/easy_enabled.yml +731 -0
  13. data/config/rubocop/strict.yml +620 -0
  14. data/config/rubocop/strict_disabled.yml +247 -0
  15. data/config/rubocop/strict_enabled.yml +755 -0
  16. data/config/users.rb +20 -0
  17. data/config/version.rb +1 -1
  18. data/helpers/url.rb +68 -0
  19. data/lib/c99/doc_interface.rb +56 -0
  20. data/lib/c99/j750_interface.rb +85 -0
  21. data/lib/c99/nvm.rb +89 -0
  22. data/lib/c99/target/mock2.rb +1 -0
  23. data/lib/c99/target/subdir/mock3.rb +1 -0
  24. data/lib/option_parser/optparse.rb +12 -0
  25. data/lib/origen/acronyms.rb +60 -0
  26. data/lib/origen/application/command_dispatcher.rb +12 -0
  27. data/lib/origen/application/configuration.rb +206 -0
  28. data/lib/origen/application/configuration_manager.rb +78 -0
  29. data/lib/origen/application/deployer.rb +367 -0
  30. data/lib/origen/application/environment.rb +186 -0
  31. data/lib/origen/application/lsf.rb +145 -0
  32. data/lib/origen/application/lsf_manager.rb +657 -0
  33. data/lib/origen/application/plugins_manager.rb +280 -0
  34. data/lib/origen/application/release.rb +359 -0
  35. data/lib/origen/application/runner.rb +246 -0
  36. data/lib/origen/application/statistics.rb +191 -0
  37. data/lib/origen/application/target.rb +374 -0
  38. data/lib/origen/application/version_tracker.rb +59 -0
  39. data/lib/origen/application/workspace_manager.rb +151 -0
  40. data/lib/origen/application.rb +746 -0
  41. data/lib/origen/bugs/bug.rb +36 -0
  42. data/lib/origen/bugs.rb +45 -0
  43. data/lib/origen/callbacks.rb +35 -0
  44. data/lib/origen/chip_mode.rb +118 -0
  45. data/lib/origen/chip_package.rb +461 -0
  46. data/lib/origen/client.rb +87 -0
  47. data/lib/origen/code_generators/actions.rb +258 -0
  48. data/lib/origen/code_generators/base.rb +57 -0
  49. data/lib/origen/code_generators/bundler.rb +17 -0
  50. data/lib/origen/code_generators/gem_setup.rb +49 -0
  51. data/lib/origen/code_generators/rake.rb +13 -0
  52. data/lib/origen/code_generators/rspec.rb +12 -0
  53. data/lib/origen/code_generators/semver.rb +39 -0
  54. data/lib/origen/code_generators/timever.rb +37 -0
  55. data/lib/origen/code_generators.rb +111 -0
  56. data/lib/origen/commands/add.rb +12 -0
  57. data/lib/origen/commands/compile.rb +62 -0
  58. data/lib/origen/commands/ctags.rb +9 -0
  59. data/lib/origen/commands/dispatch.rb +22 -0
  60. data/lib/origen/commands/environment.rb +11 -0
  61. data/lib/origen/commands/fetch.rb +63 -0
  62. data/lib/origen/commands/generate.rb +130 -0
  63. data/lib/origen/commands/interactive.rb +73 -0
  64. data/lib/origen/commands/lint.rb +82 -0
  65. data/lib/origen/commands/lsf.rb +93 -0
  66. data/lib/origen/commands/merge.rb +55 -0
  67. data/lib/origen/commands/modifications.rb +12 -0
  68. data/lib/origen/commands/new.rb +113 -0
  69. data/lib/origen/commands/plugin.rb +105 -0
  70. data/lib/origen/commands/program.rb +70 -0
  71. data/lib/origen/commands/rc.rb +442 -0
  72. data/lib/origen/commands/save.rb +56 -0
  73. data/lib/origen/commands/target.rb +27 -0
  74. data/lib/origen/commands/time.rb +127 -0
  75. data/lib/origen/commands/version.rb +17 -0
  76. data/lib/origen/commands/web.rb +221 -0
  77. data/lib/origen/commands.rb +272 -0
  78. data/lib/origen/commands_global.rb +76 -0
  79. data/lib/origen/controller.rb +94 -0
  80. data/lib/origen/core_ext/array.rb +23 -0
  81. data/lib/origen/core_ext/bignum.rb +36 -0
  82. data/lib/origen/core_ext/enumerable.rb +76 -0
  83. data/lib/origen/core_ext/fixnum.rb +46 -0
  84. data/lib/origen/core_ext/hash.rb +52 -0
  85. data/lib/origen/core_ext/module.rb +14 -0
  86. data/lib/origen/core_ext/numeric.rb +126 -0
  87. data/lib/origen/core_ext/object.rb +13 -0
  88. data/lib/origen/core_ext/range.rb +7 -0
  89. data/lib/origen/core_ext/string.rb +124 -0
  90. data/lib/origen/core_ext.rb +10 -0
  91. data/lib/origen/database/key_value_store.rb +111 -0
  92. data/lib/origen/database/key_value_stores.rb +108 -0
  93. data/lib/origen/database.rb +6 -0
  94. data/lib/origen/encodings.rb +102 -0
  95. data/lib/origen/features/feature.rb +22 -0
  96. data/lib/origen/features.rb +104 -0
  97. data/lib/origen/file_handler.rb +429 -0
  98. data/lib/origen/generator/comparator.rb +56 -0
  99. data/lib/origen/generator/compiler.rb +277 -0
  100. data/lib/origen/generator/flow.rb +49 -0
  101. data/lib/origen/generator/job.rb +131 -0
  102. data/lib/origen/generator/pattern.rb +356 -0
  103. data/lib/origen/generator/pattern_finder.rb +155 -0
  104. data/lib/origen/generator/pattern_iterator.rb +55 -0
  105. data/lib/origen/generator/renderer.rb +113 -0
  106. data/lib/origen/generator/resources.rb +40 -0
  107. data/lib/origen/generator/stage.rb +89 -0
  108. data/lib/origen/generator.rb +85 -0
  109. data/lib/origen/global_methods.rb +205 -0
  110. data/lib/origen/import_manager.rb +596 -0
  111. data/lib/origen/location/base.rb +116 -0
  112. data/lib/origen/location/map.rb +83 -0
  113. data/lib/origen/location.rb +6 -0
  114. data/lib/origen/log.rb +217 -0
  115. data/lib/origen/logger_methods.rb +56 -0
  116. data/lib/origen/mode.rb +61 -0
  117. data/lib/origen/model.rb +267 -0
  118. data/lib/origen/model_initializer.rb +45 -0
  119. data/lib/origen/nvm/block_array.rb +72 -0
  120. data/lib/origen/nvm.rb +6 -0
  121. data/lib/origen/parameters/live.rb +22 -0
  122. data/lib/origen/parameters/missing.rb +28 -0
  123. data/lib/origen/parameters/set.rb +144 -0
  124. data/lib/origen/parameters.rb +107 -0
  125. data/lib/origen/pdm.rb +218 -0
  126. data/lib/origen/pins/function_proxy.rb +36 -0
  127. data/lib/origen/pins/ground_pin.rb +6 -0
  128. data/lib/origen/pins/pin.rb +860 -0
  129. data/lib/origen/pins/pin_bank.rb +349 -0
  130. data/lib/origen/pins/pin_clock.rb +124 -0
  131. data/lib/origen/pins/pin_collection.rb +492 -0
  132. data/lib/origen/pins/pin_common.rb +206 -0
  133. data/lib/origen/pins/port.rb +268 -0
  134. data/lib/origen/pins/power_pin.rb +30 -0
  135. data/lib/origen/pins.rb +696 -0
  136. data/lib/origen/registers/bit.rb +562 -0
  137. data/lib/origen/registers/bit_collection.rb +787 -0
  138. data/lib/origen/registers/container.rb +288 -0
  139. data/lib/origen/registers/domain.rb +16 -0
  140. data/lib/origen/registers/reg.rb +1406 -0
  141. data/lib/origen/registers/reg_collection.rb +24 -0
  142. data/lib/origen/registers.rb +652 -0
  143. data/lib/origen/regression_manager.rb +251 -0
  144. data/lib/origen/remote_manager.rb +340 -0
  145. data/lib/origen/revision_control/base.rb +257 -0
  146. data/lib/origen/revision_control/design_sync.rb +276 -0
  147. data/lib/origen/revision_control/git.rb +243 -0
  148. data/lib/origen/revision_control/subversion.rb +6 -0
  149. data/lib/origen/revision_control.rb +44 -0
  150. data/lib/origen/ruby_version_check.rb +131 -0
  151. data/lib/origen/site_config.rb +61 -0
  152. data/lib/origen/specs/checkers.rb +103 -0
  153. data/lib/origen/specs/creation_info.rb +17 -0
  154. data/lib/origen/specs/doc_resource.rb +91 -0
  155. data/lib/origen/specs/exhibit.rb +17 -0
  156. data/lib/origen/specs/mode_select.rb +16 -0
  157. data/lib/origen/specs/note.rb +17 -0
  158. data/lib/origen/specs/override.rb +21 -0
  159. data/lib/origen/specs/power_supply.rb +13 -0
  160. data/lib/origen/specs/spec.rb +226 -0
  161. data/lib/origen/specs/version_history.rb +14 -0
  162. data/lib/origen/specs.rb +552 -0
  163. data/lib/origen/sub_blocks.rb +298 -0
  164. data/lib/origen/tester/api.rb +277 -0
  165. data/lib/origen/tester/bdm/bdm.rb +25 -0
  166. data/lib/origen/tester/command_based_tester.rb +46 -0
  167. data/lib/origen/tester/doc/doc.rb +226 -0
  168. data/lib/origen/tester/doc/generator/flow.rb +71 -0
  169. data/lib/origen/tester/doc/generator/flow_line.rb +203 -0
  170. data/lib/origen/tester/doc/generator/test.rb +68 -0
  171. data/lib/origen/tester/doc/generator/test_group.rb +66 -0
  172. data/lib/origen/tester/doc/generator/tests.rb +47 -0
  173. data/lib/origen/tester/doc/generator.rb +126 -0
  174. data/lib/origen/tester/doc/model.rb +162 -0
  175. data/lib/origen/tester/generator/flow_control_api.rb +606 -0
  176. data/lib/origen/tester/generator/identity_map.rb +25 -0
  177. data/lib/origen/tester/generator/placeholder.rb +13 -0
  178. data/lib/origen/tester/generator/test_numberer.rb +25 -0
  179. data/lib/origen/tester/generator.rb +271 -0
  180. data/lib/origen/tester/interface.rb +154 -0
  181. data/lib/origen/tester/j750/files.rb +45 -0
  182. data/lib/origen/tester/j750/generator/flow.rb +123 -0
  183. data/lib/origen/tester/j750/generator/flow_line.rb +288 -0
  184. data/lib/origen/tester/j750/generator/patgroup.rb +111 -0
  185. data/lib/origen/tester/j750/generator/patgroups.rb +41 -0
  186. data/lib/origen/tester/j750/generator/patset.rb +111 -0
  187. data/lib/origen/tester/j750/generator/patsets.rb +41 -0
  188. data/lib/origen/tester/j750/generator/templates/flow.txt.erb +9 -0
  189. data/lib/origen/tester/j750/generator/templates/instances.txt.erb +16 -0
  190. data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +8 -0
  191. data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +10 -0
  192. data/lib/origen/tester/j750/generator/test_instance.rb +846 -0
  193. data/lib/origen/tester/j750/generator/test_instance_group.rb +60 -0
  194. data/lib/origen/tester/j750/generator/test_instances.rb +182 -0
  195. data/lib/origen/tester/j750/generator.rb +203 -0
  196. data/lib/origen/tester/j750/j750.rb +845 -0
  197. data/lib/origen/tester/j750/j750_hpt.rb +35 -0
  198. data/lib/origen/tester/j750/parser/ac_spec.rb +11 -0
  199. data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
  200. data/lib/origen/tester/j750/parser/dc_spec.rb +36 -0
  201. data/lib/origen/tester/j750/parser/dc_specs.rb +50 -0
  202. data/lib/origen/tester/j750/parser/descriptions.rb +340 -0
  203. data/lib/origen/tester/j750/parser/flow.rb +111 -0
  204. data/lib/origen/tester/j750/parser/flow_line.rb +207 -0
  205. data/lib/origen/tester/j750/parser/flows.rb +23 -0
  206. data/lib/origen/tester/j750/parser/pattern_set.rb +94 -0
  207. data/lib/origen/tester/j750/parser/pattern_sets.rb +33 -0
  208. data/lib/origen/tester/j750/parser/test_instance.rb +322 -0
  209. data/lib/origen/tester/j750/parser/test_instances.rb +26 -0
  210. data/lib/origen/tester/j750/parser/timeset.rb +15 -0
  211. data/lib/origen/tester/j750/parser/timesets.rb +0 -0
  212. data/lib/origen/tester/j750/parser.rb +104 -0
  213. data/lib/origen/tester/jlink/jlink.rb +33 -0
  214. data/lib/origen/tester/parser/description_lookup.rb +64 -0
  215. data/lib/origen/tester/parser/searchable_array.rb +32 -0
  216. data/lib/origen/tester/parser/searchable_hash.rb +32 -0
  217. data/lib/origen/tester/parser.rb +24 -0
  218. data/lib/origen/tester/time.rb +338 -0
  219. data/lib/origen/tester/timing.rb +253 -0
  220. data/lib/origen/tester/ultraflex/files.rb +45 -0
  221. data/lib/origen/tester/ultraflex/generator/flow.rb +119 -0
  222. data/lib/origen/tester/ultraflex/generator/flow_line.rb +269 -0
  223. data/lib/origen/tester/ultraflex/generator/patgroup.rb +111 -0
  224. data/lib/origen/tester/ultraflex/generator/patgroups.rb +41 -0
  225. data/lib/origen/tester/ultraflex/generator/patset.rb +111 -0
  226. data/lib/origen/tester/ultraflex/generator/patsets.rb +41 -0
  227. data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +9 -0
  228. data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +16 -0
  229. data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +8 -0
  230. data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +10 -0
  231. data/lib/origen/tester/ultraflex/generator/test_instance.rb +622 -0
  232. data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +60 -0
  233. data/lib/origen/tester/ultraflex/generator/test_instances.rb +174 -0
  234. data/lib/origen/tester/ultraflex/generator.rb +200 -0
  235. data/lib/origen/tester/ultraflex/parser/ac_spec.rb +11 -0
  236. data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
  237. data/lib/origen/tester/ultraflex/parser/dc_spec.rb +36 -0
  238. data/lib/origen/tester/ultraflex/parser/dc_specs.rb +50 -0
  239. data/lib/origen/tester/ultraflex/parser/descriptions.rb +342 -0
  240. data/lib/origen/tester/ultraflex/parser/flow.rb +111 -0
  241. data/lib/origen/tester/ultraflex/parser/flow_line.rb +207 -0
  242. data/lib/origen/tester/ultraflex/parser/flows.rb +23 -0
  243. data/lib/origen/tester/ultraflex/parser/pattern_set.rb +94 -0
  244. data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +33 -0
  245. data/lib/origen/tester/ultraflex/parser/test_instance.rb +262 -0
  246. data/lib/origen/tester/ultraflex/parser/test_instances.rb +26 -0
  247. data/lib/origen/tester/ultraflex/parser/timeset.rb +15 -0
  248. data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
  249. data/lib/origen/tester/ultraflex/parser.rb +104 -0
  250. data/lib/origen/tester/ultraflex/ultraflex.rb +759 -0
  251. data/lib/origen/tester/v93k/generator/flow.rb +63 -0
  252. data/lib/origen/tester/v93k/generator/flow_node/print.rb +10 -0
  253. data/lib/origen/tester/v93k/generator/flow_node.rb +17 -0
  254. data/lib/origen/tester/v93k/generator/pattern.rb +16 -0
  255. data/lib/origen/tester/v93k/generator/pattern_master.rb +54 -0
  256. data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +6 -0
  257. data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +11 -0
  258. data/lib/origen/tester/v93k/generator/templates/template.flow.erb +121 -0
  259. data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +9 -0
  260. data/lib/origen/tester/v93k/generator/test_function.rb +103 -0
  261. data/lib/origen/tester/v93k/generator/test_functions.rb +79 -0
  262. data/lib/origen/tester/v93k/generator/test_method.rb +46 -0
  263. data/lib/origen/tester/v93k/generator/test_methods.rb +75 -0
  264. data/lib/origen/tester/v93k/generator/test_suite.rb +54 -0
  265. data/lib/origen/tester/v93k/generator/test_suites.rb +65 -0
  266. data/lib/origen/tester/v93k/generator.rb +80 -0
  267. data/lib/origen/tester/v93k/v93k.rb +420 -0
  268. data/lib/origen/tester/vector.rb +86 -0
  269. data/lib/origen/tester/vector_generator.rb +633 -0
  270. data/lib/origen/tester/vector_pipeline.rb +150 -0
  271. data/lib/origen/tester.rb +56 -0
  272. data/lib/origen/top_level.rb +134 -0
  273. data/lib/origen/users/ldap.rb +65 -0
  274. data/lib/origen/users/user.rb +149 -0
  275. data/lib/origen/users.rb +30 -0
  276. data/lib/origen/utility/block_args.rb +93 -0
  277. data/lib/origen/utility/csv_data.rb +110 -0
  278. data/lib/origen/utility/design_sync.rb +494 -0
  279. data/lib/origen/utility/diff.rb +158 -0
  280. data/lib/origen/utility/input_capture.rb +121 -0
  281. data/lib/origen/utility/mailer.rb +143 -0
  282. data/lib/origen/utility/s_record.rb +205 -0
  283. data/lib/origen/utility/time_and_date.rb +30 -0
  284. data/lib/origen/utility.rb +12 -0
  285. data/lib/origen/version_checker.rb +117 -0
  286. data/lib/origen/version_string.rb +356 -0
  287. data/lib/origen.rb +648 -0
  288. data/lib/tasks/gem.rake +27 -22
  289. data/origen_site_config.yml +36 -0
  290. data/source_setup +17 -0
  291. data/spec/format/rgen_formatter.rb +14 -0
  292. data/templates/api_doc/README.txt.erb +24 -0
  293. data/templates/code_generators/gemfile_app.rb +4 -0
  294. data/templates/code_generators/gemfile_plugin.rb +6 -0
  295. data/templates/code_generators/gemspec.rb +33 -0
  296. data/templates/code_generators/rakefile.rb +10 -0
  297. data/templates/code_generators/spec_helper.rb +49 -0
  298. data/templates/code_generators/version.rb +8 -0
  299. data/templates/code_generators/version_time.rb +3 -0
  300. data/templates/git/gitignore.erb +33 -0
  301. data/templates/j750/_vt_flow.txt.erb +8 -0
  302. data/templates/j750/_vt_instances.txt.erb +4 -0
  303. data/templates/j750/program_sheet.txt.erb +9 -0
  304. data/templates/nanoc/Rules +74 -0
  305. data/templates/nanoc/config.yaml +77 -0
  306. data/templates/nanoc/content/favicon.ico +0 -0
  307. data/templates/nanoc/layouts/bootstrap.html.erb +63 -0
  308. data/templates/nanoc/layouts/bootstrap3.html.erb +71 -0
  309. data/templates/nanoc/layouts/freescale.html.erb +79 -0
  310. data/templates/nanoc/lib/bootstrap_filter.rb +49 -0
  311. data/templates/nanoc/lib/codeblocks_filter.rb +41 -0
  312. data/templates/nanoc/lib/default.rb +2 -0
  313. data/templates/nanoc/lib/gzip_filter.rb +16 -0
  314. data/templates/nanoc/lib/haml_code_filter.rb +41 -0
  315. data/templates/nanoc/lib/helpers.rb +1 -0
  316. data/templates/nanoc/lib/search_filter.rb +62 -0
  317. data/templates/nanoc_dynamic/content/search.js.erb +92 -0
  318. data/templates/shared/web/_logo.html +10 -0
  319. data/templates/test/_inline_sub.txt.erb +2 -0
  320. data/templates/test/environment.txt.erb +1 -0
  321. data/templates/test/inline.txt.erb +11 -0
  322. data/templates/test/inspections.txt.erb +19 -0
  323. data/templates/test/set1/_sub1.txt.erb +12 -0
  324. data/templates/test/set1/_sub4.txt.erb +1 -0
  325. data/templates/test/set1/_sub5.txt.erb +1 -0
  326. data/templates/test/set1/main.txt.erb +53 -0
  327. data/templates/test/set1/sub_dir/_sub2.txt.erb +20 -0
  328. data/templates/test/set1/sub_dir/_sub3.txt.erb +12 -0
  329. data/templates/test/set1/sub_dir/main2.txt.erb +4 -0
  330. data/templates/test/set2/template_with_no_erb_1.txt +9 -0
  331. data/templates/test/set2/template_with_no_erb_2.txt +9 -0
  332. data/templates/test/set3/_layout.html.erb +4 -0
  333. data/templates/test/set3/content.html.erb +6 -0
  334. data/templates/time/filter.rb.erb +15 -0
  335. data/templates/time/rules.rb.erb +45 -0
  336. metadata +639 -5
@@ -0,0 +1,258 @@
1
+ require 'open-uri'
2
+ require 'rbconfig'
3
+
4
+ module Origen
5
+ module CodeGenerators
6
+ module Actions
7
+ def initialize(*args) # :nodoc:
8
+ if args.last.is_a?(Hash)
9
+ @config = args.last.delete(:config) || {}
10
+ end
11
+ super
12
+ @in_group = nil
13
+ end
14
+
15
+ def config
16
+ @config
17
+ end
18
+
19
+ # Removes (comments out) the specified configuration setting from +config/application.rb+
20
+ #
21
+ # comment_config :semantically_version
22
+ def comment_config(*args)
23
+ options = args.extract_options!
24
+ name = args.first.to_s
25
+
26
+ # Set the message to be shown in logs
27
+ log :comment, name
28
+
29
+ file = File.join(Origen.root, 'config', 'application.rb')
30
+ comment_lines(file, /^\s*config.#{name}\s*=.*\n/)
31
+ end
32
+
33
+ # Adds an entry into +config/application.rb+
34
+ def add_config(*args)
35
+ options = args.extract_options!
36
+ name, value = args
37
+
38
+ # Set the message to be shown in logs
39
+ message = name.to_s
40
+ if value ||= options.delete(:value)
41
+ message << " (#{value})"
42
+ end
43
+ log :insert, message
44
+
45
+ file = File.join(Origen.root, 'config', 'application.rb')
46
+ value = quote(value) if value.is_a?(String)
47
+ value = ":#{value}" if value.is_a?(Symbol)
48
+ insert_into_file file, " config.#{name} = #{value}\n\n", after: /^\s*class.*\n/
49
+ end
50
+
51
+ # Adds an entry into +Gemfile+ for the supplied gem.
52
+ #
53
+ # gem "rspec", group: :test
54
+ # gem "technoweenie-restful-authentication", lib: "restful-authentication", source: "http://gems.github.com/"
55
+ # gem "rails", "3.0", git: "git://github.com/rails/rails"
56
+ def gem(*args)
57
+ options = args.extract_options!
58
+ name, version = args
59
+
60
+ # Set the message to be shown in logs. Uses the git repo if one is given,
61
+ # otherwise use name (version).
62
+ parts, message = [quote(name)], name
63
+ if version ||= options.delete(:version)
64
+ parts << quote(version)
65
+ message << " (#{version})"
66
+ end
67
+ message = options[:git] if options[:git]
68
+
69
+ log :gemfile, message
70
+
71
+ options.each do |option, value|
72
+ parts << "#{option}: #{quote(value)}"
73
+ end
74
+
75
+ in_root do
76
+ str = "gem #{parts.join(', ')}"
77
+ str = ' ' + str if @in_group
78
+ str = "\n" + str
79
+ append_file 'Gemfile', str, verbose: false
80
+ end
81
+ end
82
+
83
+ # Wraps gem entries inside a group.
84
+ #
85
+ # gem_group :development, :test do
86
+ # gem "rspec-rails"
87
+ # end
88
+ def gem_group(*names, &block)
89
+ name = names.map(&:inspect).join(', ')
90
+ log :gemfile, "group #{name}"
91
+
92
+ in_root do
93
+ append_file 'Gemfile', "\ngroup #{name} do", force: true
94
+
95
+ @in_group = true
96
+ instance_eval(&block)
97
+ @in_group = false
98
+
99
+ append_file 'Gemfile', "\nend\n", force: true
100
+ end
101
+ end
102
+
103
+ # Add the given source to +Gemfile+
104
+ #
105
+ # add_source "http://gems.github.com/"
106
+ def add_source(source, _options = {})
107
+ log :source, source
108
+
109
+ in_root do
110
+ prepend_file 'Gemfile', "source #{quote(source)}\n", verbose: false
111
+ end
112
+ end
113
+
114
+ # Adds a line inside the Application class for <tt>config/application.rb</tt>.
115
+ #
116
+ # If options <tt>:env</tt> is specified, the line is appended to the corresponding
117
+ # file in <tt>config/environments</tt>.
118
+ #
119
+ # environment do
120
+ # "config.autoload_paths += %W(#{config.root}/extras)"
121
+ # end
122
+ #
123
+ # environment(nil, env: "development") do
124
+ # "config.autoload_paths += %W(#{config.root}/extras)"
125
+ # end
126
+ def environment(data = nil, options = {})
127
+ sentinel = /class [a-z_:]+ < Rails::Application/i
128
+ env_file_sentinel = /Rails\.application\.configure do/
129
+ data = yield if !data && block_given?
130
+
131
+ in_root do
132
+ if options[:env].nil?
133
+ inject_into_file 'config/application.rb', "\n #{data}", after: sentinel, verbose: false
134
+ else
135
+ Array(options[:env]).each do |env|
136
+ inject_into_file "config/environments/#{env}.rb", "\n #{data}", after: env_file_sentinel, verbose: false
137
+ end
138
+ end
139
+ end
140
+ end
141
+ alias_method :application, :environment
142
+
143
+ # Run a command in git.
144
+ #
145
+ # git :init
146
+ # git add: "this.file that.rb"
147
+ # git add: "onefile.rb", rm: "badfile.cxx"
148
+ def git(commands = {})
149
+ if commands.is_a?(Symbol)
150
+ run "git #{commands}"
151
+ else
152
+ commands.each do |cmd, options|
153
+ run "git #{cmd} #{options}"
154
+ end
155
+ end
156
+ end
157
+
158
+ # Create a new file in the lib/ directory. Code can be specified
159
+ # in a block or a data string can be given.
160
+ #
161
+ # lib("crypto.rb") do
162
+ # "crypted_special_value = '#{rand}--#{Time.now}--#{rand(1337)}--'"
163
+ # end
164
+ #
165
+ # lib("foreign.rb", "# Foreign code is fun")
166
+ def lib(filename, data = nil, &block)
167
+ log :lib, filename
168
+ create_file("lib/#{filename}", data, verbose: false, &block)
169
+ end
170
+
171
+ # Create a new +Rakefile+ with the provided code (either in a block or a string).
172
+ #
173
+ # rakefile("bootstrap.rake") do
174
+ # project = ask("What is the UNIX name of your project?")
175
+ #
176
+ # <<-TASK
177
+ # namespace :#{project} do
178
+ # task :bootstrap do
179
+ # puts "I like boots!"
180
+ # end
181
+ # end
182
+ # TASK
183
+ # end
184
+ #
185
+ # rakefile('seed.rake', 'puts "Planting seeds"')
186
+ def rakefile(filename, data = nil, &block)
187
+ log :rakefile, filename
188
+ create_file("lib/tasks/#{filename}", data, verbose: false, &block)
189
+ end
190
+
191
+ # Generate something using a generator from Rails or a plugin.
192
+ # The second parameter is the argument string that is passed to
193
+ # the generator or an Array that is joined.
194
+ #
195
+ # generate(:authenticated, "user session")
196
+ def generate(what, *args)
197
+ log :generate, what
198
+ argument = args.flat_map(&:to_s).join(' ')
199
+
200
+ in_root { run_ruby_script("bin/rails generate #{what} #{argument}", verbose: false) }
201
+ end
202
+
203
+ # Runs the supplied rake task
204
+ #
205
+ # rake("db:migrate")
206
+ # rake("db:migrate", env: "production")
207
+ # rake("gems:install", sudo: true)
208
+ def rake(command, options = {})
209
+ log :rake, command
210
+ env = options[:env] || ENV['RAILS_ENV'] || 'development'
211
+ sudo = options[:sudo] && RbConfig::CONFIG['host_os'] !~ /mswin|mingw/ ? 'sudo ' : ''
212
+ in_root { run("#{sudo}#{extify(:rake)} #{command} RAILS_ENV=#{env}", verbose: false) }
213
+ end
214
+
215
+ # Reads the given file at the source root and prints it in the console.
216
+ #
217
+ # readme "README"
218
+ def readme(path)
219
+ log File.read(find_in_source_paths(path))
220
+ end
221
+
222
+ protected
223
+
224
+ # Define log for backwards compatibility. If just one argument is sent,
225
+ # invoke say, otherwise invoke say_status. Differently from say and
226
+ # similarly to say_status, this method respects the quiet? option given.
227
+ def log(*args)
228
+ if args.size == 1
229
+ say args.first.to_s unless options.quiet?
230
+ else
231
+ args << (behavior == :invoke ? :green : :red)
232
+ say_status(*args)
233
+ end
234
+ end
235
+
236
+ # Add an extension to the given name based on the platform.
237
+ def extify(name)
238
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
239
+ "#{name}.bat"
240
+ else
241
+ name
242
+ end
243
+ end
244
+
245
+ # Surround string with single quotes if there is no quotes.
246
+ # Otherwise fall back to double quotes
247
+ def quote(value)
248
+ return value.inspect unless value.is_a? String
249
+
250
+ if value.include?("'")
251
+ value.inspect
252
+ else
253
+ "'#{value}'"
254
+ end
255
+ end
256
+ end
257
+ end
258
+ end
@@ -0,0 +1,57 @@
1
+ require 'thor/group'
2
+ module Origen
3
+ module CodeGenerators
4
+ class Error < Thor::Error # :nodoc:
5
+ end
6
+
7
+ class Base < Thor::Group
8
+ include Thor::Actions
9
+ include Origen::CodeGenerators::Actions
10
+
11
+ add_runtime_options!
12
+ strict_args_position!
13
+
14
+ # Convenience method to get the top-level namespace from the class name.
15
+ # It is returned as a lower cased and underscored string.
16
+ def self.namespace(name = nil)
17
+ @namespace ||= begin
18
+ names = super.split(':')
19
+ if names.size == 1
20
+ nil
21
+ else
22
+ names.first.sub(/^r_gen/, 'origen')
23
+ end
24
+ end
25
+ end
26
+
27
+ # Sets the base_name taking into account the current class namespace.
28
+ def self.name
29
+ @name ||= begin
30
+ to_s.split('::').last.sub(/(CodeGenerator|Generator)$/, '').underscore
31
+ end
32
+ end
33
+
34
+ # Cache source root and add lib/generators/base/generator/templates to
35
+ # source paths.
36
+ def self.inherited(base) #:nodoc:
37
+ super
38
+ if base.name && base.name !~ /Base$/
39
+ if base.namespace == 'origen'
40
+ Origen::CodeGenerators.origen_generators[base.name] = base
41
+ else
42
+ Origen::CodeGenerators.plugin_generators[base.namespace] ||= {}
43
+ Origen::CodeGenerators.plugin_generators[base.namespace][base.name] = base
44
+ end
45
+ end
46
+ # Give all generators access to Origen core files in their source path,
47
+ # with their own app as highest priority
48
+ base.source_paths << Origen.root if Origen.app_loaded?
49
+ base.source_paths << Origen.top
50
+ end
51
+
52
+ def self.banner
53
+ "origen add #{namespace == 'origen' ? '' : namespace + ':'}#{name} [options]"
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,17 @@
1
+ module Origen
2
+ module CodeGenerators
3
+ class Bundler < Origen::CodeGenerators::Base
4
+ desc <<-END
5
+ This generator will add the necessary files to convert the app to use bundler for gem
6
+ mangement (including Origen plugins).
7
+ END
8
+ def create_gemspec_file
9
+ if config[:type] == :application
10
+ template 'templates/code_generators/gemfile_app.rb', File.join(Origen.root, 'Gemfile')
11
+ else
12
+ template 'templates/code_generators/gemfile_plugin.rb', File.join(Origen.root, 'Gemfile')
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,49 @@
1
+ module Origen
2
+ module CodeGenerators
3
+ class GemSetup < Origen::CodeGenerators::Base
4
+ desc <<-END
5
+ This generator creates a gemspec file in the top-level directory to allow it
6
+ to be packed up and distributed as a gem.
7
+ END
8
+ def create_gemspec_file
9
+ @summary = ask 'Describe your plugin in a few words:'
10
+ template 'templates/code_generators/gemspec.rb', File.join(Origen.root, "#{Origen.app.name}.gemspec")
11
+ end
12
+
13
+ def create_master_require_file
14
+ file = "#{Origen.root}/lib/#{Origen.app.name}.rb"
15
+ if File.exist?(file)
16
+ prepend_to_file file, <<-END
17
+ require "origen"
18
+ require_relative "../config/application.rb"
19
+ require_relative "../config/environment.rb"
20
+
21
+ END
22
+ else
23
+ create_file file do
24
+ <<-END
25
+ require "origen"
26
+ require_relative "../config/application.rb"
27
+ require_relative "../config/environment.rb"
28
+ END
29
+ end
30
+ end
31
+ end
32
+
33
+ def verify_semver
34
+ unless Origen.app.version.semantic?
35
+ puts <<-END
36
+
37
+ Warning, you application is not currently using semantic (1.2.3) versioning, this must be used if
38
+ you want to publish your plugin as a gem.
39
+
40
+ To upgrade your application to semantic versioning run the following command:
41
+
42
+ origen add semver
43
+
44
+ END
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,13 @@
1
+ module Origen
2
+ module CodeGenerators
3
+ class Rake < Origen::CodeGenerators::Base
4
+ desc <<-END
5
+ This generator will add the necessary files to convert the app to use rake for general
6
+ build commands.
7
+ END
8
+ def create_rake_file
9
+ template 'templates/code_generators/rakefile.rb', File.join(Origen.root, 'Rakefile')
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module Origen
2
+ module CodeGenerators
3
+ class RSpec < Origen::CodeGenerators::Base
4
+ desc <<-END
5
+ This generator will add the necessary files to use rspec for unit tests.
6
+ END
7
+ def create_spec_helper_file
8
+ template 'templates/code_generators/spec_helper.rb', File.join(Origen.root, 'spec', 'spec_helper.rb')
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,39 @@
1
+ module Origen
2
+ module CodeGenerators
3
+ class Semver < Origen::CodeGenerators::Base
4
+ desc <<-END
5
+ This generator will convert an application to use semantic (1.2.3) style versioning.
6
+ It can also be used to bring a legacy version file up to date with the latest structure.
7
+ END
8
+ def create_version_file
9
+ if config[:change]
10
+ @version = config[:change]
11
+ else
12
+ @version = Origen.app.version
13
+ # Ensure > 0.0.0 due to Bundler issues resolving 0.0.0.preX versions
14
+ until @version.semantic? && @version.greater_than_or_equal_to?(VersionString.new('0.0.1'))
15
+ ver = ask 'What version do you want to start from (this must be > 0.0.0) ? [0.1.0]'
16
+ if !ver || ver.empty?
17
+ @version = VersionString.new('0.1.0')
18
+ else
19
+ @version = VersionString.new(ver)
20
+ end
21
+ end
22
+ end
23
+ template 'templates/code_generators/version.rb', File.join(Origen.root, 'config', 'version.rb'), force: true
24
+ end
25
+
26
+ def set_configuration
27
+ unless Origen.app.config.semantically_version
28
+ comment_config :semantically_version
29
+ add_config :semantically_version, true
30
+ end
31
+ end
32
+
33
+ def print_version
34
+ puts
35
+ puts "You're new app version is: #{Origen.app.version(refresh: true)}"
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,37 @@
1
+ module Origen
2
+ module CodeGenerators
3
+ class Timever < Origen::CodeGenerators::Base
4
+ desc <<-END
5
+ This generator will convert an application to use timestamp (sm_2014_12_04_11_11) versioning.
6
+ It can also be used to bring a legacy version file up to date with the latest structure.
7
+ END
8
+ def create_version_file
9
+ if config[:change]
10
+ @version = config[:change]
11
+ else
12
+ @version = Origen.app.version
13
+ unless @version.timestamp?
14
+ if @version.production?
15
+ @version = VersionString.production_timestamp
16
+ else
17
+ @version = VersionString.development_timestamp
18
+ end
19
+ end
20
+ end
21
+ template 'templates/code_generators/version_time.rb', File.join(Origen.root, 'config', 'version.rb'), force: true
22
+ end
23
+
24
+ def set_configuration
25
+ if Origen.app.config.semantically_version
26
+ comment_config :semantically_version
27
+ add_config :semantically_version, false
28
+ end
29
+ end
30
+
31
+ def print_version
32
+ puts
33
+ puts "You're new app version is: #{Origen.app.version(refresh: true)}"
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,111 @@
1
+ require 'thor/group'
2
+
3
+ require 'active_support'
4
+ require 'active_support/core_ext/object/blank'
5
+ require 'active_support/core_ext/kernel/singleton_class'
6
+ require 'active_support/core_ext/array/extract_options'
7
+ require 'active_support/core_ext/hash/deep_merge'
8
+ require 'active_support/core_ext/module/attribute_accessors'
9
+ require 'active_support/core_ext/string/inflections'
10
+
11
+ module Origen
12
+ module CodeGenerators
13
+ autoload :Base, 'origen/code_generators/base'
14
+ autoload :Actions, 'origen/code_generators/actions'
15
+
16
+ # Remove the color from output.
17
+ def self.no_color!
18
+ Thor::Base.shell = Thor::Shell::Basic
19
+ end
20
+
21
+ def self.origen_generators
22
+ @origen_generators ||= {}
23
+ end
24
+
25
+ def self.plugin_generators
26
+ @plugin_generators ||= {}
27
+ end
28
+
29
+ def self.load_generators
30
+ return if @generators_loaded
31
+ # Load Origen's generators
32
+ Dir.glob("#{Origen.top}/lib/origen/code_generators/**/*.rb").sort.each do |file|
33
+ require file
34
+ end
35
+ # Load generators from plugins, TBD what the rules will be here
36
+ @generators_loaded = true
37
+ end
38
+
39
+ # Receives a namespace, arguments and the behavior to invoke the generator.
40
+ # It's used as the default entry point for generate, destroy and update
41
+ # commands.
42
+ def self.invoke(name, args = ARGV, config = {})
43
+ load_generators
44
+ if klass = find_by_name(name)
45
+ args << '--help' if args.empty? && klass.arguments.any?(&:required?)
46
+ klass.start(args, config)
47
+ end
48
+ end
49
+
50
+ def self.find_by_name(name)
51
+ names = name.split(':')
52
+ case names.size
53
+ when 1
54
+ gen = origen_generators[names.first]
55
+ return gen if gen
56
+ when 2
57
+ if names.first == 'origen'
58
+ gen = origen_generators[names.first]
59
+ else
60
+ gen = plugin_generators[names.first][names.last]
61
+ end
62
+ return gen if gen
63
+ end
64
+ puts "Couldn't find a feature generator named: #{name}"
65
+ puts
66
+ puts 'This is the list of available features:'
67
+ puts
68
+ print_generators
69
+ puts
70
+ end
71
+
72
+ # Show help message with available generators.
73
+ def self.help(command = 'add')
74
+ puts <<-END
75
+ Add pre-built features and code snippets.
76
+
77
+ This command will add pre-built code to your application to implement a given feature. In some
78
+ cases this will be a complete feature and in others it will provide a starting point for you
79
+ to further customize.
80
+
81
+ END
82
+ puts "Usage: origen #{command} FEATURE [args] [options]"
83
+ puts
84
+ puts 'General options:'
85
+ puts " -h, [--help] # Print feature's options and usage"
86
+ puts ' -p, [--pretend] # Run but do not make any changes'
87
+ puts ' -f, [--force] # Overwrite files that already exist'
88
+ puts ' -s, [--skip] # Skip files that already exist'
89
+ puts ' -q, [--quiet] # Suppress status output'
90
+ puts
91
+ puts "The available features are listed below, run 'origen add <feature> -h' for more info."
92
+ puts
93
+
94
+ print_generators
95
+ puts
96
+ end
97
+
98
+ def self.print_generators
99
+ load_generators
100
+ origen_generators.each do |name, _gen|
101
+ puts name
102
+ end
103
+ plugin_generators.each do |namespace, generators|
104
+ puts
105
+ generators.each do |_name, gen|
106
+ puts "#{namespace}:#{gen}"
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,12 @@
1
+ require 'origen/code_generators'
2
+
3
+ # if no argument/-h/--help is passed to origen add command, then
4
+ # it generates the help associated.
5
+ if [nil, '-h', '--help'].include?(ARGV.first)
6
+ Origen::CodeGenerators.help 'add'
7
+ exit
8
+ end
9
+
10
+ name = ARGV.shift
11
+
12
+ Origen::CodeGenerators.invoke name, ARGV # , behavior: :invoke, destination_root: Origen.root
@@ -0,0 +1,62 @@
1
+ require 'optparse'
2
+
3
+ options = {}
4
+
5
+ # App options are options that the application can supply to extend this command
6
+ app_options = @application_options || []
7
+ opt_parser = OptionParser.new do |opts|
8
+ opts.banner = <<-EOT
9
+ Compile an ERB template file, list of files or a directory.
10
+ If a directory is referenced the entire sub-directory structure will be copied to the output directory, compiling any ERB
11
+ templates it finds in the process and copying any standard files accross without modification.
12
+
13
+ ERB is a templating system from Ruby that allows you to embed snippets of Ruby code in any ASCII file to create dynamic
14
+ content. Within the context of the origen generator this means that you can include Ruby snippets that reference the target
15
+ objects to create dynamic test program sheets, C files, VB files, documentation, etc.
16
+
17
+ To create an ERB template start with a base ASCII file and append .erb to the end of the file name, upon compilation the
18
+ .erb extension will be removed.
19
+
20
+ There is not much to the syntax, this snippet covers just about everything you need to know:
21
+ % - A full line of Ruby is prefixed with %, this is removed by compilation
22
+ %# - A full line Ruby comment, this is removed by compilation
23
+ <%# %> - An embedded Ruby comment, this is removed by compilation
24
+ <% %> - An embedded Ruby snippet, this is removed by compilation
25
+ <%= %> - An embedded Ruby snippet that generates content, the result is output to the compiled file
26
+
27
+ Full details of ERB syntax can be found here:
28
+ http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/classes/ERB.html
29
+
30
+ Usage: origen compile [space separated files, lists or directories] [options]
31
+ EOT
32
+ opts.on('-e', '--environment NAME', String, 'Override the default environment, NAME can be a full path or a fragment of an environment file name') { |e| options[:environment] = e }
33
+ opts.on('-t', '--target NAME', String, 'Override the default target, NAME can be a full path or a fragment of a target file name') { |t| options[:target] = t }
34
+ opts.on('-pl', '--plugin PLUGIN_NAME', String, 'Set current plugin') { |pl_n| options[:current_plugin] = pl_n }
35
+ opts.on('-l', '--lsf [ACTION]', [:clear, :add], "Submit jobs to the LSF, optionally specify whether to 'clear' or 'add' to existing jobs") { |a| options[:lsf] = true; options[:lsf_action] = a }
36
+ opts.on('-w', '--wait', 'Wait for LSF processing to complete') { options[:wait_for_lsf_completion] = true }
37
+ opts.on('-c', '--continue', 'Continue on error (to the next file)') { options[:continue] = true }
38
+ opts.on('-d', '--debugger', 'Enable the debugger') { options[:debugger] = true }
39
+ opts.on('-m', '--mode MODE', Origen::Mode::MODES, 'Force the Origen operating mode:', ' ' + Origen::Mode::MODES.join(', ')) { |_m| }
40
+ opts.on('-f', '--file FILE', String, 'Override the default log file') { |o| options[:log_file] = o }
41
+ opts.on('-o', '--output DIR', String, 'Override the default output directory') { |o| options[:output] = o }
42
+ opts.on('-n', '--name NAME', String, 'Override the default output file name') { |o| options[:output_file_name] = o }
43
+ opts.on('-r', '--reference DIR', String, 'Override the default reference directory') { |o| options[:reference] = o }
44
+ opts.on('-z', '--zip', 'Gzip all output files (diff checking will be skipped)') { |o| options[:zip] = o }
45
+ app_options.each do |app_option|
46
+ opts.on(*app_option) {}
47
+ end
48
+ opts.separator ''
49
+ opts.on('-h', '--help', 'Show this message') { puts opts; exit 0 }
50
+ end
51
+
52
+ opt_parser.parse! ARGV
53
+ options[:patterns] = ARGV
54
+ options[:compile] = true # To let the generator know a compile job has been requested
55
+
56
+ Origen.load_application
57
+ Origen.current_plugin.temporary = options[:current_plugin] if options[:current_plugin]
58
+ Origen.environment.temporary = options[:environment] if options[:environment]
59
+ Origen.target.temporary = options[:target] if options[:target]
60
+ Origen.app.load_target!
61
+ Origen.app.runner.generate(options)
62
+ Origen.lsf.wait_for_completion if options[:wait_for_lsf_completion]
@@ -0,0 +1,9 @@
1
+ puts 'Generating ctags file...'
2
+ # system("ctags -R --exclude='.ref/**,output/**' #{ORIGEN_WORK} #{ORIGEN_TOP}/lib")
3
+ Origen.load_application
4
+ if Origen.top == Origen.root
5
+ system("ctags -R #{Origen.top}/lib -f #{Origen.root}/tags")
6
+ else
7
+ system("ctags -R #{Origen.top}/lib #{Origen.root}/lib -f #{Origen.root}/tags")
8
+ end
9
+ puts 'Completed successfully'