c&d: version & branch info, changes related to move of lib dirs
[software/sisu] / setup / rbuild
1 #!/usr/bin/env ruby
2 =begin
3 Common Rakefile, Rantfile installer for SiSU
4 softlink Rakefile and Rantfile to this file
5
6 * Homepage: <http://www.jus.uio.no/sisu/SiSU>
7 <http://search.sisudoc.org>
8 * Download: <http://www.jus.uio.no/sisu/download>
9
10 Copyright (C) 2007 Ralph Amissah
11
12 * License: LGPL - GNU Lesser General Public License
13 [same license as Rant provided within the Rant package]
14
15 * Ralph Amissah <ralph@amissah.com>
16 Ralph Amissah <ralph.amissah@gmail.com>
17
18 Rake is a Ruby build program by Jim Weirich
19 * Rake may be downloaded and installed from:
20 <http://rake.rubyforge.org/>
21
22 Rant is a Ruby build program by Stefan Lang
23 * Rant may be downloaded and installed from:
24 <http://make.rubyforge.org/>
25
26 Notes on use:
27 [if rake is preferred and installed]
28 rake -T
29 [if rant is preferred and installed]
30 rant -T
31
32 SiSU can also be Setup/Installation using:
33 * Minero Aoki's setup.rb, provided along with SiSU, or
34
35 =end
36 #%% produce a makefile suitable for the target platform
37 #require 'mkmf'
38 #create_makefile("sisu")
39 #% manual settings, edit/update as required (note current default settings are obtained from sisu version yml file)
40 require 'find'
41 require 'fileutils'
42 #require 'ftools'
43 require 'rbconfig.rb'
44 require 'yaml'
45 include FileUtils
46 require_relative 'sisu_version' # sisu_version.rb
47 include SiSUversion
48 require_relative 'rbuild_libs' # rbuild_libs.rb
49 include Project_details
50 include Utils
51 include Version_info
52 include Gemspecs
53 include GitExtractTaggedVersionBuild
54 require_relative 'rbuild_help' # rbuild_help.rb
55 include Help
56 #% tasks
57 desc "show rake/rant tasks for sisu install, and sisu gem (create spec, build &) install"
58 task :default =>
59 [:note_sources,:tasks,:note_installation] #[:default_notice,:setup_base]
60 desc "Setup/Install #{Project_details.name}"
61 task :setup_project=>
62 [:setup_bin_,:setup_lib_,:setup_conf_,:setup_share_,:setup_data_,:setup_man_,:setup_vim_,:src_note]
63 task :project=> \
64 [:setup_project]
65 desc "Setup/Install #{Project_details.name}"
66 task :setup=>
67 [:setup_bin_, :setup_lib_,:setup_conf_,:setup_share_,:setup_data_] #, :help]
68 desc "Setup/Install #{Project_details.name}: bin, lib and conf (no data)"
69 task :setup_base=>
70 [:setup_bin_,:setup_lib_,:setup_conf_,:setup_share_,:setup_man_,:setup_vim_,:note_sources]
71 task :base=>
72 [:setup_base]
73 desc "Setup/Install #{Project_details.name}: bin, lib, conf & data"
74 task :setup_with_data=>
75 [:setup_base,:setup_data]
76 desc "check package version"
77 task :sisuversion =>
78 [:sisu_version]
79 task :version =>
80 [:sisu_version]
81 #desc "set package version"
82 task :sisuversionset =>
83 [:sisu_version_set,:changelog_headers]
84 desc "check gemspec info"
85 task :gem_spec =>
86 [:gemspec_info]
87 desc "create sisu v_stable gemspec"
88 task :gem_create_spec_stable =>
89 [:gemspecs_stable_create_default_version]
90 task :gem5cs =>
91 [:gem_create_spec_stable]
92 task :gem5createspecs =>
93 [:gemspecs_stable_create_default_version]
94 desc "create sisu v_unstable gemspec"
95 task :gem_create_spec_unstable =>
96 [:gemspecs_unstable_create_default_version]
97 task :gem6cs =>
98 [:gem_create_spec_unstable]
99 task :gem6createspecs =>
100 [:gemspecs_unstable_create_default_version]
101 desc "create gemspec"
102 task :gem_create_spec =>
103 [:gemspecs_create_default_version]
104 task :gemcs =>
105 [:gemspecs_create_default_version]
106 task :gemc =>
107 [:gemspecs_create_default_version]
108 task :gemspecscreate =>
109 [:gemspecs_create_default_version]
110 #---
111 desc "build gem"
112 task :gem_build =>
113 [:gem_build_]
114 task :gemb =>
115 [:gem_build]
116 task :gembuild =>
117 [:gem_build]
118 desc "build sisu v_stable gem"
119 task :gem_build_stable =>
120 [:gem_stable_build]
121 task :gem5b =>
122 [:gem_build_stable]
123 task :gem5build =>
124 [:gem_build_stable]
125 desc "build sisu v_unstable gem"
126 task :gem_build_unstable =>
127 [:gem_unstable_build]
128 task :gem6b =>
129 [:gem_build_unstable]
130 task :gem6build =>
131 [:gem_build_unstable]
132 #---
133 desc "create, build & install sisu v_stable gem"
134 task :gem_create_build_install_stable =>
135 [:gemspecs_stable_create_default_version,:gem_stable_build,:gem_stable_install]
136 task :gem5cbi =>
137 [:gem_create_build_install_stable]
138 desc "create, build & install sisu v_unstable gem"
139 task :gem_create_build_install_unstable =>
140 [:gemspecs_unstable_create_default_version,:gem_unstable_build,:gem_unstable_install]
141 task :gem6cbi =>
142 [:gem_create_build_install_unstable]
143 desc "create, build & install sisu v_stable & v_unstable gem"
144 task :gem_create_build_install =>
145 [:gemspecs_create_default_version,:gem_build_,:gem_install_]
146 task :gemcbi =>
147 [:gem_create_build_install]
148 #---
149 desc "install gem"
150 task :gem_install =>
151 [:gem_install_]
152 task :gemi =>
153 [:gem_install]
154 task :geminstall =>
155 [:gem_install]
156 desc "build & install sisu v_stable gem"
157 task :gem_build_install_stable =>
158 [:gem_stable_build,:gem_install_]
159 task :gem5bi =>
160 [:gem_build_install_stable]
161 desc "build & install sisu v_unstable gem"
162 task :gem_build_install_unstable =>
163 [:gem_unstable_build,:gem_install_]
164 task :gem6bi =>
165 [:gem_build_install_unstable]
166 desc "build & install gem"
167 task :gem_build_install =>
168 [:gem_build,:gem_install_]
169 task :gembi =>
170 [:gem_build_install]
171 #-- manually set next version
172 #desc "create sisu v_stable gemspec, manually set next version"
173 task :gem5csn =>
174 [:gemspecs_stable_create_next_version]
175 #desc "create sisu v_unstable gemspec, manually set next version"
176 task :gem6csn =>
177 [:gemspecs_unstable_create_next_version]
178 #desc "create gemspec, manually set next version"
179 task :gemcsn =>
180 [:gemspecs_create_next_version]
181 task :gemcn =>
182 [:gemspecs_create_next_version]
183 #desc "build gem, manually set next version"
184 task :gembn =>
185 [:gem_build_next_version]
186 #desc "build sisu v_stable gem, manually set next version"
187 task :gem5bn =>
188 [:gem_stable_build_next_version]
189 #desc "build sisu v_unstable gem, manually set next version"
190 task :gem6bn =>
191 [:gem_unstable_build_next_version]
192 #desc "install gem, manually set next version"
193 task :gemin =>
194 [:gem_install_next_version]
195 #desc "build & install sisu v_stable gem, manually set next version"
196 task :gem5bin =>
197 [:gem_stable_build_next_version,:gem_install_next_version]
198 #desc "build & install sisu v_unstable gem, manually set next version"
199 task :gem6bin =>
200 [:gem_unstable_build_next_version,:gem_install_next_version]
201 #desc "build & install gem, manually set next version"
202 task :gembin =>
203 [:gem_build_next_version,:gem_install_next_version]
204 #desc "create, build & install sisu v_stable gem, manually set next version"
205 task :gem5cbin =>
206 [:gemspecs_stable_create_next_version,:gem_stable_build_next_version,:gem_stable_install_next_version]
207 #desc "create, build & install sisu v_unstable gem, manually set next version"
208 task :gem6cbin =>
209 [:gemspecs_unstable_create_next_version,:gem_unstable_build_next_version,:gem_unstable_install_next_version]
210 #desc "create, build & install sisu v_stable & v_unstable gem, manually set next version"
211 task :gemcbin =>
212 [:gemspecs_create_next_version,:gem_build_next_version,:gem_install_next_version]
213 #---
214 #desc "check changelog headers"
215 task :changelogheaders =>
216 [:changelog_headers]
217 task :dev =>
218 [:note_developer]
219 task :developer_note =>
220 [:note_developer]
221 if File.directory?('bin')
222 desc "Setup #{Project_details.name} bin only, synonym :bin"
223 task :setup_bin =>
224 [:setup_bin_]
225 task :bin =>
226 [:setup_bin]
227 end
228 if File.directory?('lib')
229 desc "Setup #{Project_details.name} lib only, synonym :lib"
230 task :setup_lib =>
231 [:setup_lib_]
232 task :lib =>
233 [:setup_lib]
234 end
235 if File.directory?('conf')
236 desc "Setup #{Project_details.name} conf only, synonyms :conf & :etc"
237 task :setup_conf =>
238 [:setup_conf_]
239 task :conf =>
240 [:setup_conf]
241 task :setup_etc =>
242 [:setup_conf]
243 task :etc =>
244 [:setup_conf]
245 end
246 if File.directory?('data')
247 desc "Setup #{Project_details.name} data only, synonyms :data & :examples"
248 task :setup_data =>
249 [:setup_data_]
250 task :data =>
251 [:setup_data]
252 task :setup_examples =>
253 [:setup_data]
254 task :examples =>
255 [:setup_data]
256 end
257 if File.directory?('data/sisu')
258 #desc "Setup #{Project_details.name} shared data only (odf & shared images)"
259 task :setup_share =>
260 [:setup_share_]
261 task :share =>
262 [:setup_share]
263 end
264 if File.directory?('man')
265 desc "Setup #{Project_details.name} man pages only, synonyms :man"
266 task :setup_man =>
267 [:setup_man_]
268 task :man =>
269 [:setup_man]
270 end
271 if File.directory?('data/vim')
272 desc "Setup #{Project_details.name} vim config files only, synonyms :vim"
273 task :setup_vim =>
274 [:setup_vim_]
275 task :vim =>
276 [:setup_vim]
277 end
278 desc "Remove #{Project_details.name} (all versions)"
279 task :remove_package =>
280 [:remove_bin, :remove_lib, :remove_conf]
281 if File.directory?('bin')
282 #desc "Remove #{Project_details.name} bin only"
283 task :remove_bin =>
284 [:remove_bin]
285 end
286 if File.directory?('lib')
287 #desc "Remove #{Project_details.name} lib only"
288 task :remove_lib =>
289 [:remove_lib]
290 end
291 if File.directory?('conf')
292 #desc "Remove #{Project_details.name} conf only"
293 task :remove_conf =>
294 [:remove_conf]
295 end
296 desc "Re-setup #{Project_details.name}, synonym :reinstall"
297 task :resetup =>
298 [:remove, :setup]
299 task :reinstall =>
300 [:remove, :setup]
301 #desc "Re-setup #{Project_details.name}: bin, lib, conf (ignore data), synonym :reinstall"
302 task :resetup_base =>
303 [:remove, :setup_base_]
304 task :reinstall_base =>
305 [:remove, :setup_base_]
306 if File.directory?('bin')
307 #desc "Re-setup #{Project_details.name} bin, synonym :reinstall"
308 task :resetup_bin =>
309 [:remove_bin, :setup_bin_]
310 task :reinstall_bin =>
311 [:remove_bin, :setup_bin_]
312 end
313 if File.directory?('lib')
314 #desc "Re-setup #{Project_details.name} lib, synonym :reinstall_lib"
315 task :resetup_lib =>
316 [:remove_lib, :setup_lib_]
317 task :reinstall_lib =>
318 [:remove_lib, :setup_lib_]
319 end
320 if File.directory?('conf')
321 #desc "Re-setup #{Project_details.name} conf, synonyms :reinstall_conf & :resetup_etc"
322 task :resetup_conf =>
323 [:remove_conf, :setup_conf_]
324 task :reinstall_conf =>
325 [:remove_conf, :setup_conf_]
326 task :resetup_etc =>
327 [:remove_conf, :setup_conf_]
328 task :reinstall_etc =>
329 [:remove_conf, :setup_conf_]
330 end
331 if File.directory?('data/sisu')
332 #desc "Re-setup #{Project_details.name} shared data, (odf & images)"
333 task :resetup_share =>
334 [:remove_share, :setup_share_]
335 task :reinstall_share =>
336 [:remove_share, :setup_share_]
337 end
338 if File.directory?('man')
339 #desc "Re-setup #{Project_details.name} man, synonym :reinstall_man"
340 task :resetup_man =>
341 [:remove_man, :setup_man_]
342 task :reinstall_man =>
343 [:remove_man, :setup_man_]
344 end
345 desc 'Setup Note'
346 task :setup_note =>
347 [:help]
348 desc "System information used by #{Project_details.name}"
349 task :system =>
350 [:system_info,:project_help,:note_sources]
351 desc "show all system info available - parameters found"
352 task :system_param =>
353 [:system_param_]
354 desc "Gem environment information used ruby gems for #{Project_details.name}"
355 task :gem_env =>
356 [:gem_env_]
357 desc 'Help'
358 task :help =>
359 [:project_help,:system_info,:tasks]
360 #desc "Setup/Install #{Project_details.name} (uses filelist)"
361 task :install =>
362 [:default_notice,:project]
363 task :install_bin =>
364 [:setup_bin_]
365 #desc "search for a version tag e.g. 'tag[5.6.0]'"
366 task :tag, [:tag] do |t, args|
367 args.with_defaults(:tag => Version_info::Next.setting_stable[:version])
368 puts "Check for Version Tag: #{args.tag}"
369 print "Version Tag: "
370 GitExtractTaggedVersionBuild::git_tagged_versions(args)
371 end
372 #desc "build and install a specific git tagged version of sisu, e.g. 'build[5.6.0]'"
373 task :build, [:tag, :branch] => :done do |t, args|
374 args.with_defaults(:tag => '5.6.0', :branch => 'stable')
375 puts "Version Tag: #{args.tag}"
376 puts "Branch: #{args.branch}"
377 GitExtractTaggedVersionBuild::git_tagged_versions(args.tag)
378 ans= <<-WOK
379 Gem Install SiSU Version
380 WOK
381 resp=Utils.answer?(ans)
382 exit unless resp
383 GitExtractTaggedVersionBuild::git_checkout_and_build_version(args)
384 end
385 task :done do
386 puts 'done'
387 end
388 #%% setup/install tasks
389 task :rant_independence do #notice
390 resp=''
391 while resp.length < 4
392 resp='sisu-install' #default name install
393 print %{#{Project_details.rake_rant}
394 Create a rant dependency independent file
395 provide filename default name is "install"
396 [Warning, will overwrite file of name provided
397 provide name or "quit" to exit]: }
398 exit if resp =~/^(?:n|quit|exit)$/
399 end
400 remove='y' #remove='n'
401 if remove =~/y/
402 system("rant-import --force --auto #{resp};
403 chmod 755 #{resp}
404 ")
405 else #puts "#{resp} not replaced"
406 end
407 end
408
409 task :default_notice do #notice
410 Utils.default_notice
411 end
412 task :default2 do #secondary
413 setup_find_cp_r('bin',Project_details.dir.bin) \
414 if File.directory?('bin')
415 setup_find_cp_r('lib',Project_details.dir.lib) \
416 if File.directory?('lib')
417 setup_find_cp_r('conf',Project_details.dir.conf) \
418 if File.directory?('conf')
419 setup_find_cp_r('data/sisu',Project_details.dir.share) \
420 if File.directory?('data/sisu') #
421 setup_find_cp_r('data',Project_details.dir.data) \
422 if File.directory?('data')
423 setup_find_cp_r('data/vim',"#{Project_details.dir.data}/vim") \
424 if File.directory?('data/vim')
425 setup_find_cp_r('man',Project_details.dir.man) \
426 if File.directory?('man')
427 end
428 task :setup_bin_ do
429 exclude_files=['sisugem']
430 Install.setup_find_create('bin',Project_details.dir.bin,exclude_files) \
431 if File.directory?('bin')
432 end
433 task :setup_lib_ do
434 Install.setup_find_create('lib',Project_details.dir.lib) \
435 if File.directory?('lib')
436 end
437 task :setup_conf_ do
438 Install.setup_find_create('conf',Project_details.dir.conf) \
439 if File.directory?('conf')
440 end
441 task :setup_share_ do
442 Install.setup_find_create('data/sisu',Project_details.dir.share) \
443 if File.directory?('data/sisu')
444 end
445 task :setup_data_ do
446 Install.setup_find_create('data',Project_details.dir.data) \
447 if File.directory?('data')
448 end
449 task :setup_man_ do
450 Install.setup_find_create('man',Project_details.dir.man) \
451 if File.directory?('man')
452 Install.setup_find_create('man.deb/man',Project_details.dir.man) \
453 if File.directory?('man.deb/man')
454 end
455 task :setup_vim_ do
456 Install.setup_find_create('data/vim',Project_details.dir.vim) \
457 if File.directory?('data/vim')
458 end
459 task :gemspec_info do
460 Gemspecs.info_stable
461 Gemspecs.info_unstable
462 end
463 task :gemspecs_stable_create_default_version do
464 Gemspecs::Current.create_stable
465 end
466 task :gemspecs_unstable_create_default_version do
467 Gemspecs::Current.create_unstable
468 end
469 task :gemspecs_create_default_version do
470 Gemspecs::Current.create_stable
471 Gemspecs::Current.create_unstable
472 end
473 task :gemspecs_stable_create_next_version do
474 Gemspecs::Next.create_stable
475 end
476 task :gemspecs_unstable_create_next_version do
477 Gemspecs::Next.create_unstable
478 end
479 task :gemspecs_create_next_version do
480 Gemspecs::Next.create_stable
481 Gemspecs::Next.create_unstable
482 end
483 task :gem_stable_build do
484 Gemspecs::Current.build_stable
485 end
486 task :gem_unstable_build do
487 Gemspecs::Current.build_unstable
488 end
489 task :gem_build_ do
490 Gemspecs::Current.build_stable
491 Gemspecs::Current.build_unstable
492 end
493 task :gem_stable_build_next_version do
494 Gemspecs::Next.build_stable
495 end
496 task :gem_unstable_build_next_version do
497 Gemspecs::Next.build_unstable
498 end
499 task :gem_build_next_version do
500 Gemspecs::Next.build_stable
501 Gemspecs::Next.build_unstable
502 end
503 task :gem_stable_install do
504 Gemspecs::Current.install_stable
505 end
506 task :gem_unstable_install do
507 Gemspecs::Current.install_unstable
508 end
509 task :gem_install_ do
510 Gemspecs::Current.install_stable
511 Gemspecs::Current.install_unstable
512 end
513 task :gem_stable_install_next_version do
514 Gemspecs::Next.install_stable
515 end
516 task :gem_unstable_install_next_version do
517 Gemspecs::Next.install_unstable
518 end
519 task :gem_install_next_version do
520 Gemspecs::Next.install_stable
521 Gemspecs::Next.install_unstable
522 end
523 task :changelog_headers do
524 puts '---'
525 puts Version_info::Update.changelog_header_stable
526 puts '---'
527 puts Version_info::Update.changelog_header_unstable
528 end
529 task :sisu_version do
530 puts Version_info::Next.setting_stable
531 puts Version_info::Next.setting_unstable
532 puts '---'
533 puts Version_info::Current.setting_stable[:project]
534 puts Version_info::Current.setting_stable[:version]
535 puts Version_info::Current.setting_stable[:date]
536 puts Version_info::Current.setting_stable[:date_stamp]
537 puts '---'
538 puts Version_info::Current.setting_unstable[:project]
539 puts Version_info::Current.setting_unstable[:version]
540 puts Version_info::Current.setting_unstable[:date]
541 puts Version_info::Current.setting_unstable[:date_stamp]
542 end
543 task :sisu_version_set do
544 Version_info::Update.update_stable
545 Version_info::Update.update_unstable
546 end
547 #%% post install
548 #%% clobber/remove tasks
549 task :remove_bin do
550 rm_r "#{Project_details.dir.bin}/#{Project_details.dir.proj}" \
551 if FileTest.file?("#{Project_details.dir.bin}/#{Project_details.dir.proj}")
552 end
553 task :remove_lib do
554 rm_r "#{Project_details.dir.lib}/#{Project_details.dir.proj}" \
555 if FileTest.directory?("#{Project_details.dir.lib}/#{Project_details.dir.proj}")
556 end
557 task :remove_conf do
558 rm_r "#{Project_details.dir.conf}/#{Project_details.dir.proj}" \
559 if FileTest.directory?("#{Project_details.dir.conf}/#{Project_details.dir.proj}")
560 end
561 task :remove_man do
562 rm_r "#{Project_details.dir.man}/**/#{Project_details.dir.proj}" \
563 if FileTest.directory?("#{Project_details.dir.man}/man1/#{Project_details.dir.proj}")
564 end
565 task :remove_version do
566 rm_r "#{Project_details.dir.bin}/#{Project_details.dir.proj}" \
567 if FileTest.file?("#{Project_details.dir.bin}/#{Project_details.dir.proj}")
568 rm_r "#{Project_details.dir.lib}/#{Project_details.dir.proj}/#{Project_details.version}" \
569 if FileTest.directory?("#{Project_details.dir.lib}/#{Project_details.dir.proj}/#{Project_details.version}")
570 rm_r "#{Project_details.dir.conf}/#{Project_details.dir.proj} \
571 if FileTest.directory?("#{Project_details.dir.conf}/#{Project_details.dir.proj}")
572 end
573 task :remove_package do
574 rm_r "#{Project_details.dir.bin}/#{Project_details.dir.proj}" \
575 if FileTest.file?("#{Project_details.dir.bin}/#{Project_details.dir.proj}")
576 rm_r "#{Project_details.dir.lib}/#{Project_details.dir.proj}" \
577 if FileTest.directory?("#{Project_details.dir.lib}/#{Project_details.dir.proj}")
578 rm_r "#{Project_details.dir.conf}/#{Project_details.dir.proj}" \
579 if FileTest.directory?("#{Project_details.dir.conf}/#{Project_details.dir.proj}")
580 end
581 task :note_sources do
582 puts <<-WOK
583
584 SiSU project:
585 <http://sisudoc.org>
586 <http://www.jus.uio.no/sisu>
587 sisu source code is available at:
588 <http://git.sisudoc.org>
589 <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
590 sisu markup samples are provided/packaged separately as sisu-markup-samples:
591 <http://git.sisudoc.org/gitweb/?p=doc/sisu-markup-samples.git;a=summary>
592 WOK
593 end
594 task :note_installation do
595 puts <<-WOK
596 alternative 0: distribution install, rather than this Rakefile
597 a distribution install pulls in the many dependencies used by sisu after
598 initial processing to generate and store output, significant amongst these are
599 XeTeX & databases (sqlite3 and postgresql)
600
601 alternative 1: gem install, you need to:
602 create the gemspec; build the gem (from the gemspec); install the gem
603 which can be done with the single command:
604 rake gem_create_build_install # (to build and install sisu v5 & sisu v6, alias gemcbi)
605 separate gems are made/installed for sisu v5 & sisu v6 contained in source:
606 rake gem_create_build_install_stable # (to build and install sisu v5, alias gem5cbi)
607 rake gem_create_build_install_unstable # (to build and install sisu v6, alias gem6cbi)
608 for individual steps (create, build, install) see rake options, rake -T
609 to specify sisu version for sisu installed via gem
610 sisu _#{Version_info::Current.setting_stable[:version]}_ --version
611 sisu _#{Version_info::Current.setting_unstable[:version]}_ --version
612 to uninstall sisu installed via gem
613 sudo gem uninstall --verbose sisu
614 WOK
615 end
616 task :note_developer do
617 puts <<-WOK
618
619 changelogheaders
620
621 sisuversion
622 sisuversionset
623
624 gemcsn gem5csn gem6csn
625 gembn gem5bn gem6bn
626 gemin gem5in gem6in
627 gembin gem5bin gem6bin
628 gemcbin gem5cbin gem6cbin
629 WOK
630 end
631 #%% help & system info
632 task :system_info do
633 Project_details.system_info
634 end
635 task :system_param_ do
636 Project_details.env.each {|c| puts c.inspect }
637 end
638 task :gem_env_ do
639 Project_details.gem_env
640 end
641 task :project_help do
642 Help.project_help
643 end
644 task :tasks do
645 Help.tasks
646 end