Hello,
Just for fun, I tried again to get chrokee compiled on
win32, using
Mingw, Msys and the configure script (not the
Makefile.Mingw)
I got it working with some changes (there are probably some
remaining bugs).
I attach to this mail a diff file containing some changes.
Notice, some modifications are needed on Makefiles. I made
those on
Makefile.in, but it will probably best to be done in
Makefile.am(but I
do not have a working automake in this win32 beast)
Notice also, that those modifications are done to get
cherokee running
on win32, and cannot be used on linux.
Changes are :
cherokee/Makefile.in
Add and "export all symbols" option to the
linker flags. (plus regex
to only include symbols starting with "cherokee_")
Can probably be done with CHEROKEE_EXPORT, but it's more
simple
using this.
Add some references to plugins/libraries, since a win32
executable
cannot be linked with unresolved symbols.
Need probably to add some WIN32 checks
cherokee/main.c
I do not know why but "HAVE_GETOPT_H" is not
defined. So, I added a
little ifdef before including getopt.h
cherokee/module_read_config.c
Modified path contatenation to handle win32 pahs (using
in place of /)
cherokee/read_config_grammar.y
cherokee/read_config_scanner.l
Modified to handle win32 paths. On unix machines, url
and filepath
have the same structure; not on win32.
So, I added T_FILEPATH as a possible token
cherokee/util.c
FD_SETSIZE is not defined for WIN32, so, I add a ifdef
and reused
the value found in config.h.win32.
Hope it will help some one ;)
Olivier Samyn.
diff -ru cherokee-0.4.31b5/cherokee/Makefile.in
cherokee-0.4.31b5-os/cherokee/Makefile.in
--- cherokee-0.4.31b5/cherokee/Makefile.in Mon Jan 30
17:12:46 2006
+++ cherokee-0.4.31b5-os/cherokee/Makefile.in Tue Jan 31
14:37:37 2006
 -768,7
+768,7 
#
# LDFLAGS for libraries
#
- PLATFORM_WIN32_TRUE no_undefined =
-no-undefined
+ PLATFORM_WIN32_TRUE no_undefined =
-no-undefined -Wl,--export-all-symbols -export-symbols_regex
"cherokee_.*"
common_ldflags =
$(LIBTOOL_EXPORT_OPTIONS)
$(no_undefined)
 -781,6
+781,8 
$(common_ldflags)
-module
-avoid-version
+-lcherokee-server
+-lcherokee-base
-export-dynamic
 -878,7
+880,7 
libplugin_fastcgi_la_LDFLAGS = $(module_ldflags)
libplugin_fastcgi_la_SOURCES = $(handler_fastcgi)
STATIC_HANDLER_FASTCGI_TRUE static_handler_fastcgi_src
= $(handler_fastcgi)
- STATIC_HANDLER_FASTCGI_FALSE dynamic_handler_fastcgi_lib
= libplugin_fastcgi.la
+# STATIC_HANDLER_FASTCGI_FALSE dynamic_handler_fastcgi_lib
= libplugin_fastcgi.la
#
# Handler phpcgi
 -887,7
+889,7 
handler_phpcgi.c
handler_phpcgi.h
-libplugin_phpcgi_la_LDFLAGS = $(module_ldflags)
+libplugin_phpcgi_la_LDFLAGS = $(module_ldflags)
-lplugin_cgi
libplugin_phpcgi_la_SOURCES = $(handler_phpcgi)
STATIC_HANDLER_PHPCGI_TRUE static_handler_phpcgi_src =
$(handler_phpcgi)
STATIC_HANDLER_PHPCGI_FALSE dynamic_handler_phpcgi_lib
= libplugin_phpcgi.la
 -911,7
+913,7 
handler_error_redir.c
handler_error_redir.h
-libplugin_error_redir_la_LDFLAGS = $(module_ldflags)
+libplugin_error_redir_la_LDFLAGS = $(module_ldflags)
-lplugin_redir
libplugin_error_redir_la_SOURCES = $(handler_error_redir)
STATIC_HANDLER_ERROR_REDIR_TRUE static_handler_error_redir_src =
$(handler_error_redir)
STATIC_HANDLER_ERROR_REDIR_FALSE dynamic_handler_error_redir_lib =
libplugin_error_redir.la
 -923,7
+925,7 
handler_common.c
handler_common.h
-libplugin_common_la_LDFLAGS = $(module_ldflags)
+libplugin_common_la_LDFLAGS = $(module_ldflags)
-lplugin_dirlist -lplugin_file
libplugin_common_la_SOURCES = $(handler_common)
STATIC_HANDLER_COMMON_TRUE static_handler_common_src =
$(handler_common)
STATIC_HANDLER_COMMON_FALSE dynamic_handler_common_lib
= libplugin_common.la
 -937,7
+939,7 
handler_nn.c
handler_nn.h
-libplugin_nn_la_LDFLAGS = $(module_ldflags)
+libplugin_nn_la_LDFLAGS = $(module_ldflags) -lplugin_redir
-lplugin_common
libplugin_nn_la_SOURCES = $(handler_nn)
STATIC_HANDLER_NN_TRUE static_handler_nn_src =
$(handler_nn)
STATIC_HANDLER_NN_FALSE dynamic_handler_nn_lib =
libplugin_nn.la
 -1002,7
+1004,7 
logger_combined.h
logger_combined.c
-libplugin_combined_la_LDFLAGS = $(module_ldflags)
+libplugin_combined_la_LDFLAGS = $(module_ldflags)
-lplugin_ncsa
libplugin_combined_la_SOURCES = $(logger_combined)
STATIC_LOGGER_COMBINED_TRUE static_logger_combined_src
= $(logger_combined)
STATIC_LOGGER_COMBINED_FALSE dynamic_logger_combined_lib
= libplugin_combined.la
diff -ru cherokee-0.4.31b5/cherokee/main.c
cherokee-0.4.31b5-os/cherokee/main.c
--- cherokee-0.4.31b5/cherokee/main.c Tue Jan 24 17:23:18
2006
+++ cherokee-0.4.31b5-os/cherokee/main.c Tue Jan 31 14:29:06
2006
 -29,7
+29,7 
#include <unistd.h>
#include <string.h>
-#ifdef HAVE_GETOPT_H
+#if defined(HAVE_GETOPT_H)|| defined(WIN32)
# include <getopt.h>
#endif
diff -ru cherokee-0.4.31b5/cherokee/module_read_config.c
cherokee-0.4.31b5-os/cherokee/module_read_config.c
--- cherokee-0.4.31b5/cherokee/module_read_config.c Sat Jan
28 20:54:19 2006
+++ cherokee-0.4.31b5-os/cherokee/module_read_config.c Tue
Jan 31 14:41:34 2006
 -103,8
+103,11 
{
continue;
}
-
+#ifdef _WIN32
+ ret = cherokee_buffer_add_va (&full_new,
"%s\%s", path, entry->d_name);
+#else
ret = cherokee_buffer_add_va (&full_new,
"%s/%s", path, entry->d_name);
+#endif
if (unlikely (ret != ret_ok)) return ret;
cherokee_buffer_read_file (buf, full_new.buf);
diff -ru cherokee-0.4.31b5/cherokee/read_config_grammar.y
cherokee-0.4.31b5-os/cherokee/read_config_grammar.y
--- cherokee-0.4.31b5/cherokee/read_config_grammar.y Mon Jan
30 14:19:11 2006
+++ cherokee-0.4.31b5-os/cherokee/read_config_grammar.y Tue
Jan 31 14:41:34 2006
 -418,7
+418,7 
%token T_REQUEST T_MIMETYPE T_MAX_AGE
%token <number> T_NUMBER T_PORT T_PORT_TLS
-%token <string> T_QSTRING T_FULLDIR T_ID T_HTTP_URL
T_HTTPS_URL T_HOSTNAME T_IP T_DOMAIN_NAME T_ADDRESS_PORT
T_MIMETYPE_ID
+%token <string> T_QSTRING T_FULLDIR T_FILEPATH T_ID
T_HTTP_URL T_HTTPS_URL T_HOSTNAME T_IP T_DOMAIN_NAME
T_ADDRESS_PORT T_MIMETYPE_ID
%type <name_ptr> directory_option handler
%type <string> host_name http_generic id_or_path
ip_or_domain str_type address_or_path
 -636,7
+636,7 
}
};
-document_root : T_DOCUMENT_ROOT T_FULLDIR
+document_root : T_DOCUMENT_ROOT T_FILEPATH
{
char *root;
int root_len;
 -690,7
+690,7 
| tuple_list tuple
;
-tuple : T_ID T_FULLDIR
+tuple : T_ID T_FILEPATH
{
cherokee_virtual_server_t *vserver;
vserver = auto_virtual_server;
 -721,7
+721,7 
}
};
-mime : T_MIME_FILE T_FULLDIR
+mime : T_MIME_FILE T_FILEPATH
{
SRV(server)->mime_file = $2;
};
 -769,7
+769,7 
}
};
-icons : T_ICONS T_FULLDIR
+icons : T_ICONS T_FILEPATH
{
SRV(server)->icons_file = $2;
};
 -792,7
+792,7 
SRV(server)->keepalive_max = $2;
};
-ssl_file : T_SSL_CERT_FILE T_FULLDIR
+ssl_file : T_SSL_CERT_FILE T_FILEPATH
{
#ifdef HAVE_TLS
cherokee_virtual_server_t *vsrv = auto_virtual_server;
 -809,7
+809,7 
#endif
};
-ssl_key_file : T_SSL_CERT_KEY_FILE T_FULLDIR
+ssl_key_file : T_SSL_CERT_KEY_FILE T_FILEPATH
{
#ifdef HAVE_TLS
cherokee_virtual_server_t *vsrv = auto_virtual_server;
 -826,7
+826,7 
#endif
};
-ssl_ca_list_file : T_SSL_CA_LIST_FILE T_FULLDIR
+ssl_ca_list_file : T_SSL_CA_LIST_FILE T_FILEPATH
{
#ifdef HAVE_TLS
cherokee_virtual_server_t *vsrv = auto_virtual_server;
 -920,7
+920,7 
}
};
-pidfile : T_PIDFILE T_FULLDIR
+pidfile : T_PIDFILE T_FILEPATH
{
cherokee_buffer_clean (&SRV(server)->pidfile);
cherokee_buffer_add (&SRV(server)->pidfile, $2,
strlen($2));
 -928,7
+928,7 
free ($2);
};
-panic_action : T_PANIC_ACTION T_FULLDIR
+panic_action : T_PANIC_ACTION T_FILEPATH
{
if (SRV(server)->panic_action != NULL) {
PRINT_MSG ("WARNING: Overwriting panic action '%s'
by '%s'n", SRV(server)->panic_action, $2);
 -965,7
+965,7 
SRV(server)->max_conn_reuse = $2;
};
-chroot : T_CHROOT T_FULLDIR
+chroot : T_CHROOT T_FILEPATH
{
SRV(server)->chroot = $2;
};
 -1081,6
+1081,7 
str_type : T_ID
| T_FULLDIR
+ | T_FILEPATH
| T_ADDRESS_PORT
| T_QSTRING
| T_HTTP_URL
 -1169,7
+1170,7 
if (re != 0) return re;
};
-handler_option : T_SOCKET T_FULLDIR
+handler_option : T_SOCKET T_FILEPATH
{ dirs_table_set_handler_prop (current_config_entry,
"socket", $2); };
handler_option : T_JUST_ABOUT
 -1548,7
+1549,7 
};
-directory_option : T_DOCUMENT_ROOT T_FULLDIR
+directory_option : T_DOCUMENT_ROOT T_FILEPATH
{
if (directory_content_tmp.document_root != NULL) {
PRINT_MSG ("WARNING: Overwriting DocumentRoot '%s'
by '%s'n",
 -1678,7
+1679,7 
| auth_option_params auth_option_param
;
-auth_option_param : T_PASSWDFILE T_FULLDIR
+auth_option_param : T_PASSWDFILE T_FILEPATH
{ dirs_table_set_validator_prop (current_config_entry,
"file", $2); };
diff -ru cherokee-0.4.31b5/cherokee/read_config_scanner.l
cherokee-0.4.31b5-os/cherokee/read_config_scanner.l
--- cherokee-0.4.31b5/cherokee/read_config_scanner.l Fri Jan
13 20:11:18 2006
+++ cherokee-0.4.31b5-os/cherokee/read_config_scanner.l Tue
Jan 31 14:41:34 2006
 -33,8
+33,9 
ws [ t]+
integer [-+]?[0-9]+
comment #.*$
-fpath /[^"n ]*
-qstring "[^"{}n]*"
+filepath [a-zA-Z]:[^"nr ]*
+fpath /[^"nr ]*
+qstring "[^"{}rn]*"
http http:/
https https:/
id [_-.a-zA-Z][.-_a-zA-Z0-9]*
 -120,6
+121,7 
"Off" { yylval.number = 0;
return T_NUMBER; }
{ yylval.string = strdup(yytext); return
T_FULLDIR; }
+ { yylval.string = strdup(yytext); return
T_FILEPATH; }
{ yylval.string = strdup(yytext); return
T_HTTP_URL; }
{ yylval.string = strdup(yytext); return
T_HTTPS_URL; }
{ yylval.string = strdup(yytext); return
T_ID; }
diff -ru cherokee-0.4.31b5/cherokee/util.c
cherokee-0.4.31b5-os/cherokee/util.c
--- cherokee-0.4.31b5/cherokee/util.c Mon Jan 30 23:06:32
2006
+++ cherokee-0.4.31b5-os/cherokee/util.c Tue Jan 31 14:41:34
2006
 -187,8
+187,13 
*limit = OPEN_MAX; /* need to include
limits.h somehow */
return ret_ok;
#else
+#ifdef _WIN32
+ *limit = 256;
+ return ret_ok;
+#else
*limit = FD_SETSIZE;
return ret_ok;
+#endif
#endif
#endif
#endif
_______________________________________________
Cherokee mailing list
Cherokee 0x50.org
http://www.alobbs.com/cgi-bin/mailman/listinfo/cherokee
a>
|
Olivier Samyn wrote:
> Just for fun, I tried again to get chrokee compiled on
win32, using
> Mingw, Msys and the configure script (not the
Makefile.Mingw)
>
> I got it working with some changes (there are probably
some
> remaining bugs).
I have also been trying to fix it. Yesterday I found a
weird
problem around the I/O support on Windows. The following
part of
your patch is related to it..
> --- cherokee-0.4.31b5/cherokee/util.c Mon Jan 30
23:06:32 2006
> +++ cherokee-0.4.31b5-os/cherokee/util.c Tue Jan 31
14:41:34 2006
>  -187,8 +187,13 
> *limit = OPEN_MAX; /* need to include
limits.h somehow */
> return ret_ok;
> #else
> +#ifdef _WIN32
> + *limit = 256;
> + return ret_ok;
> +#else
> *limit = FD_SETSIZE;
> return ret_ok;
> +#endif
> #endif
> #endif
> #endif
As far as I've seen, Windows doesn't return the file
descriptor
numbers as Linux and Solaris do. When the application
begins to
run, you can expect to get fd numbers like: 4, 5 o 6;
but in my
tests on Windows I got descriptors like 1500 or 1600.
With the current fdpoll-select implementation, that will
overflow
the internal memory arrays, and hence, will make the
server crash.
With the current logic, if the file descriptor limit is
256, it
doesn't expect to get a descriptor with the value 260.
This is what I dug:
http://www.0x50.or
g/bugs/ticket/37
The rest of the patch looks nice, I'll try to get a
deeper look at
it this evening. Thank you Oliver. Good stuff!!
--
Greetings, alo.
_______________________________________________
Cherokee mailing list
Cherokee 0x50.org
http://www.alobbs.com/cgi-bin/mailman/listinfo/cherokee
a>
|