mirror of
				https://github.com/Ryujinx/GtkSharp.git
				synced 2025-11-04 13:04:53 +00:00 
			
		
		
		
	Merge pull request #19 from ASoftTech/master
Pull request for a few different changes
This commit is contained in:
		
						commit
						048ebea24b
					
				| 
						 | 
				
			
			@ -25,7 +25,7 @@ pacman -S mingw-w64-x86_64-pango mingw-w64-x86_64-atk mingw-w64-x86_64-gtk3
 | 
			
		|||
 | 
			
		||||
And installed the executor python module
 | 
			
		||||
```
 | 
			
		||||
C:\Python35\Scripts\pip.exe install executor
 | 
			
		||||
C:\Python35\Scripts\pip.exe install executor yattag vsgen
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Running Build
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ sudo apt-get install libglib2.0-dev libpango1.0-dev libatk1.0-dev libgtk-3-dev
 | 
			
		|||
 | 
			
		||||
Then install the executor python module
 | 
			
		||||
```
 | 
			
		||||
pip3 install executor
 | 
			
		||||
pip3 install executor yattag vsgen
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The version of Nuget needs to be the latest for linux
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,20 @@
 | 
			
		|||
#!/usr/bin/python3
 | 
			
		||||
"""Script to build out the .Net dll's and package them into a Nuget Package for gtksharp3"""
 | 
			
		||||
import os, sys
 | 
			
		||||
from pybuild.GtkSharp_Builder import GtkSharp_Builder
 | 
			
		||||
from pybuild.Gtk_Builder import Gtk_Builder
 | 
			
		||||
from pybuild.Helper import Helper as helpers
 | 
			
		||||
from pybuild.profiles.GtkSharp import GtkSharp
 | 
			
		||||
from pybuild.profiles.GtkSharp_Core import GtkSharp_Core
 | 
			
		||||
from pybuild.profiles.Glue_Win32 import Glue_Win32
 | 
			
		||||
from pybuild.profiles.Glue_Win64 import Glue_Win64
 | 
			
		||||
from pybuild.profiles.Gtk_Win32 import Gtk_Win32
 | 
			
		||||
from pybuild.profiles.Gtk_Win64 import Gtk_Win64
 | 
			
		||||
 | 
			
		||||
# Ideally I'd like to see the GtkSharp Build system redone via .Net Core or something other than make
 | 
			
		||||
# Ideally I'd like to see the GtkSharp Build system redone via the build system of .Net core (dotnet cli tool)
 | 
			
		||||
# and using Scons / Cuppa for the glue libraries
 | 
			
		||||
# For now though we rely on the use of make to build the .Net dll's
 | 
			
		||||
# under linux we run this natively, under windows we can use MSYS2
 | 
			
		||||
 | 
			
		||||
class Build(object):
 | 
			
		||||
 | 
			
		||||
    # Class Init
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        self.GtkSharp_Builder = GtkSharp_Builder()
 | 
			
		||||
        self.Gtk_Builder = Gtk_Builder()
 | 
			
		||||
 | 
			
		||||
    # Clean the Build directory
 | 
			
		||||
    def clean(self):
 | 
			
		||||
        """Clean the build dir"""
 | 
			
		||||
| 
						 | 
				
			
			@ -26,34 +25,62 @@ class Build(object):
 | 
			
		|||
    def usage(self):
 | 
			
		||||
        print ("Please use GtkSharp3_Build.py <target> where <target> is one of")
 | 
			
		||||
        print ("  clean                 to clean the output directory: ./build")
 | 
			
		||||
        print ("  gtksharp_net45        to build ,Net libs for GtkSharp, via .Net 4.5")
 | 
			
		||||
        print ("  gtksharp_nuget_net45  to build Nuget Packages for GtkSharp, via .Net 4.5")
 | 
			
		||||
        print ("  gtk_nuget_win32       to build the Nuget package for GtkSharp.Win32")
 | 
			
		||||
        print ("  gtk_nuget_win64     to build the Nuget package for GtkSharp.Win64")
 | 
			
		||||
        print ("  all                 to make all")
 | 
			
		||||
 | 
			
		||||
        print ("  gtksharp              to build .Net libs for GtkSharp, via .Net 4.5")
 | 
			
		||||
        print ("  gtksharp_core         to build .Net libs for GtkSharp, via .Net 4.5 using the dotnet cli tool")
 | 
			
		||||
 | 
			
		||||
        print ("  gtk_win32             to build the Nuget package for GtkSharp.Win32")
 | 
			
		||||
        print ("  gtk_win64             to build the Nuget package for GtkSharp.Win64")
 | 
			
		||||
        print ("  all                   to make all")
 | 
			
		||||
 | 
			
		||||
    def main(self):
 | 
			
		||||
        if len(sys.argv) != 2:
 | 
			
		||||
            self.usage()
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        if sys.argv[1] == "gtksharp_net45":
 | 
			
		||||
            self.GtkSharp_Builder.build_net45()
 | 
			
		||||
        if sys.argv[1] == "gtksharp_nuget_net45":
 | 
			
		||||
            self.GtkSharp_Builder.build_nuget_net45()
 | 
			
		||||
        if sys.argv[1] == "gtk_nuget_win32":
 | 
			
		||||
            self.Gtk_Builder.build_nuget_win32()
 | 
			
		||||
        if sys.argv[1] == "gtk_nuget_win64":
 | 
			
		||||
            self.Gtk_Builder.build_nuget_win64()
 | 
			
		||||
        if sys.argv[1] == 'all':
 | 
			
		||||
            self.runbuild('gtksharp')
 | 
			
		||||
            self.runbuild('gtk_win32')
 | 
			
		||||
            self.runbuild('gtk_win64')
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        if sys.argv[1] == "all":
 | 
			
		||||
            self.GtkSharp_Builder.build_net45()
 | 
			
		||||
            self.GtkSharp_Builder.build_nuget_net45()
 | 
			
		||||
            self.Gtk_Builder.build_nuget_win32()
 | 
			
		||||
            self.Gtk_Builder.build_nuget_win64()
 | 
			
		||||
        self.runbuild(sys.argv[1])
 | 
			
		||||
 | 
			
		||||
        if sys.argv[1] == "clean":
 | 
			
		||||
 | 
			
		||||
    def runbuild(self, build_type):
 | 
			
		||||
        
 | 
			
		||||
        if build_type == 'clean':
 | 
			
		||||
            self.clean()
 | 
			
		||||
 | 
			
		||||
        elif build_type == 'gtksharp':
 | 
			
		||||
            profile = GtkSharp()
 | 
			
		||||
            profile.clean()
 | 
			
		||||
            profile.build()
 | 
			
		||||
            profile.copy()
 | 
			
		||||
            profile.build_nuget()
 | 
			
		||||
 | 
			
		||||
        elif build_type == 'gtksharp_core':
 | 
			
		||||
            profile = GtkSharp_Core()
 | 
			
		||||
            profile.clean()
 | 
			
		||||
            profile.build()
 | 
			
		||||
            profile.copy_dll()
 | 
			
		||||
            profile.build_nuget()
 | 
			
		||||
 | 
			
		||||
        elif build_type == 'gtk_win32':
 | 
			
		||||
            profile_glue = Glue_Win32()
 | 
			
		||||
            profile_glue.clean()
 | 
			
		||||
            profile_glue.build()
 | 
			
		||||
            profile_gtk = Gtk_Win32()
 | 
			
		||||
            profile_gtk.build()
 | 
			
		||||
            profile_gtk.build_nuget()
 | 
			
		||||
 | 
			
		||||
        elif build_type == 'gtk_win64':
 | 
			
		||||
            profile_glue = Glue_Win64()
 | 
			
		||||
            profile_glue.clean()
 | 
			
		||||
            profile_glue.build()
 | 
			
		||||
            profile = Gtk_Win64()
 | 
			
		||||
            profile.build()
 | 
			
		||||
            profile.build_nuget()
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    Build().main()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
  <metadata>
 | 
			
		||||
    <id>GBD.GtkSharp</id>
 | 
			
		||||
    <version>3.22.0</version>
 | 
			
		||||
    <authors>Ric Westell</authors>
 | 
			
		||||
    <authors>Grbd</authors>
 | 
			
		||||
    <owners>grbd</owners>
 | 
			
		||||
    <licenseUrl>https://github.com/mono/gtk-sharp/blob/master/COPYING</licenseUrl>
 | 
			
		||||
    <projectUrl>https://github.com/mono/gtk-sharp</projectUrl>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,85 +0,0 @@
 | 
			
		|||
#! python3
 | 
			
		||||
import os, shutil
 | 
			
		||||
from pybuild.Settings import Settings
 | 
			
		||||
from pybuild.Helper import Helper as helpers
 | 
			
		||||
from os.path import join
 | 
			
		||||
from xml.etree import ElementTree as et
 | 
			
		||||
 | 
			
		||||
class GtkSharp_Builder(object):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        """Class Init"""
 | 
			
		||||
        self.setts = Settings()
 | 
			
		||||
 | 
			
		||||
    def clean(self):
 | 
			
		||||
        """Clean the build dir"""
 | 
			
		||||
        helpers.emptydir('./build')
 | 
			
		||||
        print ("Clean finished")
 | 
			
		||||
 | 
			
		||||
    def build_net45(self):
 | 
			
		||||
        """Build the gtksharp binaries for .Net 4.5"""
 | 
			
		||||
        self.clean()
 | 
			
		||||
        os.makedirs(self.setts.BuildDir, exist_ok=True)
 | 
			
		||||
        buildfile = join(self.setts.BuildDir, 'net45_build.sh')
 | 
			
		||||
 | 
			
		||||
        # run script via MSYS for windows, or shell for linux
 | 
			
		||||
        if os.name == 'nt':
 | 
			
		||||
            print("Building .Net GtkSharp using MSYS2")
 | 
			
		||||
            with open(buildfile, 'w') as f:
 | 
			
		||||
                f.write('PATH=$PATH:/c/Program\ Files\ \(x86\)/Microsoft\ SDKs/Windows/v10.0A/bin/NETFX\ 4.6\ Tools/\n')
 | 
			
		||||
                f.write('PATH=$PATH:/c/Windows/Microsoft.NET/Framework/v4.0.30319/\n')
 | 
			
		||||
                f.write('cd ' + helpers.winpath_to_msyspath(self.setts.SrcDir + '\n'))
 | 
			
		||||
                f.write('./autogen.sh --prefix=/tmp/install\n')
 | 
			
		||||
                f.write('make clean\n')
 | 
			
		||||
                f.write('make\n')
 | 
			
		||||
            cmds = [join(self.setts.msys2path, 'usr\\bin\\bash.exe'), '--login', buildfile]
 | 
			
		||||
            cmd = helpers.run_cmd(cmds, self.setts.SrcDir)
 | 
			
		||||
 | 
			
		||||
        else:
 | 
			
		||||
            print("Building using Linux shell")
 | 
			
		||||
            with open(buildfile, 'w') as f:
 | 
			
		||||
                f.write('cd ' + self.setts.SrcDir + '\n')
 | 
			
		||||
                f.write('./autogen.sh --prefix=/tmp/install\n')
 | 
			
		||||
                f.write('make clean\n')
 | 
			
		||||
                f.write('make\n')
 | 
			
		||||
            cmds = [self.setts.bashpath, buildfile]
 | 
			
		||||
            cmd = helpers.run_cmd(cmds, self.setts.SrcDir)
 | 
			
		||||
 | 
			
		||||
    def build_nuget_net45(self):
 | 
			
		||||
        """Package up a nuget file based on the default build"""
 | 
			
		||||
        self.clean()
 | 
			
		||||
        net45_build_dir = join(self.setts.BuildDir, 'build', 'net45')
 | 
			
		||||
        net45_lib_dir = join(self.setts.BuildDir, 'lib', 'net45')
 | 
			
		||||
        GtkVersion = helpers.get_gtksharp_version(self.setts.SrcDir)
 | 
			
		||||
 | 
			
		||||
        os.makedirs(self.setts.BuildDir, exist_ok=True)
 | 
			
		||||
        os.makedirs(net45_build_dir, exist_ok=True)
 | 
			
		||||
        os.makedirs(net45_lib_dir, exist_ok=True)
 | 
			
		||||
 | 
			
		||||
        print ('Copying Files')
 | 
			
		||||
        shutil.copy('./misc/GtkSharp.nuspec', self.setts.BuildDir)
 | 
			
		||||
        shutil.copy('./misc/GtkSharp.targets', net45_build_dir)
 | 
			
		||||
 | 
			
		||||
        dll_list = ['atk', 'cairo', 'gdk', 'gio', 'glib', 'gtk', 'pango']
 | 
			
		||||
        for item in dll_list:
 | 
			
		||||
            shutil.copy(join(self.setts.SrcDir, item, item + "-sharp.dll"), net45_lib_dir)
 | 
			
		||||
            if item != 'cairo':
 | 
			
		||||
                shutil.copy(join(self.setts.SrcDir, item, item + '-sharp.dll.config'), net45_build_dir)
 | 
			
		||||
  
 | 
			
		||||
        # Edit the XML version / package name in the .nuspec file
 | 
			
		||||
        nuspecfile = join(self.setts.BuildDir, 'GtkSharp.nuspec')
 | 
			
		||||
        et.register_namespace('', 'http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd')
 | 
			
		||||
        tree = et.parse(nuspecfile)
 | 
			
		||||
        xmlns = {'nuspec': '{http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd}'}
 | 
			
		||||
        tree.find('.//{nuspec}version'.format(**xmlns)).text = GtkVersion
 | 
			
		||||
        tree.find('.//{nuspec}id'.format(**xmlns)).text = self.setts.Gtksharp_PackageName
 | 
			
		||||
        tree.write(nuspecfile)
 | 
			
		||||
 | 
			
		||||
        # Run Nuget
 | 
			
		||||
        helpers.run_cmd([self.setts.NuGetExe, 'pack', 'GtkSharp.nuspec'], self.setts.BuildDir)
 | 
			
		||||
 | 
			
		||||
        nugetfile = join(self.setts.BuildDir, self.setts.Gtksharp_PackageName + '.' + GtkVersion + '.nupkg')
 | 
			
		||||
        os.makedirs(self.setts.NugetPkgs, exist_ok=True)
 | 
			
		||||
        shutil.copy(nugetfile, self.setts.NugetPkgs)
 | 
			
		||||
 | 
			
		||||
        print ('Generation of Nuget package complete')
 | 
			
		||||
| 
						 | 
				
			
			@ -1,77 +0,0 @@
 | 
			
		|||
#! python3
 | 
			
		||||
import os, shutil
 | 
			
		||||
from pybuild.Settings import Settings
 | 
			
		||||
from pybuild.Helper import Helper as helpers
 | 
			
		||||
from os.path import join
 | 
			
		||||
from xml.etree import ElementTree as et
 | 
			
		||||
 | 
			
		||||
# This script assumes the gtk libraries have already been installed via MSYS2 / MinGW32 / MinGW64
 | 
			
		||||
 | 
			
		||||
class Gtk_Builder(object):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        """Class Init"""
 | 
			
		||||
        self.setts = Settings()
 | 
			
		||||
 | 
			
		||||
    def clean(self):
 | 
			
		||||
        """Clean the build dir"""
 | 
			
		||||
        helpers.emptydir('./build')
 | 
			
		||||
        print ("Clean finished")
 | 
			
		||||
 | 
			
		||||
    def build_nuget_win32(self):
 | 
			
		||||
        self.build_nuget('Win32')
 | 
			
		||||
 | 
			
		||||
    def build_nuget_win64(self):
 | 
			
		||||
        self.build_nuget('Win64')
 | 
			
		||||
 | 
			
		||||
    def build_nuget(self, arch):
 | 
			
		||||
        """Package up a nuget file based on the default build"""
 | 
			
		||||
 | 
			
		||||
        if os.name != 'nt':
 | 
			
		||||
           print("Skipping Native Nuget package build, as this needs to be run on Windows")
 | 
			
		||||
           return
 | 
			
		||||
 | 
			
		||||
        self.clean()
 | 
			
		||||
        net45_build_dir = join(self.setts.BuildDir, 'build', 'net45')
 | 
			
		||||
        if arch == 'Win32':
 | 
			
		||||
            mingwdir = self.setts.mingwin32path
 | 
			
		||||
        else:
 | 
			
		||||
            mingwdir = self.setts.mingwin64path
 | 
			
		||||
 | 
			
		||||
        os.makedirs(self.setts.BuildDir, exist_ok=True)
 | 
			
		||||
        os.makedirs(net45_build_dir, exist_ok=True)
 | 
			
		||||
 | 
			
		||||
        print ('Copying Files')
 | 
			
		||||
        shutil.copy('./misc/GtkSharp.nuspec', self.setts.BuildDir)
 | 
			
		||||
        shutil.copy('./misc/GtkSharp.Native.targets', join(net45_build_dir, 'GtkSharp.' + arch + '.targets'))
 | 
			
		||||
 | 
			
		||||
        # Copy dlls
 | 
			
		||||
        dll_list = []
 | 
			
		||||
        dll_list += self.setts.get_native_win_dlls()
 | 
			
		||||
        dll_list += self.setts.get_native_win_deps()
 | 
			
		||||
 | 
			
		||||
        for item in dll_list:
 | 
			
		||||
            src = join(mingwdir, item)
 | 
			
		||||
            helpers.copy_files(src, net45_build_dir)
 | 
			
		||||
 | 
			
		||||
        # Get version
 | 
			
		||||
        GtkVersion = helpers.get_gtk_version(self.setts.msys2path)
 | 
			
		||||
 | 
			
		||||
        # Edit the XML version / package name in the .nuspec file
 | 
			
		||||
        nuspecfile = join(self.setts.BuildDir, 'GtkSharp.nuspec')
 | 
			
		||||
        et.register_namespace('', 'http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd')
 | 
			
		||||
        tree = et.parse(nuspecfile)
 | 
			
		||||
        xmlns = {'nuspec': '{http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd}'}
 | 
			
		||||
        tree.find('.//{nuspec}version'.format(**xmlns)).text = GtkVersion
 | 
			
		||||
        tree.find('.//{nuspec}id'.format(**xmlns)).text = self.setts.Gtksharp_PackageName + '.' + arch
 | 
			
		||||
        tree.write(nuspecfile)
 | 
			
		||||
 | 
			
		||||
        # Run Nuget
 | 
			
		||||
        helpers.run_cmd([self.setts.NuGetExe, 'pack', 'GtkSharp.nuspec'], self.setts.BuildDir)
 | 
			
		||||
 | 
			
		||||
        nugetfile = join(self.setts.BuildDir, self.setts.Gtksharp_PackageName + '.' + arch + '.' + GtkVersion + '.nupkg')
 | 
			
		||||
        os.makedirs(self.setts.NugetPkgs, exist_ok=True)
 | 
			
		||||
        shutil.copy(nugetfile, self.setts.NugetPkgs)
 | 
			
		||||
 | 
			
		||||
        print ('Generation of Nuget package complete')
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
#! python3
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
"""Helper Functions"""
 | 
			
		||||
 | 
			
		||||
import os, subprocess, shutil, sys
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ class Helper(object):
 | 
			
		|||
                   break
 | 
			
		||||
       return ret
 | 
			
		||||
 | 
			
		||||
    def get_gtk_version(msyspath):
 | 
			
		||||
    def get_gtk_version_msys(msyspath):
 | 
			
		||||
        ret = ''
 | 
			
		||||
        pacman_path = join(msyspath, 'usr\\bin\\pacman.exe')
 | 
			
		||||
        # pull version from msys2 / pacman
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +72,3 @@ class Helper(object):
 | 
			
		|||
                    ret = ret[:-2]
 | 
			
		||||
                break
 | 
			
		||||
        return ret
 | 
			
		||||
 | 
			
		||||
    def copy_files(src_glob, dst_folder):
 | 
			
		||||
        for fname in iglob(src_glob):
 | 
			
		||||
            shutil.copy(fname, join(dst_folder, ntpath.basename(fname)))
 | 
			
		||||
							
								
								
									
										87
									
								
								NuGet/pybuild/ProfileBase.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								NuGet/pybuild/ProfileBase.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,87 @@
 | 
			
		|||
#!/usr/bin/python3
 | 
			
		||||
"""Base class for Settings profiles"""
 | 
			
		||||
 | 
			
		||||
import os, shutil
 | 
			
		||||
from os.path import abspath, join
 | 
			
		||||
from xml.etree import ElementTree as et
 | 
			
		||||
from pybuild.Helper import Helper
 | 
			
		||||
 | 
			
		||||
class ProfileBase(object):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        """Class Init"""
 | 
			
		||||
        self._NuGetPath = 'nuget.exe'
 | 
			
		||||
        self._SrcDir = '../'
 | 
			
		||||
        self._BuildDir = './build'
 | 
			
		||||
        self._PackageDestination = './nupkg'
 | 
			
		||||
        self._NuGet_PackageName = ''
 | 
			
		||||
        self._MsysPath = 'C:\\msys64'
 | 
			
		||||
        self._LinuxBashPath = '/bin/bash'
 | 
			
		||||
        self._Version = '0.0.0'
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def NuGetPath(self):
 | 
			
		||||
        return self._NuGetPath
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def SrcDir(self):
 | 
			
		||||
        return abspath(self._SrcDir)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def BuildDir(self):
 | 
			
		||||
        return abspath(self._BuildDir)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def Build_NugetDir(self):
 | 
			
		||||
        return abspath(join(self._BuildDir, 'nuget'))
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def PackageDestination(self):
 | 
			
		||||
        return abspath(self._PackageDestination)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def NuGet_PackageName(self):
 | 
			
		||||
        return self._NuGet_PackageName
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def MsysPath(self):
 | 
			
		||||
        return abspath(self._MsysPath)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def LinuxBashPath(self):
 | 
			
		||||
        return abspath(self._LinuxBashPath)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def Version(self):
 | 
			
		||||
        return self._Version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def clean(self):
 | 
			
		||||
        """Clean the build dir"""
 | 
			
		||||
        Helper.emptydir('./build')
 | 
			
		||||
        print ("Clean finished")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def build_nuget(self):
 | 
			
		||||
        """Package up a nuget file based on the default build"""
 | 
			
		||||
 | 
			
		||||
        # Copy Nuget Spec file
 | 
			
		||||
        shutil.copy('./misc/GtkSharp.nuspec', self.Build_NugetDir)
 | 
			
		||||
 | 
			
		||||
        # Edit the XML version / package name in the .nuspec file
 | 
			
		||||
        nuspecfile = join(self.Build_NugetDir, 'GtkSharp.nuspec')
 | 
			
		||||
        et.register_namespace('', 'http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd')
 | 
			
		||||
        tree = et.parse(nuspecfile)
 | 
			
		||||
        xmlns = {'nuspec': '{http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd}'}
 | 
			
		||||
        tree.find('.//{nuspec}version'.format(**xmlns)).text = self.Version
 | 
			
		||||
        tree.find('.//{nuspec}id'.format(**xmlns)).text = self.NuGet_PackageName
 | 
			
		||||
        tree.write(nuspecfile)
 | 
			
		||||
 | 
			
		||||
        # Run Nuget
 | 
			
		||||
        Helper.run_cmd([self.NuGetPath, 'pack', 'GtkSharp.nuspec'], self.Build_NugetDir)
 | 
			
		||||
 | 
			
		||||
        # Copy Nuget files out of build directory
 | 
			
		||||
        nugetfile = join(self.Build_NugetDir, self.NuGet_PackageName + '.' + self.Version + '.nupkg')
 | 
			
		||||
        os.makedirs(self.PackageDestination, exist_ok=True)
 | 
			
		||||
        shutil.copy(nugetfile, self.PackageDestination)
 | 
			
		||||
        print ('Generation of Nuget package complete - ' + self.NuGet_PackageName)
 | 
			
		||||
| 
						 | 
				
			
			@ -1,80 +0,0 @@
 | 
			
		|||
#! python3
 | 
			
		||||
"""Settings for scripts"""
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
class Settings(object):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        """Class Init"""
 | 
			
		||||
 | 
			
		||||
        self.NuGetExe = 'nuget.exe'
 | 
			
		||||
        self.Gtksharp_PackageName = 'GBD.GtkSharp'
 | 
			
		||||
 | 
			
		||||
        self.SrcDir = '../'
 | 
			
		||||
        self.BuildDir = './build'
 | 
			
		||||
        self.NugetPkgs = './nupkg'
 | 
			
		||||
        self.SrcDir = os.path.abspath(self.SrcDir)
 | 
			
		||||
        self.BuildDir = os.path.abspath(self.BuildDir)
 | 
			
		||||
        self.NugetPkgs = os.path.abspath(self.NugetPkgs)
 | 
			
		||||
 | 
			
		||||
        self.msys2path = 'C:\\msys64'
 | 
			
		||||
        self.msys2path = os.path.abspath(self.msys2path)
 | 
			
		||||
        self.bashpath = '/bin/bash'
 | 
			
		||||
 | 
			
		||||
        self.mingwin32path = 'C:\\msys64\\mingw32\\bin'
 | 
			
		||||
        self.mingwin32path = os.path.abspath(self.mingwin32path)
 | 
			
		||||
        self.mingwin64path = 'C:\\msys64\\mingw64\\bin'
 | 
			
		||||
        self.mingwin64path = os.path.abspath(self.mingwin64path)
 | 
			
		||||
 | 
			
		||||
    def get_native_win_dlls(self):
 | 
			
		||||
        ret = []
 | 
			
		||||
 | 
			
		||||
        # Gtk
 | 
			
		||||
        ret.append('libgtk-3-0.dll')
 | 
			
		||||
        ret.append('libgdk-3-0.dll')
 | 
			
		||||
 | 
			
		||||
        # atk
 | 
			
		||||
        ret.append('libatk-1.0-0.dll')
 | 
			
		||||
 | 
			
		||||
        # cairo
 | 
			
		||||
        ret.append('libcairo-2.dll')
 | 
			
		||||
        ret.append('libcairo-gobject-2.dll')
 | 
			
		||||
 | 
			
		||||
        # gdk-pixbuf
 | 
			
		||||
        ret.append('libgdk_pixbuf-2.0-0.dll')
 | 
			
		||||
 | 
			
		||||
        # glib2
 | 
			
		||||
        ret.append('libgio-2.0-0.dll')
 | 
			
		||||
        ret.append('libglib-2.0-0.dll')
 | 
			
		||||
        ret.append('libgmodule-2.0-0.dll')
 | 
			
		||||
        ret.append('libgobject-2.0-0.dll')
 | 
			
		||||
 | 
			
		||||
        # pango
 | 
			
		||||
        ret.append('libpango-1.0-0.dll')
 | 
			
		||||
        ret.append('libpangocairo-1.0-0.dll')
 | 
			
		||||
        ret.append('libpangoft2-1.0-0.dll')
 | 
			
		||||
        ret.append('libpangowin32-1.0-0.dll')
 | 
			
		||||
        return ret
 | 
			
		||||
 | 
			
		||||
    def get_native_win_deps(self):
 | 
			
		||||
        ret = []
 | 
			
		||||
        # Determined by using PE Explorer
 | 
			
		||||
        ret.append('libgcc_*.dll')
 | 
			
		||||
        ret.append('libepoxy-0.dll')
 | 
			
		||||
        ret.append('libintl-8.dll')
 | 
			
		||||
        ret.append('libwinpthread-1.dll')
 | 
			
		||||
        ret.append('libiconv-2.dll')
 | 
			
		||||
        ret.append('libfontconfig-1.dll')
 | 
			
		||||
        ret.append('libexpat-1.dll')
 | 
			
		||||
        ret.append('libfreetype-6.dll')
 | 
			
		||||
        ret.append('libpixman-1-0.dll')
 | 
			
		||||
        ret.append('libpng16-16.dll')
 | 
			
		||||
        ret.append('zlib1.dll')
 | 
			
		||||
        ret.append('libpcre-1.dll')
 | 
			
		||||
        ret.append('libffi-6.dll')
 | 
			
		||||
        ret.append('libharfbuzz-0.dll')
 | 
			
		||||
        ret.append('libgraphite2.dll')
 | 
			
		||||
        ret.append('libstdc++-6.dll')
 | 
			
		||||
        ret.append('libbz2-1.dll')
 | 
			
		||||
        return ret
 | 
			
		||||
							
								
								
									
										51
									
								
								NuGet/pybuild/profiles/Glue_Win32.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								NuGet/pybuild/profiles/Glue_Win32.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
#!/usr/bin/python3
 | 
			
		||||
 | 
			
		||||
import os, shutil, ntpath
 | 
			
		||||
from pybuild.ProfileBase import ProfileBase
 | 
			
		||||
from os.path import abspath, join
 | 
			
		||||
from glob import glob
 | 
			
		||||
from pybuild.Helper import Helper
 | 
			
		||||
from pybuild.profiles.GtkSharp import GtkSharp
 | 
			
		||||
 | 
			
		||||
class Glue_Win32(ProfileBase):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        """Class Init"""
 | 
			
		||||
        super().__init__()
 | 
			
		||||
        self._NuGet_PackageName = 'GtkSharp.Win32.Glue'
 | 
			
		||||
        self._Version = Helper.get_gtksharp_version(self.SrcDir)
 | 
			
		||||
        self.MSYSTEM = 'MINGW32'
 | 
			
		||||
 | 
			
		||||
    def Get_Dlls_GtkSharp_Glue(self):
 | 
			
		||||
        ret = []
 | 
			
		||||
 | 
			
		||||
        # Gtksharp Glue libs
 | 
			
		||||
        ret.append(['atk/glue/.libs/*atksharpglue-3.dll', 'atksharpglue-3.dl_'])
 | 
			
		||||
        ret.append(['pango/glue/.libs/*pangosharpglue-3.dll', 'pangosharpglue-3.dl_'])
 | 
			
		||||
        ret.append(['gio/glue/.libs/*giosharpglue-3.dll', 'giosharpglue-3.dl_'])
 | 
			
		||||
        ret.append(['gtk/glue/.libs/*gtksharpglue-3.dll', 'gtksharpglue-3.dl_'])
 | 
			
		||||
        return ret
 | 
			
		||||
 | 
			
		||||
    def build(self):
 | 
			
		||||
        """Package up a nuget file based on the default build"""
 | 
			
		||||
 | 
			
		||||
        if os.name != 'nt':
 | 
			
		||||
           print("Skipping Native Nuget package build, as this needs to be run on Windows")
 | 
			
		||||
           return
 | 
			
		||||
 | 
			
		||||
        # Trigger build of gtksharp with specific bash for Mingw32
 | 
			
		||||
        builder = GtkSharp()
 | 
			
		||||
        builder.MSYSTEM = self.MSYSTEM
 | 
			
		||||
        builder.build()
 | 
			
		||||
 | 
			
		||||
        net45_build_dir = join(self.Build_NugetDir, 'build', 'net45')
 | 
			
		||||
        os.makedirs(net45_build_dir, exist_ok=True)
 | 
			
		||||
 | 
			
		||||
        print ('Copying Files')
 | 
			
		||||
        dll_list = self.Get_Dlls_GtkSharp_Glue()
 | 
			
		||||
 | 
			
		||||
        for item in dll_list:
 | 
			
		||||
            src = glob(abspath(join(self.SrcDir, item[0])))[0]
 | 
			
		||||
            f_basename, f_extension = os.path.splitext(ntpath.basename(src))
 | 
			
		||||
            dest = join(net45_build_dir, item[1])
 | 
			
		||||
            shutil.copy(src, dest)
 | 
			
		||||
							
								
								
									
										14
									
								
								NuGet/pybuild/profiles/Glue_Win64.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								NuGet/pybuild/profiles/Glue_Win64.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
#!/usr/bin/python3
 | 
			
		||||
 | 
			
		||||
from pybuild.ProfileBase import ProfileBase
 | 
			
		||||
from pybuild.Helper import Helper
 | 
			
		||||
from pybuild.profiles.Glue_Win32 import Glue_Win32
 | 
			
		||||
 | 
			
		||||
class Glue_Win64(Glue_Win32):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        """Class Init"""
 | 
			
		||||
        super().__init__()
 | 
			
		||||
        self._NuGet_PackageName = 'GtkSharp.Win64.Glue'
 | 
			
		||||
        self._Version = Helper.get_gtksharp_version(self.SrcDir)
 | 
			
		||||
        self.MSYSTEM = 'MINGW64'
 | 
			
		||||
							
								
								
									
										71
									
								
								NuGet/pybuild/profiles/GtkSharp.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								NuGet/pybuild/profiles/GtkSharp.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,71 @@
 | 
			
		|||
#!/usr/bin/python3
 | 
			
		||||
import os, shutil
 | 
			
		||||
from pybuild.ProfileBase import ProfileBase
 | 
			
		||||
from os.path import abspath, join
 | 
			
		||||
from pybuild.Helper import Helper
 | 
			
		||||
 | 
			
		||||
class GtkSharp(ProfileBase):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        """Class Init"""
 | 
			
		||||
        super().__init__()
 | 
			
		||||
        self._NuGet_PackageName = 'GtkSharp'
 | 
			
		||||
        self._Version = Helper.get_gtksharp_version(self.SrcDir)
 | 
			
		||||
        self.MSYSTEM = 'MINGW64'
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def Build_ScriptDir(self):
 | 
			
		||||
        return abspath(join(self._BuildDir, 'scripts'))
 | 
			
		||||
 | 
			
		||||
    def build(self):
 | 
			
		||||
        """Build the gtksharp binaries for .Net 4.5"""
 | 
			
		||||
        os.makedirs(self.Build_ScriptDir, exist_ok=True)
 | 
			
		||||
        buildfile = join(self.Build_ScriptDir, 'net45_build.sh')
 | 
			
		||||
        buildbatch = join(self.Build_ScriptDir, 'net45_build.bat')
 | 
			
		||||
 | 
			
		||||
        # run script via MSYS for windows, or shell for linux
 | 
			
		||||
        if os.name == 'nt':
 | 
			
		||||
            print("Building .Net GtkSharp using MSYS2")
 | 
			
		||||
            with open(buildfile, 'w') as f:
 | 
			
		||||
                f.write('PATH=$PATH:/c/Program\ Files\ \(x86\)/Microsoft\ SDKs/Windows/v10.0A/bin/NETFX\ 4.6\ Tools/\n')
 | 
			
		||||
                f.write('PATH=$PATH:/c/Windows/Microsoft.NET/Framework/v4.0.30319/\n')
 | 
			
		||||
                f.write('cd ' + Helper.winpath_to_msyspath(self.SrcDir + '\n'))
 | 
			
		||||
                f.write('./autogen.sh --prefix=/tmp/install\n')
 | 
			
		||||
                f.write('make clean\n')
 | 
			
		||||
                f.write('make\n')
 | 
			
		||||
 | 
			
		||||
            bashexe = join(self.MsysPath, 'usr\\bin\\bash.exe')
 | 
			
		||||
 | 
			
		||||
            with open(buildbatch, 'w') as f:
 | 
			
		||||
                f.write('set MSYSTEM=' + self.MSYSTEM + '\n')
 | 
			
		||||
                f.write(bashexe + ' --login ' + buildfile)
 | 
			
		||||
 | 
			
		||||
            cmds = ['C:\Windows\System32\cmd.exe', '/C', buildbatch]
 | 
			
		||||
            cmd = Helper.run_cmd(cmds, self.SrcDir)
 | 
			
		||||
 | 
			
		||||
        else:
 | 
			
		||||
            print("Building using Linux shell")
 | 
			
		||||
            with open(buildfile, 'w') as f:
 | 
			
		||||
                f.write('cd ' + self.SrcDir + '\n')
 | 
			
		||||
                f.write('./autogen.sh --prefix=/tmp/install\n')
 | 
			
		||||
                f.write('make clean\n')
 | 
			
		||||
                f.write('make\n')
 | 
			
		||||
            cmds = [self.LinuxBashPath, buildfile]
 | 
			
		||||
            cmd = Helper.run_cmd(cmds, self.SrcDir)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def copy(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)
 | 
			
		||||
 | 
			
		||||
        dll_list = ['atk', 'cairo', 'gdk', 'gio', 'glib', 'gtk', 'pango']
 | 
			
		||||
        for item in dll_list:
 | 
			
		||||
            shutil.copy(join(self.SrcDir, item, item + "-sharp.dll"), net45_lib_dir)
 | 
			
		||||
            if item != 'cairo':
 | 
			
		||||
                shutil.copy(join(self.SrcDir, item, item + '-sharp.dll.config'), net45_build_dir)
 | 
			
		||||
							
								
								
									
										155
									
								
								NuGet/pybuild/profiles/GtkSharp_Core.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								NuGet/pybuild/profiles/GtkSharp_Core.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,155 @@
 | 
			
		|||
#!/usr/bin/python3
 | 
			
		||||
import os, shutil
 | 
			
		||||
from pybuild.ProfileBase import ProfileBase
 | 
			
		||||
from pybuild.vsgenext.CoreVSProject import CoreVSProject
 | 
			
		||||
from os.path import abspath, join
 | 
			
		||||
from pybuild.Helper import Helper
 | 
			
		||||
from glob import glob
 | 
			
		||||
import vsgen
 | 
			
		||||
 | 
			
		||||
# 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)
 | 
			
		||||
							
								
								
									
										102
									
								
								NuGet/pybuild/profiles/Gtk_Win32.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								NuGet/pybuild/profiles/Gtk_Win32.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,102 @@
 | 
			
		|||
#!/usr/bin/python3
 | 
			
		||||
"""Build of GTK3 into a NuGet package - Windows 32bit"""
 | 
			
		||||
 | 
			
		||||
import os, shutil, ntpath
 | 
			
		||||
from pybuild.ProfileBase import ProfileBase
 | 
			
		||||
from os.path import abspath, join
 | 
			
		||||
from glob import iglob
 | 
			
		||||
from pybuild.Helper import Helper
 | 
			
		||||
 | 
			
		||||
class Gtk_Win32(ProfileBase):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        """Class Init"""
 | 
			
		||||
        super().__init__()
 | 
			
		||||
        self._NuGet_PackageName = 'GtkSharp.Win32'
 | 
			
		||||
        self._MingwBinPath = join(self.MsysPath + '\\mingw32\\bin')
 | 
			
		||||
        self.arch = 'Win32'
 | 
			
		||||
        self._Version = Helper.get_gtk_version_msys(self.MsysPath)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def MingwBinPath(self):
 | 
			
		||||
        return abspath(self._MingwBinPath)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def Get_Dlls_Native_GTK(self):
 | 
			
		||||
        ret = []
 | 
			
		||||
 | 
			
		||||
        # Gtk
 | 
			
		||||
        ret.append('libgtk-3-0.dll')
 | 
			
		||||
        ret.append('libgdk-3-0.dll')
 | 
			
		||||
 | 
			
		||||
        # atk
 | 
			
		||||
        ret.append('libatk-1.0-0.dll')
 | 
			
		||||
 | 
			
		||||
        # cairo
 | 
			
		||||
        ret.append('libcairo-2.dll')
 | 
			
		||||
        ret.append('libcairo-gobject-2.dll')
 | 
			
		||||
 | 
			
		||||
        # gdk-pixbuf
 | 
			
		||||
        ret.append('libgdk_pixbuf-2.0-0.dll')
 | 
			
		||||
 | 
			
		||||
        # glib2
 | 
			
		||||
        ret.append('libgio-2.0-0.dll')
 | 
			
		||||
        ret.append('libglib-2.0-0.dll')
 | 
			
		||||
        ret.append('libgmodule-2.0-0.dll')
 | 
			
		||||
        ret.append('libgobject-2.0-0.dll')
 | 
			
		||||
 | 
			
		||||
        # pango
 | 
			
		||||
        ret.append('libpango-1.0-0.dll')
 | 
			
		||||
        ret.append('libpangocairo-1.0-0.dll')
 | 
			
		||||
        ret.append('libpangoft2-1.0-0.dll')
 | 
			
		||||
        ret.append('libpangowin32-1.0-0.dll')
 | 
			
		||||
        return ret
 | 
			
		||||
 | 
			
		||||
    def Get_Dlls_Native_GTK_Deps(self):
 | 
			
		||||
        ret = []
 | 
			
		||||
        # Determined by using PE Explorer
 | 
			
		||||
        ret.append('libgcc_*.dll')
 | 
			
		||||
        ret.append('libepoxy-0.dll')
 | 
			
		||||
        ret.append('libintl-8.dll')
 | 
			
		||||
        ret.append('libwinpthread-1.dll')
 | 
			
		||||
        ret.append('libiconv-2.dll')
 | 
			
		||||
        ret.append('libfontconfig-1.dll')
 | 
			
		||||
        ret.append('libexpat-1.dll')
 | 
			
		||||
        ret.append('libfreetype-6.dll')
 | 
			
		||||
        ret.append('libpixman-1-0.dll')
 | 
			
		||||
        ret.append('libpng16-16.dll')
 | 
			
		||||
        ret.append('zlib1.dll')
 | 
			
		||||
        ret.append('libpcre-1.dll')
 | 
			
		||||
        ret.append('libffi-6.dll')
 | 
			
		||||
        ret.append('libharfbuzz-0.dll')
 | 
			
		||||
        ret.append('libgraphite2.dll')
 | 
			
		||||
        ret.append('libstdc++-6.dll')
 | 
			
		||||
        ret.append('libbz2-1.dll')
 | 
			
		||||
        return ret
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def build(self):
 | 
			
		||||
        """Package up a nuget file based on the default build"""
 | 
			
		||||
 | 
			
		||||
        if os.name != 'nt':
 | 
			
		||||
           print("Skipping Native Nuget package build, as this needs to be run on Windows")
 | 
			
		||||
           return
 | 
			
		||||
 | 
			
		||||
        net45_build_dir = join(self.Build_NugetDir, 'build', 'net45')
 | 
			
		||||
        os.makedirs(net45_build_dir, exist_ok=True)
 | 
			
		||||
 | 
			
		||||
        print ('Copying Files')
 | 
			
		||||
        shutil.copy('./misc/GtkSharp.Native.targets', join(net45_build_dir, 'GtkSharp.' + self.arch + '.targets'))
 | 
			
		||||
 | 
			
		||||
        # Copy dlls
 | 
			
		||||
        dll_list = []
 | 
			
		||||
        dll_list += self.Get_Dlls_Native_GTK()
 | 
			
		||||
        dll_list += self.Get_Dlls_Native_GTK_Deps()
 | 
			
		||||
 | 
			
		||||
        for item in dll_list:
 | 
			
		||||
            src = join(self.MingwBinPath, item)
 | 
			
		||||
 | 
			
		||||
            srclist = iglob(src)
 | 
			
		||||
            for fname in srclist:
 | 
			
		||||
                f_basename, f_extension = os.path.splitext(ntpath.basename(fname))
 | 
			
		||||
                shutil.copy(fname, join(net45_build_dir, f_basename + '.dl_'))
 | 
			
		||||
							
								
								
									
										18
									
								
								NuGet/pybuild/profiles/Gtk_Win64.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								NuGet/pybuild/profiles/Gtk_Win64.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
#!/usr/bin/python3
 | 
			
		||||
"""Build of GTK3 into a NuGet package - Windows 64bit"""
 | 
			
		||||
 | 
			
		||||
import os, shutil
 | 
			
		||||
from pybuild.ProfileBase import ProfileBase
 | 
			
		||||
from os.path import abspath, join
 | 
			
		||||
from pybuild.Helper import Helper
 | 
			
		||||
from pybuild.profiles.Gtk_Win32 import Gtk_Win32
 | 
			
		||||
 | 
			
		||||
class Gtk_Win64(Gtk_Win32):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        """Class Init"""
 | 
			
		||||
        super().__init__()
 | 
			
		||||
        self._NuGet_PackageName = 'GtkSharp.Win64'
 | 
			
		||||
        self._MingwBinPath = join(self.MsysPath + '\\mingw64\\bin')
 | 
			
		||||
        self.arch = 'Win64'
 | 
			
		||||
        self._Version = Helper.get_gtk_version_msys(self.MsysPath)
 | 
			
		||||
							
								
								
									
										0
									
								
								NuGet/pybuild/profiles/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								NuGet/pybuild/profiles/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										144
									
								
								NuGet/pybuild/vsgenext/CoreVSProject.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								NuGet/pybuild/vsgenext/CoreVSProject.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,144 @@
 | 
			
		|||
#!/usr/bin/python3
 | 
			
		||||
 | 
			
		||||
import os, json
 | 
			
		||||
from vsgen.project import VSGProject
 | 
			
		||||
from xml.etree import ElementTree as et
 | 
			
		||||
from yattag import indent
 | 
			
		||||
from os.path import abspath, join
 | 
			
		||||
from collections import OrderedDict
 | 
			
		||||
 | 
			
		||||
class CoreVSProject(VSGProject):
 | 
			
		||||
    """
 | 
			
		||||
    CoreVSProject extends :class:`~vsgen.project.VSGProject` with data and logic needed to create a `.xproj` file.
 | 
			
		||||
    :ivar str   TargetFrameworkVersion:     The target framework version.
 | 
			
		||||
    :ivar str   BaseIntermediateOutputPath: Intermediate path for building the output.
 | 
			
		||||
    :ivar str   ProjectXml:                 Override the xml within the .xproj file.
 | 
			
		||||
    :ivar str   ProjectJson:                Override the json within the project.lock file.
 | 
			
		||||
    """
 | 
			
		||||
    __project_type__ = 'netcore'
 | 
			
		||||
 | 
			
		||||
    __writable_name__ = "Visual Studio .Net Core Project"
 | 
			
		||||
 | 
			
		||||
    __registerable_name__ = "Visual Studio C# Compiler"
 | 
			
		||||
 | 
			
		||||
    def __init__(self, **kwargs):
 | 
			
		||||
        """
 | 
			
		||||
        Constructor.
 | 
			
		||||
        :param kwargs:         List of arbitrary keyworded arguments to be processed as instance variable data
 | 
			
		||||
        """
 | 
			
		||||
        super(CoreVSProject, self).__init__(**kwargs)
 | 
			
		||||
 | 
			
		||||
    def _import(self, datadict):
 | 
			
		||||
        """
 | 
			
		||||
        Internal method to import instance variables data from a dictionary
 | 
			
		||||
        :param dict datadict: The dictionary containing variables values.
 | 
			
		||||
        """
 | 
			
		||||
        super(CoreVSProject, self)._import(datadict)
 | 
			
		||||
        self.TargetFrameworkVersion = datadict.get('TargetFrameworkVersion', 'v4.6.1')
 | 
			
		||||
        self.BaseIntermediateOutputPath = datadict.get('BaseIntermediateOutputPath', '.\obj')
 | 
			
		||||
        self.ProjectXml = datadict.get('ProjectXml', None)
 | 
			
		||||
        self.ProjectJson = datadict.get('ProjectJson', None)
 | 
			
		||||
        self.Version = datadict.get('Version', '1.0.0-*')
 | 
			
		||||
        self.Depends = datadict.get('Depends', {'NETStandard.Library': '1.6.0'})
 | 
			
		||||
        self.Frameworks = datadict.get('Frameworks', None)
 | 
			
		||||
        self.BuildOptions = datadict.get('BuildOptions', None)
 | 
			
		||||
 | 
			
		||||
    def get_project_json(self):
 | 
			
		||||
        """
 | 
			
		||||
        Get the json for use in Project.lock
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        data = OrderedDict()
 | 
			
		||||
        ver = {'version': self.Version}
 | 
			
		||||
        data.update(ver)
 | 
			
		||||
 
 | 
			
		||||
        depends = self.Depends
 | 
			
		||||
        depends2 = {'dependencies': depends}
 | 
			
		||||
        data.update(depends2)
 | 
			
		||||
        
 | 
			
		||||
        if self.Frameworks != None:
 | 
			
		||||
            frameworks = {'frameworks': self.Frameworks}
 | 
			
		||||
        else:
 | 
			
		||||
            frameworks = {'frameworks': {'netstandard1.6': {'imports': 'dnxcore50'}}}
 | 
			
		||||
        data.update(frameworks)
 | 
			
		||||
 | 
			
		||||
        if self.BuildOptions != None:
 | 
			
		||||
            buildopts = {'buildOptions': self.BuildOptions}
 | 
			
		||||
            data.update(buildopts)
 | 
			
		||||
 | 
			
		||||
        return data
 | 
			
		||||
 | 
			
		||||
    def get_project_xml(self):
 | 
			
		||||
        """
 | 
			
		||||
        Get the xml for use in the xproj file
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        xml_projroot = et.Element('Project')
 | 
			
		||||
        xml_projroot.set('ToolsVersion', '14.0')
 | 
			
		||||
        xml_projroot.set('DefaultTargets', 'Build')
 | 
			
		||||
        xml_projroot.set('xmlns', 'http://schemas.microsoft.com/developer/msbuild/2003')
 | 
			
		||||
 | 
			
		||||
        propgroup1 = et.SubElement(xml_projroot, 'PropertyGroup')
 | 
			
		||||
        studiover = et.SubElement(propgroup1, 'VisualStudioVersion')
 | 
			
		||||
        studiover.set('Condition', "'$(VisualStudioVersion)' == ''")
 | 
			
		||||
        studiover.text = '14.0'
 | 
			
		||||
        vstoolspath = et.SubElement(propgroup1, 'VSToolsPath')
 | 
			
		||||
        vstoolspath.set('Condition', "'$(VSToolsPath)' == ''")
 | 
			
		||||
        vstoolspath.text = r"$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)"
 | 
			
		||||
 | 
			
		||||
        import1 = et.SubElement(xml_projroot, 'Import')
 | 
			
		||||
        import1.set('Project', '$(VSToolsPath)\DotNet\Microsoft.DotNet.Props')
 | 
			
		||||
        import1.set('Condition', "'$(VSToolsPath)' != ''")
 | 
			
		||||
 | 
			
		||||
        propgroup2 = et.SubElement(xml_projroot, 'PropertyGroup')
 | 
			
		||||
        propgroup2.set('Label', 'Globals')
 | 
			
		||||
        projguid = et.SubElement(propgroup2, 'ProjectGuid')
 | 
			
		||||
        projguid.text = self.lower(self.GUID)
 | 
			
		||||
        rootnamespace = et.SubElement(propgroup2, 'RootNamespace')
 | 
			
		||||
        rootnamespace.text = self.RootNamespace
 | 
			
		||||
        baseintermediateoutputpath = et.SubElement(propgroup2, 'BaseIntermediateOutputPath')
 | 
			
		||||
        baseintermediateoutputpath.set('Condition', "'$(BaseIntermediateOutputPath)'=='' ")
 | 
			
		||||
        baseintermediateoutputpath.text = self.BaseIntermediateOutputPath
 | 
			
		||||
        targetframeworkversion = et.SubElement(propgroup2, 'TargetFrameworkVersion')
 | 
			
		||||
        targetframeworkversion.text = self.TargetFrameworkVersion
 | 
			
		||||
 | 
			
		||||
        propgroup3 = et.SubElement(xml_projroot, 'PropertyGroup')
 | 
			
		||||
        schemaver = et.SubElement(propgroup3, 'SchemaVersion')
 | 
			
		||||
        schemaver.text = '2.0'
 | 
			
		||||
 | 
			
		||||
        import2 = et.SubElement(xml_projroot, 'Import')
 | 
			
		||||
        import2.set('Project', '$(VSToolsPath)\DotNet\Microsoft.DotNet.targets')
 | 
			
		||||
        import2.set('Condition', "'$(VSToolsPath)' != ''")
 | 
			
		||||
 | 
			
		||||
        etstr = et.tostring(xml_projroot, encoding='utf-8', method='xml').decode('utf-8')
 | 
			
		||||
        outtxt = indent(etstr)
 | 
			
		||||
        return outtxt 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def write(self):
 | 
			
		||||
        """
 | 
			
		||||
        Creates the project files.
 | 
			
		||||
        """
 | 
			
		||||
        npath = os.path.normpath(self.FileName)
 | 
			
		||||
        (filepath, filename) = os.path.split(npath)
 | 
			
		||||
        os.makedirs(filepath, exist_ok=True)
 | 
			
		||||
 | 
			
		||||
        projectFileName = os.path.normpath(self.FileName)
 | 
			
		||||
        projxml = ''
 | 
			
		||||
        if self.ProjectXml == None:
 | 
			
		||||
            projxml = self.get_project_xml()
 | 
			
		||||
        else:
 | 
			
		||||
            projxml = self.ProjectXml
 | 
			
		||||
        with open(projectFileName, 'wt') as f:
 | 
			
		||||
            f.write(projxml)
 | 
			
		||||
 | 
			
		||||
        jsonFileName = join(filepath, 'project.json')
 | 
			
		||||
 | 
			
		||||
        if self.ProjectJson == None:
 | 
			
		||||
            projjson = self.get_project_json()
 | 
			
		||||
        else:
 | 
			
		||||
            projjson = self.ProjectJson
 | 
			
		||||
 | 
			
		||||
        with open(jsonFileName, 'w') as f:
 | 
			
		||||
            txt = json.dumps(projjson, indent=2, separators=(',', ': '))
 | 
			
		||||
            f.write(txt)
 | 
			
		||||
							
								
								
									
										0
									
								
								NuGet/pybuild/vsgenext/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								NuGet/pybuild/vsgenext/__init__.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -7,7 +7,7 @@
 | 
			
		|||
    <ProjectHome>
 | 
			
		||||
    </ProjectHome>
 | 
			
		||||
    <StartupFile>..\..\build.py</StartupFile>
 | 
			
		||||
    <SearchPath>..\..\;..\..\pybuild\</SearchPath>
 | 
			
		||||
    <SearchPath>..\..\;..\..\pybuild\;..\..\pybuild\vsgen\</SearchPath>
 | 
			
		||||
    <WorkingDirectory>..\..\</WorkingDirectory>
 | 
			
		||||
    <OutputPath>.</OutputPath>
 | 
			
		||||
    <Name>GtkSharp-NugetBuild</Name>
 | 
			
		||||
| 
						 | 
				
			
			@ -38,17 +38,38 @@
 | 
			
		|||
    <Compile Include="..\..\build.py">
 | 
			
		||||
      <Link>build.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\GtkSharp_Builder.py">
 | 
			
		||||
      <Link>pybuild\GtkSharp_Builder.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\Gtk_Builder.py">
 | 
			
		||||
      <Link>pybuild\Gtk_Builder.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\Helper.py">
 | 
			
		||||
      <Link>pybuild\Helper.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\Settings.py">
 | 
			
		||||
      <Link>pybuild\Settings.py</Link>
 | 
			
		||||
    <Compile Include="..\..\pybuild\ProfileBase.py">
 | 
			
		||||
      <Link>pybuild\ProfileBase.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\profiles\Glue_Win32.py">
 | 
			
		||||
      <Link>pybuild\profiles\Glue_Win32.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\profiles\Glue_Win64.py">
 | 
			
		||||
      <Link>pybuild\profiles\Glue_Win64.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\profiles\GtkSharp.py">
 | 
			
		||||
      <Link>pybuild\profiles\GtkSharp.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\profiles\GtkSharp_Core.py">
 | 
			
		||||
      <Link>pybuild\profiles\GtkSharp_Core.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\profiles\Gtk_Win32.py">
 | 
			
		||||
      <Link>pybuild\profiles\Gtk_Win32.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\profiles\Gtk_Win64.py">
 | 
			
		||||
      <Link>pybuild\profiles\Gtk_Win64.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\profiles\__init__.py">
 | 
			
		||||
      <Link>pybuild\profiles\__init__.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\vsgenext\CoreVSProject.py">
 | 
			
		||||
      <Link>pybuild\vsgenext\CoreVSProject.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\vsgenext\__init__.py">
 | 
			
		||||
      <Link>pybuild\vsgenext\__init__.py</Link>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="..\..\pybuild\__init__.py">
 | 
			
		||||
      <Link>pybuild\__init__.py</Link>
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +77,8 @@
 | 
			
		|||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Folder Include="pybuild\" />
 | 
			
		||||
    <Folder Include="pybuild\vsgenext\" />
 | 
			
		||||
    <Folder Include="pybuild\profiles\" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Condition="Exists($(PtvsTargetsFile))" Project="$(PtvsTargetsFile)" />
 | 
			
		||||
  <Import Condition="!Exists($(PtvsTargetsFile))" Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
 | 
			
		||||
AC_INIT(gtk-sharp, 3.20.6)
 | 
			
		||||
AC_INIT(gtk-sharp, 3.22.1)
 | 
			
		||||
 | 
			
		||||
AM_INIT_AUTOMAKE([1.10 no-dist-gzip dist-bzip2 tar-ustar foreign])
 | 
			
		||||
AC_CANONICAL_HOST
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										112
									
								
								sources/Generating-Sources.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								sources/Generating-Sources.md
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,112 @@
 | 
			
		|||
# Generating Sources
 | 
			
		||||
 | 
			
		||||
## Overview
 | 
			
		||||
 | 
			
		||||
This is a quick overview of some of the commands to run when updating the sources for a new gtk version
 | 
			
		||||
 | 
			
		||||
### Linux
 | 
			
		||||
 | 
			
		||||
You may need to install the following package for generating the source under Linux
 | 
			
		||||
```
 | 
			
		||||
sudo apt-get install libxml-libxml-perl
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Windows
 | 
			
		||||
 | 
			
		||||
So far I've only managed to get this working in ubuntu, not Windows due to the way the .net app launches the perl script via libc
 | 
			
		||||
i.e. [DllImport ("libc")]
 | 
			
		||||
 | 
			
		||||
It looks like we need to use the 32bit version of MinGW if we do try it this way.
 | 
			
		||||
The following path statements are needed in the console at the very least
 | 
			
		||||
```
 | 
			
		||||
PATH=$PATH:/c/Program\ Files\ \(x86\)/Microsoft\ SDKs/Windows/v10.0A/bin/NETFX\ 4.6\ Tools/
 | 
			
		||||
PATH=$PATH:/c/Windows/Microsoft.NET/Framework/v4.0.30319/
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Also the parser can be rebuilt via
 | 
			
		||||
```
 | 
			
		||||
./autogen.sh --prefix=/tmp/install
 | 
			
		||||
cd parser
 | 
			
		||||
make clean
 | 
			
		||||
make
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Also it's important to make sure MSYS2 is uptodate with
 | 
			
		||||
```
 | 
			
		||||
pacman -Syuu
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
To search for a package that's been install (to see what version it is for example)
 | 
			
		||||
```
 | 
			
		||||
pacman -Ss gtk3
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Editing Files for Downloaded Source
 | 
			
		||||
 | 
			
		||||
### Configure.ac version number
 | 
			
		||||
 | 
			
		||||
First change the version number in configure.ac to match that of the gtk version we're moving to
 | 
			
		||||
```
 | 
			
		||||
AC_INIT(gtk-sharp, 3.22.1)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Sources/Makefile.am
 | 
			
		||||
 | 
			
		||||
Next change the version number in sources/Makefile.am to match
 | 
			
		||||
```
 | 
			
		||||
TARGET_GTK_VERSION=3.22.1
 | 
			
		||||
TARGET_GTK_API=3.22
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Next update the orher url's in Makefile.am, the version numbers should match those in use on the system (such as MSYS2)
 | 
			
		||||
```
 | 
			
		||||
GTK_DOWNLOADS = \
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/glib/2.50/glib-2.50.0.tar.xz 			\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/pango/1.40/pango-1.40.3.tar.xz			\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/atk/2.22/atk-2.22.0.tar.xz			\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.36/gdk-pixbuf-2.36.0.tar.xz	\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/gtk+/$(TARGET_GTK_API)/gtk+-$(TARGET_GTK_VERSION).tar.xz
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Patches
 | 
			
		||||
 | 
			
		||||
As part of the source code download, some of the files will be patched
 | 
			
		||||
so you need to look at and check that all the patches apply correctly to the downloaded source when running make get-source-code
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Download the sources
 | 
			
		||||
 | 
			
		||||
Next we're going to download the source
 | 
			
		||||
```
 | 
			
		||||
./autogen.sh --prefix=/tmp/install
 | 
			
		||||
cd sources
 | 
			
		||||
make get-source-code
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
At this stage the sources should now be extracted within the sources sub directory
 | 
			
		||||
 | 
			
		||||
### Update sources.xml
 | 
			
		||||
 | 
			
		||||
One last file to update is the sources/sources.xml file
 | 
			
		||||
all directories in this file need to match the extracted directories
 | 
			
		||||
 | 
			
		||||
## Generate the API Code
 | 
			
		||||
 | 
			
		||||
### Generate the XML Files
 | 
			
		||||
 | 
			
		||||
Next to generate the xml files needed for the generation of code
 | 
			
		||||
```
 | 
			
		||||
make api
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This should result in the following files
 | 
			
		||||
 | 
			
		||||
  * gdk/gdk-api.raw
 | 
			
		||||
  * gio/gio-api.raw
 | 
			
		||||
  * gtk/gtk-api.raw
 | 
			
		||||
  * pango/pango-api.raw
 | 
			
		||||
 | 
			
		||||
### Generate the API Code from the XML Files
 | 
			
		||||
 | 
			
		||||
TODO we need to use generator/gapi_codegen.exe on each of the xml files to generate the .cs code within the generated sub directories
 | 
			
		||||
| 
						 | 
				
			
			@ -3,14 +3,14 @@ EXTRA_DIST =					\
 | 
			
		|||
	sources.xml				\
 | 
			
		||||
	gtk_tree_model_signal_fix.patch
 | 
			
		||||
 | 
			
		||||
TARGET_GTK_VERSION=3.20.6
 | 
			
		||||
TARGET_GTK_API=3.20
 | 
			
		||||
TARGET_GTK_VERSION=3.22.1
 | 
			
		||||
TARGET_GTK_API=3.22
 | 
			
		||||
 | 
			
		||||
GTK_DOWNLOADS = \
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/glib/2.48/glib-2.48.0.tar.xz			\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/pango/1.40/pango-1.40.1.tar.xz			\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/atk/2.20/atk-2.20.0.tar.xz			\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.34/gdk-pixbuf-2.34.0.tar.xz	\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/glib/2.50/glib-2.50.0.tar.xz 			\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/pango/1.40/pango-1.40.3.tar.xz			\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/atk/2.22/atk-2.22.0.tar.xz			\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.36/gdk-pixbuf-2.36.0.tar.xz	\
 | 
			
		||||
	http://ftp.gnome.org/pub/GNOME/sources/gtk+/$(TARGET_GTK_API)/gtk+-$(TARGET_GTK_VERSION).tar.xz
 | 
			
		||||
 | 
			
		||||
api: 
 | 
			
		||||
| 
						 | 
				
			
			@ -21,9 +21,8 @@ get-source-code:
 | 
			
		|||
		wget $$i --output-document=- | tar -xJ ;   \
 | 
			
		||||
	done;
 | 
			
		||||
	ln -f -s gtkfilechooserprivate.h gtk+-$(TARGET_GTK_VERSION)/gtk/gtkfilechooserpriv.h
 | 
			
		||||
	patch -p0 gtk+-$(TARGET_GTK_VERSION)/gtk/gtktreemodel.c < gtk_tree_model_signal_fix.patch
 | 
			
		||||
	patch -p1 -d gtk+-$(TARGET_GTK_VERSION) < patches/gtk_tree_model_signal_fix.patch
 | 
			
		||||
	echo "typedef struct _GtkClipboard GtkClipboard;" >> gtk+-$(TARGET_GTK_VERSION)/gtk/gtkclipboard.h
 | 
			
		||||
	echo "typedef struct _GtkClipboardClass GtkClipboardClass;" >> gtk+-$(TARGET_GTK_VERSION)/gtk/gtkclipboard.h
 | 
			
		||||
	patch -p0 gtk+-$(TARGET_GTK_VERSION)/gtk/gtktextattributes.h < gtktextattributes-gi-scanner.patch 
 | 
			
		||||
	patch -p0 glib-2.48.0/gio/gwin32registrykey.h < gwin32registrykey-little-endian.patch
 | 
			
		||||
 | 
			
		||||
	patch -p0 gtk+-$(TARGET_GTK_VERSION)/gtk/gtktextattributes.h < patches/gtktextattributes-gi-scanner.patch
 | 
			
		||||
	patch -p0 glib-2.50.0/gio/gwin32registrykey.h < patches/gwin32registrykey-little-endian.patch
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
--- gtk+-2.14.3/gtk/gtktreemodel.c	2009-01-04 11:52:01.000000000 -0600
 | 
			
		||||
+++ gtktreemodel.c	2009-01-04 12:03:58.000000000 -0600
 | 
			
		||||
@@ -193,14 +193,15 @@
 | 
			
		||||
diff -Naur gtk+-3.22.1.orig/gtk/gtktreemodel.c gtk+-3.22.1/gtk/gtktreemodel.c
 | 
			
		||||
--- gtk+-3.22.1.orig/gtk/gtktreemodel.c	2016-08-29 18:20:43.000000000 +0100
 | 
			
		||||
+++ gtk+-3.22.1/gtk/gtktreemodel.c	2016-10-17 13:57:41.204889300 +0100
 | 
			
		||||
@@ -395,14 +395,15 @@
 | 
			
		||||
       closure = g_closure_new_simple (sizeof (GClosure), NULL);
 | 
			
		||||
       g_closure_set_marshal (closure, row_inserted_marshal);
 | 
			
		||||
       tree_model_signals[ROW_INSERTED] =
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +20,7 @@
 | 
			
		|||
 
 | 
			
		||||
       /**
 | 
			
		||||
        * GtkTreeModel::row-has-child-toggled:
 | 
			
		||||
@@ -242,14 +243,14 @@
 | 
			
		||||
@@ -441,14 +442,14 @@
 | 
			
		||||
       closure = g_closure_new_simple (sizeof (GClosure), NULL);
 | 
			
		||||
       g_closure_set_marshal (closure, row_deleted_marshal);
 | 
			
		||||
       tree_model_signals[ROW_DELETED] =
 | 
			
		||||
| 
						 | 
				
			
			@ -30,14 +31,14 @@
 | 
			
		|||
-                       closure,
 | 
			
		||||
+                       G_STRUCT_OFFSET (GtkTreeModelIface, row_deleted),
 | 
			
		||||
                        NULL, NULL,
 | 
			
		||||
                        _gtk_marshal_VOID__BOXED,
 | 
			
		||||
                        NULL,
 | 
			
		||||
                        G_TYPE_NONE, 1,
 | 
			
		||||
-                       row_deleted_params);
 | 
			
		||||
+                       GTK_TYPE_TREE_PATH);
 | 
			
		||||
 
 | 
			
		||||
       /**
 | 
			
		||||
        * GtkTreeModel::rows-reordered:
 | 
			
		||||
@@ -268,14 +269,15 @@
 | 
			
		||||
        * GtkTreeModel::rows-reordered: (skip)
 | 
			
		||||
@@ -471,14 +472,15 @@
 | 
			
		||||
       closure = g_closure_new_simple (sizeof (GClosure), NULL);
 | 
			
		||||
       g_closure_set_marshal (closure, rows_reordered_marshal);
 | 
			
		||||
       tree_model_signals[ROWS_REORDERED] =
 | 
			
		||||
| 
						 | 
				
			
			@ -51,8 +52,8 @@
 | 
			
		|||
                        _gtk_marshal_VOID__BOXED_BOXED_POINTER,
 | 
			
		||||
                        G_TYPE_NONE, 3,
 | 
			
		||||
-                       rows_reordered_params);
 | 
			
		||||
+                      GTK_TYPE_TREE_PATH | G_SIGNAL_TYPE_STATIC_SCOPE,
 | 
			
		||||
+                      GTK_TYPE_TREE_ITER, G_TYPE_POINTER);
 | 
			
		||||
+                       GTK_TYPE_TREE_PATH | G_SIGNAL_TYPE_STATIC_SCOPE,
 | 
			
		||||
+                       GTK_TYPE_TREE_ITER, G_TYPE_POINTER);
 | 
			
		||||
       initialized = TRUE;
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
  <api filename="../gio/gio-api.raw">
 | 
			
		||||
    <library name="libgio-2.0-0.dll">
 | 
			
		||||
      <namespace name="G">
 | 
			
		||||
        <directory path="glib-2.48.0/gio">
 | 
			
		||||
        <directory path="glib-2.50.0/gio">
 | 
			
		||||
          <exclude>gasynchelper.h</exclude>
 | 
			
		||||
          <exclude>gcontenttypeprivate.h</exclude>
 | 
			
		||||
          <exclude>gdelayedsettingsbackend.h</exclude>
 | 
			
		||||
| 
						 | 
				
			
			@ -91,14 +91,14 @@
 | 
			
		|||
  <api filename="../atk/atk-api.raw">
 | 
			
		||||
    <library name="libatk-1.0-0.dll">
 | 
			
		||||
      <namespace name="Atk">
 | 
			
		||||
        <dir>atk-2.20.0/atk</dir>
 | 
			
		||||
        <dir>atk-2.22.0/atk</dir>
 | 
			
		||||
      </namespace>
 | 
			
		||||
    </library>
 | 
			
		||||
  </api>
 | 
			
		||||
  <api filename="../pango/pango-api.raw">
 | 
			
		||||
    <library name="libpango-1.0-0.dll">
 | 
			
		||||
      <namespace name="Pango">
 | 
			
		||||
        <directory path="pango-1.40.1/pango">
 | 
			
		||||
        <directory path="pango-1.40.3/pango">
 | 
			
		||||
          <exclude>pangoatsui.c</exclude>
 | 
			
		||||
          <exclude>pangoatsui.h</exclude>
 | 
			
		||||
          <exclude>pangoatsui-fontmap.h</exclude>
 | 
			
		||||
| 
						 | 
				
			
			@ -140,17 +140,17 @@
 | 
			
		|||
  <api filename="../gdk/gdk-api.raw">
 | 
			
		||||
    <library name="libgdk-3-0.dll">
 | 
			
		||||
      <namespace name="Gdk">
 | 
			
		||||
        <directory path="gtk+-3.20.6/gdk">
 | 
			
		||||
        <directory path="gtk+-3.22.1/gdk">
 | 
			
		||||
          <exclude>gdkalias.h</exclude>
 | 
			
		||||
          <exclude>gdkwindowimpl.h</exclude>
 | 
			
		||||
          <exclude>keyname-table.h</exclude>
 | 
			
		||||
        </directory>
 | 
			
		||||
	<directory path="gtk+-3.20.6/gdk/deprecated" />
 | 
			
		||||
	<directory path="gtk+-3.22.1/gdk/deprecated" />
 | 
			
		||||
      </namespace>
 | 
			
		||||
    </library>
 | 
			
		||||
    <library name="libgdk_pixbuf-2.0-0.dll">
 | 
			
		||||
      <namespace name="Gdk">
 | 
			
		||||
        <directory path="gdk-pixbuf-2.34.0/gdk-pixbuf">
 | 
			
		||||
        <directory path="gdk-pixbuf-2.36.0/gdk-pixbuf">
 | 
			
		||||
          <exclude>io-gdip-native.h</exclude>
 | 
			
		||||
          <exclude>io-gdip-propertytags.h</exclude>
 | 
			
		||||
          <exclude>io-gdip-utils.h</exclude>
 | 
			
		||||
| 
						 | 
				
			
			@ -165,7 +165,7 @@
 | 
			
		|||
  <api filename="../gtk/gtk-api.raw">
 | 
			
		||||
    <library name="libgtk-3-0.dll">
 | 
			
		||||
      <namespace name="Gtk">
 | 
			
		||||
        <directory path="gtk+-3.20.6/gtk">
 | 
			
		||||
        <directory path="gtk+-3.22.1/gtk">
 | 
			
		||||
          <!-- Internal stuff -->
 | 
			
		||||
          <exclude>gtkalias.h</exclude>
 | 
			
		||||
          <exclude>gtkappchooseronline.h</exclude>
 | 
			
		||||
| 
						 | 
				
			
			@ -263,7 +263,7 @@
 | 
			
		|||
          <exclude>gtkcomposetable.c</exclude>
 | 
			
		||||
          <exclude>gtkcomposetable.h</exclude>
 | 
			
		||||
        </directory>
 | 
			
		||||
	<directory path="gtk+-3.20.6/gtk/deprecated" />
 | 
			
		||||
	<directory path="gtk+-3.22.1/gtk/deprecated" />
 | 
			
		||||
      </namespace>
 | 
			
		||||
    </library>
 | 
			
		||||
  </api>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue