MSVC Builds: Generate glib-mkenums If Possible

As glib-mkenums would likely be used in the building of the other
components of the stack, such as Cogl, Clutter and
gsettings-desktop-schemas, generate that using a Python script (if Python
can be found) and "install" it.
This commit is contained in:
Chun-wei Fan 2014-08-08 17:39:22 +08:00
parent 3e2735f468
commit 3d89041220
12 changed files with 167 additions and 56 deletions

View File

@ -7,4 +7,5 @@ SUBDIRS = \
EXTRA_DIST = \
make.msc \
module.defs
module.defs \
process_in_win32.py

View File

@ -0,0 +1,77 @@
#!/usr/bin/python
# vim: encoding=utf-8
#expand *.in scripts for MSVC Builds
import os
import sys
import re
import string
import argparse
def get_version(srcroot):
ver = {}
RE_VERSION = re.compile(r'^m4_define\(\[(glib_\w+)\],\s*\[(\d+)\]\)')
with open(os.path.join(srcroot, 'configure.ac'), 'r') as ac:
for i in ac:
mo = RE_VERSION.search(i)
if mo:
ver[mo.group(1).upper()] = int(mo.group(2))
ver['GLIB_BINARY_AGE'] = 100 * ver['GLIB_MINOR_VERSION'] + ver['GLIB_MICRO_VERSION']
ver['GLIB_VERSION'] = '%d.%d.%d' % (ver['GLIB_MAJOR_VERSION'],
ver['GLIB_MINOR_VERSION'],
ver['GLIB_MICRO_VERSION'])
ver['LT_RELEASE'] = '%d.%d' % (ver['GLIB_MAJOR_VERSION'], ver['GLIB_MINOR_VERSION'])
ver['LT_CURRENT'] = 100 * ver['GLIB_MINOR_VERSION'] + ver['GLIB_MICRO_VERSION'] - ver['GLIB_INTERFACE_AGE']
ver['LT_REVISION'] = ver['GLIB_INTERFACE_AGE']
ver['LT_AGE'] = ver['GLIB_BINARY_AGE'] - ver['GLIB_INTERFACE_AGE']
ver['LT_CURRENT_MINUS_AGE'] = ver['LT_CURRENT'] - ver['LT_AGE']
return ver
def process_in(src, dest, vars):
RE_VARS = re.compile(r'@(\w+?)@')
with open(src, 'r') as s:
with open(dest, 'w') as d:
for i in s:
i = RE_VARS.sub(lambda x: str(vars[x.group(1)]), i)
d.write(i)
def get_srcroot():
if not os.path.isabs(__file__):
path = os.path.abspath(__file__)
else:
path = __file__
dirname = os.path.dirname(path)
return os.path.abspath(os.path.join(dirname, '..', '..'))
def main(argv):
prog_desc = 'Create Various autogenerated Win32-specific Source Files'
parser = argparse.ArgumentParser(description=prog_desc)
parser.add_argument('--glib-mkenums', dest='mkenums', action='store_const',
const=1,
help='Generate glib-mkenums')
parser.add_argument('--perl', dest='perl', metavar='PATH',
default='C:\\Perl\\bin\\perl.exe',
action='store',
help='path to the perl interpretor (default: C:\\Perl\\bin\\perl.exe)')
args = parser.parse_args()
srcroot = get_srcroot()
ver = get_version(srcroot)
no_args = True
if args.mkenums is not None:
# Generate glib-mkenums script from glib-mkenums
ver.update({'PERL_PATH': args.perl})
target = os.path.join(srcroot, 'gobject', 'glib-mkenums')
process_in(target + '.in',
target,
ver)
no_args = False
if no_args is True:
raise SystemExit('Action argument required. Please see %s --help for details.' % __file__)
if __name__ == '__main__':
sys.exit(main(sys.argv))

View File

@ -9,32 +9,7 @@ import string
import subprocess
import optparse
def get_version(srcroot):
ver = {}
RE_VERSION = re.compile(r'^m4_define\(\[(glib_\w+)\],\s*\[(\d+)\]\)')
with open(os.path.join(srcroot, 'configure.ac'), 'r') as ac:
for i in ac:
mo = RE_VERSION.search(i)
if mo:
ver[mo.group(1).upper()] = int(mo.group(2))
ver['GLIB_BINARY_AGE'] = 100 * ver['GLIB_MINOR_VERSION'] + ver['GLIB_MICRO_VERSION']
ver['GLIB_VERSION'] = '%d.%d.%d' % (ver['GLIB_MAJOR_VERSION'],
ver['GLIB_MINOR_VERSION'],
ver['GLIB_MICRO_VERSION'])
ver['LT_RELEASE'] = '%d.%d' % (ver['GLIB_MAJOR_VERSION'], ver['GLIB_MINOR_VERSION'])
ver['LT_CURRENT'] = 100 * ver['GLIB_MINOR_VERSION'] + ver['GLIB_MICRO_VERSION'] - ver['GLIB_INTERFACE_AGE']
ver['LT_REVISION'] = ver['GLIB_INTERFACE_AGE']
ver['LT_AGE'] = ver['GLIB_BINARY_AGE'] - ver['GLIB_INTERFACE_AGE']
ver['LT_CURRENT_MINUS_AGE'] = ver['LT_CURRENT'] - ver['LT_AGE']
return ver
def process_in(src, dest, vars):
RE_VARS = re.compile(r'@(\w+?)@')
with open(src, 'r') as s:
with open(dest, 'w') as d:
for i in s:
i = RE_VARS.sub(lambda x: str(vars[x.group(1)]), i)
d.write(i)
from process_in_win32 import get_version, process_in, get_srcroot
def process_include(src, dest, includes):
RE_INCLUDE = re.compile(r'^\s*#include\s+"(.*)"')
@ -233,13 +208,7 @@ def main(argv):
parser = optparse.OptionParser()
parser.add_option('-p', '--perl', dest='perl', metavar='PATH', default='C:\\Perl\\bin\\perl.exe', action='store', help='path to the perl interpretor (default: C:\\Perl\\bin\\perl.exe)')
opt, args = parser.parse_args(argv)
def parent_dir(path):
if not os.path.isabs(path):
path = os.path.abspath(path)
if os.path.isfile(path):
path = os.path.dirname(path)
return os.path.split(path)[0]
srcroot = parent_dir(parent_dir(__file__))
srcroot = get_srcroot()
#print 'srcroot', srcroot
ver = get_version(srcroot)
#print 'ver', ver

View File

@ -8,6 +8,7 @@
<GenGLibConfigH>copy ..\..\..\glib\glibconfig.h.win32 ..\..\..\glib\glibconfig.h</GenGLibConfigH>
<GenGModuleConfH>copy ..\..\..\gmodule\gmoduleconf.h.win32 ..\..\..\gmodule\gmoduleconf.h</GenGModuleConfH>
<GenGNetworkingH>copy ..\..\..\gio\gnetworking.h.win32 ..\..\..\gio\gnetworking.h</GenGNetworkingH>
<GenGLibMKEnums>if exist $(PythonPath)\python.exe $(PythonPath)\python.exe ..\process_in_win32.py --glib-mkenums</GenGLibMKEnums>
</PropertyGroup>
<PropertyGroup>
<_PropertySheetDisplayName>glibgensrcsprops</_PropertySheetDisplayName>
@ -25,5 +26,8 @@
<BuildMacro Include="GenGNetworkingH">
<Value>$(GenGNetworkingH)</Value>
</BuildMacro>
<BuildMacro Include="GenGLibMKEnums">
<Value>$(GenGLibMKEnums)</Value>
</BuildMacro>
</ItemGroup>
</Project>

View File

@ -34,6 +34,8 @@ copy $(BinDir)\gdbus.exe $(CopyDir)\bin
copy ..\..\..\gio\gdbus-2.0\codegen\gdbus-codegen.in $(CopyDir)\bin\gdbus-codegen
if exist ..\..\..\gobject\glib-mkenums copy ..\..\..\gobject\glib-mkenums $(CopyDir)\bin
mkdir $(CopyDir)\include\glib-$(ApiVersion)\glib\deprecated

View File

@ -11,6 +11,7 @@
<GlibSeparateVSDllSuffix>-2-vs$(VSVer)</GlibSeparateVSDllSuffix>
<GlibDllPrefix>$(GlibSeparateVSDllPrefix)</GlibDllPrefix>
<GlibDllSuffix>$(GlibSeparateVSDllSuffix)</GlibDllSuffix>
<PythonPath>c:\python27</PythonPath>
</PropertyGroup>
<PropertyGroup>
<_PropertySheetDisplayName>glibversionpathsprops</_PropertySheetDisplayName>
@ -46,5 +47,8 @@
<BuildMacro Include="GlibDllSuffix">
<Value>$(GlibDllSuffix)</Value>
</BuildMacro>
<BuildMacro Include="PythonPath">
<Value>$(PythonPath)</Value>
</BuildMacro>
</ItemGroup>
</Project>

View File

@ -17,9 +17,12 @@
<ItemGroup>
#include "libgobject.vs10.sourcefiles.filters"
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\gobject\glib-mkenums.in"><Filter>Resource Files</Filter></CustomBuild>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\gobject\gobject.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>
</Project>

View File

@ -51,19 +51,19 @@
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="glib-build-defines.props" />
<Import Project="glib-gen-srcs.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="glib-build-defines.props" />
<Import Project="glib-gen-srcs.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="glib-build-defines.props" />
<Import Project="glib-gen-srcs.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="glib-build-defines.props" />
<Import Project="glib-gen-srcs.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
@ -175,6 +175,22 @@
<ItemGroup>
#include "libgobject.vs10.sourcefiles"
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\gobject\glib-mkenums.in">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating glib-mkenums...</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(GenGLibMKEnums)</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\gobject\glib-mkenums;%(Outputs)</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating glib-mkenums...</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(GenGLibMKEnums)</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\gobject\glib-mkenums;%(Outputs)</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating glib-mkenums...</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(GenGLibMKEnums)</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\gobject\glib-mkenums;%(Outputs)</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating glib-mkenums...</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(GenGLibMKEnums)</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\gobject\glib-mkenums;%(Outputs)</Outputs>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\..\gobject\gobject.rc" />
</ItemGroup>
@ -191,4 +207,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>

View File

@ -7,26 +7,22 @@
>
<UserMacro
Name="GenConfigH"
Value="
copy ..\..\..\config.h.win32 ..\..\..\config.h
"
Value="copy ..\..\..\config.h.win32 ..\..\..\config.h"
/>
<UserMacro
Name="GenGLibConfigH"
Value="
copy ..\..\..\glib\glibconfig.h.win32 ..\..\..\glib\glibconfig.h
"
Value="copy ..\..\..\glib\glibconfig.h.win32 ..\..\..\glib\glibconfig.h"
/>
<UserMacro
Name="GenGModuleConfH"
Value="
copy ..\..\..\gmodule\gmoduleconf.h.win32 ..\..\..\gmodule\gmoduleconf.h
"
Value="copy ..\..\..\gmodule\gmoduleconf.h.win32 ..\..\..\gmodule\gmoduleconf.h"
/>
<UserMacro
Name="GenGNetworkingH"
Value="
copy ..\..\..\gio\gnetworking.h.win32 ..\..\..\gio\gnetworking.h
"
Value="copy ..\..\..\gio\gnetworking.h.win32 ..\..\..\gio\gnetworking.h"
/>
<UserMacro
Name="GenGLibMKEnums"
Value="if exist $(PythonPath)\python.exe $(PythonPath)\python.exe ..\process_in_win32.py --glib-mkenums"
/>
</VisualStudioPropertySheet>

View File

@ -20,6 +20,7 @@ copy $(SolutionDir)$(ConfigurationName)\$(PlatformName)\bin\gresource.exe $(Copy
copy $(SolutionDir)$(ConfigurationName)\$(PlatformName)\bin\gio-querymodules.exe $(CopyDir)\bin&#x0D;&#x0A;
copy $(SolutionDir)$(ConfigurationName)\$(PlatformName)\bin\gdbus.exe $(CopyDir)\bin&#x0D;&#x0A;
copy ..\..\..\gio\gdbus-2.0\codegen\gdbus-codegen.in $(CopyDir)\bin\gdbus-codegen&#x0D;&#x0A;
if exist ..\..\..\gobject\glib-mkenums copy ..\..\..\gobject\glib-mkenums $(CopyDir)\bin&#x0D;&#x0A;
mkdir $(CopyDir)\include\glib-$(ApiVersion)\glib\deprecated&#x0D;&#x0A;
mkdir $(CopyDir)\include\glib-$(ApiVersion)\gobject&#x0D;&#x0A;

View File

@ -46,4 +46,8 @@
Name="GlibDllSuffix"
Value="$(GlibSeparateVSDllSuffix)"
/>
<UserMacro
Name="PythonPath"
Value="c:\python27"
/>
</VisualStudioPropertySheet>

View File

@ -21,7 +21,7 @@
<Configurations>
<Configuration
Name="Debug|Win32"
InheritedPropertySheets=".\glib-build-defines.vsprops"
InheritedPropertySheets=".\glib-gen-srcs.vsprops"
ConfigurationType="2"
CharacterSet="2"
>
@ -51,7 +51,7 @@
</Configuration>
<Configuration
Name="Release|Win32"
InheritedPropertySheets=".\glib-build-defines.vsprops"
InheritedPropertySheets=".\glib-gen-srcs.vsprops"
ConfigurationType="2"
CharacterSet="2"
WholeProgramOptimization="1"
@ -83,7 +83,7 @@
</Configuration>
<Configuration
Name="Debug|x64"
InheritedPropertySheets=".\glib-build-defines.vsprops"
InheritedPropertySheets=".\glib-gen-srcs.vsprops"
ConfigurationType="2"
CharacterSet="2"
>
@ -113,7 +113,7 @@
</Configuration>
<Configuration
Name="Release|x64"
InheritedPropertySheets=".\glib-build-defines.vsprops"
InheritedPropertySheets=".\glib-gen-srcs.vsprops"
ConfigurationType="2"
CharacterSet="2"
WholeProgramOptimization="1"
@ -165,6 +165,40 @@
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File RelativePath="..\..\..\gobject\glib-mkenums.in">
<FileConfiguration Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating glib-mkenums..."
CommandLine="$(GenGLibMKEnums)"
Outputs="..\..\..\gobject\glib-mkenums"
/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating glib-mkenums..."
CommandLine="$(GenGLibMKEnums)"
Outputs="..\..\..\gobject\glib-mkenums"
/>
</FileConfiguration>
<FileConfiguration Name="Debug|x64">
<Tool
Name="VCCustomBuildTool"
Description="Generating glib-mkenums..."
CommandLine="$(GenGLibMKEnums)"
Outputs="..\..\..\gobject\glib-mkenums"
/>
</FileConfiguration>
<FileConfiguration Name="Release|x64">
<Tool
Name="VCCustomBuildTool"
Description="Generating glib-mkenums..."
CommandLine="$(GenGLibMKEnums)"
Outputs="..\..\..\gobject\glib-mkenums"
/>
</FileConfiguration>
</File>
<File RelativePath="..\..\..\gobject\gobject.rc" />
</Filter>
</Files>