#! /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 # -o # -e # -v {8, 9, 10, 11, 12} # # Arguments: # # # 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 \ '/^[ ]*$/"\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>$/\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