ALL: Merge the win32-contrib branch.
[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@/${CFLAGS_OPTIM}/" \
92           -e "s/@CFLAGS_OPTIM_NODEBUG@/${CFLAGS_OPTIM_NODEBUG}/" \
93           -e "s/@CFLAGS_NOOPTIM@/${CFLAGS_NOOPTIM}/" \
94     > vlc-config.in
95
96   dnl  Switch/case loop
97   for x in `echo ${am_all_modules}`
98   do [
99     echo "    ${x})" >> vlc-config.in
100     if test "`eval echo @'$'CPPFLAGS_${x}@`" != "@@"; then
101       echo "      cppflags=\"\${cppflags} `eval echo '$'CPPFLAGS_${x}`\"" >> vlc-config.in
102     fi
103     if test "`eval echo @'$'CFLAGS_${x}@`" != "@@"; then
104       echo "      cflags=\"\${cflags} `eval echo '$'CFLAGS_${x}`\"" >> vlc-config.in
105     fi
106     if test "`eval echo @'$'CXXFLAGS_${x}@`" != "@@"; then
107       echo "      cxxflags=\"\${cxxflags} `eval echo '$'CXXFLAGS_${x}`\"" >> vlc-config.in
108       if test "${x}" != "plugin" -a "${x}" != "builtin"; then
109         echo "      linkage=\"c++\"" >> vlc-config.in
110       fi
111     fi
112     if test "`eval echo @'$'OBJCFLAGS_${x}@`" != "@@"; then
113       echo "      objcflags=\"\${objcflags} `eval echo '$'OBJCFLAGS_${x}`\"" >> vlc-config.in
114       if test "${x}" != "plugin" -a "${x}" != "builtin"; then
115         echo "      if test \"\${linkage}\" = \"c\"; then linkage=\"objc\"; fi" >> vlc-config.in
116       fi
117     fi
118     if test "`eval echo @'$'LDFLAGS_${x}@`" != "@@"; then
119       echo "      ldflags=\"\${ldflags} `eval echo '$'LDFLAGS_${x}`\"" >> vlc-config.in
120     fi
121     echo "    ;;" >> vlc-config.in
122   ] done
123
124   dnl  '/#@1@#/,/#@2@#/{/#@.@#/d;p}' won't work on OS X
125   sed -ne '/#@1@#/,/#@2@#/p' < "${srcdir}/vlc-config.in.in" \
126    | sed -e '/#@.@#/d' >> vlc-config.in
127
128   VLC_CONFIG_HELPER
129
130   dnl  '/#@2@#/,${/#@.@#/d;p}' won't work on OS X
131   sed -ne '/#@2@#/,$p' < "${srcdir}/vlc-config.in.in" \
132    | sed -e '/#@.@#/d' >> vlc-config.in
133 ])
134
135 dnl ===========================================================================
136 dnl  Macros for shared object handling (TODO)
137
138 AC_DEFUN([VLC_LIBRARY_SUFFIX], [
139   AC_MSG_CHECKING(for shared objects suffix)
140   case "${target_os}" in
141     darwin*)
142       LIBEXT=".dylib"
143       ;;
144     *mingw32* | *cygwin* | *wince* | *mingwce* | *pe*)
145       LIBEXT=".dll"
146       ;;
147     hpux*)
148       LIBEXT=".sl"
149       ;;
150     *)
151       LIBEXT=".so"
152       ;;
153   esac
154   AC_MSG_RESULT(${LIBEXT})
155   AC_DEFINE_UNQUOTED(LIBEXT, "${LIBEXT}", [Dynamic object extension])
156 ])
157
158 AC_DEFUN([VLC_SYMBOL_PREFIX], [
159   AC_MSG_CHECKING(for prefix to exported symbols)
160   SYMPREF=""
161   case "${target_os}" in
162     darwin* | *mingw32* | *cygwin* | *wince* | *mingwce* | *pe*)
163       SYMPREF="_"
164       ;;
165   esac
166   AC_MSG_RESULT(${SYMPREF})
167 ])
168