--- /dev/null
+dnl Copyright © 2012 Nick Bowler
+dnl
+dnl Base definitions for dxcommon.
+dnl
+dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
+dnl This is free software: you are free to do what the fuck you want to.
+dnl There is NO WARRANTY, to the extent permitted by law.
+
+m4_pattern_forbid([^_?DX_])
+
+dnl DX_INIT([directory])
+dnl
+dnl Sets the directory of the dxcommon checkout, which is used by other macros
+dnl to find any source files that they may need. If this file was included
+dnl from its original location using m4_include, which normally happens when
+dnl using aclocal, then the directory will be determined automatically (and
+dnl this macro does not need to be called in configure.ac at all). Otherwise,
+dnl this should be called prior to any other dxcommon macro.
+
+m4_define([_DX_BASE_FILE], __file__)
+AC_DEFUN_ONCE([DX_INIT], [dnl
+
+dnl Care must be taken to avoid spurious expansions of things that look like
+dnl macros in the filename; this is made especially difficult since
+dnl m4_bpatsubst does not expand to a quoted string.
+m4_define([_DX_BASEDIR], m4_if([$1], [],
+ [m4_bpatsubst(m4_dquote(m4_defn([_DX_BASE_FILE])),
+ [/m4/[^/]*\.m4\(.\)$], [\1])],
+ [[$1]]))
+
+dnl Include the stamp file, which will cause a failure at autoconf time
+dnl if it does not exist in the checkout. We circumvent m4_include to
+dnl avoid warnings about multiple inclusions.
+m4_builtin([include], m4_defn([_DX_BASEDIR])[/m4/dx-stamp.m4])
+_DX_STAMP_DUMMY
+
+dnl Autoconf scripts should use the DX_BASEDIR m4 macro instead of the
+dnl AC_SUBSTed shell variable, but we use the same name for the macro since
+dnl it means the same thing as the substituted variable.
+dnl
+dnl Autoconf versions <= 2.69 have a bug which causes the first argument of
+dnl AC_SUBST to be expanded as a macro when using the two-argument form. So
+dnl until we require a newer version of autoconf, we must use the one-argument
+dnl form of AC_SUBST.
+
+[DX_BASEDIR]="AS_ESCAPE(m4_dquote(m4_defn([_DX_BASEDIR])))"
+m4_pushdef([m4_pattern_allow])
+AC_SUBST([DX_BASEDIR])
+m4_popdef([m4_pattern_allow])
+])
+
+AC_DEFUN([DX_BASEDIR], [dnl
+AC_REQUIRE([DX_INIT])dnl
+m4_defn([_DX_BASEDIR])dnl
+])
--- /dev/null
+dnl Copyright © 2012 Nick Bowler
+dnl
+dnl Generate the exported.sh script used to determine the exported symbols of
+dnl a (libtool) object file. This is required by the glconfig Automake
+dnl fragment, but will be called automatically in that case.
+dnl
+dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
+dnl This is free software: you are free to do what the fuck you want to.
+dnl There is NO WARRANTY, to the extent permitted by law.
+
+AC_DEFUN([DX_EXPORTED_SH], [dnl
+AC_REQUIRE([DX_INIT])
+
+AC_CONFIG_FILES([exported.sh:]DX_BASEDIR[/snippet/exported.sh.in],
+ [chmod +x exported.sh])
+])
], [dnl M4 code follows
AC_SUBST([GLSRC], [lib])
-AC_DEFUN_ONCE([DX_GLSYM_PREFIX], [AC_SUBST([GLSYM_PREFIX], [$1])])
+
+AC_DEFUN_ONCE([DX_GLSYM_PREFIX], [dnl
+AC_REQUIRE([DX_EXPORTED_SH])
+AC_SUBST([GLSYM_PREFIX], [$1])
+])
AC_CONFIG_COMMANDS_PRE([DX_GLSYM_PREFIX([${PACKAGE}__])])
m4_foreach([gl_objvar], [[gl_LIBOBJS], [gl_LTLIBOBJS]], [dnl
--- /dev/null
+#!@SHELL@
+#
+# Copyright © 2011 Nick Bowler
+#
+# Determine the list of exported symbols from archives or (libtool) object
+# files.
+#
+# License WTFPL2: Do What The Fuck You Want To Public License, version 2.
+# This is free software: you are free to do what the fuck you want to.
+# There is NO WARRANTY, to the extent permitted by law.
+
+OBJS=
+
+while test $# -gt 0
+do
+ case $1 in
+ /*) arg=$1 ;;
+ *) arg=./$1 ;;
+ esac
+
+ if expr "$arg" : '.*\.lo' >/dev/null; then
+ non_pic_object=
+ pic_object=
+ . "$arg"
+
+ dir=`expr "$arg" : '\(.*\)/'`
+ if test x"$pic_object" != x"none"; then
+ OBJS="$OBJS $dir/$pic_object"
+ fi
+ if test x"$non_pic_object" != x"none"; then
+ OBJS="$OBJS $dir/$non_pic_object"
+ fi
+ else
+ OBJS="$OBJS $arg"
+ fi
+
+ shift
+done
+
+set x $OBJS; shift
+case $# in
+0) : ;;
+*) @NM@ $OBJS | @GLOBAL_SYMBOL_PIPE@ | @SED@ 's/^.* //' | sort | uniq ;;
+esac