You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ch...@apache.org on 2010/10/14 22:55:58 UTC

svn commit: r1022704 - /qpid/trunk/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1

Author: chug
Date: Thu Oct 14 20:55:58 2010
New Revision: 1022704

URL: http://svn.apache.org/viewvc?rev=1022704&view=rev
Log:
QPID-2907 Developing Qpid Cpp Messaging .NET Binding requires setup help

This script helps a user set up 32-bit and 64-bit Windows development trees without manually editing CMake answer files.

Theory of operation and use case descriptions are in the script comments.

Added:
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1

Added: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1?rev=1022704&view=auto
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1 (added)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1 Thu Oct 14 20:55:58 2010
@@ -0,0 +1,522 @@
+#
+# 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.
+#
+
+#
+# configure-windows.ps1
+# =====================
+#
+# This script configures a qpid\cpp developer build environment under Windows
+# to enable working with cpp\bindings\qpid\dotnet binding source code.
+#
+# * Supports 32-bit and/or 64-bit development platforms.
+#
+# * User chooses in-source or out-of-source build directories.
+#
+#     - 'In-source' builds happen when CMake is run from directory qpid\cpp.
+#       Hundreds of CMake-generated output files are placed in qpid\cpp\src. 
+#       These files go right on top of files that are part of the source tree
+#       in qpid\cpp\src.
+#       In-source builds support only one platform. 
+#       Choose only a 32-bit or a 64-bit platform but not both.
+#
+#     - Out-of-source builds happen when the user chooses another directory
+#       under qpid in which to run CMake. Out-of-source builds are required
+#       in order to build both x86 and x64 targets using the same source tree. 
+#       For each build platform (32-bit x86 or Win32, or 64-bit x64) the user
+#       specifies a build directory and a specific version of Boost. 
+#       Many platform/Boost-version directories may reside side by side.
+#
+# * User chooses to run CMake or not.
+#
+#     - When a new build directory is created then the user is given the
+#       option of running CMake in that directory. Running CMake is a 
+#       necessary step as CMake creates important source, solution, and 
+#       project files.
+#
+#     - If a directory "looks like" is has already had CMake run in it
+#       then this script skips running CMake again.
+#
+#
+# Prerequisites
+#
+#  1. Powershell must be installed.
+#  2. 32-bit and/or 64-bit Boost libraries must be installed in separate
+#     directories. A user system may have any number of Boost library
+#     versions installed on it as long as each may be referred to through
+#     a separate BOOST_ROOT directory path.
+#  3. CMake 2.8 (or later) must be installed. The cmake\bin directory
+#     must be in the user's path.
+#  4. Boost library specifications may or may not be in the user's path.
+#     The script author recommeds not to have Boost in the path and only 
+#     allow the Boost path to be specified by generated command procedures.
+#  5. Visual Studio build environment must be installed.
+#
+#
+# Use case: Create a new build environment
+# ========================================
+#
+#  Required Boost:
+#        32-bit library - C:\Boost
+#        64-bit library - D:\Boost_64
+#
+#  Required Qpid checkout tree
+#        C:\svn\qpid\...
+#
+#  Run this script. It will ask for four directories:
+#
+#        Needed info        User clicks on or adds new
+#        ----------------   --------------------------
+#        32-bit Boost       C:\boost
+#        32-bit build dir   C:\svn\qpid\build32
+#        64-bit Boost       D:\Boost_64
+#        64-bit build dir   C:\svn\qpid\build64
+#
+#  In this example the build dirs are new. The script will prompt
+#  asking if CMake is to run in the build directories. User chooses Yes.
+#
+#  Now this script runs CMake twice, once each with the 32-bit and 64-bit 
+#  generators.
+#  * This step creates qpid-cpp.sln and related project files.
+#      C:\svn\qpid\build32\qpid-cpp.sln
+#      C:\svn\qpid\build64\qpid-cpp.sln
+#
+#  This script generates other scripts as follows:
+#
+#   C:\svn\qpid\build32\start-devenv-messaging-x86-32bit.ps1
+#   C:\svn\qpid\build32\start-devenv-messaging-x86-32bit.bat
+#   C:\svn\qpid\build32\setenv-messaging-x86-32bit.bat
+#
+#   C:\svn\qpid\build64\start-devenv-messaging-x64-64bit.ps1
+#   C:\svn\qpid\build64\start-devenv-messaging-x64-64bit.bat
+#   C:\svn\qpid\build64\setenv-messaging-x64-64bit.bat
+#
+#  Next the user compiles solution qpid\build32\qpid-cpp.sln.
+#  
+# Using the generated scripts:
+#
+# Case 1. Run an executable in 32-bit mode.
+#  1. Open a command prompt.
+#  2. > CD   c:\svn\qpid\build32
+#  3. > CALL setenv-messaging-x86-32bit.bat
+#  4. > CD   src\debug
+#  5. > run the chosen program
+#
+#  Note: Step #3 adds Boost to the user's path. This script selects the
+#        version of Boost to match the executables in src\debug.
+#
+# Case 2. Launch Visual Studio org.apache.qpid.messaging.sln in 64-bit mode.
+#  1. > CD c:\svn\qpid\build64
+#  2. > powershell start-devenv-messaging-x64-64bit.ps1
+#     or
+#  1. Double-click c:\svn\qpid\build64\start-devenv-messaging-x64-64bit.bat
+#
+#  Note: In this case the scripts set QPID_BUILD_ROOT to point to the out-of-
+#        source directory used by qpid-cpp.sln. Also the scripts put Boost in
+#        the path so that executables may run directly from Visual Studio.
+#
+
+Set-PSDebug -Trace 0
+Set-PSDebug -strict
+$ErrorActionPreference='Stop'
+
+#############################
+# global strings to be written to script files
+#
+$global:txtPath = '$env:PATH'
+$global:txtQR   = '$env:QPID_BUILD_ROOT'
+$global:txtWH   = 'Write-Host'
+
+
+#############################
+# Select-Folder
+#   Return a folder or null
+#
+function Select-Folder ($message="Select a folder", $path=0)
+{
+    $shellApp = New-Object -comObject Shell.Application
+    $folder = $shellApp.BrowseForFolder(0, $message, 0, $path)
+    if ($folder -ne $null) {
+        $folder.self.Path
+    }
+}
+
+
+#############################
+# AskYesOrNo
+#   Show modal dialog messagebox and return yes or no
+#
+function AskYesOrNo ($Question="No question?", $Title="No Title?")
+{
+    $dlg = [Windows.Forms.MessageBox]::Show($Question, $Title,  `
+           [Windows.Forms.MessageBoxButtons]::YesNo, `
+           [Windows.Forms.MessageBoxIcon]::Question)
+
+    $result = $dlg -eq [Windows.Forms.DialogResult]::Yes
+    
+    $result
+}
+
+
+#############################
+# SanityCheckBoostPath
+#   A path is a "boost path" if it contains
+#   both lib and include subdirectories.
+#
+function SanityCheckBoostPath ($path=0)
+{
+    $result = $true
+    $displayPath = ""
+
+    if ($path -ne $null) {
+        $displayPath = $path
+
+        $toTest = ('include', 'lib')
+        foreach ($pattern in $toTest) {
+        	$target = Join-Path $path $pattern
+            if (!(Test-Path -path $target)) {
+                $result = $false
+            }
+        }
+    } else {
+        $result = $false
+    }
+    
+    if (! $result) {
+        Write-Host "The path ""$displayPath"" does not appear to be a Boost root path."
+    }
+    $result
+}
+
+
+#############################
+# SanityCheckBuildPath
+#   A path is a "build path" if it contains
+#   various subdirectories.
+#
+function SanityCheckBuildPath ($path=0)
+{
+    $result = $true
+    $displayPath = ""
+    if ($path -ne $null) {
+        $displayPath = $path
+
+        $toTest = ('CMakeFiles', 'docs', 'etc', 'examples', 'include',
+                   'managementgen', 'src')
+        foreach ($pattern in $toTest) {
+        	$target = Join-Path $path $pattern
+            if (!(Test-Path -path $target)) {
+                $result = $false
+            }
+        }
+    } else {
+        $result = $false
+    }
+    if (! $result) {
+        Write-Host "The path ""$displayPath"" does not appear to be a Qpid C++ build root path."
+    }
+    $result
+}
+
+
+#############################
+# WriteDotnetBindingSlnLauncherPs1
+#   Write a powershell script that sets up the environment
+#   and then launches Visual Studio solution file.
+#
+function WriteDotnetBindingSlnLauncherPs1
+{
+    param
+    (
+        [string] $slnName,
+        [string] $boostRoot,
+        [string] $buildRoot,
+        [string] $cppDir,
+        [string] $vsPlatform,
+        [string] $nBits,
+        [string] $outfileName
+    )
+
+    $out = @("#
+# Launch $slnName in Visual Studio $vsPlatform ($nBits-bit) environment
+#
+$global:txtPath  = ""$boostRoot\lib;$global:txtPath""
+$global:txtQR    = ""$buildRoot""
+$global:txtWH      ""Launch $slnName in Visual Studio $vsPlatform ($nBits-bit) environment.""
+$cppDir\bindings\qpid\dotnet\$slnName
+")
+    Write-Host "        $buildRoot\$outfileName"
+    $out | Out-File "$buildRoot\$outfileName" -encoding ASCII
+}
+
+
+#############################
+# WriteDotnetBindingSlnLauncherBat
+#   Write a batch file that
+#   launches a powershell script.
+#
+function WriteDotnetBindingSlnLauncherBat
+{
+    param
+    (
+        [string] $slnName,
+        [string] $buildRoot,
+        [string] $vsPlatform,
+        [string] $nBits,
+        [string] $psScriptName,
+        [string] $outfileName
+    )
+
+    $out = @("@ECHO OFF
+REM
+REM Launch $slnName in Visual Studio $vsPlatform ($nBits-bit) environment
+REM
+ECHO Launch $slnName in Visual Studio $vsPlatform ($nBits-bit) environment
+powershell $buildRoot\$psScriptName
+")
+    Write-Host "        $buildRoot\$outfileName"
+    $out | Out-File "$buildRoot\$outfileName" -encoding ASCII
+}
+
+
+#############################
+# WriteDotnetBindingEnvSetupBat
+#   Write a batch file that sets the desired environment into
+#   the user's current environment settings.
+#
+function WriteDotnetBindingEnvSetupBat
+{
+    param
+    (
+        [string] $slnName,
+        [string] $boostRoot,
+        [string] $buildRoot,
+        [string] $vsPlatform,
+        [string] $nBits,
+        [string] $outfileName
+    )
+
+    $out = @("@ECHO OFF
+REM
+REM Call this command procedure from a command prompt to set up a $vsPlatform ($nBits-bit) 
+REM $slnName environment
+REM
+REM     > call $outfileName
+REM     >
+REM
+ECHO %PATH% | FINDSTR /I boost > NUL
+IF %ERRORLEVEL% EQU 0 ECHO WARNING: Boost is defined in your path multiple times!
+SET PATH=$boostRoot\lib;%PATH%
+SET QPID_BUILD_ROOT=$buildRoot
+ECHO Environment set for $slnName $vsPlatform $nBits-bit development.
+")
+    Write-Host "        $buildRoot\$outfileName"
+    $out | Out-File "$buildRoot\$outfileName" -encoding ASCII
+}
+
+
+#############################
+# Main
+#############################
+#
+# curDir is qpid\cpp\bindings\qpid\dotnet.
+#
+[string] $curDir   = Split-Path -parent $MyInvocation.MyCommand.Definition
+[string] $projRoot = Resolve-Path (Join-Path $curDir "..\..\..\..")
+[string] $cppDir   = Resolve-Path (Join-Path $curDir "..\..\..")
+
+[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
+
+#############################
+# User dialog to get optional 32-bit boost and build paths
+#
+$boost32 = Select-Folder -message 'Select 32-bit BOOST_ROOT folder. Press CANCEL to skip 32-bit processing.'
+
+$defined32 = ($boost32 -ne $null) -and ($boost32 -ne '')
+if ($defined32) {
+    $found = SanityCheckBoostPath $boost32
+    if (! $found) {
+        exit
+    }
+}
+
+$make32 = $false
+if ($defined32) {
+
+    $build32 = Select-Folder -message 'Select 32-bit QPID_BUILD_ROOT folder.' -path $projRoot
+
+    $found = ($build32 -ne $null) -and ($build32 -ne '')
+    if (! $found) {
+        Write-Host "You must select a build root folder for 32-bit builds"
+        exit
+    }
+    $found = SanityCheckBuildPath $build32
+    if ($found) {
+        Write-Host "Directory ""$build32"" is already set by CMake. CMake will not be re-run."
+    } else {
+        $make32 = AskYesOrNo "Run CMake in $build32 ?" "32-Bit Builds - Choose CMake run or not"
+    }
+}
+
+#############################
+# User dialog to get optional 64-bit boost and build paths
+#
+$boost64 = Select-Folder -message 'Select 64-bit BOOST_ROOT folder. Press CANCEL to skip 64-bit processing.'
+
+$defined64 = ($boost64 -ne $null) -and ($boost64 -ne '')
+if ($defined64) {
+    $found = SanityCheckBoostPath $boost64
+    if (! $found) {
+        exit
+    }
+}
+
+$make64 = $false
+if ($defined64) {
+    $build64 = Select-Folder -message 'Select 64-bit QPID_BUILD_ROOT folder.' -path $projRoot
+
+    $found = ($build64 -ne $null) -and ($build64 -ne '')
+    if (! $found) {
+        Write-Host "You must select a build root folder for 64-bit builds"
+        exit
+    }
+    $found = SanityCheckBuildPath $build64
+    if ($found) {
+        Write-Host "Directory ""$build64"" is already set by CMake. CMake will not be re-run."
+    } else {
+        $make64 = AskYesOrNo "Run CMake in $build64 ?" "64-Bit Builds - Choose CMake run or not"
+    }
+}
+
+#############################
+# Conditionally run CMake
+#
+# 32-bit X86
+#
+if ($make32) {
+    $env:BOOST_ROOT = "$boost32"
+    cd "$build32"
+    Write-Host "Running 32-bit CMake in $build32 ..."
+    CMake -G "Visual Studio 9 2008" "-DCMAKE_INSTALL_PREFIX=install_x86" $cppDir
+} else {
+    Write-Host "Skipped 32-bit CMake."
+}
+
+#
+# 64-bit X64
+#
+if ($make64) {
+    $env:BOOST_ROOT = "$boost64"
+    cd "$build64"
+    Write-Host "Running 64-bit CMake in $build64"
+    CMake -G "Visual Studio 9 2008 Win64" "-DCMAKE_INSTALL_PREFIX=install_x64" $cppDir
+} else {
+    Write-Host "Skipped 64-bit CMake."
+}
+
+#############################
+# Emit scripts
+#
+# 32-bit scripts
+#
+if ($defined32) {
+
+    Write-Host "Writing 32-bit scripts..."
+    
+    ###########
+    # Powershell script to launch org.apache.qpid.messaging.sln
+    #
+    WriteDotnetBindingSlnLauncherPs1     -slnName "org.apache.qpid.messaging.sln" `
+                                       -boostRoot "$boost32" `
+                                       -buildRoot "$build32" `
+                                          -cppDir "$cppDir" `
+                                      -vsPlatform "x86" `
+                                           -nBits "32" `
+                                     -outfileName "start-devenv-messaging-x86-32bit.ps1"
+                                     
+    
+    ###########
+    # Batch script (that you doubleclick) to launch powershell script
+    # that launches org.apache.qpid.messaging.sln.
+    #
+    WriteDotnetBindingSlnLauncherBat      -slnName "org.apache.qpid.messaging.sln" `
+                                        -buildRoot "$build32" `
+                                       -vsPlatform "x86" `
+                                            -nBits "32" `
+                                     -psScriptName "start-devenv-messaging-x86-32bit.ps1" `
+                                      -outfileName "start-devenv-messaging-x86-32bit.bat"
+
+    ###########
+    # Batch script (that you CALL from a command prompt)
+    # to establish the org.apache.qpid.messaging.sln build environment.
+    #
+    WriteDotnetBindingEnvSetupBat     -slnName "org.apache.qpid.messaging.sln" `
+                                    -boostRoot "$boost32" `
+                                    -buildRoot "$build32" `
+                                   -vsPlatform "x86" `
+                                        -nBits "32" `
+                                  -outfileName "setenv-messaging-x86-32bit.bat"
+
+} else {
+    Write-Host "Skipped writing 32-bit scripts."
+}
+
+#############################
+# 64-bit scripts
+#
+if ($defined64) {
+
+    Write-Host "Writing 64-bit scripts..."
+    
+    ###########
+    # Powershell script to launch org.apache.qpid.messaging.sln
+    #
+    WriteDotnetBindingSlnLauncherPs1     -slnName "org.apache.qpid.messaging.sln" `
+                                       -boostRoot "$boost64" `
+                                       -buildRoot "$build64" `
+                                          -cppDir "$cppDir" `
+                                      -vsPlatform "x64" `
+                                           -nBits "64" `
+                                     -outfileName "start-devenv-messaging-x64-64bit.ps1"
+                                     
+    
+    ###########
+    # Batch script (that you doubleclick) to launch powershell script
+    # that launches org.apache.qpid.messaging.sln.
+    #
+    WriteDotnetBindingSlnLauncherBat      -slnName "org.apache.qpid.messaging.sln" `
+                                        -buildRoot "$build64" `
+                                       -vsPlatform "x64" `
+                                            -nBits "64" `
+                                     -psScriptName "start-devenv-messaging-x64-64bit.ps1" `
+                                      -outfileName "start-devenv-messaging-x64-64bit.bat"
+
+    ###########
+    # Batch script (that you CALL from a command prompt)
+    # to establish the org.apache.qpid.messaging.sln build environment.
+    #
+    WriteDotnetBindingEnvSetupBat     -slnName "org.apache.qpid.messaging.sln" `
+                                    -boostRoot "$boost64" `
+                                    -buildRoot "$build64" `
+                                   -vsPlatform "x64" `
+                                        -nBits "64" `
+                                  -outfileName "setenv-messaging-x64-64bit.bat"
+
+} else {
+    Write-Host "Skipped writing 64-bit scripts."
+}



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org