summary refs log tree commit diff
path: root/pkgs/build-support/release/ant-build.nix
blob: 04eec99c7ed13c8fd473bcda3a3e212de7b5f1a8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
{ src
, stdenv
, name
, antTargets ? []
, jars ? []
, jarWrappers ? []
, antProperties ? []
, ... } @ args:

let
  antFlags = stdenv.lib.concatMapStrings ({name, value}: "-D${name}=${value}" ) antProperties ;
in
stdenv.mkDerivation (

  {
    showBuildStats = true;

    postPhases =
      ["generateWrappersPhase" "finalPhase"];

    prePhases = 
      ["antSetupPhase"];

    antSetupPhase = ''
      if test "$hydraAntLogger" != "" ; then
        export ANT_ARGS="-logger org.hydra.ant.HydraLogger -lib `ls $hydraAntLogger/lib/java/*.jar | head -1`"
      fi
    '';

    installPhase = ''
      ensureDir $out/lib/java
      ${ if jars == [] then '' 
           find . -name "*.jar" | xargs -I{} cp -v {} $out/lib/java
         '' else stdenv.lib.concatMapStrings (j: ''
           cp -v ${j} $out/lib/java
           echo file jar $out/lib/java/${j} >> $out/nix-support/hydra-build-products
         '') jars }
    '';

    generateWrappersPhase = '' 
      header "Generating jar wrappers"
    '' + (stdenv.lib.concatMapStrings (w: ''

      cat >> $out/bin/${w.name} <<EOF
      #! /bin/sh
      export JAVA_HOME=$jre
      $jre/bin/java ${if w ? mainClass then "-cp $out/lib/java/${w.jar} ${w.mainClass}" else "-jar $out/lib/java/${w.jar}"} \$@
      EOF

      chmod a+x $out/bin/${w.name} || exit 1
    '') jarWrappers) + ''
      closeNest
    '';

    buildPhase = if antTargets == [] then ''
      header "Building default ant target"
      ant ${antFlags}
      closeNest
    '' else stdenv.lib.concatMapStrings (t: ''
      header "Building '${t}' target"
      ant ${antFlags} ${t} 
      closeNest
    '') antTargets;

    finalPhase =
      ''
        # Propagate the release name of the source tarball.  This is
        # to get nice package names in channels.
        if test -e $origSrc/nix-support/hydra-release-name; then
          cp $origSrc/nix-support/hydra-release-name $out/nix-support/hydra-release-name
        fi
      '';
  }

  // removeAttrs args ["antProperties"] // 

  {
    name = name + (if src ? version then "-" + src.version else "");
  
    postHook = ''
      ensureDir $out/nix-support
      echo "$system" > $out/nix-support/system

      # If `src' is the result of a call to `makeSourceTarball', then it
      # has a subdirectory containing the actual tarball(s).  If there are
      # multiple tarballs, just pick the first one.
      origSrc=$src
      if test -d $src/tarballs; then
          src=$(ls $src/tarballs/*.tar.bz2 $src/tarballs/*.tar.gz | sort | head -1)
      fi

    ''; 
  }
)