Skip to content

Instantly share code, notes, and snippets.

@Jawabiscuit
Last active April 12, 2022 13:26
Show Gist options
  • Save Jawabiscuit/113fdefb4a972eee51507cfd4af16336 to your computer and use it in GitHub Desktop.
Save Jawabiscuit/113fdefb4a972eee51507cfd4af16336 to your computer and use it in GitHub Desktop.
Recipe snippets of rez package.py files

Rez Package Snippets

Tools

late binding functions

This snippet executes during a special context during build-time.

Wiki: Late Binding Functions

@late()
def tools():
    import os

    executables = []

    sitepath = os.path.join(this.root, "Lib", "site-packages", this.name)
    if os.path.exists(sitepath):
        executables.extend(os.listdir(sitepath))
    
    binpath = os.path.join(this.root, "Scripts")
    if os.path.exists(binpath):
        executables.extend(os.listdir(binpath))

    return executables

Variants

early binding

This snippet executes during a special context during build-time.

Wiki: Early Binding Functions

@early()
def variants():
    from rez.package_py_utils import expand_requires

    requires = ["platform-**", "arch-**", "os-**", "python-2.7"]
    return [expand_requires(*requires)]

Private Build Requires

early binding

This snippet executes during a special context during build-time.

Wiki: Early Binding Functions

@early()
def private_build_requires():
    import os

    requires = ["pip-19+"]
    if os.name == "nt":
        return ["msvc-14.16+<14.20"] + requires
    return ["cmake-3"] + requires

Build Commands

pwsh build_commands

@early()
def build_command():
    import os
    import sys

    os.environ["REZ_BUILD_PROJECT_VENDOR_VERSION"] = this.extra["vendor_version"]
    os.environ["REZ_BUILD_PROJECT_PACKAGE_NAME"] = this.extra["winget_package_name"]
    os.environ["REZ_BUILD_PROJECT_OVERRIDE_PARAMS"] = this.extra["winget_override_params"]

    if os.name == "nt":
        command = 'pwsh -File "{0}"'
        prefix = "%REZ_BUILD_SOURCE_PATH%"
        script = "rezbuild.ps1"

        return command.format(os.path.join(prefix, script))

Commands

command alias

In this snippet an alias to be used in a rez env context is created.

def commands():
    import os

    env.PATH.prepend(os.path.join(this.root, this.name, "bin"))

    if os.name == "nt":
        alias("pycharm", "pycharm64")

resolve package command

Values are accessible via the resolve package command directly or through expansion. The end result of resolve.rez.root here is the same as the expansion "$REZ_REZ_ROOT" or "{resolve.rez.root}", but generally using the command is preferable on Windows. In this particular example, if expansion is used, the value of rez_cmake_module_path would have "\" instead of "/" in it.

Wiki: resolve package command

def commands():
    import os

    rez_cmake_module_path = os.path.join(
        resolve.rez.root,
        "rezplugins",
        "build_system",
        "cmake_files"
    ).replace("\\", "/")

    env.CMAKE_MODULE_PATH.prepend(rez_cmake_module_path)

Custom Package Attributes

extra attribute

In this snippet a custom package attribute named "extra" is defined and used during build-time.

extra = {
    "vendor_version": version,
    "winget_package_name": "ShareX.ShareX",
    "winget_override_params": "/verysilent /suppressmsgboxes /tasks=!createdesktopicon,createsendtoicon",
}

Powershell Rez Build

install files

Selectively copy content from binary build dir to install dir

Source: ffmpeg build.ps1

if (!($env:REZ_BUILD_INSTALL -eq "1")) {
    Write-Host "Nothing more to do. Use 'rez-build -i' to install."
    Exit 0
}

Write-Host "Installing..." -ForegroundColor "Green"

Push-Location ".\$env:REZ_BUILD_PROJECT_NAME-$env:REZ_BUILD_PROJECT_VERSION"

Get-ChildItem -Directory . | Where-Object {
    $_.Name -like "bin" -or
    $_.Name -like "doc" -or
    $_.Name -like "presets"
} | ForEach-Object {
    Copy-Item -Path $_ -Destination $env:REZ_BUILD_INSTALL_PATH -Recurse -Force
}

Pop-Location
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment