[Box Backup] Compile Boxi from tarball or trunk?

Chris Wilson boxbackup@boxbackup.org
Wed, 1 Apr 2009 16:40:36 +0200 (CEST)


Hi Achim,

On Wed, 1 Apr 2009, Achim wrote:

> I like the looks of Boxi (as a native Win32 application) and have been 
> able to find the following two, rather old (2006!) pre-compiled 
> binaries:
>
> <http://gcc.flexdns.net/boxi-win32-bin-060925.zip>
> <http://gcc.flexdns.net/boxi-win32-bin-061010.zip>

That's because it's difficult and annoying to build boxi on windows, as I 
only have a windows virtual machine that's on my laptop and it's very slow 
and short on disk space, so I very rarely do it. The last time I did it 
successfully was in 2006, as you can see.

I have not yet been able to successfully cross-compile, although this is a 
more promising route as it should be much faster.

> Unfortunately, none of the recent releases (R626, 0.1.0) compile under
> Cygwin native (via MinGW) at the moment: see the (messy) details below.

I'm not particularly interested in fixing the old versions, but will try 
to fix trunk.

> Basically, I would be very grateful if somebody could point me to how to 
> compile any version of Boxi from source...

As above, it's very inconvenient and slow for me. If someone could give me 
access to a decent Windows machine for use for working on this then that 
would help.

> main.cc: In member function `virtual void BoxiApp::OnAssertFailure(const
> wxChar*, int, const wxChar*
> , const wxChar*, const wxChar*)':
> main.cc:342: error: `OnAssertFailure' is not a member of `wxApp'
> make: *** [main.o] Error 1
>
> (even though __WXDEBUG__ should be defined, as we compiled for debugging)

It's not obvious that this is a Boxi error. Why is OnAssertFailure 
missing? If you add a #error to the relevant part of the wxWidgets 
headers, does it error out to show that OnAssertFailure is actually being 
defined?

> FileTree.cc:178: error: `wxFSVolumeBase' has not been declared
> FileTree.cc:178: error: `GetVolumes' undeclared (first use this function)
> FileTree.cc:178: error: (Each undeclared identifier is reported only once
> for each function it appears in.)
> FileTree.cc:225: error: `wxFSVolumeBase' undeclared (first use this
> function)
> FileTree.cc:225: error: expected `;' before "vol"
> FileTree.cc:226: error: `vol' undeclared (first use this function)

May have been removed in more recent versions of wxWidgets.

> In addition, there is trouble with MSVCRT as described in
> <http://www.mail-archive.com/fedora-mingw@lists.fedoraproject.org/msg00742.html>
>
> Must include Box.h before sys/types.h is based on msvcrt macro comparison
> which will always fail, because default value is 600 (and not 601 as
> required)
> <http://www.boxbackup.org/trac/changeset/2257>

The default is 600 and that is precisely the problem. We cannot compile if 
sys/types.h was included while __MSVCRT_VERSION is set to 600. Therefore 
it must be set to 601 or higher before importing sys/types.h, preferably 
by #including Box.h before sys/types.h, exactly as the error message says.

If you check the output of the failed make, you will see in which file 
sys/types.h was included (perhaps indirectly) before Box.h, and you can 
add a #include sys/types.h in there.

Cheers, Chris.
-- 
_ ___ __     _
  / __/ / ,__(_)_  | Chris Wilson <0000 at qwirx.com> - Cambs UK |
/ (_/ ,\/ _/ /_ \ | Security/C/C++/Java/Perl/SQL/HTML Developer |
\ _/_/_/_//_/___/ | We are GNU-free your mind-and your software |