changeset 3099:034f830a5823

[MSVC] enable FLTK compilation - disable RANLIB, it's meaningless when using MSVC
author Michael Goffioul <michael.goffioul@gmail.com>
date Wed, 26 Jun 2013 14:56:33 -0400
parents 4c72697bcbc4
children a684a0d16101
files Makefile.in src/fltk.mk src/msvc-fltk-1.patch
diffstat 3 files changed, 283 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.in	Tue Jun 25 21:20:43 2013 -0400
+++ b/Makefile.in	Wed Jun 26 14:56:33 2013 -0400
@@ -156,7 +156,7 @@
   MXE_TOOL_PREFIX := 
   ifeq ($(MXE_SYSTEM),msvc)
     MXE_AR := ar
-    MXE_RANLIB := ranlib
+    MXE_RANLIB := true
     MXE_CC := clgcc
     MXE_CXX := clg++
     MXE_F77 := clgfortran
@@ -172,7 +172,7 @@
     # different configuration tags.
     HOST_AND_BUILD_CONFIGURE_OPTIONS := \
 	    CC='$(MXE_CC)' CXX='$(MXE_CXX)' F77='$(MXE_F77)' DLLTOOL='$(MXE_DLLTOOL)' CCAS='gcc' \
-	    CFLAGS='-O2' CXXFLAGS='-O2' ac_cv_f77_compiler_gnu=no
+	    CFLAGS='-O2' CXXFLAGS='-O2' ac_cv_f77_compiler_gnu=no RANLIB='$(MXE_RANLIB)'
   else
     MXE_AR := ar
     MXE_RANLIB := ranlib
--- a/src/fltk.mk	Tue Jun 25 21:20:43 2013 -0400
+++ b/src/fltk.mk	Wed Jun 26 14:56:33 2013 -0400
@@ -37,6 +37,10 @@
 ##        LIBS='-lws2_32'
     # enable exceptions, because disabling them doesn't make any sense on PCs
     $(SED) -i 's,-fno-exceptions,,' '$(1)/makeinclude'
-    $(MAKE) -C '$(1)' -j '$(JOBS)' install DIRS=src LIBCOMMAND='$(MXE_AR) cr'
+    $(MAKE) -C '$(1)' -j '$(JOBS)' install \
+        DIRS=src \
+        LIBCOMMAND='$(MXE_AR) cr' \
+	LIBRARY_PREFIX='$(LIBRARY_PREFIX)' \
+	LIBRARY_SUFFIX='$(LIBRARY_SUFFIX)'
     $(LN_SF) '$(HOST_BINDIR)/fltk-config' '$(BUILD_TOOLS_PREFIX)/bin/$(MXE_TOOL_PREFIX)fltk-config'
 endef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/msvc-fltk-1.patch	Wed Jun 26 14:56:33 2013 -0400
@@ -0,0 +1,276 @@
+diff -ur fltk-1.3.1-orig/FL/Fl_Device.H fltk-1.3.1/FL/Fl_Device.H
+--- fltk-1.3.1-orig/FL/Fl_Device.H	2012-11-06 15:46:14 -0500
++++ fltk-1.3.1/FL/Fl_Device.H	2013-06-26 14:44:44 -0400
+@@ -213,7 +213,7 @@
+   friend void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
+   friend FL_EXPORT void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
+   friend FL_EXPORT void gl_start();
+-  friend void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
++  friend FL_EXPORT void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
+   matrix *fl_matrix; /**< Points to the current coordinate transformation matrix */
+ 
+   /** \brief The constructor. */
+diff -ur fltk-1.3.1-orig/configure.in fltk-1.3.1/configure.in
+--- fltk-1.3.1-orig/configure.in	2013-06-26 14:44:49 -0400
++++ fltk-1.3.1/configure.in	2013-06-26 14:46:28 -0400
+@@ -164,6 +164,31 @@
+     fi
+ fi
+ 
++case $uname in
++    MINGW*)
++	if test x$GCC != xyes; then
++		dnl Assume VC++ compiler
++		LINKFLTK="../lib/fltk.lib"
++		LINKFLTKFORMS=
++		LINKFLTKGL=
++		LINKFLTKIMG=
++
++		LIBEXT=".lib"
++		LIBNAME="../lib/fltk.lib"
++		FLLIBNAME=
++		GLLIBNAME=
++		IMGLIBNAME=
++		CAIROLIBNAME=
++
++		LIBBASENAME="fltk.lib"
++		FLLIBBASENAME=
++		GLLIBBASENAME=
++		IMGLIBBASENAME=
++		CAIROLIBBASENAME=
++	fi
++	;;
++esac
++
+ AC_SUBST(CAIRODIR)
+ AC_SUBST(CAIROFLAGS)
+ AC_SUBST(CAIROLIBS)
+@@ -287,36 +312,47 @@
+             ;;
+         CYGWIN* | MINGW*)
+ 	    PICFLAG=0
+-	    if test x$enable_cygwin != xyes; then
+-		DSONAME="mgwfltknox-$FL_API_VERSION.dll"
+-		FLDSONAME="mgwfltknox_forms-$FL_API_VERSION.dll"
+-		GLDSONAME="mgwfltknox_gl-$FL_API_VERSION.dll"
+-		IMGDSONAME="mgwfltknox_images-$FL_API_VERSION.dll"
+-		CAIRODSONAME="mgwfltknox_cairo-$FL_API_VERSION.dll"
++	    if test x$GCC = xyes; then
++		    if test x$enable_cygwin != xyes; then
++			DSONAME="mgwfltknox-$FL_API_VERSION.dll"
++			FLDSONAME="mgwfltknox_forms-$FL_API_VERSION.dll"
++			GLDSONAME="mgwfltknox_gl-$FL_API_VERSION.dll"
++			IMGDSONAME="mgwfltknox_images-$FL_API_VERSION.dll"
++			CAIRODSONAME="mgwfltknox_cairo-$FL_API_VERSION.dll"
++		    else
++			if test x$enable_x11 = xyes; then
++			    DSONAME="cygfltk-$FL_API_VERSION.dll"
++			    FLDSONAME="cygfltk_forms-$FL_API_VERSION.dll"
++			    GLDSONAME="cygfltk_gl-$FL_API_VERSION.dll"
++			    IMGDSONAME="cygfltk_images-$FL_API_VERSION.dll"
++			    CAIRODSONAME="cygfltk_cairo-$FL_API_VERSION.dll"
++			else
++			    DSONAME="cygfltknox-$FL_API_VERSION.dll"
++			    FLDSONAME="cygfltknox_forms-$FL_API_VERSION.dll"
++			    GLDSONAME="cygfltknox_gl-$FL_API_VERSION.dll"
++			    IMGDSONAME="cygfltknox_images-$FL_API_VERSION.dll"
++			    CAIRODSONAME="cygfltknox_cairo-$FL_API_VERSION.dll"
++			fi
++		    fi
++		    #-----------------------------------------------------------
++		    # -Wl,--enable-runtime-pseudo-reloc: See str 1585
++		    # appears to be necessary for older binutils versions < 2.16
++		    #-----------------------------------------------------------
++		    LDFLAGS="$LDFLAGS -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc"
++		    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -shared \
++			-Wl,--whole-archive -Wl,--export-all-symbols \
++			-Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import \
++			-Wl,--enable-auto-image-base -o \$@"
+ 	    else
+-		if test x$enable_x11 = xyes; then
+-		    DSONAME="cygfltk-$FL_API_VERSION.dll"
+-		    FLDSONAME="cygfltk_forms-$FL_API_VERSION.dll"
+-		    GLDSONAME="cygfltk_gl-$FL_API_VERSION.dll"
+-		    IMGDSONAME="cygfltk_images-$FL_API_VERSION.dll"
+-		    CAIRODSONAME="cygfltk_cairo-$FL_API_VERSION.dll"
+-		else
+-		    DSONAME="cygfltknox-$FL_API_VERSION.dll"
+-		    FLDSONAME="cygfltknox_forms-$FL_API_VERSION.dll"
+-		    GLDSONAME="cygfltknox_gl-$FL_API_VERSION.dll"
+-		    IMGDSONAME="cygfltknox_images-$FL_API_VERSION.dll"
+-		    CAIRODSONAME="cygfltknox_cairo-$FL_API_VERSION.dll"
+-		fi
++		    dnl Assume VC++ compiler
++		    DSONAME="\$(LIBRARY_PREFIX)fltk-$FL_API_VERSION\$(LIBRARY_SUFFIX).dll"
++		    FLDSONAME=
++		    GLDSONAME=
++		    IMGDSONAME=
++		    CAIRODSONAME=
++
++		    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -shared -o \$@"
+ 	    fi
+-	    #-----------------------------------------------------------
+-	    # -Wl,--enable-runtime-pseudo-reloc: See str 1585
+-	    # appears to be necessary for older binutils versions < 2.16
+-	    #-----------------------------------------------------------
+-            LDFLAGS="$LDFLAGS -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc"
+-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -shared \
+-	    	-Wl,--whole-archive -Wl,--export-all-symbols \
+-		-Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import \
+-		-Wl,--enable-auto-image-base -o \$@"
+ 	    ;;
+ 	*)
+             AC_MSG_WARN(Shared libraries may not be supported.  Trying -shared option with compiler.)
+@@ -330,6 +366,15 @@
+     esac
+ 
+     LINKSHARED="-L../src $FLTKCAIROOPTION -lfltk_images$SHAREDSUFFIX -lfltk_forms$SHAREDSUFFIX -lfltk$SHAREDSUFFIX"
++
++    case $uname in
++	MINGW*)
++	    if test x$GCC != xyes; then
++		dnl Assume VC++ compiler
++		LINKSHARED="-L../src $FLTKCAIROOPTION -lfltk$SHAREDSUFFIX"
++	    fi
++	    ;;
++    esac
+ else
+     DSOCOMMAND="echo"
+     DSOLINK=""
+@@ -705,7 +750,7 @@
+ syspnglib_ok=no
+ syspnginc_ok=no
+ if test x$enable_localpng != xyes; then
+-  AC_CHECK_LIB(png, png_read_info, 
++  AC_CHECK_LIB(png15, png_read_info, 
+     [AC_CHECK_HEADER(png.h, 
+ 	AC_DEFINE(HAVE_PNG_H)
+ 	syspnginc_ok=yes)
+@@ -734,11 +779,11 @@
+ else
+     PNGINC=""
+     PNG=""
+-    IMAGELIBS="-lpng $IMAGELIBS"
+-    STATICIMAGELIBS="-lpng $STATICIMAGELIBS"
++    IMAGELIBS="-lpng15 $IMAGELIBS"
++    STATICIMAGELIBS="-lpng15 $STATICIMAGELIBS"
+     AC_DEFINE(HAVE_LIBPNG)
+-    AC_CHECK_LIB(png,png_get_valid, AC_DEFINE(HAVE_PNG_GET_VALID))
+-    AC_CHECK_LIB(png,png_set_tRNS_to_alpha, AC_DEFINE(HAVE_PNG_SET_TRNS_TO_ALPHA))
++    AC_CHECK_LIB(png15,png_get_valid, AC_DEFINE(HAVE_PNG_GET_VALID))
++    AC_CHECK_LIB(png15,png_set_tRNS_to_alpha, AC_DEFINE(HAVE_PNG_SET_TRNS_TO_ALPHA))
+ fi
+ 
+ AC_SUBST(JPEG)
+@@ -824,11 +869,17 @@
+ 	# checks don't work because the shell puts out \r\n instead of
+ 	# \n.  Here we just force U32 to be defined to "unsigned"...
+         AC_DEFINE(U32,unsigned)
+-	CFLAGS="-mwindows -DWIN32 -DUSE_OPENGL32 $CFLAGS"
+-	CXXFLAGS="-mwindows -DWIN32 -DUSE_OPENGL32 $CXXFLAGS"
+-	LDFLAGS="-mwindows $LDFLAGS"
+-	DSOFLAGS="-mwindows $DSOFLAGS"
+-	LIBS="$LIBS -lole32 -luuid -lcomctl32"
++	if test x$GCC = xyes; then
++	    CFLAGS="-mwindows -DWIN32 -DUSE_OPENGL32 $CFLAGS"
++	    CXXFLAGS="-mwindows -DWIN32 -DUSE_OPENGL32 $CXXFLAGS"
++	    LDFLAGS="-mwindows $LDFLAGS"
++	    DSOFLAGS="-mwindows $DSOFLAGS"
++	    LIBS="$LIBS -lole32 -luuid -lcomctl32"
++	else
++	    CFLAGS="-DWIN32 -DUSE_OPENGL32 -DFL_DLL $CFLAGS \$(FLTKFLAGS)"
++	    CXXFLAGS="-DWIN32 -DUSE_OPENGL32 -DFL_DLL $CXXFLAGS"
++	    LIBS="$LIBS -lole32 -luuid -lcomctl32 -lcomdlg32 -lgdi32"
++	fi
+ 	if test "x$with_optim" = x; then
+ 	    dnl Avoid -Os optimization on Cygwin/MinGW
+ 	    with_optim="-O3"
+@@ -837,10 +888,10 @@
+ 	if test x$enable_gl != xno; then
+ 	    AC_CHECK_HEADER(GL/gl.h,
+ 	        AC_DEFINE(HAVE_GL)
+-		GLLIB="-lopengl32")
++		GLLIB="-lopengl32", [], [#include <windows.h>])
+ 	    AC_CHECK_HEADER(GL/glu.h,
+         	AC_DEFINE(HAVE_GL_GLU_H)
+-		GLLIB="-lglu32 $GLLIB")
++		GLLIB="-lglu32 $GLLIB", [], [#include <windows.h>])
+ 	else
+ 	    LINKFLTKGL=""
+ 	    GLLIBNAME=""
+diff -ur fltk-1.3.1-orig/fluid/factory.cxx fltk-1.3.1/fluid/factory.cxx
+--- fltk-1.3.1-orig/fluid/factory.cxx	2011-07-19 00:49:30 -0400
++++ fltk-1.3.1/fluid/factory.cxx	2013-06-26 14:44:44 -0400
+@@ -37,7 +37,7 @@
+ 
+ extern Fl_Pixmap *pixmap[];
+ 
+-#if !HAVE_STRCASECMP
++#if !HAVE_STRCASECMP && !defined(strcasecmp)
+ //
+ // 'strcasecmp()' - Do a case-insensitive compare...
+ //
+diff -ur fltk-1.3.1-orig/src/Makefile fltk-1.3.1/src/Makefile
+--- fltk-1.3.1-orig/src/Makefile	2012-11-06 16:13:54 -0500
++++ fltk-1.3.1/src/Makefile	2013-06-26 14:44:44 -0400
+@@ -459,6 +459,13 @@
+ 		-L. -lfltk -Wl,--exclude-libs -Wl,libfltk_png.a \
+ 			$(IMAGELIBS) $(LDLIBS)
+ 
++$(LIBNAME):
++	true
++
++$(LIBRARY_PREFIX)fltk-1.3$(LIBRARY_SUFFIX).dll: $(OBJECTS) $(FLOBJECTS) $(GLOBJECTS) $(IMGOBJECTS)
++	echo $(DSOCOMMAND) ...
++	$(DSOCOMMAND) $^ -Wl,--out-implib=$(LIBNAME) $(IMAGELIBS) $(LDLIBS) $(GLDLIBS)
++
+ clean:
+ 	-$(RM) *.o xutf8/*.o *.dll.a core.* *~ *.bak *.bck
+ 	-$(RM) $(DSONAME) $(FLDSONAME) $(GLDSONAME) $(IMGDSONAME) \
+@@ -554,15 +561,19 @@
+ 	-$(INSTALL_DIR) $(DESTDIR)$(bindir)
+ 	$(RM) $(DESTDIR)$(libdir)/$(LIBBASENAME)
+ 	$(INSTALL_LIB) $(LIBNAME) $(DESTDIR)$(libdir)
+-	$(INSTALL_LIB) $(FLLIBNAME) $(DESTDIR)$(libdir)
+-	$(INSTALL_LIB) $(IMGLIBNAME) $(DESTDIR)$(libdir)
+ 	$(RANLIB) $(DESTDIR)$(libdir)/$(LIBBASENAME)
+-	$(RANLIB) $(DESTDIR)$(libdir)/$(FLLIBBASENAME)
++	if test x$(FLLIBNAME) != x; then \
++		$(INSTALL_LIB) $(FLLIBNAME) $(DESTDIR)$(libdir); \
++		$(RANLIB) $(DESTDIR)$(libdir)/$(FLLIBBASENAME); \
++	fi
++	if test x$(IMGLIBNAME) != x; then \
++		$(INSTALL_LIB) $(IMGLIBNAME) $(DESTDIR)$(libdir); \
++		$(RANLIB) $(DESTDIR)$(libdir)/$(IMGLIBBASENAME); \
++	fi
+ 	if test x$(GLLIBNAME) != x; then \
+ 		$(INSTALL_LIB) $(GLLIBNAME) $(DESTDIR)$(libdir); \
+ 		$(RANLIB) $(DESTDIR)$(libdir)/$(GLLIBBASENAME); \
+ 	fi
+-	$(RANLIB) $(DESTDIR)$(libdir)/$(IMGLIBBASENAME)
+ 	if test x$(DSONAME) = xlibfltk.so.1.3; then\
+ 		$(RM) $(DESTDIR)$(libdir)/libfltk.so*;\
+ 		$(INSTALL_LIB) libfltk.so.1.3 $(DESTDIR)$(libdir); \
+@@ -687,6 +698,10 @@
+ 		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
+ 		$(INSTALL_LIB) libfltk_images.dll.a $(DESTDIR)$(libdir); \
+ 	fi
++	if test x$(DSONAME) = x$(LIBRARY_PREFIX)fltk-1.3$(LIBRARY_SUFFIX).dll; then\
++		$(RM) $(DESTDIR)$(bindir)/$(DSONAME);\
++		$(INSTALL_LIB) $(DSONAME) $(DESTDIR)$(bindir); \
++	fi
+ 
+ 
+ uninstall:
+diff -ur fltk-1.3.1-orig/test/Makefile fltk-1.3.1/test/Makefile
+--- fltk-1.3.1-orig/test/Makefile	2011-07-19 00:49:30 -0400
++++ fltk-1.3.1/test/Makefile	2013-06-26 14:44:44 -0400
+@@ -260,7 +260,7 @@
+ # FLUID file rules
+ .fl.cxx .fl.h:	../fluid/fluid$(EXEEXT)
+ 	echo Generating $@ and header from $<...
+-	../fluid/fluid$(EXEEXT) -c $<
++	PATH=../src:$$PATH ../fluid/fluid$(EXEEXT) -c $<
+ 
+ # All demos depend on the FLTK library...
+ $(ALL): $(LIBNAME)