--- ../makefile.vc	2015-07-01 08:59:16.000000000 +0200
+++ makefile.vc	2018-10-10 00:14:40.795608000 +0200
@@ -2,7 +2,9 @@
 #
 # NMAKE Makefile to build libspatialite on Windows
 #
-!INCLUDE nmake.opt
+
+OPTFLAGS =	/nologo /Ox /fp:precise /W3 /MD /D_CRT_SECURE_NO_WARNINGS \
+		/DDLL_EXPORT /DDLLEXPORT= /DYY_NO_UNISTD_H /DTARGET_CPU=\"$(TARGET_CPU)\"
 
 LIBOBJ = src\gaiaaux\gg_sqlaux.obj src\gaiaaux\gg_utf8.obj \
 	src\gaiaexif\gaia_exif.obj src\gaiageo\gg_advanced.obj \
@@ -15,17 +17,19 @@
 	src\gaiageo\gg_wkb.obj src\gaiageo\gg_wkt.obj \
 	src\gaiageo\gg_extras.obj src\gaiageo\gg_xml.obj \
 	src\gaiageo\gg_voronoj.obj src\gaiageo\gg_matrix.obj \
-	src\gaiageo\gg_relations_ext.obj src/connection_cache/alloc_cache.obj \
+	src\gaiageo\gg_relations_ext.obj src\gaiageo\gg_lwgeom.obj \
+	src\connection_cache\alloc_cache.obj \
 	src\spatialite\mbrcache.obj src\shapefiles\shapefiles.obj \
-	src\spatialite\spatialite.obj src\spatialite\virtualdbf.obj \
+	src\spatialite\virtualdbf.obj \
 	src\spatialite\virtualfdo.obj src\spatialite\virtualnetwork.obj \
 	src\spatialite\virtualshape.obj src\spatialite\virtualspatialindex.obj \
 	src\spatialite\statistics.obj src\spatialite\metatables.obj \
 	src\spatialite\virtualXL.obj src\spatialite\extra_tables.obj \
 	src\spatialite\virtualxpath.obj src\spatialite\virtualbbox.obj \
-	src\spatialite\spatialite_init.obj src\spatialite\se_helpers.obj \
+	src\spatialite\se_helpers.obj \
 	src\spatialite\srid_aux.obj src\spatialite\table_cloner.obj \
 	src\spatialite\virtualelementary.obj \
+	src\spatialite\virtualgpkg.obj \
 	src\wfs\wfs_in.obj src\srsinit\srs_init.obj \
 	src\dxf\dxf_parser.obj src\dxf\dxf_loader.obj src\dxf\dxf_writer.obj \
 	src\dxf\dxf_load_distinct.obj src\dxf\dxf_load_mixed.obj \
@@ -56,31 +60,61 @@
 	src\srsinit\epsg_inlined_46.obj src\srsinit\epsg_inlined_extra.obj \
 	src\srsinit\epsg_inlined_prussian.obj \
 	src\srsinit\epsg_inlined_wgs84_00.obj src\srsinit\epsg_inlined_wgs84_01.obj \
-	src\versioninfo\version.obj src\virtualtext\virtualtext.obj
-SPATIALITE_DLL = spatialite$(VERSION).dll
+	src\versioninfo\version.obj src\virtualtext\virtualtext.obj \
+	src\geopackage\gaia_cvt_gpkg.obj \
+	src\geopackage\gpkg_add_geometry_triggers.obj \
+	src\geopackage\gpkg_add_spatial_index.obj \
+	src\geopackage\gpkg_add_tile_triggers.obj \
+	src\geopackage\gpkg_get_normal_row.obj \
+	src\geopackage\gpkg_get_normal_zoom.obj \
+	src\geopackage\gpkgAddGeometryColumn.obj \
+	src\geopackage\gpkgBinary.obj \
+	src\geopackage\gpkgCreateBaseTables.obj \
+	src\geopackage\gpkgCreateTilesTable.obj \
+	src\geopackage\gpkgCreateTilesZoomLevel.obj \
+	src\geopackage\gpkgGetImageType.obj \
+	src\geopackage\gpkgInsertEpsgSRID.obj \
+	src\geopackage\gpkgMakePoint.obj
+
+SPATIALITE_DLL = spatialite.dll
 
-CFLAGS = /nologo -I.\src\headers -I. -IC:\OSGeo4W\include $(OPTFLAGS)
+CFLAGS = /nologo -I.\src\headers -I. -I$(OSGEO4W_ROOT)\include $(OPTFLAGS) -Iosgeo4w -I$(OSGEO4W_ROOT)/include/libxml2
 
 default:	all
 
-all: spatialite.lib spatialite_i.lib
+all: spatialite.lib spatialite.dll mod_spatialite.dll
+
 #$(EXIF_LOADER_EXE)
 
-spatialite.lib:	$(LIBOBJ)
+spatialite.lib:	$(LIBOBJ) src\spatialite\spatialite.obj src\spatialite\spatialite_init.obj
 	if exist spatialite.lib del spatialite.lib
-	lib /out:spatialite.lib $(LIBOBJ)
+	lib /out:spatialite.lib $**
 
-$(SPATIALITE_DLL):	spatialite_i.lib
+spatialite.dll: $(LIBOBJ) src\spatialite\spatialite.obj src\spatialite\spatialite_init.obj
+	link /dll /out:$@ \
+		/implib:$*_i.lib $** \
+		$(OSGEO4W_ROOT)\lib\proj_i.lib $(OSGEO4W_ROOT)\lib\geos_c.lib \
+		$(OSGEO4W_ROOT)\lib\freexl_i.lib $(OSGEO4W_ROOT)\lib\iconv.lib \
+		$(OSGEO4W_ROOT)\lib\sqlite3_i.lib $(OSGEO4W_ROOT)\lib\zlib.lib \
+		$(OSGEO4W_ROOT)\lib\libxml2.lib $(OSGEO4W_ROOT)\lib\lwgeom_i.lib \
+		/NODEFAULTLIB:CMT
+	if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;2
 
-spatialite_i.lib:     $(LIBOBJ)
-	link /debug /dll /out:$(SPATIALITE_DLL) \
-		/implib:spatialite_i.lib $(LIBOBJ) \
-		C:\OSGeo4W\lib\proj_i.lib C:\OSGeo4W\lib\geos_c.lib \
-		C:\OSGeo4w\lib\freexl_i.lib C:\OSGeo4w\lib\iconv.lib \
-		C:\OSGeo4W\lib\sqlite3_i.lib C:\OSGeo4W\lib\zlib.lib \
-		C:\OSGeo4W\lib\libxml2.lib
-	if exist $(SPATIALITE_DLL).manifest mt -manifest \
-		$(SPATIALITE_DLL).manifest -outputresource:$(SPATIALITE_DLL);2
+src\spatialite\mod_spatialite.obj: src\spatialite\spatialite_init.c
+	$(CC) $(CFLAGS) /DLOADABLE_EXTENSION /c $** /Fo$@
+	
+src\spatialite\mod_spatialite_init.obj: src\spatialite\spatialite.c
+	$(CC) $(CFLAGS) /DLOADABLE_EXTENSION /c $** /Fo$@
+
+mod_spatialite.dll: $(LIBOBJ) src\spatialite\mod_spatialite.obj src\spatialite\mod_spatialite_init.obj
+	link /dll /out:$@ \
+		$** \
+		$(OSGEO4W_ROOT)\lib\proj_i.lib $(OSGEO4W_ROOT)\lib\geos_c.lib \
+		$(OSGEO4W_ROOT)\lib\freexl_i.lib $(OSGEO4W_ROOT)\lib\iconv.lib \
+		$(OSGEO4W_ROOT)\lib\sqlite3_i.lib $(OSGEO4W_ROOT)\lib\zlib.lib \
+		$(OSGEO4W_ROOT)\lib\libxml2.lib $(OSGEO4W_ROOT)\lib\lwgeom_i.lib \
+		/NODEFAULTLIB:CMT
+	if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;2
 		
 .c.obj:
 	$(CC) $(CFLAGS) /c $*.c /Fo$@
@@ -100,6 +134,9 @@
 	del src\wfs\*.obj
 	del src\dxf\*.obj
 	del src\md5\*.obj
+	del src\connection_cache\*.obj
+	del src\shapefiles\*.obj
+	del src\geopackage\*.obj
 	del *.pdb
 
 install: all
@@ -109,7 +146,6 @@
 	-mkdir $(INSTDIR)\include
 	-mkdir $(INSTDIR)\include\spatialite
 	copy *.dll $(INSTDIR)\bin
-	copy *.lib $(INSTDIR)\lib
+	copy spatialite*.lib $(INSTDIR)\lib
 	copy src\headers\spatialite.h $(INSTDIR)\include
 	copy src\headers\spatialite\*.h $(INSTDIR)\include\spatialite
-	
--- ../config-msvc.h	2015-07-01 08:59:16.000000000 +0200
+++ config-msvc.h	2018-10-10 00:14:52.321418600 +0200
@@ -9,13 +9,13 @@
 /* #undef ENABLE_GCP */
 
 /* Should be defined in order to enable GeoPackage support. */
-/* #undef ENABLE_GEOPACKAGE */
+#define ENABLE_GEOPACKAGE
 
 /* Should be defined in order to enable LIBXML2 support. */
 #define ENABLE_LIBXML2 1
 
 /* Should be defined in order to enable LWGEOM support. */
-/* #undef ENABLE_LWGEOM */
+#define ENABLE_LWGEOM 1
 
 /* Should be defined in order to enable GEOS_ADVANCED support. */
 #define GEOS_ADVANCED 1
@@ -57,7 +57,7 @@
 #define HAVE_INTTYPES_H 1
 
 /* Define to 1 if you have the <liblwgeom.h> header file. */
-/* #undef HAVE_LIBLWGEOM_H */
+#define HAVE_LIBLWGEOM_H 1
 
 /* Define to 1 if you have the `sqlite3' library (-lsqlite3). */
 #define HAVE_LIBSQLITE3 1
@@ -190,7 +190,7 @@
 #define PACKAGE_NAME "libspatialite"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libspatialite 4.3.0-RC1"
+#define PACKAGE_STRING "libspatialite 4.3.0"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "libspatialite"
@@ -202,13 +202,13 @@
 #define PACKAGE_VERSION "4.3.0"
 
 /* Should be defined when linking liblwgeom from PostGIS 2.1 (or later). */
-/* #undefine POSTGIS_2_1 */
+#define POSTGIS_2_1 1
 
 /* Define to 1 if you have the ANSI C header files. */
 #define STDC_HEADERS 1
 
 /* Should contain a text-string describing the intended target CPU */
-#define TARGET_CPU "Win32"
+/*#define TARGET_CPU "Win32"*/
 
 /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
 #define TIME_WITH_SYS_TIME 1
@@ -217,7 +217,7 @@
 /* #undef TM_IN_SYS_TIME */
 
 /* Version number of package */
-#define VERSION "4.3.0-RC1"
+#define VERSION "4.3.0"
 
 /* Must be =64 in order to enable huge-file support. */
 #define _FILE_OFFSET_BITS 64
@@ -240,3 +240,7 @@
 /* Define to empty if the keyword `volatile' does not work. Warning: valid
    code using `volatile' can become incorrect without. Disable with care. */
 /* #undef volatile */
+
+#define __attribute__(x)
+#define strcasecmp _stricmp
+#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
--- ../src/gaiageo/gg_extras.c	2015-07-01 08:59:16.000000000 +0200
+++ src/gaiageo/gg_extras.c	2018-10-10 00:41:12.275617800 +0200
@@ -59,14 +59,6 @@
 #include <spatialite/sqlite.h>
 #include <spatialite/gaiageo.h>
 
-#if defined(_WIN32) && !defined(__MINGW32__)
-static double
-rint (double x)
-{
-    return floor (x + 0.5);
-}
-#endif
-
 static void
 auxGridSnapPoint (int dimension_model, gaiaPointPtr pt, gaiaGeomCollPtr result,
 		  double origin_x, double origin_y, double origin_z,
--- ../src/gaiageo/gg_lwgeom.c	2015-07-01 08:59:16.000000000 +0200
+++ src/gaiageo/gg_lwgeom.c	2018-10-10 01:12:23.125807700 +0200
@@ -75,6 +75,32 @@
 
 #include <liblwgeom.h>
 
+#ifdef _MSC_VER
+#include <stdio.h>
+
+int lw_vasprintf(char **strp, const char *fmt, va_list ap)
+{
+    int len = _vscprintf(fmt, ap);
+    if (len == -1)
+        return -1;
+
+    size_t size = (size_t) len + 1;
+
+    char *str = malloc(size);
+    if (!str)
+        return -1;
+
+    int r = vsprintf(str, fmt, ap);
+    if (r == -1) {
+        free(str);
+        return -1;
+    }
+
+    *strp = str;
+    return r;
+}
+#endif
+
 /* GLOBAL variables */
 char *gaia_lwgeom_error_msg = NULL;
 char *gaia_lwgeom_warning_msg = NULL;
