2 AC_CANONICAL_TARGET([])
4 dnl when going to/from release please set the nano (fourth number) right !
5 dnl releases only do Wall, cvs and prerelease does Werror too
6 AS_VERSION(gstreamer, GST_VERSION, 0, 7, 0, 1, GST_CVS="no", GST_CVS="yes")
8 dnl AM_MAINTAINER_MODE only provides the option to configure to enable it
10 AM_INIT_AUTOMAKE($PACKAGE,$VERSION)
12 dnl our libraries and install dirs use major.minor as a version
13 GST_MAJORMINOR=$GST_VERSION_MAJOR.$GST_VERSION_MINOR
14 AC_SUBST(GST_MAJORMINOR)
17 dnl For interactive UNIX (a Sun thing)
20 dnl CURRENT, REVISION, AGE
21 dnl - library source changed -> increment REVISION
22 dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
23 dnl - interfaces added -> increment AGE
24 dnl - interfaces removed -> AGE = 0
25 AS_LIBTOOL(GST, 3, 0, 0)
27 AC_CONFIG_SRCDIR([gst/gst.c])
28 AM_CONFIG_HEADER(config.h)
30 dnl Add parameters for aclocal
31 dnl (This must come after AM_INIT_AUTOMAKE, since it modifies ACLOCAL)
32 ACLOCAL="$ACLOCAL -I common/m4 $ACLOCAL_FLAGS"
38 dnl decide on error flags
39 AS_COMPILER_FLAG(-Wall,GST_ERROR="$GST_ERROR -Wall",GST_ERROR="$GST_ERROR")
40 if test "x$GST_CVS" = "xyes"; then
41 AS_COMPILER_FLAG(-Werror,GST_ERROR="$GST_ERROR -Werror",GST_ERROR="$GST_ERROR")
44 dnl We disable static building for development, for time savings
45 dnl *NOTE*: dnl this line before release, so release does static too
51 dnl ##############################
52 dnl # Do automated configuration #
53 dnl ##############################
58 dnl allow for different autotools
59 AS_AUTOTOOLS_ALTERNATE()
61 dnl modify pkg-config path
62 AC_ARG_WITH(pkg-config-path,
63 AC_HELP_STRING([--with-pkg-config-path],
64 [colon-separated list of pkg-config(1) dirs]),
65 [export PKG_CONFIG_PATH=${withval}])
70 dnl Perl is used in building documentation
71 AC_PATH_PROG(PERL_PATH, perl, no)
72 if test x$PERL_PATH = xno; then
73 AC_MSG_ERROR(Could not find perl)
76 dnl we require bison for building of some of the marshal files
77 dnl FIXME: check if AC_PROG_YACC is suitable here
78 AC_PATH_PROG(BISON_PATH, bison, no)
79 if test x$BISON_PATH = xno; then
80 AC_MSG_ERROR(Could not find bison)
83 dnl we require flex for building the parser
84 dnl FIXME: check if AC_PROG_LEX is suitable here
85 AC_PATH_PROG(FLEX_PATH, flex, no)
86 if test x$FLEX_PATH = xno; then
87 AC_MSG_ERROR(Could not find flex)
91 dnl We should really use AC_SYS_LARGEFILE, but the problem is
92 dnl many of the plugins don't include "config.h". To assure
93 dnl binary compatibility, it is necessary that all gstreamer
94 dnl code be compiled with the same sizeof(off_t), so we use
95 dnl the following crude hack.
99 dnl GST_CFLAGS are split up as GST_EXT_CFLAGS and GST_INT_CFLAGS
101 dnl this is so we can make GST_CFLAGS for external modules available
102 dnl without mixing in internal (uninstalled) CFLAGS
105 dnl disable deprecated functions internally
106 GST_INT_CFLAGS="-DGST_DISABLE_DEPRECATED"
108 AC_MSG_CHECKING(for large file support)
110 #define _LARGEFILE_SOURCE
111 #define _FILE_OFFSET_BITS 64
112 #include <sys/types.h>
113 int main () { return !(sizeof(off_t) == 8); }
117 GST_EXT_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
126 dnl check for makecontext and define HAVE_MAKECONTEXT if we have it
128 if test "$ac_cv_check_mcsc" == "yes"; then
129 AC_DEFINE_UNQUOTED(HAVE_MAKECONTEXT, $HAVE_MAKECONTEXT,
130 [defined if we have makecontext ()])
133 dnl Check for a way to display the function name in debug output
136 dnl Check for essential libraries first:
137 dnl ====================================
140 dnl Minimum required version of GLib2
141 dnl required for compilation without warnings
146 PKG_CHECK_MODULES(GLIB2, glib-2.0 >= $GLIB2_REQ gobject-2.0 gthread-2.0 gmodule-2.0,HAVE_GLIB2=yes,HAVE_GLIB2=no)
147 GLIB_LIBS=$GLIB2_LIBS
148 GLIB_CFLAGS=$GLIB2_CFLAGS
150 AC_SUBST(GLIB_CFLAGS)
152 if test "x$HAVE_GLIB2" = "xno"; then
153 AC_MSG_ERROR([GStreamer requires GLib 2.0 to compile.])
156 GST_PKG_DEPS="glib-2.0, gobject-2.0, gmodule-2.0, gthread-2.0"
157 AC_SUBST(GST_PKG_DEPS)
160 dnl Minimum required version of libxml2
162 AC_SUBST(LIBXML2_REQ)
164 dnl check for libxml2
168 dnl FIXME: This test passes on popt 1.6.2, maybe earlier, but popt 1.6.2
169 dnl causes segfaults on gst_init. Write a working test if possible.
170 GST_CHECK_LIBHEADER(POPT, popt, poptStrippedArgv,, popt.h, POPT_LIBS="-lpopt",
171 AC_MSG_ERROR([popt 1.6.3 or newer is required to build gstreamer. You can
172 download the latest version from
173 ftp://ftp.rpm.org/pub/rpm/dist/])
175 AC_MSG_NOTICE(Checking for POPT_TABLEEND)
180 #ifndef POPT_TABLEEND
188 AC_MSG_ERROR([popt 1.6.3 or newer is required to build gstreamer. You can
189 download the latest version from
190 ftp://ftp.rpm.org/pub/rpm/dist/])
193 dnl Check for atomic.h
194 dnl Note: use AC_CHECK_HEADER not AC_CHECK_HEADERS, because the latter
195 dnl defines the wrong default symbol as well (HAVE_ASM_ATOMIC_H)
196 AC_CHECK_HEADER(asm/atomic.h, HAVE_ATOMIC_H=yes, HAVE_ATOMIC_H=no)
197 dnl Do a compile to check that it has atomic_set (eg, linux 2.0 didn't)
198 if test x$HAVE_ATOMIC_H = xyes; then
200 #include "asm/atomic.h"
201 main() {atomic_t t; atomic_set(&t,0); atomic_inc(&t); atomic_add(1,&t);return 0;}
204 if test x$HAVE_ATOMIC_H = xyes; then
205 AC_MSG_WARN(Atomic reference counting is out of date: doing without.)
211 dnl Check for ucontext.h
212 AC_CHECK_HEADER(ucontext.h, AC_DEFINE(HAVE_UCONTEXT_H, 1, [defined if we have ucontext.h]))
214 dnl ######################################################################
215 dnl # Check command line parameters, and set shell variables accordingly #
216 dnl ######################################################################
218 dnl FIXME: simplify all this down using a few m4 macros
220 AC_ARG_ENABLE(libmmx,
221 AC_HELP_STRING([--enable-libmmx],[use libmmx, if available]),
222 [case "${enableval}" in
223 yes) USE_LIBMMX=$HAVE_LIBMMX ;;
225 *) AC_MSG_ERROR(bad value ${enableval} for --enable-libmmx) ;;
227 [USE_LIBMMX=$HAVE_LIBMMX]) dnl Default value
229 AC_ARG_ENABLE(atomic,
230 AC_HELP_STRING([--enable-atomic],[use atomic reference counting header]),
231 [case "${enableval}" in
232 yes) USE_ATOMIC_H=$HAVE_ATOMIC_H;;
233 noset) USE_ATOMIC_H=$HAVE_ATOMIC_H;;
234 no) USE_ATOMIC_H=no;;
235 *) AC_MSG_ERROR(bad value ${enableval} for --enable-atomic) ;;
237 [USE_ATOMIC_H=$HAVE_ATOMIC_H]) dnl Default value
239 AC_ARG_ENABLE(fast-stack-trash,
240 AC_HELP_STRING([--enable-fast-stack-trash],[use fast memory allocator (i586 or above)]),
241 [case "${enableval}" in
242 yes) USE_FAST_STACK_TRASH=yes;;
243 noset) USE_FAST_STACK_TRASH=no;;
244 no) USE_FAST_STACK_TRASH=no;;
245 *) AC_MSG_ERROR(bad value ${enableval} for --enable-atomic) ;;
247 [USE_FAST_STACK_TRASH=yes]) dnl Default value
249 AC_ARG_ENABLE(plugin-builddir,
250 AC_HELP_STRING([--enable-plugin-builddir],[allow tests/demos to use non-installed plugins]),
251 [case "${enableval}" in
252 yes) PLUGINS_USE_BUILDDIR=yes ;;
253 no) PLUGINS_USE_BUILDDIR=no ;;
254 *) AC_MSG_ERROR(bad value ${enableval} for --enable-plugin-builddir) ;;
256 [PLUGINS_USE_BUILDDIR=no]) dnl Default value
258 AC_ARG_ENABLE(profiling,
259 AC_HELP_STRING([--enable-profiling],[adds -pg to compiler commandline, for profiling]),
260 [case "${enableval}" in
261 yes) USE_PROFILING=yes ;;
262 no) UES_PROFILING=no ;;
263 *) AC_MSG_ERROR(bad value ${enableval} for --enable-profiling) ;;
265 [USE_PROFILING=no]) dnl Default value
267 dnl use a cache dir for storing element registry info.
268 dnl default to building registry in the source tree if we are enabling plugin build dir
269 if test "x$PLUGINS_USE_BUILDDIR" = "xyes"; then
272 dnl ${localstatedir} points to PREFIX/var
273 GST_CACHE_DIR=${localstatedir}/cache/gstreamer-$GST_MAJORMINOR
275 AC_ARG_WITH(cachedir,
276 AC_HELP_STRING([--with-cachedir],[specify path to use for plugin and command completion registries]),
277 [case "${withval}" in
278 yes) AC_MSG_ERROR(bad value ${withval} for --with-cachedir) ;;
279 no) AC_MSG_ERROR(bad value ${withval} for --with-cachedir) ;;
280 *) GST_CACHE_DIR="${withval}" ;;
282 [:]) dnl Default value
284 AS_AC_EXPAND(GST_CACHE_DIR, $GST_CACHE_DIR)
285 AC_MSG_NOTICE(Using $GST_CACHE_DIR as registry cache dir)
288 dnl building of tests
290 AC_HELP_STRING([--disable-tests],[disable building test apps]),
291 [case "${enableval}" in
292 yes) BUILD_TESTS=yes ;;
293 no) BUILD_TESTS=no ;;
294 *) AC_MSG_ERROR(bad value ${enableval} for --disable-tests) ;;
296 [BUILD_TESTS=yes]) dnl Default value
297 AM_CONDITIONAL(BUILD_TESTS, test "x$BUILD_TESTS" = "xyes")
299 dnl tests known to fail
300 AC_ARG_ENABLE(failing-tests,
301 AC_HELP_STRING([--disable-failing-tests],[disable building tests known to fail]),
302 [case "${enableval}" in
303 yes) BUILD_FAILING_TESTS=yes ;;
304 no) BUILD_FAILING_TESTS=no ;;
305 *) AC_MSG_ERROR(bad value ${enableval} for --disable-failing-tests) ;;
307 [BUILD_FAILING_TESTS=no]) dnl Default value
308 AM_CONDITIONAL(BUILD_FAILING_TESTS, test "x$BUILD_FAILING_TESTS" = "xyes")
309 if test x$BUILD_FAILING_TESTS = xyes; then
310 AC_MSG_WARN([building tests known to fail, use --disable-failing-tests to disable])
312 AC_MSG_WARN([Sissy ! By asking to not build the tests known to fail, you hereby waive your right to customer support. If you do not agree with this EULA, please press Ctrl-C before the next line is printed. By allowing the next line to be printed, you expressly acknowledge your acceptance of this EULA.])
315 AC_ARG_ENABLE(examples,
316 AC_HELP_STRING([--disable-examples],[disable building examples]),
317 [case "${enableval}" in
318 yes) BUILD_EXAMPLES=yes ;;
319 no) BUILD_EXAMPLES=no ;;
320 *) AC_MSG_ERROR(bad value ${enableval} for --disable-examples) ;;
322 [BUILD_EXAMPLES=yes]) dnl Default value
323 AM_CONDITIONAL(BUILD_EXAMPLES, test "x$BUILD_EXAMPLES" = "xyes")
325 dnl Next, check for the optional components:
326 dnl ========================================
330 AC_HELP_STRING([--disable-debug],[disable addition of -g debugging info]),
331 [case "${enableval}" in
332 yes) USE_DEBUG=yes ;;
334 *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
336 [USE_DEBUG=yes]) dnl Default value
337 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_GST_DEBUG, true)
338 GST_SUBSYSTEM_DISABLE(GST_DEBUG,[debugging subsystem])
340 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_LOADSAVE, true)
341 GST_SUBSYSTEM_DISABLE(LOADSAVE,[pipeline XML load/save])
342 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_TYPEFIND, true)
343 GST_SUBSYSTEM_DISABLE(TYPEFIND,[typefind plugin],)
344 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_AUTOPLUG, true)
345 GST_SUBSYSTEM_DISABLE(AUTOPLUG,[autoplugger subsystem])
346 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_PARSE, true)
347 GST_SUBSYSTEM_DISABLE(PARSE,[command-line parser])
348 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_TRACE, true)
349 GST_SUBSYSTEM_DISABLE(TRACE,[tracing subsystem])
350 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_ALLOC_TRACE, true)
351 GST_SUBSYSTEM_DISABLE(ALLOC_TRACE,[allocation tracing])
353 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_REGISTRY, true)
354 GST_SUBSYSTEM_DISABLE(REGISTRY,[plugin registry])
355 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_ENUMTYPES, true)
356 GST_SUBSYSTEM_DISABLE(ENUMTYPES,[enum types])
357 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_INDEX, true)
358 GST_SUBSYSTEM_DISABLE(INDEX,[index])
359 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_PLUGIN, true)
360 GST_SUBSYSTEM_DISABLE(PLUGIN,[plugin])
361 translit(dnm, m, l) AM_CONDITIONAL(GST_DISABLE_URI, true)
362 GST_SUBSYSTEM_DISABLE(URI,[uri handlers])
364 dnl ################################################
365 dnl # Set defines according to variables set above #
366 dnl ################################################
369 dnl These should be "USE_*" instead of "HAVE_*", but some packages expect
370 dnl HAVE_ and it is likely to be easier to stick with the old name
371 if test "x$USE_LIBMMX" = xyes; then
372 AC_DEFINE(HAVE_LIBMMX, 1, [Define if libmmx is available])
375 if test "x$USE_ATOMIC_H" = xyes; then
376 AC_DEFINE(HAVE_ATOMIC_H, 1, [Define if atomic.h header file is available])
379 if test "x$USE_FAST_STACK_TRASH" = xyes; then
380 AC_DEFINE(USE_FAST_STACK_TRASH, 1, [Define if we should use i586 optimized stack functions])
383 dnl test if we have pthread_attr_setstack; if not use the older calls
384 AC_CHECK_LIB(pthread, pthread_attr_setstack,
385 AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACK, 1,
386 [Defined if libpthread has pthread_attr_setstack ()]))
388 dnl test if we have posix_memalign; FreeBSD doesn't
389 AC_CHECK_FUNC(posix_memalign,
390 AC_DEFINE(HAVE_POSIX_MEMALIGN, 1,
391 [Defined if we have posix_memalign ()]))
393 dnl test for sigaction()
394 AC_CHECK_FUNC(sigaction,
395 AC_DEFINE(HAVE_SIGACTION, 1,
396 [Defined if we have sigaction ()]))
398 dnl test if we have dladdr(); we use it for debugging
399 save_cflags="$CFLAGS"
400 CFLAGS="$CFLAGS -D_GNU_SOURCE"
401 AC_CHECK_LIB(dl, dladdr,
402 AC_DEFINE(HAVE_DLADDR, 1,
403 [Defined if we have dladdr ()]))
404 CFLAGS="$save_cflags"
406 if test "x$PLUGINS_USE_BUILDDIR" = xyes; then
407 AC_DEFINE(PLUGINS_USE_BUILDDIR, 1, [Define if plugins should be loaded from the build tree - only developers should use this])
410 if test "x$USE_DEBUG" = xyes; then
411 GST_INT_CFLAGS="$GST_INT_CFLAGS -g"
414 if test "x$USE_PROFILING" = xyes; then
415 dnl CFLAGS="$CFLAGS -pg -fprofile-arcs"
416 FOMIT_FRAME_POINTER=""
418 FOMIT_FRAME_POINTER="-fomit-frame-pointer"
422 dnl AC_SUBST(FOMIT_FRAME_POINTER)
425 dnl #############################
426 dnl # Set automake conditionals #
427 dnl #############################
429 dnl These should be "USE_*" instead of "HAVE_*", but some packages expect
430 dnl HAVE_ and it is likely to be easier to stick with the old name
431 AM_CONDITIONAL(HAVE_ATOMIC_H, test "x$USE_ATOMIC_H" = "xyes")
433 AM_CONDITIONAL(EXPERIMENTAL, test "$EXPERIMENTAL" = "$xyes")
434 AM_CONDITIONAL(BROKEN, test "$BROKEN" = "$xyes")
436 AM_CONDITIONAL(PLUGINS_USE_BUILDDIR, test "x$PLUGINS_USE_BUILDDIR" = "xyes")
439 dnl ############################
440 dnl # Set up some more defines #
441 dnl ############################
443 dnl Set location of registry dir.
444 AC_DEFINE_UNQUOTED(GST_CACHE_DIR, "$GST_CACHE_DIR", [Define the registry directory])
445 AC_SUBST(GST_CACHE_DIR)
447 dnl Set location of plugin directory
448 if test "x${prefix}" = "xNONE"; then
449 PLUGINS_DIR=${ac_default_prefix}/lib/gstreamer-$GST_MAJORMINOR
451 PLUGINS_DIR=${prefix}/lib/gstreamer-$GST_MAJORMINOR
453 AC_DEFINE_UNQUOTED(PLUGINS_DIR, "$PLUGINS_DIR", [Define the plugin directory])
454 AC_SUBST(PLUGINS_DIR)
456 dnl Set location of uninstalled plugin directory
457 PLUGINS_BUILDDIR=`pwd`
458 AC_DEFINE_UNQUOTED(PLUGINS_BUILDDIR, "$PLUGINS_BUILDDIR", [Define the uninstalled plugin directory])
459 AC_SUBST(PLUGINS_BUILDDIR)
461 dnl since glib and xml are package deps, there's no need to include their cflags
462 dnl in the pkg-config file
465 GST_PKG_CFLAGS=$GST_EXT_CFLAGS
466 GST_PKG_LIBS=$GST_EXT_LIBS
467 AC_SUBST(GST_PKG_CFLAGS)
468 AC_SUBST(GST_PKG_LIBS)
470 dnl finalize _CFLAGS and _LIBS
471 dnl add GLIB and XML if necessary to EXT_*
472 GST_CFLAGS="$GST_EXT_CFLAGS $XML_CFLAGS $GLIB_CFLAGS"
473 GST_LIBS="$GST_EXT_LIBS $XML_LIBS $GLIB_LIBS -lpopt"
475 dnl Private vars for libgst only
476 LIBGST_LIBS="$GST_LIBS"
477 LIBGST_CFLAGS="$GST_CFLAGS -I\$(top_srcdir) $GST_ERROR"
478 AC_SUBST(LIBGST_LIBS)
479 AC_SUBST(LIBGST_CFLAGS)
481 dnl Vars for everyone else
482 GST_INT_LIBS="\$(top_builddir)/gst/libgstreamer-$GST_MAJORMINOR.la"
483 GST_INT_CFLAGS="$GST_INT_CFLAGS -I\$(top_srcdir)/libs -I\$(top_srcdir)/include"
485 AC_SUBST(GST_CFLAGS, "$LIBGST_CFLAGS $GST_INT_CFLAGS")
486 AC_SUBST(GST_LIBS, "$LIBGST_LIBS $GST_INT_LIBS")
488 GST_PLUGIN_LDFLAGS="-module -avoid-version"
489 AC_SUBST(GST_PLUGIN_LDFLAGS, "$GST_PLUGIN_LDFLAGS")
492 dnl ##################################################
493 dnl # deps for examples from manual #
494 dnl ##################################################
496 PKG_CHECK_MODULES(LIBGNOMEUI, libgnomeui-2.0,
497 HAVE_LIBGNOMEUI="yes", HAVE_LIBGNOMEUI="no")
498 AC_SUBST(LIBGNOMEUI_CFLAGS)
499 AC_SUBST(LIBGNOMEUI_LIBS)
500 AM_CONDITIONAL(HAVE_LIBGNOMEUI, test "x$HAVE_LIBGNOMEUI" = "xyes")
502 dnl ##################################################
503 dnl # Prepare informative messages to display at end #
504 dnl ##################################################
508 if test "x$PLUGINS_USE_BUILDDIR" = xyes; then
509 infomessages="$infomessages
510 *** Warning: You have configured using the --enable-plugin-builddir option.
512 This option is for development purposes only: binaries built with
513 it should be used with code in the build tree only. To build an
514 installable version, use ./configure without the --enable-plugin-builddir
515 option. Note that the autogen.sh script supplies the plugin builddir
516 option automatically -- run ./autogen.sh -- --disable-plugin-builddir to make
517 an installable build.
522 dnl #########################
523 dnl # Make the output files #
524 dnl #########################
526 dnl libs/ext/Makefile
527 dnl nothing there yet !
534 gst/autoplug/Makefile
535 gst/indexers/Makefile
536 gst/elements/Makefile
538 gst/schedulers/Makefile
540 gst/registries/Makefile
543 libs/gst/bytestream/Makefile
544 libs/gst/getbits/Makefile
545 libs/gst/control/Makefile
548 tests/bufspeed/Makefile
549 tests/memchunk/Makefile
550 tests/muxing/Makefile
551 tests/seeking/Makefile
553 tests/threadstate/Makefile
555 testsuite/bytestream/Makefile
556 testsuite/caps/Makefile
557 testsuite/cleanup/Makefile
558 testsuite/clock/Makefile
559 testsuite/debug/Makefile
560 testsuite/dynparams/Makefile
561 testsuite/elements/Makefile
562 testsuite/indexers/Makefile
563 testsuite/parse/Makefile
564 testsuite/plugin/Makefile
565 testsuite/refcounting/Makefile
566 testsuite/threads/Makefile
568 examples/autoplug/Makefile
569 examples/cutter/Makefile
570 examples/helloworld/Makefile
571 examples/helloworld2/Makefile
572 examples/launch/Makefile
573 examples/manual/Makefile
574 examples/mixer/Makefile
575 examples/pingpong/Makefile
576 examples/plugins/Makefile
577 examples/queue/Makefile
578 examples/queue2/Makefile
579 examples/queue3/Makefile
580 examples/queue4/Makefile
581 examples/thread/Makefile
582 examples/typefind/Makefile
583 examples/xml/Makefile
591 docs/plugins/Makefile
592 docs/plugins/gstreamer-plugins.types
596 pkgconfig/gstreamer.pc
597 pkgconfig/gstreamer-uninstalled.pc
598 pkgconfig/gstreamer-control.pc
599 pkgconfig/gstreamer-control-uninstalled.pc
601 echo "$infomessages", infomessages="$infomessages"