# GObject - GLib Type, Object, Parameter and Signal Library
# Copyright (C) 1997,98,99,2000 Tim Janik and Red Hat, Inc.
#
## Process this file with automake to produce Makefile.in
include $(top_srcdir)/glib.mk

SUBDIRS = . tests

AM_CPPFLAGS = 					\
	-DG_LOG_DOMAIN=\"GLib-GObject\"		\
	$(glib_INCLUDES)			\
	$(GLIB_DEBUG_FLAGS)			\
	-DGOBJECT_COMPILATION

AM_CFLAGS = $(GLIB_WARN_CFLAGS)

libglib = $(top_builddir)/glib/libglib-2.0.la

# libraries to compile and install
lib_LTLIBRARIES = libgobject-2.0.la

if OS_WIN32_AND_DLL_COMPILATION
if MS_LIB_AVAILABLE
noinst_DATA += gobject-2.0.lib

install_ms_lib_cmd = $(INSTALL) gobject-2.0.lib $(DESTDIR)$(libdir)
uninstall_ms_lib_cmd = -rm $(DESTDIR)$(libdir)/gobject-2.0.lib
endif
endif

install-ms-lib:
	$(install_ms_lib_cmd)

uninstall-ms-lib:
	$(uninstall_ms_lib_cmd)

if PLATFORM_WIN32
no_undefined = -no-undefined
endif

if OS_WIN32_AND_DLL_COMPILATION
gobject_win32_res = gobject-win32-res.o
gobject_win32_res_ldflag = -Wl,$(gobject_win32_res)
endif

libgobjectincludedir = $(includedir)/glib-2.0/gobject
libgobject_2_0_la_LDFLAGS = $(GLIB_LINK_FLAGS) \
  $(gobject_win32_res_ldflag) \
  -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
  -export-dynamic $(no_undefined)

libgobject_2_0_la_CFLAGS = $(AM_CFLAGS) $(LIBFFI_CFLAGS) $(GLIB_HIDDEN_VISIBILITY_CFLAGS)

libgobject_2_0_la_LIBADD = $(libglib) $(LIBFFI_LIBS)

libgobject_2_0_la_DEPENDENCIES = $(gobject_win32_res)

#
# setup source file variables
#
# GObject library header files for public installation
gobject_public_h_sources = \
	gobject-autocleanups.h	\
	glib-types.h		\
	gbinding.h		\
	gboxed.h		\
	gclosure.h		\
	genums.h		\
	gmarshal.h		\
	gobject.h		\
	gparam.h		\
	gparamspecs.h		\
	gsignal.h		\
	gsourceclosure.h	\
	gtype.h			\
	gtypemodule.h		\
	gtypeplugin.h		\
	gvalue.h		\
	gvaluearray.h		\
	gvaluecollector.h	\
	gvaluetypes.h		\
	gobjectnotifyqueue.c

# GObject library header files that don't get installed
gobject_private_h_sources =     \
	gatomicarray.h		\
	gtype-private.h

# GObject library C sources to build the library from
gobject_c_sources = \
	gobject_probes.d	\
	gatomicarray.c		\
	gbinding.c		\
	gboxed.c		\
	gclosure.c		\
	genums.c		\
	gmarshal.c		\
	gobject.c		\
	gobject_trace.h		\
	gparam.c		\
	gparamspecs.c		\
	gsignal.c		\
	gsourceclosure.c	\
	gtype.c			\
	gtypemodule.c		\
	gtypeplugin.c		\
	gvalue.c		\
	gvaluearray.c		\
	gvaluetransform.c	\
	gvaluetypes.c

if ENABLE_DTRACE

gobject_probes.h: gobject_probes.d
	$(AM_V_GEN) $(DTRACE) -C -h -s $< -o $@.tmp
	@$(SED) -e "s,define STAP_HAS_SEMAPHORES 1,undef STAP_HAS_SEMAPHORES," < $@.tmp > $@ && rm -f $@.tmp

gobject_probes.lo: gobject_probes.d
	$(AM_V_GEN) $(LIBTOOL) --mode=compile $(AM_V_lt) --tag=CC $(DTRACE) -G -s $< -o $@

BUILT_SOURCES += gobject_probes.h gobject_probes.lo
CLEANFILES += gobject_probes.h
libgobject_2_0_la_LIBADD += gobject_probes.lo
endif

tapsetdir   = @ABS_TAPSET_DIR@
EXTRA_DIST += gobject.stp.in

if ENABLE_SYSTEMTAP
tapset_DATA = libgobject-2.0.so.0.@LT_CURRENT@.@LT_REVISION@.stp
CLEANFILES += $(tapset_DATA)

$(tapset_DATA): gobject.stp.in Makefile
	$(AM_V_GEN)$(SED) \
		-e 's|[@]ABS_GLIB_RUNTIME_LIBDIR[@]|$(ABS_GLIB_RUNTIME_LIBDIR)|g' \
		-e 's|[@]LT_CURRENT[@]|$(LT_CURRENT)|g' \
		-e 's|[@]LT_REVISION[@]|$(LT_REVISION)|g' \
		$< > $@
endif

# non-header sources (headers should be specified in the above variables)
# that don't serve as direct make target sources, i.e. they don't have
# their own .lo rules and don't get publically installed
gobject_extra_sources = \
	gmarshal.list		\
	gmarshal.strings


#
# setup GObject library sources and their dependancies
#
gobject_target_headers = $(gobject_public_h_sources)
gobject_target_sources = $(gobject_c_sources)
EXTRA_HEADERS =
EXTRA_DIST += \
	$(gobject_private_h_sources) 	\
	$(gobject_extra_sources) 	\
	marshal-genstrings.pl

# This is read by gobject-introspection/misc/ and gtk-doc
gobject-public-headers.txt: Makefile
	$(AM_V_GEN) echo $(gobject_public_h_sources) > $@.tmp && mv $@.tmp $@

CLEANFILES += gobject-public-headers.txt

all-local: gobject-public-headers.txt

#
# rules to generate built sources
#
# setup autogeneration dependancies
gen_sources = xgen-gmh xgen-gmc xgen-gms
CLEANFILES += $(gen_sources)

# normal autogeneration rules
# all autogenerated files need to be generated in the srcdir,
# so old versions get remade and are not confused with newer
# versions in the build dir. thus a development setup requires
# srcdir to be writable, passing --disable-rebuilds to
# ../configure will supress all autogeneration rules.


gmarshal.strings: @REBUILD@ $(srcdir)/gmarshal.list
	$(AM_V_GEN) grep '^[A-Z]' $(srcdir)/gmarshal.list \
	| $(SED) -e 's/^/"g_cclosure_marshal_/' -e 's/:/__/' -e 's/,/_/g' -e 's/$$/",/' > xgen-gms \
	&& cp xgen-gms gmarshal.strings \
	&& rm -f xgen-gms xgen-gms~

glib-genmarshal.o: gmarshal.strings

# target platform:
libgobjectinclude_HEADERS = $(gobject_target_headers)
libgobject_2_0_la_SOURCES = $(gobject_target_sources)

#
# programs to compile and install
#
bin_PROGRAMS = gobject-query glib-genmarshal
bin_SCRIPTS = glib-mkenums
# source files
gobject_query_SOURCES = gobject-query.c
glib_genmarshal_SOURCES = glib-genmarshal.c
# link programs against libgobject
progs_LDADD = ./libgobject-2.0.la $(libglib)
glib_genmarshal_LDADD = $(libglib)
gobject_query_LDADD = $(progs_LDADD)

#
# auxillary files
#
EXTRA_DIST += 			\
	makefile.msc.in 	\
	gobject.rc.in		\
	libgobject-gdb.py.in	\
	glib-mkenums.in

CLEANFILES += libgobject-gdb.py

BUILT_EXTRA_DIST += \
	makefile.msc		\
	gobject.rc

gobject-win32-res.o: gobject.rc
	$(AM_V_GEN) $(WINDRES) gobject.rc $@

gobject.def: libgobject-2.0.la
	$(AM_V_GEN) dumpbin.exe -exports .libs/libgobject-2.0-0.dll | awk 'BEGIN { print "EXPORTS" } / +[[:digit:]]+ +[[:xdigit:]]+ +[[:xdigit:]]+/{ print $$4 }' > gobject.def.tmp && mv gobject.def.tmp gobject.def

gobject-2.0.lib: libgobject-2.0.la gobject.def
	$(AM_V_GEN) lib.exe -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgobject-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:$(builddir)/gobject.def -out:$@

# ------ MSVC Project File Generation ------
MSVCPROJS = gobject

gobject_FILES = $(libgobject_2_0_la_SOURCES)
gobject_EXCLUDES = dummy

gobject_HEADERS_DIR = $(libgobjectincludedir)
gobject_HEADERS_INST = $(gobject_public_h_sources)
gobject_HEADERS_EXCLUDES = dummy

include $(top_srcdir)/build/Makefile.msvcproj

dist-hook: $(BUILT_EXTRA_DIST) $(top_builddir)/build/win32/vs9/gobject.vcproj $(top_builddir)/build/win32/vs9/gobject.headers
	files='$(BUILT_EXTRA_DIST)'; \
	for f in $$files; do \
	  if test -f $$f; then d=.; else d=$(srcdir); fi; \
	  cp $$d/$$f $(distdir) || exit 1; done

install-data-local: install-ms-lib

uninstall-local: uninstall-ms-lib uninstall-gdb

distclean-local:
	if test $(srcdir) = .; then :; else \
	    rm -f $(BUILT_EXTRA_DIST); \
	fi

# install gdb scripts
gdbdir = $(datadir)/glib-2.0/gdb
dist_gdb_SCRIPTS = gobject_gdb.py

libgobject-gdb.py: libgobject-gdb.py.in
	$(AM_V_GEN) $(SED) -e "s|\@datadir\@|$(datadir)|" $(srcdir)/libgobject-gdb.py.in > $(builddir)/libgobject-gdb.py

uninstall-gdb:
	-rm -r $(DESTDIR)$(datadir)/gdb

if HAVE_GLIB_RUNTIME_LIBDIR
ABS_GLIB_RUNTIME_LIBDIR = $(realpath $(libdir)/$(GLIB_RUNTIME_LIBDIR))
else
ABS_GLIB_RUNTIME_LIBDIR = $(libdir)
endif

install-data-hook: libgobject-gdb.py
	mkdir -p $(DESTDIR)$(datadir)/gdb/auto-load/$(ABS_GLIB_RUNTIME_LIBDIR)
	$(INSTALL) $(builddir)/libgobject-gdb.py $(DESTDIR)$(datadir)/gdb/auto-load/$(ABS_GLIB_RUNTIME_LIBDIR)/libgobject-2.0.so.0.$(LT_CURRENT).$(LT_REVISION)-gdb.py
if HAVE_GLIB_RUNTIME_LIBDIR
	mkdir -p $(DESTDIR)$(libdir)/$(GLIB_RUNTIME_LIBDIR)
	mv $(DESTDIR)$(libdir)/libgobject-2.0.so.0 $(DESTDIR)$(libdir)/$(GLIB_RUNTIME_LIBDIR)
	mv $(DESTDIR)$(libdir)/libgobject-2.0.so.0.$(LT_CURRENT).$(LT_REVISION) $(DESTDIR)$(libdir)/$(GLIB_RUNTIME_LIBDIR)
	rm -f $(DESTDIR)$(libdir)/libgobject-2.0.so
	ln -s $(GLIB_RUNTIME_LIBDIR)/libgobject-2.0.so.0.$(LT_CURRENT).$(LT_REVISION) $(DESTDIR)$(libdir)/libgobject-2.0.so
endif
