3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-06 09:34:08 +00:00

build generated files outside of src

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2018-11-15 16:17:04 -08:00
commit 4509caf102
2 changed files with 75 additions and 21 deletions

View file

@ -14,6 +14,10 @@ import urllib.request
import zipfile
import sys
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())
@ -27,36 +31,83 @@ def download_installs():
for asset in data['assets']:
url = asset['browser_download_url']
name = asset['name']
if "x64" not in name:
continue
print("Downloading ", url)
sys.stdout.flush()
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():
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
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():
mk_dir("packages")
download_installs()
# create_nuget_dir()
unpack()
# create_nuget_package()
create_nuget_spec()
create_nuget_package()
main()

View file

@ -7,9 +7,12 @@
############################################
from mk_util import *
def init_version():
set_version(4, 8, 3, 0)
# Z3 Project definition
def init_project_def():
set_version(4, 8, 3, 0)
init_version()
add_lib('util', [], includes2install = ['z3_version.h'])
add_lib('polynomial', ['util'], 'math/polynomial')
add_lib('sat', ['util'])