Skip to content

Commit

Permalink
Split make.aql into separate functions. Moved generation of README.tx…
Browse files Browse the repository at this point in the history
…t content into a separate builder function.
  • Loading branch information
menify committed Dec 9, 2015
1 parent 313fb2b commit 58b6d55
Show file tree
Hide file tree
Showing 7 changed files with 181 additions and 102 deletions.
7 changes: 6 additions & 1 deletion aql/builtin_tools/aql_builder_exec_method.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,12 @@ def build(self, source_entities, targets):
# -----------------------------------------------------------

def get_trace_name(self, source_entities, brief):
name = self.method_name
name = self.method.__doc__
if name:
name = name.strip().split('\n')[0].strip()

if not name:
name = self.method_name

if not brief:
args = ''
Expand Down
2 changes: 1 addition & 1 deletion aql/main/aql_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def __init__(self):
self.name = "Aqualid"
self.module = "aqualid"
self.description = "General purpose build system."
self.version = "0.6.2"
self.version = "0.7"
self.date = None
self.url = 'https://github.com/aqualid'
self.license = "MIT License"
Expand Down
6 changes: 4 additions & 2 deletions aql/main/aql_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -574,12 +574,14 @@ def __init__(self, project):
config = self.project.config

tools.load_tools(config.default_tools_path)
tools.load_tools(config.tools_path)

if tools.empty():
embedded_tools_path = _extract_embedded_tools()
if embedded_tools_path:
tools.load_tools(embedded_tools_path)

tools.load_tools(config.tools_path)

self.tools = tools

# -----------------------------------------------------------
Expand Down Expand Up @@ -948,7 +950,7 @@ def require_modules(self, nodes, dependencies):

# -----------------------------------------------------------

# TODO: It works not fully correctly yet. See test aq_test_sync_modules
# TODO: It works not fully correctly yet. See test test_bm_sync_modules
# def SyncModules( self, nodes ):
# nodes = tuple( node for node in to_sequence( nodes )
# if isinstance( node, Node ) )
Expand Down
9 changes: 3 additions & 6 deletions aql/nodes/aql_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -494,9 +494,8 @@ def __getitem__(self, source):
except KeyError:
raise ErrorNodeUnknownSource(source)

# ==============================================================================


# ==============================================================================
class NodeFilter (object):

__slots__ = (
Expand Down Expand Up @@ -547,9 +546,8 @@ def get_entities(self):

return entities

# ==============================================================================


# ==============================================================================
class NodeTagsFilter(NodeFilter):
__slots__ = (
'tags',
Expand All @@ -566,9 +564,8 @@ def get_entities(self):
return tuple(entity for entity in entities
if entity.tags and (entity.tags & tags))

# ==============================================================================


# ==============================================================================
class NodeIndexFilter(NodeFilter):
__slots__ = (
'index',
Expand Down
225 changes: 156 additions & 69 deletions make/make.aql
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
import re

import aql

Expand All @@ -11,108 +12,194 @@ from setup_settings import UNIX_SCRIPT_PATH, \
STANDALONE_WINDOWS_SCRIPT, \
MANIFEST, \
AQL_MODULE_PATH, \
SETUP_SCRIPT
generate_setup_script


# ==============================================================================
def _make_module(aql_tool, core_dir):
aql_module = aql_tool.LinkModule(core_dir, target='__init__')

Alias('link', aql_module, "Make AQL module.")

core_dir = os.path.abspath('../aql')
tools_path = GetProjectConfig().tools_path
dist_dir = './install'
return aql_module

SetBuildDir('output')
options.build_dir_name = ''

aql_tool = AddTool(AqlBuildTool)
# ==============================================================================
def strip_readme(builder, source_entities, targets):
"""
Strip README
"""
md_link_re = re.compile("\[.*\]\(.+\)")

readme_path = source_entities[0].get()

readme = aql.read_text_file(readme_path)
lines = []
for line in readme.split('\n'):
if line.startswith('#') or md_link_re.search(line):
continue
lines.append(line)

aql_module = aql_tool.LinkModule(core_dir, target='__init__')
readme = '\n'.join(lines).strip()

Alias('link', aql_module, "Make AQL module.")
Default(aql_module)
target = builder.make_simple_entity(readme)
targets.add_target_entity(target)

# -----------------------------------------------------------

tools_pack = aql_tool.PackTools(tools_path, target='tools')
# ==============================================================================
def write_setup_script(builder, source_entities, targets, setup_dir):
"""
Write Setup Script
"""
long_description = source_entities[0].get()

setup_script = generate_setup_script(long_description)
setup_dir = builder.get_target_dir(setup_dir)

target = os.path.join(setup_dir, 'setup.py')

standalone = aql_tool.LinkStandalone(aql_module, tools_pack, target="aql.py")
aql.write_text_file(target, setup_script)
targets.add_target_files(target)

info = aql.get_aql_info()
standalone_name = dist_dir + \
"/{name}-{version}-standalone".format(name=info.name, version=info.version)

standalone_zip = tools.CreateZip(standalone,
Entity(STANDALONE_WINDOWS_SCRIPT, 'aql.cmd'),
rename=[('aql', standalone)],
target=standalone_name)
# ==============================================================================
def _make_setup_script(aql_module, tools_path):
setup_dir = 'setup/'

module_dir = setup_dir + AQL_MODULE_PATH

standalone_tar = tools.CreateTar(standalone,
rename=[('aql', standalone)],
target=standalone_name)
mod = tools.CopyFileAs(aql_module, target=module_dir + '/__init__.py')

Alias('local', [standalone_zip, standalone_tar],
"Create standalone distributions.")
tools_files = tools.FindFiles(tools_path, mask="*.py")
aql_tools = tools.CopyFiles(tools_files, basedir=tools_path,
target=module_dir + '/tools')

# -----------------------------------------------------------
stripped_readme = tools.Method(File('../README.md'), method=strip_readme)

setup_dir = 'setup/'
readme_txt = tools.WriteFile(stripped_readme,
target=setup_dir + 'README.txt')

module_dir = setup_dir + AQL_MODULE_PATH
manifest = tools.WriteFile(MANIFEST, target=setup_dir + "MANIFEST.in")

mod = tools.CopyFileAs(aql_module, target=module_dir + '/__init__.py')
win_script = tools.WriteFile(WINDOWS_SCRIPT,
target=setup_dir + WINDOWS_SCRIPT_PATH,
binary=True)

tools_files = tools.FindFiles(tools_path, mask="*.py")
aql_tools = tools.CopyFiles(tools_files, basedir=tools_path,
target=module_dir + '/tools')
unix_script = tools.WriteFile(UNIX_SCRIPT,
target=setup_dir + UNIX_SCRIPT_PATH,
binary=True)

readme = tools.CopyFileAs('../README.md', target=setup_dir + 'README.txt')
setup_script = tools.Method(stripped_readme, method=write_setup_script,
args=(setup_dir,))

manifest = tools.WriteFile(MANIFEST, target=setup_dir + "MANIFEST.in")
all_nodes = [mod, aql_tools, readme_txt, manifest,
win_script, unix_script, setup_script]

win_script = tools.WriteFile(WINDOWS_SCRIPT,
target=setup_dir + WINDOWS_SCRIPT_PATH,
binary=True)
Alias('setup', all_nodes, "Create setup.py script.")

unix_script = tools.WriteFile(UNIX_SCRIPT,
target=setup_dir + UNIX_SCRIPT_PATH,
binary=True)
# ----------------------------------------------------------

setup_script = tools.WriteFile(SETUP_SCRIPT,
target=setup_dir + "setup.py")
copy_setup = tools.CopyFiles(all_nodes,
basedir=DirName(setup_script),
target='..')

Alias('setup_dir',
[mod, aql_tools, readme, manifest,
win_script, unix_script, setup_script],
"Create distutils folder.")
Alias('copy_setup', copy_setup,
"Copy setup.py files into the root folder.")

copy_setup = tools.CopyFiles(mod, aql_tools, readme, manifest,
win_script, unix_script, setup_script,
basedir=DirName(setup_script),
target='..')
return setup_script, all_nodes

Alias('copy_setup', copy_setup)

sdist = tools.CreateDist(setup_script, target=dist_dir,
command="sdist", args="--formats=zip,bztar")
# ==============================================================================
def _make_standalone(aql_tool, aql_module, tools_path, dist_dir):
tools_pack = aql_tool.PackTools(tools_path, target='tools')

wdist32 = tools.CreateDist(setup_script, target=dist_dir, command="bdist",
args=["--plat-name=win32", "--formats=wininst"])
standalone = aql_tool.LinkStandalone(aql_module, tools_pack,
target="aql.py")

wdist64 = tools.CreateDist(setup_script,
target=dist_dir,
command="bdist",
args=["--plat-name=win-amd64", "--formats=wininst"])
info = aql.get_aql_info()
standalone_name = dist_dir + \
"/{name}-{version}-standalone".format(name=info.name,
version=info.version)

install_user = tools.InstallDist(setup_script, user=True)
standalone_zip = tools.CreateZip(standalone,
Entity(STANDALONE_WINDOWS_SCRIPT,
'aql.cmd'),
rename=[('aql', standalone)],
target=standalone_name)

install_system = tools.InstallDist(setup_script, user=False)
standalone_tar = tools.CreateTar(standalone,
rename=[('aql', standalone)],
target=standalone_name)

Depends([sdist, wdist32, wdist64, install_user, install_system],
[mod, aql_tools, unix_script, win_script, manifest, readme])
Alias('local', [standalone_zip, standalone_tar],
"Create standalone distributions.")


# ==============================================================================
def _make_dists(setup_script, dist_dir, setup_nodes):
sdist = tools.CreateDist(setup_script, target=dist_dir,
command="sdist", args="--formats=zip,bztar")

wdist32 = tools.CreateDist(setup_script, target=dist_dir, command="bdist",
args=["--plat-name=win32",
"--formats=wininst"])

wdist64 = tools.CreateDist(setup_script, target=dist_dir, command="bdist",
args=["--plat-name=win-amd64",
"--formats=wininst"])

Depends([sdist, wdist32, wdist64], setup_nodes)

Alias('sdist', sdist, "Build source distributions.")
Alias('wdist', [wdist32, wdist64], "Build Windows distributions.")

return sdist, wdist32, wdist64


# ==============================================================================
def _install_dists(setup_script, setup_nodes):
install_user = tools.InstallDist(setup_script, user=True)

Sync(wdist32, wdist64, sdist, install_user, install_system)
install_system = tools.InstallDist(setup_script, user=False)

Depends([install_user, install_system], setup_nodes)

Alias('install', install_user,
"Install distribution for the current user only.")

Alias('install_system', install_system,
"Install distribution for all users.")

return install_user, install_system


# ==============================================================================
def build():
core_dir = os.path.abspath('../aql')
dist_dir = './install'

tools_path = GetProjectConfig().tools_path

aql_tool = AddTool(AqlBuildTool)

aql_module = _make_module(aql_tool, core_dir)

setup_script, setup_nodes = _make_setup_script(aql_module, tools_path)

_make_standalone(aql_tool, aql_module, tools_path, dist_dir)

dists = _make_dists(setup_script, dist_dir, setup_nodes)

installs = _install_dists(setup_script, setup_nodes)

Sync(dists, installs)

Default(aql_module)


# ==============================================================================

SetBuildDir('output')
options.build_dir_name = ''

Alias('sdist', sdist, "Build source distributions.")
Alias('wdist', [wdist32, wdist64], "Build Windows distributions.")
Alias('install', install_user,
"Install distribution for the current user only.")
Alias('install_system', install_system, "Install distribution for all users.")
build()
Loading

0 comments on commit 58b6d55

Please sign in to comment.