One reason for developing the GTK+ MB-System interface was the need for a cross-platform interface to the MB-System mbio library. The GTK+ MB-System has been built for and run on a Windows® system. The software was cross-compiled on a Linux x32 system using the tools from MinGW.
The following are the brief notes kept for setting up the cross-compile environment, and building the MB-System mbio library and the GTK+ MB-System interface. These notes are from 2008, so some of the instructions may a out of date.
==============================================
Cross Compile Setup Notes
==============================================
-----------------------------------------------
SETUP
-----------------------------------------------
-
Download env script setup from http://www.libsdl.org/extras/win32/cross/
Run Script but do not install ADA (fails?). This builds gcc, binutils, etc. - Setup source in WIN_CROSS with cross-configure.sh and cross-make.sh scripts. Also added env source file from http://ricardo.ecn.wfu.edu/~cottrell/cross-gtk/
-
Downloaded GTK stuff from http://gtk-win.sourceforge.net/home/index.php/Main/Downloads
This includes zlib, png, jpeg, tiff, etc. -
Download various support files from http://gnuwin32.sourceforge.net/packages.html
including libGSL, PdCurses (for GRASS), and libGW32C (required by png). -
Unzipped above download files into install dir
(/usr/local/cross-tools/i386-mingw32) -
Repaired GTK pkgconfig files in
/usr/local/cross-tools/i386-mingw32/lib/pkgconfig.
Ran following script to fix prefix line in *.pc files
#!/bin/sh
TARGET=/usr/local/cross-tools/i386-mingw32
for f in *.pc ; do
grep -v 'cross-tools' $f > $f.tmp
cat head1 $f.tmp > $f.tmp2
rm $f.tmp
mv $f.tmp2 $f
done - Can now build GTK apps!!
------------------------------------------------------------------
NetCDF
------------------------------------------------------------------
-
To build DLL used ...
../../cross-configure.sh --prefix=/usr/local/cross-tools/i386-mingw32/
--enable-dll -disable-cxx --enable-shared --enable-c-only
../../cross-make.sh
../../cross-make.sh install
-------------------------------------------------------------
MB-System
-------------------------------------------------------------
- Edit install_makefile and use LINUX define
-
Edit mr1pr_defines.h in mr1pr as change to following ...
#ifdef LINUX
#include
#include
#include
#include
#endif -
Edit memalloc.c in mr1pr and comment out includes ...
/**
#include
#include
**/ -
Edit sapi.h in surf to pick up correct WIN32 includes
#include
#include - Changed line 625 in sapi.h from u_char to mb_u_char
-
Edit mb_read_init.c, mb_write_init.c, and mb_close.c in
mbio to change includes as in #2 - Edit mb_esf.c and mbsys_surf.h and replace u_char with mb_u_char
- Edit mb_process.c and add "include winsock2.h" for gethostname def
-
Edit src/mbaux/Makefile to remove references to xgr so xgraphics.c
is not built -
Edit DSL includes to definition of interface to dsl_interface in
structure
Files are: mbsys_dsl.h, mbf_dsl120pf.h, mbf_dsl120sf.h.
Edit Source files in mbio: mbsys_dsl.c, mbr_dsl120pf.c, mbr_dsl120sf.c
to change struct member interface to dsl_interface. The "interface" definition
must be defined somewhere else? -
To build libraries as DLL's add the following to each Makefile
AS = i386-mingw32-as
DLLWRAP = i386-mingw32-dllwrap
DLLWRAP_FLAGS = --as=$(AS) --export-all --driver-name $(CC) -s
then add build arg such as
libmbio.dll: mb_format.o mb_error.o \
....
$(DLLWRAP) $(DLLWRAP_FLAGS) \
--output-def libprob.def --implib $(LIBDIR)/libmbio.a \
-o $@ $^ -lnetcdf -lmbgsf -lsapi -lmr1pr -lmbproj \
-lxdr -lwsock32 -lws2_32 -
After edit Makefile with link flags, etc run 'cross.make libmbio.dll'
and copy DLL to lib directory. - Build programs as required. I have built mbinfo, and mblist as a test.
-
For GTK+ MB-System run cross-configure.sh, edit src/misc.c to comment
out "sys/wait.h", and edit Makfile to remove "-L/usr/local/mbsystem/lib",
-lmbxgr, and add libs from adove "-lxdr -lwsock32 -lws2_32". Without above
libs program, will build and start, but cannot load data.
Windows® Issues
There are a few issues with using the mbio library on Windows®. One issue is the use of the system command. As an example mb_esf.c uses system to copy the esf file to a tmp file as backup when editing. This copy command will fail on windows. The system command can in this case be replaced with the following routine …
int
file_copy (char *orig_name, char *new_name)
{
FILE *old, *new;
int c;if ( (old = fopen(orig_name, "rb") ) == NULL)
{
return -1;
}if ( (new = fopen(new_name, "wb") ) == NULL)
{
fclose(old);
return -1;
}while (1)
{
c = fgetc(old);if (!feof(old) )
fputc(c, new);
else
break;
}fclose (new);
fclose (old);return 0;
}