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