Add partial infrastructure for libs/ldflags segregation
[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 AC_DEFUN([VLC_ADD_LIBS], [
54   for element in [$1]; do
55     eval "LIBS_${element}="'"'"$2 "'$'"{LIBS_${element}} "'"'
56     am_modules_with_libs="${am_modules_with_libs} ${element}"
57   done
58 ])
59
60 dnl ===========================================================================
61 dnl  Macros to save and restore default flags
62
63 AC_DEFUN([VLC_SAVE_FLAGS], [
64   CPPFLAGS_save="${CPPFLAGS}"
65   CFLAGS_save="${CFLAGS}"
66   CXXFLAGS_save="${CXXFLAGS}"
67   OBJCFLAGS_save="${OBJCFLAGS}"
68   LDFLAGS_save="${LDFLAGS}"
69   LIBS_save="${LIBS}"
70 ])
71
72 AC_DEFUN([VLC_RESTORE_FLAGS], [
73   CPPFLAGS="${CPPFLAGS_save}"
74   CFLAGS="${CFLAGS_save}"
75   CXXFLAGS="${CXXFLAGS_save}"
76   OBJCFLAGS="${OBJCFLAGS_save}"
77   LDFLAGS="${LDFLAGS_save}"
78   LIBS="${LIBS_save}"
79 ])
80
81 dnl ===========================================================================
82 dnl  Helper macro to generate the vlc-config.in file
83
84 AC_DEFUN([VLC_OUTPUT_VLC_CONFIG_IN], [
85
86   AC_MSG_RESULT(configure: creating ./vlc-config.in)
87
88   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} ${am_modules_with_libs}; do echo $x; done | sort | uniq`"
89
90   rm -f vlc-config.in
91   sed -ne '/#@1@#/q;p' < "${srcdir}/vlc-config.in.in" \
92     | sed -e "s/@gprof@/${enable_gprof}/" \
93           -e "s/@cprof@/${enable_cprof}/" \
94           -e "s/@optim@/${enable_optimizations}/" \
95           -e "s/@debug@/${enable_debug}/" \
96           -e "s/@release@/${enable_release}/" \
97           -e "s/@PLUGINS@/${PLUGINS}/" \
98           -e "s/@BUILTINS@/${BUILTINS}/" \
99           -e "s/@CFLAGS_TUNING@/${CFLAGS_TUNING}/" \
100           -e "s/@CFLAGS_OPTIM_SIZE@/${CFLAGS_OPTIM_SIZE}/" \
101           -e "s/@CFLAGS_OPTIM_SPEED@/${CFLAGS_OPTIM_SPEED}/" \
102           -e "s/@CFLAGS_OPTIM_NODEBUG@/${CFLAGS_OPTIM_NODEBUG}/" \
103           -e "s/@CFLAGS_NOOPTIM@/${CFLAGS_NOOPTIM}/" \
104     > vlc-config.in
105
106   dnl  Switch/case loop
107   for x in `echo ${am_all_modules}`
108   do [
109     echo "    ${x})" >> vlc-config.in
110     if test "`eval echo @'$'CPPFLAGS_${x}@`" != "@@"; then
111       echo "      cppflags=\"\${cppflags} `eval echo '$'CPPFLAGS_${x}`\"" >> vlc-config.in
112     fi
113     if test "`eval echo @'$'CFLAGS_${x}@`" != "@@"; then
114       echo "      cflags=\"\${cflags} `eval echo '$'CFLAGS_${x}`\"" >> vlc-config.in
115     fi
116     if test "`eval echo @'$'CXXFLAGS_${x}@`" != "@@"; then
117       echo "      cxxflags=\"\${cxxflags} `eval echo '$'CXXFLAGS_${x}`\"" >> vlc-config.in
118       if test "${x}" != "plugin" -a "${x}" != "builtin"; then
119         echo "      linkage=\"c++\"" >> vlc-config.in
120       fi
121     fi
122     if test "`eval echo @'$'OBJCFLAGS_${x}@`" != "@@"; then
123       echo "      objcflags=\"\${objcflags} `eval echo '$'OBJCFLAGS_${x}`\"" >> vlc-config.in
124       if test "${x}" != "plugin" -a "${x}" != "builtin"; then
125         echo "      if test \"\${linkage}\" = \"c\"; then linkage=\"objc\"; fi" >> vlc-config.in
126       fi
127     fi
128     if test "`eval echo @'$'LDFLAGS_${x}@`" != "@@"; then
129       echo "      ldflags=\"\${ldflags} `eval echo '$'LDFLAGS_${x}`\"" >> vlc-config.in
130     fi
131     if test "`eval echo @'$'LIBS_${x}@`" != "@@"; then
132       echo "      libs=\"\${libs} `eval echo '$'LIBS_${x}`\"" >> vlc-config.in
133     fi
134     echo "    ;;" >> vlc-config.in
135   ] done
136
137   dnl  '/#@1@#/,/#@2@#/{/#@.@#/d;p}' won't work on OS X
138   sed -ne '/#@1@#/,/#@2@#/p' < "${srcdir}/vlc-config.in.in" \
139    | sed -e '/#@.@#/d' >> vlc-config.in
140
141   VLC_CONFIG_HELPER
142
143   dnl  '/#@2@#/,${/#@.@#/d;p}' won't work on OS X
144   sed -ne '/#@2@#/,$p' < "${srcdir}/vlc-config.in.in" \
145    | sed -e '/#@.@#/d' >> vlc-config.in
146 ])
147
148 dnl ===========================================================================
149 dnl  Macros for shared object handling (TODO)
150
151 AC_DEFUN([VLC_LIBRARY_SUFFIX], [
152   AC_MSG_CHECKING(for shared objects suffix)
153   case "${host_os}" in
154     darwin*)
155       LIBEXT=".dylib"
156       ;;
157     *mingw32* | *cygwin* | *wince* | *mingwce* | *pe*)
158       LIBEXT=".dll"
159       ;;
160     hpux*)
161       LIBEXT=".sl"
162       ;;
163     *)
164       LIBEXT=".so"
165       ;;
166   esac
167   AC_MSG_RESULT(${LIBEXT})
168   AC_DEFINE_UNQUOTED(LIBEXT, "${LIBEXT}", [Dynamic object extension])
169 ])
170
171 AC_DEFUN([VLC_SYMBOL_PREFIX], [
172   AC_MSG_CHECKING(for prefix to exported symbols)
173   SYMPREF=""
174   case "${host_os}" in
175     darwin* | *mingw32* | *cygwin* | *wince* | *mingwce* | *pe*)
176       SYMPREF="_"
177       ;;
178   esac
179   AC_MSG_RESULT(${SYMPREF})
180 ])
181