public
Description: Web Application Framework in JavaScript and Objective-J
Homepage: http://cappuccino.org
Clone URL: git://github.com/280north/cappuccino.git
cappuccino / Rakefile
100644 162 lines (120 sloc) 5.178 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/usr/bin/env ruby
 
require 'common'
require 'rake'
require 'rake/clean'
 
 
subprojects = %w{External Objective-J Foundation AppKit Tools External/ojunit}
 
%w(build clean clobber).each do |task_name|
    task task_name do
        subrake(subprojects, task_name)
    end
end
 
$DEBUG_ENV = File.join($BUILD_DIR, 'Debug', 'env')
$RELEASE_ENV = File.join($BUILD_DIR, 'Release', 'env')
 
$DOXYGEN_CONFIG = File.join('Tools', 'Documentation', 'Cappuccino.doxygen')
$DOCUMENTATION_BUILD = File.join($BUILD_DIR, 'Documentation')
 
$TOOLS_README = File.join('Tools', 'READMEs', 'TOOLS-README')
$TOOLS_EDITORS = File.join('Tools', 'Editors')
$TOOLS_INSTALLER = File.join('Tools', 'Install', 'install-tools')
$TOOLS_DOWNLOAD = File.join($BUILD_DIR, 'Cappuccino', 'Tools')
$TOOLS_DOWNLOAD_ENV = File.join($TOOLS_DOWNLOAD, 'objj')
$TOOLS_DOWNLOAD_EDITORS = File.join($TOOLS_DOWNLOAD, 'Editors')
$TOOLS_DOWNLOAD_README = File.join($TOOLS_DOWNLOAD, 'README')
$TOOLS_DOWNLOAD_INSTALLER = File.join($TOOLS_DOWNLOAD, 'install-tools')
 
$STARTER_README = File.join('Tools', 'READMEs', 'STARTER-README')
$STARTER_DOWNLOAD = File.join($BUILD_DIR, 'Cappuccino', 'Starter')
$STARTER_DOWNLOAD_APPLICATION = File.join($STARTER_DOWNLOAD, 'NewApplication')
$STARTER_DOWNLOAD_README = File.join($STARTER_DOWNLOAD, 'README')
 
$NARWHAL_PACKAGE = File.join($BUILD_DIR, 'Cappuccino', 'objj')
 
task :downloads => [:starter_download, :tools_download, :narwhal_package]
 
file_d $TOOLS_DOWNLOAD_ENV => [:debug, :release] do
    rm_rf($TOOLS_DOWNLOAD_ENV)
    cp_r(File.join($RELEASE_ENV), $TOOLS_DOWNLOAD_ENV)
    cp_r(File.join($DEBUG_ENV, 'packages', 'objj', 'lib', 'Frameworks'), File.join($TOOLS_DOWNLOAD_ENV, 'packages', 'objj', 'lib', 'Frameworks', 'Debug'))
end
 
file_d $TOOLS_DOWNLOAD_EDITORS => [$TOOLS_EDITORS] do
    cp_r(File.join($TOOLS_EDITORS, '.'), $TOOLS_DOWNLOAD_EDITORS)
end
 
file_d $TOOLS_DOWNLOAD_README => [$TOOLS_README] do
    cp($TOOLS_README, $TOOLS_DOWNLOAD_README)
end
 
file_d $TOOLS_DOWNLOAD_INSTALLER => [$TOOLS_INSTALLER] do
    cp($TOOLS_INSTALLER, $TOOLS_DOWNLOAD_INSTALLER)
end
 
task :objj_gem do
    subrake('Tools/Rake', :objj_gem)
end
 
task :tools_download => [$TOOLS_DOWNLOAD_ENV, $TOOLS_DOWNLOAD_EDITORS, $TOOLS_DOWNLOAD_README, $TOOLS_DOWNLOAD_INSTALLER, :objj_gem]
 
task :starter_download => [$STARTER_DOWNLOAD_APPLICATION, $STARTER_DOWNLOAD_README]
 
task :narwhal_package => [$TOOLS_DOWNLOAD_ENV] do
  rm_rf($NARWHAL_PACKAGE)
  cp_r(File.join($TOOLS_DOWNLOAD_ENV, 'packages', 'objj'), $NARWHAL_PACKAGE)
end
 
task :deploy => [:downloads, :docs] do
    #copy the docs into the starter pack
    cp_r(File.join($DOCUMENTATION_BUILD, 'html', '.'), File.join($STARTER_DOWNLOAD, 'Documentation'))
 
    cappuccino_output_path = File.join($BUILD_DIR, 'Cappuccino')
 
    #zip the starter pack
    starter_zip_output = File.join($BUILD_DIR, 'Cappuccino', 'Starter.zip')
    rm_rf(starter_zip_output)
 
    `cd #{cappuccino_output_path} && zip -ry -8 Starter.zip Starter`
 
    #zip the tools pack
    tools_zip_output = File.join($BUILD_DIR, 'Cappuccino', 'Tools.zip')
    rm_rf(tools_zip_output)
 
    `cd #{cappuccino_output_path} && zip -ry -8 Tools.zip Tools`
end
 
file_d $STARTER_DOWNLOAD_APPLICATION => [$TOOLS_DOWNLOAD_ENV] do
 
    ENV['PATH'] = "#{File.join($TOOLS_DOWNLOAD_ENV, 'bin')}:#{ENV['PATH']}"
 
    rm_rf($STARTER_DOWNLOAD_APPLICATION)
    mkdir_p($STARTER_DOWNLOAD)
    
    system %{capp gen #{$STARTER_DOWNLOAD_APPLICATION} -t Application --noconfig }
    rake abort if ($? != 0)
 
    # No tools means no objective-j gem
    rm(File.join($STARTER_DOWNLOAD_APPLICATION, 'Rakefile'))
 
end
 
file_d $STARTER_DOWNLOAD_README => [$STARTER_README] do
    cp($STARTER_README, $STARTER_DOWNLOAD_README)
end
 
task :install => [:tools_download] do
    if ENV['prefix']
        prefix = "--prefix #{ENV['prefix']}"
    else
        prefix = ''
    end
    
    system %{cd #{$TOOLS_DOWNLOAD} && sudo sh ./install-tools #{prefix} }
    rake abort if ($? != 0)
end
 
task :test => [:build] do
  tests = "'" + FileList['Tests/**/*Test.j'].join("' '") + "'"
  build_result = %x{ojtest #{tests} }
  
  if build_result.match(/Test suite failed/i)
    puts "tests failed, aborting the build"
    puts build_result
    rake abort
  else
    puts build_result
  end
end
 
task :docs do
    if executable_exists? "doxygen"
      system %{doxygen #{$DOXYGEN_CONFIG} }
      rake abort if ($? != 0)
      
      rm_rf $DOCUMENTATION_BUILD
      mv "debug.txt", "Documentation"
      mv "Documentation", $DOCUMENTATION_BUILD
    else
        puts 'doxygen not installed. skipping documentation generation.'
    end
end
 
task :submodules do
    if executable_exists? "git"
        system %{git submodule init && git submodule update}
        rake abort if ($? != 0)
    else
        puts "Git not installed"
        rake abort
    end
end
 
=begin
TODO: documentation
 
TODO: zip/tar.
=end