Branch: master

03a61295 2014-10-08 20:17:48 Slávek Banko
Fix FTBFS on missing magic_getpath
M CMakeLists.txt
M config.h.cmake
M tdeio/tdeio/CMakeLists.txt
M tdeio/tdeio/configure.in.in
M tdeio/tdeio/kmimemagic.cpp
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 11d3c4b..e028916 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -525,6 +525,26 @@
 endif( NOT HAVE_LIBDL )
 
 
+##### check for magic ###########################
+
+set( MAGIC_LIBRARIES magic )
+check_library_exists( ${MAGIC_LIBRARIES} magic_load "" HAVE_LIBMAGIC )
+if( HAVE_LIBMAGIC )
+  check_library_exists( ${MAGIC_LIBRARIES} magic_getpath "" HAVE_LIBMAGIC_GETPATH )
+  if( NOT HAVE_LIBMAGIC_GETPATH )
+    execute_process(
+      COMMAND file --version
+      OUTPUT_VARIABLE LIBMAGIC_VERSION
+      ERROR_VARIABLE LIBMAGIC_VERSION
+    )
+    string(REGEX REPLACE ".*magic file from ([^ \n]*).*" "\\1" LIBMAGIC_PATH ${LIBMAGIC_VERSION} )
+    message( STATUS "libmagick default path ${LIBMAGIC_PATH}" )
+  endif( NOT HAVE_LIBMAGIC_GETPATH )
+else( HAVE_LIBMAGIC )
+  tde_message_fatal( "libmagic is required, but not found on your system" )
+endif( HAVE_LIBMAGIC )
+
+
 ##### check for utempter ########################
 
 if( WITH_UTEMPTER )
diff --git a/config.h.cmake b/config.h.cmake
index b1e4eb3..145fa2c 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -914,6 +914,12 @@
 /* Defined if compiling with TDEIconLoader debugging */
 #cmakedefine TDEICONLOADER_DEBUG 1
 
+/* Defined if libmagic contain magic_getpath function */
+#cmakedefine HAVE_LIBMAGIC_GETPATH 1
+
+/* Define default path for libmagick files */
+#cmakedefine LIBMAGIC_PATH "@LIBMAGIC_PATH@"
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
diff --git a/tdeio/tdeio/CMakeLists.txt b/tdeio/tdeio/CMakeLists.txt
index 2b90c01..77d16f2 100644
--- a/tdeio/tdeio/CMakeLists.txt
+++ b/tdeio/tdeio/CMakeLists.txt
@@ -117,7 +117,7 @@
 
 tde_add_library( ${target} STATIC_PIC AUTOMOC
   SOURCES ${${target}_SRCS}
-  LINK magic ${GAMIN_LIBRARIES}
+  LINK ${MAGIC_LIBRARIES} ${GAMIN_LIBRARIES}
 )
 
 
diff --git a/tdeio/tdeio/configure.in.in b/tdeio/tdeio/configure.in.in
index 8683dfe..70d381b 100644
--- a/tdeio/tdeio/configure.in.in
+++ b/tdeio/tdeio/configure.in.in
@@ -165,3 +165,25 @@
     AC_MSG_RESULT(no)
   fi
 fi
+
+dnl ------------------------------------------------------------------------
+dnl Try to find if libmagic is installed and contains magic_getpath
+dnl ------------------------------------------------------------------------
+dnl
+AC_MSG_CHECKING([for libmagic])
+KDE_CHECK_LIB(magic, magic_load, kde_have_libmagic=yes, kde_have_libmagic=no)
+if test $kde_have_libmagic = yes; then
+  AC_MSG_RESULT(yes)
+  AC_MSG_CHECKING([for libmagic - magic_getpath])
+  KDE_CHECK_LIB(magic, magic_getpath, kde_have_libmagic_getpath=yes, kde_have_libmagic_getpath=no)
+  if test $kde_have_libmagic_getpath = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_LIBMAGIC_GETPATH, 1, [Defined if libmagic contain magic_getpath function])
+    AC_MSG_RESULT(yes)
+  else
+    libmagic_path=`file --version 2>&1 | sed -n "s/^magic file from //p"`
+    AC_DEFINE_UNQUOTED(LIBMAGIC_PATH, $libmagic_path, [Define default path for libmagic files])
+    AC_MSG_RESULT(no)
+  fi
+else
+  AC_MSG_RESULT(no)
+fi
diff --git a/tdeio/tdeio/kmimemagic.cpp b/tdeio/tdeio/kmimemagic.cpp
index 41c69dd..97496de 100644
--- a/tdeio/tdeio/kmimemagic.cpp
+++ b/tdeio/tdeio/kmimemagic.cpp
@@ -20,6 +20,7 @@
    Boston, MA 02110-1301, USA.
 */
 
+#include "config.h"
 #include "kmimemagic.h"
 #include <kdebug.h>
 #include <tdeapplication.h>
@@ -164,7 +165,11 @@
 int KMimeMagic::apprentice( const TQString& magicfile ) {
 	TQString maindatabase = magicfile;
 	if (maindatabase == "") {
+#ifdef HAVE_LIBMAGIC_GETPATH
 		maindatabase = magic_getpath(0, FILE_LOAD);
+#else
+		maindatabase = TQString(LIBMAGIC_PATH);
+#endif
 		if (maindatabase == "") {
 			kdWarning() << k_funcinfo << "Unable to locate system mime magic database; mime type detection will not function correctly!" << endl;
 		}