summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am3
-rw-r--r--README.msvc80
2 files changed, 82 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am
index 0108c0a8..31d69188 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -58,7 +58,8 @@ EXTRA_DIST += \
misc/pyflakes.py \
misc/update-glib-annotations.py \
misc/update-gtkdoc-tests.py \
- misc/verbump.py
+ misc/verbump.py \
+ README.msvc
# Default pep8.py --exclude + emacs backup files
PEP8_EXCLUDES=--exclude='.svn,CVS,.bzr,.hg,.git,__pycache__,.\#*'
diff --git a/README.msvc b/README.msvc
new file mode 100644
index 00000000..a72fe1dc
--- /dev/null
+++ b/README.msvc
@@ -0,0 +1,80 @@
+Building GObject-Introspection (G-I) on Windows using Visual Studio
+===================================================================
+Building G-I on Windows with Visual Studio is now supported via the use
+of the Meson build system, the Visual Studio 2008~2017 projects have been
+dropped from the distribution. This README.msvc file will outline the
+steps of performing such a build on Visual Studio 2008~2017.
+
+You will need the following, in addition to your Visual Studio installation:
+-A Python installation that matches the build configuration that you are
+ planning to build. That is, you need the 32-bit Python installation for
+ building 32-bit builds of G-I and the 64-bit (amd64) Python installation
+ for building x64/x86_64/amd64 builds of G-I. You need at least the version
+ that is required for Meson, which is 3.4.x at the time of writing. You will
+ then need to install Meson using the pip tool.
+
+-The Ninja build tool, which is optional on Visual Studio 2010, 2015 and 2017
+ builds (if one chooses to generate Visual Studio projects with Meson), but is
+ required for 2008, 2012 and 2013 builds.
+
+-GIT for Windows is recommended, as Meson will download using GIT the sources
+ of libraries that it depends on, if they cannot be found (such as GLib, please
+ see below)
+
+-A recent enough version of GLib, preferably built with the same compiler that
+ is now being used to build G-I. If none is found, the Meson build will fetch
+ GLib from GIT master and build it first before continuing to build G-I. Note
+ that it will require a libintl implementation (must be installed beforehand, the
+ headers and lib and DLL must be found in the paths specified by %INCLUDE, %LIB%
+ and %PATH% respectively), along with ZLib and libffi (GLib's own Meson build will
+ build them if they are not found). If a pre-existing copy of GLib is available,
+ be sure to set PKG_CONFIG_PATH to where its .pc files can be found, and ensure
+ that its DLLs/ executables can be first found in the paths specified in %PATH%.
+ Note that libffi is needed both by GLib and G-I.
+
+-A DLL build of Cairo with Cairo-GObject built, also preferably with the same
+ compiler that is now used to build G-I.
+
+-A recent version of winflex/flex and Bison. They can be obtained via MSYS/MSYS64
+ or Cygwin installations. Either the 32-bit or 64-bit version will work, as long
+ as they run on your system.
+
+Set PATH to contain your Python-3.4.x+ interpreter, Ninja build tool (if needed) and
+winflex/flex and Bison executables towards its end.
+
+Note that if you plan to use g-ir-scanner for other packages built using Meson, you
+need to use the same Python release series (3.4, 3.5...) for running Meson there as
+well.
+
+Open a Visual Studio command prompt and create an empty build directory (which needs
+to be on the same drive as the G-I sources). In that directory, run the following:
+
+python $(PythonInstallationPath)\scripts\meson.py $(G-I_srcdir) --buildtype=<build_configuration> --prefix=$(PREFIX) -Dcairo-libname=<DLL filename of cairo-gobject>
+
+When Meson completes configuring and generating the build files, proceed building
+using Ninja or the generated Visual Studio projects.
+
+Additional notes for building with Visual Studio 2008 only
+==========================================================
+Due to its use of security manifests, after Meson completes configuring and
+generating the build files, first build the giscanner\_giscanner.pyd target
+using 'ninja giscanner\_giscanner.pyd'. After doing so, embed the manifest
+using the following command:
+
+mt /manifest giscanner\_giscanner.pyd.manifest /outputresource:giscanner\_giscanner.pyd;2
+
+The .gir files cannot be successfully generated without this step.
+
+On x64 builds, building girepository\girepository-1.0-1.dll may hang during compilation.
+If this happens, terminate all 'cl.exe' processes, which will terminate the build process.
+Open build.ninja and change the compiler flags by changing /O2 to /O1 for all the sources
+that hang during compilation. At this time of writing, girepository\girwriter.c,
+girepository\girparser.c and girepository\girnode.c are affected--this is due to an issue
+in Visual Studio 2008's x64 compiler in regards to optimization. Re-attempt the build, and
+the build should complete normally. This does not affect Win32/x86 builds.
+
+On all Visual Studio 2008 builds, after successfully completing/installing the build, run
+the following so that we ensure the manifests are embedded to the built DLLs and EXEs:
+
+for /r %f in (*.dll.manifest) do if exist $(PREFIX)\bin\%~nf mt /manifest %f /outputresource:$(PREFIX)\bin\%~nf;2
+for /r %f in (*.exe.manifest) do if exist $(PREFIX)\bin\%~nf mt /manifest %f /outputresource:$(PREFIX)\bin\%~nf;1