Re: Looking to help

Ingo Weinhold <bonefish-CFLBMwTPW48UNGrzBIF7/[email protected]> Fri, 09 Mar 2007 21:58:18 +0100
Newsgroups gmane.os.openbeos.kernel.devel
Message-ID <[email protected]>
On 2007-03-09 at 17:36:39 [+0100], Morgan Howe <[email protected]> wrote:
> On 3/9/07, Ingo Weinhold <bonefish-CFLBMwTPW48UNGrzBIF7/[email protected]> wrote:
[...]
> Well I was just going to make a barebones linux install in a Qemu and use it
> to compile.  But if you think we might be able to get this to work, I could
> work on that first.  I just tried to build it and it looks like the first
> thing we would need to get rid of is 'error: template with C linkage'.  The
> next would be 'error: 'operator new' takes type 'size_t' ('long unsigned
> int') as first parameter'.  That first one occurs about 11k times in a build
> and the second about 70.

I can't remember having seen those before. The first one sounds harmless. I 
suppose we're defining a template function somewhere in an 'extern "C" { ... 
}' block or something to that effect. Should become obvious when looking at 
the code the error message refers to. The second one sounds a bit weird. But  
there too, analyzing the referenced code should help understanding it.

BTW, if you run jam with the switch "-q", it will stop as soon as it 
encounters the first error, which is certainly a good idea as long as not 
everything works. :-)

> It doesn't seem like it's too far from building, so I'll start with this and
> hopefully when I move onto other stuff I won't have to mess around with a
> bunch of different Qemu images.  Let me know whatever information you have
> about it, Ingo, and I'll give it a shot.

Since you're already compiling things, there apparently was something you 
changed. Here's what generally has to be done for supporting another host 
platform:

1) Build platform detection in configure. You've probably already done this. 
Should be one line in the case statement. Assuming that uname returns "MacOS" 
it would by something like this:

	MacOS) buildPlatform=macos ;;

2) Support in build/jam/BuildSetup. You best look at each occurrence of 
"freebsd" and add "macos" analogously. It's basically the same for "linux", 
save that for "freebsd" additionally "/usr/lib/libgnuregex.so" is added to 
HOST_LIBROOT. You'll have to check whether MacOS's libc has GNU regex support 
built in or, as FreeBSD, provides a separate library.

3) headers/build/BeOSBuildCompatibility.h might need tweaking. The header is 
automatically included by every file built for the host platform. The 
difference between Linux and FreeBSD there is only that the latter does not 
provide strnlen(). You'll have to check whether or not MacOS does this. If 
you have more constant or prototype definitions that are missing in MacOS or 
need to be hacked somehow, they can go into this file.

4) Create a directory headers/build/host/macos. This directory is added to 
the system include directories for every file compiled for the host platform. 
If a header the build expects is missing on you platform, you would put it 
there. ATM we do that for FreeBSD only: It doesn't have <endian.h> and 
<regex.h>. Our proxy headers simply include <sys/endian.h> and <gnu/regex.h> 
(and do minor macro mapping).

Unless I've missed something, this should be all that's needed. The main 
problem is, of course, to understand, why the build fails and to find 
solutions to put into the respective files in the first place. :-)

If you hit a problem you need help with don't hesitate to ask. Please send 
the build output -- best run "jam -q" another time after it fails and provide 
the full output of that last run.

CU, Ingo

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV