summaryrefslogtreecommitdiff
path: root/build-0.3/meta/vcsln
diff options
context:
space:
mode:
Diffstat (limited to 'build-0.3/meta/vcsln')
-rwxr-xr-xbuild-0.3/meta/vcsln181
1 files changed, 181 insertions, 0 deletions
diff --git a/build-0.3/meta/vcsln b/build-0.3/meta/vcsln
new file mode 100755
index 0000000..99aaf47
--- /dev/null
+++ b/build-0.3/meta/vcsln
@@ -0,0 +1,181 @@
+#! /usr/bin/env bash
+
+# file : build/meta/vcsln
+# copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC
+# license : GNU GPL v2; see accompanying LICENSE file
+
+# Process VC++ solution templates.
+#
+# Options:
+#
+# -b <base-dir>
+# -o <output-file>
+# -e <project-ext>
+# -v <vc-version> {8, 9, 10, 11, 12}
+#
+# Arguments:
+#
+# <template-file>
+#
+trap 'exit 1' ERR
+
+function error ()
+{
+ echo "$*" 1>&2
+}
+
+base=
+output=
+projext=
+vcver=
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -b)
+ base=$2
+ shift 2
+ ;;
+ -o)
+ output=$2
+ shift 2
+ ;;
+ -e)
+ projext=$2
+ shift 2
+ ;;
+ -v)
+ vcver=$2
+ shift 2
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+input=$1
+
+if [ "$input" = "" ]; then
+ error "no input file"
+ exit 1
+fi
+
+if [ "$base" = "" ]; then
+ error "no base directory"
+ exit 1
+fi
+
+if [ "$output" = "" ]; then
+ error "no output file"
+ exit 1
+fi
+
+if [ "$projext" = "" ]; then
+ error "no VC++ project file extension"
+ exit 1
+fi
+
+if [ "$vcver" = "" ]; then
+ error "no VC++ version"
+ exit 1
+fi
+
+m4=m4
+u2d=todos
+
+# Assume this script is never found via PATH.
+#
+meta=`dirname $0`
+
+build="$meta/.."
+install=$build/install/install
+
+# Find all the project files.
+#
+all_proj_files=`find $base -name '*'$projext`
+
+# Filter out subdirectories which already have solution files.
+#
+proj_files=
+proj_names=
+for f in $all_proj_files; do
+ n=`echo "$f" | sed -e "s%^$base/\(.*\)/.*$%\1%"`
+
+ # If there is no sub-directory for this project, then use the
+ # root directory name.
+ #
+ if [ "$n" = "$f" ]; then
+ n=`basename $base`
+ d="."
+ else
+ d=$n
+ fi
+
+ while [ "$d" != "." ]; do
+ if ls $base/$d/*.sln >/dev/null 2>&1; then
+ break
+ fi
+ d=`dirname $d`
+ done
+
+ # If we din't find any solutions, then add this file to the list.
+ #
+ if [ "$d" = "." ]; then
+ proj_names="$proj_names $n"
+ proj_files="$proj_files $f"
+ fi
+done
+
+# Determine available configurations and project uuids.
+#
+conf=
+proj_uuids=
+for f in $proj_files; do
+
+ if [ "$conf" = "" ]; then
+ if [ "$vcver" = "8" -o "$vcver" = "9" ]; then
+ conf=`cat $f | fromdos | sed -n -e \
+ '/^[ ]*<Configuration$/{n;s/[ ]*Name="\([^"]*\)"$/"\1",/p};d' -`
+ conf=`echo $conf | sed -e 's/,$//'`
+ else
+ conf=`cat $f | fromdos | sed -n -e \
+ 's/^[ ]*<ProjectConfiguration Include="\([^"]*\)">$/"\1",/p;d' -`
+ conf=`echo $conf | sed -e 's/,$//'`
+ fi
+ fi
+
+ if [ "$vcver" = "8" -o "$vcver" = "9" ]; then
+ uuid=`cat $f | fromdos | sed -n -e \
+ 's/^[ ]*ProjectGUID="{\([^}]*\)}"$/\1/p;d'`
+ else
+ uuid=`cat $f | fromdos | sed -n -e \
+ 's/^[ ]*<ProjectGuid>{\([^}]*\)}<\/ProjectGuid>$/\1/p;d'`
+ fi
+
+ if [ "$proj_uuids" = "" ]; then
+ proj_uuids=$uuid
+ else
+ proj_uuids="$proj_uuids $uuid"
+ fi
+done
+
+proj_files=`echo $proj_files | sed -e "s%$base/%%g"`
+proj_names=`echo $proj_names | sed -e "s%/%-%g"`
+
+#error $proj_files
+#error $proj_names
+#error $proj_uuids
+#error $conf
+
+export configurations=$conf
+export project_files=$proj_files
+export project_names=$proj_names
+export project_uuids=$proj_uuids
+
+# Make sure the output directory exist.
+#
+$install -d -m 755 `dirname $output`
+
+$m4 -P -D__meta_base__=$meta $meta/vcsln.m4 $input >$output
+$u2d $output
+chmod 644 $output