reflexion 0.1.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 (74) hide show
  1. data/ChangeLog +8 -0
  2. data/README +4 -0
  3. data/Rakefile +70 -0
  4. data/VERSION +1 -0
  5. data/examples/hello/Rakefile +41 -0
  6. data/examples/hello/main.cpp +18 -0
  7. data/examples/ruby/app.rb +13 -0
  8. data/examples/ruby/checker.rb +41 -0
  9. data/examples/ruby/fps.rb +49 -0
  10. data/examples/ruby/hello.rb +38 -0
  11. data/examples/ruby/key.rb +44 -0
  12. data/examples/ruby/shapes.rb +124 -0
  13. data/examples/ruby/text.rb +35 -0
  14. data/ext/reflex/application.cpp +151 -0
  15. data/ext/reflex/extconf.rb +57 -0
  16. data/ext/reflex/key.cpp +128 -0
  17. data/ext/reflex/native.cpp +22 -0
  18. data/ext/reflex/points.cpp +160 -0
  19. data/ext/reflex/reflex.cpp +83 -0
  20. data/ext/reflex/reflex.h +39 -0
  21. data/ext/reflex/window.cpp +357 -0
  22. data/include/reflex/application.h +50 -0
  23. data/include/reflex/defs.h +258 -0
  24. data/include/reflex/helpers.h +32 -0
  25. data/include/reflex/reflex.h +26 -0
  26. data/include/reflex/ruby/application.h +39 -0
  27. data/include/reflex/ruby/key.h +39 -0
  28. data/include/reflex/ruby/points.h +39 -0
  29. data/include/reflex/ruby/reflex.h +21 -0
  30. data/include/reflex/ruby/window.h +39 -0
  31. data/include/reflex/ruby.h +14 -0
  32. data/include/reflex/window.h +79 -0
  33. data/include/reflex.h +13 -0
  34. data/lib/reflex/application.rb +25 -0
  35. data/lib/reflex/autoinit.rb +11 -0
  36. data/lib/reflex/bounds.rb +133 -0
  37. data/lib/reflex/helpers.rb +52 -0
  38. data/lib/reflex/module.rb +30 -0
  39. data/lib/reflex/point.rb +69 -0
  40. data/lib/reflex/reflex.rb +21 -0
  41. data/lib/reflex/window.rb +65 -0
  42. data/lib/reflex.rb +11 -0
  43. data/reflex.gemspec +57 -0
  44. data/src/cocoa/application.mm +90 -0
  45. data/src/cocoa/applicationdata.h +51 -0
  46. data/src/cocoa/cocoaapplication.h +19 -0
  47. data/src/cocoa/cocoaapplication.mm +180 -0
  48. data/src/cocoa/cocoawindow.h +44 -0
  49. data/src/cocoa/cocoawindow.mm +171 -0
  50. data/src/cocoa/defs.h +34 -0
  51. data/src/cocoa/defs.mm +84 -0
  52. data/src/cocoa/openglview.h +17 -0
  53. data/src/cocoa/openglview.mm +186 -0
  54. data/src/cocoa/reflex.mm +68 -0
  55. data/src/cocoa/window.mm +118 -0
  56. data/src/cocoa/windowdata.h +51 -0
  57. data/src/defs.cpp +47 -0
  58. data/src/win32/defs.cpp +150 -0
  59. data/src/win32/opengl.cpp +95 -0
  60. data/src/win32/opengl.h +50 -0
  61. data/src/win32/reflex.cpp +65 -0
  62. data/src/win32/window.cpp +480 -0
  63. data/src/window.cpp +60 -0
  64. data/support.rb +56 -0
  65. data/task/ext.rake +42 -0
  66. data/task/gem.rake +33 -0
  67. data/task/git.rake +22 -0
  68. data/task/lib.rake +54 -0
  69. data/test/helpers.rb +15 -0
  70. data/test/test_bounds.rb +163 -0
  71. data/test/test_point.rb +81 -0
  72. data/test/test_reflex.rb +17 -0
  73. data/test/test_window.rb +39 -0
  74. metadata +173 -0
data/ChangeLog ADDED
@@ -0,0 +1,8 @@
1
+ 2011-08-28 snori <snori@xord.org>
2
+
3
+ * v0.1.1
4
+
5
+
6
+ 2011-06-03 snori <snori@xord.org>
7
+
8
+ * delete Gemfile.
data/README ADDED
@@ -0,0 +1,4 @@
1
+
2
+ = Reflex - A Graphical User Interface Tool Kit.
3
+
4
+ == by snori@xord.org
data/Rakefile ADDED
@@ -0,0 +1,70 @@
1
+ # -*- mode: ruby; coding: utf-8 -*-
2
+ $: << File.expand_path(File.dirname __FILE__)
3
+ %w[../rucy/lib ../rays/lib ../reflex/lib].each do |path|
4
+ $: << File.expand_path(File.join File.dirname(__FILE__), *path.split('/'))
5
+ end
6
+ require 'rubygems'
7
+ require 'rbconfig'
8
+ require 'support'
9
+ require 'rays/module'
10
+ require 'reflex/module'
11
+
12
+
13
+ NAME = 'reflex'
14
+
15
+ SRCDIR = 'src'
16
+ INCDIR = 'include'
17
+ LIBDIR = 'lib'
18
+ EXTDIR = 'ext'
19
+ TASKDIR = 'task'
20
+
21
+ EXTEXT = RbConfig::CONFIG['DLEXT'] || 'so'
22
+
23
+ DEFS = %w[]
24
+ DEFS << 'WIN32' if win32?
25
+ DEFS << 'COCOA' if cocoa?
26
+
27
+ incroot = RbConfig::CONFIG['rubyhdrdir']
28
+ INCDIRS = Reflex.include_dirs + Rays.include_dirs + [
29
+ incroot,
30
+ "#{incroot}/#{RUBY_PLATFORM}",
31
+ '/opt/local/include',
32
+ '/opt/include'
33
+ ]
34
+
35
+ RUBY = ENV['RUBY'] || 'ruby'
36
+ GEM = ENV['GEM'] || 'gem'
37
+ GIT = ENV['GIT'] || 'git'
38
+ MAKE = ENV['MAKE'] || 'make'
39
+ CC = RbConfig::CONFIG['CC'] || ENV['CC'] || 'g++'
40
+ CFLAGS = '-Wall -O' + DEFS.map{|s| " -D#{s}"}.join
41
+ AR = ENV['AR'] || 'ar'
42
+ ARFLAGS = 'crs'
43
+
44
+
45
+ task :default => :build
46
+
47
+ task :build => :ext
48
+
49
+ task :rebuild => [:clean, :build]
50
+
51
+ task :lib => 'lib:build'
52
+
53
+ task :ext => 'ext:build'
54
+
55
+ task :gem => 'gem:build'
56
+
57
+ task :install => 'gem:install'
58
+
59
+ task :uninstall => 'gem:uninstall'
60
+
61
+ task :clean => ['lib:clean', 'ext:clean', 'gem:clean']
62
+
63
+ task :test => :ext do
64
+ Dir['test/**/test_*.rb'].each do |rb|
65
+ sh %( ruby #{rb} )
66
+ end
67
+ end
68
+
69
+
70
+ Dir["#{TASKDIR}/**/*.rake"].each {|path| load path}
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
@@ -0,0 +1,41 @@
1
+ # -*- mode: ruby; coding: utf-8 -*-
2
+ %w[../../../rucy/lib ../../../rays/lib ../../lib].each do |path|
3
+ $: << File.expand_path(File.join File.dirname(__FILE__), *path.split('/'))
4
+ end
5
+ require 'rubygems'
6
+ require 'reflex/reflex'
7
+
8
+
9
+ OUT = 'hello'
10
+ SRCS = Dir.glob('*.cpp')
11
+
12
+ REFLEX = Reflex.name.downcase
13
+ LIBREFLEX = File.join(Reflex.library_dirs[0], "lib#{REFLEX}.a")
14
+
15
+ INCDIRS = %w[/opt/local/include /opt/include] + Reflex.include_dirs
16
+ LIBDIRS = %w[] + Reflex.library_dirs
17
+
18
+ LIBS = %w[stdc++ objc] + [REFLEX]
19
+ FRAMEWORKS = %w[Cocoa]
20
+
21
+ CFLAGS = INCDIRS.map{|s| "-I#{s}"}.join(' ')
22
+ LDFLAGS = (
23
+ LIBDIRS.map {|s| "-L#{s}"} +
24
+ LIBS.map {|s| "-l#{s}"} +
25
+ FRAMEWORKS.map {|s| "-framework #{s}"}
26
+ ).join(' ')
27
+
28
+
29
+ task :default => :run
30
+
31
+ task :run => OUT do
32
+ sh %( ./#{OUT} )
33
+ end
34
+
35
+ file OUT => [LIBREFLEX] + SRCS do
36
+ sh %( gcc -o #{OUT} #{CFLAGS} #{LDFLAGS} #{SRCS.join ' '} )
37
+ end
38
+
39
+ task LIBREFLEX do
40
+ sh %( cd #{Reflex.root_dir} && rake )
41
+ end
@@ -0,0 +1,18 @@
1
+ #include <reflex.h>
2
+
3
+
4
+ using namespace Reflex;
5
+
6
+
7
+ int
8
+ main (int argc, char** argv)
9
+ {
10
+ init();
11
+ Window win;
12
+ win.set_title("Reflex Test Window");
13
+ win.set_bounds(100, 100, 600, 500);
14
+ win.show();
15
+ run();
16
+ fin();
17
+ return EXIT_SUCCESS;
18
+ }
@@ -0,0 +1,13 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[rays reflex].product(%w[ext lib]).each do |paths|
5
+ $: << File.expand_path(
6
+ File.join File.dirname(__FILE__), "..", "..", "..", *paths)
7
+ end
8
+
9
+ require 'reflex'
10
+
11
+
12
+ Reflex::Window.new(:bounds => [100, 100, 500, 500]).show
13
+ Reflex.run "AppName"
@@ -0,0 +1,41 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[rays reflex].product(%w[ext lib]).each do |paths|
5
+ $: << File.expand_path(
6
+ File.join File.dirname(__FILE__), "..", "..", "..", *paths)
7
+ end
8
+
9
+ require 'rubygems'
10
+ require 'reflex'
11
+
12
+
13
+ class CheckerWindow < Reflex::Window
14
+
15
+ def initialize ()
16
+ super
17
+ set :title, "Hello Reflex!"
18
+ set :bounds, 100, 100, 320, 240
19
+ painter.font = Rays::Font.new nil, 32
20
+ painter.clear = 1
21
+ end
22
+
23
+ def draw ()
24
+ count = 16
25
+ size = 10
26
+ paint do |p|
27
+ count.times do |x|
28
+ count.times do |y|
29
+ next if (x + y) % 2 == 0
30
+ p.fill = x.to_f / count, y.to_f / count, 1
31
+ p.rect x * size, y * size, size - 1, size - 1
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ end# CheckerWindow
38
+
39
+
40
+ CheckerWindow.new.show
41
+ Reflex.run
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[rays reflex].product(%w[ext lib]).each do |paths|
5
+ $: << File.expand_path(
6
+ File.join File.dirname(__FILE__), "..", "..", "..", *paths)
7
+ end
8
+
9
+ require 'reflex'
10
+
11
+
12
+ x = 0
13
+ y = 0
14
+ font = Rays::Font.new("Osaka", 32)
15
+ prev = Time.now
16
+ fps = 0
17
+
18
+ w = Reflex::Window.
19
+ new(:title => "Reflex on Ruby", :bounds => [100, 100, 600, 400]).
20
+ before(:close) {|o| o.hide; sleep 1; o.show; sleep 1}.
21
+ on(:moved) {|o, x, y| p [x, y]}.
22
+ on(:resized) {|o, w, h| p [w, h]}.
23
+ on(:update) {|o| o.redraw}.
24
+ on(:draw) do |o|
25
+ b = o.bounds 0
26
+ o.paint do |p|
27
+ p.fill = 1, 0.5, 0.5, 0.05
28
+ #p.stroke = 0.5, 0.5, 1
29
+ 100.times do
30
+ n = rand * Math::PI * 2
31
+ xx = x + Math.sin(n) * 50
32
+ yy = y + Math.cos(n) * 50
33
+ p.rect xx, yy, 50, 50
34
+ end
35
+ p.fill = 1
36
+ p.text "hello Rays/Reflex!", x, y + 32, font
37
+ x = (x + 1) % 100
38
+ y = (y + 1) % 100
39
+
40
+ now = Time.now
41
+ fps = 1 / (now - prev) if x % 10 == 0
42
+ p.fill = 1, 1, 1, 1
43
+ p.text "#{fps.to_i} FPS", 0, b.bottom - font.height, font
44
+ prev = now
45
+ end
46
+ end.
47
+ show
48
+
49
+ Reflex.run
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[rays reflex].product(%w[ext lib]).each do |paths|
5
+ $: << File.expand_path(
6
+ File.join File.dirname(__FILE__), "..", "..", "..", *paths)
7
+ end
8
+
9
+ require 'rubygems'
10
+ require 'reflex'
11
+
12
+
13
+ class HelloWindow < Reflex::Window
14
+
15
+ def initialize ()
16
+ super
17
+ set :title, "Hello Reflex!"
18
+ set :bounds, 100, 100, 320, 240
19
+ painter.font = Rays::Font.new nil, 32
20
+ end
21
+
22
+ def draw ()
23
+ paint do |p|
24
+ p.fill = 1
25
+ p.text "hello world!", 100, 100
26
+ end
27
+ end
28
+
29
+ def update ()
30
+ #painter.clear = rand, rand, rand
31
+ redraw
32
+ end
33
+
34
+ end# HelloWindow
35
+
36
+
37
+ HelloWindow.new.show
38
+ Reflex.run
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[rays reflex].product(%w[ext lib]).each do |paths|
5
+ $: << File.expand_path(
6
+ File.join File.dirname(__FILE__), "..", "..", "..", *paths)
7
+ end
8
+
9
+ require 'rubygems'
10
+ require 'reflex'
11
+
12
+
13
+ $text = $pos = ''
14
+
15
+
16
+ w = Reflex::Window.new
17
+ w.title = "Reflex Input Sample"
18
+ w.bounds = 100, 100, 800, 300
19
+ w.painter.font = Rays::Font.new nil, 32
20
+
21
+ w.on :draw do
22
+ w.paint do |p|
23
+ p.fill = 1
24
+ p.text $text, 100, 100
25
+ p.text $pos, 100, 150
26
+ end
27
+ end
28
+
29
+ w.on :key_down do |obj, key|
30
+ w.close if key.code == 53
31
+ $text += key.chars
32
+ $text = $text[-10..-1] if $text.size > 10
33
+ p [key.chars, key.code, key.repeat, key.modifiers]
34
+ w.redraw
35
+ end
36
+
37
+ w.on :points_moved do |obj, points|
38
+ $pos = "#{points.x}, #{points.y}"
39
+ p [points.type, points.x, points.y, points.size, points.modifiers, points.count, points.drag]
40
+ w.redraw
41
+ end
42
+
43
+ w.show
44
+ Reflex.run
@@ -0,0 +1,124 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[rays reflex].product(%w[ext lib]).each do |paths|
5
+ $: << File.expand_path(
6
+ File.join File.dirname(__FILE__), "..", "..", "..", *paths)
7
+ end
8
+
9
+ require 'rubygems'
10
+ require 'reflex'
11
+
12
+
13
+ module DisplayFPS
14
+
15
+ def fps ()
16
+ @fps ||= 0
17
+ @fps_count ||= 0
18
+ now = Time.now
19
+ @fps = 1.0 / (now - @fps_prev) if
20
+ @fps_prev && @fps_prev < now && (@fps_count += 1) % 32 == 1
21
+ @fps_prev = now
22
+ @fps.to_i
23
+ end
24
+
25
+ def draw_fps (p, x = 0, y = 0)
26
+ fill = p.fill
27
+ =begin
28
+ p.fill = 1
29
+ (-1..1).each do |xx|
30
+ (-1..1).each do |yy|
31
+ p.text fps, x + xx, y + yy, @fps_font
32
+ end
33
+ end
34
+ =end
35
+ p.fill = 0
36
+ p.text "#{fps} FPS", x, y, @fps_font ||= Rays::Font.new(nil, 20)
37
+ p.fill = fill
38
+ end
39
+
40
+ end# DisplayFPS
41
+
42
+
43
+ class Ring
44
+
45
+ def initialize (x, y, width, height, colors, rotation = 1)
46
+ @x, @y, @width, @height, @colors, @rot, @angle, @min =
47
+ x, y, width, height, colors, rotation, 0, 0
48
+ end
49
+
50
+ def draw (p)
51
+ w = 45
52
+ p.fill = *@colors[0]
53
+ fin p, 0, w
54
+ fin p, 180, w
55
+ p.fill = *@colors[1]
56
+ fin p, 90, w
57
+ fin p, 270, w
58
+ end
59
+
60
+ def update ()
61
+ @angle = (@angle + @rot) % 360
62
+ end
63
+
64
+ def fin (p, angle, width)
65
+ angle += @angle
66
+ p.arc @x, @y, @width, @height, angle, angle + width, @min
67
+ end
68
+
69
+ end# Ring
70
+
71
+
72
+ class ShapesWindow < Reflex::Window
73
+
74
+ include Enumerable
75
+ include DisplayFPS
76
+
77
+ def initialize ()
78
+ super
79
+ set :title, "Shapes Sample"
80
+ set :bounds, 100, 400, 640, 240
81
+ painter.clear = 1
82
+ @rings = []
83
+ setup
84
+ end
85
+
86
+ def setup ()
87
+ c = [0.9, 0.5, 0.5], [0.5, 0.5, 0.9]
88
+ w = 100
89
+ h = 100
90
+ rot = 0
91
+ (0..5).each do |y|
92
+ (0..10).each do |x|
93
+ @rings << Ring.new(x * w, y * h, w, h, c, rot += 0.1)
94
+ end
95
+ end
96
+ end
97
+
98
+ def draw ()
99
+ paint do |p|
100
+ each {|o| o.draw p}
101
+ end
102
+ end
103
+
104
+ def update ()
105
+ each {|o| o.update}
106
+ redraw
107
+ @count ||= 0
108
+ fps_ = fps
109
+ #puts "#{fps_} FPS, GC count: #{GC.stat[:count]}" if (@count += 1) % 100 == 0
110
+ end
111
+
112
+ def key_down (key)
113
+ close if key.code == 53 || key.chars =~ /q/i
114
+ end
115
+
116
+ def each ()
117
+ @rings.each {|o| yield o}
118
+ end
119
+
120
+ end# ShapesWindow
121
+
122
+
123
+ ShapesWindow.new.show
124
+ Reflex.run "Shapes"
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[rays reflex].product(%w[ext lib]).each do |paths|
5
+ $: << File.expand_path(
6
+ File.join File.dirname(__FILE__), "..", "..", "..", *paths)
7
+ end
8
+
9
+ require 'reflex'
10
+
11
+
12
+ lines = File.readlines(__FILE__)
13
+
14
+
15
+ win = Reflex::Window.
16
+ new do
17
+ set :title, "Rays/Reflex Text Test"
18
+ set :bounds, 100, 100, 600, 400
19
+ paint do |p|
20
+ p.clear = 1
21
+ p.font = Rays::Font.new 'Courier', 12
22
+ end
23
+ end.
24
+ # on(:update) {|o| o.redraw}.
25
+ on(:draw) do |o|
26
+ o.paint do |p|
27
+ p.fill = 0 #rand, rand, rand, 1
28
+ lines.each.with_index do |line, i|
29
+ p.text line.chomp, 0, p.font.height * i
30
+ end
31
+ end
32
+ end.
33
+ show
34
+
35
+ Reflex.run
@@ -0,0 +1,151 @@
1
+ #include "reflex/ruby/application.h"
2
+
3
+
4
+ #include <rucy.h>
5
+ #include "reflex.h"
6
+
7
+
8
+ using namespace Rucy;
9
+
10
+
11
+ namespace Reflex
12
+ {
13
+
14
+
15
+ Class
16
+ application_class ()
17
+ {
18
+ static Class c = reflex_module().define_class("Application");
19
+ return c;
20
+ }
21
+
22
+
23
+ }// Reflex
24
+
25
+
26
+ namespace Rucy
27
+ {
28
+
29
+
30
+ Value
31
+ value (const Reflex::Application& application)
32
+ {
33
+ return new_type<Reflex::Application>(
34
+ Reflex::application_class(), new Reflex::Application(application));
35
+ }
36
+
37
+
38
+ }// Rucy
39
+
40
+
41
+ class RubyApplication : public Reflex::Application
42
+ {
43
+
44
+ public:
45
+
46
+ typedef Reflex::Application Super;
47
+
48
+ Value self;
49
+
50
+ void mark ()
51
+ {
52
+ self.mark();
53
+ }
54
+
55
+ virtual bool run ()
56
+ {
57
+ SYM(run);
58
+ return self.call(run);
59
+ }
60
+
61
+ virtual bool quit ()
62
+ {
63
+ SYM(quit);
64
+ return self.call(quit);
65
+ }
66
+
67
+ virtual bool about ()
68
+ {
69
+ SYM(about);
70
+ return self.call(about);
71
+ }
72
+
73
+ };// RubyApplication
74
+
75
+
76
+ #define this ((RubyApplication*) to<Reflex::Application*>(self))
77
+
78
+ #define CHECK CHECK_OBJECT(self, RubyApplication, Reflex::application_class())
79
+
80
+
81
+ static
82
+ RUBY_DEF_ALLOC(alloc, klass)
83
+ {
84
+ RubyApplication* app = new RubyApplication;
85
+ return app->self = new_type<RubyApplication>(klass, app, mark_type<RubyApplication>);
86
+ }
87
+ RUBY_END
88
+
89
+ static
90
+ RUBY_DEF0(run)
91
+ {
92
+ CHECK;
93
+ if (!this->Super::run())
94
+ system_error("failed to run application.");
95
+ return self;
96
+ }
97
+ RUBY_END
98
+
99
+ static
100
+ RUBY_DEF0(quit)
101
+ {
102
+ CHECK;
103
+ if (!this->Super::quit())
104
+ system_error("failed to quit application.");
105
+ return self;
106
+ }
107
+ RUBY_END
108
+
109
+ static
110
+ RUBY_DEF0(about)
111
+ {
112
+ CHECK;
113
+ if (!this->Super::about())
114
+ system_error("failed to show about application.");
115
+ return self;
116
+ }
117
+ RUBY_END
118
+
119
+ static
120
+ RUBY_DEF0(get_name)
121
+ {
122
+ CHECK;
123
+ String s;
124
+ if (!this->get_name(&s))
125
+ system_error("failed to get name of application.");
126
+ return Value(s.c_str());
127
+ }
128
+ RUBY_END
129
+
130
+ static
131
+ RUBY_DEF1(set_name, name)
132
+ {
133
+ CHECK;
134
+ if (!this->set_name(name.c_str()))
135
+ system_error("failed to set name of application.");
136
+ return name;
137
+ }
138
+ RUBY_END
139
+
140
+
141
+ void
142
+ Init_application ()
143
+ {
144
+ Reflex::application_class()
145
+ .define_alloc_func(alloc)
146
+ .define_method("run", run)
147
+ .define_method("quit", quit)
148
+ .define_method("about", about)
149
+ .define_method("name", get_name)
150
+ .define_method("name=", set_name);
151
+ }
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*-
2
+ %w[../../../rucy/lib ../../lib].each do |path|
3
+ $: << File.expand_path(File.join File.dirname(__FILE__), *path.split('/'))
4
+ end
5
+ require 'rubygems'
6
+ require 'mkmf'
7
+ require 'rucy/module'
8
+ require 'reflex/module'
9
+
10
+
11
+ DEBUG = ENV['DEBUG'] || false
12
+
13
+ DEFS = []
14
+ INCDIRS = %w[/opt/local/include /opt/include] +
15
+ Rucy.include_dirs + Reflex.include_dirs
16
+ LIBDIRS = %w[] +
17
+ Rucy.library_dirs + Reflex.library_dirs
18
+
19
+ HEADERS = %w[
20
+ boost/shared_ptr.hpp
21
+ ruby.h
22
+ rucy.h
23
+ reflex.h
24
+ ]
25
+ LIBS = %w[stdc++ rucy reflex]
26
+ FRAMEWORKS = %w[]
27
+
28
+
29
+ DEFS << '_DEBUG' if DEBUG
30
+
31
+ case RUBY_PLATFORM
32
+ when /mswin|ming|cygwin/
33
+ DEFS << 'WINDOWS' << 'WIN32' << $~[0].upcase
34
+ LIBS.unshift 'gdi32', 'opengl32'
35
+ when /darwin/
36
+ DEFS << 'COCOA'
37
+ FRAMEWORKS << 'Cocoa'# << 'OpenGL'
38
+ end
39
+
40
+ $CPPFLAGS << DEFS.map {|s| " -D#{s}"}.join
41
+ $CPPFLAGS << INCDIRS.map {|s| " -I#{s}"}.join
42
+ $LDFLAGS << LIBDIRS.map {|s| " -L#{s}"}.join
43
+ $LDFLAGS << FRAMEWORKS.map {|s| " -framework #{s}"}.join
44
+ $LOCAL_LIBS << ' -lrucy'
45
+
46
+ dir_config 'boost'
47
+ dir_config 'rucy', Rucy.root_dir
48
+ dir_config 'reflex', Reflex.root_dir
49
+
50
+
51
+ Config::CONFIG.each {|key, val| val.gsub!(/gcc/, 'g++')}
52
+
53
+ exit 1 unless HEADERS.all? {|s| have_header(s)}
54
+ exit 1 unless LIBS.all? {|s| have_library(s)}
55
+
56
+
57
+ create_makefile 'reflex/native'