# Centralized autotools file
# Create the Visual Studio 2012/2013 project files
# from the Visual Studio 2010 project files

# Author: Fan, Chun-wei
# November 05, 2012

# MSVC_SLN: name of root project

MSVC_FORMAT_VER=$(shell echo $$(expr $(MSVC_VER) + 1))

$(MSVC_SLN).sln: $(top_srcdir)/build/win32/vs10/$(MSVC_SLN).sln create_vcxproj copy_filters create_props
	cat $(top_srcdir)/build/win32/vs10/$(MSVC_SLN).sln | sed 's/11\.00/$(MSVC_FORMAT_VER)\.00/g' | sed 's/2010/$(MSVC_VER_LONG)/g' > $(top_builddir)/build/win32/vs$(MSVC_VER)/$(MSVC_SLN).sln

README.txt: $(top_srcdir)/build/win32/vs10/README.txt
	cat $(top_srcdir)/build/win32/vs10/README.txt | sed 's/vs10/vs$(MSVC_VER)/g' | sed 's/VS10/VS$(MSVC_VER)/g' > $(top_builddir)/build/win32/vs$(MSVC_VER)/README.txt

create_vcxproj:
	for F in `(cd $(top_builddir)/build/win32/vs10 && ls *.vcxproj)`; do \
		case $$F in \
			*)	cat $(top_builddir)/build/win32/vs10/$$F | sed 's/v100/v$(MSVC_VER)0/g' > $(top_builddir)/build/win32/vs$(MSVC_VER)/$$F \
			;; \
		esac; \
	done

create_props:
	for F in `(cd $(top_builddir)/build/win32/vs10 && ls *.props)`; do \
		case $$F in \
			*)	cat $(top_builddir)/build/win32/vs10/$$F | sed 's/<VSVer>10<\/VSVer>/<VSVer>$(MSVC_VER)<\/VSVer>/g' > $(top_builddir)/build/win32/vs$(MSVC_VER)/$$F \
			;; \
		esac; \
	done

copy_filters:
	cp  $(top_srcdir)/build/win32/vs10/*.vcxproj.filters $(top_builddir)/build/win32/vs$(MSVC_VER)/


