3fc1698cd1cdb37b4a494d57778552033d668100
[vlc.git] / m4 / vlc.m4
1 dnl  Macros needed for VLC
2 dnl  $Id$
3
4 dnl ===========================================================================
5 dnl  Macros to add plugins or builtins and handle their flags
6 m4_pattern_allow([^PKG_CONFIG(_LIBDIR)?$])
7
8
9 AC_DEFUN([VLC_ADD_BUILTINS], [
10   BUILTINS="${BUILTINS} $1"
11 ])
12
13 AC_DEFUN([VLC_ADD_PLUGINS], [
14   PLUGINS="${PLUGINS} $1"
15 ])
16
17 dnl  Special cases: vlc, pics, plugins, save
18 AC_DEFUN([VLC_ADD_CPPFLAGS], [
19   for element in [$1]; do
20     eval "CPPFLAGS_${element}="'"$'"{CPPFLAGS_${element}} $2"'"'
21     am_modules_with_cppflags="${am_modules_with_cppflags} ${element}"
22   done
23 ])
24
25 AC_DEFUN([VLC_ADD_CFLAGS], [
26   for element in [$1]; do
27     eval "CFLAGS_${element}="'"$'"{CFLAGS_${element}} $2"'"'
28     am_modules_with_cflags="${am_modules_with_cflags} ${element}"
29   done
30 ])
31
32 AC_DEFUN([VLC_ADD_CXXFLAGS], [
33   for element in [$1]; do
34     eval "CXXFLAGS_${element}="'"$'"{CXXFLAGS_${element}} $2"'"'
35     am_modules_with_cxxflags="${am_modules_with_cxxflags} ${element}"
36   done
37 ])
38
39 AC_DEFUN([VLC_ADD_OBJCFLAGS], [
40   for element in [$1]; do
41     eval "OBJCFLAGS_${element}="'"$'"{OBJCFLAGS_${element}} $2"'"'
42     am_modules_with_objcflags="${am_modules_with_objcflags} ${element}"
43   done
44 ])
45
46 AC_DEFUN([VLC_ADD_LDFLAGS], [
47   for element in [$1]; do
48     eval "LDFLAGS_${element}="'"'"$2 "'$'"{LDFLAGS_${element}} "'"'
49     am_modules_with_ldflags="${am_modules_with_ldflags} ${element}"
50   done
51 ])
52
53 dnl ===========================================================================
54 dnl  Macros to save and restore default flags
55
56 AC_DEFUN([VLC_SAVE_FLAGS], [
57   CPPFLAGS_save="${CPPFLAGS}"
58   CFLAGS_save="${CFLAGS}"
59   CXXFLAGS_save="${CXXFLAGS}"
60   OBJCFLAGS_save="${OBJCFLAGS}"
61   LDFLAGS_save="${LDFLAGS}"
62 ])
63
64 AC_DEFUN([VLC_RESTORE_FLAGS], [
65   CPPFLAGS="${CPPFLAGS_save}"
66   CFLAGS="${CFLAGS_save}"
67   CXXFLAGS="${CXXFLAGS_save}"
68   OBJCFLAGS="${OBJCFLAGS_save}"
69   LDFLAGS="${LDFLAGS_save}"
70 ])
71
72 dnl ===========================================================================
73 dnl  Helper macro to generate the vlc-config.in file
74
75 AC_DEFUN([VLC_OUTPUT_VLC_CONFIG_IN], [
76
77   AC_MSG_RESULT(configure: creating ./vlc-config.in)
78
79   am_all_modules="`for x in ${am_modules_with_cppflags} ${am_modules_with_cflags} ${am_modules_with_cxxflags} ${am_modules_with_objcflags} ${am_modules_with_ldflags}; do echo $x; done | sort | uniq`"
80
81   rm -f vlc-config.in
82   sed -ne '/#@1@#/q;p' < "${srcdir}/vlc-config.in.in" \
83     | sed -e "s/@gprof@/${enable_gprof}/" \
84           -e "s/@cprof@/${enable_cprof}/" \
85           -e "s/@optim@/${enable_optimizations}/" \
86           -e "s/@debug@/${enable_debug}/" \
87           -e "s/@release@/${enable_release}/" \
88           -e "s/@PLUGINS@/${PLUGINS}/" \
89           -e "s/@BUILTINS@/${BUILTINS}/" \
90           -e "s/@CFLAGS_TUNING@/${CFLAGS_TUNING}/" \
91           -e "s/@CFLAGS_OPTIM_SIZE@/${CFLAGS_OPTIM_SIZE}/" \
92           -e "s/@CFLAGS_OPTIM_SPEED@/${CFLAGS_OPTIM_SPEED}/" \
93           -e "s/@CFLAGS_OPTIM_NODEBUG@/${CFLAGS_OPTIM_NODEBUG}/" \
94           -e "s/@CFLAGS_NOOPTIM@/${CFLAGS_NOOPTIM}/" \
95     > vlc-config.in
96
97   dnl  Switch/case loop
98   for x in `echo ${am_all_modules}`
99   do [
100     echo "    ${x})" >> vlc-config.in
101     if test "`eval echo @'$'CPPFLAGS_${x}@`" != "@@"; then
102       echo "      cppflags=\"\${cppflags} `eval echo '$'CPPFLAGS_${x}`\"" >> vlc-config.in
103     fi
104     if test "`eval echo @'$'CFLAGS_${x}@`" != "@@"; then
105       echo "      cflags=\"\${cflags} `eval echo '$'CFLAGS_${x}`\"" >> vlc-config.in
106     fi
107     if test "`eval echo @'$'CXXFLAGS_${x}@`" != "@@"; then
108       echo "      cxxflags=\"\${cxxflags} `eval echo '$'CXXFLAGS_${x}`\"" >> vlc-config.in
109       if test "${x}" != "plugin" -a "${x}" != "builtin"; then
110         echo "      linkage=\"c++\"" >> vlc-config.in
111       fi
112     fi
113     if test "`eval echo @'$'OBJCFLAGS_${x}@`" != "@@"; then
114       echo "      objcflags=\"\${objcflags} `eval echo '$'OBJCFLAGS_${x}`\"" >> vlc-config.in
115       if test "${x}" != "plugin" -a "${x}" != "builtin"; then
116         echo "      if test \"\${linkage}\" = \"c\"; then linkage=\"objc\"; fi" >> vlc-config.in
117       fi
118     fi
119     if test "`eval echo @'$'LDFLAGS_${x}@`" != "@@"; then
120       echo "      ldflags=\"\${ldflags} `eval echo '$'LDFLAGS_${x}`\"" >> vlc-config.in
121     fi
122     echo "    ;;" >> vlc-config.in
123   ] done
124
125   dnl  '/#@1@#/,/#@2@#/{/#@.@#/d;p}' won't work on OS X
126   sed -ne '/#@1@#/,/#@2@#/p' < "${srcdir}/vlc-config.in.in" \
127    | sed -e '/#@.@#/d' >> vlc-config.in
128
129   VLC_CONFIG_HELPER
130
131   dnl  '/#@2@#/,${/#@.@#/d;p}' won't work on OS X
132   sed -ne '/#@2@#/,$p' < "${srcdir}/vlc-config.in.in" \
133    | sed -e '/#@.@#/d' >> vlc-config.in
134 ])
135
136 dnl ===========================================================================
137 dnl  Macros for shared object handling (TODO)
138
139 AC_DEFUN([VLC_LIBRARY_SUFFIX], [
140   AC_MSG_CHECKING(for shared objects suffix)
141   case "${host_os}" in
142     darwin*)
143       LIBEXT=".dylib"
144       ;;
145     *mingw32* | *cygwin* | *wince* | *mingwce* | *pe*)
146       LIBEXT=".dll"
147       ;;
148     hpux*)
149       LIBEXT=".sl"
150       ;;
151     *)
152       LIBEXT=".so"
153       ;;
154   esac
155   AC_MSG_RESULT(${LIBEXT})
156   AC_DEFINE_UNQUOTED(LIBEXT, "${LIBEXT}", [Dynamic object extension])
157 ])
158
159 AC_DEFUN([VLC_SYMBOL_PREFIX], [
160   AC_MSG_CHECKING(for prefix to exported symbols)
161   SYMPREF=""
162   case "${host_os}" in
163     darwin* | *mingw32* | *cygwin* | *wince* | *mingwce* | *pe*)
164       SYMPREF="_"
165       ;;
166   esac
167   AC_MSG_RESULT(${SYMPREF})
168 ])
169