summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChun-wei Fan <fanchunwei@src.gnome.org>2014-02-07 18:55:32 +0800
committerChun-wei Fan <fanchunwei@src.gnome.org>2014-02-07 18:55:32 +0800
commit0b1397ad168078bf2b588ab413ad921c04aab8a2 (patch)
tree030dfd8750cd5ed46044a7bbeb90346cb8241458
parented7f9df3c09209749d0d1be0917a80ad6a4f7546 (diff)
downloadjson-glib-0b1397ad168078bf2b588ab413ad921c04aab8a2.tar.gz
MSVC Builds: Rework Introspection Files Build
Use a set of NMake Makefiles in place of custom Visual Studio Projects to generate the introspection files for JSON-GLib. Although this means that one needs to build the introspection files in two stages, namely using the projects to build the JSON-GLib DLL and then running this NMake Makefile to generate the introspection files. The original approach required setting lots of environment variables for the building of introspection files to work. Using NMake Makefiles will make it clearer to the one building the introspection files on what items and variables are needed exactly to do the job
-rw-r--r--build/win32/Makefile.am4
-rw-r--r--build/win32/detectenv_msvc.mak65
-rw-r--r--build/win32/gengir_jsonglib.bat132
-rw-r--r--build/win32/introspection-msvc.mak79
-rw-r--r--build/win32/json-glib-introspection-msvc.mak64
5 files changed, 211 insertions, 133 deletions
diff --git a/build/win32/Makefile.am b/build/win32/Makefile.am
index 75f9332..eea13ac 100644
--- a/build/win32/Makefile.am
+++ b/build/win32/Makefile.am
@@ -4,4 +4,6 @@ EXTRA_DIST = \
config.h.win32.in \
config.h.win32 \
gen-file-list-jsonglib.py \
- gengir_jsonglib.bat
+ detectenv_msvc.mak \
+ introspection-msvc.mak \
+ json-glib-introspection-msvc.mak
diff --git a/build/win32/detectenv_msvc.mak b/build/win32/detectenv_msvc.mak
new file mode 100644
index 0000000..020548a
--- /dev/null
+++ b/build/win32/detectenv_msvc.mak
@@ -0,0 +1,65 @@
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
+!if !defined(VCINSTALLDIR) && !defined(WINDOWSSDKDIR)
+MSG = ^
+This Makefile is only for Visual Studio 2008 and later.^
+You need to ensure that the Visual Studio Environment is properly set up^
+before running this Makefile.
+!error $(MSG)
+!endif
+
+ERRNUL = 2>NUL
+_HASH=^#
+
+!if ![echo VCVERSION=_MSC_VER > vercl.x] \
+ && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
+ && ![echo PLAT=Win32 >> vercl.x] \
+ && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
+ && ![echo PLAT=x64 >> vercl.x] \
+ && ![echo $(_HASH)endif >> vercl.x] \
+ && ![cl -nologo -TC -P vercl.x $(ERRNUL)]
+!include vercl.i
+!if ![echo VCVER= ^\> vercl.vc] \
+ && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
+!include vercl.vc
+!endif
+!endif
+!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]
+!endif
+
+!if $(VCVERSION) > 1499 && $(VCVERSION) < 1600
+VSVER = 9
+!elseif $(VCVERSION) > 1599 && $(VCVERSION) < 1700
+VSVER = 10
+!elseif $(VCVERSION) > 1699 && $(VCVERSION) < 1800
+VSVER = 11
+!elseif $(VCVERSION) > 1799 && $(VCVERSION) < 1900
+VSVER = 12
+!else
+VSVER = 0
+!endif
+
+!if "$(VSVER)" == "0"
+MSG = ^
+This NMake Makefile set supports Visual Studio^
+9 (2008) through 12 (2013). Your Visual Studio^
+version is not supported.
+!error $(MSG)
+!endif
+
+VALID_CFGSET = FALSE
+!if "$(CFG)" == "release" || "$(CFG)" == "debug"
+VALID_CFGSET = TRUE
+!endif
+
+!if "$(CFG)" == "release"
+CFLAGS_ADD = /MD /O2
+!else
+CFLAGS_ADD = /MDd /Od /Zi
+!endif
+
+!if "$(PLAT)" == "x64"
+LDFLAGS_ARCH = /machine:x64
+!else
+LDFLAGS_ARCH = /machine:x86
+!endif
diff --git a/build/win32/gengir_jsonglib.bat b/build/win32/gengir_jsonglib.bat
deleted file mode 100644
index ec70dc2..0000000
--- a/build/win32/gengir_jsonglib.bat
+++ /dev/null
@@ -1,132 +0,0 @@
-@echo off
-
-setlocal EnableDelayedExpansion
-
-rem Needed environmental variables:
-rem PLAT: Windows platform-Win32 (i.e. x86) or x64 (i.e. x86-64)
-rem CONF: Configuration Type, Release or Debug
-rem VSVER: Visual C++ version used [9, 10 or 11]
-rem BASEDIR: Where the dependent libraries/headers are located
-rem PKG_CONFIG_PATH: Where the GLib and its dependent pkg-config .pc files can be found
-rem MINGWDIR: Installation path of MINGW GCC, so gcc.exe can be found in %MINGWDIR%\bin.
-
-rem Note that the Python executable/installation and all the runtime dependencies of the
-rem library/libraries need to be in your PATH or %BASEBIN%\bin.
-
-rem Check the environemental variables...
-if /i "%PLAT%" == "Win32" goto PLAT_OK
-if /i "%PLAT%" == "x64" goto PLAT_OK
-if /i "%PLAT%" == "x86" (
- set PLAT=Win32
- goto PLAT_OK
-)
-if /i "%PLAT%" == "x86-64" (
- set PLAT=x64
- goto PLAT_OK
-)
-goto ERR_PLAT
-
-:PLAT_OK
-if "%VSVER%" == "9" goto VSVER_OK
-if "%VSVER%" == "10" goto VSVER_OK
-if "%VSVER%" == "11" goto VSVER_OK
-goto ERR_VSVER
-:VSVER_OK
-if /i "%CONF%" == "Release" goto CONF_OK
-if /i "%CONF%" == "Debug" goto CONF_OK
-goto ERR_CONF
-:CONF_OK
-if "%BASEDIR%" == "" goto ERR_BASEDIR
-if not exist %BASEDIR% goto ERR_BASEDIR
-
-if "%PKG_CONFIG_PATH%" == "" goto ERR_PKGCONFIG
-if not exist %PKG_CONFIG_PATH%\gobject-2.0.pc goto ERR_PKGCONFIG
-
-if "%MINGWDIR%" == "" goto ERR_MINGWDIR
-if not exist %MINGWDIR%\bin\gcc.exe goto ERR_MINGWDIR
-
-set CC=cl
-set BINDIR=%CD%\vs%VSVER%\%CONF%\%PLAT%\bin
-set INCLUDE=%BASEDIR%\include\glib-2.0;%BASEDIR%\lib\glib-2.0\include;%INCLUDE%
-set LIB=%BINDIR%;%BASEDIR%\lib;%LIB%
-set PATH=%BINDIR%;%BASEDIR%\bin;%PATH%;%MINGWDIR%\bin
-set PYTHONPATH=%BASEDIR%\lib\gobject-introspection;%BINDIR%
-
-echo Setup .bat and filelist for generating Json-1.0.gir...
-
-call python gen-file-list-jsonglib.py
-
-rem ===============================================================================
-rem Begin setup of json_gir.bat to create Json-1.0.gir
-rem (The ^^ is necessary to span the command to multiple lines on Windows cmd.exe!)
-rem ===============================================================================
-
-echo echo Generating Json-1.0.gir...> json_gir.bat
-echo @echo off>> json_gir.bat
-echo.>> json_gir.bat
-
-echo copy /b %BINDIR%\json-glib-1.0.lib %BINDIR%\json-1.0.lib>> json_gir.bat
-echo.>> json_gir.bat
-rem ================================================================
-rem Setup the command line flags to g-ir-scanner for Json-1.0.gir...
-rem ================================================================
-echo python %BASEDIR%\bin\g-ir-scanner --verbose -I..\.. ^^>> json_gir.bat
-echo -I%BASEDIR%\include\glib-2.0 -I%BASEDIR%\lib\glib-2.0\include ^^>> json_gir.bat
-echo --namespace=Json --nsversion=1.0 ^^>> json_gir.bat
-echo --include=GObject-2.0 --include=Gio-2.0 ^^>> json_gir.bat
-echo --no-libtool --library=json-glib-1-vs%VSVER% ^^>> json_gir.bat
-echo --reparse-validate --add-include-path=%BASEDIR%\share\gir-1.0 --add-include-path=. ^^>> json_gir.bat
-echo --warn-all --pkg-export json-glib-1.0 --c-include "json-glib/json-glib.h" ^^>> json_gir.bat
-echo -I..\.. -DJSON_COMPILATION=1 -DG_LOG_DOMAIN=\"Json\" ^^>> json_gir.bat
-echo --filelist=json_list ^^>> json_gir.bat
-echo -o Json-1.0.gir>> json_gir.bat
-echo.>> json_gir.bat
-
-echo del %BINDIR%\json-1.0.lib>> json_gir.bat
-echo.>> json_gir.bat
-
-echo Completed setup of .bat for generating Json-1.0.gir.
-echo.>> json_gir.bat
-
-rem =======================
-rem Now generate the .gir's
-rem =======================
-CALL json_gir.bat
-
-rem Clean up the .bat and filelist for generating the .gir files...
-del json_gir.bat
-del json_list
-
-rem Now compile the generated .gir files
-%BASEDIR%\bin\g-ir-compiler --includedir=. --debug --verbose Json-1.0.gir -o Json-1.0.typelib
-
-rem Copy the generated .girs and .typelibs to their appropriate places
-
-mkdir ..\..\build\win32\vs%VSVER%\%CONF%\%PLAT%\share\gir-1.0
-move /y *.gir %BASEDIR%\share\gir-1.0\
-
-mkdir ..\..\build\win32\vs%VSVER%\%CONF%\%PLAT%\lib\girepository-1.0
-move /y *.typelib %BASEDIR%\lib\girepository-1.0\
-
-goto DONE
-
-:ERR_PLAT
-echo You need to specify a valid Platform [set PLAT=Win32 or PLAT=x64]
-goto DONE
-:ERR_VSVER
-echo You need to specify your Visual Studio version [set VSVER=9 or VSVER=10 or VSVER=11]
-goto DONE
-:ERR_CONF
-echo You need to specify a valid Configuration [set CONF=Release or CONF=Debug]
-goto DONE
-:ERR_BASEDIR
-echo You need to specify a valid BASEDIR.
-goto DONE
-:ERR_PKGCONFIG
-echo You need to specify a valid PKG_CONFIG_PATH
-goto DONE
-:ERR_MINGWDIR
-echo You need to specify a valid MINGWDIR, where a valid gcc installation can be found.
-goto DONE
-:DONE
-
diff --git a/build/win32/introspection-msvc.mak b/build/win32/introspection-msvc.mak
new file mode 100644
index 0000000..d637cc7
--- /dev/null
+++ b/build/win32/introspection-msvc.mak
@@ -0,0 +1,79 @@
+# Common Utility NMake Makefile Template
+# Used to Generate Introspection files for various Projects
+
+# Can Override with env vars as needed
+# You will need to have built gobject-introspection for this to work.
+# Change or pass in or set the following to suit your environment
+
+BASEDIR = ..\..\..\vs$(VSVER)\$(PLAT)
+GIR_SUBDIR = share\gir-1.0
+GIR_TYPELIBDIR = lib\girepository-1.0
+G_IR_SCANNER = $(BASEDIR)\bin\g-ir-scanner
+G_IR_COMPILER = $(BASEDIR)\bin\g-ir-compiler.exe
+G_IR_INCLUDEDIR = $(BASEDIR)\$(GIR_SUBDIR)
+G_IR_TYPELIBDIR = $(BASEDIR)\$(GIR_TYPELIBDIR)
+
+# Note: The PYTHON2 must be a Python 2.6.x or 2.7.x Interpretor!
+# Either having python.exe from Python 2.6.x/2.7.x in your PATH will work
+# or passing in PYTHON2=<full path to your Python 2.6.x/2.7.x interpretor> will do
+
+# This is required, and gobject-introspection needs to be built
+# before this can be successfully run.
+PYTHON2=python
+
+# Don't change anything following this line!
+VALID_PKG_CONFIG_PATH = FALSE
+VALID_GCC_INSTPATH = FALSE
+
+MSG_INVALID_PKGCONFIG = You must set or specifiy a valid PKG_CONFIG_PATH
+MSG_INVALID_MINGWDIR = You must set or specifiy a valid MINGWDIR, where gcc.exe can be found in %MINGWDIR%\bin
+MSG_INVALID_CFG = You need to specify or set CFG to be release or debug to use this Makefile to build the Introspection Files
+
+ERROR_MSG =
+
+BUILD_INTROSPECTION = TRUE
+
+!if ![pkg-config --print-errors --errors-to-stdout $(CHECK_PACKAGE) > pkgconfig.x] \
+ && ![setlocal] \
+ && ![set file="pkgconfig.x"] \
+ && ![FOR %A IN (%file%) DO @echo PKG_CHECK_SIZE=%~zA > pkgconfig.chksize] \
+ && ![del $(ERRNUL) /q/f pkgconfig.x]
+!endif
+
+!include pkgconfig.chksize
+!if "$(PKG_CHECK_SIZE)" == "0"
+VALID_PKG_CONFIG_PATH = TRUE
+!else
+VALID_PKG_CONFIG_PATH = FALSE
+!endif
+
+!if ![IF EXIST %MINGWDIR%\bin\gcc.exe @echo VALID_GCC_INSTPATH=TRUE > gcccheck.x]
+!endif
+
+!if ![IF NOT EXIST %MINGWDIR%\bin\gcc.exe @echo VALID_GCC_INSTPATH=FALSE > gcccheck.x]
+!endif
+
+!include gcccheck.x
+
+!if ![del $(ERRNUL) /q/f pkgconfig.chksize gcccheck.x]
+!endif
+
+VALID_CFGSET = FALSE
+!if "$(CFG)" == "release" || "$(CFG)" == "debug"
+VALID_CFGSET = TRUE
+!endif
+
+!if "$(VALID_GCC_INSTPATH)" != "TRUE"
+BUILD_INTROSPECTION = FALSE
+ERROR_MSG = $(MSG_INVALID_MINGWDIR)
+!endif
+
+!if "$(VALID_PKG_CONFIG_PATH)" != "TRUE"
+BUILD_INTROSPECTION = FALSE
+ERROR_MSG = $(MSG_INVALID_PKGCONFIG)
+!endif
+
+!if "$(VALID_CFGSET)" != "TRUE"
+BUILD_INTROSPECTION = FALSE
+ERROR_MSG = $(MSG_INVALID_CFG)
+!endif
diff --git a/build/win32/json-glib-introspection-msvc.mak b/build/win32/json-glib-introspection-msvc.mak
new file mode 100644
index 0000000..f638272
--- /dev/null
+++ b/build/win32/json-glib-introspection-msvc.mak
@@ -0,0 +1,64 @@
+# NMake Makefile to build Introspection Files for ATK
+
+# Change or pass in as a variable/env var if needed
+JSONGLIB_DLLNAME = json-glib-1-vs$(VSVER)
+
+# Please do not change anything after this line
+
+!include detectenv_msvc.mak
+
+APIVERSION = 1.0
+
+CHECK_PACKAGE = gio-2.0
+
+!include introspection-msvc.mak
+
+!if "$(BUILD_INTROSPECTION)" == "TRUE"
+all: setgirbuildnev Json-$(APIVERSION).gir Json-$(APIVERSION).typelib
+
+json_list:
+ @-echo Generating Filelist to Introspect for JSON-GLib...
+ $(PYTHON2) gen-file-list-jsonglib.py
+
+vs$(VSVER)\$(CFG)\$(PLAT)\bin\Json-$(APIVERSION).lib:
+ @-echo Copying Json-1.0.lib from json-glib-1.0.lib
+ @-copy /b vs$(VSVER)\$(CFG)\$(PLAT)\bin\json-glib-$(APIVERSION).lib vs$(VSVER)\$(CFG)\$(PLAT)\bin\Json-$(APIVERSION).lib
+
+setgirbuildnev:
+ @set CC=$(CC)
+ @set PYTHONPATH=$(BASEDIR)\lib\gobject-introspection
+ @set PATH=vs$(VSVER)\$(CFG)\$(PLAT)\bin;$(BASEDIR)\bin;$(PATH);$(MINGWDIR)\bin
+ @set PKG_CONFIG_PATH=$(PKG_CONFIG_PATH)
+ @set LIB=vs$(VSVER)\$(CFG)\$(PLAT)\bin;$(LIB)
+
+Json-$(APIVERSION).gir: json_list vs$(VSVER)\$(CFG)\$(PLAT)\bin\Json-$(APIVERSION).lib
+ @-echo Generating Json-$(APIVERSION).gir...
+ $(PYTHON2) $(G_IR_SCANNER) --verbose -I..\.. \
+ -I$(BASEDIR)\include\glib-2.0 -I$(BASEDIR)\lib\glib-2.0\include \
+ --namespace=Json --nsversion=$(APIVERSION) \
+ --include=GObject-2.0 --include=Gio-2.0 \
+ --no-libtool --library=$(JSONGLIB_DLLNAME) \
+ --reparse-validate --add-include-path=$(BASEDIR)\share\gir-1.0 --add-include-path=. \
+ --warn-all --pkg-export json-glib-$(APIVERSION) --c-include "json-glib/json-glib.h" \
+ -DJSON_COMPILATION=1 -DG_LOG_DOMAIN=\"Json\" \
+ --filelist=json_list -o $@
+
+Json-$(APIVERSION).typelib: Json-$(APIVERSION).gir
+ @-echo Compiling Json-$(APIVERSION).typelib...
+ $(G_IR_COMPILER) --includedir=. --debug --verbose Json-$(APIVERSION).gir -o Json-$(APIVERSION).typelib
+
+install-introspection: setgirbuildnev Json-$(APIVERSION).gir Json-$(APIVERSION).typelib
+ @-copy Json-$(APIVERSION).gir $(G_IR_INCLUDEDIR)
+ @-copy /b Json-$(APIVERSION).typelib $(G_IR_TYPELIBDIR)
+
+!else
+all:
+ @-echo $(ERROR_MSG)
+!endif
+
+clean:
+ @-del /f/q Json-$(APIVERSION).typelib
+ @-del /f/q Json-$(APIVERSION).gir
+ @-del /f/q vs$(VSVER)\$(CFG)\$(PLAT)\bin\Json-$(APIVERSION).lib
+ @-del /f/q json_list
+ @-del /f/q *.pyc