Ryujinx-GtkSharp/NuGet/pybuild/profiles/GtkSharp_Core.py
stil 5063385d16 AppVeyor integration (#25)
* Fix minor bugs and improve code formatting of Python build tool

* Prepend $PATH to give it higher priority

* Invoke WiX tools through variable to ensure correct path

* Make build script ensure pacman dependencies are installed

* pacman -Sy causes dependency break on AppVeyor

* Skip deps version check and don't show progress bar
2017-02-05 07:07:05 +01:00

156 lines
5.8 KiB
Python

#!/usr/bin/python3
import os
import shutil
from glob import glob
from os.path import abspath, join
import vsgen
from pybuild.Helper import Helper
from pybuild.ProfileBase import ProfileBase
from pybuild.vsgenext.CoreVSProject import CoreVSProject
# Note at this stage we can't complile GtkSharp using the .Net Core platform libraries, such as netstandard1.6
# https://docs.microsoft.com/en-us/dotnet/articles/standard/library
# This is due to some small api changes in the platform that the Gtksharp code would need to be adjusted to
# We can however use the newer dotnet build system specifying the net461 platform
# This is the same set of platform libs under the surface (using mono) but a step in the right direction
# with modernising the build system. One advantage to this newer build system is that we don't need to list all the .cs files
# Within the project files (see generated .xproj file and project.json)
# TODO look into package for symbols, via NuGet -symbols
class GtkSharp_Core(ProfileBase):
def __init__(self):
"""Class Init"""
super().__init__()
self._NuGet_PackageName = 'GtkSharp.Core'
self._Version = Helper.get_gtksharp_version(self.SrcDir)
self.Solution = None
self.BuildConfig = 'Release'
@property
def Build_CoreDir(self):
return abspath(join(self._BuildDir, 'core'))
@property
def Dotnet_BuildExe(self):
return 'dotnet.exe'
def Copy_CS_Files(self, csfiles):
srclist = glob(join(self.SrcDir, csfiles[0]))
destdir = join(self.Build_CoreDir, csfiles[1])
os.makedirs(destdir, exist_ok=True)
for fname in srclist:
shutil.copy(fname, destdir)
def SetupProject(self, projname):
proj = CoreVSProject()
proj.Name = projname
proj.RootNamespace = projname
proj.FileName = join(self.Build_CoreDir, projname, projname + '.xproj')
proj.Frameworks = {'net461': {}}
proj.Depends = {}
proj.BuildOptions = {"allowUnsafe": True, "outputName": projname + "-sharp"}
proj.Version = self._Version
self.Solution.Projects.append(proj)
self.Solution.write()
return proj
def Build_Project(self, proj):
projdir = join(self.Build_CoreDir, proj.Name)
Helper.run_cmd([self.Dotnet_BuildExe, 'restore'], projdir)
Helper.run_cmd([self.Dotnet_BuildExe, 'build',
'--configuration', self.BuildConfig,
'--framework', 'net461',
'--output', join(self.Build_CoreDir, 'build')]
, projdir)
def build(self):
"""Build the gtksharp binaries for .Net 4.5"""
os.makedirs(self.Build_CoreDir, exist_ok=True)
self.Solution = vsgen.solution.VSGSolution()
self.Solution.FileName = join(self.Build_CoreDir, 'GtkSharp.sln')
# Build Glib
self.Copy_CS_Files(['glib/*.cs', 'glib/'])
proj = self.SetupProject('glib')
proj.write()
self.Build_Project(proj)
# Build Gio
self.Copy_CS_Files(['gio/*.cs', 'gio/'])
self.Copy_CS_Files(['gio/generated/GLib/*.cs', 'gio/generated/GLib/'])
proj = self.SetupProject('gio')
proj.Depends = {'glib': self._Version}
proj.write()
self.Build_Project(proj)
# Build Cairo
self.Copy_CS_Files(['cairo/*.cs', 'cairo/'])
proj = self.SetupProject('cairo')
proj.write()
self.Build_Project(proj)
# Build Pango
self.Copy_CS_Files(['pango/*.cs', 'pango/'])
self.Copy_CS_Files(['pango/generated/Pango/*.cs', 'pango/generated/Pango/'])
proj = self.SetupProject('pango')
proj.Depends = {'glib': self._Version,
'cairo': self._Version}
proj.write()
self.Build_Project(proj)
# Build Atk
self.Copy_CS_Files(['atk/*.cs', 'atk/'])
self.Copy_CS_Files(['atk/generated/Atk/*.cs', 'atk/generated/Atk/'])
proj = self.SetupProject('atk')
proj.Depends = {'glib': self._Version}
proj.write()
self.Build_Project(proj)
# Build Gdk
self.Copy_CS_Files(['gdk/*.cs', 'gdk/'])
self.Copy_CS_Files(['gdk/generated/Gdk/*.cs', 'gdk/generated/Gdk/'])
self.Copy_CS_Files(['gdk/generated/GLib/*.cs', 'gdk/generated/GLib/'])
proj = self.SetupProject('gdk')
proj.Depends = {'atk': self._Version,
'cairo': self._Version,
'gio': self._Version,
'glib': self._Version,
'pango': self._Version}
proj.write()
self.Build_Project(proj)
# Build Gtk
self.Copy_CS_Files(['gtk/*.cs', 'gtk/'])
self.Copy_CS_Files(['gtk/generated/GLib/*.cs', 'gtk/generated/GLib/'])
self.Copy_CS_Files(['gtk/generated/Gtk/*.cs', 'gtk/generated/Gtk/'])
proj = self.SetupProject('gtk')
proj.Depends = {'gdk': self._Version,
'glib': self._Version}
proj.write()
self.Build_Project(proj)
def copy_dll(self):
"""Copy the .Net 4.5 dll's to the build dir"""
net45_build_dir = join(self.Build_NugetDir, 'build', 'net45')
net45_lib_dir = join(self.Build_NugetDir, 'lib', 'net45')
os.makedirs(net45_build_dir, exist_ok=True)
os.makedirs(net45_lib_dir, exist_ok=True)
shutil.copy('./misc/GtkSharp.targets', net45_build_dir)
srclist = glob(join(self.Build_CoreDir, 'build', '*.dll'))
for item in srclist:
shutil.copy(item, net45_lib_dir)
# Get the Config files
dll_list = ['atk', 'cairo', 'gdk', 'gio', 'glib', 'gtk', 'pango']
for item in dll_list:
if item != 'cairo':
shutil.copy(join(self.SrcDir, item, item + '-sharp.dll.config'), net45_build_dir)