190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#!/bin/bash
290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
3f71323e297a928af368937089d3ed71239786f86Andreas Huber##  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
5f71323e297a928af368937089d3ed71239786f86Andreas Huber##  Use of this source code is governed by a BSD-style license
6f71323e297a928af368937089d3ed71239786f86Andreas Huber##  that can be found in the LICENSE file in the root of the source
7f71323e297a928af368937089d3ed71239786f86Andreas Huber##  tree. An additional intellectual property rights grant can be found
8f71323e297a928af368937089d3ed71239786f86Andreas Huber##  in the file PATENTS.  All contributing project authors may
9f71323e297a928af368937089d3ed71239786f86Andreas Huber##  be found in the AUTHORS file in the root of the source tree.
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberself=$0
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberself_basename=${self##*/}
15f71323e297a928af368937089d3ed71239786f86Andreas Huberself_dirname=$(dirname "$0")
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOL=$'\n'
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help() {
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat <<EOF
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberUsage: ${self_basename} --name=projname [options] file1 [file2 ...]
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberThis script generates a Visual Studio project file from a list of source
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercode files.
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberOptions:
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --help                      Print this message
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --exe                       Generate a project for building an Application
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --lib                       Generate a project for creating a static library
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --static-crt                Use the static C runtime (/MT)
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --target=isa-os-cc          Target specifier (required)
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --out=filename              Write output to a file [stdout]
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --name=project_name         Name of the project (required)
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --proj-guid=GUID            GUID to use for the project
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --module-def=filename       File containing export definitions (for DLLs)
3579f15823c34ae1e423108295e416213200bb280fAndreas Huber    --ver=version               Version (7,8,9) of visual studio to generate for
3679f15823c34ae1e423108295e416213200bb280fAndreas Huber    --src-path-bare=dir         Path to root of source tree
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    -Ipath/to/include           Additional include directories
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    -DFLAG[=value]              Preprocessor macros to define
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    -Lpath/to/lib               Additional library search paths
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    -llibname                   Library to link against
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    exit 1
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdie() {
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "${self_basename}: $@" >&2
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    exit 1
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdie_unknown(){
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "Unknown option \"$1\"." >&2
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "See ${self_basename} --help for available options." >&2
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    exit 1
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubergenerate_uuid() {
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local hex="0123456789ABCDEF"
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local i
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local uuid=""
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local j
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    #93995380-89BD-4b04-88EB-625FBE52EBFB
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for ((i=0; i<32; i++)); do
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        (( j = $RANDOM % 16 ))
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        uuid="${uuid}${hex:$j:1}"
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "${uuid:0:8}-${uuid:8:4}-${uuid:12:4}-${uuid:16:4}-${uuid:20:12}"
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberindent1="    "
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberindent=""
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberindent_push() {
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    indent="${indent}${indent1}"
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberindent_pop() {
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    indent="${indent%${indent1}}"
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertag_attributes() {
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for opt in "$@"; do
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        optval="${opt#*=}"
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        [ -n "${optval}" ] ||
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            die "Missing attribute value in '$opt' while generating $tag tag"
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "${indent}${opt%%=*}=\"${optval}\""
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberopen_tag() {
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local tag=$1
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ $# -ne 0 ]; then
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "${indent}<${tag}"
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        indent_push
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        tag_attributes "$@"
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "${indent}>"
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    else
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "${indent}<${tag}>"
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        indent_push
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberclose_tag() {
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local tag=$1
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    indent_pop
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "${indent}</${tag}>"
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertag() {
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local tag=$1
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ $# -ne 0 ]; then
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "${indent}<${tag}"
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        indent_push
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        tag_attributes "$@"
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        indent_pop
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "${indent}/>"
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    else
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "${indent}<${tag}/>"
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubergenerate_filter() {
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local var=$1
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local name=$2
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local pats=$3
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local file_list_sz
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local i
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local f
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local saveIFS="$IFS"
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local pack
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "generating filter '$name' from ${#file_list[@]} files" >&2
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    IFS=*
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    open_tag Filter \
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        Name=$name \
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        Filter=$pats \
13679f15823c34ae1e423108295e416213200bb280fAndreas Huber        UniqueIdentifier=`generate_uuid` \
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    file_list_sz=${#file_list[@]}
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for i in ${!file_list[@]}; do
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        f=${file_list[i]}
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for pat in ${pats//;/$IFS}; do
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            if [ "${f##*.}" == "$pat" ]; then
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                unset file_list[i]
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                open_tag File RelativePath="./$f"
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                if [ "$pat" == "asm" ] && $asm_use_custom_step; then
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    for plat in "${platforms[@]}"; do
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                        for cfg in Debug Release; do
14979f15823c34ae1e423108295e416213200bb280fAndreas Huber                            open_tag FileConfiguration \
15079f15823c34ae1e423108295e416213200bb280fAndreas Huber                                Name="${cfg}|${plat}" \
15179f15823c34ae1e423108295e416213200bb280fAndreas Huber
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                            tag Tool \
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                                Name="VCCustomBuildTool" \
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                                Description="Assembling \$(InputFileName)" \
15579f15823c34ae1e423108295e416213200bb280fAndreas Huber                                CommandLine="$(eval echo \$asm_${cfg}_cmdline)" \
15679f15823c34ae1e423108295e416213200bb280fAndreas Huber                                Outputs="\$(InputName).obj" \
15779f15823c34ae1e423108295e416213200bb280fAndreas Huber
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                            close_tag FileConfiguration
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                        done
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    done
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                fi
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16379f15823c34ae1e423108295e416213200bb280fAndreas Huber                close_tag File
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                break
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        done
16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    close_tag Filter
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    IFS="$saveIFS"
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Process command line
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberunset target
17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfor opt in "$@"; do
17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    optval="${opt#*=}"
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case "$opt" in
17979f15823c34ae1e423108295e416213200bb280fAndreas Huber        --help|-h) show_help
18079f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
18179f15823c34ae1e423108295e416213200bb280fAndreas Huber        --target=*) target="${optval}"
18279f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
18379f15823c34ae1e423108295e416213200bb280fAndreas Huber        --out=*) outfile="$optval"
18479f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
18579f15823c34ae1e423108295e416213200bb280fAndreas Huber        --name=*) name="${optval}"
18679f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
18779f15823c34ae1e423108295e416213200bb280fAndreas Huber        --proj-guid=*) guid="${optval}"
18879f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
18979f15823c34ae1e423108295e416213200bb280fAndreas Huber        --module-def=*) link_opts="${link_opts} ModuleDefinitionFile=${optval}"
19079f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
19179f15823c34ae1e423108295e416213200bb280fAndreas Huber        --exe) proj_kind="exe"
19279f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
19379f15823c34ae1e423108295e416213200bb280fAndreas Huber        --lib) proj_kind="lib"
19479f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
19579f15823c34ae1e423108295e416213200bb280fAndreas Huber        --src-path-bare=*) src_path_bare="$optval"
19679f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
19779f15823c34ae1e423108295e416213200bb280fAndreas Huber        --static-crt) use_static_runtime=true
19879f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
19979f15823c34ae1e423108295e416213200bb280fAndreas Huber        --ver=*)
20079f15823c34ae1e423108295e416213200bb280fAndreas Huber            vs_ver="$optval"
20179f15823c34ae1e423108295e416213200bb280fAndreas Huber            case "$optval" in
20279f15823c34ae1e423108295e416213200bb280fAndreas Huber                [789])
20379f15823c34ae1e423108295e416213200bb280fAndreas Huber                ;;
20479f15823c34ae1e423108295e416213200bb280fAndreas Huber                *) die Unrecognized Visual Studio Version in $opt
20579f15823c34ae1e423108295e416213200bb280fAndreas Huber                ;;
20679f15823c34ae1e423108295e416213200bb280fAndreas Huber            esac
20779f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
20879f15823c34ae1e423108295e416213200bb280fAndreas Huber        -I*)
20979f15823c34ae1e423108295e416213200bb280fAndreas Huber            opt="${opt%/}"
21079f15823c34ae1e423108295e416213200bb280fAndreas Huber            incs="${incs}${incs:+;}&quot;${opt##-I}&quot;"
21179f15823c34ae1e423108295e416213200bb280fAndreas Huber            yasmincs="${yasmincs} ${opt}"
21279f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
21379f15823c34ae1e423108295e416213200bb280fAndreas Huber        -D*) defines="${defines}${defines:+;}${opt##-D}"
21479f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
21579f15823c34ae1e423108295e416213200bb280fAndreas Huber        -L*) # fudge . to $(OutDir)
21679f15823c34ae1e423108295e416213200bb280fAndreas Huber            if [ "${opt##-L}" == "." ]; then
21779f15823c34ae1e423108295e416213200bb280fAndreas Huber                libdirs="${libdirs}${libdirs:+;}&quot;\$(OutDir)&quot;"
21879f15823c34ae1e423108295e416213200bb280fAndreas Huber            else
21979f15823c34ae1e423108295e416213200bb280fAndreas Huber                 # Also try directories for this platform/configuration
22079f15823c34ae1e423108295e416213200bb280fAndreas Huber                 libdirs="${libdirs}${libdirs:+;}&quot;${opt##-L}&quot;"
22179f15823c34ae1e423108295e416213200bb280fAndreas Huber                 libdirs="${libdirs}${libdirs:+;}&quot;${opt##-L}/\$(PlatformName)/\$(ConfigurationName)&quot;"
22279f15823c34ae1e423108295e416213200bb280fAndreas Huber                 libdirs="${libdirs}${libdirs:+;}&quot;${opt##-L}/\$(PlatformName)&quot;"
22379f15823c34ae1e423108295e416213200bb280fAndreas Huber            fi
22479f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
22579f15823c34ae1e423108295e416213200bb280fAndreas Huber        -l*) libs="${libs}${libs:+ }${opt##-l}.lib"
22679f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
22779f15823c34ae1e423108295e416213200bb280fAndreas Huber        -*) die_unknown $opt
22879f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
22979f15823c34ae1e423108295e416213200bb280fAndreas Huber        *)
23079f15823c34ae1e423108295e416213200bb280fAndreas Huber            file_list[${#file_list[@]}]="$opt"
23179f15823c34ae1e423108295e416213200bb280fAndreas Huber            case "$opt" in
23279f15823c34ae1e423108295e416213200bb280fAndreas Huber                 *.asm) uses_asm=true
23379f15823c34ae1e423108295e416213200bb280fAndreas Huber                 ;;
23479f15823c34ae1e423108295e416213200bb280fAndreas Huber            esac
23579f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
23890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberoutfile=${outfile:-/dev/stdout}
23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberguid=${guid:-`generate_uuid`}
24090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberasm_use_custom_step=false
24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberuses_asm=${uses_asm:-false}
24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase "${vs_ver:-8}" in
24390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    7) vs_ver_id="7.10"
24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber       asm_use_custom_step=$uses_asm
24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
24690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    8) vs_ver_id="8.00"
24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
248f71323e297a928af368937089d3ed71239786f86Andreas Huber    9) vs_ver_id="9.00"
249f71323e297a928af368937089d3ed71239786f86Andreas Huber    ;;
25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberesac
25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
25290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber[ -n "$name" ] || die "Project name (--name) must be specified!"
25390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber[ -n "$target" ] || die "Target (--target) must be specified!"
25490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
25590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif ${use_static_runtime:-false}; then
25690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    release_runtime=0
25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug_runtime=1
25890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lib_sfx=mt
25990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelse
26090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    release_runtime=2
26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug_runtime=3
26290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lib_sfx=md
26390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
26490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Calculate debug lib names: If a lib ends in ${lib_sfx}.lib, then rename
26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# it to ${lib_sfx}d.lib. This precludes linking to release libs from a
26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# debug exe, so this may need to be refactored later.
26890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfor lib in ${libs}; do
26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ "$lib" != "${lib%${lib_sfx}.lib}" ]; then
27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lib=${lib%.lib}d.lib
27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    debug_libs="${debug_libs}${debug_libs:+ }${lib}"
27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# List Keyword for this target
27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase "$target" in
27879f15823c34ae1e423108295e416213200bb280fAndreas Huber    x86*) keyword="ManagedCProj"
27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
28090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    *) die "Unsupported target $target!"
28190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberesac
28290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# List of all platforms supported for this target
28490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase "$target" in
28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    x86_64*)
28690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        platforms[0]="x64"
28790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    x86*)
28990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        platforms[0]="Win32"
29090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        # these are only used by vs7
291f71323e297a928af368937089d3ed71239786f86Andreas Huber        asm_Debug_cmdline="yasm -Xvc -g cv8 -f \$(PlatformName) ${yasmincs} &quot;\$(InputPath)&quot;"
292f71323e297a928af368937089d3ed71239786f86Andreas Huber        asm_Release_cmdline="yasm -Xvc -f \$(PlatformName) ${yasmincs} &quot;\$(InputPath)&quot;"
29390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
29490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    *) die "Unsupported target $target!"
29590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
29690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberesac
29790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubergenerate_vcproj() {
29990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case "$proj_kind" in
30079f15823c34ae1e423108295e416213200bb280fAndreas Huber        exe) vs_ConfigurationType=1
30179f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
30279f15823c34ae1e423108295e416213200bb280fAndreas Huber        *)   vs_ConfigurationType=4
30379f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
30490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
30590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>"
30779f15823c34ae1e423108295e416213200bb280fAndreas Huber    open_tag VisualStudioProject \
30879f15823c34ae1e423108295e416213200bb280fAndreas Huber        ProjectType="Visual C++" \
30979f15823c34ae1e423108295e416213200bb280fAndreas Huber        Version="${vs_ver_id}" \
31079f15823c34ae1e423108295e416213200bb280fAndreas Huber        Name="${name}" \
31179f15823c34ae1e423108295e416213200bb280fAndreas Huber        ProjectGUID="{${guid}}" \
31279f15823c34ae1e423108295e416213200bb280fAndreas Huber        RootNamespace="${name}" \
31379f15823c34ae1e423108295e416213200bb280fAndreas Huber        Keyword="${keyword}" \
31479f15823c34ae1e423108295e416213200bb280fAndreas Huber
31579f15823c34ae1e423108295e416213200bb280fAndreas Huber    open_tag Platforms
31690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for plat in "${platforms[@]}"; do
31779f15823c34ae1e423108295e416213200bb280fAndreas Huber        tag Platform Name="$plat"
31890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
31990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    close_tag Platforms
32090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32179f15823c34ae1e423108295e416213200bb280fAndreas Huber    open_tag ToolFiles
32290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case "$target" in
323f71323e297a928af368937089d3ed71239786f86Andreas Huber        x86*) $uses_asm && tag ToolFile RelativePath="$self_dirname/../x86-msvs/yasm.rules"
32490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
32590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
32690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    close_tag ToolFiles
32790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32879f15823c34ae1e423108295e416213200bb280fAndreas Huber    open_tag Configurations
32990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for plat in "${platforms[@]}"; do
33090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        plat_no_ws=`echo $plat | sed 's/[^A-Za-z0-9_]/_/g'`
33179f15823c34ae1e423108295e416213200bb280fAndreas Huber        open_tag Configuration \
33279f15823c34ae1e423108295e416213200bb280fAndreas Huber            Name="Debug|$plat" \
33379f15823c34ae1e423108295e416213200bb280fAndreas Huber            OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
33479f15823c34ae1e423108295e416213200bb280fAndreas Huber            IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
33579f15823c34ae1e423108295e416213200bb280fAndreas Huber            ConfigurationType="$vs_ConfigurationType" \
33679f15823c34ae1e423108295e416213200bb280fAndreas Huber            CharacterSet="1" \
33790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
33890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$target" in
33979f15823c34ae1e423108295e416213200bb280fAndreas Huber            x86*)
34079f15823c34ae1e423108295e416213200bb280fAndreas Huber                case "$name" in
34179f15823c34ae1e423108295e416213200bb280fAndreas Huber                    obj_int_extract)
34279f15823c34ae1e423108295e416213200bb280fAndreas Huber                        tag Tool \
34379f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Name="VCCLCompilerTool" \
34479f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Optimization="0" \
34579f15823c34ae1e423108295e416213200bb280fAndreas Huber                            AdditionalIncludeDirectories="$incs" \
34679f15823c34ae1e423108295e416213200bb280fAndreas Huber                            PreprocessorDefinitions="WIN32;DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE" \
34779f15823c34ae1e423108295e416213200bb280fAndreas Huber                            RuntimeLibrary="$debug_runtime" \
34879f15823c34ae1e423108295e416213200bb280fAndreas Huber                            WarningLevel="3" \
34979f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Detect64BitPortabilityProblems="true" \
35079f15823c34ae1e423108295e416213200bb280fAndreas Huber                            DebugInformationFormat="1" \
35179f15823c34ae1e423108295e416213200bb280fAndreas Huber                    ;;
35279f15823c34ae1e423108295e416213200bb280fAndreas Huber                    vpx)
35379f15823c34ae1e423108295e416213200bb280fAndreas Huber                        tag Tool \
35479f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Name="VCPreBuildEventTool" \
35579f15823c34ae1e423108295e416213200bb280fAndreas Huber                            CommandLine="call obj_int_extract.bat $src_path_bare" \
35679f15823c34ae1e423108295e416213200bb280fAndreas Huber
35779f15823c34ae1e423108295e416213200bb280fAndreas Huber                        tag Tool \
35879f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Name="VCCLCompilerTool" \
35979f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Optimization="0" \
36079f15823c34ae1e423108295e416213200bb280fAndreas Huber                            AdditionalIncludeDirectories="$incs" \
36179f15823c34ae1e423108295e416213200bb280fAndreas Huber                            PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
36279f15823c34ae1e423108295e416213200bb280fAndreas Huber                            RuntimeLibrary="$debug_runtime" \
36379f15823c34ae1e423108295e416213200bb280fAndreas Huber                            UsePrecompiledHeader="0" \
36479f15823c34ae1e423108295e416213200bb280fAndreas Huber                            WarningLevel="3" \
36579f15823c34ae1e423108295e416213200bb280fAndreas Huber                            DebugInformationFormat="1" \
36679f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Detect64BitPortabilityProblems="true" \
36779f15823c34ae1e423108295e416213200bb280fAndreas Huber
3681b362b15af34006e6a11974088a46d42b903418eJohann                        $uses_asm && tag Tool Name="YASM"  IncludePaths="$incs" Debug="true"
36979f15823c34ae1e423108295e416213200bb280fAndreas Huber                    ;;
37079f15823c34ae1e423108295e416213200bb280fAndreas Huber                    *)
37179f15823c34ae1e423108295e416213200bb280fAndreas Huber                        tag Tool \
37279f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Name="VCCLCompilerTool" \
37379f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Optimization="0" \
37479f15823c34ae1e423108295e416213200bb280fAndreas Huber                            AdditionalIncludeDirectories="$incs" \
37579f15823c34ae1e423108295e416213200bb280fAndreas Huber                            PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
37679f15823c34ae1e423108295e416213200bb280fAndreas Huber                            RuntimeLibrary="$debug_runtime" \
37779f15823c34ae1e423108295e416213200bb280fAndreas Huber                            UsePrecompiledHeader="0" \
37879f15823c34ae1e423108295e416213200bb280fAndreas Huber                            WarningLevel="3" \
37979f15823c34ae1e423108295e416213200bb280fAndreas Huber                            DebugInformationFormat="1" \
38079f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Detect64BitPortabilityProblems="true" \
38179f15823c34ae1e423108295e416213200bb280fAndreas Huber
3821b362b15af34006e6a11974088a46d42b903418eJohann                        $uses_asm && tag Tool Name="YASM"  IncludePaths="$incs" Debug="true"
38379f15823c34ae1e423108295e416213200bb280fAndreas Huber                    ;;
38479f15823c34ae1e423108295e416213200bb280fAndreas Huber                esac
38590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
38690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
38790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
38890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$proj_kind" in
38990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            exe)
39090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                case "$target" in
39179f15823c34ae1e423108295e416213200bb280fAndreas Huber                    x86*)
39290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                        case "$name" in
39379f15823c34ae1e423108295e416213200bb280fAndreas Huber                            obj_int_extract)
39479f15823c34ae1e423108295e416213200bb280fAndreas Huber                                tag Tool \
39579f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    Name="VCLinkerTool" \
39679f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    OutputFile="${name}.exe" \
39779f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    GenerateDebugInformation="true" \
39890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                            ;;
39979f15823c34ae1e423108295e416213200bb280fAndreas Huber                            *)
40079f15823c34ae1e423108295e416213200bb280fAndreas Huber                                tag Tool \
40179f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    Name="VCLinkerTool" \
40279f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    AdditionalDependencies="$debug_libs \$(NoInherit)" \
40379f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    AdditionalLibraryDirectories="$libdirs" \
40479f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    GenerateDebugInformation="true" \
40579f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
40690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                            ;;
40790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                        esac
40879f15823c34ae1e423108295e416213200bb280fAndreas Huber                    ;;
40990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                 esac
41090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
41190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            lib)
41290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                case "$target" in
41379f15823c34ae1e423108295e416213200bb280fAndreas Huber                    x86*)
41479f15823c34ae1e423108295e416213200bb280fAndreas Huber                        tag Tool \
41579f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Name="VCLibrarianTool" \
41679f15823c34ae1e423108295e416213200bb280fAndreas Huber                            OutputFile="\$(OutDir)/${name}${lib_sfx}d.lib" \
41779f15823c34ae1e423108295e416213200bb280fAndreas Huber
41879f15823c34ae1e423108295e416213200bb280fAndreas Huber                    ;;
41990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                esac
42090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
42179f15823c34ae1e423108295e416213200bb280fAndreas Huber            dll)
42279f15823c34ae1e423108295e416213200bb280fAndreas Huber                tag Tool \
42379f15823c34ae1e423108295e416213200bb280fAndreas Huber                    Name="VCLinkerTool" \
42479f15823c34ae1e423108295e416213200bb280fAndreas Huber                    AdditionalDependencies="\$(NoInherit)" \
42579f15823c34ae1e423108295e416213200bb280fAndreas Huber                    LinkIncremental="2" \
42679f15823c34ae1e423108295e416213200bb280fAndreas Huber                    GenerateDebugInformation="true" \
42779f15823c34ae1e423108295e416213200bb280fAndreas Huber                    AssemblyDebug="1" \
42879f15823c34ae1e423108295e416213200bb280fAndreas Huber                    TargetMachine="1" \
42979f15823c34ae1e423108295e416213200bb280fAndreas Huber                    $link_opts \
43079f15823c34ae1e423108295e416213200bb280fAndreas Huber
43179f15823c34ae1e423108295e416213200bb280fAndreas Huber            ;;
43290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        close_tag Configuration
43590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
43679f15823c34ae1e423108295e416213200bb280fAndreas Huber        open_tag Configuration \
43779f15823c34ae1e423108295e416213200bb280fAndreas Huber            Name="Release|$plat" \
43879f15823c34ae1e423108295e416213200bb280fAndreas Huber            OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
43979f15823c34ae1e423108295e416213200bb280fAndreas Huber            IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
44079f15823c34ae1e423108295e416213200bb280fAndreas Huber            ConfigurationType="$vs_ConfigurationType" \
44179f15823c34ae1e423108295e416213200bb280fAndreas Huber            CharacterSet="1" \
44279f15823c34ae1e423108295e416213200bb280fAndreas Huber            WholeProgramOptimization="0" \
44390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
44479f15823c34ae1e423108295e416213200bb280fAndreas Huber        case "$target" in
44579f15823c34ae1e423108295e416213200bb280fAndreas Huber            x86*)
44679f15823c34ae1e423108295e416213200bb280fAndreas Huber                case "$name" in
44779f15823c34ae1e423108295e416213200bb280fAndreas Huber                    obj_int_extract)
44879f15823c34ae1e423108295e416213200bb280fAndreas Huber                        tag Tool \
44979f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Name="VCCLCompilerTool" \
4501b362b15af34006e6a11974088a46d42b903418eJohann                            Optimization="2" \
4511b362b15af34006e6a11974088a46d42b903418eJohann                            FavorSizeorSpeed="1" \
45279f15823c34ae1e423108295e416213200bb280fAndreas Huber                            AdditionalIncludeDirectories="$incs" \
45379f15823c34ae1e423108295e416213200bb280fAndreas Huber                            PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE" \
45479f15823c34ae1e423108295e416213200bb280fAndreas Huber                            RuntimeLibrary="$release_runtime" \
45579f15823c34ae1e423108295e416213200bb280fAndreas Huber                            UsePrecompiledHeader="0" \
45679f15823c34ae1e423108295e416213200bb280fAndreas Huber                            WarningLevel="3" \
45779f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Detect64BitPortabilityProblems="true" \
45879f15823c34ae1e423108295e416213200bb280fAndreas Huber                            DebugInformationFormat="0" \
45979f15823c34ae1e423108295e416213200bb280fAndreas Huber                    ;;
46079f15823c34ae1e423108295e416213200bb280fAndreas Huber                    vpx)
46179f15823c34ae1e423108295e416213200bb280fAndreas Huber                        tag Tool \
46279f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Name="VCPreBuildEventTool" \
46379f15823c34ae1e423108295e416213200bb280fAndreas Huber                            CommandLine="call obj_int_extract.bat $src_path_bare" \
46479f15823c34ae1e423108295e416213200bb280fAndreas Huber
46579f15823c34ae1e423108295e416213200bb280fAndreas Huber                        tag Tool \
46679f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Name="VCCLCompilerTool" \
4671b362b15af34006e6a11974088a46d42b903418eJohann                            Optimization="2" \
4681b362b15af34006e6a11974088a46d42b903418eJohann                            FavorSizeorSpeed="1" \
46979f15823c34ae1e423108295e416213200bb280fAndreas Huber                            AdditionalIncludeDirectories="$incs" \
47079f15823c34ae1e423108295e416213200bb280fAndreas Huber                            PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
47179f15823c34ae1e423108295e416213200bb280fAndreas Huber                            RuntimeLibrary="$release_runtime" \
47279f15823c34ae1e423108295e416213200bb280fAndreas Huber                            UsePrecompiledHeader="0" \
47379f15823c34ae1e423108295e416213200bb280fAndreas Huber                            WarningLevel="3" \
47479f15823c34ae1e423108295e416213200bb280fAndreas Huber                            DebugInformationFormat="0" \
47579f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Detect64BitPortabilityProblems="true" \
47679f15823c34ae1e423108295e416213200bb280fAndreas Huber
47779f15823c34ae1e423108295e416213200bb280fAndreas Huber                        $uses_asm && tag Tool Name="YASM"  IncludePaths="$incs"
47879f15823c34ae1e423108295e416213200bb280fAndreas Huber                    ;;
47979f15823c34ae1e423108295e416213200bb280fAndreas Huber                    *)
48079f15823c34ae1e423108295e416213200bb280fAndreas Huber                        tag Tool \
48179f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Name="VCCLCompilerTool" \
48279f15823c34ae1e423108295e416213200bb280fAndreas Huber                            AdditionalIncludeDirectories="$incs" \
4831b362b15af34006e6a11974088a46d42b903418eJohann                            Optimization="2" \
4841b362b15af34006e6a11974088a46d42b903418eJohann                            FavorSizeorSpeed="1" \
48579f15823c34ae1e423108295e416213200bb280fAndreas Huber                            PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
48679f15823c34ae1e423108295e416213200bb280fAndreas Huber                            RuntimeLibrary="$release_runtime" \
48779f15823c34ae1e423108295e416213200bb280fAndreas Huber                            UsePrecompiledHeader="0" \
48879f15823c34ae1e423108295e416213200bb280fAndreas Huber                            WarningLevel="3" \
48979f15823c34ae1e423108295e416213200bb280fAndreas Huber                            DebugInformationFormat="0" \
49079f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Detect64BitPortabilityProblems="true" \
49179f15823c34ae1e423108295e416213200bb280fAndreas Huber
49279f15823c34ae1e423108295e416213200bb280fAndreas Huber                        $uses_asm && tag Tool Name="YASM"  IncludePaths="$incs"
49379f15823c34ae1e423108295e416213200bb280fAndreas Huber                    ;;
49490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                esac
49579f15823c34ae1e423108295e416213200bb280fAndreas Huber            ;;
49679f15823c34ae1e423108295e416213200bb280fAndreas Huber        esac
49790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
49890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$proj_kind" in
49990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            exe)
50090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                case "$target" in
50179f15823c34ae1e423108295e416213200bb280fAndreas Huber                    x86*)
50290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                        case "$name" in
50379f15823c34ae1e423108295e416213200bb280fAndreas Huber                            obj_int_extract)
50479f15823c34ae1e423108295e416213200bb280fAndreas Huber                                tag Tool \
50579f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    Name="VCLinkerTool" \
50679f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    OutputFile="${name}.exe" \
50779f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    GenerateDebugInformation="true" \
50890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                            ;;
50979f15823c34ae1e423108295e416213200bb280fAndreas Huber                            *)
51079f15823c34ae1e423108295e416213200bb280fAndreas Huber                                tag Tool \
51179f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    Name="VCLinkerTool" \
51279f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    AdditionalDependencies="$libs \$(NoInherit)" \
51379f15823c34ae1e423108295e416213200bb280fAndreas Huber                                    AdditionalLibraryDirectories="$libdirs" \
51479f15823c34ae1e423108295e416213200bb280fAndreas Huber
51590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                            ;;
51690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                        esac
51779f15823c34ae1e423108295e416213200bb280fAndreas Huber                    ;;
51890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                 esac
51990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
52079f15823c34ae1e423108295e416213200bb280fAndreas Huber            lib)
52190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                case "$target" in
52279f15823c34ae1e423108295e416213200bb280fAndreas Huber                    x86*)
52379f15823c34ae1e423108295e416213200bb280fAndreas Huber                        tag Tool \
52479f15823c34ae1e423108295e416213200bb280fAndreas Huber                            Name="VCLibrarianTool" \
52579f15823c34ae1e423108295e416213200bb280fAndreas Huber                            OutputFile="\$(OutDir)/${name}${lib_sfx}.lib" \
52679f15823c34ae1e423108295e416213200bb280fAndreas Huber
52779f15823c34ae1e423108295e416213200bb280fAndreas Huber                    ;;
52890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                esac
52979f15823c34ae1e423108295e416213200bb280fAndreas Huber            ;;
53079f15823c34ae1e423108295e416213200bb280fAndreas Huber            dll) # note differences to debug version: LinkIncremental, AssemblyDebug
53179f15823c34ae1e423108295e416213200bb280fAndreas Huber                tag Tool \
53279f15823c34ae1e423108295e416213200bb280fAndreas Huber                    Name="VCLinkerTool" \
53379f15823c34ae1e423108295e416213200bb280fAndreas Huber                    AdditionalDependencies="\$(NoInherit)" \
53479f15823c34ae1e423108295e416213200bb280fAndreas Huber                    LinkIncremental="1" \
53579f15823c34ae1e423108295e416213200bb280fAndreas Huber                    GenerateDebugInformation="true" \
53679f15823c34ae1e423108295e416213200bb280fAndreas Huber                    TargetMachine="1" \
53779f15823c34ae1e423108295e416213200bb280fAndreas Huber                    $link_opts \
53890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
53979f15823c34ae1e423108295e416213200bb280fAndreas Huber            ;;
54079f15823c34ae1e423108295e416213200bb280fAndreas Huber        esac
54190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
54290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        close_tag Configuration
54390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
54490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    close_tag Configurations
54590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
54679f15823c34ae1e423108295e416213200bb280fAndreas Huber    open_tag Files
5471b362b15af34006e6a11974088a46d42b903418eJohann    generate_filter srcs   "Source Files"   "c;cc;def;odl;idl;hpj;bat;asm;asmx"
54879f15823c34ae1e423108295e416213200bb280fAndreas Huber    generate_filter hdrs   "Header Files"   "h;hm;inl;inc;xsd"
54990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    generate_filter resrcs "Resource Files" "rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
55090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    generate_filter resrcs "Build Files"    "mk"
55190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    close_tag Files
55290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
55390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    tag       Globals
55490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    close_tag VisualStudioProject
55590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
55690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # This must be done from within the {} subshell
55790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "Ignored files list (${#file_list[@]} items) is:" >&2
55890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for f in "${file_list[@]}"; do
55990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "    $f" >&2
56090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
56190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
56290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
56390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubergenerate_vcproj |
56490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sed  -e '/"/s;\([^ "]\)/;\1\\;g' > ${outfile}
56590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
56690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberexit
56790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber<!--
56890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTODO: Add any files not captured by filters.
56990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                <File
57090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                        RelativePath=".\ReadMe.txt"
57190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                        >
57290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                </File>
57390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber-->
574