summaryrefslogtreecommitdiff
path: root/cpp/bld-winsdk.ps1
blob: e2fe888a3a42102f25ed86c7d123b79350b8eadf (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

# This script requires cmake, and 7z to be already on the path devenv should be on the path as
# a result of installing Visual Studio

# Filter to extract the included files from c style #include lines
# TODO: Not used yet
function extractIncludes {
  param($includedir=".", $found=@{}, $notfound=@{})
  process {
    # Put original files in list if not already there
	$file = $_.FullName
	if (!($found.Contains($file))) {
	  $found[$file] = $true;
	}
    $content = Get-Content $_
	$filebase = $_.PSParentPath
    $content | foreach {
      if ($_ -match '^\s*#include\s*([<"])([^">]*)([>"])\s*') {
	    $included=$matches[2]
		# Try to find the corresponding file in the same directory
		# as the including file then try the include dir
	    $testpathf=Join-Path $filebase $included
		$testpathi=Join-Path $includedir $included
		if (Test-Path $testpathf) {
		  $includedfile = Get-Item $testpathf
		} elseif (Test-Path $testpathi) {
	      $includedfile = Get-Item $testpathi
		} else {
		  $notfound[$included] = $file
		  continue;
		}
	    if (!($found.Contains($includedfile.FullName))) {
		  $found[$includedfile.FullName] = $file
          $includedfile
		}
	  }
    }
  }
}

function getIncludeFiles {
  param($base, $findall=$false)
  if ($findall) {
    Get-ChildItem -recurse -include *.h $base
  } else {
    foreach ($path in $input) {
	  $full=Join-Path $base $path
      if (Test-Path $full) {
	   Get-Item $full
	   }
    }
  }
}

if ($args.length -lt 1) {
  Write-Host 'Need to specify location of qpid src tree'
  exit
}

$qpid_src=$args[0]
$ver=$args[1]
if ($ver -eq $null) {
  $qpid_version_file="$qpid_src\QPID_VERSION.txt"

  if ( !(Test-Path $qpid_version_file)) {
    Write-Host "Path doesn't seem to be a qpid src tree (no QPID_VERSION.txt)"
    exit
  }
  $ver=Get-Content $qpid_version_file
}

$qpid_cpp_src="$qpid_src\cpp"
$install_dir="install_$([System.IO.Path]::GetRandomFileName())"
$zipfile="qpid-cpp-$ver.zip"

# This assumes Visual Studio 2008
cmake -G "Visual Studio 9 2008" "-DCMAKE_INSTALL_PREFIX=$install_dir" $qpid_cpp_src

# Need to build doxygen api docs separately as nothing depends on them
devenv qpid-cpp.sln /build "Release|Win32" /project docs-user-api

# Build both debug and release so we can ship both sets of libs
devenv qpid-cpp.sln /build "Release|Win32" /project INSTALL
devenv qpid-cpp.sln /build "Debug|Win32" /project INSTALL

# Cut down the files to put in the zip
$removable=@(
	'bin/qpidd.exe', 'bin/qpidbroker*.*', 'plugins',
	'bin/qmfengine*.*', 'bin/qpidxarm*.*',
	'bin/boost_regex*.*')
foreach ($pattern in $removable) {
	Remove-Item -recurse "$install_dir/$pattern"
}

# It would be very good to cut down on the shipped boost include files too, ideally by
# starting with the qpid files and recursively noting all boost headers actually needed

# Create a new zip
if (Test-Path $zipfile) {Remove-Item $zipfile}
&'7z' a $zipfile ".\$install_dir\*"

# Remove temporary install area
# Remove-Item -recurse $install_dir