summaryrefslogtreecommitdiff
path: root/build
diff options
context:
space:
mode:
authorChun-wei Fan <fanchunwei@src.gnome.org>2015-09-04 17:35:26 +0800
committerChun-wei Fan <fanchunwei@src.gnome.org>2016-04-13 20:54:55 +0800
commit96129ef52784da1dc2801d346ae84c888f70df5e (patch)
tree5cfee83785f187b56254ff1b2d8f3d9ba5fe15c7 /build
parent3ceec73bf7c71ec151915531ea9e0f2842ece27a (diff)
downloadpango-96129ef52784da1dc2801d346ae84c888f70df5e.tar.gz
MSVC Builds: Add Common Autotools Module for Introspection
This adds a common autotools module that can be included in the Makefile.am's so that we can get a list of sources and headers that are to be introspected, as well as the complete g-ir-scanner command(s) that are needed to generate the needed .gir's and to compile the .typelib's. https://bugzilla.gnome.org/show_bug.cgi?id=764984
Diffstat (limited to 'build')
-rw-r--r--build/Makefile.msvc-introspection125
1 files changed, 125 insertions, 0 deletions
diff --git a/build/Makefile.msvc-introspection b/build/Makefile.msvc-introspection
new file mode 100644
index 00000000..6c909643
--- /dev/null
+++ b/build/Makefile.msvc-introspection
@@ -0,0 +1,125 @@
+# Author: Fan, Chun-wei
+# Common autotools file for constructing the g-ir-scanner and
+# g-ir-compiler command lines for Visual Studio builds.
+
+# This is copied from $(srcroot)/build from the gobject-introspection
+# project, which may be included in projects that support both
+# Visual Studio builds and introspection.
+
+# * Input variables:
+#
+# MSVC_INTROSPECT_GIRS - List of .gir's that should be built
+# in the NMake Makefiles
+#
+# * Simple tutorial
+#
+# Add this to Makefile.am where your library/program is built:
+# (Either YourLib_1_0_gir_MSVC_LIBS or YourLib_1_0_gir_MSVC_PROGRAM
+# is required unless --headers-only is specified in
+# YourLib_1_0_gir__MSVC_SCANNERFLAGS)
+#
+# include $(top_srcdir)/build/Makefile.msvc-introspection
+# MSVC_INTROSPECT_GIRS = YourLib-1.0.gir
+# YourLib_1_0_gir_NAMESPACE = YourLib # This is optional
+# YourLib_1_0_gir_VERSION = 1.0 # This is optional
+# YourLib_1_0_gir_MSVC_LIBS = yourlib-1.0
+# YourLib_1_0_gir_MSVC_FILES = $(libyourlib_1_0_SOURCES)
+# YourLib_1_0_gir_MSVC_PROGRAM = YourProgram
+# YourLib_1_0_gir_MSVC_PACKAGES = (Dependent .pc files)
+# YourLib_1_0_gir_MSVC_INCLUDE_GIRS = (Dependent external .gir's)
+# YourLiv_1_0_gir_MSVC_EXPORT_PACKAGES = (Packages exported by this .gir)
+
+# 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
+_gir_name=$(subst /,_,$(subst -,_,$(subst .,_,$(1))))
+
+# Namespace and Version is either fetched from the gir filename
+# or the _NAMESPACE/_VERSION variable combo
+_gir_namespace_msvc = $(or $($(_gir_name)_NAMESPACE),$(firstword $(subst -, ,$(notdir $(1)))))
+_gir_version_msvc = $(or $($(_gir_name)_VERSION),$(lastword $(subst -, ,$(1:.gir=))))
+_typelib_basename_msvc = $(_gir_namespace_msvc)'-'$(_gir_version_msvc)
+
+# _PROGRAM is an optional variable which needs its own --program argument
+_gir_program_msvc = $(if $($(_gir_name)_MSVC_PROGRAM),--program=$($(_gir_name)_MSVC_PROGRAM))
+
+# Deduce the sub-folder from $(srcroot) where the sources reside in
+_gir_source_path_raw_msvc:=$(subst $(abs_top_srcdir),,$(abs_srcdir))
+_gir_source_path_msvc=$(subst /,\\,$(_gir_source_path_raw_msvc))
+_gir_source_subdir_int_msvc=$(subst \\\\,\\,\\$(_gir_source_path_msvc)\\)
+_gir_source_subdir_msvc=$(subst \\.\\,\\,$(_gir_source_subdir_int_msvc))
+
+_gir_files_raw_msvc=$(subst /,\\,$($(_gir_name)_MSVC_FILES))
+_gir_files_msvc=$(subst $(srcdir)\\,,$(subst $(builddir)\\,,$(subst $(top_builddir)\\$(_gir_source_path_msvc)\\,\\,$(_gir_files_raw_msvc))))
+
+# Create a list of items for:
+# - Libraries
+# - Packages
+# - GIRs to include
+# - packages to export
+
+_gir_libraries_msvc = $(foreach lib,$($(_gir_name)_MSVC_LIBS),--library=$(lib))
+_gir_packages_msvc = $(foreach pkg,$($(_gir_name)_MSVC_PACKAGES),--pkg=$(pkg))
+_gir_includes_msvc = $(foreach include,$($(_gir_name)_MSVC_INCLUDE_GIRS),--include=$(include))
+_gir_export_packages_msvc = $(foreach pkg,$($(_gir_name)_MSVC_EXPORT_PACKAGES),--pkg-export=$(pkg))
+
+#
+# Create NMake Makefile Sections for Building Introspection files
+# from autotools files
+# $(1) - File Name of the .gir that is to be generated
+#
+
+define gir-nmake-builder
+
+# Basic sanity check, to make sure required variables are set
+$(if $($(_gir_name)_MSVC_FILES),,$(error Need to define $(_gir_name)_MSVC_FILES))
+$(if $(or $(findstring --header-only,$($(_gir_name)_MSVC_SCANNERFLAGS)),
+ $($(_gir_name)_MSVC_LIBS),
+ $($(_gir_name)_MSVC_PROGRAM)),,
+ $(error Need to define $(_gir_name)_MSVC_LIBS or $(_gir_name)_MSVC_PROGRAM))
+
+$(top_builddir)/build/win32/$(_gir_name)_list:
+ for F in $(_gir_files_msvc); do \
+ case $$$$F in \
+ *.c|*.cpp|*.cc|*.cxx|*.h|*.hpp|*.hh|*.hxx) \
+ echo '..\..'$(_gir_source_subdir_msvc)$$$$F >>$(top_builddir)/build/win32/$(_gir_name)_list \
+ ;; \
+ esac; \
+ done
+
+$(top_builddir)/build/win32/$(1).msvc.introspect:
+ -$(RM) $(top_builddir)/build/win32/$(1).msvc.introspect
+
+# Assemble the Command to Run g-ir-scanner
+ echo $(1)': '$(_gir_name)'_list '$($(_gir_name)_MSVC_GIR_DEPS)>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' @-echo Generating $$$$@...'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' $$$$(PYTHON) $$$$(G_IR_SCANNER) \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' --verbose -no-libtool \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' --namespace='$(_gir_namespace_msvc)' \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' --nsversion='$(_gir_version_msvc)' \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' '$(_gir_packages_msvc)' \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' '$(_gir_libraries_msvc)' \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' '$(_gir_program_msvc)' \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' --add-include-path=$$$$(G_IR_INCLUDEDIR) \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' '$(_gir_includes_msvc)' \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' '$(_gir_export_packages_msvc)' \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' --cflags-begin \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' '$($(_gir_name)_MSVC_CFLAGS)' \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' --cflags-end \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' '$($(_gir_name)_MSVC_SCANNERFLAGS)' \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' --filelist='$(_gir_name)'_list \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' -o $$$$@'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo '' >>$(top_builddir)/build/win32/$(1).msvc.introspect
+
+# Finally Assemble the Command to Compile the generated .gir
+ echo '$(_typelib_basename_msvc).typelib: '$(_typelib_basename_msvc)'.gir'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' @-echo Compiling $$$$@...'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' $$$$(G_IR_COMPILER) \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' --includedir=. --debug --verbose \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' '$(1)' \'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo ' -o $$$$@'>>$(top_builddir)/build/win32/$(1).msvc.introspect
+ echo '' >>$(top_builddir)/build/win32/$(1).msvc.introspect
+endef
+
+$(foreach gir,$(MSVC_INTROSPECT_GIRS),$(eval $(call gir-nmake-builder,$(gir))))