#!/bin/zsh scriptName="${0##*/}" function usage() { echo "Usage: $scriptName [--root ]" } function fatal() { echo "${1:-Error. Quit.}" >&2 exit 1 } function readWithDefault() { local default="${(P)1}" test -n "$2" && echo -n "$2 " || echo -n "$1 " test -n "$default" && echo -n "[$default] " read $1 test -z "${(P)1}" && eval ${1}="${default}" || eval ${1}="${(e)${(P)1}}" } function sourcesFor() { local pattern=$1 local file=$2 local output=$3 list=() local inside=false for i in `grep -A20 "$pattern\>" "$file"`; do case "$i" in STATIC|SHARED|MODULE|EXCLUDE_FROM_ALL) ;; "$pattern") inside=true ;; *')') $inside && test -n "${i%)}" && list=(${list} ${i%)}) inside=false ;; *) $inside && list=(${list} ${i}) ;; esac done eval "${output}=("${(u)list[@]}")" } rootDir= while [[ $# > 0 ]]; do case "$1" in -h|--help) usage exit ;; -r|--root) if ! test -f "$2/core/base/inc/TObject.h"; then echo "$2/core/base/inc/TObject.h not found" >&2 usage >&2 exit 1 fi rootDir="$2" shift ;; esac shift done if [[ -z "$rootDir" ]]; then rootDir="$HOME/src/root" readWithDefault rootDir "ROOT Sources" fi rootVcDir="$rootDir/misc/vc" echo "Clean up $rootVcDir" rm -r "$rootVcDir" vcDir="`dirname "$0"`" sourcesFor "add_library(Vc" "$vcDir/CMakeLists.txt" libVc_files pushd $vcDir includes=({scalar,sse,avx}{,/*.{h,tcc}} common{,/*.h} include/Vc/**/*) popd mkdir -p $rootVcDir/{inc/Vc,src,test} || fatal "Failed to create directories inside ROOT" for file in $includes; do src="$vcDir/$file" dst="$rootVcDir/inc/Vc/${file/include\/Vc\//}" if [[ -d "$src" ]]; then echo "mkdir $dst" mkdir -p "$dst" || fatal else echo "copying $dst" cp "$src" "$dst" || fatal fi done function copy() { while [[ $# > 0 ]]; do file="$1"; shift dstfile="src/${file//\//-}" src="$vcDir/$file" dst="$rootVcDir/$dstfile" echo "copying $dst" cp "$src" "$dst" || fatal done } copy "${libVc_files[@]}" # TODO: copy cmake files for installation # Read version number eval `awk '/VC_VERSION_NUMBER 0x[0-9]+/ { h=$3 } END { major=strtonum(substr(h, 1, 4)) minor=strtonum("0x" substr(h, 5, 2)) patch=strtonum("0x" substr(h, 7, 2)) / 2 printf "vcVersion=\"%d.%d.%d\"\n", major, minor, patch }' $vcDir/include/Vc/version.h` rootVcVersion="${vcVersion%%-*}-root" sed -i "s/${vcVersion}.*\"/$rootVcVersion\"/" $rootVcDir/inc/Vc/version.h # TODO: generate $rootVcDir/Module.mk cat > $rootVcDir/Module.mk <