# 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
DTCOMPILE = $(patsubst -W%,,$(LTCOMPILE))
DTCFLAGS = $(patsubst -W%,,$(CFLAGS))

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) env CC="$(DTCOMPILE)" CFLAGS="$(DTCFLAGS)" $(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

if ENABLE_SYSTEMTAP
tapset_in_files = gobject.stp.in
tapsetdir   = @ABS_TAPSET_DIR@
tapset_DATA = $(tapset_in_files:.stp.in=.stp)
EXTRA_DIST += $(tapset_in_files)
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.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

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
