Update Makefile.lite build system.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
diff --git a/Makefile.deps b/Makefile.deps
index a3e2d39..6029446 100644
--- a/Makefile.deps
+++ b/Makefile.deps
@@ -16,6 +16,17 @@
 #  restrictive of those mentioned above.  See the file COPYING.Xiph in this
 #  distribution.
 
+ifeq ($(findstring Windows,$(OS)),Windows) # "Windows" is provided by GNU Make's internal $(OS)
+    LIBFLAC_DEPS = share/win_utf8_io
+else
+ifeq ($(findstring MINGW,$(OS)),MINGW) # "MINGW" is provided by config.mk's `uname -s`
+    LIBFLAC_DEPS = share/win_utf8_io
+else
+    LIBFLAC_DEPS =
+endif
+endif
+
+libFLAC: $(LIBFLAC_DEPS)
 flac: libFLAC share
 libFLAC++: libFLAC
 metaflac: libFLAC share
diff --git a/Makefile.lite b/Makefile.lite
index 29b34ad..645fa31 100644
--- a/Makefile.lite
+++ b/Makefile.lite
@@ -31,7 +31,7 @@
 
 topdir = .
 
-.PHONY: all doc src examples libFLAC libFLAC++ share plugin_common plugin_xmms flac metaflac test_grabbag test_libFLAC test_libFLAC++ test_seeking test_streams utils flacdiff flactimer
+.PHONY: all doc src examples libFLAC libFLAC++ share/win_utf8_io share plugin_common plugin_xmms flac metaflac test_grabbag test_libFLAC test_libFLAC++ test_seeking test_streams utils flacdiff flactimer
 all: doc src examples
 
 DEFAULT_CONFIG = release
@@ -52,7 +52,7 @@
 src examples:
 	(cd $@ && $(MAKE) -f Makefile.lite $(CONFIG))
 
-libFLAC libFLAC++ share flac metaflac plugin_common plugin_xmms test_libs_common test_seeking test_streams test_grabbag test_libFLAC test_libFLAC++:
+libFLAC libFLAC++ share/win_utf8_io share flac metaflac plugin_common plugin_xmms test_libs_common test_seeking test_streams test_grabbag test_libFLAC test_libFLAC++:
 	(cd src/$@ && $(MAKE) -f Makefile.lite $(CONFIG))
 
 flacdiff flactimer:
diff --git a/build/compile.mk b/build/compile.mk
index 205cb30..a2636c4 100644
--- a/build/compile.mk
+++ b/build/compile.mk
@@ -23,21 +23,21 @@
 %.debug.o %.release.o : %.c
 	$(CC) $(CFLAGS) -c $< -o $@
 %.debug.o %.release.o : %.cc
-	$(CCC) $(CFLAGS) -c $< -o $@
+	$(CCC) $(CXXFLAGS) -c $< -o $@
 %.debug.o %.release.o : %.cpp
-	$(CCC) $(CFLAGS) -c $< -o $@
+	$(CCC) $(CXXFLAGS) -c $< -o $@
 %.debug.pic.o %.release.pic.o : %.c
 	$(CC) $(CFLAGS) -fPIC -DPIC -c $< -o $@
 %.debug.pic.o %.release.pic.o : %.cc
-	$(CCC) $(CFLAGS) -fPIC -DPIC -c $< -o $@
+	$(CCC) $(CXXFLAGS) -fPIC -DPIC -c $< -o $@
 %.debug.pic.o %.release.pic.o : %.cpp
-	$(CCC) $(CFLAGS) -fPIC -DPIC -c $< -o $@
+	$(CCC) $(CXXFLAGS) -fPIC -DPIC -c $< -o $@
 %.debug.i %.release.i : %.c
 	$(CC) $(CFLAGS) -E $< -o $@
 %.debug.i %.release.i : %.cc
-	$(CCC) $(CFLAGS) -E $< -o $@
+	$(CCC) $(CXXFLAGS) -E $< -o $@
 %.debug.i %.release.i : %.cpp
-	$(CCC) $(CFLAGS) -E $< -o $@
+	$(CCC) $(CXXFLAGS) -E $< -o $@
 
 %.debug.o %.release.o : %.s
 ifeq ($(OS),Darwin)
diff --git a/build/config.mk b/build/config.mk
index 6416193..916c541 100644
--- a/build/config.mk
+++ b/build/config.mk
@@ -22,6 +22,8 @@
 
 USE_OGG     ?= 1
 USE_ICONV   ?= 1
+USE_LROUND  ?= 1
+USE_FSEEKO  ?= 1
 
 #
 # debug/release selection
@@ -41,11 +43,10 @@
 else
     ifeq ($(findstring MINGW,$(OS)),MINGW)
         PROC := i386 # failsafe
+        USE_ICONV := 0
         # ifeq (mingw32,$(shell gcc -dumpmachine)) # MinGW (mainline): mingw32
-        ifeq ($(findstring i686,$(shell gcc -dumpmachine)),i686) # MinGW-w64: i686-w64-mingw32
-            USE_ICONV := 0
-        else ifeq ($(findstring x86_64,$(shell gcc -dumpmachine)),x86_64) # MinGW-w64: x86_64-w64-mingw32
-            USE_ICONV := 0
+        # ifeq ($(findstring i686,$(shell gcc -dumpmachine)),i686) # MinGW-w64: i686-w64-mingw32
+        ifeq ($(findstring x86_64,$(shell gcc -dumpmachine)),x86_64) # MinGW-w64: x86_64-w64-mingw32
             PROC := x86_64
         endif
     else
@@ -82,7 +83,7 @@
 
 VERSION=\"1.3.0\"
 
-CONFIG_CFLAGS=-DHAVE_STDINT_H -DHAVE_INTTYPES_H -DHAVE_CXX_VARARRAYS -DHAVE_LANGINFO_CODESET -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
+CONFIG_CFLAGS=$(CUSTOM_CFLAGS) -DHAVE_STDINT_H -DHAVE_INTTYPES_H -DHAVE_CXX_VARARRAYS -DHAVE_LANGINFO_CODESET -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
 
 ifeq ($(OS),Darwin)
     CONFIG_CFLAGS += -DFLAC__SYS_DARWIN -arch $(PROC)
@@ -125,3 +126,11 @@
 
 OGG_INCLUDE_DIR=$(HOME)/local/include
 OGG_LIB_DIR=$(HOME)/local/lib
+
+ifneq (0,$(USE_LROUND))
+    CONFIG_CFLAGS += -DHAVE_LROUND
+endif
+
+ifneq (0,$(USE_FSEEKO))
+    CONFIG_CFLAGS += -DHAVE_FSEEKO
+endif
diff --git a/build/exe.mk b/build/exe.mk
index 8c52f8a..576c3c0 100644
--- a/build/exe.mk
+++ b/build/exe.mk
@@ -42,11 +42,14 @@
 DEBUG_PROGRAM   = $(DEBUG_BINPATH)/$(PROGRAM_NAME)
 RELEASE_PROGRAM = $(RELEASE_BINPATH)/$(PROGRAM_NAME)
 
-debug   : CFLAGS = -g -O0 -DDEBUG $(CONFIG_CFLAGS) $(DEBUG_CFLAGS) -W -Wall -Wmissing-prototypes -Wstrict-prototypes -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
-valgrind: CFLAGS = -g -O0 -DDEBUG $(CONFIG_CFLAGS) $(DEBUG_CFLAGS) -DFLAC__VALGRIND_TESTING -W -Wall -Wmissing-prototypes -Wstrict-prototypes -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
-release : CFLAGS = -O3 -fomit-frame-pointer -funroll-loops -finline-functions -DNDEBUG $(CONFIG_CFLAGS) $(RELEASE_CFLAGS) -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Winline -DFLaC__INLINE=__inline__ -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
+debug   : CFLAGS = -g -O0 -DDEBUG $(CONFIG_CFLAGS) $(DEBUG_CFLAGS) -W -Wall -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
+valgrind: CFLAGS = -g -O0 -DDEBUG $(CONFIG_CFLAGS) $(DEBUG_CFLAGS) -DFLAC__VALGRIND_TESTING -W -Wall -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
+release : CFLAGS = -O3 -fomit-frame-pointer -funroll-loops -finline-functions -DNDEBUG $(CONFIG_CFLAGS) $(RELEASE_CFLAGS) -W -Wall -Winline -DFLaC__INLINE=__inline__ -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
 
-LFLAGS  = -L$(LIBPATH)
+CFLAGS   = $(CFLAGS) -Wmissing-prototypes -Wstrict-prototypes
+CXXFLAGS = $(CFLAGS)
+
+LFLAGS   = -L$(LIBPATH)
 
 DEBUG_OBJS = $(SRCS_C:%.c=%.debug.o) $(SRCS_CC:%.cc=%.debug.o) $(SRCS_CPP:%.cpp=%.debug.o) $(SRCS_NASM:%.nasm=%.debug.o) $(SRCS_S:%.s=%.debug.o)
 RELEASE_OBJS = $(SRCS_C:%.c=%.release.o) $(SRCS_CC:%.cc=%.release.o) $(SRCS_CPP:%.cpp=%.release.o) $(SRCS_NASM:%.nasm=%.release.o) $(SRCS_S:%.s=%.release.o)
diff --git a/build/lib.mk b/build/lib.mk
index d5645b7..bb52b1a 100644
--- a/build/lib.mk
+++ b/build/lib.mk
@@ -60,11 +60,14 @@
     LINKD       = $(CC) -shared
 endif
 
-debug   : CFLAGS = -g -O0 -DDEBUG $(CONFIG_CFLAGS) $(DEBUG_CFLAGS) -W -Wall -Wmissing-prototypes -Wstrict-prototypes -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
-valgrind: CFLAGS = -g -O0 -DDEBUG $(CONFIG_CFLAGS) $(DEBUG_CFLAGS) -DFLAC__VALGRIND_TESTING -W -Wall -Wmissing-prototypes -Wstrict-prototypes -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
-release : CFLAGS = -O3 -fomit-frame-pointer -funroll-loops -finline-functions -DNDEBUG $(CONFIG_CFLAGS) $(RELEASE_CFLAGS) -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Winline -DFLaC__INLINE=__inline__ -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
+debug   : CFLAGS = -g -O0 -DDEBUG $(CONFIG_CFLAGS) $(DEBUG_CFLAGS) -W -Wall -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
+valgrind: CFLAGS = -g -O0 -DDEBUG $(CONFIG_CFLAGS) $(DEBUG_CFLAGS) -DFLAC__VALGRIND_TESTING -W -Wall -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
+release : CFLAGS = -O3 -fomit-frame-pointer -funroll-loops -finline-functions -DNDEBUG $(CONFIG_CFLAGS) $(RELEASE_CFLAGS) -W -Wall -Winline -DFLaC__INLINE=__inline__ -DVERSION=$(VERSION) $(DEFINES) $(INCLUDES)
 
-LFLAGS  = -L$(LIBPATH)
+CFLAGS   = $(CFLAGS) -Wmissing-prototypes -Wstrict-prototypes
+CXXFLAGS = $(CFLAGS)
+
+LFLAGS   = -L$(LIBPATH)
 
 DEBUG_OBJS = $(SRCS_C:%.c=%.debug.o) $(SRCS_CC:%.cc=%.debug.o) $(SRCS_CPP:%.cpp=%.debug.o) $(SRCS_NASM:%.nasm=%.debug.o) $(SRCS_S:%.s=%.debug.o)
 RELEASE_OBJS = $(SRCS_C:%.c=%.release.o) $(SRCS_CC:%.cc=%.release.o) $(SRCS_CPP:%.cpp=%.release.o) $(SRCS_NASM:%.nasm=%.release.o) $(SRCS_S:%.s=%.release.o)
diff --git a/examples/c/decode/file/Makefile.lite b/examples/c/decode/file/Makefile.lite
index 2cb32ae..e2df754 100644
--- a/examples/c/decode/file/Makefile.lite
+++ b/examples/c/decode/file/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_C = main.c
 
diff --git a/examples/c/encode/file/Makefile.lite b/examples/c/encode/file/Makefile.lite
index eb8526b..9d6efe9 100644
--- a/examples/c/encode/file/Makefile.lite
+++ b/examples/c/encode/file/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_C = main.c
 
diff --git a/examples/cpp/decode/file/Makefile.lite b/examples/cpp/decode/file/Makefile.lite
index ea6c5e2..b5bf565 100644
--- a/examples/cpp/decode/file/Makefile.lite
+++ b/examples/cpp/decode/file/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC++.a $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC++ -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lFLAC++ -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_CPP = main.cpp
 
diff --git a/examples/cpp/encode/file/Makefile.lite b/examples/cpp/encode/file/Makefile.lite
index 17238a1..a50ee1b 100644
--- a/examples/cpp/encode/file/Makefile.lite
+++ b/examples/cpp/encode/file/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC++.a $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC++ -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lFLAC++ -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_CPP = main.cpp
 
diff --git a/src/Makefile.lite b/src/Makefile.lite
index 3027e6f..72d3569 100644
--- a/src/Makefile.lite
+++ b/src/Makefile.lite
@@ -30,7 +30,11 @@
 endif
 endif
 
-.PHONY: all flac libFLAC libFLAC++ metaflac plugin_common plugin_xmms share test_grabbag test_libs_common test_libFLAC test_libFLAC++ test_seeking test_streams utils flacdiff flactimer
+ifeq ($(findstring MINGW,$(OS)),MINGW)
+    EXTRA_TARGETS += share/win_utf8_io
+endif
+
+.PHONY: all flac libFLAC libFLAC++ metaflac plugin_common plugin_xmms share/win_utf8_io share test_grabbag test_libs_common test_libFLAC test_libFLAC++ test_seeking test_streams utils flacdiff flactimer
 all: flac libFLAC libFLAC++ metaflac plugin_common $(EXTRA_TARGETS) share test_grabbag test_libs_common test_libFLAC test_libFLAC++ test_seeking test_streams utils
 
 DEFAULT_CONFIG = release
diff --git a/src/flac/Makefile.lite b/src/flac/Makefile.lite
index 5c8391a..05b947f 100644
--- a/src/flac/Makefile.lite
+++ b/src/flac/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libgrabbag.a $(libdir)/libFLAC.a $(libdir)/libreplaygain_analysis.a $(libdir)/libreplaygain_synthesis.a $(libdir)/libgetopt.a $(libdir)/libutf8.a $(OGG_EXPLICIT_LIBS) $(ICONV_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lgrabbag -lFLAC -lreplaygain_analysis -lreplaygain_synthesis -lgetopt -lutf8 -lgrabbag -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lgrabbag -lFLAC -lreplaygain_analysis -lreplaygain_synthesis -lgetopt -lutf8 -lgrabbag $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_C = \
 	analyze.c \
diff --git a/src/flac/Makefile.lite.iffscan b/src/flac/Makefile.lite.iffscan
index ab49e8c..306a5c4 100644
--- a/src/flac/Makefile.lite.iffscan
+++ b/src/flac/Makefile.lite.iffscan
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) $(ICONV_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_C = \
 	foreign_metadata.c \
diff --git a/src/libFLAC++/Makefile.lite b/src/libFLAC++/Makefile.lite
index 5149813..9418804 100644
--- a/src/libFLAC++/Makefile.lite
+++ b/src/libFLAC++/Makefile.lite
@@ -39,8 +39,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm -lstdc++
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm -lsupc++
+else
     LIBS = -lFLAC $(OGG_LIBS) -lm -lsupc++
 endif
+endif
 
 LIB_NAME = libFLAC++
 INCLUDES = -I$(topdir)/include
diff --git a/src/libFLAC/Makefile.lite b/src/libFLAC/Makefile.lite
index 6127cf3..e50a6f8 100644
--- a/src/libFLAC/Makefile.lite
+++ b/src/libFLAC/Makefile.lite
@@ -38,8 +38,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = $(OGG_LIBS) -lm
 endif
+endif
 
 LIB_NAME = libFLAC
 ifeq ($(PROC),ppc)
diff --git a/src/metaflac/Makefile.lite b/src/metaflac/Makefile.lite
index 9192384..70cf311 100644
--- a/src/metaflac/Makefile.lite
+++ b/src/metaflac/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libgrabbag.a $(libdir)/libFLAC.a $(libdir)/libreplaygain_analysis.a $(libdir)/libgetopt.a $(libdir)/libutf8.a $(OGG_EXPLICIT_LIBS) $(ICONV_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lgrabbag -lFLAC -lreplaygain_analysis -lgetopt -lutf8 -lgrabbag -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lgrabbag -lFLAC -lreplaygain_analysis -lgetopt -lutf8 -lgrabbag $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_C = \
 	main.c \
diff --git a/src/plugin_xmms/Makefile.lite b/src/plugin_xmms/Makefile.lite
index 96b1ab1..e98d805 100644
--- a/src/plugin_xmms/Makefile.lite
+++ b/src/plugin_xmms/Makefile.lite
@@ -29,8 +29,12 @@
 ifeq ($(OS),Darwin)
     LIBS = $(libdir)/libFLAC.a $(libdir)/libplugin_common.a $(libdir)/libgrabbag.a $(libdir)/libreplaygain_analysis.a $(libdir)/libreplaygain_synthesis.a $(OGG_EXPLICIT_LIBS) $(ICONV_LIBS) -lm -lstdc++ -lz
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = $(libdir)/libFLAC.a $(libdir)/libplugin_common.a $(libdir)/libgrabbag.a $(libdir)/libreplaygain_analysis.a $(libdir)/libreplaygain_synthesis.a $(libdir)/libwin_utf8_io.a $(OGG_LIBS) -lm -lsupc++ -lz
+else
     LIBS = $(libdir)/libFLAC.a $(libdir)/libplugin_common.a $(libdir)/libgrabbag.a $(libdir)/libreplaygain_analysis.a $(libdir)/libreplaygain_synthesis.a $(OGG_LIBS) -lm -lsupc++ -lz
 endif
+endif
 
 SRCS_C = \
 	charset.c \
diff --git a/src/share/Makefile.lite b/src/share/Makefile.lite
index a9b5640..61367e9 100644
--- a/src/share/Makefile.lite
+++ b/src/share/Makefile.lite
@@ -46,9 +46,13 @@
 utf8:
 	(cd $@ ; $(MAKE) -f Makefile.lite $(CONFIG))
 
+win_utf8_io:
+	(cd $@ ; $(MAKE) -f Makefile.lite $(CONFIG))
+
 clean:
 	-(cd getopt ; $(MAKE) -f Makefile.lite clean)
 	-(cd grabbag ; $(MAKE) -f Makefile.lite clean)
 	-(cd replaygain_analysis ; $(MAKE) -f Makefile.lite clean)
 	-(cd replaygain_synthesis ; $(MAKE) -f Makefile.lite clean)
 	-(cd utf8 ; $(MAKE) -f Makefile.lite clean)
+	-(cd win_utf8_io ; $(MAKE) -f Makefile.lite clean)
diff --git a/src/share/getopt/Makefile.lite b/src/share/getopt/Makefile.lite
index e36f341..b4df6ec 100644
--- a/src/share/getopt/Makefile.lite
+++ b/src/share/getopt/Makefile.lite
@@ -5,7 +5,7 @@
 topdir = ../../..
 
 LIB_NAME = libgetopt
-INCLUDES = -I$(topdir)/include -I$(topdir)/include/share
+INCLUDES = -I$(topdir)/include
 
 SRCS_C = \
 	getopt.c \
diff --git a/src/share/grabbag/Makefile.lite b/src/share/grabbag/Makefile.lite
index 81f7d5c..4eac54b 100644
--- a/src/share/grabbag/Makefile.lite
+++ b/src/share/grabbag/Makefile.lite
@@ -8,8 +8,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC.a $(libdir)/libreplaygain_analysis.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC -lreplaygain_analysis -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lFLAC -lreplaygain_analysis $(OGG_LIBS) -lm
 endif
+endif
 
 LIB_NAME = libgrabbag
 INCLUDES = -I$(topdir)/include
@@ -20,7 +24,8 @@
 	file.c \
 	picture.c \
 	replaygain.c \
-	seektable.c
+	seektable.c \
+	snprintf.c
 
 include $(topdir)/build/lib.mk
 
diff --git a/src/share/replaygain_analysis/Makefile.lite b/src/share/replaygain_analysis/Makefile.lite
index 8c4c698..4fa2cc9 100644
--- a/src/share/replaygain_analysis/Makefile.lite
+++ b/src/share/replaygain_analysis/Makefile.lite
@@ -5,7 +5,7 @@
 topdir = ../../..
 
 LIB_NAME = libreplaygain_analysis
-INCLUDES = -I$(topdir)/include/share
+INCLUDES = -I$(topdir)/include
 
 SRCS_C = \
 	replaygain_analysis.c
diff --git a/src/share/replaygain_synthesis/Makefile.lite b/src/share/replaygain_synthesis/Makefile.lite
index e58e708..a944234 100644
--- a/src/share/replaygain_synthesis/Makefile.lite
+++ b/src/share/replaygain_synthesis/Makefile.lite
@@ -5,7 +5,7 @@
 topdir = ../../..
 
 LIB_NAME = libreplaygain_synthesis
-INCLUDES = -I./include -I$(topdir)/include -I$(topdir)/include/share
+INCLUDES = -I./include -I$(topdir)/include
 
 SRCS_C = \
 	replaygain_synthesis.c
diff --git a/src/share/utf8/Makefile.lite b/src/share/utf8/Makefile.lite
index 9141735..ad50492 100644
--- a/src/share/utf8/Makefile.lite
+++ b/src/share/utf8/Makefile.lite
@@ -13,7 +13,7 @@
     LIBS = -lgrabbag $(ICONV_LIBS)
 endif
 
-INCLUDES = -I$(topdir)/include -I$(topdir)/include/share
+INCLUDES = -I$(topdir)/include
 
 SRCS_C = \
 	charset.c \
diff --git a/src/share/win_utf8_io/Makefile.lite b/src/share/win_utf8_io/Makefile.lite
new file mode 100644
index 0000000..b941b07
--- /dev/null
+++ b/src/share/win_utf8_io/Makefile.lite
@@ -0,0 +1,15 @@
+#
+# GNU makefile
+#
+
+topdir = ../../..
+
+LIB_NAME = libwin_utf8_io
+INCLUDES = -I$(topdir)/include
+
+SRCS_C = \
+	win_utf8_io.c
+
+include $(topdir)/build/lib.mk
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/src/test_grabbag/cuesheet/Makefile.lite b/src/test_grabbag/cuesheet/Makefile.lite
index df40536..15b2487 100644
--- a/src/test_grabbag/cuesheet/Makefile.lite
+++ b/src/test_grabbag/cuesheet/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libgrabbag.a $(libdir)/libreplaygain_analysis.a $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lgrabbag -lreplaygain_analysis -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lgrabbag -lreplaygain_analysis -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_C = \
 	main.c
diff --git a/src/test_grabbag/picture/Makefile.lite b/src/test_grabbag/picture/Makefile.lite
index a95fc53..e8d9ddf 100644
--- a/src/test_grabbag/picture/Makefile.lite
+++ b/src/test_grabbag/picture/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libgrabbag.a $(libdir)/libreplaygain_analysis.a $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lgrabbag -lreplaygain_analysis -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lgrabbag -lreplaygain_analysis -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_C = \
 	main.c
diff --git a/src/test_libFLAC++/Makefile.lite b/src/test_libFLAC++/Makefile.lite
index b8ea0be..a444f4a 100644
--- a/src/test_libFLAC++/Makefile.lite
+++ b/src/test_libFLAC++/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libgrabbag.a $(libdir)/libreplaygain_analysis.a $(libdir)/libtest_libs_common.a $(libdir)/libFLAC++.a $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lgrabbag -lreplaygain_analysis -ltest_libs_common -lFLAC++ -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lgrabbag -lreplaygain_analysis -ltest_libs_common -lFLAC++ -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_CPP = \
 	decoders.cpp \
diff --git a/src/test_libFLAC/Makefile.lite b/src/test_libFLAC/Makefile.lite
index 42e9dce..e7a7f29 100644
--- a/src/test_libFLAC/Makefile.lite
+++ b/src/test_libFLAC/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libgrabbag.a $(libdir)/libreplaygain_analysis.a $(libdir)/libtest_libs_common.a $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lgrabbag -lreplaygain_analysis -ltest_libs_common -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lgrabbag -lreplaygain_analysis -ltest_libs_common -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_C = \
 	bitwriter.c \
@@ -39,6 +43,7 @@
 	encoders.c \
 	format.c \
 	main.c \
+	md5.c \
 	metadata.c \
 	metadata_manip.c \
 	metadata_object.c
diff --git a/src/test_libs_common/Makefile.lite b/src/test_libs_common/Makefile.lite
index 45f932e..5c06f1d 100644
--- a/src/test_libs_common/Makefile.lite
+++ b/src/test_libs_common/Makefile.lite
@@ -28,8 +28,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 INCLUDES = -I$(topdir)/include
 
diff --git a/src/test_seeking/Makefile.lite b/src/test_seeking/Makefile.lite
index 8545863..597beda 100644
--- a/src/test_seeking/Makefile.lite
+++ b/src/test_seeking/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_C = \
 	main.c
diff --git a/src/test_streams/Makefile.lite b/src/test_streams/Makefile.lite
index e9502d0..f8234fe 100644
--- a/src/test_streams/Makefile.lite
+++ b/src/test_streams/Makefile.lite
@@ -27,7 +27,15 @@
 
 INCLUDES = -I./include -I$(topdir)/include
 
-LIBS = -lm
+ifeq ($(OS),Darwin)
+    EXPLICIT_LIBS = $(libdir)/libgrabbag.a -lm
+else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lgrabbag -lwin_utf8_io -lm
+else
+    LIBS = -lgrabbag -lm
+endif
+endif
 
 SRCS_C = \
 	main.c
diff --git a/src/utils/flacdiff/Makefile.lite b/src/utils/flacdiff/Makefile.lite
index 47a2141..4917dc2 100644
--- a/src/utils/flacdiff/Makefile.lite
+++ b/src/utils/flacdiff/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC++.a $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC++ -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lFLAC++ -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_CPP = \
 	main.cpp
diff --git a/src/utils/flactimer/Makefile.lite b/src/utils/flactimer/Makefile.lite
index 4265437..aaa4b40 100644
--- a/src/utils/flactimer/Makefile.lite
+++ b/src/utils/flactimer/Makefile.lite
@@ -30,8 +30,12 @@
 ifeq ($(OS),Darwin)
     EXPLICIT_LIBS = $(libdir)/libFLAC++.a $(libdir)/libFLAC.a $(OGG_EXPLICIT_LIBS) -lm
 else
+ifeq ($(findstring Windows,$(OS)),Windows)
+    LIBS = -lFLAC++ -lFLAC -lwin_utf8_io $(OGG_LIBS) -lm
+else
     LIBS = -lFLAC++ -lFLAC $(OGG_LIBS) -lm
 endif
+endif
 
 SRCS_CPP = \
 	main.cpp