{%- macro RenderPackages(target) -%}
{%-     set packages = [] -%}
{%-     if target.packages|length -%}
{%-         set packages = packages + target.packages -%}
{%-     endif -%}
{%-     if target.mpackages|length -%}
{%-         if packages|length -%}
{#-             Skip duplicating packages -#}
{%-             set mpackages = target.mpackages|rejectattr('name', 'in', packages|map(attribute='name')) -%}
{%-             if mpackages|length -%}
{%-                 set packages = packages + mpackages -%}
{%-             endif -%}
{%-         else -%}
{%-             set packages = packages + target.mpackages -%}
{%-         endif -%}
{%-     endif -%}
{%-     set runs_packages = target.custom_runs|selectattr('cmake_packages')|map(attribute='cmake_packages')|sum -%}
{%-     if runs_packages|length -%}
{%-         if packages|length -%}
{#-             Skip duplicating packages -#}
{%-             set runs_packages = runs_packages|rejectattr('name', 'in', packages|map(attribute='name')) -%}
{%-             if runs_packages|length -%}
{%-                 set packages = packages + runs_packages -%}
{%-             endif -%}
{%-         else -%}
{%-             set packages = packages + runs_packages -%}
{%-         endif -%}
{%-     endif -%}
{%-     if packages|length -%}
{%-         set simple_packages = packages|rejectattr('components') -%}
{%-         set complex_packages = packages|selectattr('components') -%}
{%-         if simple_packages|length -%}
{%-             for package_name in simple_packages|map(attribute='name')|unique %}
find_package({{ package_name }} REQUIRED)
{%              endfor -%}
{%-         endif -%}
{%-         if complex_packages|length -%}
{%-             for package in complex_packages %}
find_package({{ package.name }} REQUIRED
{%-                 if package.components|length %} COMPONENTS
{%-                     for component in package.components %}
  {{ component }}
{%                      endfor -%}
{%-                 endif -%}
)
{%              endfor -%}
{%-         endif -%}
{%-     endif -%}
{%- endmacro -%}

{%- if target is defined -%}
{{ RenderPackages(target) }}
{%- endif -%}
{%- if extra_targets|length -%}
{%-     for extra_target in extra_targets -%}
{{ RenderPackages(extra_target) }}
{%-     endfor -%}
{%- endif -%}