rake-convert 0.0.1

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 (2) hide show
  1. data/lib/rake/convert.rb +316 -0
  2. metadata +64 -0
@@ -0,0 +1,316 @@
1
+ EXPORT = [:CC, :CXX]
2
+
3
+ $convert = false
4
+ $makefile = ''
5
+ $configure = ''
6
+
7
+ clean = []
8
+
9
+ if (Rake::Task[:clean] rescue nil) || (Rake::Task[:clobber] rescue nil)
10
+ if defined?(CLOBBER)
11
+ CLOBBER.include 'configure', 'Makefile'
12
+ end
13
+
14
+ if (Rake::Task[:clobber] rescue nil)
15
+ clean << :clobber
16
+ elsif (Rake::Task[:clean] rescue nil)
17
+ clean << :clean
18
+ end
19
+ end
20
+
21
+ # Makefile stuff
22
+ def sh (args)
23
+ if $convert
24
+ puts "Makefile: #{args}"
25
+ $makefile << "\t#{args.gsub(/\$\{(.*?)\}/, '$(\1)')}\n"
26
+ else
27
+ super(args)
28
+ end
29
+ end
30
+ # Makefile stuff
31
+
32
+ # configure stuff
33
+ if $".grep(/mkmf\.rb$/).first
34
+ alias __have_header have_header
35
+ alias __have_library have_library
36
+ alias __have_func have_func
37
+ alias __have_macro have_macro
38
+ alias __check_sizeof check_sizeof
39
+ alias __create_header create_header
40
+
41
+ def have_header (header, preheaders = nil, &block)
42
+ source = nil
43
+ result = __have_header(header, preheaders) {|c|
44
+ source = block ? block.call(c) : c
45
+ }
46
+
47
+ source.sub!('#include "ruby.h"', '')
48
+
49
+ if $convert
50
+ $configure << %{
51
+
52
+ cat > $FILE.c <<EOF
53
+ #{source}
54
+ EOF
55
+
56
+ echo -n "Checking for #{header}... "
57
+ if [[ "`($CC $CFLAGS -c $FILE.c) 2>&1`" == "" ]]; then
58
+ DEFS="$DEFS\\n#define #{"HAVE_#{header.tr_cpp}"} 1"
59
+
60
+ echo yes
61
+ else
62
+ echo no
63
+ fi
64
+
65
+ }
66
+ end
67
+
68
+ result
69
+ end
70
+
71
+ def have_library (lib, func = nil, headers = nil, &block)
72
+ source = nil
73
+ result = __have_library(lib, func, headers) {|c|
74
+ source = block ? block.call(c) : c
75
+ }
76
+
77
+ source.sub!('#include "ruby.h"', '')
78
+
79
+ if $convert
80
+ $configure << %{
81
+
82
+ cat > $FILE.c <<EOF
83
+ #{source}
84
+ EOF
85
+
86
+ echo -n "Checking for #{lib}... "
87
+ if [[ "`($CC $CFLAGS -o $FILE -c $FILE.c -l#{lib}) 2>&1`" == "" ]]; then
88
+ echo yes
89
+ else
90
+ echo no
91
+
92
+ echo "Install #{lib} and try again"
93
+
94
+ exit 1
95
+ fi
96
+
97
+ }
98
+ end
99
+
100
+ result
101
+ end
102
+
103
+ def have_func (func, headers = nil, &block)
104
+ source = nil
105
+ result = __have_func(func, headers) {|c|
106
+ source = block ? block.call(c) : c
107
+ }
108
+
109
+ source.sub!('#include "ruby.h"', '')
110
+
111
+ if $convert
112
+ $configure << %{
113
+
114
+ cat > $FILE.c <<EOF
115
+ #{source}
116
+ EOF
117
+
118
+ echo -n "Checking for #{func}()#{" in #{[headers].flatten.join(' ')}" if headers}... "
119
+ if [[ "`($CC $CFLAGS -Wall -c $FILE.c) 2>&1`" == "" ]]; then
120
+ DEFS="$DEFS\\n#define #{"HAVE_#{func.tr_cpp}"} 1"
121
+
122
+ echo yes
123
+ else
124
+ echo no
125
+ fi
126
+
127
+ }
128
+ end
129
+
130
+ result
131
+ end
132
+
133
+ def have_macro (macro, headers = nil, opts = '', &block)
134
+ source = nil
135
+ result = __have_macro(macro, headers, opts) {|c|
136
+ source = block ? block.call(c) : c
137
+ }
138
+
139
+ source.sub!('#include "ruby.h"', '')
140
+
141
+ if $convert
142
+ $configure << %{
143
+
144
+ cat > $FILE.c <<EOF
145
+ #{source}
146
+ EOF
147
+
148
+ echo -n "Checking for #{macro}#{" in #{[headers].flatten.join(' ')}" if headers}... "
149
+ if [[ "`($CC $CFLAGS -c $FILE.c) 2>&1`" == "" ]]; then
150
+ DEFS="$DEFS\\n#define #{"HAVE_#{macro.tr_cpp}"} 1"
151
+
152
+ echo yes
153
+ else
154
+ echo no
155
+ fi
156
+
157
+ }
158
+ end
159
+
160
+ result
161
+ end
162
+
163
+ def check_sizeof (type, headers = nil, opts = '', &block)
164
+ source = nil
165
+ result = __check_sizeof(type, headers, opts) {|c|
166
+ source = block ? block.call(c) : c
167
+ }
168
+
169
+ source.sub!('#include "ruby.h"', '')
170
+
171
+ if $convert
172
+ $configure << %{
173
+
174
+ cat > $FILE.c <<EOF
175
+ #{source}
176
+ EOF
177
+
178
+ $CC $CFLAGS -o $FILE $FILE.c
179
+
180
+ echo -n "Checking size of #{type}#{" in #{[headers].flatten.join(' ')}" if headers}... "
181
+ if [[ "`($CC $CFLAGS -o $FILE $FILE.c) 2>&1`" == "" ]]; then
182
+ SIZE=$(exec $FILE)
183
+ DEFS="$DEFS\\n#define #{"SIZEOF_#{type.tr_cpp}"} $SIZE"
184
+
185
+ echo $SIZE
186
+ else
187
+ echo no
188
+
189
+ echo "Could not define size of #{type}"
190
+
191
+ exit 1
192
+ fi
193
+
194
+ }
195
+ end
196
+
197
+ result
198
+ end
199
+
200
+ def create_header (header = 'extconf.h')
201
+ if $convert
202
+ $configure << %{
203
+
204
+ cat > #{header} <<EOF
205
+ #ifndef #{header.tr_cpp}
206
+ #define #{header.tr_cpp}
207
+ EOF
208
+
209
+ echo -e $DEFS >> #{header}
210
+
211
+ cat >> #{header} <<EOF
212
+
213
+ #endif
214
+ EOF
215
+
216
+ DEFS=
217
+
218
+ }
219
+ end
220
+
221
+ __create_header(header)
222
+ end
223
+ end
224
+ # configure stuff
225
+
226
+ desc 'Convert the Rakefile to Makefile/configure'
227
+ task :convert => clean do |task|
228
+ class << task
229
+ def escape (name)
230
+ name.gsub(/[:]/, '_')
231
+ end
232
+
233
+ def do_make (task)
234
+ return if !task || (@done ||= []).member?(task)
235
+
236
+ task.prerequisites.each {|p|
237
+ scope = task.name.split(':')
238
+ scope.pop
239
+
240
+ t = Rake::Task[Rake::Task.scope_name(scope, p)] rescue nil
241
+
242
+ if !t
243
+ t = Rake::Task[p] rescue nil
244
+ t = nil unless t.is_a?(Rake::FileTask)
245
+ end
246
+
247
+ do_make(t)
248
+ }
249
+
250
+ $makefile << "\n#{escape(task.name)}: #{task.prerequisites.map {|p|
251
+ scope = task.name.split(':')
252
+ scope.pop
253
+
254
+ t = Rake::Task[Rake::Task.scope_name(scope, p)] rescue nil
255
+
256
+ if !t
257
+ t = Rake::Task[p] rescue nil
258
+ t = nil unless t.is_a?(Rake::FileTask)
259
+ end
260
+
261
+ escape(t.name) if t
262
+ }.compact.join(' ')}\n"
263
+
264
+ task.invoke
265
+
266
+ @done << task
267
+ end
268
+
269
+ def add_env (*names)
270
+ names.flatten.compact.each {|name|
271
+ $makefile << "#{name} = #{eval("::#{name}")}\n" if eval("::#{name}") rescue nil
272
+ }
273
+ end
274
+ end
275
+
276
+ $convert = true
277
+
278
+ task.add_env(EXPORT)
279
+
280
+ $makefile << "all: default\n"
281
+
282
+ Rake::Task.tasks.each {|t|
283
+ next if t.name == 'clean' || t.name == 'clobber'
284
+
285
+ task.do_make(t)
286
+ }
287
+
288
+ $makefile << "\nclean:\n"
289
+ CLEAN.exclude('Makefile', 'configure').each do |f|
290
+ $makefile << "\trm -rf #{f}\n"
291
+ end
292
+
293
+ $makefile << "\nclobber:\n"
294
+ CLEAN.exclude('Makefile', 'configure').each do |f|
295
+ $makefile << "\trm -rf #{f}\n"
296
+ end
297
+
298
+ CLOBBER.exclude('Makefile', 'configure').each do |f|
299
+ $makefile << "\trm -rf #{f}\n"
300
+ end
301
+
302
+ File.open('Makefile', 'w') {|f|
303
+ f.write $makefile
304
+ }
305
+
306
+ File.open('configure', 'w', 0755) {|f|
307
+ f.write "CC=${CC:-gcc}\n"
308
+ f.write "FILE=`mktemp -u`\n"
309
+ f.write "DEFS=\n"
310
+
311
+ f.write $configure
312
+ }
313
+
314
+ $makefile = ''
315
+ $configure = ''
316
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rake-convert
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - meh.
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-03-23 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description:
22
+ email: meh@paranoici.org
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/rake/convert.rb
31
+ has_rdoc: true
32
+ homepage: http://github.com/meh/rake-convert
33
+ licenses: []
34
+
35
+ post_install_message:
36
+ rdoc_options: []
37
+
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ requirements: []
57
+
58
+ rubyforge_project:
59
+ rubygems_version: 1.3.7
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: Convert a Rakefile to Makefile and configure script
63
+ test_files: []
64
+