Bug 2090823 - Review Request: rocm-opencl - ROCm OpenCL Runtime
Summary: Review Request: rocm-opencl - ROCm OpenCL Runtime
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Luya Tshimbalanga
QA Contact: Fedora Extras Quality Assurance
Jeremy Newton
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2022-05-26 15:49 UTC by Jeremy Newton
Modified: 2022-07-14 01:44 UTC (History)
7 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2022-07-14 01:44:09 UTC
Type: ---
Embargoed:
luya_tfz: fedora-review+


Attachments (Terms of Use)
Full Review (9.27 KB, text/plain)
2022-07-05 01:36 UTC, Luya Tshimbalanga
luya_tfz: review+
Details

Description Jeremy Newton 2022-05-26 15:49:37 UTC
Spec URL: https://mystro256.fedorapeople.org/rocm-opencl.spec
SRPM URL: https://mystro256.fedorapeople.org/rocm-opencl-5.1.3-1.fc37.src.rpm
Description:
ROCm OpenCL language runtime.
Supports offline and in-process/in-memory compilation.

Fedora Account System Username: mystro256
COPR Build: https://copr.fedorainfracloud.org/coprs/mystro256/rocm-opencl/build/4443706/

Notes:
- Full disclosure, I am an AMD employee, but this package is not a product of AMD, nor is it any way affiliated with my employment. I am working ROCm Fedora packages purely out of my own interest.
- ROCclr is a middleware library that isn't supposed to be shared since there's no ABI/API guarentees. It's only used by two ROCm components: OpenCL and HIP. If you dig through my COPR history, you can see I was working on unbundling ROCclr related bits for HIP, but after working with upstream over email, I think I can put that on hold for now. HIP has a lot of packaging related issues, so I'm thinking to start with OpenCL for now and look into packaging HIP further down the road. There's a thread on the Debian mailing list, as I was working with them to find a mutually viable solution for ROCclr:
https://lists.debian.org/debian-ai/2022/05/msg00007.html
- I'm not sure what to do with cltrace, as it's more of a library for debugging. I could put it in its own package, or exclude it altogether. Eitherway, I added a soversion to avoid an rpmlint error, but after talking to upstream, they don't want to add this since they don't guarentee ABI. I figure using the major.minor version as the version is pretty safe since patch version bumps (e.g. 5.1.0 to 5.1.3) don't tend to contain breaking changes.
- OpenCL 2.2 headers are bundled because it doesn't compile against latest. I think this would be a nice thing to fix, but might take some work and upstream involvement.
- 32bit doesn't work, nor is it very valuable. I added an ExclusiveArch based on the kernel support required for rocm-opencl.

Comment 1 Jeremy Newton 2022-05-26 15:49:57 UTC
RPMLint Ouput:

> rocm-opencl-debuginfo.x86_64: E: statically-linked-binary /usr/lib/debug/.dwz/rocm-opencl-5.1.3-1.fc37.x86_64

I assume this is due to librocclr.a, see notes above.
If you see something else I missed, please let me know.

> rocm-clinfo-debuginfo.x86_64: W: unstripped-binary-or-object /usr/lib/debug/usr/bin/rocm-clinfo-5.1.3-1.fc37.x86_64.debug
> rocm-opencl-debuginfo.x86_64: W: unstripped-binary-or-object /usr/lib/debug/.dwz/rocm-opencl-5.1.3-1.fc37.x86_64
> rocm-opencl-debuginfo.x86_64: W: unstripped-binary-or-object /usr/lib/debug/usr/lib64/libamdocl64.so-5.1.3-1.fc37.x86_64.debug
> rocm-opencl-debuginfo.x86_64: W: unstripped-binary-or-object /usr/lib/debug/usr/lib64/libcltrace.so.5.1.3-5.1.3-1.fc37.x86_64.debug
> rocm-clinfo-debuginfo.x86_64: E: shared-library-without-dependency-information /usr/lib/debug/usr/bin/rocm-clinfo-5.1.3-1.fc37.x86_64.debug
> rocm-opencl-debuginfo.x86_64: E: shared-library-without-dependency-information /usr/lib/debug/usr/lib64/libamdocl64.so-5.1.3-1.fc37.x86_64.debug
> rocm-opencl-debuginfo.x86_64: E: shared-library-without-dependency-information /usr/lib/debug/usr/lib64/libcltrace.so.5.1.3-5.1.3-1.fc37.x86_64.debug
> rocm-opencl-debuginfo.x86_64: E: missing-PT_GNU_STACK-section /usr/lib/debug/.dwz/rocm-opencl-5.1.3-1.fc37.x86_64
> rocm-opencl-debuginfo.x86_64: W: hidden-file-or-dir /usr/lib/debug/.dwz
> rocm-opencl-debuginfo.x86_64: W: hidden-file-or-dir /usr/lib/debug/.dwz
> rocm-clinfo-debuginfo.x86_64: W: dangling-relative-symlink /usr/lib/debug/.build-id/3a/555c7d1d0dfb0d4b1d6fec2cf05d6801483c44 ../../../.build-id/3a/555c7d1d0dfb0d4b1d6fec2cf05d6801483c44
> rocm-opencl-debuginfo.x86_64: W: dangling-relative-symlink /usr/lib/debug/.build-id/3e/32f661c3de7f2f66e542eb3c2516f5b6793a99 ../../../.build-id/3e/32f661c3de7f2f66e542eb3c2516f5b6793a99
> rocm-opencl-debuginfo.x86_64: W: dangling-relative-symlink /usr/lib/debug/.build-id/ad/c656bfc8e66e664ad14a4e82c94e19d7f05c1d ../../../.build-id/ad/c656bfc8e66e664ad14a4e82c94e19d7f05c1d

I'm actually not quite sure about these. If someone has some experience or suggestions, please feel free to chime in.

> rocm-clinfo.x86_64: W: no-manual-page-for-binary rocm-clinfo

A manpage would be nice, but not required.

> rocm-clinfo.x86_64: W: no-documentation
> rocm-clinfo-debuginfo.x86_64: W: no-documentation
> rocm-opencl.x86_64: W: no-documentation
> rocm-opencl-debuginfo.x86_64: W: no-documentation
> rocm-opencl-debugsource.x86_64: W: no-documentation
> rocm-opencl-devel.x86_64: W: no-documentation

Ignored, the only documentation upstream provides is a README for building/installing from source.

Comment 2 Jeremy Newton 2022-05-26 16:02:12 UTC
For reference, ROCm-OpenCL and ROCclr are not mutually exclusive components. They require each others sources to compile.
In constrast, HIP just needs the ROCclr binary and headers to compile. It causes a problematic situation where building HIP right now requires bundling openCL (some) and ROCclr (all) sources.

I think it leads to two conclusions:
- ROCclr should be built and packaged together, so we can provide hip a "rocclr-devel" package (or equivalent) as a buildrequires
- ROCclr, hip, and OpenCL should live in the same tree, since there's a lot of overlap in sources

If you look through the Debian AI list thread I mentioned above, upstream is leaning towards the latter, so I'm thinking I can introduce hip as a subpackage of rocm-opencl later on if upstream goes this way.

Comment 3 Tom Stellard 2022-05-26 16:27:41 UTC
Is RPMLint meant to be run on the debuginfo packages?  From what I can tell, the Zuul CI we use doesn't run RPMLint on debuginfo packages.  It also doesn't make sense to warn about unstripped debuginfo files, since that is all the data take from object files when the are stripped.

Comment 4 Jeremy Newton 2022-05-26 17:36:26 UTC
> Is RPMLint meant to be run on the debuginfo packages?  From what I can tell, the Zuul CI we use doesn't run RPMLint on debuginfo packages.
> It also doesn't make sense to warn about unstripped debuginfo files, since that is all the data take from object files when the are stripped.

I thought rpmlint was designed to run against all packages, including debuginfo.
I've always ran rpmlint against all my build output and never had a complaint before.

Perhaps, my interpretation of the fedora-review item "Rpmlint is run on all rpms the build produces" is incorrect.
Although maybe rpmlint doesn't handle something correctly in this case, such as not correctly ignoring the files that should be unstripped.

Comment 5 Petr Pisar 2022-05-27 06:34:18 UTC
A new rpmlint start to process debuginfo packages, but nobody tuned rpmlint to process them correctly or rpkg to skip them (bug #2052451). Please ignore them.

Comment 6 Jeremy Newton 2022-05-29 02:40:52 UTC
Ok thank you Petr, if we ignore the debuginfo, then there's no issues in the rpmlint output.

Comment 7 Luya Tshimbalanga 2022-07-03 19:19:55 UTC
Hello Jeremy,

Here is the review:

From the spec file:

How about replacing

BuildRequires:  numactl-devel
BuildRequires:  ocl-icd-devel

by

BuildRequires:  pkgconfig(numa)
BuildRequires:  pkgconfig(ocl-icd)


Issues:
=======
- If your application is a C or C++ application you must list a
  BuildRequires against gcc, gcc-c++ or clang.
  Note: No gcc, gcc-c++ or clang found in BuildRequires
  See: https://docs.fedoraproject.org/en-US/packaging-guidelines/C_and_C++/
Comment: maybe add clang in this case, it seems the fedora-review is out of date.  

- Development (unversioned) .so files in -devel subpackage, if present.
  Note: Unversioned so-files directly in %_libdir.
  See: https://docs.fedoraproject.org/en-US/packaging-
  guidelines/#_devel_packages


===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig not called in %post and %postun for Fedora 28 and later.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "MIT License", "Khronos License". 41
     files have unknown license. Detailed output of licensecheck in
     /home/luya/Documents/fedora-review/2090823-rocm-
     opencl/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[x]: %build honors applicable compiler flags or justifies otherwise.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[-]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[-]: Useful -debuginfo package or justification otherwise.
[x]: Package is not known to require an ExcludeArch tag.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: %config files are marked noreplace or the reason is justified.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package must not depend on deprecated() packages.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: No %config files under /usr.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 0 bytes in 0 files.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[x]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[x]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in rocm-
     clinfo
[x]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[-]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
     Note: gpgverify is not used.
[-]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: There are rpmlint messages (see attachment).
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Cannot parse rpmlint output:


Rpmlint (debuginfo)
-------------------
Cannot parse rpmlint output:



Rpmlint (installed packages)
----------------------------
Cannot parse rpmlint output:


Unversioned so-files
--------------------
rocm-opencl: /usr/lib64/libamdocl64.so

Source checksums
----------------
https://github.com/ROCm-Developer-Tools/ROCclr/archive/refs/tags/rocm-5.1.3.tar.gz#/ROCclr-5.1.3.tar.gz :
  CHECKSUM(SHA256) this package     : ddee63cdc6515c90bab89572b13e1627b145916cb8ede075ef8446cbb83f0a48
  CHECKSUM(SHA256) upstream package : ddee63cdc6515c90bab89572b13e1627b145916cb8ede075ef8446cbb83f0a48
https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime/archive/refs/tags/rocm-5.1.3.tar.gz#/ROCm-OpenCL-Runtime-5.1.3.tar.gz :
  CHECKSUM(SHA256) this package     : 44a7fac721abcd93470e1a7e466bdea0c668c253dee93e4f1ea9a72dbce4ba31
  CHECKSUM(SHA256) upstream package : 44a7fac721abcd93470e1a7e466bdea0c668c253dee93e4f1ea9a72dbce4ba31


Requires
--------
rocm-opencl (rpmlib, GLIBC filtered):
    config(rocm-opencl)
    ld-linux-x86-64.so.2()(64bit)
    libc.so.6()(64bit)
    libgcc_s.so.1()(64bit)
    libgcc_s.so.1(GCC_3.0)(64bit)
    libgcc_s.so.1(GCC_3.3.1)(64bit)
    libgcc_s.so.1(GCC_3.4)(64bit)
    libhsa-runtime64.so.1()(64bit)
    libhsa-runtime64.so.1(ROCR_1)(64bit)
    libm.so.6()(64bit)
    libnuma.so.1()(64bit)
    libnuma.so.1(libnuma_1.1)(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.5)(64bit)
    libstdc++.so.6(CXXABI_1.3.8)(64bit)
    libstdc++.so.6(CXXABI_1.3.9)(64bit)
    ocl-icd
    opencl-filesystem
    rocm-comgr
    rtld(GNU_HASH)

rocm-opencl-devel (rpmlib, GLIBC filtered):
    libcltrace.so.5.1()(64bit)
    rocm-opencl(x86-64)

rocm-clinfo (rpmlib, GLIBC filtered):
    libOpenCL.so.1()(64bit)
    libOpenCL.so.1(OPENCL_1.0)(64bit)
    libOpenCL.so.1(OPENCL_1.2)(64bit)
    libc.so.6()(64bit)
    libgcc_s.so.1()(64bit)
    libgcc_s.so.1(GCC_3.0)(64bit)
    libgcc_s.so.1(GCC_3.3.1)(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.1)(64bit)
    libstdc++.so.6(CXXABI_1.3.9)(64bit)
    rtld(GNU_HASH)

rocm-opencl-debuginfo (rpmlib, GLIBC filtered):

rocm-opencl-debugsource (rpmlib, GLIBC filtered):



Provides
--------
rocm-opencl:
    bundled(opencl-headers)
    config(rocm-opencl)
    libamdocl64.so()(64bit)
    libamdocl64.so(OPENCL_1.0)(64bit)
    libamdocl64.so(OPENCL_1.1)(64bit)
    libamdocl64.so(OPENCL_1.2)(64bit)
    libamdocl64.so(OPENCL_2.0)(64bit)
    libamdocl64.so(OPENCL_2.1)(64bit)
    libcltrace.so.5.1()(64bit)
    libcltrace.so.5.1(CLTRACE_1.0)(64bit)
    rocm-opencl
    rocm-opencl(x86-64)

rocm-opencl-devel:
    rocm-opencl-devel
    rocm-opencl-devel(x86-64)

rocm-clinfo:
    rocm-clinfo
    rocm-clinfo(x86-64)

rocm-opencl-debuginfo:
    debuginfo(build-id)
    libamdocl64.so-5.1.3-1.fc37.x86_64.debug()(64bit)
    libcltrace.so.5.1.3-5.1.3-1.fc37.x86_64.debug()(64bit)
    rocm-opencl-debuginfo
    rocm-opencl-debuginfo(x86-64)

rocm-opencl-debugsource:
    rocm-opencl-debugsource
    rocm-opencl-debugsource(x86-64)

Comment 8 Jeremy Newton 2022-07-04 02:46:41 UTC
(In reply to Luya Tshimbalanga from comment #7)
> Hello Jeremy,
> 
> Here is the review:

Thanks for the review :)

> 
> From the spec file:
> 
> How about replacing
> 
> BuildRequires:  numactl-devel
> BuildRequires:  ocl-icd-devel
> 
> by
> 
> BuildRequires:  pkgconfig(numa)
> BuildRequires:  pkgconfig(ocl-icd)

Sure that sounds good to me.

> 
> 
> Issues:
> =======
> - If your application is a C or C++ application you must list a
>   BuildRequires against gcc, gcc-c++ or clang.
>   Note: No gcc, gcc-c++ or clang found in BuildRequires
>   See: https://docs.fedoraproject.org/en-US/packaging-guidelines/C_and_C++/
> Comment: maybe add clang in this case, it seems the fedora-review is out of
> date.  

No, it seems I forgot gcc; clang-devel is just needed for headers, since it links against libclang.

> 
> - Development (unversioned) .so files in -devel subpackage, if present.
>   Note: Unversioned so-files directly in %_libdir.
>   See: https://docs.fedoraproject.org/en-US/packaging-
>   guidelines/#_devel_packages

Sure, I think this is not strictly needed for OpenCL, but I noticed that the mesa opencl has versioned libs, so we should too.

I'm a bit surprised that rpmlint didn't complain, as it complained about cltrace.

As a TODO, I might want to make a patch to allow setting a soname for the ocl and cltrace libs. Upstream doesn't want this, but I doubt they'll object to adding an option to cmake.

> ...

Here's the new files:

Spec URL: https://mystro256.fedorapeople.org/rocm-opencl.spec
SRPM URL: https://mystro256.fedorapeople.org/rocm-opencl-5.2.0-1.fc37.src.rpm
COPR build: https://copr.fedorainfracloud.org/coprs/mystro256/rocm-opencl/build/4593532/

Notes
------
- The COPR review says the install failed, but looks like a mirror issue. I just updated the rocm-comgr package today, and COPR can't find it on its local mirror.

- Building on f36 requires the following update because I bumped this package to 5.2.0:
https://bodhi.fedoraproject.org/updates/FEDORA-2022-2cee071a16

- I added some logic to allow building the optional test suite, but I haven't enabled it by default, because the code requires disabling security flags. It helps with some HW testing I was doing, but I don't think turning off Fedora's default security compiler flags is a good thing :)

Comment 9 Luya Tshimbalanga 2022-07-05 01:36:08 UTC
Created attachment 1894588 [details]
Full Review

Skipping already reviewed part (full review attached) and addressed fixed.

How about changing

%if 0%{?enable_ocltst}
BuildRequires:  glew-devel
%endif
BuildRequires:  gcc-c++
BuildRequires:  libglvnd-devel

to 

%if 0%{?enable_ocltst}
BuildRequires:  pkgconfig(glew)
%endif
BuildRequires:  gcc-c++
BuildRequires:  pkgconfig(opengl)


If you like, use %autorelease and %autochangelog macros for Release and %changelog respectively.

According the full review, the package is ready for the main repository thus APPROVED. Make sure to implement the above suggestion before importing.

Comment 10 Jeremy Newton 2022-07-05 14:12:41 UTC
(In reply to Luya Tshimbalanga from comment #9)
> Created attachment 1894588 [details]
> Full Review
> 
> Skipping already reviewed part (full review attached) and addressed fixed.
> 
> How about changing
> 
> %if 0%{?enable_ocltst}
> BuildRequires:  glew-devel
> %endif
> BuildRequires:  gcc-c++
> BuildRequires:  libglvnd-devel
> 
> to 
> 
> %if 0%{?enable_ocltst}
> BuildRequires:  pkgconfig(glew)
> %endif
> BuildRequires:  gcc-c++
> BuildRequires:  pkgconfig(opengl)
> 

Sounds good, I can do that before I import.

> 
> If you like, use %autorelease and %autochangelog macros for Release and
> %changelog respectively.

I'm still not quite convinced that it really saves all that much time, but thanks for the tip.

> 
> According the full review, the package is ready for the main repository thus
> APPROVED. Make sure to implement the above suggestion before importing.

Thanks again for the review!

Comment 11 Kevin Fenzi 2022-07-05 15:47:15 UTC
(fedscm-admin):  The Pagure repository was created at https://src.fedoraproject.org/rpms/rocm-opencl

Comment 12 Fedora Update System 2022-07-06 00:08:35 UTC
FEDORA-2022-2cee071a16 has been submitted as an update to Fedora 36. https://bodhi.fedoraproject.org/updates/FEDORA-2022-2cee071a16

Comment 13 Fedora Update System 2022-07-06 02:15:18 UTC
FEDORA-2022-2cee071a16 has been pushed to the Fedora 36 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf upgrade --enablerepo=updates-testing --refresh --advisory=FEDORA-2022-2cee071a16`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2022-2cee071a16

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 14 Fedora Update System 2022-07-14 01:44:09 UTC
FEDORA-2022-2cee071a16 has been pushed to the Fedora 36 stable repository.
If problem still persists, please make note of it in this bug report.


Note You need to log in before you can comment on or make changes to this bug.