--- /dev/null
+#!/bin/bash
+
+###############
+# Generate a linker script for GNU ld.
+#
+#
+#
+
+
+
+error () {
+ echo "error: $*" 1>&2
+}
+
+info () {
+ echo "$*" 1>&2
+}
+
+warning () {
+ echo "warning: $*" 1>&2
+}
+
+usage () {
+ info "usage: $0 [-p <pattern>] [-I <ignore-list>] -o <output> <inputs>"
+ exit ${1:-1}
+}
+
+emit () {
+ echo "$*" >> $OUTPUT
+}
+
+
+# set up defaults
+PATTERN="^mrp_|^_mrp_" # export everything prefixed with mrp_
+IGNORE="MRP_PRINTF_LIKE,MRP_NULLTERM" # ignore these symbols/macros
+IT="," # ignore-list is comma-separated
+SOURCES="" # no default input, must be specified
+OUTPUT="" # no default output, must be specified
+
+# parse command line
+while [ -n "${1#-}" ]; do
+ case $1 in
+ -o)
+ if [ -z "$OUTPUT" ]; then
+ shift
+ OUTPUT="$1"
+ else
+ error "Multiple output files requested."
+ usage
+ fi
+ ;;
+ -p)
+ shift;
+ PATTERN="$1"
+ ;;
+ -I)
+ shift
+ IGNORE="$IGNORE$IT$1"
+ IT=","
+ ;;
+ -h)
+ usage 0
+ ;;
+ -q)
+ QUIET="yes"
+ ;;
+ -c)
+ # This is only for command-line compatibility with collect-symbols
+ # to minimize the impact of switching back and forth (if needed).
+ # collect-symbols gets compilation flags passed using the -c
+ # option which we simply ignore here when using ctags.
+ shift
+ ;;
+ -*)
+ error "Unknown option '$1'."
+ usage
+ ;;
+ *)
+ SOURCES="$SOURCES $1"
+ ;;
+ esac
+ shift
+done
+
+# check that we've got everything mandatory
+if [ -z "$OUTPUT" ]; then
+ error "No output file specified (use the -o option)."
+ usage
+fi
+
+if [ -z "$SOURCES" ]; then
+ warning "No input files, generating local-only linker script."
+ emit "{"
+ emit " local:"
+ emit " *;"
+ emit "};"
+ exit 0
+fi
+
+if [ -z "$PATTERN" ]; then
+ PATTERN="^mrp_"
+fi
+
+if [ -n "$IGNORE" ]; then
+ ignore_opts="-I $IGNORE"
+else
+ ignore_opts=""
+fi
+
+# check that we have ctags
+which ctags >& /dev/null
+if [ "$?" != "0" ]; then
+ error "Needs ctags to regenerate linker script $OUTPUT..."
+ exit 1
+fi
+
+# generate the output
+[ -n "$QUIET" ] || info "Generating linker script $OUTPUT..."
+rm -f $OUTPUT
+touch $OUTPUT
+
+emit "{"
+emit " global:"
+ctags $ignore_opts -f - --c-kinds=px $SOURCES | \
+ awk "/$PATTERN/ { print \$1; }" | \
+ sort | \
+ while read sym; do
+ emit " $sym;"
+ done
+
+emit " local:"
+emit " *;"
+emit "};"
BUILT_SOURCES =
-AM_CFLAGS = $(WARNING_CFLAGS) -I$(top_builddir) -DLIBDIR=\"@LIBDIR@\"
+AM_CFLAGS = $(WARNING_CFLAGS) $(INCLUDES) -DLIBDIR=\"@LIBDIR@\"
MURPHY_CFLAGS =
pkgconfigdir = ${libdir}/pkgconfig
pkgconfig_DATA =
EXTRA_DIST =
-QUIET_GEN = $(Q:@=@echo ' GEN '$@;)
+QUIET_GEN = $(Q:@=@echo ' GEN '$@;)
LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
-INCLUDES = -I$(top_builddir)/src/murphy-db/include -I$(top_builddir)
+INCLUDES = -I$(top_builddir) -I$(top_builddir)/src \
+ -I$(top_builddir)/src/murphy-db/include
BUILT_SOURCES =
###################################
# linker script generation
linker-script.common: $(libmurphy_common_la_HEADERS)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_common_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.common
# lua-utils linker script generation
linker-script.lua-utils: $(libmurphy_lua_utils_la_HEADERS)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_lua_utils_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.lua-utils
# lua-decision linker script generation
linker-script.lua-decision: $(libmurphy_lua_decision_la_HEADERS)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_lua_decision_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.lua-decision
# core linker script generation
linker-script.core: $(libmurphy_core_la_HEADERS) \
$(libmurphy_core_lua_bindings_la_HEADERS)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_core_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.core
# linker script generation
linker-script.dbus: $(murphy_dbus_headers)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_dbus_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.dbus
# linker script generation
linker-script.pulse: $(murphy_pulse_headers)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_pulse_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.pulse
# linker script generation
linker-script.ecore: $(murphy_ecore_headers)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_ecore_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.ecore
# linker script generation
linker-script.glib: $(murphy_glib_headers)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_glib_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.glib
# linker script generation
linker-script.qt: $(murphy_qt_headers)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_qt_la_CPPFLAGS) -DQT_ENABLED=1" -o $@ $^
clean-linker-script::
-rm -f linker-script.qt
resolver-func-info.c
libmurphy_resolver_la_CFLAGS = \
- $(AM_CFLAGS) \
- $(INCLUDES)
+ $(AM_CFLAGS)
libmurphy_resolver_la_LDFLAGS = \
-Wl,-version-script=linker-script.resolver \
# resolver linker script generation
linker-script.resolver: $(libmurphy_resolver_la_HEADERS)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_resolver_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.resolver
$(libmurphy_resource_backend_la_REGULAR_SOURCES) \
resource-func-info.c
-libmurphy_resource_backend_la_CFLAGS = \
+libmurphy_resource_backend_la_CFLAGS = \
$(AM_CFLAGS) \
- $(LUA_CFLAGS) \
- $(INCLUDES)
+ $(LUA_CFLAGS)
libmurphy_resource_backend_la_LDFLAGS = \
-Wl,-version-script=linker-script.resource_backend \
# resource linker script generation
linker-script.resource_backend: $(libmurphy_resource_backend_la_HEADERS)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_resource_backend_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.resource_backend
# linker script generation
linker-script.breedline: $(libbreedline_la_HEADERS)
$(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
- -p '^brl_' -o $@ $^
+ -c "$(libbreedline_la_CFLAGS)" -p '^brl_' -o $@ $^
clean-linker-script::
-rm -f linker-script.breedline
# linker script generation
linker-script.breedline-murphy: $(libbreedline_murphy_la_HEADERS)
$(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
- -p '^brl_' -o $@ $^
+ -c "$(libbreedline_murphy_la_CFLAGS)" -p '^brl_' -o $@ $^
clean-linker-script::
-rm -f linker-script.breedline-murphy
# linker script generation
linker-script.breedline-glib: $(breedline_glib_headers)
$(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
- -p '^brl_' -o $@ $^
+ -c "$(libbreedline_glib_la_CFLAGS)" -p '^brl_' -o $@ $^
clean-linker-script::
-rm -f linker-script.breedline-glib
plugins/resource-native/libmurphy-resource/message.c
libmurphy_resource_la_CFLAGS = \
- $(AM_CFLAGS) \
- $(INCLUDES)
+ $(AM_CFLAGS)
libmurphy_resource_la_LDFLAGS = \
-Wl,-version-script=linker-script.resource \
# linker script generation
linker-script.resource: $(libmurphy_resource_la_HEADERS)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_resource_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.resource
$(PLUGIN_RESOURCE_NATIVE_REGULAR_SOURCES) \
plugin-resource-native-func-info.c
PLUGIN_RESOURCE_NATIVE_CFLAGS = \
- $(LUA_CFLAGS) \
- $(INCLUDES)
+ $(LUA_CFLAGS)
+
PLUGIN_RESOURCE_NATIVE_LIBS = \
libmurphy-core.la \
libmurphy-common.la \
# linkedin domain control plugin linker script generation
linker-script.domain-control: $(DOMAIN_CONTROL_PLUGIN_LOADER:%.c=%.h)
- $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q -o $@ $^
+ $(QUIET_GEN)$(top_builddir)/build-aux/gen-linker-script -q \
+ -c "$(libmurphy_domain_controller_la_CFLAGS)" -o $@ $^
clean-linker-script::
-rm -f linker-script.domain-control