webroar 0.3.1 → 0.4.0

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 (97) hide show
  1. data/CHANGELOG +48 -1
  2. data/README +11 -14
  3. data/Rakefile +1 -1
  4. data/conf/mime_type.yml +172 -166
  5. data/conf/server_internal_config.yml +30 -8
  6. data/doc/user-guide.html +294 -153
  7. data/doc/user-guide.txt +9 -13
  8. data/lib/command_runner.rb +1 -0
  9. data/lib/dependencies.rb +18 -15
  10. data/lib/installer.rb +115 -50
  11. data/src/admin_panel/app/controllers/admin_controller.rb +1 -15
  12. data/src/admin_panel/app/controllers/application_controller.rb +2 -2
  13. data/src/admin_panel/app/controllers/application_specification_controller.rb +2 -1
  14. data/src/admin_panel/app/controllers/headers_controller.rb +73 -0
  15. data/src/admin_panel/app/controllers/mail_specification_controller.rb +10 -0
  16. data/src/admin_panel/app/controllers/server_specification_controller.rb +14 -0
  17. data/src/admin_panel/app/helpers/admin_helper.rb +0 -85
  18. data/src/admin_panel/app/models/app.rb +1 -1
  19. data/src/admin_panel/app/models/application_specification.rb +33 -25
  20. data/src/admin_panel/app/models/headers.rb +116 -0
  21. data/src/admin_panel/app/models/mail_specification.rb +20 -5
  22. data/src/admin_panel/app/models/server_specification.rb +2 -7
  23. data/src/admin_panel/app/views/admin/configuration.html.erb +10 -5
  24. data/src/admin_panel/app/views/exceptions/_exception_list_partial.html.erb +4 -4
  25. data/src/admin_panel/app/views/graph/_graph_page.html.erb +3 -0
  26. data/src/admin_panel/app/views/headers/_add_expires_text_box.html.erb +35 -0
  27. data/src/admin_panel/app/views/headers/_expires_by_type_form.html.erb +65 -0
  28. data/src/admin_panel/app/views/headers/_headers_table.html.erb +113 -0
  29. data/src/admin_panel/app/views/mail_specification/_current_spec.html.erb +168 -0
  30. data/src/admin_panel/app/views/{admin → server_specification}/_add_div.html.erb +1 -1
  31. data/src/admin_panel/config/initializers/application_constants.rb +6 -0
  32. data/src/admin_panel/lib/control.rb +6 -3
  33. data/src/admin_panel/lib/scgi.rb +74 -21
  34. data/src/admin_panel/lib/yaml_writer.rb +51 -17
  35. data/src/admin_panel/public/javascripts/application.js +20 -1
  36. data/src/head/wr_access_log.c +2 -2
  37. data/src/head/wr_application.c +294 -236
  38. data/src/head/wr_application.h +8 -8
  39. data/src/head/wr_configurator.c +451 -517
  40. data/src/head/wr_configurator.h +10 -115
  41. data/src/head/wr_connection.c +26 -25
  42. data/src/head/wr_connection.h +2 -3
  43. data/src/head/wr_controller.c +110 -93
  44. data/src/head/wr_controller.h +6 -6
  45. data/src/head/wr_main.c +31 -24
  46. data/src/head/wr_request.c +70 -93
  47. data/src/head/wr_request.h +0 -4
  48. data/src/head/wr_resolver.c +21 -15
  49. data/src/head/wr_resolver.h +2 -2
  50. data/src/head/wr_server.c +36 -26
  51. data/src/head/wr_server.h +5 -5
  52. data/src/head/wr_worker.c +551 -512
  53. data/src/head/wr_worker.h +33 -20
  54. data/src/helper/wr_config.c +316 -0
  55. data/src/helper/wr_config.h +235 -0
  56. data/src/helper/wr_helper.h +1 -5
  57. data/src/helper/wr_logger.c +4 -4
  58. data/src/helper/wr_scgi.c +3 -4
  59. data/src/helper/wr_scgi.h +2 -0
  60. data/src/helper/wr_string.h +2 -2
  61. data/src/helper/wr_util.c +3 -1
  62. data/src/helper/wr_util.h +0 -0
  63. data/src/helper/wr_yaml_parser.c +30 -0
  64. data/src/helper/wr_yaml_parser.h +1 -0
  65. data/src/ruby_lib/exception_tracker/instrumentation/action_controller.rb +2 -1
  66. data/src/ruby_lib/mailer/smtpmail.rb +7 -4
  67. data/src/ruby_lib/profiler/instrumentation/action_controller.rb +2 -1
  68. data/src/ruby_lib/profiler/instrumentation/active_record.rb +3 -0
  69. data/src/ruby_lib/rack/adapter/rails.rb +14 -7
  70. data/src/ruby_lib/ruby_interface/client.rb +1 -1
  71. data/src/ruby_lib/ruby_interface/version.rb +2 -2
  72. data/src/ruby_lib/webroar_app_loader.rb +4 -2
  73. data/src/worker/wkr_controller.c +200 -140
  74. data/src/worker/wkr_http.c +14 -28
  75. data/src/worker/wkr_http.h +4 -4
  76. data/src/worker/wkr_http_request.c +12 -11
  77. data/src/worker/wkr_http_request.h +7 -8
  78. data/src/worker/wkr_http_response.c +10 -14
  79. data/src/worker/wkr_http_response.h +0 -1
  80. data/src/worker/wkr_main.c +74 -140
  81. data/src/worker/wkr_static.c +295 -108
  82. data/src/worker/wkr_static.h +20 -7
  83. data/src/worker/worker.c +245 -70
  84. data/src/worker/worker.h +46 -34
  85. data/tasks/compile.rake +128 -175
  86. data/tasks/test.rake +345 -469
  87. data/test/spec/webroar_command_spec.rb +23 -0
  88. metadata +173 -43
  89. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/README +0 -34
  90. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/Rakefile +0 -13
  91. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/init.rb +0 -5
  92. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/lib/action_mailer_tls.rb +0 -16
  93. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/lib/smtp_tls.rb +0 -123
  94. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/test/tls_test.rb +0 -42
  95. data/src/head/wr_config.h +0 -165
  96. data/src/ruby_lib/mailer/action_mailer_tls.rb +0 -16
  97. data/src/ruby_lib/mailer/smtp_tls.rb +0 -123
data/tasks/compile.rake CHANGED
@@ -24,161 +24,121 @@
24
24
  #rake::clean, removes all the object files from obj directory.
25
25
  #rake::clobber, performs rake::clean, also removes executable from bin directory.
26
26
 
27
- #% $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/lib")
28
-
29
27
  require 'mkmf'
30
28
 
29
+ CC = CONFIG['CC']
30
+ ROOT_DIR = File.expand_path(File.join(File.dirname(__FILE__), '..')).freeze
31
+ LIBEV_DIR = File.join(ROOT_DIR, 'src', 'vendor', 'libev').freeze
32
+ EBB_DIR = File.join(ROOT_DIR, 'src', 'vendor', 'libebb').freeze
33
+ YAML_DIR = File.join(ROOT_DIR, 'src', 'vendor', 'libyaml').freeze
34
+ BIN_DIR = File.join(ROOT_DIR,'bin').freeze
35
+ HEAD_DIR = File.join(ROOT_DIR, 'src', 'head').freeze
36
+ HELPER_DIR = File.join(ROOT_DIR, 'src', 'helper').freeze
37
+ WORKER_DIR = File.join(ROOT_DIR, 'src', 'worker').freeze
38
+ CONF_DIR = File.join(ROOT_DIR, 'conf').freeze
39
+ UNIT_TEST_DIR = File.join(ROOT_DIR, 'test', 'unit').freeze
40
+ HEAD_OBJ_DIR = File.join(ROOT_DIR, 'obj', 'head').freeze
41
+ HELPER_OBJ_DIR = File.join(ROOT_DIR, 'obj', 'helper').freeze
42
+ WORKER_OBJ_DIR = File.join(ROOT_DIR, 'obj', 'worker').freeze
43
+ TEST_OBJ_DIR = File.join(ROOT_DIR, 'obj', 'test').freeze
44
+ LOG_FILES = File.join('','var','log','webroar').freeze
45
+ TMP_FILES = File.join('','tmp').freeze
46
+ RUBY_VERSION_CODE = RUBY_VERSION.gsub(/\D/, '').freeze
47
+
31
48
  #Boolean to keep check method webroar_config has been called or not
32
- $webroar_config_called=false
49
+ $webroar_config_called = false
33
50
 
34
51
  ## Set compilation flags needed by libebb & libev. Courtesy libebb
35
- $flags = []
52
+ $flags = ""
36
53
 
37
- def webroar_config
38
- #add flag to compile libev
39
-
40
- if have_header('sys/select.h')
41
- $flags << '-DEV_USE_SELECT'
42
- end
43
-
44
- if have_header('poll.h')
45
- $flags << '-DEV_USE_POLL'
46
- end
47
-
48
- if have_header('sys/epoll.h')
49
- $flags << '-DEV_USE_EPOLL'
50
- end
54
+ ## Set library flags needed
55
+ $lib_flags = ""
56
+
57
+ CLEAN.include(File.join(WORKER_OBJ_DIR,'*.o'), File.join(HEAD_OBJ_DIR,'*.o'), File.join(HELPER_OBJ_DIR,'*.o'), File.join(TEST_OBJ_DIR,'*.o'))
58
+ CLOBBER.include(File.join(BIN_DIR,'webroar-head'),File.join(BIN_DIR,'webroar-worker'), File.join(UNIT_TEST_DIR,'*.so'))
59
+
60
+ def set_flags
61
+ flags = []
62
+ flags << '-DEV_USE_SELECT' if have_header('sys/select.h')
63
+ flags << '-DEV_USE_POLL' if have_header('poll.h')
64
+ flags << '-DEV_USE_EPOLL' if have_header('sys/epoll.h')
65
+ flags << '-DEV_USE_KQUEUE' if have_header('sys/event.h') and have_header('sys/queue.h')
66
+ flags << '-DEV_USE_PORT' if have_header('port.h')
67
+ flags << '-DEV_USE_INOTIFY' if have_header('sys/inotify.h')
68
+ flags << '-DEV_USE_MONOTONIC=0'
69
+ flags << '-DHAVE_GNUTLS' if ENV['ssl'].eql?("yes")
70
+ flags << "-DRUBY_VERSION=#{RUBY_VERSION_CODE}"
71
+ flags << Config::expand($CFLAGS,CONFIG)
72
+ flags << "-g -O2" if RUBY_PLATFORM =~ /darwin/
73
+ flags << "-DL_ERROR -DL_INFO"
74
+ $flags << flags.join(" ")
75
+ end
76
+
77
+ def set_include_flags
78
+ inc_flags = [" "]
79
+ inc_flags << " #{ENV['include_flags']}" if ENV['include_flags']
51
80
 
52
- if have_header('sys/event.h') and have_header('sys/queue.h')
53
- $flags << '-DEV_USE_KQUEUE'
81
+ if RUBY_VERSION_CODE.to_i < 190
82
+ inc_flags << Config::expand($INCFLAGS,CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote))
83
+ else
84
+ inc_flags << Config::expand($INCFLAGS,CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote, 'arch_hdrdir' => "#$arch_hdrdir", 'top_srcdir' => $top_srcdir.quote))
54
85
  end
55
86
 
56
- if have_header('port.h')
57
- $flags << '-DEV_USE_PORT'
58
- end
87
+ inc_flags << " #{Config::CONFIG['cppflags']}" if Config::CONFIG['cppflags']
59
88
 
60
- if have_header('sys/inotify.h')
61
- $flags << '-DEV_USE_INOTIFY'
62
- end
89
+ include_dir = ["#{LIBEV_DIR}","#{EBB_DIR}","#{HEAD_DIR}","#{YAML_DIR}","#{HELPER_DIR}","#{UNIT_TEST_DIR}", "#{WORKER_DIR}"]
90
+ include_dir << Config::CONFIG['includedir'] if Config::CONFIG['includedir']
63
91
 
64
- $flags << '-DEV_USE_MONOTONIC=0'
65
- if ENV['ssl'].eql?("yes")
66
- puts "Adding HAVE_GNUTLS flag."
67
- $flags << '-DHAVE_GNUTLS'
92
+ include_dir.each do |dir|
93
+ inc_flags << " -I#{dir} "
68
94
  end
69
- $flags = $flags.join(" ")
70
- $webroar_config_called=true
95
+ $flags << inc_flags.join(" ")
71
96
  end
72
97
 
73
- #Create directories if they don't exists
74
- def create_directories(required_directories)
75
- rv = true
76
- for directory in required_directories
77
- #check to see if it exists
78
- unless File.exists?(directory)
79
- begin
80
- print "#{directory} doesn't exist. Creating it..."
81
- FileUtils.mkdir_p(directory)
82
- rescue Exception => e
83
- puts "Failed."
84
- puts e
85
- puts e.backtrace
86
- rv = false
87
- next
88
- end
89
- puts "Created."
90
- end
91
- end
92
- rv
98
+ def set_lib_flags
99
+ lib_flags = [$libs, $LIBS]
100
+ lib_flags << " #{ENV['library_flags']}" if ENV['library_flags']
101
+ lib_flags << "-L" + Config::expand($libdir,CONFIG)
102
+ lib_flags << " "
103
+ $lib_flags << lib_flags.join(" ")
93
104
  end
94
105
 
95
- ruby_version_code = RUBY_VERSION.gsub(/\D/, '')
96
- $flags << "-DRUBY_VERSION=#{ruby_version_code}"
97
- ## Include for ruby files
98
- if ruby_version_code.to_i < 190
99
- $inc_flags = Config::expand($INCFLAGS,CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote))
100
- else
101
- $inc_flags = Config::expand($INCFLAGS,CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote, 'arch_hdrdir' => "#$arch_hdrdir", 'top_srcdir' => $top_srcdir.quote))
102
- end
103
-
104
- $inc_flags << " #{Config::CONFIG['cppflags']}" if Config::CONFIG['cppflags']
105
-
106
- $c_flags = Config::expand($CFLAGS,CONFIG)
107
- if RUBY_PLATFORM =~ /darwin/
108
- $c_flags += " -g -O2 "
109
- end
110
- $debug_flags = " -DL_ERROR -DL_INFO "
111
-
112
- ## Set static veriables
113
-
114
- COMPILER = CONFIG['CC']
115
- DIR = File.expand_path(File.join(File.dirname(__FILE__), '..')).freeze
116
- SRC_DIR = File.join(DIR, 'src').freeze
117
- HEAD_DIR = File.join(SRC_DIR, 'head').freeze
118
- HELPER_DIR = File.join(SRC_DIR, 'helper').freeze
119
- VENDOR_DIR = File.join(SRC_DIR, 'vendor').freeze
120
- LIBEV_DIR = File.join(VENDOR_DIR, 'libev').freeze
121
- EBB_DIR = File.join(VENDOR_DIR, 'libebb').freeze
122
- BIN_DIR = File.join(DIR,'bin').freeze
123
- OBJ_DIR = File.join(DIR,'obj').freeze
124
- WORKER_DIR = File.join(SRC_DIR, 'worker').freeze
125
- WORKER_OBJ_DIR = File.join(OBJ_DIR, 'worker').freeze
126
- YAML_DIR = File.join(VENDOR_DIR, 'libyaml').freeze
127
- YAML_OBJ_DIR = File.join(OBJ_DIR, 'libyaml').freeze
128
- CONF_DIR = File.join(SRC_DIR, 'conf').freeze
129
- UNIT_TEST_DIR = File.join(DIR, 'test', 'unit').freeze
130
- TEST_OBJ_DIR = File.join(OBJ_DIR, 'test').freeze
131
- LOG_FILES = File.join('','var','log','webroar').freeze
132
- TMP_FILES = File.join('','tmp').freeze
133
-
134
- ## Create necessory directories
135
- #create_directories([OBJ_DIR, WORKER_OBJ_DIR, YAML_OBJ_DIR, TEST_OBJ_DIR, TMP_FILES, LOG_FILES])
136
-
137
- include_dir = ["#{LIBEV_DIR}","#{EBB_DIR}","#{HEAD_DIR}","#{YAML_DIR}","#{HELPER_DIR}","#{UNIT_TEST_DIR}", "#{WORKER_DIR}"]
138
-
139
- include_dir.each do |dir|
140
- $inc_flags << " -I#{dir} "
106
+ def webroar_config
107
+ set_flags
108
+ set_include_flags
109
+ set_lib_flags
110
+ $webroar_config_called = true
141
111
  end
142
112
 
143
- $inc_flags << " #{ENV['include_flags']}" if ENV['include_flags']
144
-
145
- CLEAN.include(File.join(OBJ_DIR,'*.o'),File.join(WORKER_OBJ_DIR,'*.o'), File.join(YAML_OBJ_DIR,'*.o'), File.join(TEST_OBJ_DIR,'*.o'))
146
- CLOBBER.include(File.join(BIN_DIR,'webroar-head'),File.join(BIN_DIR,'webroar-worker'), File.join(UNIT_TEST_DIR,'*.so'))
147
-
148
- webroar_bin = File.join(BIN_DIR,"webroar-head")
113
+ head_bin = File.join(BIN_DIR,"webroar-head")
149
114
  worker_bin = File.join(BIN_DIR,"webroar-worker")
150
115
 
151
- #% ebb_request_parser_rl_file = FileList[File.join(EBB_DIR,'ebb_requset_parser.rl')]
152
- src_files = FileList[File.join(HEAD_DIR,'*.c'),File.join(EBB_DIR,'*.c')]
116
+ head_files = FileList[File.join(HEAD_DIR,'*.c'),File.join(EBB_DIR,'*.c')]
153
117
  worker_files = FileList[File.join(WORKER_DIR,'*.c')]
154
- yaml_files = FileList[File.join(YAML_DIR,'*.c')]
155
- helper_files = FileList[File.join(HELPER_DIR,'*.c')]
118
+ helper_files = FileList[File.join(HELPER_DIR,'*.c'), File.join(YAML_DIR,'*.c')]
156
119
 
157
120
  #src_obj is a hash which will keep object file name as key and source file name as value. This is used to map source file to object file.
158
121
  #It's been used at time of object generation
159
- src_obj={}
122
+ head_obj={}
160
123
  worker_obj={}
161
- yaml_obj={}
162
124
  helper_obj={}
163
125
 
164
126
  # File dependencies go here ...
165
- src_files.each do |sfn|
127
+ head_files.each do |sfn|
166
128
  obj = sfn.sub(/\.[^.]*$/, '.o')
167
- obj_file = File.join(OBJ_DIR , obj[obj.rindex(File::SEPARATOR)+1..obj.length])
129
+ obj_file = File.join(HEAD_OBJ_DIR , obj[obj.rindex(File::SEPARATOR)+1..obj.length])
168
130
 
169
131
  desc "Setting Executable's dependency on objects files"
170
- file webroar_bin => obj_file
132
+ file head_bin => obj_file
171
133
 
172
134
  #Insertion of object file to source file mapping in hash
173
- src_obj[obj_file]=sfn
135
+ head_obj[obj_file]=sfn
174
136
  end
175
137
 
176
- src_obj.each { |obj_file,src_file|
138
+ head_obj.each { |obj_file,src_file|
177
139
  file obj_file => src_file do
178
- unless $webroar_config_called
179
- webroar_config
180
- end
181
- cmd = "#{COMPILER} #$inc_flags #$c_flags #$flags #$debug_flags -c #{src_file} -o #{obj_file} "
140
+ webroar_config unless $webroar_config_called
141
+ cmd = "#{CC} #{$flags} -c #{src_file} -o #{obj_file} "
182
142
  sh cmd
183
143
  end
184
144
  }
@@ -197,34 +157,22 @@ end
197
157
 
198
158
  worker_obj.each { |obj_file,src_file|
199
159
  file obj_file => src_file do
200
- unless $webroar_config_called
201
- webroar_config
202
- end
203
- cmd = "#{COMPILER} #$inc_flags #$c_flags #$flags #$debug_flags -c #{src_file} -o #{obj_file} "
204
- sh cmd
205
- end
206
- }
207
-
208
- yaml_files.each do |sfn|
209
- obj = sfn.sub(/\.[^.]*$/, '.o')
210
- obj_file = File.join(YAML_OBJ_DIR , obj[obj.rindex(File::SEPARATOR)+1..obj.length])
211
- file webroar_bin => obj_file
212
- yaml_obj[obj_file]=sfn
213
- end
214
-
215
- yaml_obj.each { |obj_file,src_file|
216
- file obj_file => src_file do
217
- cmd = "#{COMPILER} #$inc_flags -c #{src_file} -o #{obj_file} "
160
+ webroar_config unless $webroar_config_called
161
+ flags = $flags
162
+ flags << ' -DW_ZLIB' if ENV['zlib']=='yes'
163
+ flags << ' -DW_REGEX' if ENV['regex']=='yes'
164
+ cmd = "#{CC} #{flags} -c #{src_file} -o #{obj_file} "
218
165
  sh cmd
219
166
  end
220
167
  }
221
168
 
222
169
  helper_files.each do |sfn|
223
170
  obj = sfn.sub(/\.[^.]*$/, '.o')
224
- obj_file = File.join(OBJ_DIR , obj[obj.rindex(File::SEPARATOR)+1..obj.length])
171
+ obj_file = File.join(HELPER_OBJ_DIR , obj[obj.rindex(File::SEPARATOR)+1..obj.length])
225
172
 
226
173
  desc "Setting Executable's dependency on objects files"
227
- file worker_bin => obj_file
174
+ #file worker_bin => obj_file
175
+ file head_bin => obj_file
228
176
 
229
177
  #Insertion of object file to source file mapping in hash
230
178
  helper_obj[obj_file]=sfn
@@ -232,66 +180,49 @@ end
232
180
 
233
181
  helper_obj.each { |obj_file,src_file|
234
182
  file obj_file => src_file do
235
- unless $webroar_config_called
236
- webroar_config
237
- end
238
- cmd = "#{COMPILER} #$inc_flags #$c_flags #$flags #$debug_flags -c #{src_file} -o #{obj_file} "
183
+ webroar_config unless $webroar_config_called
184
+ cmd = "#{CC} #{$flags} -c #{src_file} -o #{obj_file} "
239
185
  sh cmd
240
186
  end
241
187
  }
242
188
 
243
189
  file worker_bin do
244
- unless $webroar_config_called
245
- webroar_config
246
- end
190
+ puts $lib_flags
191
+ lib_flags = String.new($lib_flags)
192
+ lib_flags << Config::expand($LIBRUBYARG_SHARED,CONFIG) if CONFIG["ENABLE_SHARED"] == "yes"
193
+ lib_flags << Config::expand($LIBRUBYARG_STATIC, CONFIG) if CONFIG["ENABLE_SHARED"] == "no"
194
+ lib_flags << " -lz" if ENV['zlib'] == "yes"
247
195
  #libraries for making executable
248
- lib_flags = $libs + $LIBS + ' -L' + Config::expand($libdir,CONFIG) + ' ' + Config::expand($LIBRUBYARG_SHARED,CONFIG)
249
- #$libs += ' '+CONFIG["LIBRUBYARG"]
250
- #$libs += ' -lpthread '
251
- lib_flags += " #{ENV['library_flags']}" if ENV['library_flags']
252
- out_file=File.join(BIN_DIR,'webroar-worker')
253
- object_files=FileList[File.join(WORKER_OBJ_DIR,'*.o'), helper_obj.keys, File.join(YAML_OBJ_DIR,'*.o')]
196
+ out_file = File.join(BIN_DIR,'webroar-worker')
197
+ object_files = FileList[File.join(WORKER_OBJ_DIR,'*.o'), File.join(HELPER_OBJ_DIR,'*.o')]
254
198
  # -rdynamic option to get function name in stacktrace
255
- cmd="#{COMPILER} #{lib_flags} -rdynamic #{object_files} -o #{out_file}"
199
+ cmd = "#{CC} -o #{out_file} #{object_files} -rdynamic #{lib_flags}"
256
200
  sh cmd
257
201
  end
258
202
 
259
- file webroar_bin do
260
- unless $webroar_config_called
261
- webroar_config
262
- end
263
- #libraries for making executable
264
- lib_flags = $libs + $LIBS # + ' -L' + Config::expand($libdir,CONFIG) + ' ' + Config::expand($LIBRUBYARG_SHARED,CONFIG)
265
- #$libs += ' '+CONFIG["LIBRUBYARG"]
266
- #$libs += ' -lpthread '
267
- lib_flags += " #{ENV['library_flags']}" if ENV['library_flags']
268
- if ENV['ssl'].eql?("yes")
269
- puts "Compiling with gnutls library."
270
- lib_flags += ' -L' + Config::CONFIG['libdir'] + ' -lgnutls '
271
- end
272
- out_file=File.join(BIN_DIR,'webroar-head')
273
- object_files=FileList[File.join(OBJ_DIR,'*.o'),File.join(YAML_OBJ_DIR,'*.o')]
203
+ file head_bin do
204
+ puts $lib_flags
205
+ out_file = File.join(BIN_DIR,'webroar-head')
206
+ object_files = FileList[File.join(HEAD_OBJ_DIR,'*.o'), File.join(HELPER_OBJ_DIR,'*.o')]
274
207
  # -rdynamic option to get function name in stacktrace
275
- cmd="#{COMPILER} #{lib_flags} -rdynamic #{object_files} -o #{out_file}"
208
+ cmd="#{CC} -o #{out_file} #{object_files} -rdynamic #{$lib_flags} #{ENV['ssl'].eql?("yes")? ' -lgnutls ' : '' } "
276
209
  sh cmd
277
210
  end
278
211
 
279
- file webroar_bin => worker_bin
280
- task :compile => [:create_obj_dirs, webroar_bin]
212
+ file head_bin => worker_bin
213
+ task :compile => [:create_obj_dirs, head_bin]
281
214
  task :default => :compile
282
215
 
283
216
  desc "Build with debug statements"
284
217
  task :debug_build do
285
- $debug_flags<<" -DL_DEBUG "
218
+ $flags << " -DL_DEBUG "
286
219
  d=Rake::Task[:default]
287
220
  d.invoke();
288
221
  end
289
222
 
290
- $sbin_flag=true
291
-
292
223
  desc "Creates required folders for compilation."
293
224
  task :create_obj_dirs do
294
- if create_directories([OBJ_DIR, WORKER_OBJ_DIR, YAML_OBJ_DIR, TMP_FILES]) == true
225
+ if create_directories([WORKER_OBJ_DIR, HEAD_OBJ_DIR, HELPER_OBJ_DIR, TMP_FILES]) == true
295
226
  puts 'Required directories created successfully. Building executables...'
296
227
  else
297
228
  puts 'Required directories could not be created. Can not continue...'
@@ -305,3 +236,25 @@ task :create_install_dirs do
305
236
  puts 'Required directories could not be created. Can not continue...'
306
237
  end
307
238
  end
239
+
240
+ #Create directories if they don't exists
241
+ def create_directories(required_directories)
242
+ rv = true
243
+ for directory in required_directories
244
+ #check to see if it exists
245
+ unless File.exists?(directory)
246
+ begin
247
+ print "#{directory} doesn't exist. Creating it..."
248
+ FileUtils.mkdir_p(directory)
249
+ rescue Exception => e
250
+ puts "Failed."
251
+ puts e
252
+ puts e.backtrace
253
+ rv = false
254
+ next
255
+ end
256
+ puts "Created."
257
+ end
258
+ end
259
+ rv
260
+ end