Bug 561448

Summary: Review Request: jffi - Java Foreign Function Interface
Product: [Fedora] Fedora Reporter: Mo Morsi <mmorsi>
Component: Package ReviewAssignee: Mamoru TASAKA <mtasaka>
Status: CLOSED NEXTRELEASE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: fedora-package-review, mtasaka, notting
Target Milestone: ---Flags: mtasaka: fedora-review+
j: fedora-cvs+
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2010-05-12 15:36:46 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 561462, 561484    

Description Mo Morsi 2010-02-03 17:02:37 UTC
Spec URL: http://mo.morsi.org/files/jruby/jffi.spec
SRPM URL: http://mo.morsi.org/files/jruby/jffi-0.6.2-1.fc12.src.rpm
Description: An optimized Java interface to libffi

Required by JRuby.

Koji build: http://koji.fedoraproject.org/koji/taskinfo?taskID=1959831

rpmlint -i rpmbuild/RPMS/noarch/jffi-0.6.2-1.fc12.noarch.rpm 
1 packages and 0 specfiles checked; 0 errors, 0 warnings.

rpmlint -i rpmbuild/RPMS/noarch/jffi-javadoc-0.6.2-1.fc12.noarch.rpm 
1 packages and 0 specfiles checked; 0 errors, 0 warnings.

rpmlint -i rpmbuild/SRPMS/jffi-0.6.2-1.fc12.src.rpm 
1 packages and 0 specfiles checked; 0 errors, 0 warnings.

Comment 1 Mamoru TASAKA 2010-02-16 18:37:25 UTC
Some initial notes:

* Using %{version}
  - Using %{version} in Source0 is useful (especially when version is
    upgraded):
    https://fedoraproject.org/wiki/Packaging/SourceURL#Using_.25.7Bversion.7D

* EVR (Epoch-Version-Release) specific java dependency
  - I guess you want "BR: java-devel >= 1:1.6.0" if you want Java OpenJDK
    https://fedoraproject.org/wiki/Packaging/Java#BuildRequires_and_Requires

  - And for consistency I guess java Requires (not BuildRequires) should
    also be EVR specific.

* Fedora specific compilation flags
  - Fedora specific compilation flags are not honored.
-------------------------------------------------------------------
   100  -build-native-library:
   101       [exec] cc -m32 -O2 -fno-omit-frame-pointer -fno-strict-aliasing -DNDEBUG -W -Werror -Wall -Wno-unused -Wno-parentheses -Wundef -I"/builddir/build/BUILD/jffi-0.6.2/build/jni" -I"/builddir/build/BUILD/jffi-0.6.2/build/jni"/jni -I/builddir/build/BUILD/jffi-0.6.2/jni -I"/builddir/build/BUILD/jffi-0.6.2/jni/jffi" -fPIC -I"/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/../include" -I"/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/../include/linux" -I/usr/lib/libffi-3.0.9/include   -D_REENTRANT -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -pthread -march=i586 -mtune=generic -c /builddir/build/BUILD/jffi-0.6.2/jni/jffi/Array.c -o /builddir/build/BUILD/jffi-0.6.2/build/jni/jffi/Array.o
-------------------------------------------------------------------
    You can check the current compilation flags by
    $ rpm --eval %optflags
    https://fedoraproject.org/wiki/Packaging/Guidelines#Compiler_flags

* jni-containing jar file location
  - This jar file uses jni and should be installed under %_libdir/%name
    https://fedoraproject.org/wiki/Packaging/Java#Packaging_JAR_files_that_use_JNI

* Using ln
  - For this please see my comment on bug 561482.

* Documents
  - "COPYING" file (i.e. GPLv3 license text) should be also added to %doc.

Comment 2 Mo Morsi 2010-02-18 01:02:43 UTC
(In reply to comment #1)
> Some initial notes:
> 
> * Using %{version}
>   - Using %{version} in Source0 is useful (especially when version is
>     upgraded):
>     https://fedoraproject.org/wiki/Packaging/SourceURL#Using_.25.7Bversion.7D
>
Source0 URL has been updated to point to recent upstream tarball and this is taken care of.

> * EVR (Epoch-Version-Release) specific java dependency
>   - I guess you want "BR: java-devel >= 1:1.6.0" if you want Java OpenJDK
>     https://fedoraproject.org/wiki/Packaging/Java#BuildRequires_and_Requires
> 
>   - And for consistency I guess java Requires (not BuildRequires) should
>     also be EVR specific.
> 

Done

> * Fedora specific compilation flags
>   - Fedora specific compilation flags are not honored.
> -------------------------------------------------------------------
>    100  -build-native-library:
>    101       [exec] cc -m32 -O2 -fno-omit-frame-pointer -fno-strict-aliasing
> -DNDEBUG -W -Werror -Wall -Wno-unused -Wno-parentheses -Wundef
> -I"/builddir/build/BUILD/jffi-0.6.2/build/jni"
> -I"/builddir/build/BUILD/jffi-0.6.2/build/jni"/jni
> -I/builddir/build/BUILD/jffi-0.6.2/jni
> -I"/builddir/build/BUILD/jffi-0.6.2/jni/jffi" -fPIC
> -I"/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/../include"
> -I"/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/../include/linux"
> -I/usr/lib/libffi-3.0.9/include   -D_REENTRANT -D_LARGEFILE64_SOURCE
> -D_GNU_SOURCE -pthread -march=i586 -mtune=generic -c
> /builddir/build/BUILD/jffi-0.6.2/jni/jffi/Array.c -o
> /builddir/build/BUILD/jffi-0.6.2/build/jni/jffi/Array.o
> -------------------------------------------------------------------
>     You can check the current compilation flags by
>     $ rpm --eval %optflags
>     https://fedoraproject.org/wiki/Packaging/Guidelines#Compiler_flags
> 

Done, a patch was added to add these flags to the jni makefile.

> * jni-containing jar file location
>   - This jar file uses jni and should be installed under %_libdir/%name
>    
> https://fedoraproject.org/wiki/Packaging/Java#Packaging_JAR_files_that_use_JNI
> 
> * Using ln
>   - For this please see my comment on bug 561482.
> 
> * Documents
>   - "COPYING" file (i.e. GPLv3 license text) should be also added to %doc.    

All three are done 

Updated and uploaded new jffi rpm:
Spec URL: http://mo.morsi.org/files/jruby/jffi.spec
SRPM URL: http://mo.morsi.org/files/jruby/jffi-0.6.5-1.fc12.src.rpm

Comment 3 Mamoru TASAKA 2010-02-19 05:44:15 UTC
For 0.6.5-1:

* Compilation issue
  A First of all, now build fails:
    http://koji.fedoraproject.org/koji/taskinfo?taskID=1996972
    This is because -Werror.

  B Even after -Werror is removed, build fails on ppc64:
    http://koji.fedoraproject.org/koji/taskinfo?taskID=1997040
    The failing command is:
------------------------------------------------------------------------
     [exec] cc -m32  -o /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/libjffi-0.6.so  -shared -mimpure-text -static-libgcc -Wl,-soname,libjffi-0.6.so -Wl,-O1  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Array.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Closure.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Exception.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/FastIntInvoke.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/FastLongInvoke.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Foreign.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Function.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Internals.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Invoke.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/LastError.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Library.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Memory.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/MemoryIO.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Struct.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/Type.o  /builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/jffi/deprecated.o -lffi   
     [exec] /usr/bin/ld: crti.o: No such file: No such file or directory
     [exec] collect2: ld returned 1 exit status
     [exec] make: *** [/builddir/build/BUILD/wmeissner-jffi-bbb81f1/build/jni/libjffi-0.6.so] Error 1
-----------------------------------------------------------------------
    Well, -m32 is wrong for ppc64. This is because {jni/libtest}/GNUmakefile
    does not check if the arch is ppc64 or not.... however
    this check is anyway not needed anyway.

* Test
  - Forgot to mention this, however please check if some test programs
    are available or not (as this package contains test/ directory)

* Empty debuginfo
-----------------------------------------------------------------------
jffi-debuginfo.i686: E: debuginfo-without-sources
-----------------------------------------------------------------------
  - Well, I don't know how Java packages treat this by default,
    however generally to create debuginfo rpm corretly, libjffi-0.6.so
    should not be stripped in build process itself and should
    be handled by find-debuginfo.sh and so on.

Comment 4 Mo Morsi 2010-02-23 21:54:19 UTC
(In reply to comment #3)
> For 0.6.5-1:
> 
> * Compilation issue
>   A First of all, now build fails:
>     http://koji.fedoraproject.org/koji/taskinfo?taskID=1996972
>     This is because -Werror.

Patched the source to remove -Werror

> 
>   B Even after -Werror is removed, build fails on ppc64:
>     http://koji.fedoraproject.org/koji/taskinfo?taskID=1997040
>     The failing command is:
>     Well, -m32 is wrong for ppc64. This is because {jni/libtest}/GNUmakefile
>     does not check if the arch is ppc64 or not.... however
>     this check is anyway not needed anyway.

I see the same thing, this isn't a blocker since it builds fine of i686 and x86_64 correct?

> 
> * Test
>   - Forgot to mention this, however please check if some test programs
>     are available or not (as this package contains test/ directory)
> 

Package now includes a check section which runs the test suite. All tests run fine.

> * Empty debuginfo
> -----------------------------------------------------------------------
> jffi-debuginfo.i686: E: debuginfo-without-sources
> -----------------------------------------------------------------------
>   - Well, I don't know how Java packages treat this by default,
>     however generally to create debuginfo rpm corretly, libjffi-0.6.so
>     should not be stripped in build process itself and should
>     be handled by find-debuginfo.sh and so on.    

I'm not getting this error. Instead I get 

W: unstripped-binary-or-object /usr/lib/jffi/libjffi-0.6.so

Removing the call to "strip" in the makefile and marking the shared object as executable does not seem to generate the debuginfo package as detailed online. Unless you know of the fix, I'm leaving this as is as there seem to be other packages that have been approved / accepted in lieu of this warning.

Update spec and srpm:
Spec URL: http://mo.morsi.org/files/jruby/jffi.spec
SRPM URL: http://mo.morsi.org/files/jruby/jffi-0.6.5-2.fc12.src.rpm

Comment 5 Mamoru TASAKA 2010-02-24 20:06:01 UTC
For -2:

(In reply to comment #4)
> >   B Even after -Werror is removed, build fails on ppc64:
> >     http://koji.fedoraproject.org/koji/taskinfo?taskID=1997040
> >     The failing command is:
> >     Well, -m32 is wrong for ppc64. This is because {jni/libtest}/GNUmakefile
> >     does not check if the arch is ppc64 or not.... however
> >     this check is anyway not needed anyway.
> 
> I see the same thing, this isn't a blocker since it builds fine of i686 and
> x86_64 correct?

  * Unless build failure on ppc{,64} cannot really be fixed, please fix.
    - For the issue that -m32 is passed on ppc64, adding
------------------------------------------------------------------
sed -i.cpu -e '/m\$(MODEL)/d' \
        jni/GNUmakefile libtest/GNUmakefile
------------------------------------------------------------------
      at %prep is enough.

  ! Note
    Unless you create ppc{,64} packages, we will have to write "Exclude: ppc pp64"
    declaration on all packages which depend on jffi, which is really not desired
    unless this is really unavoidable.

> > * Test
> >   - Forgot to mention this, however please check if some test programs
> >     are available or not (as this package contains test/ directory)
> > 
> 
> Package now includes a check section which runs the test suite. All tests run
> fine.
  * Well, unfortunately test fails on ppc{,64}, I don't know why,
    need to remove test/ directory on ppc{,64}.

> > * Empty debuginfo
> > -----------------------------------------------------------------------
> > jffi-debuginfo.i686: E: debuginfo-without-sources
> > -----------------------------------------------------------------------
> >   - Well, I don't know how Java packages treat this by default,
> >     however generally to create debuginfo rpm corretly, libjffi-0.6.so
> >     should not be stripped in build process itself and should
> >     be handled by find-debuginfo.sh and so on.    
> 
> I'm not getting this error. Instead I get 
> 
> W: unstripped-binary-or-object /usr/lib/jffi/libjffi-0.6.so

  - Did you try rpmlint on -debuginfo rpm? (by the way, is redhat-rpm-config
    rpm correctly installed?)

> Removing the call to "strip" in the makefile and marking the shared object as
> executable does not seem to generate the debuginfo package as detailed online.

  - It does create debuginfo rpm
    (well, actually as I did not want to check where strip is used in detail,
     I used:
---------------------------------------------------------------------------
mkdir -p BIN
cd BIN
ln -sf /bin/true strip
cd ..
---------------------------------------------------------------------------
     at %prep and after that I added
---------------------------------------------------------------------------
export PATH=$(pwd)/BIN:$PATH
---------------------------------------------------------------------------
     to add %prep, %build, %install

> Unless you know of the fix, I'm leaving this as is as there seem to be other
> packages that have been approved / accepted in lieu of this warning.

  - Unfortunately I am not going to approve any packages unless debuginfo
    rpm issue is properly handled.
  ! Note
    With debuginfo rpm correctly created, rpmlint warns like:
---------------------------------------------------------------------------
jffi-debuginfo.i686: W: spurious-executable-perm /usr/src/debug/wmeissner-jffi-bbb81f1/jni/jffi/jffi.h
---------------------------------------------------------------------------
    Please execute
---------------------------------------------------------------------------
chmod 0644 jni/jffi/jffi.h
---------------------------------------------------------------------------
    at %prep

By the way scratch build result for jffi srpm which I slightly modify
to address ppc{,64} build issue / debuginfo rpm creation issue can
be downloaded from:
http://koji.fedoraproject.org/scratch/mtasaka/task_2012055/
( srpm also there )

Also some other notes:
* build-jar-repository at %prep
  - Usually %prep should be for only expanding source, patching / modifying
    source and so on, so maybe it is better that 
---------------------------------------------------------------------------
mkdir lib/build_lib
build-jar-repository -s -p lib/build_lib junit junit4
---------------------------------------------------------------------------
   lines should be moved to %build.

Comment 6 Mamoru TASAKA 2010-03-04 15:21:40 UTC
ping?

Comment 7 Mo Morsi 2010-03-08 20:32:06 UTC
Sorry for the delay, alot of things in the work queue.


(In reply to comment #5)
> For -2:
> 
> (In reply to comment #4)
> > >   B Even after -Werror is removed, build fails on ppc64:
> > >     http://koji.fedoraproject.org/koji/taskinfo?taskID=1997040
> > >     The failing command is:
> > >     Well, -m32 is wrong for ppc64. This is because {jni/libtest}/GNUmakefile
> > >     does not check if the arch is ppc64 or not.... however
> > >     this check is anyway not needed anyway.
> > 
> > I see the same thing, this isn't a blocker since it builds fine of i686 and
> > x86_64 correct?
> 
>   * Unless build failure on ppc{,64} cannot really be fixed, please fix.
>     - For the issue that -m32 is passed on ppc64, adding
> ------------------------------------------------------------------
> sed -i.cpu -e '/m\$(MODEL)/d' \
>         jni/GNUmakefile libtest/GNUmakefile
> ------------------------------------------------------------------
>       at %prep is enough.
> 
>   ! Note
>     Unless you create ppc{,64} packages, we will have to write "Exclude: ppc
> pp64"
>     declaration on all packages which depend on jffi, which is really not
> desired
>     unless this is really unavoidable.'

I'm having trouble getting it to build in a ppc mock / koji environment in the first place. The link to your koji build doesn't seem available and when I goto run either

koji build --scratch --arch-override ppc64 dist-f14 jffi-0.6.5-3.fc12.src.rpm

or

su - build -c "mock -r fedora-devel-ppc /tmp/jffi-0.6.5-3.fc12.src.rpm "

Neither is successful. In the case of Koji, I get 

"BuildError: No matching arches were found"

I've submitted packages and seen them submitted that don't build on ppc w/out any fuss, I think they get pushed to the architectures they work on and that have all required dependencies, the others are just ignored. 

> 
> > > * Test
> > >   - Forgot to mention this, however please check if some test programs
> > >     are available or not (as this package contains test/ directory)
> > > 
> > 
> > Package now includes a check section which runs the test suite. All tests run
> > fine.
>   * Well, unfortunately test fails on ppc{,64}, I don't know why,
>     need to remove test/ directory on ppc{,64}.
> 
> > > * Empty debuginfo
> > > -----------------------------------------------------------------------
> > > jffi-debuginfo.i686: E: debuginfo-without-sources
> > > -----------------------------------------------------------------------
> > >   - Well, I don't know how Java packages treat this by default,
> > >     however generally to create debuginfo rpm corretly, libjffi-0.6.so
> > >     should not be stripped in build process itself and should
> > >     be handled by find-debuginfo.sh and so on.    
> > 
> > I'm not getting this error. Instead I get 
> > 
> > W: unstripped-binary-or-object /usr/lib/jffi/libjffi-0.6.so
> 
>   - Did you try rpmlint on -debuginfo rpm? (by the way, is redhat-rpm-config
>     rpm correctly installed?)

Ah I was missing that package. Thanks for the tip.

> 
> > Removing the call to "strip" in the makefile and marking the shared object as
> > executable does not seem to generate the debuginfo package as detailed online.
> 
>   - It does create debuginfo rpm
>     (well, actually as I did not want to check where strip is used in detail,
>      I used:
> ---------------------------------------------------------------------------
> mkdir -p BIN
> cd BIN
> ln -sf /bin/true strip
> cd ..
> ---------------------------------------------------------------------------
>      at %prep and after that I added
> ---------------------------------------------------------------------------
> export PATH=$(pwd)/BIN:$PATH
> ---------------------------------------------------------------------------
>      to add %prep, %build, %install
> 
> > Unless you know of the fix, I'm leaving this as is as there seem to be other
> > packages that have been approved / accepted in lieu of this warning.
> 
>   - Unfortunately I am not going to approve any packages unless debuginfo
>     rpm issue is properly handled.

Done. The first patch replaces 'strip' w/ /bin/true, taking care of this error.


>   ! Note
>     With debuginfo rpm correctly created, rpmlint warns like:
> ---------------------------------------------------------------------------
> jffi-debuginfo.i686: W: spurious-executable-perm
> /usr/src/debug/wmeissner-jffi-bbb81f1/jni/jffi/jffi.h
> ---------------------------------------------------------------------------
>     Please execute
> ---------------------------------------------------------------------------
> chmod 0644 jni/jffi/jffi.h
> ---------------------------------------------------------------------------
>     at %prep
> 

Done.

> By the way scratch build result for jffi srpm which I slightly modify
> to address ppc{,64} build issue / debuginfo rpm creation issue can
> be downloaded from:
> http://koji.fedoraproject.org/scratch/mtasaka/task_2012055/
> ( srpm also there )

Link doesn't seem to work.


> 
> Also some other notes:
> * build-jar-repository at %prep
>   - Usually %prep should be for only expanding source, patching / modifying
>     source and so on, so maybe it is better that 
> ---------------------------------------------------------------------------
> mkdir lib/build_lib
> build-jar-repository -s -p lib/build_lib junit junit4
> ---------------------------------------------------------------------------
>    lines should be moved to %build.    

Done.


Update spec and srpm:
Spec URL: http://mo.morsi.org/files/jruby/jffi.spec
SRPM URL: http://mo.morsi.org/files/jruby/jffi-0.6.5-3.fc12.src.rpm

Comment 8 Mamoru TASAKA 2010-03-09 19:26:53 UTC
I will review your newest srpm later, however just a note

(In reply to comment #7) 
> I'm having trouble getting it to build in a ppc mock / koji environment in the
> first place. The link to your koji build doesn't seem available 

- koji scratch build results will be deleted in about one week...

> and when I goto run either
> koji build --scratch --arch-override ppc64 dist-f14 jffi-0.6.5-3.fc12.src.rpm
> or
> su - build -c "mock -r fedora-devel-ppc /tmp/jffi-0.6.5-3.fc12.src.rpm "
> Neither is successful. In the case of Koji, I get 
> 
> "BuildError: No matching arches were found"

- ppc{,64} is available only on F-12/11 (not on F-13/14)

Comment 9 Mamoru TASAKA 2010-03-10 17:25:52 UTC
For -3:

* For ppc{,64}
  - To compile your jffi.src on these architecture, adding
    the below at the end of %prep is enough
------------------------------------------------------------------
%prep
...
...
...
sed -i.cpu -e '/m\$(MODEL)/d' jni/GNUmakefile libtest/GNUmakefile
%ifnarch %{ix86} x86_64
rm -rf test/
%endif
------------------------------------------------------------------
    ! Well, test fails on these archs, I don't know why (I don't
      know java well).

http://koji.fedoraproject.org/koji/taskinfo?taskID=2044713

Other things seem okay.

Comment 10 Mamoru TASAKA 2010-03-25 16:37:02 UTC
ping ?

Comment 11 Mamoru TASAKA 2010-04-04 15:50:37 UTC
ping again?

Comment 12 Mamoru TASAKA 2010-04-11 16:11:43 UTC
Again ping?

Comment 13 Mo Morsi 2010-04-14 16:37:51 UTC
Once again, sorry for the delay, working on many things.

Spec updated to include your ppc fix and re-uploaded:

Update spec and srpm:
Spec URL: http://mo.morsi.org/files/jruby/jffi.spec
SRPM URL: http://mo.morsi.org/files/jruby/jffi-0.6.5-4.fc11.src.rpm

Koji build: http://koji.fedoraproject.org/koji/taskinfo?taskID=2115465

rpmlint rpmbuild/RPMS/x86_64/jffi-* rpmbuild/SRPMS/jffi-0.6.5-4.fc11.src.rpm rpmbuild/SPECS/jffi.spec
4 packages and 1 specfiles checked; 0 errors, 0 warnings.

Comment 14 Mamoru TASAKA 2010-04-16 18:09:27 UTC
Okay.

----------------------------------------------------------
    This package (jffi) is APPROVED by mtasaka
----------------------------------------------------------

Comment 15 Mo Morsi 2010-04-26 16:52:04 UTC
New Package CVS Request
=======================
Package Name: jffi
Short Description: An optimized Java interface to libffi
Owners: mmorsi
Branches: F-11 F-12 F-13
InitialCC:

Comment 16 Jason Tibbitts 2010-04-29 02:07:02 UTC
CVS done (by process-cvs-requests.py).

Comment 17 Mamoru TASAKA 2010-05-12 15:36:46 UTC
Closing.