origen 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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'