Blob Blame History Raw
dnl **************************************************************************
dnl Define version info
dnl **************************************************************************

m4_define([m_major_version], [3])
m4_define([m_minor_version], [28])
m4_define([m_micro_version], [0])
m4_define([m_version], [m_major_version.m_minor_version.m_micro_version])

dnl **************************************************************************
dnl Define bugzilla address
dnl **************************************************************************

m4_define([m_bugzilla_url],
          [https://bugzilla.gnome.org/enter_bug.cgi?product=metacity])

dnl **************************************************************************
dnl Initialize autoconf
dnl **************************************************************************

AC_INIT([metacity], [m_version], [m_bugzilla_url])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/core/display.c])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([build-aux])

dnl **************************************************************************
dnl Set release policy
dnl **************************************************************************

AX_IS_RELEASE([git-directory])

dnl **************************************************************************
dnl Enable debug
dnl **************************************************************************

AX_CHECK_ENABLE_DEBUG([yes])

dnl **************************************************************************
dnl Add warning flags
dnl **************************************************************************

AX_COMPILER_FLAGS([WARN_CFLAGS], [WARN_LDFLAGS])

dnl **************************************************************************
dnl Initialize automake
dnl **************************************************************************

AM_INIT_AUTOMAKE([1.14 no-dist-gzip dist-xz tar-ustar -Wno-portability subdir-objects])
AM_MAINTAINER_MODE([enable])
AM_SILENT_RULES([yes])

dnl **************************************************************************
dnl Initialize libtool
dnl **************************************************************************

LT_INIT
LT_LIB_M

dnl **************************************************************************
dnl Check for required programs
dnl **************************************************************************

AC_PATH_PROG([GLIB_MKENUMS], [glib-mkenums])
AC_PATH_PROG([GLIB_COMPILE_RESOURCES], [glib-compile-resources])

dnl **************************************************************************
dnl Internationalization
dnl **************************************************************************

AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.19.4])

GETTEXT_PACKAGE=metacity
AC_SUBST([GETTEXT_PACKAGE])
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"],
                   [Name of default gettext domain])

dnl **************************************************************************
dnl Metacity version
dnl **************************************************************************

AC_DEFINE([METACITY_MAJOR_VERSION], [m_major_version], [Metacity major version])
AC_DEFINE([METACITY_MINOR_VERSION], [m_minor_version], [Metacity minor version])
AC_DEFINE([METACITY_MICRO_VERSION], [m_micro_version], [Metacity micro version])

dnl **************************************************************************
dnl Check for required packages
dnl **************************************************************************

GLIB_REQUIRED_VERSION=2.44.0
GTK_REQUIRED_VERSION=3.22.0
PANGO_REQUIRED_VERSION=1.2.0
XCOMPOSITE_REQUIRED_VERSION=0.3

PKG_CHECK_MODULES([LIBMETACITY], [
  glib-2.0 >= $GLIB_REQUIRED_VERSION
  gtk+-3.0 >= $GTK_REQUIRED_VERSION
])

PKG_CHECK_MODULES([METACITY_THEME_VIEWER], [
  glib-2.0 >= $GLIB_REQUIRED_VERSION
  gtk+-3.0 >= $GTK_REQUIRED_VERSION
])

dnl **************************************************************************
dnl Get GTK+ data prefix, needed by libmetacity
dnl **************************************************************************

GTK_DATA_PREFIX=`$PKG_CONFIG --variable=prefix gtk+-3.0`
AC_DEFINE_UNQUOTED([GTK_DATA_PREFIX], ["$GTK_DATA_PREFIX"], [GTK+ data prefix])

dnl **************************************************************************
dnl Library version information
dnl **************************************************************************

m4_define([lt_current], [2])
m4_define([lt_revision], [0])
m4_define([lt_age], [1])
m4_define([lt_version_info], [lt_current:lt_revision:lt_age])

AC_SUBST([LT_VERSION_INFO], [lt_version_info])

dnl **************************************************************************

# Honor aclocal flags
AC_SUBST(ACLOCAL_AMFLAGS, "\${ACLOCAL_FLAGS}")

AC_PROG_CC
AC_ISC_POSIX
AC_HEADER_STDC

#### Integer sizes 

AC_CHECK_SIZEOF(char)
AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(long long)
AC_CHECK_SIZEOF(__int64)

## byte order
AC_C_BIGENDIAN

METACITY_PC_MODULES="gtk+-3.0 >= $GTK_REQUIRED_VERSION gio-2.0 >= $GLIB_REQUIRED_VERSION pango >= $PANGO_REQUIRED_VERSION gsettings-desktop-schemas >= 3.3.0 xcomposite >= $XCOMPOSITE_REQUIRED_VERSION xfixes xrender xdamage"

GLIB_GSETTINGS

AC_ARG_ENABLE(canberra,
  AC_HELP_STRING([--disable-canberra],
                 [disable use of canberra for event sounds, for embedded non-GNOME builds]),,
  enable_canberra=yes)

if test x$enable_canberra = xyes; then
    AC_DEFINE(HAVE_CANBERRA,1,[Build with canberra support])
    METACITY_PC_MODULES="$METACITY_PC_MODULES libcanberra-gtk3"
fi

AC_ARG_ENABLE(sm,
  AC_HELP_STRING([--disable-sm],
                 [disable metacity's session management support, for embedded/size-sensitive custom non-GNOME builds]),,
  enable_sm=auto)

AC_ARG_ENABLE(startup-notification,
  AC_HELP_STRING([--disable-startup-notification],
                 [disable metacity's startup notification support, for embedded/size-sensitive custom non-GNOME builds]),,
  enable_startup_notification=auto)

AC_ARG_ENABLE(render,
  AC_HELP_STRING([--disable-render],
                 [disable metacity's use of the RENDER extension]),,
  enable_render=auto)

## here we get the flags we'll actually use
PKG_CHECK_MODULES(ALL, glib-2.0 >= $GLIB_REQUIRED_VERSION gthread-2.0 >= $GLIB_REQUIRED_VERSION)
PKG_CHECK_MODULES(METACITY_MESSAGE, gtk+-3.0 >= $GTK_REQUIRED_VERSION)
PKG_CHECK_MODULES(METACITY_WINDOW_DEMO, gtk+-3.0 >= $GTK_REQUIRED_VERSION)

if $PKG_CONFIG --atleast-version 1.2.0 pangoxft; then
   echo "pangoxft found"
else
   AC_MSG_ERROR("Pango 1.2.0 or greater based on Xft2 is required")
fi

# Unconditionally use this dir to avoid a circular dep with gnomecc
GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings"
AC_SUBST(GNOME_KEYBINDINGS_KEYSDIR)

STARTUP_NOTIFICATION_VERSION=0.7
AC_MSG_CHECKING([Startup notification library >= $STARTUP_NOTIFICATION_VERSION])
if $PKG_CONFIG --atleast-version $STARTUP_NOTIFICATION_VERSION libstartup-notification-1.0; then
   have_startup_notification=yes
else
   have_startup_notification=no
fi
AC_MSG_RESULT($have_startup_notification)

if test x$enable_startup_notification = xyes; then
   have_startup_notification=yes
   echo "startup-notification support forced on"
elif test x$enable_startup_notification = xauto; then
   true
else
   have_startup_notification=no
fi

if test x$have_startup_notification = xyes; then
  echo "Building with libstartup-notification"
  METACITY_PC_MODULES="$METACITY_PC_MODULES libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_VERSION"
  AC_DEFINE(HAVE_STARTUP_NOTIFICATION, , [Building with startup notification support])
else
  echo "Building without libstartup-notification"
fi

AC_MSG_CHECKING([Xcursor])
if $PKG_CONFIG xcursor; then
     have_xcursor=yes
  else
     have_xcursor=no
  fi
  AC_MSG_RESULT($have_xcursor)

if test x$have_xcursor = xyes; then
  echo "Building with Xcursor"
  METACITY_PC_MODULES="$METACITY_PC_MODULES xcursor"
  AC_DEFINE(HAVE_XCURSOR, , [Building with Xcursor support]) 
fi

AC_MSG_CHECKING([libgtop])
if $PKG_CONFIG libgtop-2.0; then
     have_gtop=yes
  else
     have_gtop=no
  fi
  AC_MSG_RESULT($have_gtop)

if test x$have_gtop = xyes; then
  echo "Building with libgtop"
  METACITY_PC_MODULES="$METACITY_PC_MODULES libgtop-2.0"
  AC_DEFINE(HAVE_GTOP, , [Building with libgtop]) 
fi

PKG_CHECK_MODULES(METACITY, $METACITY_PC_MODULES)

AC_PATH_XTRA

ALL_X_LIBS="-lX11 $X_EXTRA_LIBS"

# Check for Xinerama extension (Solaris impl or Xfree impl)
metacity_save_cppflags="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $X_CFLAGS"

AC_ARG_ENABLE(xinerama,
  AC_HELP_STRING([--disable-xinerama],
                 [disable metacity's use of the Xinerama extension]),
  try_xinerama=$enable_xinerama,try_xinerama=yes)

use_solaris_xinerama=no
use_xfree_xinerama=no
if test "${try_xinerama}" != no; then
    case "$host" in
        *-*-solaris*)
            # Check for solaris
            use_solaris_xinerama=yes
            AC_CHECK_LIB(Xext, XineramaGetInfo,
                         use_solaris_xinerama=yes, use_solaris_xinerama=no,
                         $ALL_X_LIBS)
            if test "x$use_solaris_xinerama" = "xyes"; then
                AC_CHECK_HEADER(X11/extensions/xinerama.h,
                                if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then
                                    X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS"
                                fi
                                AC_DEFINE(HAVE_SOLARIS_XINERAMA, , [Have Solaris-style Xinerama])
                                AC_DEFINE(HAVE_XINERAMA, , [Have some version of Xinerama]),
                                use_solaris_xinerama=no,
                                [#include <X11/Xlib.h>])
            fi	
            AC_MSG_CHECKING(for Xinerama support on Solaris)
            AC_MSG_RESULT($use_solaris_xinerama);
            ;;
        *)
            # Check for XFree
            use_xfree_xinerama=yes
            AC_CHECK_LIB(Xinerama, XineramaQueryExtension,
                [AC_CHECK_HEADER(X11/extensions/Xinerama.h,
                                 X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS"   
                                 if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then
                                     X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS"
                                 fi
                                 AC_DEFINE(HAVE_XFREE_XINERAMA, , [Have XFree86-style Xinerama])
                                 AC_DEFINE(HAVE_XINERAMA,, [Have some version of Xinerama]), 
                                 use_xfree_xinerama=no,
                                 [#include <X11/Xlib.h>])],
                use_xfree_xinerama=no, -lXext $ALL_X_LIBS)
            AC_MSG_CHECKING(for Xinerama support on XFree86)
            AC_MSG_RESULT($use_xfree_xinerama);
            ;;
    esac
fi

CPPFLAGS="$metacity_save_cppflags"

found_xkb=no
AC_CHECK_LIB(X11, XkbQueryExtension,
               [AC_CHECK_HEADER(X11/XKBlib.h,
                                found_xkb=yes)],
	, $ALL_X_LIBS)

if test "x$found_xkb" = "xyes"; then
   AC_DEFINE(HAVE_XKB, , [Have keyboard extension library])
fi


RANDR_LIBS=
found_randr=no
AC_CHECK_LIB(Xrandr, XRRUpdateConfiguration,
               [AC_CHECK_HEADER(X11/extensions/Xrandr.h,
                                RANDR_LIBS=-lXrandr found_randr=yes,,
				[#include <X11/Xlib.h>])],
               , -lXrender -lXext $ALL_X_LIBS)

if test "x$found_randr" = "xyes"; then
   AC_DEFINE(HAVE_RANDR, , [Have the Xrandr extension library])
fi

METACITY_LIBS="$ALL_LIBS $METACITY_LIBS $RANDR_LIBS -lX11 -lXext $X_EXTRA_LIBS $LIBM"
METACITY_MESSAGE_LIBS="$METACITY_MESSAGE_LIBS -lX11 $X_EXTRA_LIBS"
METACITY_WINDOW_DEMO_LIBS="$METACITY_WINDOW_DEMO_LIBS -lX11 $X_EXTRA_LIBS $LIBM"
METACITY_PROPS_LIBS="$METACITY_PROPS_LIBS -lX11 $X_EXTRA_LIBS"

found_sm=no
case "$METACITY_LIBS" in
 *-lSM*)
    found_sm=yes
    ;;
 *)
  AC_CHECK_LIB(SM, SmcSaveYourselfDone, 
               [AC_CHECK_HEADERS(X11/SM/SMlib.h,
                                METACITY_LIBS="-lSM -lICE $METACITY_LIBS" found_sm=yes)],
               , $METACITY_LIBS)
    ;;
esac

if test x$enable_sm = xno; then
   found_sm=no
fi

if test x$enable_sm = xyes; then
   if test "$found_sm" = "no"; then
      AC_MSG_ERROR([--enable-sm forced and -lSM not found])
      exit 1
   fi
fi

if test "$found_sm" = "yes"; then
   AC_DEFINE(HAVE_SM, , [Building with SM support])
fi

AM_CONDITIONAL(HAVE_SM, test "$found_sm" = "yes") 

AC_PATH_PROG(ZENITY, zenity, no)
if test x"$ZENITY" = xno; then
  AC_MSG_ERROR([zenity not found in your path - needed for dialogs])
fi

dnl **************************************************************************
dnl Check for Vulkan support
dnl **************************************************************************

AC_ARG_ENABLE([vulkan],
              [AS_HELP_STRING([--enable-vulkan], [enable Vulkan support])],
              [enable_vulkan="$enableval"], [enable_vulkan="auto"])

AS_IF([test "x$enable_vulkan" != "xno"], [
  AC_CHECK_LIB([vulkan], [vkCreateInstance], [
    AC_CHECK_HEADER([vulkan/vulkan.h], [found_vulkan=yes], [found_vulkan=no])
  ], [found_vulkan=no])

  AS_IF([test "x$found_vulkan" = "xyes"], [
    AC_DEFINE([HAVE_VULKAN], 1, [Build with Vulkan support])
    METACITY_LIBS="$METACITY_LIBS -lvulkan"
  ], [
    AS_IF([test "x$enable_vulkan" = "xyes"], [
      AC_MSG_ERROR([Vulkan enabled but not found])
    ])
  ])
], [found_vulkan=no])

dnl **************************************************************************
dnl Process .in files
dnl **************************************************************************

AC_CONFIG_FILES([
  Makefile

  data/Makefile
  data/applications/Makefile
  data/keybindings/Makefile
  data/pkgconfig/Makefile
  data/pkgconfig/libmetacity.pc
  data/schemas/Makefile
  data/ui/Makefile

  doc/Makefile
  doc/man/Makefile

  libmetacity/Makefile

  src/Makefile
  src/tools/Makefile

  theme-viewer/Makefile

  po/Makefile.in
])

AC_OUTPUT

dnl **************************************************************************
dnl Show summary
dnl **************************************************************************

echo ""
echo "  Metacity $VERSION"
echo "  `echo Metacity $VERSION | sed "s/./=/g"`"
echo ""
echo "  srcdir ......................: ${srcdir}"
echo ""
echo "  compiler ....................: ${CC}"
echo "  cflags ......................: ${CFLAGS}"
echo ""
echo "  prefix ......................: ${prefix}"
echo "  exec_prefix .................: ${exec_prefix}"
echo "  libdir ......................: ${libdir}"
echo "  sysconfdir ..................: ${sysconfdir}"
echo "  libexecdir ..................: ${libexecdir}"
echo ""
echo "  Canberra ....................: ${enable_canberra}"
echo "  XFree86 Xinerama ............: ${use_xfree_xinerama}"
echo "  Solaris Xinerama ............: ${use_solaris_xinerama}"
echo "  Startup notification ........: ${have_startup_notification}"
echo "  Session management ..........: ${found_sm}"
echo "  Resize-and-rotate ...........: ${found_randr}"
echo "  Xcursor .....................: ${have_xcursor}"
echo "  Vulkan ......................: ${found_vulkan}"
echo ""