mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	with Mathias on nuget package generation
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									bb5837791a
								
							
						
					
					
						commit
						becf5de872
					
				
					 2 changed files with 76 additions and 22 deletions
				
			
		| 
						 | 
					@ -14,6 +14,10 @@ import urllib.request
 | 
				
			||||||
import zipfile
 | 
					import zipfile
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
import os.path
 | 
					import os.path
 | 
				
			||||||
 | 
					import shutil
 | 
				
			||||||
 | 
					import subprocess
 | 
				
			||||||
 | 
					import mk_util
 | 
				
			||||||
 | 
					import mk_project
 | 
				
			||||||
 | 
					
 | 
				
			||||||
data = json.loads(urllib.request.urlopen("https://api.github.com/repos/Z3Prover/z3/releases/latest").read().decode())
 | 
					data = json.loads(urllib.request.urlopen("https://api.github.com/repos/Z3Prover/z3/releases/latest").read().decode())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,36 +31,83 @@ def download_installs():
 | 
				
			||||||
    for asset in data['assets']:
 | 
					    for asset in data['assets']:
 | 
				
			||||||
        url = asset['browser_download_url']
 | 
					        url = asset['browser_download_url']
 | 
				
			||||||
        name = asset['name']
 | 
					        name = asset['name']
 | 
				
			||||||
 | 
					        if "x64" not in name:
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
        print("Downloading ", url)
 | 
					        print("Downloading ", url)
 | 
				
			||||||
        sys.stdout.flush()
 | 
					        sys.stdout.flush()
 | 
				
			||||||
        urllib.request.urlretrieve(url, "packages/%s" % name)
 | 
					        urllib.request.urlretrieve(url, "packages/%s" % name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
os_names = ["ubuntu-14", "ubuntu-16", "win", "debian", "osx"]
 | 
					os_info = {"ubuntu-14" : ('so', 'ubuntu.14.04-x64'),
 | 
				
			||||||
 | 
					           'ubuntu-16' : ('so', 'ubuntu.16.04-x64'),
 | 
				
			||||||
 | 
					           'win' : ('dll', 'win-x64'),
 | 
				
			||||||
 | 
					           'debian' : ('so', 'debian.8-x64') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def classify_package(f):
 | 
				
			||||||
 | 
					    for os_name in os_info:
 | 
				
			||||||
 | 
					        if os_name in f:
 | 
				
			||||||
 | 
					            ext, dst = os_info[os_name]
 | 
				
			||||||
 | 
					            return os_name, f[:-4], ext, dst
 | 
				
			||||||
 | 
					    return None
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
def unpack():
 | 
					def unpack():
 | 
				
			||||||
    for f in os.listdir("packages"):
 | 
					 | 
				
			||||||
        if f.endswith("zip") and "x64" in f:
 | 
					 | 
				
			||||||
            print(f)
 | 
					 | 
				
			||||||
            # determine os from os_names
 | 
					 | 
				
			||||||
            # instead of this string manipulation.
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            name = os.path.splitext(f)[0]
 | 
					 | 
				
			||||||
            os_name = name[name.find("x64")+4:]
 | 
					 | 
				
			||||||
            os_name = os_name[:os_name.find("-")]
 | 
					 | 
				
			||||||
            print(os_name)
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            zip_ref = zipfile.ZipFile("packages/%s" % f, 'r')
 | 
					 | 
				
			||||||
            path = "out/%s" % os_name
 | 
					 | 
				
			||||||
            zip_ref.extract("%s/bin/libz3.so" % name)
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
    # unzip files in packages
 | 
					    # unzip files in packages
 | 
				
			||||||
    pass
 | 
					    # out
 | 
				
			||||||
 | 
					    # +- runtimes
 | 
				
			||||||
 | 
					    #    +- win-x64
 | 
				
			||||||
 | 
					    #    +- ubuntu.16.04-x64
 | 
				
			||||||
 | 
					    #    +- ubuntu.14.04-x64
 | 
				
			||||||
 | 
					    #    +- debian.8-x64
 | 
				
			||||||
 | 
					    # +
 | 
				
			||||||
 | 
					    for f in os.listdir("packages"):        
 | 
				
			||||||
 | 
					        if f.endswith("zip") and "x64" in f and classify_package(f):
 | 
				
			||||||
 | 
					            print(f)
 | 
				
			||||||
 | 
					            os_name, package_dir, ext, dst = classify_package(f)                        
 | 
				
			||||||
 | 
					            zip_ref = zipfile.ZipFile("packages/%s" % f, 'r')
 | 
				
			||||||
 | 
					            zip_ref.extract("%s/bin/libz3.%s" % (package_dir, ext), "tmp")
 | 
				
			||||||
 | 
					            mk_dir("out/runtimes/%s" % dst)
 | 
				
			||||||
 | 
					            shutil.move("tmp/%s/bin/libz3.%s" % (package_dir, ext), "out/runtimes/%s/." % dst)
 | 
				
			||||||
 | 
					            if "win" in f:
 | 
				
			||||||
 | 
					                mk_dir("out/lib/netstandard1.0/")
 | 
				
			||||||
 | 
					                for b in ["Microsoft.Z3.dll"]:
 | 
				
			||||||
 | 
					                    zip_ref.extract("%s/bin/%s" % (package_dir, b), "tmp")
 | 
				
			||||||
 | 
					                    shutil.move("tmp/%s/bin/%s" % (package_dir, b), "out/lib/netstandard1.0/%s" % b)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def create_nuget_spec():
 | 
				
			||||||
 | 
					    mk_project.init_version()
 | 
				
			||||||
 | 
					    contents = """<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
 | 
				
			||||||
 | 
					    <metadata>
 | 
				
			||||||
 | 
					        <id>Microsoft.Z3.x64</id>
 | 
				
			||||||
 | 
					        <version>%s</version>
 | 
				
			||||||
 | 
					        <authors>Microsoft</authors>
 | 
				
			||||||
 | 
					        <description>Z3 is a satisfiability modulo theories solver from Microsoft Research.</description>
 | 
				
			||||||
 | 
					        <copyright>Copyright Microsoft Corporation. All rights reserved.</copyright>
 | 
				
			||||||
 | 
					        <tags>smt constraint solver theorem prover</tags>
 | 
				
			||||||
 | 
					        <iconUrl>https://raw.githubusercontent.com/Z3Prover/z3/master/package/icon.jpg</iconUrl>
 | 
				
			||||||
 | 
					        <projectUrl>https://github.com/Z3Prover/z3</projectUrl>
 | 
				
			||||||
 | 
					        <licenseUrl>https://raw.githubusercontent.com/Z3Prover/z3/master/LICENSE.txt</licenseUrl>
 | 
				
			||||||
 | 
					        <repository
 | 
				
			||||||
 | 
					            type="git"
 | 
				
			||||||
 | 
					            url="https://github.com/Z3Prover/z3.git"
 | 
				
			||||||
 | 
					            branch="master"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					        <requireLicenseAcceptance>true</requireLicenseAcceptance>
 | 
				
			||||||
 | 
					        <language>en</language>
 | 
				
			||||||
 | 
					    </metadata>
 | 
				
			||||||
 | 
					</package>"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    with open("out/Microsoft.Z3.x64.nuspec", 'w') as f:
 | 
				
			||||||
 | 
					        f.write(contents % mk_util.get_version_string(3))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def create_nuget_package():
 | 
				
			||||||
 | 
					    subprocess.call(["nuget", "pack"], cwd="out")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
    mk_dir("packages")
 | 
					    mk_dir("packages")
 | 
				
			||||||
    #download_installs()
 | 
					    #download_installs()
 | 
				
			||||||
#    create_nuget_dir()
 | 
					 | 
				
			||||||
    unpack()
 | 
					    unpack()
 | 
				
			||||||
#    create_nuget_package()
 | 
					    create_nuget_spec()
 | 
				
			||||||
 | 
					    create_nuget_package()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
main()
 | 
					main()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,9 +7,12 @@
 | 
				
			||||||
############################################
 | 
					############################################
 | 
				
			||||||
from mk_util import *
 | 
					from mk_util import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def init_version():
 | 
				
			||||||
 | 
					    set_version(4, 8, 3, 0)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
# Z3 Project definition
 | 
					# Z3 Project definition
 | 
				
			||||||
def init_project_def():
 | 
					def init_project_def():
 | 
				
			||||||
    set_version(4, 8, 3, 0)
 | 
					    init_version()
 | 
				
			||||||
    add_lib('util', [], includes2install = ['z3_version.h'])
 | 
					    add_lib('util', [], includes2install = ['z3_version.h'])
 | 
				
			||||||
    add_lib('polynomial', ['util'], 'math/polynomial')
 | 
					    add_lib('polynomial', ['util'], 'math/polynomial')
 | 
				
			||||||
    add_lib('sat', ['util'])
 | 
					    add_lib('sat', ['util'])
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue