forked from bonzini/smalltalk
/
gst-package.m4
123 lines (104 loc) · 4.09 KB
/
gst-package.m4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
dnl I'd like this to be edited in -*- Autoconf -*- mode...
dnl
dnl GST_PACKAGE_ENABLE(NAME, DIR, [TESTS], [VARS-TO-TEST], [CONFIG-FILES], [LIBS])
dnl ------------------------------------------------------------------------
dnl Arrange for installation of package NAME in directory DIR (prefixed
dnl by whatever was set up with GST_PACKAGE_PREFIX.
dnl TESTS are run and VARS-TO-TEST are inspected after running them -- if
dnl any of them is 'no' or 'not found' the package will not be built.
dnl CONFIG-FILES (prefixed by DIR) are created from corresponding .in files;
dnl it is important to specify package.xml here if it is automatically
dnl generated. LIBS are libraries (possibly with .la extensions) that are
dnl built and will be preloaded by the wrapper script in `tests/gst'.
AC_DEFUN([GST_PACKAGE_PREFIX], [
m4_define([_GST_PKG_PREFIX], [$1/])])
AC_DEFUN([GST_PACKAGE_DEPENDENCIES], [
m4_define([_GST_PKG_DEPENDENCIES], [$1])])
m4_define([_GST_PKG_DEPENDENCIES], [])
m4_define([_GST_RULES_PREPARE],
[m4_expand_once([
PACKAGE_RULES=pkgrules.tmp
rm -f pkgrules.tmp])
AC_SUBST_FILE([PACKAGE_RULES])])
m4_define([_GST_PKG_ENABLE], [
cat >> pkgrules.tmp << \EOF
install-data-hook:: $1.star
$(GST_[]PACKAGE) --srcdir=$(srcdir) --target-directory=$(gstdatadir) --destdir=$(DESTDIR) $1.star
uninstall-local::
$(GST_[]PACKAGE) --srcdir=$(srcdir) --target-directory=$(gstdatadir) --destdir=$(DESTDIR) --uninstall $(DESTDIR)$(gstdatadir)/$1.star
-include $(srcdir)/_GST_PKG_MK
all-local: $1.star
EOF
m4_if([$3], [], [],
[PACKAGE_DLOPEN_FLAGS="$PACKAGE_DLOPEN_FLAGS m4_foreach_w(GST_Lib,
[$3], [-dlopen \"\${abs_top_builddir}/_GST_PKG_DIR/GST_Lib\"])"])
m4_foreach_w(GST_File, [$2],
[m4_if(GST_File, Makefile,
[BUILT_PACKAGES="$BUILT_PACKAGES _GST_PKG_DIR"])])])
m4_define([_GST_PKG_IF_FILE], [dnl
m4_define([_GST_COND], [$4])dnl
m4_foreach_w(GST_File, [$1],
[m4_if(GST_File, $2, [m4_define([_GST_COND], [$3])])])dnl
_GST_COND])
m4_define([_GST_PKG_PREFIX], [])
AC_DEFUN([GST_PACKAGE_ENABLE], [
$3
AC_MSG_CHECKING([whether to install $1])
_GST_RULES_PREPARE
m4_define([_GST_PKG_DIR], [_GST_PKG_PREFIX[]$2])dnl
m4_define([_GST_PKG_XML], [_GST_PKG_DIR/package.xml])dnl
m4_define([_GST_PKG_DISTDIR], [$(distdir)/_GST_PKG_DIR])dnl
m4_define([_GST_PKG_STAMP], [_GST_PKG_DIR/stamp-classes])dnl
m4_define([_GST_PKG_MK], [_GST_PKG_DIR/Makefile.frag])dnl
m4_define([_GST_PKG_XML_IN],
[_GST_PKG_IF_FILE([$5], [package.xml],
[$(srcdir)/_GST_PKG_DIR/package.xml.in],
[_GST_PKG_XML])])dnl
cat >> pkgrules.tmp << \EOF
all-local: $(srcdir)/_GST_PKG_STAMP
$1.star: _GST_PKG_XML $(srcdir)/_GST_PKG_STAMP _GST_PKG_DEPENDENCIES
_GST_PKG_IF_FILE([$5], [Makefile], [cd _GST_PKG_DIR && $(MAKE)
])$(GST_[]PACKAGE) --srcdir=$(srcdir) --target-directory=. $<
clean-local::
-rm -f $1.star
dist-hook:: _GST_PKG_XML
$(GST_[]PACKAGE) --srcdir=$(srcdir) --target-directory=_GST_PKG_DISTDIR --dist $<
dist-hook:: $(srcdir)/_GST_PKG_STAMP $(srcdir)/_GST_PKG_MK
cp -p $(srcdir)/_GST_PKG_STAMP _GST_PKG_DISTDIR/stamp-classes
cp -p $(srcdir)/_GST_PKG_MK _GST_PKG_DISTDIR/Makefile.frag
$(srcdir)/_GST_PKG_MK: _GST_PKG_XML_IN
(echo '$1_FILES = \'; \
$(GST_[]PACKAGE) --srcdir=$(srcdir) --vpath --list-files $1 $< | \
tr -d \\r | tr \\n " "; \
echo; \
echo '$$($1_FILES):'; \
echo '$$(srcdir)/_GST_PKG_STAMP: $$($1_FILES)'; \
echo ' touch $$(srcdir)/_GST_PKG_STAMP') > $(srcdir)/_GST_PKG_MK
EOF
m4_if([$4], [],
[_GST_PKG_ENABLE([$1], [$5], [$6])
AC_MSG_RESULT([yes])],
[(for i in $4; do
eval ac_var='${'$i'-bad}'
case "$ac_var" in
no* )
exit 1 ;;
bad )
AC_MSG_WARN([variable $i not set, proceeding as if \"no\"])
exit 1 ;;
esac
done)
if test $? = 0; then
_GST_PKG_ENABLE([$1], [$5], [$6])
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
])
m4_if([$5], [], [],
[_GST_PKG_IF_FILE([$5], [Makefile], [ALL_PACKAGES="$ALL_PACKAGES _GST_PKG_DIR"])
AC_CONFIG_FILES(m4_foreach_w(GST_File, [$5], [_GST_PKG_DIR/GST_File ])) ])
AC_SUBST([ALL_PACKAGES])
AC_SUBST([BUILT_PACKAGES])
AC_SUBST([PACKAGE_DLOPEN_FLAGS])
])dnl