eventmachine 0.12.0-i386-mswin32
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.
- data/COPYING +60 -0
- data/DEFERRABLES +138 -0
- data/EPOLL +141 -0
- data/GNU +281 -0
- data/KEYBOARD +38 -0
- data/LEGAL +25 -0
- data/LIGHTWEIGHT_CONCURRENCY +72 -0
- data/PURE_RUBY +77 -0
- data/README +74 -0
- data/RELEASE_NOTES +96 -0
- data/SMTP +9 -0
- data/SPAWNED_PROCESSES +93 -0
- data/TODO +10 -0
- data/ext/Makefile +180 -0
- data/ext/binder.cpp +126 -0
- data/ext/binder.h +48 -0
- data/ext/cmain.cpp +527 -0
- data/ext/cplusplus.cpp +172 -0
- data/ext/ed.cpp +1442 -0
- data/ext/ed.h +351 -0
- data/ext/em.cpp +1781 -0
- data/ext/em.h +167 -0
- data/ext/emwin.cpp +300 -0
- data/ext/emwin.h +94 -0
- data/ext/epoll.cpp +26 -0
- data/ext/epoll.h +25 -0
- data/ext/eventmachine.h +83 -0
- data/ext/eventmachine_cpp.h +94 -0
- data/ext/extconf.rb +203 -0
- data/ext/files.cpp +94 -0
- data/ext/files.h +65 -0
- data/ext/kb.cpp +368 -0
- data/ext/mkmf.log +129 -0
- data/ext/page.cpp +107 -0
- data/ext/page.h +51 -0
- data/ext/pipe.cpp +327 -0
- data/ext/project.h +119 -0
- data/ext/rubyeventmachine-i386-mswin32.def +2 -0
- data/ext/rubyeventmachine-i386-mswin32.exp +0 -0
- data/ext/rubyeventmachine-i386-mswin32.lib +0 -0
- data/ext/rubyeventmachine-i386-mswin32.pdb +0 -0
- data/ext/rubyeventmachine.so +0 -0
- data/ext/rubymain.cpp +630 -0
- data/ext/sigs.cpp +89 -0
- data/ext/sigs.h +32 -0
- data/ext/ssl.cpp +408 -0
- data/ext/ssl.h +86 -0
- data/ext/vc60.pdb +0 -0
- data/lib/em/deferrable.rb +208 -0
- data/lib/em/eventable.rb +39 -0
- data/lib/em/future.rb +62 -0
- data/lib/em/messages.rb +66 -0
- data/lib/em/processes.rb +68 -0
- data/lib/em/spawnable.rb +88 -0
- data/lib/em/streamer.rb +112 -0
- data/lib/eventmachine.rb +1621 -0
- data/lib/eventmachine_version.rb +31 -0
- data/lib/evma.rb +32 -0
- data/lib/evma/callback.rb +32 -0
- data/lib/evma/container.rb +75 -0
- data/lib/evma/factory.rb +77 -0
- data/lib/evma/protocol.rb +87 -0
- data/lib/evma/reactor.rb +48 -0
- data/lib/jeventmachine.rb +106 -0
- data/lib/pr_eventmachine.rb +1011 -0
- data/lib/protocols/buftok.rb +127 -0
- data/lib/protocols/header_and_content.rb +123 -0
- data/lib/protocols/httpcli2.rb +784 -0
- data/lib/protocols/httpclient.rb +253 -0
- data/lib/protocols/line_and_text.rb +122 -0
- data/lib/protocols/linetext2.rb +145 -0
- data/lib/protocols/saslauth.rb +179 -0
- data/lib/protocols/smtpclient.rb +308 -0
- data/lib/protocols/smtpserver.rb +543 -0
- data/lib/protocols/stomp.rb +127 -0
- data/lib/protocols/tcptest.rb +57 -0
- data/lib/rubyeventmachine.so +0 -0
- data/tests/test_basic.rb +142 -0
- data/tests/test_defer.rb +63 -0
- data/tests/test_epoll.rb +168 -0
- data/tests/test_errors.rb +82 -0
- data/tests/test_eventables.rb +78 -0
- data/tests/test_exc.rb +58 -0
- data/tests/test_futures.rb +214 -0
- data/tests/test_hc.rb +221 -0
- data/tests/test_httpclient.rb +194 -0
- data/tests/test_httpclient2.rb +133 -0
- data/tests/test_kb.rb +61 -0
- data/tests/test_ltp.rb +190 -0
- data/tests/test_ltp2.rb +261 -0
- data/tests/test_next_tick.rb +58 -0
- data/tests/test_processes.rb +56 -0
- data/tests/test_pure.rb +128 -0
- data/tests/test_running.rb +47 -0
- data/tests/test_sasl.rb +73 -0
- data/tests/test_send_file.rb +238 -0
- data/tests/test_servers.rb +90 -0
- data/tests/test_smtpclient.rb +81 -0
- data/tests/test_smtpserver.rb +93 -0
- data/tests/test_spawn.rb +329 -0
- data/tests/test_timers.rb +138 -0
- data/tests/test_ud.rb +43 -0
- data/tests/testem.rb +5 -0
- metadata +170 -0
data/ext/emwin.h
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
/*****************************************************************************
|
2
|
+
|
3
|
+
$Id: emwin.h 668 2008-01-04 23:00:34Z blackhedd $
|
4
|
+
|
5
|
+
File: emwin.h
|
6
|
+
Date: 05May06
|
7
|
+
|
8
|
+
Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
9
|
+
Gmail: blackhedd
|
10
|
+
|
11
|
+
This program is free software; you can redistribute it and/or modify
|
12
|
+
it under the terms of either: 1) the GNU General Public License
|
13
|
+
as published by the Free Software Foundation; either version 2 of the
|
14
|
+
License, or (at your option) any later version; or 2) Ruby's License.
|
15
|
+
|
16
|
+
See the file COPYING for complete licensing information.
|
17
|
+
|
18
|
+
*****************************************************************************/
|
19
|
+
|
20
|
+
|
21
|
+
// THIS ENTIRE FILE IS FOR WINDOWS BUILDS ONLY.
|
22
|
+
// INCOMPLETE AND DISABLED FOR NOW.
|
23
|
+
#ifdef xOS_WIN32
|
24
|
+
|
25
|
+
#ifndef __EventMachine__H_
|
26
|
+
#define __EventMachine__H_
|
27
|
+
|
28
|
+
|
29
|
+
extern time_t gCurrentLoopTime;
|
30
|
+
|
31
|
+
class EventableDescriptor;
|
32
|
+
|
33
|
+
|
34
|
+
/********************
|
35
|
+
class EventMachine_t
|
36
|
+
********************/
|
37
|
+
|
38
|
+
class EventMachine_t
|
39
|
+
{
|
40
|
+
public:
|
41
|
+
EventMachine_t (void(*event_callback)(const char*, int, const char*, int));
|
42
|
+
virtual ~EventMachine_t();
|
43
|
+
|
44
|
+
void Run();
|
45
|
+
void ScheduleHalt();
|
46
|
+
const char *InstallOneshotTimer (int);
|
47
|
+
const char *ConnectToServer (const char *, int);
|
48
|
+
const char *CreateTcpServer (const char *, int);
|
49
|
+
const char *OpenDatagramSocket (const char *, int);
|
50
|
+
|
51
|
+
void Add (EventableDescriptor*);
|
52
|
+
|
53
|
+
public:
|
54
|
+
enum { // Event names
|
55
|
+
TIMER_FIRED = 100,
|
56
|
+
CONNECTION_READ = 101,
|
57
|
+
CONNECTION_UNBOUND = 102,
|
58
|
+
CONNECTION_ACCEPTED = 103,
|
59
|
+
CONNECTION_COMPLETED = 104,
|
60
|
+
LOOPBREAK_SIGNAL = 105
|
61
|
+
};
|
62
|
+
|
63
|
+
private:
|
64
|
+
HANDLE Iocp;
|
65
|
+
|
66
|
+
private:
|
67
|
+
bool _RunOnce();
|
68
|
+
bool _RunTimers();
|
69
|
+
void _AddNewDescriptors();
|
70
|
+
|
71
|
+
private:
|
72
|
+
enum {
|
73
|
+
MaxOutstandingTimers = 40,
|
74
|
+
HeartbeatInterval = 2
|
75
|
+
};
|
76
|
+
void (*EventCallback)(const char*, int, const char*, int);
|
77
|
+
|
78
|
+
class Timer_t: public Bindable_t {
|
79
|
+
};
|
80
|
+
|
81
|
+
multimap<time_t, Timer_t> Timers;
|
82
|
+
vector<EventableDescriptor*> Descriptors;
|
83
|
+
vector<EventableDescriptor*> NewDescriptors;
|
84
|
+
|
85
|
+
time_t NextHeartbeatTime;
|
86
|
+
};
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
#endif // __EventMachine__H_
|
92
|
+
|
93
|
+
#endif // OS_WIN32
|
94
|
+
|
data/ext/epoll.cpp
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
/*****************************************************************************
|
2
|
+
|
3
|
+
$Id: epoll.cpp 668 2008-01-04 23:00:34Z blackhedd $
|
4
|
+
|
5
|
+
File: epoll.cpp
|
6
|
+
Date: 06Jun07
|
7
|
+
|
8
|
+
Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
9
|
+
Gmail: blackhedd
|
10
|
+
|
11
|
+
This program is free software; you can redistribute it and/or modify
|
12
|
+
it under the terms of either: 1) the GNU General Public License
|
13
|
+
as published by the Free Software Foundation; either version 2 of the
|
14
|
+
License, or (at your option) any later version; or 2) Ruby's License.
|
15
|
+
|
16
|
+
See the file COPYING for complete licensing information.
|
17
|
+
|
18
|
+
*****************************************************************************/
|
19
|
+
|
20
|
+
|
21
|
+
#ifdef HAVE_EPOLL
|
22
|
+
|
23
|
+
#include "project.h"
|
24
|
+
|
25
|
+
#endif // HAVE_EPOLL
|
26
|
+
|
data/ext/epoll.h
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
/*****************************************************************************
|
2
|
+
|
3
|
+
$Id: epoll.h 668 2008-01-04 23:00:34Z blackhedd $
|
4
|
+
|
5
|
+
File: epoll.h
|
6
|
+
Date: 06Jun07
|
7
|
+
|
8
|
+
Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
9
|
+
Gmail: blackhedd
|
10
|
+
|
11
|
+
This program is free software; you can redistribute it and/or modify
|
12
|
+
it under the terms of either: 1) the GNU General Public License
|
13
|
+
as published by the Free Software Foundation; either version 2 of the
|
14
|
+
License, or (at your option) any later version; or 2) Ruby's License.
|
15
|
+
|
16
|
+
See the file COPYING for complete licensing information.
|
17
|
+
|
18
|
+
*****************************************************************************/
|
19
|
+
|
20
|
+
|
21
|
+
#ifdef HAVE_EPOLL
|
22
|
+
|
23
|
+
|
24
|
+
#endif // HAVE_EPOLL
|
25
|
+
|
data/ext/eventmachine.h
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
/*****************************************************************************
|
2
|
+
|
3
|
+
$Id: eventmachine.h 679 2008-01-19 01:40:06Z blackhedd $
|
4
|
+
|
5
|
+
File: eventmachine.h
|
6
|
+
Date: 15Apr06
|
7
|
+
|
8
|
+
Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
9
|
+
Gmail: blackhedd
|
10
|
+
|
11
|
+
This program is free software; you can redistribute it and/or modify
|
12
|
+
it under the terms of either: 1) the GNU General Public License
|
13
|
+
as published by the Free Software Foundation; either version 2 of the
|
14
|
+
License, or (at your option) any later version; or 2) Ruby's License.
|
15
|
+
|
16
|
+
See the file COPYING for complete licensing information.
|
17
|
+
|
18
|
+
*****************************************************************************/
|
19
|
+
|
20
|
+
#ifndef __EVMA_EventMachine__H_
|
21
|
+
#define __EVMA_EventMachine__H_
|
22
|
+
|
23
|
+
#if __cplusplus
|
24
|
+
extern "C" {
|
25
|
+
#endif
|
26
|
+
|
27
|
+
enum { // Event names
|
28
|
+
EM_TIMER_FIRED = 100,
|
29
|
+
EM_CONNECTION_READ = 101,
|
30
|
+
EM_CONNECTION_UNBOUND = 102,
|
31
|
+
EM_CONNECTION_ACCEPTED = 103,
|
32
|
+
EM_CONNECTION_COMPLETED = 104,
|
33
|
+
EM_LOOPBREAK_SIGNAL = 105
|
34
|
+
};
|
35
|
+
|
36
|
+
void evma_initialize_library (void(*)(const char*, int, const char*, int));
|
37
|
+
void evma_run_machine();
|
38
|
+
void evma_release_library();
|
39
|
+
const char *evma_install_oneshot_timer (int seconds);
|
40
|
+
const char *evma_connect_to_server (const char *server, int port);
|
41
|
+
const char *evma_connect_to_unix_server (const char *server);
|
42
|
+
void evma_stop_tcp_server (const char *signature);
|
43
|
+
const char *evma_create_tcp_server (const char *address, int port);
|
44
|
+
const char *evma_create_unix_domain_server (const char *filename);
|
45
|
+
const char *evma_open_datagram_socket (const char *server, int port);
|
46
|
+
const char *evma_open_keyboard();
|
47
|
+
void evma_set_tls_parms (const char *binding, const char *privatekey_filename, const char *certchain_filenane);
|
48
|
+
void evma_start_tls (const char *binding);
|
49
|
+
int evma_get_peername (const char *binding, struct sockaddr*);
|
50
|
+
int evma_get_sockname (const char *binding, struct sockaddr*);
|
51
|
+
int evma_get_subprocess_pid (const char *binding, pid_t*);
|
52
|
+
int evma_get_subprocess_status (const char *binding, int*);
|
53
|
+
int evma_send_data_to_connection (const char *binding, const char *data, int data_length);
|
54
|
+
int evma_send_datagram (const char *binding, const char *data, int data_length, const char *address, int port);
|
55
|
+
int evma_get_comm_inactivity_timeout (const char *binding, /*out*/int *value);
|
56
|
+
int evma_set_comm_inactivity_timeout (const char *binding, /*in,out*/int *value);
|
57
|
+
int evma_get_outbound_data_size (const char *binding);
|
58
|
+
int evma_send_file_data_to_connection (const char *binding, const char *filename);
|
59
|
+
|
60
|
+
void evma_close_connection (const char *binding, int after_writing);
|
61
|
+
int evma_report_connection_error_status (const char *binding);
|
62
|
+
void evma_signal_loopbreak();
|
63
|
+
void evma_set_timer_quantum (int);
|
64
|
+
void evma_set_max_timer_count (int);
|
65
|
+
void evma_setuid_string (const char *username);
|
66
|
+
void evma_stop_machine();
|
67
|
+
|
68
|
+
const char *evma__write_file (const char *filename);
|
69
|
+
const char *evma_popen (char * const*cmd_strings);
|
70
|
+
|
71
|
+
int evma_set_rlimit_nofile (int n_files);
|
72
|
+
|
73
|
+
// Temporary:
|
74
|
+
void evma__epoll();
|
75
|
+
void evma__kqueue();
|
76
|
+
|
77
|
+
#if __cplusplus
|
78
|
+
}
|
79
|
+
#endif
|
80
|
+
|
81
|
+
|
82
|
+
#endif // __EventMachine__H_
|
83
|
+
|
@@ -0,0 +1,94 @@
|
|
1
|
+
/*****************************************************************************
|
2
|
+
|
3
|
+
$Id: eventmachine_cpp.h 668 2008-01-04 23:00:34Z blackhedd $
|
4
|
+
|
5
|
+
File: eventmachine_cpp.h
|
6
|
+
Date: 27Jul07
|
7
|
+
|
8
|
+
Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
9
|
+
Gmail: blackhedd
|
10
|
+
|
11
|
+
This program is free software; you can redistribute it and/or modify
|
12
|
+
it under the terms of either: 1) the GNU General Public License
|
13
|
+
as published by the Free Software Foundation; either version 2 of the
|
14
|
+
License, or (at your option) any later version; or 2) Ruby's License.
|
15
|
+
|
16
|
+
See the file COPYING for complete licensing information.
|
17
|
+
|
18
|
+
*****************************************************************************/
|
19
|
+
|
20
|
+
|
21
|
+
#ifndef __EVMA_EventmachineCpp__H_
|
22
|
+
#define __EVMA_EventmachineCpp__H_
|
23
|
+
|
24
|
+
|
25
|
+
// This material is only for directly integrating EM into C++ programs.
|
26
|
+
|
27
|
+
namespace EM {
|
28
|
+
|
29
|
+
void Callback (const char *sig, int event, const char *data, int length);
|
30
|
+
void Run (void(*)(void));
|
31
|
+
void AddTimer (int, void(*)());
|
32
|
+
void StopReactor();
|
33
|
+
|
34
|
+
/***************
|
35
|
+
class Eventable
|
36
|
+
***************/
|
37
|
+
|
38
|
+
class Eventable {
|
39
|
+
public:
|
40
|
+
Eventable() {}
|
41
|
+
virtual ~Eventable() {}
|
42
|
+
|
43
|
+
std::string Signature;
|
44
|
+
|
45
|
+
// Called by the framework
|
46
|
+
virtual void ReceiveData (const char *data, int length) {}
|
47
|
+
virtual void ConnectionCompleted() {}
|
48
|
+
virtual void Accept (const char*) {}
|
49
|
+
virtual void Unbind() {}
|
50
|
+
virtual void PostInit() {}
|
51
|
+
|
52
|
+
void StopReactor() {EM::StopReactor();}
|
53
|
+
};
|
54
|
+
|
55
|
+
/****************
|
56
|
+
class Connection
|
57
|
+
****************/
|
58
|
+
|
59
|
+
class Connection: public Eventable {
|
60
|
+
public:
|
61
|
+
Connection() {}
|
62
|
+
virtual ~Connection() {}
|
63
|
+
|
64
|
+
virtual void Connect (const char*, int);
|
65
|
+
|
66
|
+
void SendData (const char *data);
|
67
|
+
void SendData (const char *data, int length);
|
68
|
+
void Close (bool afterWriting);
|
69
|
+
};
|
70
|
+
|
71
|
+
|
72
|
+
/**************
|
73
|
+
class Acceptor
|
74
|
+
**************/
|
75
|
+
|
76
|
+
class Acceptor: public Eventable {
|
77
|
+
public:
|
78
|
+
Acceptor() {PostInit();}
|
79
|
+
virtual ~Acceptor() {}
|
80
|
+
|
81
|
+
void Start (const char*, int);
|
82
|
+
void Accept (const char*);
|
83
|
+
|
84
|
+
virtual Connection *MakeConnection() {return new Connection();}
|
85
|
+
};
|
86
|
+
|
87
|
+
|
88
|
+
};
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
#endif // __EVMA_EventmachineCpp__H_
|
data/ext/extconf.rb
ADDED
@@ -0,0 +1,203 @@
|
|
1
|
+
# $Id: extconf.rb 677 2008-01-08 20:37:24Z blackhedd $
|
2
|
+
#
|
3
|
+
#----------------------------------------------------------------------------
|
4
|
+
#
|
5
|
+
# Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
6
|
+
# Gmail: blackhedd
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of either: 1) the GNU General Public License
|
10
|
+
# as published by the Free Software Foundation; either version 2 of the
|
11
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
12
|
+
#
|
13
|
+
# See the file COPYING for complete licensing information.
|
14
|
+
#
|
15
|
+
#---------------------------------------------------------------------------
|
16
|
+
#
|
17
|
+
# extconf.rb for Ruby/EventMachine
|
18
|
+
# We have to munge LDSHARED because this code needs a C++ link.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'mkmf'
|
22
|
+
|
23
|
+
flags = []
|
24
|
+
|
25
|
+
case RUBY_PLATFORM.split('-',2)[1]
|
26
|
+
when 'mswin32', 'mingw32', 'bccwin32'
|
27
|
+
unless have_header('windows.h') and
|
28
|
+
have_header('winsock.h') and
|
29
|
+
have_library('kernel32') and
|
30
|
+
have_library('rpcrt4') and
|
31
|
+
have_library('gdi32')
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
|
35
|
+
flags << "-D OS_WIN32"
|
36
|
+
flags << '-D BUILD_FOR_RUBY'
|
37
|
+
flags << "-EHs"
|
38
|
+
flags << "-GR"
|
39
|
+
|
40
|
+
dir_config('ssl')
|
41
|
+
if have_library('ssleay32') and
|
42
|
+
have_library('libeay32') and
|
43
|
+
have_header('openssl/ssl.h') and
|
44
|
+
have_header('openssl/err.h')
|
45
|
+
flags << '-D WITH_SSL'
|
46
|
+
else
|
47
|
+
flags << '-D WITHOUT_SSL'
|
48
|
+
end
|
49
|
+
|
50
|
+
when /solaris/
|
51
|
+
unless have_library('pthread') and
|
52
|
+
have_library('nsl') and
|
53
|
+
have_library('socket')
|
54
|
+
exit
|
55
|
+
end
|
56
|
+
|
57
|
+
flags << '-D OS_UNIX'
|
58
|
+
flags << '-D OS_SOLARIS8'
|
59
|
+
flags << '-D BUILD_FOR_RUBY'
|
60
|
+
|
61
|
+
dir_config('ssl')
|
62
|
+
if have_library('ssl') and
|
63
|
+
have_library('crypto') and
|
64
|
+
have_header('openssl/ssl.h') and
|
65
|
+
have_header('openssl/err.h')
|
66
|
+
flags << '-D WITH_SSL'
|
67
|
+
else
|
68
|
+
flags << '-D WITHOUT_SSL'
|
69
|
+
end
|
70
|
+
|
71
|
+
# on Unix we need a g++ link, not gcc.
|
72
|
+
CONFIG['LDSHARED'] = "$(CXX) -shared"
|
73
|
+
|
74
|
+
# Patch by Tim Pease, fixes SUNWspro compile problems.
|
75
|
+
if CONFIG['CC'] == 'cc'
|
76
|
+
$CFLAGS = CONFIG['CFLAGS'] = "-g -O2 -fPIC"
|
77
|
+
CONFIG['CCDLFLAGS'] = "-fPIC"
|
78
|
+
end
|
79
|
+
|
80
|
+
when /openbsd/
|
81
|
+
# OpenBSD branch contributed by Guillaume Sellier.
|
82
|
+
flags << '-DOS_UNIX'
|
83
|
+
flags << '-DBUILD_FOR_RUBY'
|
84
|
+
|
85
|
+
dir_config('ssl') # here I don't know why we have to check -lcrypto before -lssl otherwise -lssl is not found
|
86
|
+
if have_library('crypto') and
|
87
|
+
have_library('ssl') and
|
88
|
+
have_header('openssl/ssl.h') and
|
89
|
+
have_header('openssl/err.h')
|
90
|
+
flags << '-DWITH_SSL'
|
91
|
+
else
|
92
|
+
flags << '-DWITHOUT_SSL'
|
93
|
+
end
|
94
|
+
# on Unix we need a g++ link, not gcc. On OpenBSD, linking against libstdc++ have to be explicitly done for shared libs
|
95
|
+
CONFIG['LDSHARED'] = "$(CXX) -shared -lstdc++"
|
96
|
+
|
97
|
+
|
98
|
+
when /darwin/
|
99
|
+
flags << '-DOS_UNIX'
|
100
|
+
flags << '-DBUILD_FOR_RUBY'
|
101
|
+
|
102
|
+
if have_header("sys/event.h") and have_header("sys/queue.h")
|
103
|
+
flags << "-DHAVE_KQUEUE"
|
104
|
+
end
|
105
|
+
|
106
|
+
dir_config('ssl')
|
107
|
+
if have_library('ssl') and
|
108
|
+
have_library('crypto') and
|
109
|
+
have_library('C') and
|
110
|
+
have_header('openssl/ssl.h') and
|
111
|
+
have_header('openssl/err.h')
|
112
|
+
flags << '-DWITH_SSL'
|
113
|
+
else
|
114
|
+
flags << '-DWITHOUT_SSL'
|
115
|
+
end
|
116
|
+
# on Unix we need a g++ link, not gcc.
|
117
|
+
# Ff line contributed by Daniel Harple.
|
118
|
+
CONFIG['LDSHARED'] = "$(CXX) " + CONFIG['LDSHARED'].split[1..-1].join(' ')
|
119
|
+
|
120
|
+
when /linux/
|
121
|
+
unless have_library('pthread')
|
122
|
+
exit
|
123
|
+
end
|
124
|
+
|
125
|
+
flags << '-DOS_UNIX'
|
126
|
+
flags << '-DBUILD_FOR_RUBY'
|
127
|
+
|
128
|
+
# Original epoll test is inadequate because 2.4 kernels have the header
|
129
|
+
# but not the code.
|
130
|
+
#flags << '-DHAVE_EPOLL' if have_header('sys/epoll.h')
|
131
|
+
if have_header('sys/epoll.h')
|
132
|
+
File.open("hasEpollTest.c", "w") {|f|
|
133
|
+
f.puts "#include <sys/epoll.h>"
|
134
|
+
f.puts "int main() { epoll_create(1024); return 0;}"
|
135
|
+
}
|
136
|
+
(e = system( "gcc hasEpollTest.c -o hasEpollTest " )) and (e = $?.to_i)
|
137
|
+
`rm -f hasEpollTest.c hasEpollTest`
|
138
|
+
flags << '-DHAVE_EPOLL' if e == 0
|
139
|
+
end
|
140
|
+
|
141
|
+
if have_func('rb_thread_blocking_region') and have_macro('RB_UBF_DFL', 'ruby.h')
|
142
|
+
flags << "-DHAVE_TBR"
|
143
|
+
end
|
144
|
+
|
145
|
+
dir_config('ssl', "#{ENV['OPENSSL']}/include", ENV['OPENSSL'])
|
146
|
+
# Check for libcrypto twice, before and after ssl. That's because on some platforms
|
147
|
+
# and openssl versions, libssl will emit unresolved externals from crypto. It
|
148
|
+
# would be cleaner to simply check crypto first, but that doesn't always work in
|
149
|
+
# Ruby. The order we check them doesn't seem to control the order in which they're
|
150
|
+
# emitted into the link command. This is pretty weird, I have to admit.
|
151
|
+
if have_library('crypto') and
|
152
|
+
have_library('ssl') and
|
153
|
+
have_library('crypto') and
|
154
|
+
have_header('openssl/ssl.h') and
|
155
|
+
have_header('openssl/err.h')
|
156
|
+
flags << '-DWITH_SSL'
|
157
|
+
else
|
158
|
+
flags << '-DWITHOUT_SSL'
|
159
|
+
end
|
160
|
+
# on Unix we need a g++ link, not gcc.
|
161
|
+
CONFIG['LDSHARED'] = "$(CXX) -shared"
|
162
|
+
|
163
|
+
# Modify the mkmf constant LINK_SO so the generated shared object is stripped.
|
164
|
+
# You might think modifying CONFIG['LINK_SO'] would be a better way to do this,
|
165
|
+
# but it doesn't work because mkmf doesn't look at CONFIG['LINK_SO'] again after
|
166
|
+
# it initializes.
|
167
|
+
linkso = Object.send :remove_const, "LINK_SO"
|
168
|
+
LINK_SO = linkso + "; strip $@"
|
169
|
+
|
170
|
+
else
|
171
|
+
unless have_library('pthread')
|
172
|
+
exit
|
173
|
+
end
|
174
|
+
|
175
|
+
flags << '-DOS_UNIX'
|
176
|
+
flags << '-DBUILD_FOR_RUBY'
|
177
|
+
|
178
|
+
if have_header("sys/event.h") and have_header("sys/queue.h")
|
179
|
+
flags << "-DHAVE_KQUEUE"
|
180
|
+
end
|
181
|
+
|
182
|
+
dir_config('ssl')
|
183
|
+
if have_library('ssl') and
|
184
|
+
have_library('crypto') and
|
185
|
+
have_header('openssl/ssl.h') and
|
186
|
+
have_header('openssl/err.h')
|
187
|
+
flags << '-DWITH_SSL'
|
188
|
+
else
|
189
|
+
flags << '-DWITHOUT_SSL'
|
190
|
+
end
|
191
|
+
# on Unix we need a g++ link, not gcc.
|
192
|
+
CONFIG['LDSHARED'] = "$(CXX) -shared"
|
193
|
+
|
194
|
+
end
|
195
|
+
|
196
|
+
if $CPPFLAGS
|
197
|
+
$CPPFLAGS += ' ' + flags.join(' ')
|
198
|
+
else
|
199
|
+
$CFLAGS += ' ' + flags.join(' ')
|
200
|
+
end
|
201
|
+
|
202
|
+
|
203
|
+
create_makefile "rubyeventmachine"
|