[glib] build: Add Common Autotools Module for MSVC Projects



commit 700983c8c9827cb4de93d25757c767d1d5211910
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Thu Sep 3 19:08:55 2015 +0800

    build: Add Common Autotools Module for MSVC Projects
    
    This adds a common autotools module that can be used by various
    projects to generate the Visual Studio projects as needed, and
    if necessary, generate the headers listings to "install" for that
    project, based on items passed in to this.  This is modelled on the
    Makefile.introspection autotools file that is used by many GNOME
    projects to generate the introspection files.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=735429

 build/Makefile.msvcproj |  110 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 110 insertions(+), 0 deletions(-)
---
diff --git a/build/Makefile.msvcproj b/build/Makefile.msvcproj
new file mode 100644
index 0000000..28d30a0
--- /dev/null
+++ b/build/Makefile.msvcproj
@@ -0,0 +1,110 @@
+# Author: Fan, Chun-wei
+# Common Autotools file used to generate Visual Studio 2008+
+# Projects from their templates
+
+# This autotools file can be used in other projects that have
+# Visual Studio build support, and can be copied into
+# $(srcroot)/build/, except those that have their main sources
+# in their $(srcroot), or those that have their build files in
+# $(srcroot).  Those that should not use this include:
+# gobject-introspection, librsvg.
+
+# * 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
+#   YourProject_HEADERS_DIR = $(libyourlibincludedir)
+#   YourProject_HEADERS_INST = $(libyourlib_1_0_HEADERS)
+#   YourProject_HEADERS_EXCLUDES = ... # <list of headers to exclude from installation, 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)/build/win32/vs9/YourProject.vcproj      \
+#      $(top_builddir)/build/win32/vs9/YourProject.headers
+
+
+# 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=$(if $(ifeq $(_proj_path),\.),\\,\\$(_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)
+
+_proj_headers_raw=$(subst /,\\,$($(_proj_name)_HEADERS_INST))
+_proj_headers=$(subst $(srcdir)\\,,$(subst $(builddir)\\,,$(subst 
$(top_builddir)\\$(_proj_path)\\,\\,$(_proj_headers_raw))))
+_proj_headers_excludes=$($(_proj_name)_HEADERS_EXCLUDES)
+
+_headers_dest_posix=$(subst $(includedir),,$($(_proj_name)_HEADERS_DIR))
+_headers_destdir=$(subst /,\\,$(_headers_dest_posix))
+
+#
+# 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)/build/win32/vs10/$(1).vcxproj: $(top_builddir)/build/win32/vs9/$(1).vcproj
+$(top_builddir)/build/win32/vs10/$(1).vcxproj.filters: $(top_builddir)/build/win32/vs9/$(1).vcproj
+$(1).sourcefiles: $(top_builddir)/build/win32/vs9/$(1).vcproj
+$(1).vs10.sourcefiles: $(top_builddir)/build/win32/vs9/$(1).vcproj
+$(1).vs10.sourcefiles.filters: $(top_builddir)/build/win32/vs9/$(1).vcproj
+
+$(top_builddir)/build/win32/vs9/$(1).vcproj:
+       -$(RM) $(top_builddir)/build/win32/vs9/$(1).vcproj
+       -$(RM) $(top_builddir)/build/win32/vs10/$(1).vcxproj
+       -$(RM) $(top_builddir)/build/win32/vs10/$(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)/build/win32/vs9/$(1).vcprojin >$(top_builddir)/build/win32/vs9/$(1).vcproj
+       $(CPP) -P - <$(top_srcdir)/build/win32/vs10/$(1).vcxprojin 
$(top_builddir)/build/win32/vs10/$(1).vcxproj
+       $(CPP) -P - <$(top_srcdir)/build/win32/vs10/$(1).vcxproj.filtersin 
$(top_builddir)/build/win32/vs10/$(1).vcxproj.filters
+       $(RM) $(1).sourcefiles
+       $(RM) $(1).vs10.sourcefiles
+       $(RM) $(1).vs10.sourcefiles.filters
+
+$(top_builddir)/build/win32/vs10/$(1).vs10.headers: $(top_builddir)/build/win32/vs9/$(1).headers
+
+$(top_builddir)/build/win32/vs9/$(1).headers:
+       -$(RM) $(top_builddir)/build/win32/vs9/$(1).headers
+       -$(RM) $(top_builddir)/build/win32/vs10/$(1).vs10.headers
+
+       for F in $(_proj_headers); do \
+               case $$$$F in \
+               $(_proj_headers_excludes)) \
+                       ;; \
+               *.h|*.hpp|*.hh|*.hxx) \
+                       echo 'copy ..\..\..'$(_proj_subdir)$$$$F' 
$$$$(CopyDir)\include'$(_headers_destdir)'\'$$$$F'&#x0D;&#x0A;' 
$(top_builddir)/build/win32/vs9/$(1).headers && \
+                       echo 'copy ..\..\..'$(_proj_subdir)$$$$F' 
$$$$(CopyDir)\include'$(_headers_destdir)'\'$$$$F >>$(top_builddir)/build/win32/vs10/$(1).vs10.headers \
+                       ;; \
+               esac;   \
+       done
+
+endef
+
+$(foreach proj,$(MSVCPROJS),$(eval $(call msvcproj-builder,$(proj))))


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]