[Nix-dev] Notion (window manager) and JDK 5

Alaric Snell-Pym alaric at snell-pym.org.uk
Wed Jul 16 11:42:16 CEST 2014


Hi there folks!

At my work, I am forced to use JDK5 for compatability reasons, so I made
a nixpkg for it. I'd like to share it, in case anybody else is similarly
burdened with such stressful obligations to obsolescence.

On a more upbeat note, I've also nixpkged the excelletn "notion" tiling
window manager!

Please find patches attached. I won't be offended if nobody wants JDK5
and it's rejected, but notion is a nice WM :-)

I'm not on this list, so please make sure to Cc: any comments to me. I'm
a nix noob, so I'm expecting I've done something not quite right
somewhere...

ABS

-- 
Alaric Snell-Pym
http://www.snell-pym.org.uk/alaric/

-------------- next part --------------
commit d9208eea1c4a176906755e575883b478f20b0d83
Author: Alaric Snell-Pym <alaric at snell-pym.org.uk>
Date:   Wed Jul 16 10:38:04 2014 +0100

    The notion tiling window manager, version notion-3-2014052800

diff --git a/pkgs/desktops/notion/default.nix b/pkgs/desktops/notion/default.nix
new file mode 100644
index 0000000..49d4190
--- /dev/null
+++ b/pkgs/desktops/notion/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, pkgconfig, fetchurl, lua5_1, x11, xlibs, gettext, which }:
+
+stdenv.mkDerivation {
+  name = "notion-3-2014052800";
+
+  src = fetchurl {
+    url = mirror://sourceforge/notion/notion-3-2014052800-src.tar.bz2;
+    sha256 = "09vh7kpwc99vmfiswr1pjdz5lzhy3nm992zsvfyrrd7ln47wj69n";
+  };
+
+
+  preBuild = ''
+   buildFlags="PREFIX=$out"
+  '';
+
+  preInstall = ''
+   makeFlags="PREFIX=$out"
+  '';
+
+  #patches = [ ./system-autodetect.patch ];
+
+  buildInputs = [
+    lua5_1 xlibs.libX11 xlibs.libXext xlibs.libSM
+    xlibs.libXinerama xlibs.libXrandr gettext
+    pkgconfig which
+  ];
+
+  meta = {
+    description = "Tabbed, tiling, window manager";
+    homepage = http://notion.sourceforge.net/;
+    maintainers = [stdenv.lib.maintainers.alaricsp];
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 48b466e..9b5f39f 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -10495,6 +10495,8 @@ let
 
   enlightenment = callPackage ../desktops/enlightenment { };
 
+  notion = callPackage ../desktops/notion { };
+
   e17 = recurseIntoAttrs (
     let callPackage = newScope pkgs.e17; in
     import ../desktops/e17 { inherit callPackage pkgs; }
-------------- next part --------------
commit 4b429d9d4815e1ef80d207ecc1db3b176328f363
Author: Alaric Snell-Pym <alaric at snell-pym.org.uk>
Date:   Mon Aug 19 12:40:07 2013 +0100

    Oracle jdk-1.5.0.09

diff --git a/pkgs/development/compilers/jdk/jdk5-construct.sh b/pkgs/development/compilers/jdk/jdk5-construct.sh
new file mode 100644
index 0000000..ff58f4e
--- /dev/null
+++ b/pkgs/development/compilers/jdk/jdk5-construct.sh
@@ -0,0 +1,269 @@
+#!/bin/bash
+# construct.sh
+# example construction of JRE and JDK directories from the DLJ bundles
+#
+# Copyright © 2006 Sun Microsystems, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Sun, Sun Microsystems, the Sun logo and Java, Java HotSpot,
+# and JVM  trademarks or registered trademarks of Sun Microsystems,
+# Inc. in the U.S. and other countries.
+
+
+program=`basename $0`
+
+usage () {
+  echo "usage: ${program} path/to/unbundle-jdk path/to/linux-jdk path/to/linux-jre"
+}
+
+getargs() {
+  undir=$1
+  jdkdir=$2
+  jredir=$3
+  if [ ! -d $undir ]; then
+    echo "${program}: unbundle directory not found: $undir"
+    exit 2
+  fi
+  # make sure javahome is the JDK
+  javahome=`echo $undir/*/demo/jfc`
+  if [ ! -d $javahome ]; then
+    echo "${program}: unbundle directory incorrect: $undir"
+    echo "  expecting $undir/jdk1.5.0_xx"
+    exit 2
+  else
+    javahome=$(dirname $(dirname $javahome))
+  fi
+  # verify JDK dir
+  jdkdirp=`dirname $jdkdir`
+  jdkbase=`basename $jdkdir`
+  if [ ! -d $jdkdirp ]; then
+    echo "${program}: parent directory for JDK does not exist: $jdkdirp"
+    exit 2
+  fi
+  savedir=`pwd`
+  cd $jdkdirp
+  jdkdirp=`pwd`
+  cd $savedir
+  jdkdir=$jdkdirp/$jdkbase
+  # verify JRE dir
+  jredirp=`dirname $jredir`
+  jrebase=`basename $jredir`
+  if [ ! -d $jredirp ]; then
+    echo "${program}: parent directory for JRE does not exist: $jredirp"
+    exit 2
+  fi
+  savedir=`pwd`
+  cd $jredirp
+  jredirp=`pwd`
+  cd $savedir
+  jredir=$jredirp/$jrebase
+}
+
+checkfiles() {
+  if [ -r $jdkdir ]; then
+    echo "${program}: directory for JDK already exists: $jdkdir"
+    exit 2
+  fi
+  if [ -r $jredir ]; then
+    echo "${program}: directory for JRE already exists: $jredir"
+    exit 2
+  fi
+}
+
+copytree() {
+  echo "copying over the JDK tree..."
+  cp -a $javahome $jdkdir
+}
+
+linkrel() {
+  target=$1
+  link=$2
+  # make a softlink from the $link to the $target
+  # make this a relative link
+  targetb=(`echo $target | tr '/' ' '`)
+  linkb=(`echo $link | tr '/' ' '`)
+  (( n = ${#targetb[*]} ))
+  (( m = ${#linkb[*]} ))
+  c=$n  # common length
+  if [ $m -lt $c ]; then
+    (( c = m ))
+  fi
+  for (( i = 0 ; i < c ; i++ )); do
+    if [ ${targetb[$i]} != ${linkb[$i]} ]; then
+      # echo components differ, stopping
+      break
+    fi
+  done
+  rel=""
+  for (( j = i + 1; j < m ; j++ )); do
+    if [ -z $rel ]; then
+      rel=".."
+    else
+      rel="$rel/.."
+    fi
+  done
+  for (( j = i; j < n ; j++ )); do
+    if [ -z $rel ]; then
+      rel=${targetb[$j]}
+    else
+      rel="$rel/${targetb[$j]}"
+    fi
+  done
+  ln -s $rel $link
+}
+
+createjre() {
+  echo "creating JRE directory..."
+  # absolute link
+  # ln -s $jdkdir/jre $jredir
+  # relative link
+  linkrel $jdkdir/jre $jredir
+}
+
+unpackjars() {
+  echo "unpacking jars..."
+  unpack200=$jdkdir/bin/unpack200
+  if [ ! -x $unpack200 ]; then
+    echo "${program}: file missing $unpack200"
+    exit 1
+  fi
+  cd $jdkdir
+  PACKED_JARS=`find . -name '*.pack'`
+  for i in $PACKED_JARS; do
+    # echo $i
+    jdir=`dirname $i`
+    jbase=`basename $i .pack`
+    if ! $unpack200 $jdkdir/$jdir/$jbase.pack $jdkdir/$jdir/$jbase.jar; then
+      echo "${program}: error unpacking $jdkdir/$jdir/$jbase.jar"
+    fi
+    if [ ! -r $jdkdir/$jdir/$jbase.jar ]; then
+      echo "${program}: missing $jdkdir/$jdir/$jbase.jar"
+    else
+      echo "  $jdir/$jbase.jar"
+      # remove pack file
+      rm $jdkdir/$jdir/$jbase.pack
+    fi
+  done
+}
+
+preparecds() {
+  # if this is a client installation...
+  compiler="`$jdkdir/bin/java -client -version 2>&1 | tail -n +3 | cut -d' ' -f1-4`"
+  if [ "X$compiler" = "XJava HotSpot(TM) Client VM" ]; then
+    # create the CDS archive
+    echo "creating the class data sharing archive..."
+    if ! $jdkdir/bin/java -client -Xshare:dump > /dev/null 2>&1; then
+       echo "returned error code $?"
+    fi
+  fi
+}
+
+jreman () {
+  echo "setting up the JRE man pages..."
+  # note this list is slightly different for OpenSolaris bundles
+  jreman=/tmp/jre.man.txt
+cat <<EOF > $jreman
+man/ja_JP.eucJP/man1/java.1
+man/ja_JP.eucJP/man1/keytool.1
+man/ja_JP.eucJP/man1/orbd.1
+man/ja_JP.eucJP/man1/pack200.1
+man/ja_JP.eucJP/man1/policytool.1
+man/ja_JP.eucJP/man1/rmid.1
+man/ja_JP.eucJP/man1/rmiregistry.1
+man/ja_JP.eucJP/man1/servertool.1
+man/ja_JP.eucJP/man1/tnameserv.1
+man/ja_JP.eucJP/man1/unpack200.1
+man/man1/java.1
+man/man1/keytool.1
+man/man1/orbd.1
+man/man1/pack200.1
+man/man1/policytool.1
+man/man1/rmid.1
+man/man1/rmiregistry.1
+man/man1/servertool.1
+man/man1/tnameserv.1
+man/man1/unpack200.1
+EOF
+  # create jre/man directory
+  # mkdir $jdkdir/jre/man
+  # move the real JRE man pages to jre/man
+  # link the JDK JRE man pages to jre/man
+  # real JDK man pages stay where they are
+  for m in `cat $jreman`; do
+    manpath=`dirname $jdkdir/jre/$m`
+    mkdir -p $manpath
+    mv $jdkdir/$m $jdkdir/jre/$m
+    linkrel $jdkdir/jre/$m $jdkdir/$m
+  done
+  # link in Japanese man pages
+  ln -s ja_JP.eucJP $jdkdir/jre/man/ja
+  rm $jreman
+}
+
+elimdups() {
+  echo "eliminating duplication between the JDK and JDK/jre..."
+  jdkcomm=/tmp/jdk.bin.comm.txt
+cat <<EOF > $jdkcomm
+bin/java
+bin/keytool
+bin/orbd
+bin/pack200
+bin/policytool
+bin/rmid
+bin/rmiregistry
+bin/servertool
+bin/tnameserv
+bin/unpack200
+EOF
+  # note there is little point in linking these common files
+  #   COPYRIGHT
+  #   LICENSE
+  #   THIRDPARTYLICENSEREADME.txt
+  # And this file is unique to the JDK
+  #   README.html
+  # And these files are unique to the JDK/jre/
+  #   CHANGES
+  #   README
+  #   Welcome.html
+  for p in `cat $jdkcomm`; do
+    rm $jdkdir/$p
+    # this is a relative link
+    ln -s ../jre/$p $jdkdir/$p
+  done
+  rm $jdkcomm
+}
+
+if [ $# -eq 3 ] ; then
+  getargs $1 $2 $3
+  checkfiles
+  copytree
+  createjre
+  unpackjars
+  preparecds
+  jreman
+  elimdups
+else
+  usage
+  exit 1
+fi
+
+exit 0
+
diff --git a/pkgs/development/compilers/jdk/jdk5-linux.nix b/pkgs/development/compilers/jdk/jdk5-linux.nix
new file mode 100644
index 0000000..ac70505
--- /dev/null
+++ b/pkgs/development/compilers/jdk/jdk5-linux.nix
@@ -0,0 +1,71 @@
+{ swingSupport ? true
+, stdenv
+, requireFile
+, unzip
+, makeWrapper
+, xlibs ? null
+, installjdk ? true
+, pluginSupport ? true
+}:
+
+assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
+assert swingSupport -> xlibs != null;
+
+let
+
+  /**
+   * The JRE libraries are in directories that depend on the CPU.
+   */
+  architecture =
+    if stdenv.system == "i686-linux" then
+      "i386"
+    else if stdenv.system == "x86_64-linux" then
+      "amd64"
+    else
+      abort "jdk requires i686-linux or x86_64 linux";
+
+in
+
+stdenv.mkDerivation {
+  name =
+    if installjdk then "jdk-1.5.0.09" else "jre-1.5.0.09";
+
+  src =
+    if stdenv.system == "i686-linux" then
+      requireFile {
+        name = "jdk-1_5_0_09-linux-i586.bin";
+        url = "http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase5-419410.html#jdk-1.5.0_09-oth-JPR";
+        sha256 = "0da00eb57fe7b3a7c81f0f553aba0c5324628fce9e49d5bca3eaea8c900435ae";
+      }
+    else if stdenv.system == "x86_64-linux" then
+      requireFile {
+        name = "jdk-1_5_0_09-linux-amd64.bin";
+        url = "http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase5-419410.html#jdk-1.5.0_09-oth-JPR";
+        sha256 = "de8701da213eaac7a344f2b1552605334ba3b277ad08129519868580d67a6092";
+      }
+    else
+      abort "jdk requires i686-linux or x86_64 linux";
+
+  builder = ./dlj-bundle-builder.sh;
+
+  construct = ./jdk5-construct.sh;
+  inherit installjdk;
+
+  buildInputs = [unzip makeWrapper];
+
+  /**
+   * libXt is only needed on amd64
+   */
+  libraries =
+    [stdenv.gcc.libc] ++
+    (if swingSupport then [xlibs.libX11 xlibs.libXext xlibs.libXtst xlibs.libXi xlibs.libXp xlibs.libXt] else []);
+
+  inherit swingSupport pluginSupport architecture;
+  inherit (xlibs) libX11;
+
+  mozillaPlugin = if installjdk then "/jre/lib/${architecture}/plugins" else "/lib/${architecture}/plugins";
+
+  meta.license = "unfree";
+  meta.description = "Oracle Java Development Kit";
+  meta.maintainers = [stdenv.lib.maintainers.alaricsp];
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index d128e17..48b466e 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -3048,6 +3048,8 @@ let
 
   oraclejdk = pkgs.jdkdistro true false;
 
+  oraclejdk5 = pkgs.oraclejdk5distro true false;
+
   oraclejdk7 = pkgs.oraclejdk7distro true false;
 
   oraclejdk8 = pkgs.oraclejdk8distro true false;
@@ -3064,6 +3066,11 @@ let
     system == "i686-linux" ||
     system == "x86_64-linux";
 
+  oraclejdk5distro = installjdk: pluginSupport:
+    assert supportsJDK;
+    (if pluginSupport then appendToName "with-plugin" else x: x)
+      (callPackage ../development/compilers/jdk/jdk5-linux.nix { });
+
   jdkdistro = installjdk: pluginSupport:
     assert supportsJDK;
     (if pluginSupport then appendToName "with-plugin" else x: x)
-------------- next part --------------
commit 2ecba58dcd31045640c6e23cd2a9bfe61a49109e
Author: Alaric Snell-Pym <alaric at snell-pym.org.uk>
Date:   Wed Jul 16 09:28:30 2014 +0100

    Added myself (Alaric Snell-Pym) as a maintainer

diff --git a/lib/maintainers.nix b/lib/maintainers.nix
index 6110b74..0833e97 100644
--- a/lib/maintainers.nix
+++ b/lib/maintainers.nix
@@ -8,6 +8,7 @@
   aforemny = "Alexander Foremny <alexanderforemny at googlemail.com>";
   ak = "Alexander Kjeldaas <ak at formalprivacy.com>";
   akc = "Anders Claesson <akc at akc.is>";
+  alaricsp = "Alaric Snell-Pym <alaric at snell-pym.org.uk>";
   algorith = "Dries Van Daele <dries_van_daele at telenet.be>";
   all = "Nix Committers <nix-commits at lists.science.uu.nl>";
   amiddelk = "Arie Middelkoop <amiddelk at gmail.com>";
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
Url : http://lists.science.uu.nl/pipermail/nix-dev/attachments/20140716/5bd674a9/attachment-0001.bin 


More information about the nix-dev mailing list