1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#!/bin/bash 2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang## 3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang## Copyright (c) 2013 The WebM project authors. All Rights Reserved. 4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang## 5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang## Use of this source code is governed by a BSD-style license 6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang## that can be found in the LICENSE file in the root of the source 7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang## tree. An additional intellectual property rights grant can be found 8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang## in the file PATENTS. All contributing project authors may 9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang## be found in the AUTHORS file in the root of the source tree. 10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang## 11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangself=$0 13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangself_basename=${self##*/} 14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangself_dirname=$(dirname "$0") 15ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 16ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian. "$self_dirname/msvs_common.sh"|| exit 127 17ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 18ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangshow_help() { 19ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang cat <<EOF 20ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangUsage: ${self_basename} --name=projname [options] file1 [file2 ...] 21ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 22ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangThis script generates a Visual Studio project file from a list of source 23ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangcode files. 24ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 25ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangOptions: 26ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --help Print this message 27ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --exe Generate a project for building an Application 28ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --lib Generate a project for creating a static library 29ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --dll Generate a project for creating a dll 30ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --static-crt Use the static C runtime (/MT) 312ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian --enable-werror Treat warnings as errors (/WX) 32ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --target=isa-os-cc Target specifier (required) 33ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --out=filename Write output to a file [stdout] 34ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --name=project_name Name of the project (required) 35ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --proj-guid=GUID GUID to use for the project 36ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --module-def=filename File containing export definitions (for DLLs) 378b92989c89bec8632aa47dc58dc162f199d62edcJames Zern --ver=version Version (10,11,12,14,15) of visual studio to generate for 38ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --src-path-bare=dir Path to root of source tree 39ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -Ipath/to/include Additional include directories 40ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -DFLAG[=value] Preprocessor macros to define 41ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -Lpath/to/lib Additional library search paths 42ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -llibname Library to link against 43ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangEOF 44ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang exit 1 45ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 46ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 47ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangtag_content() { 48ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang local tag=$1 49ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang local content=$2 50ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang shift 51ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang shift 52ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if [ $# -ne 0 ]; then 53ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang echo "${indent}<${tag}" 54ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang indent_push 55ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_attributes "$@" 56ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang echo "${indent}>${content}</${tag}>" 57ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang indent_pop 58ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang else 59ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang echo "${indent}<${tag}>${content}</${tag}>" 60ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 61ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 62ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 63ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuanggenerate_filter() { 64ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang local name=$1 65ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang local pats=$2 66ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang local file_list_sz 67ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang local i 68ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang local f 69ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang local saveIFS="$IFS" 70ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang local pack 71ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang echo "generating filter '$name' from ${#file_list[@]} files" >&2 72ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang IFS=* 73ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 74ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang file_list_sz=${#file_list[@]} 75ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for i in ${!file_list[@]}; do 76ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang f=${file_list[i]} 77ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for pat in ${pats//;/$IFS}; do 78ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if [ "${f##*.}" == "$pat" ]; then 79ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang unset file_list[i] 80ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 81ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian objf=$(echo ${f%.*}.obj \ 82ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian | sed -e "s,$src_path_bare,," \ 83ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian -e 's/^[\./]\+//g' -e 's,[:/ ],_,g') 84ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 857bc9febe8749e98a3812a0dc4380ceae75c29450Johann if ([ "$pat" == "asm" ] || [ "$pat" == "s" ] || [ "$pat" == "S" ]) && $asm_use_custom_step; then 862ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian # Avoid object file name collisions, i.e. vpx_config.c and 872ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian # vpx_config.asm produce the same object file without 882ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian # this additional suffix. 892ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian objf=${objf%.obj}_asm.obj 90ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag CustomBuild \ 91ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian Include="$f" 92ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for plat in "${platforms[@]}"; do 93ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for cfg in Debug Release; do 94ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content Message "Assembling %(Filename)%(Extension)" \ 95ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Condition="'\$(Configuration)|\$(Platform)'=='$cfg|$plat'" 96ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content Command "$(eval echo \$asm_${cfg}_cmdline) -o \$(IntDir)$objf" \ 97ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Condition="'\$(Configuration)|\$(Platform)'=='$cfg|$plat'" 98ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content Outputs "\$(IntDir)$objf" \ 99ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Condition="'\$(Configuration)|\$(Platform)'=='$cfg|$plat'" 100ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 101ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 102ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag CustomBuild 1034fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang elif [ "$pat" == "c" ] || \ 1044fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang [ "$pat" == "cc" ] || [ "$pat" == "cpp" ]; then 105ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ClCompile \ 106ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian Include="$f" 107ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang # Separate file names with Condition? 108ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content ObjectFileName "\$(IntDir)$objf" 1092ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian # Check for AVX and turn it on to avoid warnings. 1102ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian if [[ $f =~ avx.?\.c$ ]]; then 1112ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian tag_content AdditionalOptions "/arch:AVX" 1122ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian fi 113ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ClCompile 114ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang elif [ "$pat" == "h" ] ; then 115ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag ClInclude \ 116ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian Include="$f" 117ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang elif [ "$pat" == "vcxproj" ] ; then 118ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ProjectReference \ 119ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Include="$f" 120ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang depguid=`grep ProjectGuid "$f" | sed 's,.*<.*>\(.*\)</.*>.*,\1,'` 121ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content Project "$depguid" 122ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content ReferenceOutputAssembly false 123ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ProjectReference 124ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang else 125ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag None \ 126ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian Include="$f" 127ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 128ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 129ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang break 130ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 131ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 132ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 133ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 134ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang IFS="$saveIFS" 135ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 136ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 137ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang# Process command line 138ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangunset target 139ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfor opt in "$@"; do 140ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang optval="${opt#*=}" 141ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang case "$opt" in 142ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --help|-h) show_help 143ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 144ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --target=*) target="${optval}" 145ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 146ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --out=*) outfile="$optval" 147ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 148ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --name=*) name="${optval}" 149ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 150ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --proj-guid=*) guid="${optval}" 151ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 152ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --module-def=*) module_def="${optval}" 153ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 154ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --exe) proj_kind="exe" 155ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 156ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --dll) proj_kind="dll" 157ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 158ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --lib) proj_kind="lib" 159ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 160ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --src-path-bare=*) 161ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian src_path_bare=$(fix_path "$optval") 162ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian src_path_bare=${src_path_bare%/} 163ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 164ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --static-crt) use_static_runtime=true 165ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 1662ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian --enable-werror) werror=true 1672ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian ;; 168ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang --ver=*) 169ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang vs_ver="$optval" 170ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang case "$optval" in 1718b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 10|11|12|14|15) 172ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 173ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *) die Unrecognized Visual Studio Version in $opt 174ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 175ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang esac 176ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 177ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -I*) 178ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian opt=${opt##-I} 179ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian opt=$(fix_path "$opt") 180ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang opt="${opt%/}" 181ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian incs="${incs}${incs:+;}"${opt}"" 182ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian yasmincs="${yasmincs} -I"${opt}"" 183ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 184ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -D*) defines="${defines}${defines:+;}${opt##-D}" 185ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 186ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -L*) # fudge . to $(OutDir) 187ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if [ "${opt##-L}" == "." ]; then 188ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian libdirs="${libdirs}${libdirs:+;}"\$(OutDir)"" 189ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang else 190ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang # Also try directories for this platform/configuration 191ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian opt=${opt##-L} 192ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian opt=$(fix_path "$opt") 193ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian libdirs="${libdirs}${libdirs:+;}"${opt}"" 194ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian libdirs="${libdirs}${libdirs:+;}"${opt}/\$(PlatformName)/\$(Configuration)"" 195ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian libdirs="${libdirs}${libdirs:+;}"${opt}/\$(PlatformName)"" 196ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 197ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 198ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -l*) libs="${libs}${libs:+ }${opt##-l}.lib" 199ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 200ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang -*) die_unknown $opt 201ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 202ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *) 203ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # The paths in file_list are fixed outside of the loop. 204ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang file_list[${#file_list[@]}]="$opt" 205ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang case "$opt" in 2067bc9febe8749e98a3812a0dc4380ceae75c29450Johann *.asm|*.[Ss]) uses_asm=true 207ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 208ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang esac 209ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 210ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang esac 211ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangdone 212ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 213ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Make one call to fix_path for file_list to improve performance. 21468e1c830ade592be74773e249bf94e2bbfb50de7Johannfix_file_list file_list 215ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 216ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangoutfile=${outfile:-/dev/stdout} 217ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangguid=${guid:-`generate_uuid`} 218ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangasm_use_custom_step=false 219ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuanguses_asm=${uses_asm:-false} 220ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangcase "${vs_ver:-11}" in 2218b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 10|11|12|14|15) 222ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang asm_use_custom_step=$uses_asm 223ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 224ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangesac 225ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 226ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang[ -n "$name" ] || die "Project name (--name) must be specified!" 227ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang[ -n "$target" ] || die "Target (--target) must be specified!" 228ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 229ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangif ${use_static_runtime:-false}; then 230ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang release_runtime=MultiThreaded 231ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang debug_runtime=MultiThreadedDebug 232ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang lib_sfx=mt 233ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangelse 234ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang release_runtime=MultiThreadedDLL 235ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang debug_runtime=MultiThreadedDebugDLL 236ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang lib_sfx=md 237ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfi 238ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 239ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang# Calculate debug lib names: If a lib ends in ${lib_sfx}.lib, then rename 240ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang# it to ${lib_sfx}d.lib. This precludes linking to release libs from a 241ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang# debug exe, so this may need to be refactored later. 242ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfor lib in ${libs}; do 243ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if [ "$lib" != "${lib%${lib_sfx}.lib}" ]; then 244ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang lib=${lib%.lib}d.lib 245ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 246ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang debug_libs="${debug_libs}${debug_libs:+ }${lib}" 247ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangdone 248ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangdebug_libs=${debug_libs// /;} 249ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuanglibs=${libs// /;} 250ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 251ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 252ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang# List of all platforms supported for this target 253ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangcase "$target" in 254ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang x86_64*) 255ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang platforms[0]="x64" 2567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian asm_Debug_cmdline="yasm -Xvc -g cv8 -f win64 ${yasmincs} "%(FullPath)"" 2577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian asm_Release_cmdline="yasm -Xvc -f win64 ${yasmincs} "%(FullPath)"" 258ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 259ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang x86*) 260ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang platforms[0]="Win32" 2617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian asm_Debug_cmdline="yasm -Xvc -g cv8 -f win32 ${yasmincs} "%(FullPath)"" 2627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian asm_Release_cmdline="yasm -Xvc -f win32 ${yasmincs} "%(FullPath)"" 263ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 264ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang arm*) 2657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian platforms[0]="ARM" 2667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian asm_Debug_cmdline="armasm -nologo -oldit "%(FullPath)"" 2677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian asm_Release_cmdline="armasm -nologo -oldit "%(FullPath)"" 268ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 269ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *) die "Unsupported target $target!" 270ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 271ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangesac 272ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 273ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuanggenerate_vcxproj() { 274ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" 275ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag Project \ 276ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang DefaultTargets="Build" \ 277ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ToolsVersion="4.0" \ 278ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang xmlns="http://schemas.microsoft.com/developer/msbuild/2003" \ 279ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 280ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ItemGroup \ 281ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Label="ProjectConfigurations" 282ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for plat in "${platforms[@]}"; do 283ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for config in Debug Release; do 284ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ProjectConfiguration \ 285ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Include="$config|$plat" 286ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content Configuration $config 287ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content Platform $plat 288ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ProjectConfiguration 289ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 290ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 291ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ItemGroup 292ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 293ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag PropertyGroup \ 294ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Label="Globals" 295ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content ProjectGuid "{${guid}}" 296ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content RootNamespace ${name} 297ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content Keyword ManagedCProj 298ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian if [ $vs_ver -ge 12 ] && [ "${platforms[0]}" = "ARM" ]; then 299ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian tag_content AppContainerApplication true 300ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # The application type can be one of "Windows Store", 301ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # "Windows Phone" or "Windows Phone Silverlight". The 302ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # actual value doesn't matter from the libvpx point of view, 303ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # since a static library built for one works on the others. 304ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # The PlatformToolset field needs to be set in sync with this; 305ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # for Windows Store and Windows Phone Silverlight it should be 306ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # v120 while it should be v120_wp81 if the type is Windows Phone. 307ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian tag_content ApplicationType "Windows Store" 308ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian tag_content ApplicationTypeRevision 8.1 309ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian fi 310ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag PropertyGroup 311ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 312ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag Import \ 313ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Project="\$(VCTargetsPath)\\Microsoft.Cpp.Default.props" 314ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 315ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for plat in "${platforms[@]}"; do 316ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for config in Release Debug; do 317ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag PropertyGroup \ 318ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Condition="'\$(Configuration)|\$(Platform)'=='$config|$plat'" \ 319ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Label="Configuration" 320ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if [ "$proj_kind" = "exe" ]; then 321ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content ConfigurationType Application 322ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang elif [ "$proj_kind" = "dll" ]; then 323ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content ConfigurationType DynamicLibrary 324ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang else 325ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content ConfigurationType StaticLibrary 326ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 327ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if [ "$vs_ver" = "11" ]; then 328ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if [ "$plat" = "ARM" ]; then 329ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang # Setting the wp80 toolchain automatically sets the 330ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang # WINAPI_FAMILY define, which is required for building 331ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang # code for arm with the windows headers. Alternatively, 332ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang # one could add AppContainerApplication=true in the Globals 333ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang # section and add PrecompiledHeader=NotUsing and 334ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang # CompileAsWinRT=false in ClCompile and SubSystem=Console 335ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang # in Link. 336ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content PlatformToolset v110_wp80 337ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang else 338ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content PlatformToolset v110 339ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 340ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 3412ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian if [ "$vs_ver" = "12" ]; then 342ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # Setting a PlatformToolset indicating windows phone isn't 343ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # enough to build code for arm with MSVC 2013, one strictly 344ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # has to enable AppContainerApplication as well. 345ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian tag_content PlatformToolset v120 3462ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian fi 3477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian if [ "$vs_ver" = "14" ]; then 3487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian tag_content PlatformToolset v140 3497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian fi 3508b92989c89bec8632aa47dc58dc162f199d62edcJames Zern if [ "$vs_ver" = "15" ]; then 3518b92989c89bec8632aa47dc58dc162f199d62edcJames Zern tag_content PlatformToolset v141 3528b92989c89bec8632aa47dc58dc162f199d62edcJames Zern fi 353ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content CharacterSet Unicode 354ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if [ "$config" = "Release" ]; then 355ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content WholeProgramOptimization true 356ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 357ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag PropertyGroup 358ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 359ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 360ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 361ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag Import \ 362ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Project="\$(VCTargetsPath)\\Microsoft.Cpp.props" 363ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 364ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ImportGroup \ 365ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Label="PropertySheets" 366ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag Import \ 367ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Project="\$(UserRootDir)\\Microsoft.Cpp.\$(Platform).user.props" \ 368ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Condition="exists('\$(UserRootDir)\\Microsoft.Cpp.\$(Platform).user.props')" \ 369ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Label="LocalAppDataPlatform" 370ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ImportGroup 371ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 372ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag PropertyGroup \ 373ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Label="UserMacros" 374ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 375ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for plat in "${platforms[@]}"; do 376ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang plat_no_ws=`echo $plat | sed 's/[^A-Za-z0-9_]/_/g'` 377ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for config in Debug Release; do 378ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag PropertyGroup \ 379ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Condition="'\$(Configuration)|\$(Platform)'=='$config|$plat'" 380ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content OutDir "\$(SolutionDir)$plat_no_ws\\\$(Configuration)\\" 381ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content IntDir "$plat_no_ws\\\$(Configuration)\\${name}\\" 3822ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian if [ "$proj_kind" == "lib" ]; then 3832ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian if [ "$config" == "Debug" ]; then 3842ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian config_suffix=d 3852ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian else 3862ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian config_suffix="" 3872ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian fi 3882ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian tag_content TargetName "${name}${lib_sfx}${config_suffix}" 3892ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian fi 390ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag PropertyGroup 391ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 392ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 393ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 394ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for plat in "${platforms[@]}"; do 395ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for config in Debug Release; do 396ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ItemDefinitionGroup \ 397ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Condition="'\$(Configuration)|\$(Platform)'=='$config|$plat'" 3982ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian if [ "$name" == "vpx" ]; then 3992ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian hostplat=$plat 4002ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian if [ "$hostplat" == "ARM" ]; then 4012ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian hostplat=Win32 4022ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian fi 403ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 404ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ClCompile 405ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang if [ "$config" = "Debug" ]; then 406ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang opt=Disabled 407ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang runtime=$debug_runtime 408ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang curlibs=$debug_libs 4097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian debug=_DEBUG 410ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang else 411ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang opt=MaxSpeed 412ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang runtime=$release_runtime 413ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang curlibs=$libs 414ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content FavorSizeOrSpeed Speed 415ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang debug=NDEBUG 416ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang fi 4177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian extradefines=";$defines" 418ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content Optimization $opt 419ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content AdditionalIncludeDirectories "$incs;%(AdditionalIncludeDirectories)" 420ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content PreprocessorDefinitions "WIN32;$debug;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE$extradefines;%(PreprocessorDefinitions)" 421ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content RuntimeLibrary $runtime 422ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content WarningLevel Level3 4232ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian if ${werror:-false}; then 4242ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian tag_content TreatWarningAsError true 4252ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian fi 426ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian if [ $vs_ver -ge 11 ]; then 427ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # We need to override the defaults for these settings 428ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # if AppContainerApplication is set. 429ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian tag_content CompileAsWinRT false 430ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian tag_content PrecompiledHeader NotUsing 431ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian tag_content SDLCheck false 432ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian fi 433ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ClCompile 434ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang case "$proj_kind" in 435ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang exe) 436ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag Link 437ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content GenerateDebugInformation true 438ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # Console is the default normally, but if 439ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian # AppContainerApplication is set, we need to override it. 440ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian tag_content SubSystem Console 441ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag Link 442ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 443ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang dll) 444ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag Link 445ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content GenerateDebugInformation true 446ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag_content ModuleDefinitionFile $module_def 447ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag Link 448ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 449ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang lib) 450ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang ;; 451ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang esac 452ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ItemDefinitionGroup 453ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 454ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 455ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 456ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 457ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ItemGroup 4587bc9febe8749e98a3812a0dc4380ceae75c29450Johann generate_filter "Source Files" "c;cc;cpp;def;odl;idl;hpj;bat;asm;asmx;s;S" 459ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ItemGroup 460ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ItemGroup 461ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang generate_filter "Header Files" "h;hm;inl;inc;xsd" 462ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ItemGroup 463ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ItemGroup 464ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang generate_filter "Build Files" "mk" 465ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ItemGroup 466ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ItemGroup 467ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang generate_filter "References" "vcxproj" 468ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ItemGroup 469ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 470ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang tag Import \ 471ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Project="\$(VCTargetsPath)\\Microsoft.Cpp.targets" 472ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 473ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang open_tag ImportGroup \ 474ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang Label="ExtensionTargets" 475ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag ImportGroup 476ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 477ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang close_tag Project 478ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 479ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang # This must be done from within the {} subshell 480ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang echo "Ignored files list (${#file_list[@]} items) is:" >&2 481ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang for f in "${file_list[@]}"; do 482ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang echo " $f" >&2 483ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang done 484ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 485ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 486ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang# This regexp doesn't catch most of the strings in the vcxproj format, 487ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang# since they're like <tag>path</tag> instead of <tag attr="path" /> 488ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang# as previously. It still seems to work ok despite this. 489ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuanggenerate_vcxproj | 490ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang sed -e '/"/s;\([^ "]\)/;\1\\;g' | 491ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang sed -e '/xmlns/s;\\;/;g' > ${outfile} 492ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 493ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangexit 494