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
|