[java-1.8.0-openjdk/f21] Sync with f22. u40b25 was released.

jiri vanek jvanek at fedoraproject.org
Wed Mar 4 12:26:34 UTC 2015


commit 3efd4a7e683e96a68da940c66f434cc36e775649
Author: Jiri <jvanek at redhat.com>
Date:   Wed Mar 4 13:26:15 2015 +0100

    Sync with f22. u40b25 was released.

 .gitignore                              |    4 +-
 applet-hole.patch                       |  108 ---
 generate_source_tarball.sh              |    1 +
 hotspot-build-j-directive.patch         |   19 -
 java-1.8.0-openjdk-s390-java-opts.patch |   42 +-
 java-1.8.0-openjdk-size_t.patch         |  214 ++---
 java-1.8.0-openjdk.spec                 | 1457 +++++++++++++++++++------------
 libjpeg-turbo-1.4-compat.patch          |   33 +
 sources                                 |    4 +-
 zero-interpreter-fix.patch              |   25 +
 10 files changed, 1090 insertions(+), 817 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 36a09bd..0417c60 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,9 +32,7 @@
 /aarch64-hotspot-jdk8u40-b02.tar.xz
 /aarch64-hotspot-jdk8u40-b02-c6375c27cbfa.tar.xz
 /aarch64-hotspot-jdk8u40-b04-a6df78e590bb.tar.xz
-/jdk8u-jdk8u25-b18.tar.xz
 /jdk8-jdk8u40-b12-aarch64.tar.xz
 /jdk8u-jdk8u40-b12.tar.xz
 /jdk8-jdk8u40-b12-aarch64-1263.tar.xz
-/jdk8u-jdk8u31-b13.tar.xz
-/jdk8-jdk8u40-b12-aarch64-hs3135441ed942.tar.xz
+/jdk8u40-jdk8u40-b25.tar.xz
diff --git a/generate_source_tarball.sh b/generate_source_tarball.sh
index 72914fe..6011bbd 100755
--- a/generate_source_tarball.sh
+++ b/generate_source_tarball.sh
@@ -5,6 +5,7 @@
 # Usage: generate_source_tarball.sh project_name repo_name tag
 #
 # Examples:
+#  sh generate_source_tarball.sh jdk8u jdk8u40 jdk8u40-b25
 #   ./generate_source_tarball.sh jdk8 jdk8 jdk8-b79
 #   ./generate_source_tarball.sh jdk8u jdk8u jdk8u5-b13
 #   ./generate_source_tarball.sh aarch64-port jdk8 aarch64-${DATE}
diff --git a/java-1.8.0-openjdk-s390-java-opts.patch b/java-1.8.0-openjdk-s390-java-opts.patch
index af6063d..9e2b5b8 100644
--- a/java-1.8.0-openjdk-s390-java-opts.patch
+++ b/java-1.8.0-openjdk-s390-java-opts.patch
@@ -1,19 +1,27 @@
 diff -up jdk8/common/autoconf/boot-jdk.m4.s390 jdk8/common/autoconf/boot-jdk.m4
---- jdk8/common/autoconf/boot-jdk.m4.s390	2014-03-11 16:01:27.000000000 -0400
-+++ jdk8/common/autoconf/boot-jdk.m4	2014-05-21 11:50:36.507890197 -0400
-@@ -315,12 +315,12 @@
-     fi
+--- jdk8/common/autoconf/boot-jdk.m4.s390	2014-10-28 13:10:36.000000000 -0400
++++ jdk8/common/autoconf/boot-jdk.m4	2015-01-09 15:49:45.443809100 -0500
+@@ -319,21 +319,12 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_AR
+   AC_MSG_CHECKING([flags for boot jdk java command for big workloads])
  
-     # Minimum amount of heap memory.
--    ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA])
-+    ADD_JVM_ARG_IF_OK([-Xms256M],boot_jdk_jvmargs,[$JAVA])
-     if test "x$OPENJDK_TARGET_OS" = "xmacosx" || test "x$OPENJDK_TARGET_CPU" = "xppc64" ; then
-       # Why does macosx need more heap? Its the huge JDK batch.
-       ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA])
-     else
--      ADD_JVM_ARG_IF_OK([-Xmx1100M],boot_jdk_jvmargs,[$JAVA])
-+      ADD_JVM_ARG_IF_OK([-Xmx768M],boot_jdk_jvmargs,[$JAVA])
-     fi
-     # When is adding -client something that speeds up the JVM?
-     # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA])
-
+   # Starting amount of heap memory.
+-  ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs_big,[$JAVA])
++  ADD_JVM_ARG_IF_OK([-Xms256M],boot_jdk_jvmargs_big,[$JAVA])
+ 
+   # Maximum amount of heap memory.
+   # Maximum stack size.
+-  if test "x$BUILD_NUM_BITS" = x32; then
+-    JVM_MAX_HEAP=1100M
++    JVM_MAX_HEAP=768M
+     STACK_SIZE=768
+-  else
+-    # Running Javac on a JVM on a 64-bit machine, takes more space since 64-bit
+-    # pointers are used. Apparently, we need to increase the heap and stack
+-    # space for the jvm. More specifically, when running javac to build huge
+-    # jdk batch
+-    JVM_MAX_HEAP=1600M
+-    STACK_SIZE=1536
+-  fi
+   ADD_JVM_ARG_IF_OK([-Xmx$JVM_MAX_HEAP],boot_jdk_jvmargs_big,[$JAVA])
+   ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs_big,[$JAVA])
+   ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],boot_jdk_jvmargs_big,[$JAVA])
diff --git a/java-1.8.0-openjdk-size_t.patch b/java-1.8.0-openjdk-size_t.patch
index 9ca29a9..6a24ccc 100644
--- a/java-1.8.0-openjdk-size_t.patch
+++ b/java-1.8.0-openjdk-size_t.patch
@@ -1,7 +1,7 @@
-diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
---- jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp	2014-09-04 22:47:14.059845388 -0400
-@@ -2686,7 +2686,7 @@
+diff -up jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp.s390 jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
+--- jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp	2015-01-09 15:57:32.423809100 -0500
+@@ -2659,7 +2659,7 @@ void CFLS_LAB::get_from_global_pool(size
    if (ResizeOldPLAB && CMSOldPLABResizeQuicker) {
      size_t multiple = _num_blocks[word_sz]/(CMSOldPLABToleranceFactor*CMSOldPLABNumRefills*n_blks);
      n_blks +=  CMSOldPLABReactivityFactor*multiple*n_blks;
@@ -10,10 +10,10 @@ diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compac
    }
    assert(n_blks > 0, "Error");
    _cfls->par_get_chunk_of_blocks(word_sz, n_blks, fl);
-diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
---- jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	2014-09-04 22:47:14.061845394 -0400
-@@ -950,7 +950,7 @@
+diff -up jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp.s390 jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
+--- jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	2015-01-09 15:57:32.423809100 -0500
+@@ -951,7 +951,7 @@ void ConcurrentMarkSweepGeneration::comp
    if (free_percentage < desired_free_percentage) {
      size_t desired_capacity = (size_t)(used() / ((double) 1 - desired_free_percentage));
      assert(desired_capacity >= capacity(), "invalid expansion size");
@@ -22,7 +22,7 @@ diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concur
      if (PrintGCDetails && Verbose) {
        size_t desired_capacity = (size_t)(used() / ((double) 1 - desired_free_percentage));
        gclog_or_tty->print_cr("\nFrom compute_new_size: ");
-@@ -6559,7 +6559,7 @@
+@@ -6569,7 +6569,7 @@ void CMSCollector::reset(bool asynch) {
      HeapWord* curAddr = _markBitMap.startWord();
      while (curAddr < _markBitMap.endWord()) {
        size_t remaining  = pointer_delta(_markBitMap.endWord(), curAddr);
@@ -31,7 +31,7 @@ diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concur
        _markBitMap.clear_large_range(chunk);
        if (ConcurrentMarkSweepThread::should_yield() &&
            !foregroundGCIsActive() &&
-@@ -6858,7 +6858,7 @@
+@@ -6868,7 +6868,7 @@ void CMSMarkStack::expand() {
      return;
    }
    // Double capacity if possible
@@ -40,10 +40,10 @@ diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concur
    // Do not give up existing stack until we have managed to
    // get the double capacity that we desired.
    ReservedSpace rs(ReservedSpace::allocation_align_size_up(
-diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp jdk8/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
---- jdk8/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	2014-09-04 22:47:14.063845410 -0400
-@@ -3767,7 +3767,7 @@
+diff -up jdk8/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp.s390 jdk8/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
+--- jdk8/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	2015-01-09 15:57:32.423809100 -0500
+@@ -3891,7 +3891,7 @@ void CMTask::drain_local_queue(bool part
    // of things to do) or totally (at the very end).
    size_t target_size;
    if (partially) {
@@ -52,7 +52,7 @@ diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp jdk8
    } else {
      target_size = 0;
    }
-@@ -4605,7 +4605,7 @@
+@@ -4717,7 +4717,7 @@ size_t G1PrintRegionLivenessInfoClosure:
    // The > 0 check is to deal with the prev and next live bytes which
    // could be 0.
    if (*hum_bytes > 0) {
@@ -61,10 +61,10 @@ diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp jdk8
      *hum_bytes -= bytes;
    }
    return bytes;
-diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp jdk8/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
---- jdk8/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	2014-09-04 22:47:14.065845427 -0400
-@@ -1730,7 +1730,7 @@
+diff -up jdk8/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp.s390 jdk8/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
+--- jdk8/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	2015-01-09 15:57:32.423809100 -0500
+@@ -1737,7 +1737,7 @@ HeapWord* G1CollectedHeap::expand_and_al
  
    verify_region_sets_optional();
  
@@ -73,34 +73,58 @@ diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp jdk
    ergo_verbose1(ErgoHeapSizing,
                  "attempt heap expansion",
                  ergo_format_reason("allocation request failed")
-diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp
---- jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp	2014-09-04 22:47:14.065845427 -0400
-@@ -160,7 +160,7 @@
+diff -up jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp.s390 jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp
+--- jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp.s390	2015-01-09 16:12:23.063809100 -0500
++++ jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp	2015-01-09 16:13:02.213809100 -0500
+@@ -38,7 +38,7 @@ G1StringDedupQueue::G1StringDedupQueue()
+   _cancel(false),
+   _empty(true),
+   _dropped(0) {
+-  _nqueues = MAX2(ParallelGCThreads, (size_t)1);
++  _nqueues = MAX2(ParallelGCThreads, (uintx)1);
+   _queues = NEW_C_HEAP_ARRAY(G1StringDedupWorkerQueue, _nqueues, mtGC);
+   for (size_t i = 0; i < _nqueues; i++) {
+     new (_queues + i) G1StringDedupWorkerQueue(G1StringDedupWorkerQueue::default_segment_size(), _max_cache_size, _max_size);
+diff -up jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp.s390 jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp
+--- jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp.s390	2015-01-09 16:13:29.713809100 -0500
++++ jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp	2015-01-09 16:13:57.713809100 -0500
+@@ -110,7 +110,7 @@ public:
+ };
+ 
+ G1StringDedupEntryCache::G1StringDedupEntryCache() {
+-  _nlists = MAX2(ParallelGCThreads, (size_t)1);
++  _nlists = MAX2(ParallelGCThreads, (uintx)1);
+   _lists = PaddedArray<G1StringDedupEntryFreeList, mtGC>::create_unfreeable((uint)_nlists);
+ }
+ 
+diff -up jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp.s390 jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp
+--- jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp.s390	2015-01-09 16:14:57.193809100 -0500
++++ jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp	2015-01-09 16:15:41.163809100 -0500
+@@ -147,7 +147,7 @@ void HeapRegion::setup_heap_region_size(
    if (FLAG_IS_DEFAULT(G1HeapRegionSize)) {
      size_t average_heap_size = (initial_heap_size + max_heap_size) / 2;
-     region_size = MAX2(average_heap_size / TARGET_REGION_NUMBER,
--                       (uintx) MIN_REGION_SIZE);
-+                       (size_t) MIN_REGION_SIZE);
+     region_size = MAX2(average_heap_size / HeapRegionBounds::target_number(),
+-                       (uintx) HeapRegionBounds::min_size());
++                       HeapRegionBounds::min_size());
    }
  
    int region_size_log = log2_long((jlong) region_size);
-diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp
---- jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp	2014-09-04 22:47:14.067845443 -0400
-@@ -71,7 +71,7 @@
-   if (_virtual_space != NULL && _virtual_space->expand_by(_reserved_byte_size)) {
-     _region_start = covered_region.start();
-     _region_size = covered_region.word_size();
--    idx_t* map = (idx_t*)_virtual_space->reserved_low_addr();
-+    BitMap::bm_word_t* map = (BitMap::bm_word_t*)_virtual_space->reserved_low_addr();
-     _beg_bits.set_map(map);
-     _beg_bits.set_size(bits / 2);
-     _end_bits.set_map(map + words / 2);
-diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
---- jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	2014-09-04 22:47:14.068845451 -0400
-@@ -910,8 +910,8 @@
+diff -up jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp.s390 jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp
+--- jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp	2015-01-09 16:16:27.533809100 -0500
+@@ -833,7 +833,7 @@ OtherRegionsTable::do_cleanup_work(HRRSC
+ // This can be done by either mutator threads together with the
+ // concurrent refinement threads or GC threads.
+ uint HeapRegionRemSet::num_par_rem_sets() {
+-  return MAX2(DirtyCardQueueSet::num_par_ids() + ConcurrentG1Refine::thread_num(), (uint)ParallelGCThreads);
++  return MAX2(DirtyCardQueueSet::num_par_ids() + ConcurrentG1Refine::thread_num(), ParallelGCThreads);
+ }
+ 
+ HeapRegionRemSet::HeapRegionRemSet(G1BlockOffsetSharedArray* bosa,
+diff -up jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp.s390 jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
+--- jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	2015-01-09 15:57:32.423809100 -0500
+@@ -910,8 +910,8 @@ void PSParallelCompact::initialize_space
  void PSParallelCompact::initialize_dead_wood_limiter()
  {
    const size_t max = 100;
@@ -111,10 +135,10 @@ diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParalle
    _dwl_first_term = 1.0 / (sqrt(2.0 * M_PI) * _dwl_std_dev);
    DEBUG_ONLY(_dwl_initialized = true;)
    _dwl_adjustment = normal_distribution(1.0);
-diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp jdk8/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
---- jdk8/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp	2014-09-04 22:47:14.068845451 -0400
-@@ -194,7 +194,7 @@
+diff -up jdk8/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp.s390 jdk8/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
+--- jdk8/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp	2015-01-09 15:57:32.423809100 -0500
+@@ -194,7 +194,7 @@ bool ParScanThreadState::take_from_overf
    const size_t num_overflow_elems = of_stack->size();
    const size_t space_available = queue->max_elems() - queue->size();
    const size_t num_take_elems = MIN3(space_available / 4,
@@ -123,10 +147,10 @@ diff -ruN jdk8/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cp
                                       num_overflow_elems);
    // Transfer the most recent num_take_elems from the overflow
    // stack to our work queue.
-diff -ruN jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp
---- jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp	2014-09-04 22:55:49.271922585 -0400
-@@ -389,7 +389,7 @@
+diff -up jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp.s390 jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp
+--- jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp	2015-01-09 16:05:36.093809100 -0500
+@@ -389,7 +389,7 @@ void TwoGenerationCollectorPolicy::initi
        uintx calculated_size = NewSize + OldSize;
        double shrink_factor = (double) MaxHeapSize / calculated_size;
        uintx smaller_new_size = align_size_down((uintx)(NewSize * shrink_factor), _gen_alignment);
@@ -135,7 +159,7 @@ diff -ruN jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp jdk8/hotspot/src/
        _initial_gen0_size = NewSize;
  
        // OldSize is already aligned because above we aligned MaxHeapSize to
-@@ -437,7 +437,7 @@
+@@ -437,7 +437,7 @@ void GenCollectorPolicy::initialize_size
      // yield a size that is too small) and bound it by MaxNewSize above.
      // Ergonomics plays here by previously calculating the desired
      // NewSize and MaxNewSize.
@@ -144,7 +168,7 @@ diff -ruN jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp jdk8/hotspot/src/
    }
    assert(max_new_size > 0, "All paths should set max_new_size");
  
-@@ -459,23 +459,23 @@
+@@ -459,24 +459,23 @@ void GenCollectorPolicy::initialize_size
        // lower limit.
        _min_gen0_size = NewSize;
        desired_new_size = NewSize;
@@ -169,11 +193,12 @@ diff -ruN jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp jdk8/hotspot/src/
 +      _min_gen0_size = MAX2(scale_by_NewRatio_aligned(_min_heap_byte_size), (size_t)NewSize);
        desired_new_size =
 -        MAX2(scale_by_NewRatio_aligned(_initial_heap_byte_size), NewSize);
-+        MAX2(scale_by_NewRatio_aligned(_initial_heap_byte_size), (size_t)NewSize);
-     }
+-    }
++        MAX2(scale_by_NewRatio_aligned(_initial_heap_byte_size), (size_t)NewSize);    }
  
      assert(_min_gen0_size > 0, "Sanity check");
-@@ -577,7 +577,7 @@
+     _initial_gen0_size = desired_new_size;
+@@ -577,7 +576,7 @@ void TwoGenerationCollectorPolicy::initi
    } else {
      // It's been explicitly set on the command line.  Use the
      // OldSize and then determine the consequences.
@@ -182,10 +207,10 @@ diff -ruN jdk8/hotspot/src/share/vm/memory/collectorPolicy.cpp jdk8/hotspot/src/
      _initial_gen1_size = OldSize;
  
      // If the user has explicitly set an OldSize that is inconsistent
-diff -ruN jdk8/hotspot/src/share/vm/memory/metaspace.cpp jdk8/hotspot/src/share/vm/memory/metaspace.cpp
---- jdk8/hotspot/src/share/vm/memory/metaspace.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/memory/metaspace.cpp	2014-09-04 22:47:14.071845475 -0400
-@@ -1431,7 +1431,7 @@
+diff -up jdk8/hotspot/src/share/vm/memory/metaspace.cpp.s390 jdk8/hotspot/src/share/vm/memory/metaspace.cpp
+--- jdk8/hotspot/src/share/vm/memory/metaspace.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/memory/metaspace.cpp	2015-01-09 16:18:54.233809100 -0500
+@@ -1455,7 +1455,7 @@ void MetaspaceGC::initialize() {
  
  void MetaspaceGC::post_initialize() {
    // Reset the high-water mark once the VM initialization is done.
@@ -194,7 +219,7 @@ diff -ruN jdk8/hotspot/src/share/vm/memory/metaspace.cpp jdk8/hotspot/src/share/
  }
  
  bool MetaspaceGC::can_expand(size_t word_size, bool is_class) {
-@@ -1491,7 +1491,7 @@
+@@ -1515,7 +1515,7 @@ void MetaspaceGC::compute_new_size() {
      (size_t)MIN2(min_tmp, double(max_uintx));
    // Don't shrink less than the initial generation size
    minimum_desired_capacity = MAX2(minimum_desired_capacity,
@@ -203,7 +228,7 @@ diff -ruN jdk8/hotspot/src/share/vm/memory/metaspace.cpp jdk8/hotspot/src/share/
  
    if (PrintGCDetails && Verbose) {
      gclog_or_tty->print_cr("\nMetaspaceGC::compute_new_size: ");
-@@ -1546,7 +1546,7 @@
+@@ -1573,7 +1573,7 @@ void MetaspaceGC::compute_new_size() {
      const double max_tmp = used_after_gc / minimum_used_percentage;
      size_t maximum_desired_capacity = (size_t)MIN2(max_tmp, double(max_uintx));
      maximum_desired_capacity = MAX2(maximum_desired_capacity,
@@ -212,7 +237,7 @@ diff -ruN jdk8/hotspot/src/share/vm/memory/metaspace.cpp jdk8/hotspot/src/share/
      if (PrintGCDetails && Verbose) {
        gclog_or_tty->print_cr("  "
                               "  maximum_free_percentage: %6.2f"
-@@ -3197,7 +3197,7 @@
+@@ -3235,7 +3235,7 @@ void Metaspace::global_initialize() {
      // on the medium chunk list.   The next chunk will be small and progress
      // from there.  This size calculated by -version.
      _first_class_chunk_word_size = MIN2((size_t)MediumChunk*6,
@@ -221,10 +246,22 @@ diff -ruN jdk8/hotspot/src/share/vm/memory/metaspace.cpp jdk8/hotspot/src/share/
      _first_class_chunk_word_size = align_word_size_up(_first_class_chunk_word_size);
      // Arbitrarily set the initial virtual space to a multiple
      // of the boot class loader size.
-diff -ruN jdk8/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp jdk8/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp
---- jdk8/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp	2014-09-04 22:47:14.071845475 -0400
-@@ -48,7 +48,7 @@
+diff -up jdk8/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp.s390 jdk8/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp
+--- jdk8/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp	2015-01-09 15:57:32.423809100 -0500
+@@ -238,7 +238,7 @@ size_t ThreadLocalAllocBuffer::initial_d
+   size_t init_sz;
+ 
+   if (TLABSize > 0) {
+-    init_sz = MIN2(TLABSize / HeapWordSize, max_size());
++    init_sz = MIN2((size_t)(TLABSize / HeapWordSize), max_size());
+   } else if (global_stats() == NULL) {
+     // Startup issue - main thread initialized before heap initialized.
+     init_sz = min_size();
+diff -up jdk8/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp.s390 jdk8/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp
+--- jdk8/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp	2015-01-09 15:57:32.423809100 -0500
+@@ -48,7 +48,7 @@ void ObjArrayKlass::objarray_follow_cont
    const size_t beg_index = size_t(index);
    assert(beg_index < len || len == 0, "index too large");
  
@@ -233,7 +270,7 @@ diff -ruN jdk8/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp jdk8/hotspot/s
    const size_t end_index = beg_index + stride;
    T* const base = (T*)a->base();
    T* const beg = base + beg_index;
-@@ -82,7 +82,7 @@
+@@ -82,7 +82,7 @@ void ObjArrayKlass::objarray_follow_cont
    const size_t beg_index = size_t(index);
    assert(beg_index < len || len == 0, "index too large");
  
@@ -242,10 +279,10 @@ diff -ruN jdk8/hotspot/src/share/vm/oops/objArrayKlass.inline.hpp jdk8/hotspot/s
    const size_t end_index = beg_index + stride;
    T* const base = (T*)a->base();
    T* const beg = base + beg_index;
-diff -ruN jdk8/hotspot/src/share/vm/runtime/arguments.cpp jdk8/hotspot/src/share/vm/runtime/arguments.cpp
---- jdk8/hotspot/src/share/vm/runtime/arguments.cpp	2014-07-30 06:51:43.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/runtime/arguments.cpp	2014-09-04 22:47:14.072845483 -0400
-@@ -1244,7 +1244,7 @@
+diff -up jdk8/hotspot/src/share/vm/runtime/arguments.cpp.s390 jdk8/hotspot/src/share/vm/runtime/arguments.cpp
+--- jdk8/hotspot/src/share/vm/runtime/arguments.cpp.s390	2014-10-23 18:32:14.000000000 -0400
++++ jdk8/hotspot/src/share/vm/runtime/arguments.cpp	2015-01-09 15:57:32.423809100 -0500
+@@ -1250,7 +1250,7 @@ void Arguments::set_cms_and_parnew_gc_fl
      // NewSize was set on the command line and it is larger than
      // preferred_max_new_size.
      if (!FLAG_IS_DEFAULT(NewSize)) {   // NewSize explicitly set at command-line
@@ -254,7 +291,7 @@ diff -ruN jdk8/hotspot/src/share/vm/runtime/arguments.cpp jdk8/hotspot/src/share
      } else {
        FLAG_SET_ERGO(uintx, MaxNewSize, preferred_max_new_size);
      }
-@@ -1269,8 +1269,8 @@
+@@ -1275,8 +1275,8 @@ void Arguments::set_cms_and_parnew_gc_fl
        // Unless explicitly requested otherwise, make young gen
        // at least min_new, and at most preferred_max_new_size.
        if (FLAG_IS_DEFAULT(NewSize)) {
@@ -265,7 +302,7 @@ diff -ruN jdk8/hotspot/src/share/vm/runtime/arguments.cpp jdk8/hotspot/src/share
          if (PrintGCDetails && Verbose) {
            // Too early to use gclog_or_tty
            tty->print_cr("CMS ergo set NewSize: " SIZE_FORMAT, NewSize);
-@@ -1280,7 +1280,7 @@
+@@ -1286,7 +1286,7 @@ void Arguments::set_cms_and_parnew_gc_fl
        // so it's NewRatio x of NewSize.
        if (FLAG_IS_DEFAULT(OldSize)) {
          if (max_heap > NewSize) {
@@ -274,34 +311,3 @@ diff -ruN jdk8/hotspot/src/share/vm/runtime/arguments.cpp jdk8/hotspot/src/share
            if (PrintGCDetails && Verbose) {
              // Too early to use gclog_or_tty
              tty->print_cr("CMS ergo set OldSize: " SIZE_FORMAT, OldSize);
-@@ -1401,7 +1401,7 @@
-   return true;
- }
- 
--uintx Arguments::max_heap_for_compressed_oops() {
-+size_t Arguments::max_heap_for_compressed_oops() {
-   // Avoid sign flip.
-   assert(OopEncodingHeapMax > (uint64_t)os::vm_page_size(), "Unusual page size");
-   // We need to fit both the NULL page and the heap into the memory budget, while
---- jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp      2014-06-12 03:58:35.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp      2014-06-12 03:58:35.000000000 -0400
-@@ -38,7 +38,7 @@
-   _cancel(false),
-   _empty(true),
-   _dropped(0) {
--  _nqueues = MAX2(ParallelGCThreads, (size_t)1);
-+  _nqueues = MAX2(ParallelGCThreads, (uintx)1);
-   _queues = NEW_C_HEAP_ARRAY(G1StringDedupWorkerQueue, _nqueues, mtGC);
-   for (size_t i = 0; i < _nqueues; i++) {
-     new (_queues + i) G1StringDedupWorkerQueue(G1StringDedupWorkerQueue::default_segment_size(), _max_cache_size, _max_size);
---- jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp      2014-06-12 03:58:35.000000000 -0400
-+++ jdk8/hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp      2014-06-12 03:58:35.000000000 -0400
-@@ -110,7 +110,7 @@
- };
- 
- G1StringDedupEntryCache::G1StringDedupEntryCache() {
--  _nlists = MAX2(ParallelGCThreads, (size_t)1);
-+  _nlists = MAX2(ParallelGCThreads, (uintx)1);
-   _lists = PaddedArray<G1StringDedupEntryFreeList, mtGC>::create_unfreeable((uint)_nlists);
- }
- 
diff --git a/java-1.8.0-openjdk.spec b/java-1.8.0-openjdk.spec
index 0a25fe4..0c06e47 100644
--- a/java-1.8.0-openjdk.spec
+++ b/java-1.8.0-openjdk.spec
@@ -1,5 +1,43 @@
-# If debug is 1, OpenJDK is built with all debug info present.
-%global debug 0
+# note, parametrised macros are order-senisitve (unlike not-parametrized) even with normal macros
+# also necessary when passing it as parameter other macros. If not macro, then it is considered as switch
+%global debug_suffix_unquoted -debug
+# quoted one for shell operations
+%global debug_suffix "%{debug_suffix_unquoted}"
+%global normal_suffix ""
+
+#if you wont only debug build, but providing java, build only normal build, but  set normalbuild_parameter
+%global debugbuild_parameter  slowdebug
+%global normalbuild_parameter release
+%global debug_warning This package have full debug on. Install only in need, and remove asap.
+%global debug_on with full debug on
+%global for_debug for packages with debug on
+
+# by default we build normal build always.
+%global include_normal_build 1
+%if %{include_normal_build}
+%global build_loop1 %{normal_suffix}
+%else
+%global build_loop1 %{nil}
+%endif
+
+# by default we build debug build during main build only on intel arches
+%ifarch %{ix86} x86_64
+%global include_debug_build 1
+%else
+%global include_debug_build 0
+%endif
+
+%if %{include_debug_build}
+%global build_loop2 %{debug_suffix}
+%else
+%global build_loop2 %{nil}
+%endif
+
+# if you disable both builds, then build fails
+%global build_loop  %{build_loop1} %{build_loop2}
+# note, that order  normal_suffix debug_suffix, in case of both enabled,
+# is expected in one single case at the end of build
+
 
 %global aarch64         aarch64 arm64 armv8
 # sometimes we need to distinguish big and little endian PPC64
@@ -14,7 +52,7 @@
 # Always set this so the nss.cfg file is not broken
 %global NSS_LIBDIR %(pkg-config --variable=libdir nss)
 
-#fix for https://bugzilla.redhat.com/show_bug.cgi?id=1111349
+# fix for https://bugzilla.redhat.com/show_bug.cgi?id=1111349
 %global _privatelibs libmawt[.]so.*
 %global __provides_exclude ^(%{_privatelibs})$
 %global __requires_exclude ^(%{_privatelibs})$
@@ -58,13 +96,7 @@
 %global archinstall %{_arch}
 %endif
 
-%if %{debug}
-%global debugbuild slowdebug
-%else
-%global debugbuild release
-%endif
 
-%global buildoutputdir jdk8/build/jdk8.build
 
 %ifarch %{jit_arches}
 %global with_systemtap 1
@@ -81,29 +113,34 @@
 
 # Standard JPackage naming and versioning defines.
 %global origin          openjdk
-%global updatever       31
-%global buildver        b13
+%global updatever       40
+%global buildver        b25
 %global aarch64_updatever 40
 %global aarch64_buildver b12
-%global aarch64_changesetid aarch64-hs3135441ed942
+%global aarch64_changesetid aarch64-1263
 # priority must be 7 digits in total
 %global priority        18000%{updatever}
 %global javaver         1.8.0
 
-# Standard JPackage directories and symbolic links.
-%global sdkdir          %{uniquesuffix}
-%global jrelnk          jre-%{javaver}-%{origin}-%{version}-%{release}.%{_arch}
-
-%global jredir          %{sdkdir}/jre
-%global sdkbindir       %{_jvmdir}/%{sdkdir}/bin
-%global jrebindir       %{_jvmdir}/%{jredir}/bin
-%global jvmjardir       %{_jvmjardir}/%{uniquesuffix}
-
+# parametrized macros are order-sensitive
 %global fullversion     %{name}-%{version}-%{release}
-
-%global uniquesuffix          %{fullversion}.%{_arch}
+#images stub
+%global j2sdkimage       j2sdk-image
+# output dir stub
+%global buildoutputdir() %{expand:jdk8/build/jdk8.build%1}
 #we can copy the javadoc to not arched dir, or made it not noarch
-%global uniquejavadocdir       %{fullversion}
+%global uniquejavadocdir()    %{expand:%{fullversion}%1}
+#main id and dir of this jdk
+%global uniquesuffix()        %{expand:%{fullversion}.%{_arch}%1}
+
+# Standard JPackage directories and symbolic links.
+%global sdkdir()        %{expand:%{uniquesuffix %%1}}
+%global jrelnk()        %{expand:jre-%{javaver}-%{origin}-%{version}-%{release}.%{_arch}%1}
+
+%global jredir()        %{expand:%{sdkdir %%1}/jre}
+%global sdkbindir()     %{expand:%{_jvmdir}/%{sdkdir %%1}/bin}
+%global jrebindir()     %{expand:%{_jvmdir}/%{jredir %%1}/bin}
+%global jvmjardir()     %{expand:%{_jvmjardir}/%{uniquesuffix %%1}}
 
 %if %{with_systemtap}
 # Where to install systemtap tapset (links)
@@ -118,12 +155,489 @@
 %global tapsetdir %{tapsetroot}/tapset/%{_build_cpu}
 %endif
 
+# not-duplicated scriplets for normal/debug packages
+%global update_desktop_icons /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
+
+%global post_script() %{expand:
+update-desktop-database %{_datadir}/applications &> /dev/null || :
+/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
+exit 0
+}
+
+
+%global post_headless() %{expand:
+# FIXME: identical binaries are copied, not linked. This needs to be
+# fixed upstream.
+%ifarch %{jit_arches}
+%ifnarch %{ppc64le}
+#see https://bugzilla.redhat.com/show_bug.cgi?id=513605
+%{jrebindir %%1}/java -Xshare:dump >/dev/null 2>/dev/null
+%endif
+%endif
+
+ext=.gz
+alternatives \\
+  --install %{_bindir}/java java %{jrebindir %%1}/java %{priority} \\
+  --slave %{_jvmdir}/jre jre %{_jvmdir}/%{jredir %%1} \\
+  --slave %{_jvmjardir}/jre jre_exports %{_jvmjardir}/%{jrelnk %%1} \\
+  --slave %{_bindir}/jjs jjs %{jrebindir %%1}/jjs \\
+  --slave %{_bindir}/keytool keytool %{jrebindir %%1}/keytool \\
+  --slave %{_bindir}/orbd orbd %{jrebindir %%1}/orbd \\
+  --slave %{_bindir}/pack200 pack200 %{jrebindir %%1}/pack200 \\
+  --slave %{_bindir}/rmid rmid %{jrebindir %%1}/rmid \\
+  --slave %{_bindir}/rmiregistry rmiregistry %{jrebindir %%1}/rmiregistry \\
+  --slave %{_bindir}/servertool servertool %{jrebindir %%1}/servertool \\
+  --slave %{_bindir}/tnameserv tnameserv %{jrebindir %%1}/tnameserv \\
+  --slave %{_bindir}/unpack200 unpack200 %{jrebindir %%1}/unpack200 \\
+  --slave %{_mandir}/man1/java.1$ext java.1$ext \\
+  %{_mandir}/man1/java-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jjs.1$ext jjs.1$ext \\
+  %{_mandir}/man1/jjs-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_bindir}/policytool policytool %{jrebindir %%1}/policytool \\
+  --slave %{_mandir}/man1/keytool.1$ext keytool.1$ext \\
+  %{_mandir}/man1/keytool-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/orbd.1$ext orbd.1$ext \\
+  %{_mandir}/man1/orbd-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/pack200.1$ext pack200.1$ext \\
+  %{_mandir}/man1/pack200-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/rmid.1$ext rmid.1$ext \\
+  %{_mandir}/man1/rmid-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/rmiregistry.1$ext rmiregistry.1$ext \\
+  %{_mandir}/man1/rmiregistry-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/servertool.1$ext servertool.1$ext \\
+  %{_mandir}/man1/servertool-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/tnameserv.1$ext tnameserv.1$ext \\
+  %{_mandir}/man1/tnameserv-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/unpack200.1$ext unpack200.1$ext \\
+  %{_mandir}/man1/unpack200-%{uniquesuffix %%1}.1$ext
+
+for X in %{origin} %{javaver} ; do
+  alternatives \\
+    --install %{_jvmdir}/jre-"$X" \\
+    jre_"$X" %{_jvmdir}/%{jredir %%1} %{priority} \\
+    --slave %{_jvmjardir}/jre-"$X" \\
+    jre_"$X"_exports %{_jvmdir}/%{jredir %%1}
+done
+
+update-alternatives --install %{_jvmdir}/jre-%{javaver}-%{origin} jre_%{javaver}_%{origin} %{_jvmdir}/%{jrelnk %%1} %{priority} \\
+--slave %{_jvmjardir}/jre-%{javaver}       jre_%{javaver}_%{origin}_exports      %{jvmjardir %%1}
+
+update-desktop-database %{_datadir}/applications &> /dev/null || :
+/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
+exit 0
+}
+
+%global postun_script() %{expand:
+update-desktop-database %{_datadir}/applications &> /dev/null || :
+if [ $1 -eq 0 ] ; then
+    /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null
+    %{update_desktop_icons}
+fi
+exit 0
+}
+
+
+%global postun_headless() %{expand:
+  alternatives --remove java %{jrebindir %%1}/java
+  alternatives --remove jre_%{origin} %{_jvmdir}/%{jredir %%1}
+  alternatives --remove jre_%{javaver} %{_jvmdir}/%{jredir %%1}
+  alternatives --remove jre_%{javaver}_%{origin} %{_jvmdir}/%{jrelnk %%1}
+}
+
+%global posttrans_script() %{expand:
+%{update_desktop_icons}
+}
+
+%global post_devel() %{expand:
+ext=.gz
+alternatives \\
+  --install %{_bindir}/javac javac %{sdkbindir %%1}/javac %{priority} \\
+  --slave %{_jvmdir}/java java_sdk %{_jvmdir}/%{sdkdir %%1} \\
+  --slave %{_jvmjardir}/java java_sdk_exports %{_jvmjardir}/%{sdkdir %%1} \\
+  --slave %{_bindir}/appletviewer appletviewer %{sdkbindir %%1}/appletviewer \\
+  --slave %{_bindir}/extcheck extcheck %{sdkbindir %%1}/extcheck \\
+  --slave %{_bindir}/idlj idlj %{sdkbindir %%1}/idlj \\
+  --slave %{_bindir}/jar jar %{sdkbindir %%1}/jar \\
+  --slave %{_bindir}/jarsigner jarsigner %{sdkbindir %%1}/jarsigner \\
+  --slave %{_bindir}/javadoc javadoc %{sdkbindir %%1}/javadoc \\
+  --slave %{_bindir}/javah javah %{sdkbindir %%1}/javah \\
+  --slave %{_bindir}/javap javap %{sdkbindir %%1}/javap \\
+  --slave %{_bindir}/jcmd jcmd %{sdkbindir %%1}/jcmd \\
+  --slave %{_bindir}/jconsole jconsole %{sdkbindir %%1}/jconsole \\
+  --slave %{_bindir}/jdb jdb %{sdkbindir %%1}/jdb \\
+  --slave %{_bindir}/jdeps jdeps %{sdkbindir %%1}/jdeps \\
+  --slave %{_bindir}/jhat jhat %{sdkbindir %%1}/jhat \\
+  --slave %{_bindir}/jinfo jinfo %{sdkbindir %%1}/jinfo \\
+  --slave %{_bindir}/jmap jmap %{sdkbindir %%1}/jmap \\
+  --slave %{_bindir}/jps jps %{sdkbindir %%1}/jps \\
+  --slave %{_bindir}/jrunscript jrunscript %{sdkbindir %%1}/jrunscript \\
+  --slave %{_bindir}/jsadebugd jsadebugd %{sdkbindir %%1}/jsadebugd \\
+  --slave %{_bindir}/jstack jstack %{sdkbindir %%1}/jstack \\
+  --slave %{_bindir}/jstat jstat %{sdkbindir %%1}/jstat \\
+  --slave %{_bindir}/jstatd jstatd %{sdkbindir %%1}/jstatd \\
+  --slave %{_bindir}/native2ascii native2ascii %{sdkbindir %%1}/native2ascii \\
+  --slave %{_bindir}/rmic rmic %{sdkbindir %%1}/rmic \\
+  --slave %{_bindir}/schemagen schemagen %{sdkbindir %%1}/schemagen \\
+  --slave %{_bindir}/serialver serialver %{sdkbindir %%1}/serialver \\
+  --slave %{_bindir}/wsgen wsgen %{sdkbindir %%1}/wsgen \\
+  --slave %{_bindir}/wsimport wsimport %{sdkbindir %%1}/wsimport \\
+  --slave %{_bindir}/xjc xjc %{sdkbindir %%1}/xjc \\
+  --slave %{_mandir}/man1/appletviewer.1$ext appletviewer.1$ext \\
+  %{_mandir}/man1/appletviewer-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/extcheck.1$ext extcheck.1$ext \\
+  %{_mandir}/man1/extcheck-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/idlj.1$ext idlj.1$ext \\
+  %{_mandir}/man1/idlj-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jar.1$ext jar.1$ext \\
+  %{_mandir}/man1/jar-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jarsigner.1$ext jarsigner.1$ext \\
+  %{_mandir}/man1/jarsigner-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/javac.1$ext javac.1$ext \\
+  %{_mandir}/man1/javac-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/javadoc.1$ext javadoc.1$ext \\
+  %{_mandir}/man1/javadoc-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/javah.1$ext javah.1$ext \\
+  %{_mandir}/man1/javah-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/javap.1$ext javap.1$ext \\
+  %{_mandir}/man1/javap-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jcmd.1$ext jcmd.1$ext \\
+  %{_mandir}/man1/jcmd-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jconsole.1$ext jconsole.1$ext \\
+  %{_mandir}/man1/jconsole-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jdb.1$ext jdb.1$ext \\
+  %{_mandir}/man1/jdb-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jdeps.1$ext jdeps.1$ext \\
+  %{_mandir}/man1/jdeps-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jhat.1$ext jhat.1$ext \\
+  %{_mandir}/man1/jhat-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jinfo.1$ext jinfo.1$ext \\
+  %{_mandir}/man1/jinfo-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jmap.1$ext jmap.1$ext \\
+  %{_mandir}/man1/jmap-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jps.1$ext jps.1$ext \\
+  %{_mandir}/man1/jps-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jrunscript.1$ext jrunscript.1$ext \\
+  %{_mandir}/man1/jrunscript-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jsadebugd.1$ext jsadebugd.1$ext \\
+  %{_mandir}/man1/jsadebugd-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jstack.1$ext jstack.1$ext \\
+  %{_mandir}/man1/jstack-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jstat.1$ext jstat.1$ext \\
+  %{_mandir}/man1/jstat-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/jstatd.1$ext jstatd.1$ext \\
+  %{_mandir}/man1/jstatd-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/native2ascii.1$ext native2ascii.1$ext \\
+  %{_mandir}/man1/native2ascii-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/policytool.1$ext policytool.1$ext \\
+  %{_mandir}/man1/policytool-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/rmic.1$ext rmic.1$ext \\
+  %{_mandir}/man1/rmic-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/schemagen.1$ext schemagen.1$ext \\
+  %{_mandir}/man1/schemagen-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/serialver.1$ext serialver.1$ext \\
+  %{_mandir}/man1/serialver-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/wsgen.1$ext wsgen.1$ext \\
+  %{_mandir}/man1/wsgen-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/wsimport.1$ext wsimport.1$ext \\
+  %{_mandir}/man1/wsimport-%{uniquesuffix %%1}.1$ext \\
+  --slave %{_mandir}/man1/xjc.1$ext xjc.1$ext \\
+  %{_mandir}/man1/xjc-%{uniquesuffix %%1}.1$ext
+
+for X in %{origin} %{javaver} ; do
+  alternatives \\
+    --install %{_jvmdir}/java-"$X" \\
+    java_sdk_"$X" %{_jvmdir}/%{sdkdir %%1} %{priority} \\
+    --slave %{_jvmjardir}/java-"$X" \\
+    java_sdk_"$X"_exports %{_jvmjardir}/%{sdkdir %%1}
+done
+
+update-alternatives --install %{_jvmdir}/java-%{javaver}-%{origin} java_sdk_%{javaver}_%{origin} %{_jvmdir}/%{sdkdir %%1} %{priority} \\
+--slave %{_jvmjardir}/java-%{javaver}-%{origin}       java_sdk_%{javaver}_%{origin}_exports      %{_jvmjardir}/%{sdkdir %%1}
+
+update-desktop-database %{_datadir}/applications &> /dev/null || :
+/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
+
+exit 0
+}
+
+%global postun_devel() %{expand:
+  alternatives --remove javac %{sdkbindir %%1}/javac
+  alternatives --remove java_sdk_%{origin} %{_jvmdir}/%{sdkdir %%1}
+  alternatives --remove java_sdk_%{javaver} %{_jvmdir}/%{sdkdir %%1}
+  alternatives --remove java_sdk_%{javaver}_%{origin} %{_jvmdir}/%{sdkdir %%1}
+
+update-desktop-database %{_datadir}/applications &> /dev/null || :
+
+if [ $1 -eq 0 ] ; then
+    /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null
+    %{update_desktop_icons}
+fi
+exit 0
+}
+
+%global posttrans_devel() %{expand:
+%{update_desktop_icons}
+}
+
+%global post_javadoc() %{expand:
+alternatives \\
+  --install %{_javadocdir}/java javadocdir %{_javadocdir}/%{uniquejavadocdir %%1}/api \\
+  %{priority}
+exit 0
+}
+
+%global postun_javadoc() %{expand:
+  alternatives --remove javadocdir %{_javadocdir}/%{uniquejavadocdir %%1}/api
+exit 0
+}
+
+%global files_jre() %{expand:
+%{_datadir}/icons/hicolor/*x*/apps/java-%{javaver}.png
+%{_datadir}/applications/*policytool%1.desktop
+}
+
+
+%global files_jre_headless() %{expand:
+%defattr(-,root,root,-)
+%doc %{buildoutputdir %%1}/images/%{j2sdkimage}/jre/ASSEMBLY_EXCEPTION
+%doc %{buildoutputdir %%1}/images/%{j2sdkimage}/jre/LICENSE
+%doc %{buildoutputdir %%1}/images/%{j2sdkimage}/jre/THIRD_PARTY_README
+%dir %{_jvmdir}/%{sdkdir %%1}
+%{_jvmdir}/%{jrelnk %%1}
+%{_jvmjardir}/%{jrelnk %%1}
+%{_jvmprivdir}/*
+%{jvmjardir %%1}
+%dir %{_jvmdir}/%{jredir %%1}/lib/security
+%{_jvmdir}/%{jredir %%1}/lib/security/cacerts
+%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/US_export_policy.jar
+%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/local_policy.jar
+%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/java.policy
+%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/java.security
+%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/blacklisted.certs
+%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/logging.properties
+%{_mandir}/man1/java-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jjs-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/keytool-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/orbd-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/pack200-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/rmid-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/rmiregistry-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/servertool-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/tnameserv-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/unpack200-%{uniquesuffix %%1}.1*
+%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/nss.cfg
+%{_jvmdir}/%{jredir %%1}/lib/audio/
+%ifarch %{jit_arches}
+%attr(664, root, root) %ghost %{_jvmdir}/%{jredir %%1}/lib/%{archinstall}/server/classes.jsa
+%attr(664, root, root) %ghost %{_jvmdir}/%{jredir %%1}/lib/%{archinstall}/client/classes.jsa
+%endif
+%{_jvmdir}/%{jredir %%1}/lib/%{archinstall}/server/
+%{_jvmdir}/%{jredir %%1}/lib/%{archinstall}/client/
+}
+
+%global files_devel() %{expand:
+%defattr(-,root,root,-)
+%doc %{buildoutputdir %%1}/images/%{j2sdkimage}/ASSEMBLY_EXCEPTION
+%doc %{buildoutputdir %%1}/images/%{j2sdkimage}/LICENSE
+%doc %{buildoutputdir %%1}/images/%{j2sdkimage}/THIRD_PARTY_README
+%dir %{_jvmdir}/%{sdkdir %%1}/bin
+%dir %{_jvmdir}/%{sdkdir %%1}/include
+%dir %{_jvmdir}/%{sdkdir %%1}/lib
+%if %{with_systemtap}
+%dir %{_jvmdir}/%{sdkdir %%1}/tapset
+%endif
+%{_jvmdir}/%{sdkdir %%1}/bin/*
+%{_jvmdir}/%{sdkdir %%1}/include/*
+%{_jvmdir}/%{sdkdir %%1}/lib/*
+%if %{with_systemtap}
+%{_jvmdir}/%{sdkdir %%1}/tapset/*.stp
+%endif
+%{_jvmjardir}/%{sdkdir %%1}
+%{_datadir}/applications/*jconsole%1.desktop
+%{_mandir}/man1/appletviewer-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/extcheck-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/idlj-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jar-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jarsigner-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/javac-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/javadoc-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/javah-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/javap-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jconsole-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jcmd-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jdb-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jdeps-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jhat-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jinfo-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jmap-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jps-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jrunscript-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jsadebugd-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jstack-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jstat-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/jstatd-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/native2ascii-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/policytool-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/rmic-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/schemagen-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/serialver-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/wsgen-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/wsimport-%{uniquesuffix %%1}.1*
+%{_mandir}/man1/xjc-%{uniquesuffix %%1}.1*
+%if %{with_systemtap}
+%{tapsetroot}
+%endif
+}
+
+%global files_demo() %{expand:
+%defattr(-,root,root,-)
+%doc %{buildoutputdir %%1}/images/%{j2sdkimage}/jre/LICENSE
+}
+
+%global files_src() %{expand:
+%defattr(-,root,root,-)
+%doc README.src
+%{_jvmdir}/%{sdkdir %%1}/src.zip
+}
+
+%global files_javadoc() %{expand:
+%defattr(-,root,root,-)
+%doc %{_javadocdir}/%{uniquejavadocdir %%1}
+%doc %{buildoutputdir %%1}/images/%{j2sdkimage}/jre/LICENSE
+}
+
+%global files_accessibility() %{expand:
+%{_jvmdir}/%{jredir %%1}/lib/%{archinstall}/libatk-wrapper.so
+%{_jvmdir}/%{jredir %%1}/lib/ext/java-atk-wrapper.jar
+%{_jvmdir}/%{jredir %%1}/lib/accessibility.properties
+}
+
+# not-duplicated requires/provides/obsolate for normal/debug packages
+%global java_rpo() %{expand:
+Requires: fontconfig
+Requires: xorg-x11-fonts-Type1
+
+# Requires rest of java
+Requires: %{name}-headless%1 = %{epoch}:%{version}-%{release}
+OrderWithRequires: %{name}-headless%1 = %{epoch}:%{version}-%{release}
+
+
+# Standard JPackage base provides.
+Provides: jre-%{javaver}-%{origin}%1 = %{epoch}:%{version}-%{release}
+Provides: jre-%{origin}%1 = %{epoch}:%{version}-%{release}
+Provides: jre-%{javaver}%1 = %{epoch}:%{version}-%{release}
+Provides: java-%{javaver}%1 = %{epoch}:%{version}-%{release}
+Provides: jre = %{javaver}%1
+Provides: java-%{origin}%1 = %{epoch}:%{version}-%{release}
+Provides: java%1 = %{epoch}:%{javaver}
+# Standard JPackage extensions provides.
+Provides: java-fonts%1 = %{epoch}:%{version}
+
+Obsoletes: java-1.7.0-openjdk%1
+Obsoletes: java-1.5.0-gcj%1
+Obsoletes: sinjdoc
+}
+
+%global java_headless_rpo() %{expand:
+# Require /etc/pki/java/cacerts.
+Requires: ca-certificates
+# Require jpackage-utils for ownership of /usr/lib/jvm/
+Requires: jpackage-utils
+# Require zoneinfo data provided by tzdata-java subpackage.
+Requires: tzdata-java >= 2014f-1
+# Post requires alternatives to install tool alternatives.
+Requires(post):   %{_sbindir}/alternatives
+# Postun requires alternatives to uninstall tool alternatives.
+Requires(postun): %{_sbindir}/alternatives
+
+# Standard JPackage base provides.
+Provides: jre-%{javaver}-%{origin}-headless%1 = %{epoch}:%{version}-%{release}
+Provides: jre-%{origin}-headless%1 = %{epoch}:%{version}-%{release}
+Provides: jre-%{javaver}-headless%1 = %{epoch}:%{version}-%{release}
+Provides: java-%{javaver}-headless%1 = %{epoch}:%{version}-%{release}
+Provides: jre-headless%1 = %{epoch}:%{javaver}
+Provides: java-%{origin}-headless%1 = %{epoch}:%{version}-%{release}
+Provides: java-headless%1 = %{epoch}:%{javaver}
+# Standard JPackage extensions provides.
+Provides: jndi%1 = %{epoch}:%{version}
+Provides: jndi-ldap%1 = %{epoch}:%{version}
+Provides: jndi-cos%1 = %{epoch}:%{version}
+Provides: jndi-rmi%1 = %{epoch}:%{version}
+Provides: jndi-dns%1 = %{epoch}:%{version}
+Provides: jaas%1 = %{epoch}:%{version}
+Provides: jsse%1 = %{epoch}:%{version}
+Provides: jce%1 = %{epoch}:%{version}
+Provides: jdbc-stdext%1 = 4.1
+Provides: java-sasl%1 = %{epoch}:%{version}
+
+Obsoletes: java-1.7.0-openjdk-headless%1
+}
+
+%global java_devel_rpo() %{expand:
+# Require base package.
+Requires:         %{name}%1 = %{epoch}:%{version}-%{release}
+OrderWithRequires: %{name}-headless%1 = %{epoch}:%{version}-%{release}
+# Post requires alternatives to install tool alternatives.
+Requires(post):   %{_sbindir}/alternatives
+# Postun requires alternatives to uninstall tool alternatives.
+Requires(postun): %{_sbindir}/alternatives
+
+# Standard JPackage devel provides.
+Provides: java-sdk-%{javaver}-%{origin}%1 = %{epoch}:%{version}
+Provides: java-sdk-%{javaver}%1 = %{epoch}:%{version}
+Provides: java-sdk-%{origin}%1 = %{epoch}:%{version}
+Provides: java-sdk%1 = %{epoch}:%{javaver}
+Provides: java-%{javaver}-devel%1 = %{epoch}:%{version}
+Provides: java-devel-%{origin}%1 = %{epoch}:%{version}
+Provides: java-devel%1 = %{epoch}:%{javaver}
+
+Obsoletes: java-1.7.0-openjdk-devel%1
+Obsoletes: java-1.5.0-gcj-devel%1
+}
+
+
+%global java_demo_rpo() %{expand:
+Requires: %{name}%1 = %{epoch}:%{version}-%{release}
+OrderWithRequires: %{name}-headless%1 = %{epoch}:%{version}-%{release}
+
+Obsoletes: java-1.7.0-openjdk-demo%1
+}
+
+%global java_javadoc_rpo() %{expand:
+OrderWithRequires: %{name}-headless%1 = %{epoch}:%{version}-%{release}
+# Post requires alternatives to install javadoc alternative.
+Requires(post):   %{_sbindir}/alternatives
+# Postun requires alternatives to uninstall javadoc alternative.
+Requires(postun): %{_sbindir}/alternatives
+
+# Standard JPackage javadoc provides.
+Provides: java-javadoc%1 = %{epoch}:%{version}-%{release}
+Provides: java-%{javaver}-javadoc%1 = %{epoch}:%{version}-%{release}
+
+Obsoletes: java-1.7.0-openjdk-javadoc%1
+
+}
+
+%global java_src_rpo() %{expand:
+Requires: %{name}-headless%1 = %{epoch}:%{version}-%{release}
+
+Obsoletes: java-1.7.0-openjdk-src%1
+}
+
+%global java_accessibility_rpo() %{expand:
+Requires: java-atk-wrapper
+Requires: %{name}%1 = %{epoch}:%{version}-%{release}
+OrderWithRequires: %{name}-headless%1 = %{epoch}:%{version}-%{release}
+
+Obsoletes: java-1.7.0-openjdk-accessibility%1
+}
+
 # Prevent brp-java-repack-jars from being run.
 %global __jar_repack 0
 
 Name:    java-%{javaver}-%{origin}
 Version: %{javaver}.%{updatever}
-Release: 5.%{buildver}%{?dist}
+Release: 21.%{buildver}%{?dist}
 # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons,
 # and this change was brought into RHEL-4.  java-1.5.0-ibm packages
 # also included the epoch in their virtual provides.  This created a
@@ -143,7 +657,7 @@ URL:      http://openjdk.java.net/
 # Source from upstrem OpenJDK8 project. To regenerate, use
 # ./generate_source_tarball.sh jdk8u jdk8u jdk8u%%{updatever}-%%{buildver}
 # ./generate_source_tarball.sh aarch64-port jdk8 %%{aarch64_hg_tag}
-Source0:  jdk8u-jdk8u%{updatever}-%{buildver}.tar.xz
+Source0:  jdk8u40-jdk8u%{updatever}-%{buildver}.tar.xz
 Source1:  jdk8-jdk8u%{aarch64_updatever}-%{aarch64_buildver}-%{aarch64_changesetid}.tar.xz
 
 # Custom README for -src subpackage
@@ -190,14 +704,12 @@ Patch6: disable-doclint-by-default.patch
 # Include all sources in src.zip
 Patch7: include-all-srcs.patch
 # Problem discovered with make 4.0
-Patch11: hotspot-build-j-directive.patch
 Patch12: removeSunEcProvider-RH1154143.patch
+Patch13: libjpeg-turbo-1.4-compat.patch
 
 #
 # OpenJDK specific patches
 #
-# Allow icedtea-web to build
-Patch99: applet-hole.patch
 
 # JVM heap size changes for s390 (thanks to aph)
 Patch100: %{name}-s390-java-opts.patch
@@ -207,17 +719,12 @@ Patch102: %{name}-size_t.patch
 Patch201: system-libjpeg.patch
 Patch202: system-libpng.patch
 Patch203: system-lcms.patch
+Patch204: zero-interpreter-fix.patch
 
 Patch300: jstack-pr1845.patch
 
-# Fixed in upstream 9. See upstream bug:
-# https://bugs.openjdk.java.net/browse/JDK-8064815
 Patch400: ppc_stack_overflow_fix.patch 
-# Fixed in upstream 9. See upstream bug:
-# https://bugs.openjdk.java.net/browse/JDK-8067330
 Patch401: fix_ZERO_ARCHDEF_ppc.patch
-# Fixed in upstream 9. See upstream bug:
-# https://bugs.openjdk.java.net/browse/JDK-8067331
 Patch402: atomic_linux_zero.inline.hpp.patch
 
 Patch9999: enableArm64.patch
@@ -266,150 +773,147 @@ BuildRequires: prelink
 BuildRequires: systemtap-sdt-devel
 %endif
 
-Requires: fontconfig
-Requires: xorg-x11-fonts-Type1
-
-# Requires rest of java
-Requires: %{name}-headless = %{epoch}:%{version}-%{release}
-OrderWithRequires: %{name}-headless = %{epoch}:%{version}-%{release}
 
+# this is built always, also during debug-only build
+# when it is built in debug-only, then this package is just placeholder
+%{java_rpo %{nil}}
 
-# Standard JPackage base provides.
-Provides: jre-%{javaver}-%{origin} = %{epoch}:%{version}-%{release}
-Provides: jre-%{origin} = %{epoch}:%{version}-%{release}
-Provides: jre-%{javaver} = %{epoch}:%{version}-%{release}
-Provides: java-%{javaver} = %{epoch}:%{version}-%{release}
-Provides: jre = %{javaver}
-Provides: java-%{origin} = %{epoch}:%{version}-%{release}
-Provides: java = %{epoch}:%{javaver}
-# Standard JPackage extensions provides.
-Provides: java-fonts = %{epoch}:%{version}
+%description
+The OpenJDK runtime environment.
 
-Obsoletes: java-1.7.0-openjdk
-Obsoletes: java-1.5.0-gcj
-Obsoletes: sinjdoc
+%if %{include_debug_build}
+%package debug
+Summary: OpenJDK Runtime Environment %{debug_on}
+Group:   Development/Languages
 
-%description
+%{java_rpo %{debug_suffix_unquoted}}
+%description debug
 The OpenJDK runtime environment.
+%{debug_warning}
+%endif
 
+%if %{include_normal_build}
 %package headless
 Summary: OpenJDK Runtime Environment
 Group:   Development/Languages
 
-# Require /etc/pki/java/cacerts.
-Requires: ca-certificates
-# Require jpackage-utils for ownership of /usr/lib/jvm/
-Requires: jpackage-utils
-# Require zoneinfo data provided by tzdata-java subpackage.
-Requires: tzdata-java >= 2014f-1
-# Post requires alternatives to install tool alternatives.
-Requires(post):   %{_sbindir}/alternatives
-# Postun requires alternatives to uninstall tool alternatives.
-Requires(postun): %{_sbindir}/alternatives
-
-# Standard JPackage base provides.
-Provides: jre-%{javaver}-%{origin}-headless = %{epoch}:%{version}-%{release}
-Provides: jre-%{origin}-headless = %{epoch}:%{version}-%{release}
-Provides: jre-%{javaver}-headless = %{epoch}:%{version}-%{release}
-Provides: java-%{javaver}-headless = %{epoch}:%{version}-%{release}
-Provides: jre-headless = %{epoch}:%{javaver}
-Provides: java-%{origin}-headless = %{epoch}:%{version}-%{release}
-Provides: java-headless = %{epoch}:%{javaver}
-# Standard JPackage extensions provides.
-Provides: jndi = %{epoch}:%{version}
-Provides: jndi-ldap = %{epoch}:%{version}
-Provides: jndi-cos = %{epoch}:%{version}
-Provides: jndi-rmi = %{epoch}:%{version}
-Provides: jndi-dns = %{epoch}:%{version}
-Provides: jaas = %{epoch}:%{version}
-Provides: jsse = %{epoch}:%{version}
-Provides: jce = %{epoch}:%{version}
-Provides: jdbc-stdext = 4.1
-Provides: java-sasl = %{epoch}:%{version}
-
-Obsoletes: java-1.7.0-openjdk-headless
+%{java_headless_rpo %{nil}}
 
 %description headless
 The OpenJDK runtime environment without audio and video support.
+%endif
+
+%if %{include_debug_build}
+%package headless-debug
+Summary: OpenJDK Runtime Environment %{debug_on}
+Group:   Development/Languages
+
+%{java_headless_rpo %{debug_suffix_unquoted}}
+
+%description headless-debug
+The OpenJDK runtime environment without audio and video support.
+%{debug_warning}
+%endif
 
+%if %{include_normal_build}
 %package devel
 Summary: OpenJDK Development Environment
 Group:   Development/Tools
 
-# Require base package.
-Requires:         %{name} = %{epoch}:%{version}-%{release}
-OrderWithRequires: %{name}-headless = %{epoch}:%{version}-%{release}
-# Post requires alternatives to install tool alternatives.
-Requires(post):   %{_sbindir}/alternatives
-# Postun requires alternatives to uninstall tool alternatives.
-Requires(postun): %{_sbindir}/alternatives
+%{java_devel_rpo %{nil}}
 
-# Standard JPackage devel provides.
-Provides: java-sdk-%{javaver}-%{origin} = %{epoch}:%{version}
-Provides: java-sdk-%{javaver} = %{epoch}:%{version}
-Provides: java-sdk-%{origin} = %{epoch}:%{version}
-Provides: java-sdk = %{epoch}:%{javaver}
-Provides: java-%{javaver}-devel = %{epoch}:%{version}
-Provides: java-devel-%{origin} = %{epoch}:%{version}
-Provides: java-devel = %{epoch}:%{javaver}
+%description devel
+The OpenJDK development tools.
+%endif
 
-Obsoletes: java-1.7.0-openjdk-devel
-Obsoletes: java-1.5.0-gcj-devel
+%if %{include_debug_build}
+%package devel-debug
+Summary: OpenJDK Development Environment %{debug_on}
+Group:   Development/Tools
 
-%description devel
+%{java_devel_rpo %{debug_suffix_unquoted}}
+
+%description devel-debug
 The OpenJDK development tools.
+%{debug_warning}
+%endif
 
+%if %{include_normal_build}
 %package demo
 Summary: OpenJDK Demos
 Group:   Development/Languages
 
-Requires: %{name} = %{epoch}:%{version}-%{release}
-OrderWithRequires: %{name}-headless = %{epoch}:%{version}-%{release}
-
-Obsoletes: java-1.7.0-openjdk-demo
+%{java_demo_rpo %{nil}}
 
 %description demo
 The OpenJDK demos.
+%endif
+
+%if %{include_debug_build}
+%package demo-debug
+Summary: OpenJDK Demos %{debug_on}
+Group:   Development/Languages
 
+%{java_demo_rpo %{debug_suffix_unquoted}}
+
+%description demo-debug
+The OpenJDK demos.
+%{debug_warning}
+%endif
+
+%if %{include_normal_build}
 %package src
 Summary: OpenJDK Source Bundle
 Group:   Development/Languages
 
-Requires: %{name} = %{epoch}:%{version}-%{release}
-
-Obsoletes: java-1.7.0-openjdk-src
+%{java_src_rpo %{nil}}
 
 %description src
 The OpenJDK source bundle.
+%endif
+
+%if %{include_debug_build}
+%package src-debug
+Summary: OpenJDK Source Bundle %{for_debug}
+Group:   Development/Languages
 
+%{java_src_rpo %{debug_suffix_unquoted}}
+
+%description src-debug
+The OpenJDK source bundle %{for_debug}.
+%endif
+
+%if %{include_normal_build}
 %package javadoc
 Summary: OpenJDK API Documentation
 Group:   Documentation
 Requires: jpackage-utils
 BuildArch: noarch
 
-OrderWithRequires: %{name}-headless = %{epoch}:%{version}-%{release}
-# Post requires alternatives to install javadoc alternative.
-Requires(post):   %{_sbindir}/alternatives
-# Postun requires alternatives to uninstall javadoc alternative.
-Requires(postun): %{_sbindir}/alternatives
-
-# Standard JPackage javadoc provides.
-Provides: java-javadoc = %{epoch}:%{version}-%{release}
-Provides: java-%{javaver}-javadoc = %{epoch}:%{version}-%{release}
-
-Obsoletes: java-1.7.0-openjdk-javadoc
+%{java_javadoc_rpo %{nil}}
 
 %description javadoc
 The OpenJDK API documentation.
+%endif
+
+%if %{include_debug_build}
+%package javadoc-debug
+Summary: OpenJDK API Documentation %{for_debug}
+Group:   Documentation
+Requires: jpackage-utils
+BuildArch: noarch
+
+%{java_javadoc_rpo %{debug_suffix_unquoted}}
 
+%description javadoc-debug
+The OpenJDK API documentation %{for_debug}.
+%endif
+
+%if %{include_normal_build}
 %package accessibility
 Summary: OpenJDK accessibility connector
-Requires: java-atk-wrapper
-Requires: %{name} = %{epoch}:%{version}-%{release}
-OrderWithRequires: %{name}-headless = %{epoch}:%{version}-%{release}
 
-Obsoletes: java-1.7.0-openjdk-accessibility
+%{java_accessibility_rpo %{nil}}
 
 %description accessibility
 Enables accessibility support in OpenJDK by using java-atk-wrapper. This allows
@@ -420,10 +924,36 @@ Please note, the java-atk-wrapper is still in beta, and OpenJDK itself is still
 being tuned to be working with accessibility features. There are known issues
 with accessibility on, so please do not install this package unless you really
 need to.
+%endif
+
+%if %{include_debug_build}
+%package accessibility-debug
+Summary: OpenJDK accessibility connector %{for_debug}
 
+%{java_accessibility_rpo %{debug_suffix_unquoted}}
+
+%description accessibility-debug
+See normal java-%{version}-openjdk-accessibility description.
+%endif
 
 %prep
-%setup -q -c -n %{uniquesuffix} -T -a 0
+if [ %{include_normal_build} -eq 0 -o  %{include_normal_build} -eq 1 ] ; then
+  echo "include_normal_build is %{include_normal_build}"
+else
+  echo "include_normal_build is %{include_normal_build}, thats invalid. Use 1 for yes or 0 for no"
+  exit 11
+fi
+if [ %{include_debug_build} -eq 0 -o  %{include_debug_build} -eq 1 ] ; then
+  echo "include_debug_build is %{include_debug_build}"
+else
+  echo "include_debug_build is %{include_debug_build}, thats invalid. Use 1 for yes or 0 for no"
+  exit 12
+fi
+if [ %{include_debug_build} -eq 0 -a  %{include_normal_build} -eq 0 ] ; then
+  echo "you have disabled both include_debug_build and include_debug_build. no go."
+  exit 13
+fi
+%setup -q -c -n %{uniquesuffix ""} -T -a 0
 # https://bugzilla.redhat.com/show_bug.cgi?id=1189084
 prioritylength=`expr length %{priority}`
 if [ $prioritylength -ne 7 ] ; then
@@ -457,6 +987,9 @@ sh %{SOURCE12}
 %patch201
 %patch202
 %patch203
+%ifnarch %{aarch64}
+%patch204
+%endif
 
 %patch1
 %patch3
@@ -464,10 +997,8 @@ sh %{SOURCE12}
 %patch5
 %patch6
 %patch7
-%patch11
 %patch12
-
-%patch99
+%patch13
 
 # s390 build fixes
 %ifarch s390
@@ -488,29 +1019,39 @@ tar xzf %{SOURCE8}
 
 %patch300
 
-for file in tapset/*.in; do
+%if %{include_debug_build}
+cp -r tapset tapset%{debug_suffix}
+%endif
+
 
+for suffix in %{build_loop} ; do
+  for file in "tapset"$suffix/*.in; do
     OUTPUT_FILE=`echo $file | sed -e s:%{javaver}\.stp\.in$:%{version}-%{release}.%{_arch}.stp:g`
-    sed -e s:@ABS_SERVER_LIBJVM_SO@:%{_jvmdir}/%{sdkdir}/jre/lib/%{archinstall}/server/libjvm.so:g $file > $file.1
+    sed -e s:@ABS_SERVER_LIBJVM_SO@:%{_jvmdir}/%{sdkdir $suffix}/jre/lib/%{archinstall}/server/libjvm.so:g $file > $file.1
 # TODO find out which architectures other than i686 have a client vm
 %ifarch %{ix86}
-    sed -e s:@ABS_CLIENT_LIBJVM_SO@:%{_jvmdir}/%{sdkdir}/jre/lib/%{archinstall}/client/libjvm.so:g $file.1 > $OUTPUT_FILE
+    sed -e s:@ABS_CLIENT_LIBJVM_SO@:%{_jvmdir}/%{sdkdir $suffix}/jre/lib/%{archinstall}/client/libjvm.so:g $file.1 > $OUTPUT_FILE
 %else
     sed -e '/@ABS_CLIENT_LIBJVM_SO@/d' $file.1 > $OUTPUT_FILE
 %endif
-    sed -i -e s:@ABS_JAVA_HOME_DIR@:%{_jvmdir}/%{sdkdir}:g $OUTPUT_FILE
+    sed -i -e s:@ABS_JAVA_HOME_DIR@:%{_jvmdir}/%{sdkdir $suffix}:g $OUTPUT_FILE
     sed -i -e s:@INSTALL_ARCH_DIR@:%{archinstall}:g $OUTPUT_FILE
-
+  done
 done
-
-%endif
+# systemtap tapsets ends
+%endif 
 
 # Prepare desktop files
+for suffix in %{build_loop} ; do
 for file in %{SOURCE9} %{SOURCE10} ; do
-    OUTPUT_FILE=`basename $file | sed -e s:\.in$::g`
-    sed -e s:#JAVA_HOME#:%{sdkbindir}:g $file > $OUTPUT_FILE
-    sed -i -e  s:#JRE_HOME#:%{jrebindir}:g $OUTPUT_FILE
-    sed -i -e  s:#ARCH#:%{version}-%{release}.%{_arch}:g $OUTPUT_FILE
+    FILE=`basename $file | sed -e s:\.in$::g`
+    EXT="${FILE##*.}"
+    NAME="${FILE%.*}"
+    OUTPUT_FILE=$NAME$suffix.$EXT
+    sed -e s:#JAVA_HOME#:%{sdkbindir $suffix}:g $file > $OUTPUT_FILE
+    sed -i -e  s:#JRE_HOME#:%{jrebindir $suffix}:g $OUTPUT_FILE
+    sed -i -e  s:#ARCH#:%{version}-%{release}.%{_arch}$suffix:g $OUTPUT_FILE
+done
 done
 
 %build
@@ -528,8 +1069,8 @@ export CFLAGS="$CFLAGS -mieee"
 
 EXTRA_CFLAGS="-fstack-protector-strong"
 #see https://bugzilla.redhat.com/show_bug.cgi?id=1120792
-EXTRA_CFLAGS="$EXTRA_CFLAGS -fno-devirtualize" 
-EXTRA_CPP_FLAGS="-fno-devirtualize"
+EXTRA_CFLAGS="$EXTRA_CFLAGS -fno-devirtualize -Wno-return-local-addr"
+EXTRA_CPP_FLAGS="-fno-devirtualize -Wno-return-local-addr"
 # PPC/PPC64 needs -fno-tree-vectorize since -O3 would
 # otherwise generate wrong code producing segfaults.
 %ifarch %{power64} ppc
@@ -543,9 +1084,15 @@ export EXTRA_CFLAGS
  bash ./autogen.sh
 )
 
-mkdir -p %{buildoutputdir}
+for suffix in %{build_loop} ; do
+if [ "$suffix" = "%{debug_suffix}" ] ; then
+debugbuild=%{debugbuild_parameter}
+else
+debugbuild=%{normalbuild_parameter}
+fi
 
-pushd %{buildoutputdir}
+mkdir -p %{buildoutputdir $suffix}
+pushd %{buildoutputdir $suffix}
 
 bash ../../configure \
 %ifnarch %{jit_arches}
@@ -562,7 +1109,7 @@ bash ../../configure \
     --with-user-release-suffix="aarch64-%{aarch64_updatever}-%{aarch64_buildver}-%{aarch64_changesetid}" \
 %endif
     --with-boot-jdk=/usr/lib/jvm/java-openjdk \
-    --with-debug-level=%{debugbuild} \
+    --with-debug-level=$debugbuild \
     --enable-unlimited-crypto \
     --with-zlib=system \
     --with-libjpeg=system \
@@ -590,17 +1137,17 @@ make \
 # the build (erroneously) removes read permissions from some jars
 # this is a regression in OpenJDK 7 (our compiler):
 # http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=1437
-find images/j2sdk-image -iname '*.jar' -exec chmod ugo+r {} \;
-chmod ugo+r images/j2sdk-image/lib/ct.sym
+find images/%{j2sdkimage} -iname '*.jar' -exec chmod ugo+r {} \;
+chmod ugo+r images/%{j2sdkimage}/lib/ct.sym
 
 # remove redundant *diz and *debuginfo files
-find images/j2sdk-image -iname '*.diz' -exec rm {} \;
-find images/j2sdk-image -iname '*.debuginfo' -exec rm {} \;
+find images/%{j2sdkimage} -iname '*.diz' -exec rm {} \;
+find images/%{j2sdkimage} -iname '*.debuginfo' -exec rm {} \;
 
 popd >& /dev/null
 
 # Install nss.cfg right away as we will be using the JRE above
-export JAVA_HOME=$(pwd)/%{buildoutputdir}/images/j2sdk-image
+export JAVA_HOME=$(pwd)/%{buildoutputdir $suffix}/images/%{j2sdkimage}
 
 # Install nss.cfg right away as we will be using the JRE above
 install -m 644 %{SOURCE11} $JAVA_HOME/jre/lib/security/
@@ -641,51 +1188,56 @@ $JAVA_HOME/bin/javap -l java.nio.ByteBuffer | grep "Compiled from"
 $JAVA_HOME/bin/javap -l java.nio.ByteBuffer | grep LineNumberTable
 $JAVA_HOME/bin/javap -l java.nio.ByteBuffer | grep LocalVariableTable
 
+#build cycles
+done
+
 %install
 rm -rf $RPM_BUILD_ROOT
 STRIP_KEEP_SYMTAB=libjvm*
 
+for suffix in %{build_loop} ; do
 # Install symlink to default soundfont
-install -d -m 755 $RPM_BUILD_ROOT%{_jvmdir}/%{jredir}/lib/audio
-pushd $RPM_BUILD_ROOT%{_jvmdir}/%{jredir}/lib/audio
+install -d -m 755 $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/audio
+pushd $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/audio
 ln -s %{_datadir}/soundfonts/default.sf2
 popd
 
-pushd %{buildoutputdir}/images/j2sdk-image
+pushd %{buildoutputdir  $suffix}/images/%{j2sdkimage}
 
 #install jsa directories so we can owe them
-mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir}/lib/%{archinstall}/server/
-mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir}/lib/%{archinstall}/client/
+mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/%{archinstall}/server/
+mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/%{archinstall}/client/
 
   # Install main files.
-  install -d -m 755 $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}
-  cp -a bin include lib src.zip $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}
-  install -d -m 755 $RPM_BUILD_ROOT%{_jvmdir}/%{jredir}
-  cp -a jre/bin jre/lib $RPM_BUILD_ROOT%{_jvmdir}/%{jredir}
+  install -d -m 755 $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}
+  cp -a bin include lib src.zip $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}
+  install -d -m 755 $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}
+  cp -a jre/bin jre/lib $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}
 
 %if %{with_systemtap}
   # Install systemtap support files.
-  install -dm 755 $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}/tapset
-  cp -a $RPM_BUILD_DIR/%{uniquesuffix}/tapset/*.stp $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}/tapset/
+  install -dm 755 $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}/tapset
+  # note, that uniquesuffix  is in BUILD dir in this case
+  cp -a $RPM_BUILD_DIR/%{uniquesuffix ""}/tapset$suffix/*.stp $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}/tapset/
   install -d -m 755 $RPM_BUILD_ROOT%{tapsetdir}
   pushd $RPM_BUILD_ROOT%{tapsetdir}
-    RELATIVE=$(%{abs2rel} %{_jvmdir}/%{sdkdir}/tapset %{tapsetdir})
+    RELATIVE=$(%{abs2rel} %{_jvmdir}/%{sdkdir $suffix}/tapset %{tapsetdir})
     ln -sf $RELATIVE/*.stp .
   popd
 %endif
 
   # Install cacerts symlink.
-  rm -f $RPM_BUILD_ROOT%{_jvmdir}/%{jredir}/lib/security/cacerts
-  pushd $RPM_BUILD_ROOT%{_jvmdir}/%{jredir}/lib/security
+  rm -f $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/security/cacerts
+  pushd $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/security
     RELATIVE=$(%{abs2rel} %{_sysconfdir}/pki/java \
-      %{_jvmdir}/%{jredir}/lib/security)
+      %{_jvmdir}/%{jredir $suffix}/lib/security)
     ln -sf $RELATIVE/cacerts .
   popd
 
   # Install extension symlinks.
-  install -d -m 755 $RPM_BUILD_ROOT%{jvmjardir}
-  pushd $RPM_BUILD_ROOT%{jvmjardir}
-    RELATIVE=$(%{abs2rel} %{_jvmdir}/%{jredir}/lib %{jvmjardir})
+  install -d -m 755 $RPM_BUILD_ROOT%{jvmjardir $suffix}
+  pushd $RPM_BUILD_ROOT%{jvmjardir $suffix}
+    RELATIVE=$(%{abs2rel} %{_jvmdir}/%{jredir $suffix}/lib %{jvmjardir $suffix})
     ln -sf $RELATIVE/jsse.jar jsse-%{version}.jar
     ln -sf $RELATIVE/jce.jar jce-%{version}.jar
     ln -sf $RELATIVE/rt.jar jndi-%{version}.jar
@@ -707,15 +1259,15 @@ mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir}/lib/%{archinstall}/client/
   popd
 
   # Install JCE policy symlinks.
-  install -d -m 755 $RPM_BUILD_ROOT%{_jvmprivdir}/%{uniquesuffix}/jce/vanilla
+  install -d -m 755 $RPM_BUILD_ROOT%{_jvmprivdir}/%{uniquesuffix $suffix}/jce/vanilla
 
   # Install versioned symlinks.
   pushd $RPM_BUILD_ROOT%{_jvmdir}
-    ln -sf %{jredir} %{jrelnk}
+    ln -sf %{jredir $suffix} %{jrelnk $suffix}
   popd
 
   pushd $RPM_BUILD_ROOT%{_jvmjardir}
-    ln -sf %{sdkdir} %{jrelnk}
+    ln -sf %{sdkdir $suffix} %{jrelnk $suffix}
   popd
 
   # Remove javaws man page
@@ -729,21 +1281,24 @@ mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir}/lib/%{archinstall}/client/
     iconv -f ISO_8859-1 -t UTF8 $manpage -o $manpage.tmp
     mv -f $manpage.tmp $manpage
     install -m 644 -p $manpage $RPM_BUILD_ROOT%{_mandir}/man1/$(basename \
-      $manpage .1)-%{uniquesuffix}.1
+      $manpage .1)-%{uniquesuffix $suffix}.1
   done
 
   # Install demos and samples.
-  cp -a demo $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}
+  cp -a demo $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}
   mkdir -p sample/rmi
-  mv bin/java-rmi.cgi sample/rmi
-  cp -a sample $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}
+  if [ ! -e sample/rmi/java-rmi.cgi ] ; then 
+    # hack to allow --short-circuit on install
+    mv bin/java-rmi.cgi sample/rmi
+  fi
+  cp -a sample $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}
 
 popd
 
 
 # Install Javadoc documentation.
 install -d -m 755 $RPM_BUILD_ROOT%{_javadocdir}
-cp -a %{buildoutputdir}/docs $RPM_BUILD_ROOT%{_javadocdir}/%{uniquejavadocdir}
+cp -a %{buildoutputdir $suffix}/docs $RPM_BUILD_ROOT%{_javadocdir}/%{uniquejavadocdir $suffix}
 
 # Install icons and menu entries.
 for s in 16 24 32 48 ; do
@@ -754,8 +1309,8 @@ done
 
 # Install desktop files.
 install -d -m 755 $RPM_BUILD_ROOT%{_datadir}/{applications,pixmaps}
-for e in jconsole policytool ; do
-    desktop-file-install --vendor=%{uniquesuffix} --mode=644 \
+for e in jconsole$suffix policytool$suffix ; do
+    desktop-file-install --vendor=%{uniquesuffix $suffix} --mode=644 \
         --dir=$RPM_BUILD_ROOT%{_datadir}/applications $e.desktop
 done
 
@@ -764,26 +1319,26 @@ done
 mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/.java/.systemPrefs
 
 # Find JRE directories.
-find $RPM_BUILD_ROOT%{_jvmdir}/%{jredir} -type d \
+find $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix} -type d \
   | grep -v jre/lib/security \
   | sed 's|'$RPM_BUILD_ROOT'|%dir |' \
-  > %{name}.files-headless
+  > %{name}.files-headless"$suffix"
 # Find JRE files.
-find $RPM_BUILD_ROOT%{_jvmdir}/%{jredir} -type f -o -type l \
+find $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix} -type f -o -type l \
   | grep -v jre/lib/security \
   | sed 's|'$RPM_BUILD_ROOT'||' \
-  > %{name}.files.all
+  > %{name}.files.all"$suffix"
 #split %%{name}.files to %%{name}.files-headless and %%{name}.files
 #see https://bugzilla.redhat.com/show_bug.cgi?id=875408
 NOT_HEADLESS=\
-"%{_jvmdir}/%{uniquesuffix}/jre/lib/%{archinstall}/libjsoundalsa.so
-%{_jvmdir}/%{uniquesuffix}/jre/lib/%{archinstall}/libpulse-java.so
-%{_jvmdir}/%{uniquesuffix}/jre/lib/%{archinstall}/libsplashscreen.so
-%{_jvmdir}/%{uniquesuffix}/jre/lib/%{archinstall}/libawt_xawt.so
-%{_jvmdir}/%{uniquesuffix}/jre/lib/%{archinstall}/libjawt.so
-%{_jvmdir}/%{uniquesuffix}/jre/bin/policytool"
+"%{_jvmdir}/%{uniquesuffix $suffix}/jre/lib/%{archinstall}/libjsoundalsa.so
+%{_jvmdir}/%{uniquesuffix $suffix}/jre/lib/%{archinstall}/libpulse-java.so
+%{_jvmdir}/%{uniquesuffix $suffix}/jre/lib/%{archinstall}/libsplashscreen.so
+%{_jvmdir}/%{uniquesuffix $suffix}/jre/lib/%{archinstall}/libawt_xawt.so
+%{_jvmdir}/%{uniquesuffix $suffix}/jre/lib/%{archinstall}/libjawt.so
+%{_jvmdir}/%{uniquesuffix $suffix}/jre/bin/policytool"
 #filter  %%{name}.files from  %%{name}.files.all to %%{name}.files-headless
-ALL=`cat %{name}.files.all`
+ALL=`cat %{name}.files.all"$suffix"`
 for file in $ALL ; do 
   INLCUDE="NO" ; 
   for blacklist in $NOT_HEADLESS ; do
@@ -795,61 +1350,66 @@ for file in $ALL ; do
     fi;
 done
 if [ "x$INLCUDE" = "xNO"  ]; then 
-    echo "$file" >> %{name}.files-headless
+    echo "$file" >> %{name}.files-headless"$suffix"
 else
-    echo "$file" >> %{name}.files
+    echo "$file" >> %{name}.files"$suffix"
 fi
 done
 # Find demo directories.
-find $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}/demo \
-  $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}/sample -type d \
+find $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}/demo \
+  $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}/sample -type d \
   | sed 's|'$RPM_BUILD_ROOT'|%dir |' \
-  > %{name}-demo.files
+  > %{name}-demo.files"$suffix"
 
 # FIXME: remove SONAME entries from demo DSOs.  See
 # https://bugzilla.redhat.com/show_bug.cgi?id=436497
 
 # Find non-documentation demo files.
-find $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}/demo \
-  $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}/sample \
+find $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}/demo \
+  $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}/sample \
   -type f -o -type l | sort \
   | grep -v README \
   | sed 's|'$RPM_BUILD_ROOT'||' \
-  >> %{name}-demo.files
+  >> %{name}-demo.files"$suffix"
 # Find documentation demo files.
-find $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}/demo \
-  $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir}/sample \
+find $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}/demo \
+  $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir $suffix}/sample \
   -type f -o -type l | sort \
   | grep README \
   | sed 's|'$RPM_BUILD_ROOT'||' \
   | sed 's|^|%doc |' \
-  >> %{name}-demo.files
+  >> %{name}-demo.files"$suffix"
 
 # intentionally after the files generation, as it goes to separate package
 # Create links which leads to separately installed java-atk-bridge and allow configuration
 # links points to java-atk-wrapper - an dependence
-  pushd $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir}/lib/%{archinstall}
+  pushd $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir $suffix}/lib/%{archinstall}
     ln -s %{_libdir}/java-atk-wrapper/libatk-wrapper.so.0 libatk-wrapper.so
   popd
-  pushd $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir}/lib/ext
+  pushd $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir $suffix}/lib/ext
      ln -s %{_libdir}/java-atk-wrapper/java-atk-wrapper.jar  java-atk-wrapper.jar
   popd
-  pushd $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir}/lib/
+  pushd $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir $suffix}/lib/
     echo "#Config file to  enable java-atk-wrapper" > accessibility.properties
     echo "" >> accessibility.properties
     echo "assistive_technologies=org.GNOME.Accessibility.AtkWrapper" >> accessibility.properties
     echo "" >> accessibility.properties
   popd
 
-bash %{SOURCE20} $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir} %{javaver}
+bash %{SOURCE20} $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir $suffix} %{javaver}
+
+# end, dual install
+done
 
+%if %{include_normal_build} 
+# intentioanlly only for non-debug
 %pretrans headless -p <lua>
 -- see https://bugzilla.redhat.com/show_bug.cgi?id=1038092 for whole issue 
 
 local posix = require "posix"
 
-local currentjvm = "%{uniquesuffix}"
-local jvmdir = "%{_jvmdir}"
+local currentjvm = "%{uniquesuffix %{nil}}"
+local jvmdir = "%{_jvmdir %{nil}}"
 local jvmDestdir = jvmdir
 local origname = "%{name}"
 local origjavaver = "%{javaver}"
@@ -1013,412 +1573,179 @@ for i,file in pairs(caredFiles) do
   end
 end
 
-
 %post 
-update-desktop-database %{_datadir}/applications &> /dev/null || :
-/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
-exit 0
-
+%{post_script %{nil}}
 
-# FIXME: identical binaries are copied, not linked. This needs to be
-# fixed upstream.
 %post headless
-# The pretrans lua scriptlet prevents an unmodified java.security
-# from being replaced via an update. It gets created as
-# java.security.rpmnew instead. This invalidates the patch of
-# JDK-8061210 of the January 2015 CPU. We fix this via a
-# post scriptlet which runs on updates.
-if [ "$1" -gt 1 ]; then
-  javasecurity="%{_jvmdir}/%{uniquesuffix}/jre/lib/security/java.security"
-  sum=$(md5sum "${javasecurity}" | cut -d' ' -f1)
-  # Check against md5sum's of shipped and unmodified java.security files:
-  # java-1.8.0-openjdk-headless >= 1.8.0.25-2.b18: e63335add7d93bc42637d2a90880da57
-  # java-1.8.0-openjdk-headless <  1.8.0.25-2.b18: 1690ac33955594f71dc952c9e83fd396
-  if [ "${sum}" = '1690ac33955594f71dc952c9e83fd396' ] || [ "${sum}" = 'e63335add7d93bc42637d2a90880da57' ]; then
-    if [ -f "${javasecurity}.rpmnew" ]; then
-      mv -f "${javasecurity}.rpmnew" "${javasecurity}"
-    fi
-  fi
-fi
-
-%ifarch %{jit_arches}
-%ifnarch %{ppc64le}
-#see https://bugzilla.redhat.com/show_bug.cgi?id=513605
-%{jrebindir}/java -Xshare:dump >/dev/null 2>/dev/null
-%endif
-%endif
-
-ext=.gz
-alternatives \
-  --install %{_bindir}/java java %{jrebindir}/java %{priority} \
-  --slave %{_jvmdir}/jre jre %{_jvmdir}/%{jredir} \
-  --slave %{_jvmjardir}/jre jre_exports %{_jvmjardir}/%{jrelnk} \
-  --slave %{_bindir}/jjs jjs %{jrebindir}/jjs \
-  --slave %{_bindir}/keytool keytool %{jrebindir}/keytool \
-  --slave %{_bindir}/orbd orbd %{jrebindir}/orbd \
-  --slave %{_bindir}/pack200 pack200 %{jrebindir}/pack200 \
-  --slave %{_bindir}/rmid rmid %{jrebindir}/rmid \
-  --slave %{_bindir}/rmiregistry rmiregistry %{jrebindir}/rmiregistry \
-  --slave %{_bindir}/servertool servertool %{jrebindir}/servertool \
-  --slave %{_bindir}/tnameserv tnameserv %{jrebindir}/tnameserv \
-  --slave %{_bindir}/unpack200 unpack200 %{jrebindir}/unpack200 \
-  --slave %{_mandir}/man1/java.1$ext java.1$ext \
-  %{_mandir}/man1/java-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jjs.1$ext jjs.1$ext \
-  %{_mandir}/man1/jjs-%{uniquesuffix}.1$ext \
-  --slave %{_bindir}/policytool policytool %{jrebindir}/policytool \
-  --slave %{_mandir}/man1/keytool.1$ext keytool.1$ext \
-  %{_mandir}/man1/keytool-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/orbd.1$ext orbd.1$ext \
-  %{_mandir}/man1/orbd-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/pack200.1$ext pack200.1$ext \
-  %{_mandir}/man1/pack200-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/rmid.1$ext rmid.1$ext \
-  %{_mandir}/man1/rmid-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/rmiregistry.1$ext rmiregistry.1$ext \
-  %{_mandir}/man1/rmiregistry-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/servertool.1$ext servertool.1$ext \
-  %{_mandir}/man1/servertool-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/tnameserv.1$ext tnameserv.1$ext \
-  %{_mandir}/man1/tnameserv-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/unpack200.1$ext unpack200.1$ext \
-  %{_mandir}/man1/unpack200-%{uniquesuffix}.1$ext
-
-for X in %{origin} %{javaver} ; do
-  alternatives \
-    --install %{_jvmdir}/jre-"$X" \
-    jre_"$X" %{_jvmdir}/%{jredir} %{priority} \
-    --slave %{_jvmjardir}/jre-"$X" \
-    jre_"$X"_exports %{_jvmdir}/%{jredir}
-done
-
-update-alternatives --install %{_jvmdir}/jre-%{javaver}-%{origin} jre_%{javaver}_%{origin} %{_jvmdir}/%{jrelnk} %{priority} \
---slave %{_jvmjardir}/jre-%{javaver}       jre_%{javaver}_%{origin}_exports      %{jvmjardir}
-
-update-desktop-database %{_datadir}/applications &> /dev/null || :
-
-/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
-
-exit 0
+%{post_headless %{nil}}
 
 %postun
-update-desktop-database %{_datadir}/applications &> /dev/null || :
-
-if [ $1 -eq 0 ] ; then
-    /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null
-    /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
-fi
-
-exit 0
-
+%{postun_script %{nil}}
 
 %postun headless
-  alternatives --remove java %{jrebindir}/java
-  alternatives --remove jre_%{origin} %{_jvmdir}/%{jredir}
-  alternatives --remove jre_%{javaver} %{_jvmdir}/%{jredir}
-  alternatives --remove jre_%{javaver}_%{origin} %{_jvmdir}/%{jrelnk}
-
+%{postun_headless %{nil}}
 
 %posttrans
-/usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
+%{posttrans_script %{nil}}
 
 %post devel
-ext=.gz
-alternatives \
-  --install %{_bindir}/javac javac %{sdkbindir}/javac %{priority} \
-  --slave %{_jvmdir}/java java_sdk %{_jvmdir}/%{sdkdir} \
-  --slave %{_jvmjardir}/java java_sdk_exports %{_jvmjardir}/%{sdkdir} \
-  --slave %{_bindir}/appletviewer appletviewer %{sdkbindir}/appletviewer \
-  --slave %{_bindir}/extcheck extcheck %{sdkbindir}/extcheck \
-  --slave %{_bindir}/idlj idlj %{sdkbindir}/idlj \
-  --slave %{_bindir}/jar jar %{sdkbindir}/jar \
-  --slave %{_bindir}/jarsigner jarsigner %{sdkbindir}/jarsigner \
-  --slave %{_bindir}/javadoc javadoc %{sdkbindir}/javadoc \
-  --slave %{_bindir}/javah javah %{sdkbindir}/javah \
-  --slave %{_bindir}/javap javap %{sdkbindir}/javap \
-  --slave %{_bindir}/jcmd jcmd %{sdkbindir}/jcmd \
-  --slave %{_bindir}/jconsole jconsole %{sdkbindir}/jconsole \
-  --slave %{_bindir}/jdb jdb %{sdkbindir}/jdb \
-  --slave %{_bindir}/jdeps jdeps %{sdkbindir}/jdeps \
-  --slave %{_bindir}/jhat jhat %{sdkbindir}/jhat \
-  --slave %{_bindir}/jinfo jinfo %{sdkbindir}/jinfo \
-  --slave %{_bindir}/jmap jmap %{sdkbindir}/jmap \
-  --slave %{_bindir}/jps jps %{sdkbindir}/jps \
-  --slave %{_bindir}/jrunscript jrunscript %{sdkbindir}/jrunscript \
-  --slave %{_bindir}/jsadebugd jsadebugd %{sdkbindir}/jsadebugd \
-  --slave %{_bindir}/jstack jstack %{sdkbindir}/jstack \
-  --slave %{_bindir}/jstat jstat %{sdkbindir}/jstat \
-  --slave %{_bindir}/jstatd jstatd %{sdkbindir}/jstatd \
-  --slave %{_bindir}/native2ascii native2ascii %{sdkbindir}/native2ascii \
-  --slave %{_bindir}/rmic rmic %{sdkbindir}/rmic \
-  --slave %{_bindir}/schemagen schemagen %{sdkbindir}/schemagen \
-  --slave %{_bindir}/serialver serialver %{sdkbindir}/serialver \
-  --slave %{_bindir}/wsgen wsgen %{sdkbindir}/wsgen \
-  --slave %{_bindir}/wsimport wsimport %{sdkbindir}/wsimport \
-  --slave %{_bindir}/xjc xjc %{sdkbindir}/xjc \
-  --slave %{_mandir}/man1/appletviewer.1$ext appletviewer.1$ext \
-  %{_mandir}/man1/appletviewer-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/extcheck.1$ext extcheck.1$ext \
-  %{_mandir}/man1/extcheck-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/idlj.1$ext idlj.1$ext \
-  %{_mandir}/man1/idlj-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jar.1$ext jar.1$ext \
-  %{_mandir}/man1/jar-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jarsigner.1$ext jarsigner.1$ext \
-  %{_mandir}/man1/jarsigner-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/javac.1$ext javac.1$ext \
-  %{_mandir}/man1/javac-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/javadoc.1$ext javadoc.1$ext \
-  %{_mandir}/man1/javadoc-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/javah.1$ext javah.1$ext \
-  %{_mandir}/man1/javah-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/javap.1$ext javap.1$ext \
-  %{_mandir}/man1/javap-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jcmd.1$ext jcmd.1$ext \
-  %{_mandir}/man1/jcmd-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jconsole.1$ext jconsole.1$ext \
-  %{_mandir}/man1/jconsole-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jdb.1$ext jdb.1$ext \
-  %{_mandir}/man1/jdb-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jdeps.1$ext jdeps.1$ext \
-  %{_mandir}/man1/jdeps-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jhat.1$ext jhat.1$ext \
-  %{_mandir}/man1/jhat-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jinfo.1$ext jinfo.1$ext \
-  %{_mandir}/man1/jinfo-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jmap.1$ext jmap.1$ext \
-  %{_mandir}/man1/jmap-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jps.1$ext jps.1$ext \
-  %{_mandir}/man1/jps-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jrunscript.1$ext jrunscript.1$ext \
-  %{_mandir}/man1/jrunscript-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jsadebugd.1$ext jsadebugd.1$ext \
-  %{_mandir}/man1/jsadebugd-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jstack.1$ext jstack.1$ext \
-  %{_mandir}/man1/jstack-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jstat.1$ext jstat.1$ext \
-  %{_mandir}/man1/jstat-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/jstatd.1$ext jstatd.1$ext \
-  %{_mandir}/man1/jstatd-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/native2ascii.1$ext native2ascii.1$ext \
-  %{_mandir}/man1/native2ascii-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/policytool.1$ext policytool.1$ext \
-  %{_mandir}/man1/policytool-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/rmic.1$ext rmic.1$ext \
-  %{_mandir}/man1/rmic-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/schemagen.1$ext schemagen.1$ext \
-  %{_mandir}/man1/schemagen-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/serialver.1$ext serialver.1$ext \
-  %{_mandir}/man1/serialver-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/wsgen.1$ext wsgen.1$ext \
-  %{_mandir}/man1/wsgen-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/wsimport.1$ext wsimport.1$ext \
-  %{_mandir}/man1/wsimport-%{uniquesuffix}.1$ext \
-  --slave %{_mandir}/man1/xjc.1$ext xjc.1$ext \
-  %{_mandir}/man1/xjc-%{uniquesuffix}.1$ext
+%{post_devel %{nil}}
 
-for X in %{origin} %{javaver} ; do
-  alternatives \
-    --install %{_jvmdir}/java-"$X" \
-    java_sdk_"$X" %{_jvmdir}/%{sdkdir} %{priority} \
-    --slave %{_jvmjardir}/java-"$X" \
-    java_sdk_"$X"_exports %{_jvmjardir}/%{sdkdir}
-done
-
-update-alternatives --install %{_jvmdir}/java-%{javaver}-%{origin} java_sdk_%{javaver}_%{origin} %{_jvmdir}/%{sdkdir} %{priority} \
---slave %{_jvmjardir}/java-%{javaver}-%{origin}       java_sdk_%{javaver}_%{origin}_exports      %{_jvmjardir}/%{sdkdir}
+%postun devel
+%{postun_devel %{nil}}
 
-update-desktop-database %{_datadir}/applications &> /dev/null || :
-/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
+%posttrans  devel
+%{posttrans_devel %{nil}}
 
-exit 0
+%post javadoc
+%{post_javadoc %{nil}}
 
-%postun devel
-  alternatives --remove javac %{sdkbindir}/javac
-  alternatives --remove java_sdk_%{origin} %{_jvmdir}/%{sdkdir}
-  alternatives --remove java_sdk_%{javaver} %{_jvmdir}/%{sdkdir}
-  alternatives --remove java_sdk_%{javaver}_%{origin} %{_jvmdir}/%{sdkdir}
+%postun javadoc
+%{postun_javadoc %{nil}}
+%endif
 
-update-desktop-database %{_datadir}/applications &> /dev/null || :
+%if %{include_debug_build} 
+%post debug
+%{post_script %{debug_suffix_unquoted}}
 
-if [ $1 -eq 0 ] ; then
-    /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null
-    /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
-fi
+%post headless-debug
+%{post_headless %{debug_suffix_unquoted}}
 
-exit 0
+%postun debug
+%{postun_script %{debug_suffix_unquoted}}
 
-%posttrans  devel
-/usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
+%postun headless-debug
+%{postun_headless %{debug_suffix_unquoted}}
 
+%posttrans debug
+%{posttrans_script %{debug_suffix_unquoted}}
 
-%post javadoc
-alternatives \
-  --install %{_javadocdir}/java javadocdir %{_javadocdir}/%{uniquejavadocdir}/api \
-  %{priority}
+%post devel-debug
+%{post_devel %{debug_suffix_unquoted}}
 
-exit 0
+%postun devel-debug
+%{postun_devel %{debug_suffix_unquoted}}
 
-%postun javadoc
-  alternatives --remove javadocdir %{_javadocdir}/%{uniquejavadocdir}/api
+%posttrans  devel-debug
+%{posttrans_devel %{debug_suffix_unquoted}}
 
-exit 0
+%post javadoc-debug
+%{post_javadoc %{debug_suffix_unquoted}}
 
+%postun javadoc-debug
+%{postun_javadoc %{debug_suffix_unquoted}}
+%endif
 
+%if %{include_normal_build} 
 %files -f %{name}.files
-%{_datadir}/icons/hicolor/*x*/apps/java-%{javaver}.png
-%{_datadir}/applications/*policytool.desktop
+# main package builds always
+%{files_jre %{nil}}
+%else
+%files
+# placeholder
+%endif
 
+
+%if %{include_normal_build} 
+%files headless  -f %{name}.files-headless
 # important note, see https://bugzilla.redhat.com/show_bug.cgi?id=1038092 for whole issue 
 # all config/norepalce files (and more) have to be declared in pretrans. See pretrans
-%files headless  -f %{name}.files-headless
-%defattr(-,root,root,-)
-%doc %{buildoutputdir}/images/j2sdk-image/jre/ASSEMBLY_EXCEPTION
-%doc %{buildoutputdir}/images/j2sdk-image/jre/LICENSE
-%doc %{buildoutputdir}/images/j2sdk-image/jre/THIRD_PARTY_README
-%dir %{_jvmdir}/%{sdkdir}
-%{_jvmdir}/%{jrelnk}
-%{_jvmjardir}/%{jrelnk}
-%{_jvmprivdir}/*
-%{jvmjardir}
-%dir %{_jvmdir}/%{jredir}/lib/security
-%{_jvmdir}/%{jredir}/lib/security/cacerts
-%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/US_export_policy.jar
-%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/local_policy.jar
-%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/java.policy
-%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/java.security
-%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/blacklisted.certs
-%config(noreplace) %{_jvmdir}/%{jredir}/lib/logging.properties
-%{_mandir}/man1/java-%{uniquesuffix}.1*
-%{_mandir}/man1/jjs-%{uniquesuffix}.1*
-%{_mandir}/man1/keytool-%{uniquesuffix}.1*
-%{_mandir}/man1/orbd-%{uniquesuffix}.1*
-%{_mandir}/man1/pack200-%{uniquesuffix}.1*
-%{_mandir}/man1/rmid-%{uniquesuffix}.1*
-%{_mandir}/man1/rmiregistry-%{uniquesuffix}.1*
-%{_mandir}/man1/servertool-%{uniquesuffix}.1*
-%{_mandir}/man1/tnameserv-%{uniquesuffix}.1*
-%{_mandir}/man1/unpack200-%{uniquesuffix}.1*
-%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/nss.cfg
-%{_jvmdir}/%{jredir}/lib/audio/
-%ifarch %{jit_arches}
-%attr(664, root, root) %ghost %{_jvmdir}/%{jredir}/lib/%{archinstall}/server/classes.jsa
-%attr(664, root, root) %ghost %{_jvmdir}/%{jredir}/lib/%{archinstall}/client/classes.jsa
-%endif
-
-%{_jvmdir}/%{jredir}/lib/%{archinstall}/server/
-%{_jvmdir}/%{jredir}/lib/%{archinstall}/client/
+%{files_jre_headless %{nil}}
 
 %files devel
-%defattr(-,root,root,-)
-%doc %{buildoutputdir}/images/j2sdk-image/ASSEMBLY_EXCEPTION
-%doc %{buildoutputdir}/images/j2sdk-image/LICENSE
-%doc %{buildoutputdir}/images/j2sdk-image/THIRD_PARTY_README
-%dir %{_jvmdir}/%{sdkdir}/bin
-%dir %{_jvmdir}/%{sdkdir}/include
-%dir %{_jvmdir}/%{sdkdir}/lib
-%if %{with_systemtap}
-%dir %{_jvmdir}/%{sdkdir}/tapset
-%endif
-%{_jvmdir}/%{sdkdir}/bin/*
-%{_jvmdir}/%{sdkdir}/include/*
-%{_jvmdir}/%{sdkdir}/lib/*
-%if %{with_systemtap}
-%{_jvmdir}/%{sdkdir}/tapset/*.stp
-%endif
-%{_jvmjardir}/%{sdkdir}
-%{_datadir}/applications/*jconsole.desktop
-%{_mandir}/man1/appletviewer-%{uniquesuffix}.1*
-%{_mandir}/man1/extcheck-%{uniquesuffix}.1*
-%{_mandir}/man1/idlj-%{uniquesuffix}.1*
-%{_mandir}/man1/jar-%{uniquesuffix}.1*
-%{_mandir}/man1/jarsigner-%{uniquesuffix}.1*
-%{_mandir}/man1/javac-%{uniquesuffix}.1*
-%{_mandir}/man1/javadoc-%{uniquesuffix}.1*
-%{_mandir}/man1/javah-%{uniquesuffix}.1*
-%{_mandir}/man1/javap-%{uniquesuffix}.1*
-%{_mandir}/man1/jconsole-%{uniquesuffix}.1*
-%{_mandir}/man1/jcmd-%{uniquesuffix}.1*
-%{_mandir}/man1/jdb-%{uniquesuffix}.1*
-%{_mandir}/man1/jdeps-%{uniquesuffix}.1*
-%{_mandir}/man1/jhat-%{uniquesuffix}.1*
-%{_mandir}/man1/jinfo-%{uniquesuffix}.1*
-%{_mandir}/man1/jmap-%{uniquesuffix}.1*
-%{_mandir}/man1/jps-%{uniquesuffix}.1*
-%{_mandir}/man1/jrunscript-%{uniquesuffix}.1*
-%{_mandir}/man1/jsadebugd-%{uniquesuffix}.1*
-%{_mandir}/man1/jstack-%{uniquesuffix}.1*
-%{_mandir}/man1/jstat-%{uniquesuffix}.1*
-%{_mandir}/man1/jstatd-%{uniquesuffix}.1*
-%{_mandir}/man1/native2ascii-%{uniquesuffix}.1*
-%{_mandir}/man1/policytool-%{uniquesuffix}.1*
-%{_mandir}/man1/rmic-%{uniquesuffix}.1*
-%{_mandir}/man1/schemagen-%{uniquesuffix}.1*
-%{_mandir}/man1/serialver-%{uniquesuffix}.1*
-%{_mandir}/man1/wsgen-%{uniquesuffix}.1*
-%{_mandir}/man1/wsimport-%{uniquesuffix}.1*
-%{_mandir}/man1/xjc-%{uniquesuffix}.1*
-%if %{with_systemtap}
-%{tapsetroot}
-%endif
+%{files_devel %{nil}}
 
 %files demo -f %{name}-demo.files
-%defattr(-,root,root,-)
-%doc %{buildoutputdir}/images/j2sdk-image/jre/LICENSE
+%{files_demo %{nil}}
 
 %files src
-%defattr(-,root,root,-)
-%doc README.src
-%{_jvmdir}/%{sdkdir}/src.zip
+%{files_src %{nil}}
 
 %files javadoc
-%defattr(-,root,root,-)
-%doc %{_javadocdir}/%{uniquejavadocdir}
-%doc %{buildoutputdir}/images/j2sdk-image/jre/LICENSE
+%{files_javadoc %{nil}}
 
 %files accessibility
-%{_jvmdir}/%{jredir}/lib/%{archinstall}/libatk-wrapper.so
-%{_jvmdir}/%{jredir}/lib/ext/java-atk-wrapper.jar
-%{_jvmdir}/%{jredir}/lib/accessibility.properties
+%{files_accessibility %{nil}}
+%endif
+
+%if %{include_debug_build} 
+%files debug -f %{name}.files-debug
+%{files_jre %{debug_suffix_unquoted}}
+
+%files headless-debug  -f %{name}.files-headless-debug
+%{files_jre_headless %{debug_suffix_unquoted}}
+
+%files devel-debug
+%{files_devel %{debug_suffix_unquoted}}
+
+%files demo-debug -f %{name}-demo.files-debug
+%{files_demo %{debug_suffix_unquoted}}
+
+%files src-debug
+%{files_src %{debug_suffix_unquoted}}
+
+%files javadoc-debug
+%{files_javadoc %{debug_suffix_unquoted}}
+
+%files accessibility-debug
+%{files_accessibility %{debug_suffix_unquoted}}
+%endif
+
 
 %changelog
-* Thu Feb 12 2015 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.25-4.b12
+* Tue Mar 03 2015 Severin Gehwolf <sgehwolf at redhat.com> - 1:1.8.0.40-21.b25
+- Added compiler no-warn-
+
+* Fri Feb 20 2015 Omair Majid <omajid at redhat.com> - 1:1.8.0.40-21.b25
+- Fix zero interpreter build.
+
+* Thu Feb 12 2015 Omair Majid <omajid at redhat.com> - 1:1.8.0.40-21.b25
+- Fix building with gcc 5 by ignoring return-local-addr warning
+- Include additional debugging info for java class files and test that they are
+  present
+
+* Thu Feb 12 2015 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-20.b25
+- bumped to b25
+- removed upstreamed patch11 hotspot-build-j-directive.patch
 - policies repacked to stop spamming yum update
 - added and used source20 repackReproduciblePolycies.sh
 - added mehanism to force priority size
 
-* Thu Jan 22 2015 Severin Gehwolf <sgehwolf at redhat.com> - 1:1.8.0.31-3.b13
-- Check for one additional md5sum in post scriptlet.
+* Fri Jan 09 2015 Dan Horák <dan[at]danny.cz> - 1:1.8.0.40-19.b12
+- refresh s390 patches
 
-* Wed Jan 21 2015 Severin Gehwolf <sgehwolf at redhat.com> - 1:1.8.0.31-2.b13
-- Replace unmodified java.security file via headless post scriptlet.
-
-* Mon Jan 12 2015 Severin Gehwolf <sgehwolf at redhat.com> - 1:1.8.0.31-1.b13
-- Update to January CPU patch update.
-
-* Fri Nov 07 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.25-5.b12
+* Fri Nov 07 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-18.b12
 - updated arm64 tarball to jdk8-jdk8u40-b12-aarch64-1263.tar.xz
 
-* Fri Nov 07 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.25-4.b12
+* Fri Nov 07 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-17.b12
 - obsoleted gcj and sindoc. rh1149674 and rh1149675
+- removed backup/restore on images and docs in favor of reconfigure in different directory
+
+* Mon Nov 03 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-16.b12
+- updated both noral and aarch64 tarballs to u40b12
+
+* Mon Nov 03 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-15.b02
+- enabled debug packages
 - removed all provides duplicating package name
+- comments about files moved inside files section (to prevent different javadoc postuns)
+ - see (RH1160693)
+
+* Fri Oct 31 2014 Omair Majid <omajid at redhat.com> - 1:1.8.0.40-13.b02
+- Build against libjpeg-turbo-1.4
 
-* Mon Nov 03 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.25-3.b12
-- updated aarch64 tarball to u40b12
+* Fri Oct 24 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-13.b02
+- preparing for parallel debug+normal build
+- files and scripelts moved to extendable macros as first step to dual build
+- install and build may be done in loop for both release and slowdebug
+- debugbuild off untill its completed
 
-* Fri Oct 24 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.25-2.b18
+* Fri Oct 24 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-12.b02
 - added patch12,removeSunEcProvider-RH1154143
 - xdump excluded from ppc64le (rh1156151)
 - Add check for src.zip completeness. See RH1130490 (by sgehwolf at redhat.com)
 - Resolves: rhbz#1125260
 
-* Wed Oct 15 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.25-0.b18
-- updated to security u25
-
-* Thu Oct 02 2014 Dan Horák <dan[at]danny.cz> - 1:1.8.0.20-12.b26
-- refresh the size_t patch for u20 from rhel7
-
-* Thu Sep 25 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.20-11.b26
+* Thu Sep 25 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-11.b02
 - fixing flags usages (thanx to jerboaa!)
 
 * Thu Sep 25 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.20-10.b26
@@ -1436,7 +1763,7 @@ exit 0
 - Update aarch64 hotspot to latest upstream version
 
 * Fri Sep 05 2014 Omair Majid <omajid at redhat.com> - 1:1.8.0.40-6.b26
-- Use %%{power64} instead of %%{ppc64}
+- Use %%{power64} instead of %%{ppc64}.
 
 * Thu Sep 04 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-5.b26
 - Update aarch64 hotspot to jdk7u40-b02 to match the rest of the JDK
@@ -1453,20 +1780,22 @@ exit 0
 - requirement Requires: javazi-1.8/tzdb.dat changed to tzdata-java >= 2014f-1
 - see RH1130800#c5
 
-* Wed Aug 27 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.20-1.b26
-- updated to u20-b26
-- adapted patch9999 enableArm64.patch
-- adapted patch100 s390-java-opts.patch
-- adapted patch102 size_t.patch
+* Wed Aug 27 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-1.b02
+- adapted aarch64 patch
 - removed upstreamed patch  0001-PPC64LE-arch-support-in-openjdk-1.8.patch
 
-* Wed Aug 27 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.20-1.b23
-- updated to u20-b23
+* Wed Aug 27 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-1.b02
+- updated to u40-b02
+- adapted aarch64 patches
+
+* Wed Aug 27 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.40-1.b01
+- updated to u40-b01
 - adapted  java-1.8.0-openjdk-accessible-toolkit.patch
 - adapted  system-lcms.patch
 - removed patch8 set-active-window.patch
 - removed patch9 javadoc-error-jdk-8029145.patch
 - removed patch10 javadoc-error-jdk-8037484.patch
+- removed patch99 applet-hole.patch - itw 1.5.1 is able to ive without it
 
 * Tue Aug 19 2014 Jiri Vanek <jvanek at redhat.com> - 1:1.8.0.11-19.b12
 - fixed desktop icons
diff --git a/libjpeg-turbo-1.4-compat.patch b/libjpeg-turbo-1.4-compat.patch
new file mode 100644
index 0000000..26ffc7b
--- /dev/null
+++ b/libjpeg-turbo-1.4-compat.patch
@@ -0,0 +1,33 @@
+Remove uses of FAR in jpeg code
+
+Upstream libjpeg-trubo removed the (empty) FAR macro:
+http://sourceforge.net/p/libjpeg-turbo/code/1312/
+
+Adjust our code to not use the undefined FAR macro anymore.
+
+diff --git a/src/share/native/sun/awt/image/jpeg/imageioJPEG.c b/src/share/native/sun/awt/image/jpeg/imageioJPEG.c
+--- jdk8/jdk/src/share/native/sun/awt/image/jpeg/imageioJPEG.c
++++ jdk8/jdk/src/share/native/sun/awt/image/jpeg/imageioJPEG.c
+@@ -1385,7 +1385,7 @@
+     /* and fill it in */
+     dst_ptr = icc_data;
+     for (seq_no = first; seq_no < last; seq_no++) {
+-        JOCTET FAR *src_ptr = icc_markers[seq_no]->data + ICC_OVERHEAD_LEN;
++        JOCTET *src_ptr = icc_markers[seq_no]->data + ICC_OVERHEAD_LEN;
+         unsigned int length =
+             icc_markers[seq_no]->data_length - ICC_OVERHEAD_LEN;
+ 
+diff --git a/src/share/native/sun/awt/image/jpeg/jpegdecoder.c b/src/share/native/sun/awt/image/jpeg/jpegdecoder.c
+--- jdk8/jdk/src/share/native/sun/awt/image/jpeg/jpegdecoder.c
++++ jdk8/jdk/src/share/native/sun/awt/image/jpeg/jpegdecoder.c
+@@ -41,9 +41,8 @@
+ #include "jni.h"
+ #include "jni_util.h"
+ 
+-/* undo "system_boolean" hack and undef FAR since we don't use it anyway */
++/* undo "system_boolean" hack since we don't use it anyway */
+ #undef boolean
+-#undef FAR
+ #include <jpeglib.h>
+ #include "jerror.h"
+ 
diff --git a/sources b/sources
index 17b1b2c..7675598 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
-10be98f014ee6c280f41a54b6824fce6  jdk8u-jdk8u31-b13.tar.xz
+3a7c67223ec3d78d5d36f3ead9d37718  jdk8u40-jdk8u40-b25.tar.xz
 94ca5a45c3cb3b85c4577d0891166007  systemtap-tapset.tar.gz
-ea497b7a37fa2cf4e4e68fafda059c49  jdk8-jdk8u40-b12-aarch64-hs3135441ed942.tar.xz
+f3ac4f72d7563cbba4f25751056a9bc3  jdk8-jdk8u40-b12-aarch64-1263.tar.xz
diff --git a/zero-interpreter-fix.patch b/zero-interpreter-fix.patch
new file mode 100644
index 0000000..8fdbd90
--- /dev/null
+++ b/zero-interpreter-fix.patch
@@ -0,0 +1,25 @@
+# HG changeset patch
+# User roland
+# Date 1418632606 -3600
+# Node ID a733dad6fc1e2572ed227e898da35e0053cbb7c5
+# Parent  db035d4ba1bd25ac8803bb2d177cb35681eb6907
+8067231: Zero builds fails after JDK-6898462
+Summary: Interpreter::remove_activation_entry() is not defined for the C++ interpreter
+Reviewed-by: roland, coleenp
+Contributed-by: Severin Gehwolf <sgehwolf at redhat.com>
+
+--- jdk8/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp	Sat Dec 13 01:24:10 2014 +0300
++++ jdk8/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp	Mon Dec 15 09:36:46 2014 +0100
+@@ -394,7 +394,11 @@
+     // during deoptimization so the interpreter needs to skip it when
+     // the frame is popped.
+     thread->set_do_not_unlock_if_synchronized(true);
++#ifdef CC_INTERP
++    return (address) -1;
++#else
+     return Interpreter::remove_activation_entry();
++#endif
+   }
+ 
+   // Need to do this check first since when _do_not_unlock_if_synchronized
+


More information about the scm-commits mailing list