Made creating windows installer easier
[solumns:solumns.git] / Rakefile
1 require "fileutils"
2
3 def run cmd
4         if windows?
5                 sh "start #{cmd}"
6         else
7                 sh cmd
8         end
9 end
10
11 def gracket args
12         run "gracket -W info -l errortrace -t #{args}"
13 end
14
15 def racket args
16         run "racket -W info -l errortrace -t #{args}"
17 end
18
19 def windows?
20         RUBY_PLATFORM =~ /(win|w)32$/
21 end
22
23 desc "Test a game where the columns are shuffled."
24 task :test_shuffle do
25         gracket "test/gui/shuffler.rkt"
26 end
27
28 desc "Check we can shuffle a list"
29 task :test_shuffling do
30         racket "test/shuffle.rkt"
31 end
32
33 desc "Check cycles can be detected and prevented"
34 task :test_cycle do
35         racket "test/cycle-detector.rkt"
36 end
37
38 desc "Check that we can play a game without cycles occuring"
39 task :test_acyclic do
40         gracket "test/gui/acyclic.rkt"
41 end
42
43 desc "Check the GUI looks correct."
44 task :test_draw do
45         gracket "test/gui/draw.rkt"
46 end
47
48 desc "Test a game that occasionally gives random columns to reduce cycles."
49 task :test_occasional do
50         gracket "test/gui/occasional.rkt"
51 end
52
53 desc "Check the GUI can be resized and redrawn okay."
54 task :test_refresh do
55         gracket "test/gui/refresh.rkt"
56 end
57
58 desc "Check that the player can move blocks with the arrow keys"
59 task :test_drop do
60         gracket "test/gui/drop.rkt"
61 end
62
63 desc "Test that we can keep a record of high scores okay."
64 task :test_record do
65         gracket "test/gui/record.rkt"
66 end
67
68 desc "Try a minimal prototype of solumns"
69 task :test_game do
70         gracket "test/gui/game.rkt"
71 end
72
73 desc "Try a prototype of solumns with score information displayed."
74 task :test_score do
75         gracket "test/gui/score.rkt"
76 end
77
78 desc "Test a version of solumns with high score gathering"
79 task :test_hiscore do
80         gracket "test/gui/hiscore.rkt"
81 end
82
83 desc "Test a version of solumns that can be restarted."
84 task :test_restart do
85         gracket "test/gui/restart.rkt"
86 end
87
88 desc "Test a version of solumns that fades out eliminated blocks."
89 task :test_fade do
90         gracket "test/gui/fade.rkt"
91 end
92
93 desc "Check to see if we can fill in a high score properly"
94 task :test_fill_hiscore do
95         gracket "test/gui/fill-hiscore.rkt"
96 end
97
98 desc "Check that the algorithms can create colours"
99 task :test_cmap do
100         gracket "test/gui/colour-mapping.rkt"
101 end
102
103 desc "Test user input"
104 task :test_input do
105         gracket "test/gui/input.rkt"
106 end
107
108 desc "Test gravity, neighbouring column elimination." 
109 task :test_grid do
110         racket "test/grid.rkt"
111 end
112
113 desc "Test the brute-force sub-optimising algorithm."
114 task :test_bruteforce do
115         racket "test/brute-force.rkt"
116 end
117
118 desc "Test the pause status machine is sane"
119 task :test_pause_status do
120         racket "test/pause.rkt"
121 end
122
123 desc "Test a game that can be paused"
124 task :test_pause do
125         gracket "test/gui/pauser.rkt"
126 end
127
128 desc "Test generation of random columns."
129 task :test_random do
130         racket "test/random.rkt"
131 end
132
133 desc "Test game where output columns are randomly rotated."
134 task :test_rotate do
135         gracket "test/gui/rotator.rkt"
136 end
137
138 desc "Run all (automated) tests"
139 task :test => [:test_grid, :test_random,
140         :test_bruteforce, :test_cmap, :test_record,
141         :test_shuffling, :test_cycle, :test_pause_status]
142
143 desc "Run solumns"
144 task :run do
145         gracket "solumns/main.rkt"
146 end
147
148 file "work" do
149         mkdir "work"
150 end
151
152 file "release" do
153         mkdir "release"
154 end
155
156 desc "Create distribution"
157 task :dist => ["release"] do
158         if windows?
159                 sh "windows/release.bat"
160         else
161                 sh "raco distribute release work/solumns"
162                 FileUtils.cp_r "data", "release/" 
163         end
164 end
165
166 desc "Clean"
167 task :clean do
168         FileUtils.rm_rf "work"
169         FileUtils.rm_rf "release"
170 end
171
172 desc "Create windows installer"
173 task :wix => [:build, :dist] do
174         if windows?
175                 FileUtils.cp "installer/solumns.wxs", "release"
176                 FileUtils.cp_r "installer/COPYING.rtf", "release"
177                 sh "windows/create-installer.bat"
178         else
179                 raise "Only works on windows"
180         end
181 end
182
183 desc "Compile"
184 task :build => ["work"] do
185         if windows?
186                 sh "windows/build.bat"
187         else
188                 sh "raco exe --gui -o work/solumns solumns/main.rkt"
189         end
190 end
191
192 desc "Wordcount"
193 task :words do
194         run "wc `find -regex '.+.rkt'` | sort -n"
195 end