Blame win32/Makefile.msvcproj

Packit a4058c
# Author: Fan, Chun-wei
Packit a4058c
# Common Autotools file used to generate Visual Studio 2008+
Packit a4058c
# Projects from their templates
Packit a4058c
Packit a4058c
# This autotools file, from GLib, can be used in other projects
Packit a4058c
# that have Visual Studio build support.
Packit a4058c
Packit a4058c
# * Input variables:
Packit a4058c
#
Packit a4058c
#   MSVCPROJS - List of Projects that should be generated
Packit a4058c
#
Packit a4058c
# * Simple tutorial
Packit a4058c
#
Packit a4058c
# Add this to Makefile.am where your library/program is built:
Packit a4058c
#   include <this Makefile.msvcproj>
Packit a4058c
#   MSVCPROJS = YourProject (can be multiple projects in a single srcdir)
Packit a4058c
#   YourProject_FILES = $(libyourlib_1_0_SOURCES)
Packit a4058c
#   YourProject_EXCLUDES = ... # list of sources to exclude, separated by '|', wildcards allowed; use random unsed value if none
Packit a4058c
#   (the following 3 lines if headers need to be installed)
Packit a4058c
#   YourProject_HEADERS_DIR = $(libyourlibincludedir)
Packit a4058c
#   YourProject_HEADERS_INST = $(libyourlib_1_0_HEADERS)
Packit a4058c
#   YourProject_HEADERS_EXCLUDES = ... # <list of headers to exclude from installation, separated by '|', wildcards allowed; use random unsed value if none>
Packit a4058c
#
Packit a4058c
#   dist-hook: \ # (or add to it if it is already there, note the vs9 items will also call the vs10 items in the process)
Packit a4058c
#   	$(top_builddir)/win32/vs9/YourProject.vcproj	\
Packit a4058c
#   	$(top_builddir)/win32/vs9/YourProject.headers	# if headers need to be installed
Packit a4058c
#
Packit a4058c
#   --or, if Visual Studio 2013 or later is required--
Packit a4058c
#   dist-hook: \ # (or add to it if it is already there, this does -not- call other vs items in the process)
Packit a4058c
#	$(top_builddir)/win32/vs12/YourProject.vcxproj	\
Packit a4058c
#	$(top_builddir)/win32/vs12/YourProject.vs12.headers	# if headers need to be installed
Packit a4058c
Packit a4058c
# Private functions
Packit a4058c
Packit a4058c
## Transform the MSVC project filename (no filename extensions) to something which can reference through a variable
Packit a4058c
## without automake/make complaining, eg Gtk-2.0 -> Gtk_2_0
Packit a4058c
_proj_name=$(subst /,_,$(subst -,_,$(subst .,_,$(1))))
Packit a4058c
_proj_path_raw:=$(subst $(abs_top_srcdir),,$(abs_srcdir))
Packit a4058c
_proj_path=$(subst /,\\,$(_proj_path_raw))
Packit a4058c
_proj_subdir_int=$(subst \\\\,\\,\\$(_proj_path)\\)
Packit a4058c
_proj_subdir=$(subst \\.\\,\\,$(_proj_subdir_int))
Packit a4058c
Packit a4058c
_proj_files_raw=$(subst /,\\,$($(_proj_name)_FILES))
Packit a4058c
_proj_files=$(subst $(srcdir)\\,,$(subst $(builddir)\\,,$(subst $(top_builddir)\\$(_proj_path)\\,\\,$(_proj_files_raw))))
Packit a4058c
_proj_filters=$($(_proj_name)_EXCLUDES)
Packit a4058c
Packit a4058c
_proj_headers_raw=$(subst /,\\,$($(_proj_name)_HEADERS_INST))
Packit a4058c
_proj_headers=$(subst $(srcdir)\\,,$(subst $(builddir)\\,,$(subst $(top_builddir)\\$(_proj_path)\\,\\,$(_proj_headers_raw))))
Packit a4058c
_proj_headers_excludes=$($(_proj_name)_HEADERS_EXCLUDES)
Packit a4058c
Packit a4058c
_headers_dest_posix=$(subst $(includedir),,$($(_proj_name)_HEADERS_DIR))
Packit a4058c
_headers_destdir=$(subst /,\\,$(_headers_dest_posix))
Packit a4058c
Packit a4058c
#
Packit a4058c
# Creates Visual Studio 2008/2010 projects from items passed in from autotools files
Packit a4058c
# $(1) - Base Name of the MSVC project files (outputs)
Packit a4058c
#
Packit a4058c
Packit a4058c
define msvcproj-builder
Packit a4058c
Packit a4058c
$(top_builddir)/win32/vs10/$(1).vcxproj: $(top_builddir)/win32/vs9/$(1).vcproj
Packit a4058c
$(top_builddir)/win32/vs10/$(1).vcxproj.filters: $(top_builddir)/win32/vs9/$(1).vcproj
Packit a4058c
$(1).sourcefiles: $(top_builddir)/win32/vs9/$(1).vcproj
Packit a4058c
$(1).vs10.sourcefiles: $(top_builddir)/win32/vs9/$(1).vcproj
Packit a4058c
$(1).vs10.sourcefiles.filters: $(top_builddir)/win32/vs9/$(1).vcproj
Packit a4058c
Packit a4058c
$(top_builddir)/win32/vs9/$(1).vcproj: Makefile
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs9/$(1).vcproj
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs10/$(1).vcxproj
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs10/$(1).vcxproj.filters
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs11/$(1).vcxproj
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs11/$(1).vcxproj.filters
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs12/$(1).vcxproj
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs12/$(1).vcxproj.filters
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs14/$(1).vcxproj
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs14/$(1).vcxproj.filters
Packit a4058c
Packit a4058c
Packit a4058c
	for F in $(_proj_files); do \
Packit a4058c
		case $$$$F in \
Packit a4058c
		$(_proj_filters)) \
Packit a4058c
			;; \
Packit a4058c
		*.c|*.cpp|*.cc|*.cxx) \
Packit a4058c
			echo '   <File RelativePath="..\..'$(_proj_subdir)$$$$F'" />' >>$(1).sourcefiles && \
Packit a4058c
			echo '   <ClCompile Include="..\..'$(_proj_subdir)$$$$F'" />' >>$(1).vs10.sourcefiles && \
Packit a4058c
			echo '   <ClCompile Include="..\..'$(_proj_subdir)$$$$F'"><Filter>Source Files</Filter></ClCompile>' >>$(1).vs10.sourcefiles.filters \
Packit a4058c
			;; \
Packit a4058c
		esac;	\
Packit a4058c
	done
Packit a4058c
Packit a4058c
Packit a4058c
	$(CPP) -P - <$(top_srcdir)/win32/vs9/$(1).vcprojin >$(top_builddir)/win32/vs9/$(1).vcproj
Packit a4058c
	$(CPP) -P - <$(top_srcdir)/win32/vs10/$(1).vcxprojin >$(top_builddir)/win32/vs10/$(1).vcxproj
Packit a4058c
	$(CPP) -P - <$(top_srcdir)/win32/vs10/$(1).vcxproj.filtersin >$(top_builddir)/win32/vs10/$(1).vcxproj.filters
Packit a4058c
	$(RM) $(1).sourcefiles
Packit a4058c
	$(RM) $(1).vs10.sourcefiles
Packit a4058c
	$(RM) $(1).vs10.sourcefiles.filters
Packit a4058c
Packit a4058c
$(top_builddir)/win32/vs10/$(1).vs10.headers: $(top_builddir)/win32/vs9/$(1).headers
Packit a4058c
Packit a4058c
$(top_builddir)/win32/vs9/$(1).headers: Makefile
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs9/$(1).headers
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs10/$(1).vs10.headers
Packit a4058c
Packit a4058c
	for F in $(_proj_headers); do \
Packit a4058c
		case $$$$F in \
Packit a4058c
		$(_proj_headers_excludes)) \
Packit a4058c
			;; \
Packit a4058c
		*.h|*.hpp|*.hh|*.hxx) \
Packit a4058c
			echo 'copy ..\..'$(_proj_subdir)$$$$F' $$$$(CopyDir)\include'$(_headers_destdir)'\'$$$$F'
' >>$(top_builddir)/win32/vs9/$(1).headers && \
Packit a4058c
			echo 'copy ..\..'$(_proj_subdir)$$$$F' $$$$(CopyDir)\include'$(_headers_destdir)'\'$$$$F >>$(top_builddir)/win32/vs10/$(1).vs10.headers \
Packit a4058c
			;; \
Packit a4058c
		esac;	\
Packit a4058c
	done
Packit a4058c
Packit a4058c
$(top_builddir)/win32/vs12/$(1).vcxproj.filters: $(top_builddir)/win32/vs12/$(1).vcxproj
Packit a4058c
Packit a4058c
$(top_builddir)/win32/vs12/$(1).vcxproj: Makefile
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs14/$(1).vcxproj
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs14/$(1).vcxproj.filters
Packit a4058c
Packit a4058c
	for F in $(_proj_files); do \
Packit a4058c
		case $$$$F in \
Packit a4058c
		$(_proj_filters)) \
Packit a4058c
			;; \
Packit a4058c
		*.c|*.cpp|*.cc|*.cxx) \
Packit a4058c
			echo '   <ClCompile Include="..\..'$(_proj_subdir)$$$$F'" />' >>$(1).vs12.sourcefiles && \
Packit a4058c
			echo '   <ClCompile Include="..\..'$(_proj_subdir)$$$$F'"><Filter>Source Files</Filter></ClCompile>' >>$(1).vs12.sourcefiles.filters \
Packit a4058c
			;; \
Packit a4058c
		esac;	\
Packit a4058c
	done
Packit a4058c
Packit a4058c
	$(CPP) -P - <$(top_srcdir)/win32/vs12/$(1).vcxprojin >$(top_builddir)/win32/vs12/$(1).vcxproj
Packit a4058c
	$(CPP) -P - <$(top_srcdir)/win32/vs12/$(1).vcxproj.filtersin >$(top_builddir)/win32/vs12/$(1).vcxproj.filters
Packit a4058c
	$(RM) $(1).vs12.sourcefiles
Packit a4058c
	$(RM) $(1).vs12.sourcefiles.filters
Packit a4058c
Packit a4058c
$(top_builddir)/win32/vs12/$(1).vs12.headers: Makefile
Packit a4058c
	-$(RM) $(top_builddir)/win32/vs12/$(1).vs12.headers
Packit a4058c
Packit a4058c
	for F in $(_proj_headers); do \
Packit a4058c
		case $$$$F in \
Packit a4058c
		$(_proj_headers_excludes)) \
Packit a4058c
			;; \
Packit a4058c
		*.h|*.hpp|*.hh|*.hxx) \
Packit a4058c
			echo 'copy ..\..'$(_proj_subdir)$$$$F' $$$$(CopyDir)\include'$(_headers_destdir)'\'$$$$F >>$(top_builddir)/win32/vs12/$(1).vs12.headers \
Packit a4058c
			;; \
Packit a4058c
		esac;	\
Packit a4058c
	done
Packit a4058c
Packit a4058c
endef
Packit a4058c
Packit a4058c
$(foreach proj,$(MSVCPROJS),$(eval $(call msvcproj-builder,$(proj))))