## Makefile for building the gtk DLL with Microsoft C
## Use: nmake -f makefile.msc

## There is no install target, you have to decide where and 
## how to install for yourself.

TOP = ..\..
!INCLUDE $(TOP)/glib/build/win32/make.msc

################################################################

# Possibly override versions from build/win32/module.defs
GTK_VER = @GTK_MAJOR_VERSION@.@GTK_MINOR_VERSION@
GDK_PIXBUF_VER = @GDK_PIXBUF_MAJOR@.@GDK_PIXBUF_MINOR@


GDK_LIBS = ../gdk/gdk-win32-$(GTK_VER).lib
GTK_LIBS = gtk-win32-$(GTK_VER).lib
GDK_PIXBUF_LIBS = ../gdk-pixbuf/gdk_pixbuf-$(GDK_PIXBUF_VER).lib
GTK_BINARY_VERSION = @GTK_MAJOR_VERSION@.@GTK_MINOR_VERSION@.@LT_CURRENT@

# Perl and awk are needed to generate some source files.
# These generated source files are distribuyted with the Win32 GTk+ source
# distributions, so don't worry if you don't have perl and awk.
PERL = perl
AWK = gawk

INCLUDES = -FImsvc_recommended_pragmas.h -I . -I .. -I ../gdk -I ../gdk-pixbuf
DEPCFLAGS = $(PANGO_CFLAGS) $(GLIB_CFLAGS) $(LIBICONV_CFLAGS) \
		$(INTL_CFLAGS) $(ATK_CFLAGS)
LDFLAGS = $(ATK_LIBS) /link /machine:ix86 $(LINKDEBUG)
# Some files use near as an identifier
# Don't define GTK_COMPILATION here, because it's for gtk-x.x.dll only
DEFINES = $(G_DEBUGGING) -DGTK_DISABLE_COMPAT_H -DG_LOG_DOMAIN=\"Gtk\" -Dnear=xxnear \
	-DPANGO_ENABLE_BACKEND \
	-DGTK_VERSION=\"$(GTK_VER)\" -DGTK_BINARY_VERSION=\"$(GTK_BINARY_VERSION)\" \
	-DGTK_HOST=\"win32\"

TOUCH = copy makefile.msc+nul

gtk-stocks-icons :
	cd stock-icons
	nmake -nologo -f makefile.msc
	cd ..

all :						\
	..\config.h				\
	generated				\
	gtk-stocks-icons			\
	libgtk-win32-$(GTK_VER)-0.dll		\
	gtk-query-immodules-$(GTK_VER).exe \
#	gtk-win32-$(GTK_VER)s.lib \
#	gtk-x11-$(GTK_VER).dll

gtk_OBJECTS = 					\
	fnmatch.obj				\
	gtkaccelgroup.obj			\
	gtkaccellabel.obj			\
	gtkaccelmap.obj	\
	gtkaccessible.obj \
	gtkadjustment.obj			\
	gtkalignment.obj			\
	gtkarrow.obj				\
	gtkaspectframe.obj			\
	gtkbin.obj				\
	gtkbindings.obj				\
	gtkbbox.obj				\
	gtkbox.obj				\
	gtkbutton.obj				\
	gtkcalendar.obj				\
	gtkcelleditable.obj			\
	gtkcelllayout.obj			\
	gtkcellrenderer.obj			\
	gtkcellrenderertext.obj			\
	gtkcellrenderertoggle.obj		\
	gtkcellrendererpixbuf.obj		\
	gtkcheckbutton.obj			\
	gtkcheckmenuitem.obj			\
	gtkclipboard.obj			\
	gtkclist.obj				\
	gtkcolorbutton.obj				\
	gtkcolorsel.obj				\
	gtkcolorseldialog.obj			\
	gtkcombo.obj				\
	gtkcontainer.obj			\
	gtkctree.obj				\
	gtkcurve.obj				\
	gtkdialog.obj				\
	gtkdnd.obj				\
	gtkdrawingarea.obj			\
	gtkeditable.obj				\
	gtkentry.obj				\
	gtkentrycompletion.obj		\
	gtkeventbox.obj				\
	gtkexpander.obj			\
	gtkfilesel.obj				\
	gtkfixed.obj				\
	gtkfontsel.obj				\
	gtkfontbutton.obj				\
	gtkframe.obj				\
	gtkgamma.obj				\
	gtkgc.obj				\
	gtkhandlebox.obj			\
	gtkhbbox.obj				\
	gtkhbox.obj				\
	gtkhpaned.obj				\
	gtkhruler.obj				\
	gtkhscale.obj				\
	gtkhscrollbar.obj			\
	gtkhseparator.obj			\
	gtkhsv.obj				\
	gtkiconfactory.obj			\
	gtkicontheme.obj			\
	gtkiconthemeparser.obj			\
	gtkimage.obj				\
	gtkimagemenuitem.obj	\
	gtkimcontext.obj			\
	gtkimcontextsimple.obj			\
	gtkimmodule.obj				\
	gtkimmulticontext.obj			\
	gtkinputdialog.obj			\
	gtkinvisible.obj			\
	gtkitem.obj				\
	gtkitemfactory.obj			\
	gtkkeyhash.obj	\
	gtklabel.obj				\
	gtklayout.obj				\
	gtklist.obj				\
	gtklistitem.obj				\
	gtkliststore.obj				\
	gtkmain.obj				\
	gtkmarshalers.obj		\
	gtkmarshal.obj		\
	gtkmenu.obj				\
	gtkmenubar.obj				\
	gtkmenuitem.obj				\
	gtkmenushell.obj			\
	gtkmessagedialog.obj			\
	gtkmisc.obj				\
	gtknotebook.obj				\
	gtkobject.obj				\
	gtkoldeditable.obj			\
	gtkoptionmenu.obj			\
	gtkpaned.obj				\
	gtkpixmap.obj				\
#	gtkplug.obj				\
	gtkpreview.obj				\
	gtkprogress.obj				\
	gtkprogressbar.obj			\
	gtkradiobutton.obj			\
	gtkradiotoolbutton.obj			\
	gtkradiomenuitem.obj			\
	gtkrange.obj				\
	gtkrbtree.obj	\
	gtkrc.obj				\
	gtkruler.obj				\
	gtkscale.obj				\
	gtkscrollbar.obj			\
	gtkscrolledwindow.obj			\
	gtkselection.obj			\
	gtkseparator.obj			\
	gtkseparatormenuitem.obj \
	gtkseparatortoolitem.obj \
	gtksettings.obj \
	gtksignal.obj				\
	gtksizegroup.obj \
#	gtksocket.obj				\
	gtkspinbutton.obj			\
	gtkstyle.obj				\
	gtkstatusbar.obj			\
	gtkstock.obj				\
	gtktable.obj				\
	gtktearoffmenuitem.obj			\
	gtktext.obj				\
	gtktextbtree.obj			\
	gtktextbuffer.obj			\
	gtktextchild.obj			\
	gtktextdisplay.obj			\
	gtktextiter.obj				\
	gtktextlayout.obj			\
	gtktextmark.obj				\
	gtktextsegment.obj			\
	gtktexttag.obj				\
	gtktexttagtable.obj			\
	gtktexttypes.obj			\
	gtktextutil.obj	\
	gtktextview.obj				\
	gtkthemes.obj				\
	gtktipsquery.obj			\
	gtktogglebutton.obj			\
	gtktoggletoolbutton.obj			\
	gtktoolbar.obj				\
	gtktoolbutton.obj				\
	gtktoolitem.obj				\
	gtktooltips.obj				\
	gtktree.obj				\
	gtktreedatalist.obj	\
	gtktreednd.obj				\
	gtktreeitem.obj				\
	gtktreemodel.obj			\
	gtktreemodelfilter.obj			\
	gtktreemodelsort.obj			\
	gtktreeselection.obj			\
	gtktreesortable.obj \
	gtktreestore.obj			\
	gtktreeview.obj			\
	gtktreeviewcolumn.obj			\
	gtktypeutils.obj			\
	gtktypebuiltins.obj \
	gtkvbbox.obj				\
	gtkvbox.obj				\
	gtkviewport.obj				\
	gtkvpaned.obj				\
	gtkvruler.obj				\
	gtkvscale.obj				\
	gtkvscrollbar.obj			\
	gtkvseparator.obj			\
	gtkwidget.obj				\
	gtkwindow.obj				\
	gtkwindow-decorate.obj

# Source headers which are non-autogenerated headers
gtk_public_h_sources =		\
	gtk.h			\
	gtkaccelgroup.h		\
	gtkaccellabel.h		\
	gtkaccelmap.h		\
	gtkaccessible.h \
	gtkadjustment.h		\
	gtkalignment.h		\
	gtkarrow.h		\
	gtkaspectframe.h	\
	gtkbbox.h		\
	gtkbin.h		\
	gtkbindings.h		\
	gtkbox.h		\
	gtkbutton.h		\
	gtkcalendar.h		\
	gtkcelleditable.h	\
	gtkcelllayout.h		\
	gtkcellrenderer.h	\
	gtkcellrendererpixbuf.h	\
	gtkcellrenderertext.h	\
	gtkcellrenderertoggle.h	\
	gtkcheckbutton.h	\
	gtkcheckmenuitem.h	\
	gtkclipboard.h		\
	gtkclist.h		\
	gtkclipboard.h		\
	gtkcolorbutton.h	\
	gtkcolorsel.h		\
	gtkcolorseldialog.h	\
	gtkcombo.h		\
	gtkcontainer.h		\
	gtkctree.h		\
	gtkcurve.h		\
	gtkdebug.h		\
	gtkdialog.h		\
	gtkdnd.h		\
	gtkdrawingarea.h	\
	gtkeditable.h		\
	gtkentry.h		\
	gtkentrycompletion.h	\
	gtkenums.h		\
	gtkeventbox.h		\
	gtkexpander.h		\
	gtkfilesel.h		\
	gtkfixed.h		\
	gtkfontbutton.h		\
	gtkfontsel.h		\
	gtkframe.h		\
	gtkgamma.h		\
	gtkgc.h			\
	gtkhandlebox.h		\
	gtkhbbox.h		\
	gtkhbox.h		\
	gtkhpaned.h		\
	gtkhruler.h		\
	gtkhscale.h		\
	gtkhscrollbar.h		\
	gtkhseparator.h		\
	gtkhsv.h		\
	gtkiconfactory.h	\
	gtkicontheme.h		\
	gtkimage.h		\
	gtkimagemenuitem.h	\
	gtkimcontext.h		\
	gtkimcontextsimple.h	\
	gtkimmodule.h		\
	gtkimmulticontext.h	\
	gtkinputdialog.h	\
	gtkinvisible.h		\
	gtkitem.h		\
	gtkitemfactory.h	\
	gtklabel.h		\
	gtklayout.h		\
	gtklist.h		\
	gtklistitem.h		\
	gtkliststore.h		\
	gtkmain.h		\
	gtkmarshal.h	\
	gtkmenu.h		\
	gtkmenubar.h		\
	gtkmenuitem.h		\
	gtkmenushell.h		\
	gtkmessagedialog.h	\
	gtkmisc.h		\
	gtknotebook.h		\
	gtkobject.h		\
	gtkoldeditable.h	\
	gtkoptionmenu.h		\
	gtkpaned.h		\
	gtkpixmap.h		\
	gtkplug.h		\
	gtkpreview.h		\
	gtkprivate.h		\
	gtkprogress.h		\
	gtkprogressbar.h	\
	gtkradiobutton.h	\
	gtkradiomenuitem.h	\
	gtkradiotoolbutton.h	\
	gtkrange.h		\
	gtkrc.h			\
	gtkruler.h		\
	gtkscale.h		\
	gtkscrollbar.h		\
	gtkscrolledwindow.h	\
	gtkselection.h		\
	gtkseparator.h		\
	gtkseparatormenuitem.h	\
	gtkseparatortoolitem.h	\
	gtksettings.h		\
	gtksignal.h		\
	gtksizegroup.h	\
	gtksignal.h		\
	gtksocket.h		\
	gtkspinbutton.h		\
	gtkstatusbar.h		\
	gtkstock.h		\
	gtkstyle.h		\
	gtktable.h		\
	gtktearoffmenuitem.h	\
	gtktext.h		\
	gtktextbuffer.h		\
	gtktextchild.h		\
	gtktextdisplay.h	\
	gtktextiter.h		\
	gtktextlayout.h		\
	gtktextmark.h		\
	gtktexttag.h		\
	gtktexttagtable.h	\
	gtktextview.h		\
	gtktipsquery.h		\
	gtktogglebutton.h	\
	gtktoggletoolbutton.h	\
	gtktoolbar.h		\
	gtktoolbutton.h		\
	gtktoolitem.h		\
	gtktooltips.h		\
	gtktree.h		\
	gtktreednd.h		\
	gtktreeitem.h		\
	gtktreemodel.h		\
	gtktreemodelfilter.h	\
	gtktreemodelsort.h	\
	gtktreeselection.h	\
	gtktreesortable.h	\
	gtktreestore.h		\
	gtktreeview.h		\
	gtktreeviewcolumn.h	\
	gtktypeutils.h		\
	gtkvbbox.h		\
	gtkvbox.h		\
	gtkviewport.h		\
	gtkvpaned.h		\
	gtkvruler.h		\
	gtkvscale.h		\
	gtkvscrollbar.h		\
	gtkvseparator.h		\
	gtkwidget.h		\
	gtkwindow.h

# these aren't use here, but listed for reference
gtk_extra_sources = \
	gtkversion.h		\
	gtk-boxed.defs		\
	gtkmarshal.list		\

..\config.h : ..\config.h.win32
	copy ..\config.h.win32 ..\config.h

# Removed: gtk.defs 
GENERATED = gtktypebuiltins.h gtktypebuiltins.c gtkmarshal.h gtkmarshal.c gtkmarshalers.h gtkmarshalers.c

#
# Generated source files:
#
generated : $(GENERATED)
	$(TOUCH) generated

gtk.defs : $(gtk_public_h_sources) makefile.msc
	$(PERL) $(GLIB)\gobject\glib-mkenums \
		--comments ";; @comment@" \
		--fprod "; enumerations from \"@filename@\"\n " \
		--vhead "(define-@type@ @EnumName@" \
		--vprod "   (@valuenick@ @VALUENAME@)" \
		--vtail ")" \
		$(gtk_public_h_sources) > xgen-gdef
	copy xgen-gdef gtk.defs

# generate type identifier header (GTK_TYPE_WIDGET_FLAGS)
# use 'echo' to work around 'command line too long'
gtktypebuiltins.h: $(gtk_public_h_sources) makefile.msc
	echo #ifndef __GTK_TYPE_BUILTINS_H__ > gtktypebuiltins.h
	echo #define __GTK_TYPE_BUILTINS_H__ >> gtktypebuiltins.h
	echo #include "glib-object.h" >> gtktypebuiltins.h
	echo G_BEGIN_DECLS >> gtktypebuiltins.h
	$(PERL) $(GLIB)\gobject\glib-mkenums \
		--fprod "/* enumerations from \"@filename@\" */\n" \
		--vhead "GType @enum_name@_get_type (void);\n#define GTK_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
		--ftail "G_END_DECLS\n\n#endif /* __GTK_TYPE_BUILTINS_H__ */" \
		$(gtk_public_h_sources) >> gtktypebuiltins.h

gtktypebuiltins.c: $(gtk_public_h_sources) makefile.msc
	$(PERL) $(GLIB)\gobject\glib-mkenums \
		--fhead "#define GTK_ENABLE_BROKEN\n#include \"gtk.h\"\n#include \"gtkprivate.h\"" \
		--fprod "\n/* enumerations from \"@filename@\" */" \
		--vhead "GType\n@enum_name@_get_type (void)\n{\n  static GType etype = 0;\n  if (etype == 0) {\n    static const G@Type@Value values[] = {" \
		--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
		--vtail "      { 0, NULL, NULL }\n    };\n    etype = g_@type@_register_static (\"@EnumName@\", values);\n  }\n  return etype;\n}\n" \
		$(gtk_public_h_sources) > xgen-gtbc
	copy xgen-gtbc gtktypebuiltins.c

# private marshalers
gtkmarshalers.h : gtkmarshalers.list
	$(GLIB)\gobject\glib-genmarshal --prefix=_gtk_marshal gtkmarshalers.list --header >>gtkmarshalers.h

gtkmarshalers.c : gtkmarshalers.list
	$(GLIB)\gobject\glib-genmarshal --prefix=_gtk_marshal gtkmarshalers.list --body >gtkmarshalers.c

# public, deprecated marshalers
gtkmarshal.h : gtkmarshal.list
	echo #ifndef GTK_DISABLE_DEPRECATED >gtkmarshal.h
	$(GLIB)\gobject\glib-genmarshal --prefix=gtk_marshal gtkmarshal.list --header >>gtkmarshal.h
	echo #endif /* GTK_DISABLE_DEPRECATED */ >>gtkmarshal.h

gtkmarshal.c : gtkmarshal.list
	$(GLIB)\gobject\glib-genmarshal --prefix=gtk_marshal gtkmarshal.list --body >gtkmarshal.c

gtksignal.obj : gtksignal.c gtkmarshal.c gtkmarshal.h
	$(CC) $(CFLAGS) -GD -c -DGTK_COMPILATION -DG_LOG_DOMAIN=\"Gtk\" gtksignal.c

#
# Linking:
#
libgtk-win32-$(GTK_VER)-0.dll : $(gtk_OBJECTS) gtk.def
	$(CC) $(CFLAGS) -LD -Fm -Fe$@ $(gtk_OBJECTS) \
	$(GDK_LIBS) $(GDK_PIXBUF_LIBS) $(PANGO_LIBS) $(INTL_LIBS) $(GLIB_LIBS) \
	gdi32.lib user32.lib advapi32.lib wsock32.lib \
	$(LDFLAGS) /implib:gtk-win32-$(GTK_VER).lib /def:gtk.def

gtk-win32-$(GTK_VER)s.lib : $(gtk_OBJECTS)
	lib /out:gtk-win32-$(GTK_VER)s.lib $(gtk_OBJECTS)

gtk-query-immodules-$(GTK_VER).exe : queryimmodules.obj
	$(CC) $(CFLAGS) -Fe$@ queryimmodules.obj $(GTK_LIBS) $(GLIB_LIBS) $(PANGO_LIBS) $(LDFLAGS)

gtk-x11-$(GTK_VER).dll : $(gtk_OBJECTS) gtk.def
	$(CC) $(CFLAGS) -LD -Fm -Fegtk-x11-$(GTK_VER).dll $(gtk_OBJECTS) ../gdk/gdk-x11-$(GTK_VER).lib $(GDK_PIXBUF_LIBS) $(PANGO_LIBS) $(INTL_LIBS) $(GLIB_LIBS) gdi32.lib user32.lib advapi32.lib $(LDFLAGS) /def:gtk.def

# General rule for compiling the objects into the DLL
.c.obj :
	$(CC) $(CFLAGS) -GD -c -DGTK_COMPILATION -DG_LOG_DOMAIN=\"Gtk\" $<

$(EXAMPLE).obj : ..\examples\$(EXAMPLE)\$(EXAMPLE).c
	$(CC) $(CFLAGS) -c -DG_LOG_DOMAIN=\"$(EXAMPLE)\" ..\examples\$(EXAMPLE)\$(EXAMPLE).c

$(EXAMPLE).exe : $(EXAMPLE).obj
	$(CC) $(CFLAGS) $(EXAMPLE).obj $(GTK_LIBS) $(GDK_LIBS) $(GLIB_LIBS) $(LDFLAGS)

makefile.msc: makefile.msc.in
	sed -e s,@GTK[_]MAJOR_VERSION@,@GTK_MAJOR_VERSION@, \
	    -e s,@GTK[_]MINOR_VERSION@,@GTK_MINOR_VERSION@, \
	    -e 's,@GTK[_]VERSION@,@GTK_VERSION@,' \
	    -e 's,@GDK_PIXBUF[_]MAJOR@,@GDK_PIXBUF_MAJOR@,' \
	    -e 's,@GDK_PIXBUF[_]MINOR@,@GDK_PIXBUF_MINOR@,'  <makefile.msc.in >$@
