summaryrefslogtreecommitdiff
path: root/dotnet/build-mono
blob: 83a819830722a8a8396d96a17cd0aea38d870410 (plain)
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
#!/bin/bash
#
# Low brow build script for Mono 2.0.
# Uses metadata available in VS2005 project files.
#
# Replace with Mono's new XBuild when details are fully released.
# Note: XBuild is a clone of MSBuild.
#

#MCS_FLAGS="-debug+"
MCS_FLAGS="-optimize"
outDir=$PWD/build/mono

FindExternalReferences() 
{
  assembly=$1
  grep HintPath $assembly.csproj | sed -e 's-.*<HintPath>\(.*\)</HintPath>-\1-' -e 's-\\-/-g' |
  while read ref; do
    echo $PWD/$ref
  done
}

Build()
{
  assembly=$1; shift

  echo "===================================================="
  echo Building $assembly
  references=$(grep '<ProjectReference' $assembly/$assembly.csproj | sed -e 's-.*"\(.*\)".*-\1-' -e 's-\\-/-g' | 
    while read file; do
      echo $(basename $file .csproj); 
    done)
  references=$(echo $references)
  echo "Projects referenced = [$references]"
  (
    regularRefs=""
    for ref in $references; do
      regularRefs="$regularRefs $outDir/$ref.dll"
    done
    cd $assembly
    find . -name \*.cs >tmp.build.sources
    externalReferences=$(FindExternalReferences $assembly)
    # Strip Control-M characters from external references...
    externalReferences=$(echo $externalReferences | sed 's/\r//g')
    echo "externalReferences = [$externalReferences]"
    echo "regularRefs = [$regularRefs]"
    echo PWD=$PWD

    # construct "-r" argument.
    fullrefs=""
    for ref in $regularRefs $externalReferences; do
      if [[ -z $fullrefs ]]; then
        fullrefs="-r:$ref"
      else
        fullrefs="$fullrefs,$ref"
      fi
    done
    echo "fullrefs = [$fullrefs]"

    # Copy external references to output directory.
    for ref in $externalReferences; do
      cp $ref $outDir
    done

    # Strip Control-M character here too. Not sure how they get there...
    echo $fullrefs >tmp.references
    mcs $MCS_FLAGS -out:$outDir/$assembly.dll -target:library @tmp.references @tmp.build.sources
  )
}

mkdir -p $outDir

# Tried to magically get projects from Qpid.NET.sln but wrong order for building..
#for project in $(grep ^Project Qpid.NET.sln | sed 's/.*\\\(.*\).csproj.*/\1/'); do
#  Build $project
#done

Build Qpid.Messaging &&
  Build Qpid.Buffer && 
  Build Qpid.Codec && 
  Build Qpid.Common && 
  Build Qpid.Common.Tests && 
  Build Qpid.Client && 
  Build Qpid.Client.Transport.Socket.Blocking &&
  Build Qpid.Client.Tests