# -- Check for XScreenSaver -----------------------------------------

# This is based on libkopete/configure.in.in and karm/configure.in.in

# backup old flags (are changed by the tests)
ac_LDFLAGS_save="$LDFLAGS"
ac_CPPFLAGS_save="$CPPFLAGS"
ac_LIBS_save="$LIBS" 
ac_APBUILD_STATIC_save="$APBUILD_STATIC"
ac_APBUILD_BOGUS_DEPS_save="$APBUILD_BOGUS_DEPS"

LIB_XSCREENSAVER=

# # run the test
# LIBS="-lXext -lX11 $X_LDFLAGS" 
# AC_CHECK_LIB(Xss, XScreenSaverAllocInfo,
# [
#   LIB_XSCREENSAVER="-lXext -lXss"
#   AC_DEFINE(HAVE_XSCREENSAVER, 1, [Define if you have the XScreenSaver installed])
# ],
# [
#   AC_WARN(XScreenSaver extension not found. Auto-away feature will not work)
# ])


# The syntax is: AC_TRY_COMPILE(header, [if true do], [if false do], [(code)])
#
# Check for the scrnsaver.h header
KDE_CHECK_HEADERS(X11/extensions/scrnsaver.h,
  [
    # Check if libXext has XScreenSaverQueryInfo()
    # Disable bogus dependencies for apg++ (autopackage)
    APBUILD_STATIC=""
    APBUILD_BOGUS_DEPS=""
    LIBS="$X_PRE_LIBS -lX11 $X_LDFLAGS $X_EXTRA_LIBS"
    AC_CHECK_LIB(Xext,XScreenSaverQueryInfo,
      [
        # Success, use "-lXext"
        AC_DEFINE(HAVE_XSCREENSAVER, 1, [Define if you have the XScreenSaver extension])
        LIB_XSCREENSAVER="-lXext"
      ],

      [
        # else:

        # Check if libXss has XScreenSaverQueryInfo()
        LIBS="-lXext -lX11 $X_LDFLAGS"
        AC_CHECK_LIB(Xss,XScreenSaverQueryInfo,
          [
            # Success, use "-lXss"
            AC_DEFINE(HAVE_XSCREENSAVER, 1, [Define if you have the XScreenSaver extension])
            LIB_XSCREENSAVER="-lXext -lXss"
          ],
          [
            # Library not found, disabling idle timer code.
            AC_WARN(XScreenSaver extension not found. Auto-away feature will not work)
          ]
        )
      ]
    )
  ],
  [
    # Header not found, disabling idle timer code.
    AC_WARN(XScreenSaver header not found. Auto-away feature will not work)
  ],
  [
    #include <X11/Xlib.h>
  ]
)

# restore old flags (changed by the tests)
CPPFLAGS="$ac_CPPFLAGS_save"
LDFLAGS="$ac_LDFLAGS_save"
LIBS="$ac_LIBS_save"
APBUILD_STATIC="$ac_APBUILD_STATIC_save"
APBUILD_BOGUS_DEPS="$ac_APBUILD_BOGUS_DEPS_save"

# Export the LIB_XSCREENSAVER to Makefile.am
AC_SUBST(LIB_XSCREENSAVER)



# -- Check for BinReloc -----------------------------------------

# Check for binary relocation support
# Hongli Lai
# http://autopackage.org/

# New configure arguments
AC_ARG_ENABLE(binreloc,
[  --enable-binreloc       compile with binary relocation support
                          (default=enable when available)],
enable_binreloc=$enableval,enable_binreloc=auto)

AC_ARG_ENABLE(binreloc-threads,
[  --enable-binreloc-threads   compile binary relocation with threads support
                              (default=yes)],
enable_binreloc_threads=$enableval,enable_binreloc_threads=yes)


# checking code
BINRELOC_CFLAGS=
BINRELOC_LIBS=

if test "x$enable_binreloc" = "xauto"; then
  AC_CHECK_FILE([/proc/self/maps])
  AC_CACHE_CHECK([whether everything is installed to the same prefix],
    [br_cv_valid_prefixes], [
     if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \
       "$datadir" = '${prefix}/share' -a "$libdir" = '${exec_prefix}/lib' -a \
       "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc'
     then
       br_cv_valid_prefixes=yes
     else
       br_cv_valid_prefixes=no
     fi
    ])
fi

AC_CACHE_CHECK([whether binary relocation support should be enabled],
  [br_cv_binreloc],
  [if test "x$enable_binreloc" = "xyes"; then
     br_cv_binreloc=yes
   elif test "x$enable_binreloc" = "xauto"; then
     if test "x$br_cv_valid_prefixes" = "xyes" -a \
       "x$ac_cv_file__proc_self_maps" = "xyes"; then
       br_cv_binreloc=yes
     else
       br_cv_binreloc=no
     fi
   else
     br_cv_binreloc=no
   fi
  ])

if test "x$br_cv_binreloc" = "xyes"; then
  # using both -DENABLE_BINRELOC and AC_DEFINE(ENABLE_BINRELOC) produces
  # a ENABLE_BINRELOC redefined warning. Disable one.
  BINRELOC_CFLAGS="-DENABLE_BINRELOC"
  ### AC_DEFINE(ENABLE_BINRELOC,,[Use binary relocation?])
  if test "x$enable_binreloc_threads" = "xyes"; then
    AC_CHECK_LIB([pthread], [pthread_getspecific])
  fi

  AC_CACHE_CHECK([whether binary relocation should use threads],
    [br_cv_binreloc_threads],
    [if test "x$enable_binreloc_threads" = "xyes"; then
       if test "x$ac_cv_lib_pthread_pthread_getspecific" = "xyes"; then
         br_cv_binreloc_threads=yes
       else
         br_cv_binreloc_threads=no
       fi
     else
       br_cv_binreloc_threads=no
     fi
    ])

  if test "x$br_cv_binreloc_threads" = "xyes"; then
    BINRELOC_LIBS="-lpthread"
    AC_DEFINE(BR_PTHREAD,1,[Include pthread support for binary relocation?])
  else
    BINRELOC_CFLAGS="$BINRELOC_CFLAGS -DBR_PTHREADS=0"
    AC_DEFINE(BR_PTHREAD,0,[Include pthread support for binary relocation?])
  fi
fi

AC_SUBST(BINRELOC_CFLAGS)
AC_SUBST(BINRELOC_LIBS)
