#! /usr/bin/env bash # file : build/meta/vctest # copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC # license : GNU GPL v2; see accompanying LICENSE file # Process VC++ test templates. # # Options: # # -b # -r # -o # -t # # Arguments: # # # trap 'exit 1' ERR function error () { echo "$*" 1>&2 } base= root= output= sln= input= while [ $# -gt 0 ]; do case $1 in -b) base=$2 shift 2 ;; -r) root=$2 shift 2 ;; -o) output=$2 shift 2 ;; -t) input=$2 shift 2 ;; *) sln="$sln $1" shift ;; esac done if [ "$input" = "" ]; then error "no template file" exit 1 fi if [ "$base" = "" ]; then error "no base directory" exit 1 fi if [ "$root" = "" ]; then error "no root directory" exit 1 fi if [ "$output" = "" ]; then error "no output file" exit 1 fi if [ "$sln" = "" ]; then error "no solution file" exit 1 fi m4=m4 u2d=todos # Assume this script is never found via PATH. # meta=`dirname $0` build="$meta/.." install=$build/install/install # Figure out topdir # if [ "$base" = "$root" ]; then topdir=. else topdir=`echo $base | sed -e "s%^$root/%%" - | \ sed -e 's%[^/][^/]*/%../%g;s%[^./][^./]*$%..%' -` fi # # Determine possible configurations. # for f in $sln; do sln_conf=`cat $f | fromdos | sed -n -e \ '/^[ ]*GlobalSection(SolutionConfigurationPlatforms).*$/{\ : loop;\ n;\ /^[ ]*EndGlobalSection$/q;\ s/^[ ]*\([^=]*\) = \([^=]*\)$/\1/p;\ b loop};\ d' -` break done confs= plats= for c in $sln_conf; do conf=`echo $c | sed -e 's/^\(.*\)|.*$/\1/'` plat=`echo $c | sed -e 's/^.*|\(.*\)$/\1/'` confs="$confs $conf" plats="$plats $plat" done confs=`echo $confs | sed -e 's/ /\n/g' - | sort -u` plats=`echo $plats | sed -e 's/ /\n/g' - | sort -u` export topdir export configurations=$confs export platforms=$plats # Make sure the output directory exist. # $install -d -m 755 `dirname $output` $m4 -P -D__meta_base__=$meta $meta/vctest.m4 $input >$output $u2d $output chmod 644 $output