Files
glib/gmodule/Makefile.am
Colin Walters 5195ddefba Use -fvisibility=hidden by default on Unix
Now that we have all symbols annotated as GLIB_PUBLIC, we can switch
the build to default to hiding symbols.  The major advantage of this
is that it's much harder to accidentally leak symbols.

This patch only adds it to CFLAGS for the sublibraries; we don't want
to affect things like gio/fam, nor the executables.

However, this patch only changes Unix - on Windows, we keep the
.symbols file because we still ultimately need a .def file in order to
generate a .dll.

To unify both Unix and Windows again, we need to do what cairo does
and parse the headers at build time.

https://bugzilla.gnome.org/show_bug.cgi?id=688681
2012-11-30 14:32:57 -05:00

130 lines
3.3 KiB
Makefile

## Process this file with automake to produce Makefile.in
include $(top_srcdir)/Makefile.decl
BUILT_SOURCES =
AM_CPPFLAGS = \
$(glib_INCLUDES) \
-DG_LOG_DOMAIN=\"GModule\" \
-D_GMODULE_API=G_PUBLIC_API \
-D_G_API=_GMODULE_API \
@GLIB_DEBUG_FLAGS@ \
-DG_DISABLE_DEPRECATED
gmodule.def: gmodule.symbols
$(AM_V_GEN) env GLIB_DEBUG_FLAGS="$(GLIB_DEBUG_FLAGS)" $(top_srcdir)/glib/process-symbol-file.sh $< $@
EXTRA_DIST += \
makefile.msc.in \
gmoduleconf.h.in \
gmodule.symbols \
gmodule-dl.c \
gmodule-dld.c \
gmodule-dyld.c \
gmodule-os2.c \
gmodule-win32.c \
gmodule-beos.c \
gmodule-ar.c \
gmoduleconf.h.win32 \
gmodule.rc.in
BUILT_EXTRA_DIST = \
makefile.msc \
gmodule.rc
BUILT_SOURCES += gmoduleconf.h
gmoduleconf.h: gmoduleconf.h.in
glibincludedir=$(includedir)/glib-2.0
glibinclude_HEADERS = \
gmodule.h
libglib = $(top_builddir)/glib/libglib-2.0.la
top_builddir_full=`cd \$(top_builddir); pwd`
lib_LTLIBRARIES = libgmodule-2.0.la
if OS_WIN32_AND_DLL_COMPILATION
if MS_LIB_AVAILABLE
noinst_DATA = gmodule-2.0.lib
install_ms_lib_cmd = $(INSTALL) gmodule-2.0.lib $(DESTDIR)$(libdir)
uninstall_ms_lib_cmd = -rm $(DESTDIR)$(libdir)/gmodule-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
gmodule_def = gmodule.def
export_symbols = -export-symbols $(gmodule_def)
gmodule_win32_res = gmodule-win32-res.o
gmodule_win32_res_ldflag = -Wl,$(gmodule_win32_res)
install-def-file:
$(INSTALL) $(builddir)/gmodule.def $(DESTDIR)$(libdir)/gmodule-2.0.def
uninstall-def-file:
-rm $(DESTDIR)$(libdir)/gmodule-2.0.def
else
install-def-file:
uninstall-def-file:
endif
libgmodule_2_0_la_CFLAGS = $(AM_CFLAGS) $(GLIB_HIDDEN_VISIBILITY_CFLAGS)
libgmodule_2_0_la_SOURCES = gmodule.c
libgmodule_2_0_la_LDFLAGS = $(GLIB_LINK_FLAGS) \
$(gmodule_win32_res_ldflag) \
$(G_MODULE_LDFLAGS) \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
-export-dynamic $(no_undefined) $(export_symbols)
libgmodule_2_0_la_LIBADD = $(G_MODULE_LIBS_EXTRA) $(G_MODULE_LIBS) $(libglib)
libgmodule_2_0_la_DEPENDENCIES = $(gmodule_win32_res) gmodule.def
gmodule-win32-res.o: gmodule.rc
$(AM_V_GEN) $(WINDRES) gmodule.rc $@
gmodule-2.0.lib: libgmodule-2.0.la gmodule.def
lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgmodule-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:$(builddir)/gmodule.def -out:$@
.PHONY: files release
files:
@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
echo $$p; \
done
release:
$(MAKE) dist distdir=$(PACKAGE)`date +"%y%m%d"`
dist-hook: $(BUILT_EXTRA_DIST)
@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 install-def-file
uninstall-local: uninstall-ms-lib uninstall-def-file
if HAVE_GLIB_RUNTIME_LIBDIR
install-data-hook:
mkdir -p $(DESTDIR)$(libdir)/$(GLIB_RUNTIME_LIBDIR)
mv $(DESTDIR)$(libdir)/libgmodule-2.0.so.0 $(DESTDIR)$(libdir)/$(GLIB_RUNTIME_LIBDIR)
mv $(DESTDIR)$(libdir)/libgmodule-2.0.so.0.$(LT_CURRENT).$(LT_REVISION) $(DESTDIR)$(libdir)/$(GLIB_RUNTIME_LIBDIR)
rm -f $(DESTDIR)$(libdir)/libgmodule-2.0.so
ln -s $(GLIB_RUNTIME_LIBDIR)/libgmodule-2.0.so.0.$(LT_CURRENT).$(LT_REVISION) $(DESTDIR)$(libdir)/libgmodule-2.0.so
endif