Hi,<br><br>I just updated using CVS (CVSROOT=:pserver:anonymous@ecls.cvs.sourceforge.net:/cvsroot/ecls), and tried to compile using MS Visual Studio 2008 and msvc/Makefile.<br><br>In src/c/main.d, I run into the following error:<br>
../../src/c/main.d(726) : error C2065: 'temp' : undeclared identifier<br><br>And indeed, the variable temp is never declared. Fix proposal:<br><br>***************<br>*** 723,729 ****<br> value = cl_format(4, Cnil, make_constant_base_string("~A=~A"), v<br>
ar,<br> value);<br> value = si_copy_to_simple_base_string(value);<br>! putenv((char*)temp->base_string.self);<br> #endif<br> }<br> if (ret_val == -1)<br>
--- 723,729 ----<br> value = cl_format(4, Cnil, make_constant_base_string("~A=~A"), v<br>ar,<br> value);<br> value = si_copy_to_simple_base_string(value);<br>
! putenv((char*)value->base_string.self);<br> #endif<br> }<br> if (ret_val == -1)<br><br><br>With that fixed, I still run into more problems a little later in src/c/unixint.d. A couple of those errors occur because Windows knows SIGSEGV, but not SIGBUS. Those fixes are simple:<br>
<br>RCS file: /cvsroot/ecls/ecl/src/c/unixint.d,v<br>retrieving revision 1.38<br>diff -c -r1.38 unixint.d<br>*** ../src/c/unixint.d 26 Dec 2008 09:47:28 -0000 1.38<br>--- ../src/c/unixint.d 27 Feb 2009 07:32:37 -0000<br>
***************<br>*** 264,269 ****<br>--- 264,270 ----<br> }<br> ecl_internal_error("SIGSEGV without handler to jump to.");<br> }<br>+ #ifdef SIGBUS // {<br> case SIGBUS: {<br>
ecl_frame_ptr destination = frs_sch(OBJNULL);<br> if (destination) {<br>***************<br>*** 272,277 ****<br>--- 273,279 ----<br> }<br> ecl_internal_error("SIGSEGV without handler to jump to.");<br>
}<br>+ #endif // }<br> default:<br> FEerror("Serious signal ~D caught.", 1, MAKE_FIXNUM(sig));<br> }<br>***************<br>*** 352,359 ****<br>--- 354,363 ----<br> printf("Postponing signal %d\n", sig);<br>
sigaction(SIGSEGV, NULL, &oact);<br> printf("SIGSEGV Handler: %x\n", oact.sa_sigaction);<br>+ #ifdef SIGBUS // {<br> sigaction(SIGBUS, NULL, &oact);<br>
printf("SIGBUS Handler: %x\n", oact.sa_sigaction);<br>+ #endif // }<br> printf("sigsegv_handler: %x\n", sigsegv_handler);<br> #ifdef ECL_USE_MPROTECT<br>
printf("Protecting %x\n", the_env);<br>***************<br>*** 497,504 ****<br>--- 501,510 ----<br> mysignal(code_int, SIG_DFL);<br> else if (code_int == SIGSEGV)<br>
mysignal(code_int, sigsegv_handler);<br>+ #ifdef SIGBUS // {<br> else if (code_int == SIGBUS)<br> mysignal(code_int, sigbus_handler);<br>
+ #endif // }<br> else<br> mysignal(code_int, non_evil_signal_handler);<br> @(return Ct)<br><br><br>With all of the above out of the way, I still run into:<br>
../../src/c/unixint.d(351) : error C2079: 'oact' uses undefined struct 'sigaction'<br>../../src/c/unixint.d(356) : error C2224: left of '.sa_sigaction' must have struct/union type<br>../../src/c/unixint.d(422) : error C2065: 'sigsegv_signal_handler' : undeclared identifier<br>
../../src/c/unixint.d(436) : error C2065: 'info' : undeclared identifier<br>../../src/c/unixint.d(436) : error C2223: left of '->si_addr' must point to struct/union<br><br>These occur because the code relies on UNIX-specific signal handling functionality. I'm not sure how to address those.<br>
<br> Claus<br><br><a href="http://www.clausbrod.de/Blog">http://www.clausbrod.de/Blog</a><br><br>