Automate build product distribution¶
Craftr provides a Archive
class that
can be used to easily create an archive of the products that are
generated by the build, in the same step!
# craftr_module(test)
from craftr import *
from craftr.ext import platform, archive as _archive, git as _git
git = _git.Git(project_dir)
binary = platform.ld.link(
inputs = platform.cc.compile(
sources = path.glob('src/*.c')
),
output = 'main'
)
@task(requires = [binary])
def archive():
name = '{}-{}-{}'.format(project_name, git.describe(), platform.name)
archive = _archive.Archive(prefix = name, base_dir = project_dir)
archive.add(binary.outputs)
archive.add('res')
archive.save()
info("Archive created:", path.normpath(archive.name, session.cwd))
Below you can find an example invokation of the script on Windows:
λ craftr .archive -v
detected ninja v1.6.0
cd "build"
load 'craftr.ext.test'
(craftr.ext.platform, line 74): Detected VS architecture: amd64
exporting 'build.ninja'
rts listening at 127.0.0.1:54411
$ ninja test.archive -v
[1/3] "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe" /nologo /c c:\users\niklas\desktop\tes\src\main.c /Foc:\users\niklas\desktop\tes\build\test\obj\main.obj "/IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "/IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "/IC:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" "/IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "/IC:\Program Files (x86)\Windows Kits\8.1\include\\shared" "/IC:\Program Files (x86)\Windows Kits\8.1\include\\um" "/IC:\Program Files (x86)\Windows Kits\8.1\include\\winrt" /DWIN32 /D_WIN32 /W4 /Od /showIncludes
[2/3] "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\link.exe" /nologo c:\users\niklas\desktop\tes\build\test\obj\main.obj /OUT:c:\users\niklas\desktop\tes\build\test\main.exe "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64" /LIBPATH:C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral" /LIBPATH:\Microsoft.VCLibs\14.0\References\CommonConfiguration\neutral
[3/3] craftr-rts-invoke test.archive
(craftr.ext.:rts:): [127.0.0.1:54412] connection accepted
(craftr.ext.:rts:): [127.0.0.1:54412] @@ test.archive()
(craftr.ext.test, line 20): Archive created: c:\users\niklas\desktop\tes\test-v1.1-win.zip