1*24482749STomoki Sekiyama#! /bin/bash 2*24482749STomoki Sekiyama 3*24482749STomoki Sekiyama# extract-vsssdk-headers 4*24482749STomoki Sekiyama# Author: Paolo Bonzini <pbonzini@redhat.com> 5*24482749STomoki Sekiyama 6*24482749STomoki Sekiyamaset -e 7*24482749STomoki Sekiyamaif test $# != 1 || ! test -f "$1"; then 8*24482749STomoki Sekiyama echo 'Usage: extract-vsssdk-headers /path/to/setup.exe' >&2 9*24482749STomoki Sekiyama exit 1 10*24482749STomoki Sekiyamafi 11*24482749STomoki Sekiyama 12*24482749STomoki Sekiyamaif ! command -v msiextract > /dev/null; then 13*24482749STomoki Sekiyama echo 'msiextract not found. Please install msitools.' >&2 14*24482749STomoki Sekiyama exit 1 15*24482749STomoki Sekiyamafi 16*24482749STomoki Sekiyama 17*24482749STomoki Sekiyamaif test -e inc; then 18*24482749STomoki Sekiyama echo '"inc" already exists.' >&2 19*24482749STomoki Sekiyama exit 1 20*24482749STomoki Sekiyamafi 21*24482749STomoki Sekiyama 22*24482749STomoki Sekiyama# Extract .MSI file in the .exe, looking for the OLE compound 23*24482749STomoki Sekiyama# document signature. Extra data at the end does not matter. 24*24482749STomoki Sekiyamaexport LC_ALL=C 25*24482749STomoki SekiyamaMAGIC=$'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1' 26*24482749STomoki Sekiyamaoffset=$(grep -abom1 "$MAGIC" "$1" | sed -n 's/:/\n/; P') 27*24482749STomoki Sekiyamatmpdir=$(mktemp -d) 28*24482749STomoki Sekiyamatrap 'rm -fr -- "$tmpdir" vsssdk.msi' EXIT HUP INT QUIT ALRM TERM 29*24482749STomoki Sekiyamatail -c +$(($offset+1)) -- "$1" > vsssdk.msi 30*24482749STomoki Sekiyama 31*24482749STomoki Sekiyama# Now extract the files. 32*24482749STomoki Sekiyamamsiextract -C $tmpdir vsssdk.msi 33*24482749STomoki Sekiyamamv "$tmpdir/Program Files/Microsoft/VSSSDK72/inc" inc 34*24482749STomoki Sekiyamaecho 'Extracted SDK headers into "inc" directory.' 35*24482749STomoki Sekiyamaexit 0 36