#!/bin/bash

set -e

WINE_DIR=$1

if test -z $WINE_DIR; then
    echo "Usage: wine-import.sh wine_dir"
    exit 1
fi

import_header() {
    dstfile=$2/$1
    srcfile=$WINE_DIR/include/$1
    rm -f $dstfile
    unicode_fix=
    if test -n "$(grep WINELIB_NAME_AW\\\|DECL_WINELIB_TYPE_AW $srcfile)"; then
        unicode_fix="yes"
        echo '#include <_mingw_unicode.h>' >>$dstfile
    fi
    if test -n "$(grep -w INTERFACE $srcfile)"; then
        echo '#undef INTERFACE' >>$dstfile
    fi
    cat $srcfile >>$dstfile
    if test -n "$(grep WINELIB_NAME_AW\\\|DECL_WINELIB_TYPE_AW $srcfile)"; then
        sed -i 's/\bWINELIB_NAME_AW\b/__MINGW_NAME_AW/g' $dstfile
        sed -i 's/\bDECL_WINELIB_TYPE_AW\b/__MINGW_TYPEDEF_AW/g' $dstfile
    fi
    sed -i 's/\bBOOL    /WINBOOL /g' $dstfile
    sed -i 's/\bBOOL\b/WINBOOL/g' $dstfile
    sed -i 's/DECLSPEC_HIDDEN//g' $dstfile
    sed -i 's/\b__WINE_ALLOC_SIZE([0-9]) //g' $dstfile
}

import_idl() {
    dstfile=$2/$1
    srcfile=$WINE_DIR/include/$1
    cp $srcfile $dstfile

    # HACK:
    sed -i 's/cpp_quote\(.*\)\bBOOL\b/cpp_quote\1WINBOOL/' $dstfile
    sed -i 's/cpp_quote\(.*\)\bBOOL\b/cpp_quote\1WINBOOL/' $dstfile
    sed -i 's/cpp_quote\(.*\)\bBOOL\b/cpp_quote\1WINBOOL/' $dstfile
}

# headers
# Reverted: propkeydef.h, rpcsal.h
for f in \
	amaudio.h \
	audevcod.h \
	corerror.h \
	d2dbasetypes.h \
	d3d10_1shader.h \
	d3d10misc.h \
	d3d11shader.h \
	d3d8caps.h \
	d3d8.h \
	d3d8types.h \
	d3d9caps.h \
	d3d9.h \
	d3d9types.h \
	d3dcaps.h \
	d3dcompiler.h \
	d3d.h \
	d3dhal.h \
	d3drmdef.h \
	d3drm.h \
	d3drmobj.h \
	d3dtypes.h \
	d3dvec.inl \
	d3dx9anim.h \
	d3dx9core.h \
	d3dx9effect.h \
	d3dx9.h \
	d3dx9math.h \
	d3dx9math.inl \
	d3dx9mesh.h \
	d3dx9shader.h \
	d3dx9shape.h \
	d3dx9tex.h \
	d3dx9xof.h \
	devpkey.h \
	dls1.h \
	dls2.h \
	dmerror.h \
	dmo.h \
	dmoreg.h \
	dmort.h \
	dmplugin.h \
	dmusbuff.h \
	dmusicc.h \
	dmusicf.h \
	dmusici.h \
	dmusics.h \
	dpaddr.h \
	dplay8.h \
	dplay.h \
	dplobby8.h \
	dplobby.h \
	dpnathlp.h \
	dsconf.h \
	dshow.h \
	dvdmedia.h \
	dxdiag.h \
	dxerr8.h \
	dxerr9.h \
	dxfile.h \
	dxva.h \
	errors.h \
	evcode.h \
	exdispid.h \
	fontsub.h \
	mediaerr.h \
	mscat.h \
	msxml2did.h \
	msxml6did.h \
	propkey.h \
	propvarutil.h \
	t2embapi.h \
	uiautomationcoreapi.h \
	uiautomation.h \
	vfwmsgs.h \
	winhttp.h \
	winineti.h \
	wmpids.h \
	xapofx.h \
	xinput.h; do
    import_header $f include
done

# IDLs
for f in \
	amstream \
	amvideo \
	asyncinfo \
	austream \
	bits \
	bits1_5 \
	bits2_0 \
	bits2_5 \
	bits3_0 \
	bits5_0 \
	ctfutb \
	ctxtcall \
	d3d10 \
	d3d10_1 \
	d3d10effect \
	d3d10sdklayers \
	d3d10shader \
	d3d11 \
	d3d11on12 \
	d3d11_1 \
	d3d11_2 \
	d3d11_3 \
	d3d11_4 \
	d3d11sdklayers \
	d3d12 \
	d3d12sdklayers \
	d3d12shader \
	d3d12video \
	d3dcommon \
	dcommon \
	ddstream \
	devicetopology \
	directmanipulation \
	downloadmgr \
	drmexternals \
	dvdif \
	dwrite \
	dwrite_1 \
	dwrite_2 \
	dwrite_3 \
	dxgi \
	dxgi1_2 \
	dxgi1_3 \
	dxgi1_4 \
	dxgi1_5 \
	dxgi1_6 \
	dxgicommon \
	dxgidebug \
	dxgiformat \
	dxgitype \
	dxva2api \
	dyngraph \
	endpointvolume \
	eventtoken \
	evr9 \
	exdisp \
	fusion \
	icftypes \
	ivectorchangedeventargs \
	mediaobj \
	mfmediaengine \
	mfreadwrite \
	mftransform \
	mmdeviceapi \
	mmstream \
	mscoree \
	msctf \
	msxml \
	msxml2 \
	msxml6 \
	mulres \
	netfw \
	netlistmgr \
	objectarray \
	optary \
	proofofpossessioncookieinfo \
	qedit \
	relogger \
	rtworkq \
	spatialaudioclient \
	taskschd \
	textstor \
	thumbcache \
	uiautomationclient \
	uiautomationcore \
	urlhist \
	vmr9 \
	wincodec \
	wincodecsdk \
	windowscontracts \
	wmdrmsdk \
	wmp \
	wmprealestate \
	wmpservices \
	wmsbuffer \
	wmsdkidl \
	wmsecure \
	wpcapi \
	wuapi \
	xamlom \
	xapo \
	xaudio2 \
	xaudio2fx \
	xmldom \
	xmldso \
	xmllite; do
    import_idl $f.idl include
done

# Import all winrt IDLs
for f in $WINE_DIR/include/windows.*.idl; do
    import_idl $(basename $f) include
done

echo Import complete. You need to update headers generated from IDL files now:
echo '$ ./configure --with-widl --host=i686-w64-mingw32 && make && make distclean'

