Hi Erza, I'm not sure if glib is installed by default on macs. (Seems like it should be but I don't see it on mine.) If you use fink you can do apt-get install glib2-dev The makefile is pretty hacky - make sure you have libev in your LIBRARY_PATH and ev.h in your CPATH
ry On Jan 14, 2008 10:03 PM, Ezra Zygmuntowicz <[EMAIL PROTECTED]> wrote: > > > On Jan 14, 2008, at 8:43 AM, ry dahl wrote: > > > Hello Mongrel Users, > > > > I'm writing a web server called Ebb. It's written in C, makes use of > > the Mongrel HTTP parser, and uses libev its event loop. The goal is to > > be small, fast, and language independent server that can host web > > frameworks. I have written a small Ruby binding which provides a Rack > > handler - this will allow Ebb to host Rails, Merb, and other Ruby > > frameworks. In the future I will write a Python WSGI binding. > > > > The design is similar to the evented Mongrel web server. Connections > > are processed as follows: > > > > 1. libev loops and waits for incoming connections. > > 2. When Ebb can read from a client socket, it passes the buffer into > > the > > mongrel state machine which parses the headers into name value > > pairs. > > 3. Ebb starts a new thread and passes the request information and > > peer socket > > to a user supplied callback. The thread lasts only for the length > > of that > > callback. > > 4. The included Ruby binding, supplying this callback transforms the > > request > > into a Rack compatible "env" variable and passes it on a Rack > > adapter. > > > > The code measures in at less than 1000 lines of C code. > > > > There is much work to do; it is not ready for use. I am soliciting > > help from the community for testing and development. You may browse > > the git repository at http://repo.or.cz/w/ebb.git or check out the > > code with this command: > > git clone git://repo.or.cz/ebb.git > > I release Ebb under the MIT license. > > It is very fun to program Ebb so I suggest you do too :) > > > > > > Ry Dahl > > Hey Ry- > > Is glib-2.0 a dependency? It seems like 2.0 is an old version of > glib. So ebb doesn't compile on leopard out of the box. What do I need > to install to make it work? > > ~/ebb > make > gcc -g -Wall `pkg-config --cflags glib-2.0` -I/opt/libev-2.01/include - > L/opt/libev-2.01/lib -c tcp.c -o tcp.o > Package glib-2.0 was not found in the pkg-config search path. > Perhaps you should add the directory containing `glib-2.0.pc' > to the PKG_CONFIG_PATH environment variable > No package 'glib-2.0' found > tcp.c:18:16: error: ev.h: No such file or directory > tcp.c:19:18: error: glib.h: No such file or directory > In file included from tcp.c:23: > tcp.h:48: error: syntax error before 'GQueue' > tcp.h:48: warning: no semicolon at end of struct or union > tcp.h:53: error: syntax error before '*' token > tcp.h:53: warning: type defaults to 'int' in declaration of > 'accept_watcher' > tcp.h:53: warning: data definition has no type or storage class > tcp.h:55: error: syntax error before '}' token > tcp.h:72: error: syntax error before 'ev_io' > tcp.h:72: warning: no semicolon at end of struct or union > tcp.c: In function 'tcp_client_write': > tcp.c:33: error: dereferencing pointer to incomplete type > tcp.c:34: error: dereferencing pointer to incomplete type > tcp.c:36: warning: implicit declaration of function 'g_log' > tcp.c:36: error: 'G_LOG_LEVEL_ERROR' undeclared (first use in this > function) > tcp.c:36: error: (Each undeclared identifier is reported only once > tcp.c:36: error: for each function it appears in.) > tcp.c: At top level: > tcp.c:46: warning: 'struct ev_io' declared inside parameter list > tcp.c:46: warning: its scope is only this definition or declaration, > which is probably not what you want > tcp.c: In function 'tcp_client_on_readable': > tcp.c:48: error: dereferencing pointer to incomplete type > tcp.c:52: error: 'EV_ERROR' undeclared (first use in this function) > tcp.c:53: error: 'G_LOG_LEVEL_ERROR' undeclared (first use in this > function) > tcp.c:57: error: dereferencing pointer to incomplete type > tcp.c:58: error: dereferencing pointer to incomplete type > tcp.c:59: error: dereferencing pointer to incomplete type > tcp.c:60: error: dereferencing pointer to incomplete type > tcp.c:62: error: dereferencing pointer to incomplete type > tcp.c:64: error: dereferencing pointer to incomplete type > tcp.c:64: error: dereferencing pointer to incomplete type > tcp.c:67: warning: implicit declaration of function 'g_debug' > tcp.c:81: error: dereferencing pointer to incomplete type > tcp.c:81: error: dereferencing pointer to incomplete type > tcp.c:81: error: dereferencing pointer to incomplete type > tcp.c: In function 'tcp_client_new': > tcp.c:95: warning: implicit declaration of function 'g_new0' > tcp.c:95: error: syntax error before 'tcp_client' > tcp.c:97: error: dereferencing pointer to incomplete type > tcp.c:99: error: dereferencing pointer to incomplete type > tcp.c:99: error: dereferencing pointer to incomplete type > tcp.c:99: error: dereferencing pointer to incomplete type > tcp.c:100: error: dereferencing pointer to incomplete type > tcp.c:101: error: 'G_LOG_LEVEL_ERROR' undeclared (first use in this > function) > tcp.c:105: error: dereferencing pointer to incomplete type > tcp.c:105: error: 'TRUE' undeclared (first use in this function) > tcp.c:107: error: dereferencing pointer to incomplete type > tcp.c:113: error: dereferencing pointer to incomplete type > tcp.c:115: error: dereferencing pointer to incomplete type > tcp.c:115: error: syntax error before 'struct' > tcp.c:116: error: dereferencing pointer to incomplete type > tcp.c:117: warning: implicit declaration of function 'ev_init' > tcp.c:117: error: dereferencing pointer to incomplete type > tcp.c:118: warning: implicit declaration of function 'ev_io_set' > tcp.c:118: error: dereferencing pointer to incomplete type > tcp.c:118: error: dereferencing pointer to incomplete type > tcp.c:118: error: 'EV_READ' undeclared (first use in this function) > tcp.c:118: error: 'EV_ERROR' undeclared (first use in this function) > tcp.c:119: warning: implicit declaration of function 'ev_io_start' > tcp.c:119: error: dereferencing pointer to incomplete type > tcp.c:119: error: dereferencing pointer to incomplete type > tcp.c: In function 'tcp_client_stop_read_watcher': > tcp.c:131: error: dereferencing pointer to incomplete type > tcp.c:134: error: dereferencing pointer to incomplete type > tcp.c:136: warning: implicit declaration of function 'ev_io_stop' > tcp.c:136: error: dereferencing pointer to incomplete type > tcp.c:136: error: dereferencing pointer to incomplete type > tcp.c:137: error: dereferencing pointer to incomplete type > tcp.c:138: error: dereferencing pointer to incomplete type > tcp.c: In function 'tcp_client_free': > tcp.c:146: error: dereferencing pointer to incomplete type > tcp.c: In function 'tcp_client_close': > tcp.c:153: error: dereferencing pointer to incomplete type > tcp.c:155: error: dereferencing pointer to incomplete type > tcp.c:156: error: dereferencing pointer to incomplete type > tcp.c:156: error: 'FALSE' undeclared (first use in this function) > tcp.c: In function 'tcp_server_new': > tcp.c:165: error: syntax error before 'tcp_server' > tcp.c:167: error: dereferencing pointer to incomplete type > tcp.c:168: error: dereferencing pointer to incomplete type > tcp.c:170: error: 'G_LOG_LEVEL_ERROR' undeclared (first use in this > function) > tcp.c:175: error: dereferencing pointer to incomplete type > tcp.c:189: error: dereferencing pointer to incomplete type > tcp.c:189: warning: implicit declaration of function 'ev_loop_new' > tcp.c:191: error: dereferencing pointer to incomplete type > tcp.c:191: warning: implicit declaration of function 'g_queue_new' > tcp.c:192: error: dereferencing pointer to incomplete type > tcp.c:192: error: 'FALSE' undeclared (first use in this function) > tcp.c: In function 'tcp_server_free': > tcp.c:203: warning: implicit declaration of function 'g_queue_free' > tcp.c:203: error: dereferencing pointer to incomplete type > tcp.c: In function 'tcp_server_close': > tcp.c:211: error: dereferencing pointer to incomplete type > tcp.c:214: warning: implicit declaration of function 'g_queue_pop_head' > tcp.c:214: error: dereferencing pointer to incomplete type > tcp.c:214: warning: assignment makes pointer from integer without a cast > tcp.c:217: error: dereferencing pointer to incomplete type > tcp.c:218: error: dereferencing pointer to incomplete type > tcp.c:219: error: dereferencing pointer to incomplete type > tcp.c:221: error: dereferencing pointer to incomplete type > tcp.c:222: error: dereferencing pointer to incomplete type > tcp.c:223: error: dereferencing pointer to incomplete type > tcp.c:225: error: dereferencing pointer to incomplete type > tcp.c:227: error: dereferencing pointer to incomplete type > tcp.c:227: error: dereferencing pointer to incomplete type > tcp.c:228: error: dereferencing pointer to incomplete type > tcp.c:229: error: dereferencing pointer to incomplete type > tcp.c:231: warning: implicit declaration of function 'ev_unloop' > tcp.c:231: error: dereferencing pointer to incomplete type > tcp.c:231: error: 'EVUNLOOP_ALL' undeclared (first use in this function) > tcp.c:232: warning: implicit declaration of function 'ev_loop_destroy' > tcp.c:232: error: dereferencing pointer to incomplete type > tcp.c:233: error: dereferencing pointer to incomplete type > tcp.c:235: error: dereferencing pointer to incomplete type > tcp.c:236: error: dereferencing pointer to incomplete type > tcp.c:236: error: 'FALSE' undeclared (first use in this function) > tcp.c: At top level: > tcp.c:242: warning: 'struct ev_io' declared inside parameter list > tcp.c: In function 'tcp_server_accept': > tcp.c:244: error: dereferencing pointer to incomplete type > tcp.c:247: error: dereferencing pointer to incomplete type > tcp.c:248: error: dereferencing pointer to incomplete type > tcp.c:251: error: 'EV_ERROR' undeclared (first use in this function) > tcp.c:252: error: 'G_LOG_LEVEL_ERROR' undeclared (first use in this > function) > tcp.c:258: warning: implicit declaration of function 'g_queue_push_head' > tcp.c:258: error: dereferencing pointer to incomplete type > tcp.c:258: error: 'gpointer' undeclared (first use in this function) > tcp.c:258: error: syntax error before 'client' > tcp.c:260: error: dereferencing pointer to incomplete type > tcp.c:261: error: dereferencing pointer to incomplete type > tcp.c:261: error: dereferencing pointer to incomplete type > tcp.c: In function 'tcp_server_listen': > tcp.c:276: error: dereferencing pointer to incomplete type > tcp.c:277: error: dereferencing pointer to incomplete type > tcp.c:280: error: dereferencing pointer to incomplete type > tcp.c:281: error: dereferencing pointer to incomplete type > tcp.c:283: error: dereferencing pointer to incomplete type > tcp.c:284: error: dereferencing pointer to incomplete type > tcp.c:284: error: dereferencing pointer to incomplete type > tcp.c:285: error: 'G_LOG_LEVEL_ERROR' undeclared (first use in this > function) > tcp.c:288: error: dereferencing pointer to incomplete type > tcp.c:288: error: dereferencing pointer to incomplete type > tcp.c:298: error: dereferencing pointer to incomplete type > tcp.c:298: error: dereferencing pointer to incomplete type > tcp.c:298: error: dereferencing pointer to incomplete type > tcp.c:304: error: dereferencing pointer to incomplete type > tcp.c:310: error: dereferencing pointer to incomplete type > tcp.c:310: error: 'FALSE' undeclared (first use in this function) > tcp.c:311: error: dereferencing pointer to incomplete type > tcp.c:311: error: 'TRUE' undeclared (first use in this function) > tcp.c:313: error: dereferencing pointer to incomplete type > tcp.c:313: error: syntax error before 'struct' > tcp.c:314: error: dereferencing pointer to incomplete type > tcp.c:315: error: dereferencing pointer to incomplete type > tcp.c:316: error: dereferencing pointer to incomplete type > tcp.c:318: error: dereferencing pointer to incomplete type > tcp.c:319: error: dereferencing pointer to incomplete type > tcp.c:319: error: dereferencing pointer to incomplete type > tcp.c:319: error: 'EV_READ' undeclared (first use in this function) > tcp.c:319: error: 'EV_ERROR' undeclared (first use in this function) > tcp.c:320: error: dereferencing pointer to incomplete type > tcp.c:320: error: dereferencing pointer to incomplete type > tcp.c:321: warning: implicit declaration of function 'ev_loop' > tcp.c:321: error: dereferencing pointer to incomplete type > tcp.c: In function 'tcp_server_address': > tcp.c:331: error: dereferencing pointer to incomplete type > tcp.c:332: error: dereferencing pointer to incomplete type > tcp.c:335: warning: control reaches end of non-void function > make: *** [tcp.o] Error 1 > > > Thanks > > > - Ezra Zygmuntowicz > -- Founder & Software Architect > -- [EMAIL PROTECTED] > -- EngineYard.com > > > _______________________________________________ > Mongrel-users mailing list > Mongrel-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/mongrel-users > _______________________________________________ Mongrel-users mailing list Mongrel-users@rubyforge.org http://rubyforge.org/mailman/listinfo/mongrel-users