From 6fc01c2077f0ecbfdaa4dbfc4c4759f07161d009 Mon Sep 17 00:00:00 2001 From: aeb Date: Mon, 5 Feb 2001 02:38:03 +0000 Subject: [PATCH] Add libraw1394 autoconf macro (not yet complete). Add functions and symbols to let macro determine version. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@53 53a565d1-3bb7-0310-b661-cf11e63c67ab --- configure.in | 2 +- libraw1394.m4 | 153 ++++++++++++++++++++++++++++++++++++++++++++++++ src/Makefile.am | 1 + src/raw1394.h | 7 +++ src/version.c | 21 +++++++ 5 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 libraw1394.m4 create mode 100644 src/version.c diff --git a/configure.in b/configure.in index 0aadf1d..813ad2a 100644 --- a/configure.in +++ b/configure.in @@ -1,7 +1,7 @@ # process this file with autoconf to get a configure script AC_INIT(Makefile.am) -AM_INIT_AUTOMAKE(libraw1394, 0.9pre) +AM_INIT_AUTOMAKE(libraw1394, 0.8.99) AM_CONFIG_HEADER(config.h) AC_PROG_CC diff --git a/libraw1394.m4 b/libraw1394.m4 new file mode 100644 index 0000000..dbdefc0 --- /dev/null +++ b/libraw1394.m4 @@ -0,0 +1,153 @@ +dnl +dnl AC_LIB_RAW1394_FLAGS +dnl This just unconditionally sets the options. It should offer an option for +dnl explicitly giving the path to libraw1394 on the configure command line. +dnl +AC_DEFUN(AC_LIB_RAW1394_FLAGS, [ +LIBRAW1394_CPPFLAGS="" +LIBRAW1394_CFLAGS="" +LIBRAW1394_LIBS="-lraw1394" + +AC_SUBST(LIBRAW1394_CPPFLAGS) +AC_SUBST(LIBRAW1394_CFLAGS) +AC_SUBST(LIBRAW1394_LIBS) +]) + +dnl +dnl AC_LIB_RAW1394_HEADERS([ACTION_IF_FOUND[,ACTION_IF_NOT_FOUND]]) +dnl +AC_DEFUN(AC_LIB_RAW1394_HEADERS, [ +AC_REQUIRE(AC_LIB_RAW1394_FLAGS) + +ac_libraw1394_save_cppflags=$CPPFLAGS +CPPFLAGS="$LIBRAW1394_CPPFLAGS $CPPFLAGS" + +ac_libraw1394_headers=no +AC_CHECK_HEADER(libraw1394/raw1394.h, ac_libraw1394_headers=yes) + +CPPFLAGS=$ac_libraw1394_save_cppflags + +if test $ac_libraw1394_headers = yes ; then $1; else $2; fi +]) + + +dnl +dnl AC_LIB_RAW1394_LIBVERSION(MINIMUMVERSION[,ACTION_IF_FOUND[,ACTION_IF_NOT_FOUND]]) +dnl +AC_DEFUN(AC_LIB_RAW1394_LIBVERSION, [ +AC_REQUIRE(AC_LIB_RAW1394_HEADERS) + +ac_libraw1394_save_cppflags=$CPPFLAGS +ac_libraw1394_save_cflags=$CFLAGS +ac_libraw1394_save_libs=$LIBS +CPPFLAGS="$LIBRAW1394_CPPFLAGS $CPPFLAGS" +CFLAGS="$LIBRAW1394_CFLAGS $CFLAGS" +LIBS="$LIBRAW1394_LIBS $LIBS" + +ac_libraw1394_versiontest_success=no +ac_libraw1394_ver_symbol=`echo __libraw1394_version_$0 | sed 's/\./_/g'` + +AC_TRY_LINK([], [{ + extern char $ac_libraw1394_ver_symbol; + $ac_libraw1394_ver_symbol++; +}], ac_libraw1394_versiontest_success=yes) + +CPPFLAGS=$ac_libraw1394_save_cppflags +CFLAGS=$ac_libraw1394_save_cflags +LIBS=$ac_libraw1394_save_libs + +if test $ac_libraw1394_versiontest_success = yes; then $1; else $2; fi +]) + + +dnl +dnl AC_LIB_RAW1394_RUNTEST(MINIMUMVERSION[,ACTION_IF_FOUND +dnl [,ACTION_IF_NOT_FOUND[,ACTION_IF_CROSS_COMPILING]]]) +AC_DEFUN(AC_LIB_RAW1394_RUNTEST, [ +AC_REQUIRE(AC_LIB_RAW1394_HEADERS) + +ac_libraw1394_save_cppflags=$CPPFLAGS +ac_libraw1394_save_cflags=$CFLAGS +ac_libraw1394_save_libs=$LIBS +CPPFLAGS="$LIBRAW1394_CPPFLAGS $CPPFLAGS" +CFLAGS="$LIBRAW1394_CFLAGS $CFLAGS" +LIBS="$LIBRAW1394_LIBS $LIBS" + + +dnl This program compares two version strings and returns with code 0 if +dnl req_ver <= lib_ver, returns 1 otherwise. +dnl +dnl "1.23" < "1.23.1" (missing fields assumed zero) +dnl "1.23pre" <> "1.23" (undefined, do not use text as version) +dnl "1.21" > "1.3" (no implicit delimiters) +AC_TRY_RUN([ +#include +#include + +int main() +{ + char *req_ver, *lib_ver; + unsigned int req_i, lib_i; + + req_ver = "$1"; + lib_ver = raw1394_get_libversion(); + + while (1) { + req_i = strtoul(req_ver, &req_ver, 10); + lib_i = strtoul(lib_ver, &lib_ver, 10); + + if (req_i > lib_i) exit(1); + if (req_i < lib_i) exit(0); + + if (*req_ver != '.' || *lib_ver != '.') exit(0); + + req_ver++; + lib_ver++; + } +} +], ac_libraw1394_run=yes, ac_libraw1394_run=no, ac_libraw1394_run=cross) + + +CPPFLAGS=$ac_libraw1394_save_cppflags +CFLAGS=$ac_libraw1394_save_cflags +LIBS=$ac_libraw1394_save_libs + +if test $ac_libraw1394_run = yes; then + $2 +elif test $ac_libraw1394_run = no; then + $3 +else + ifelse([$4], , + AC_MSG_ERROR([$0 called without directions for cross compiling]), + [$4]) +fi +]) + +dnl +dnl AC_LIB_RAW1394(MINIMUMVERSION[,ACTION_IF_FOUND[,ACTION_IF_NOT_FOUND]]) +dnl +dnl Versions before 0.9 can't be checked, so this will always fail if the +dnl installed libraw1394 is older than 0.9 as if the library weren't found. +dnl +AC_DEFUN(AC_LIB_RAW1394, [ + +AC_LIB_RAW1394_FLAGS +AC_LIB_RAW1394_HEADERS(ac_libraw1394_found=yes, ac_libraw1394_found=no + +if test $ac_libraw1394_found = yes ; then + +AC_MSG_CHECKING(for libraw1394 version >= [$1]) +AC_LIB_RAW1394_RUNTEST([$1], , ac_libraw1394_found=no, + AC_LIB_RAW1394_LIBVERSION([$1], , ac_libraw1394_found=no)) + +if test $ac_libraw1394_found = yes ; then + AC_MSG_RESULT(yes) + $2 +else + AC_MSG_RESULT(no) + $3 +fi + +fi + +]) diff --git a/src/Makefile.am b/src/Makefile.am index 531e0ee..6f16238 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -12,6 +12,7 @@ libraw1394_la_SOURCES = \ readwrite.c \ iso.c \ fcp.c \ + version.c \ kernel-raw1394.h \ raw1394_private.h diff --git a/src/raw1394.h b/src/raw1394.h index 33f3f08..4661cb1 100644 --- a/src/raw1394.h +++ b/src/raw1394.h @@ -193,6 +193,13 @@ int raw1394_stop_iso_rcv(raw1394handle_t handle, unsigned int channel); int raw1394_start_fcp_listen(raw1394handle_t handle); int raw1394_stop_fcp_listen(raw1394handle_t handle); + +/* + * Returns the version string. Designed to be used by the autoconf macro to + * detect the libraw version, not really intended for general use. + */ +const char *raw1394_get_libversion(void); + #ifdef __cplusplus } #endif diff --git a/src/version.c b/src/version.c new file mode 100644 index 0000000..2fb41b5 --- /dev/null +++ b/src/version.c @@ -0,0 +1,21 @@ +/* + * libraw1394 - library for raw access to the 1394 bus with the Linux subsystem. + * + * Copyright (C) 1999,2000,2001 Andreas Bombe + * + * This library is licensed under the GNU Lesser General Public License (LGPL), + * version 2.1 or later. See the file COPYING.LIB in the distribution for + * details. + */ + +#include + +/* Variables to find version by linking (avoid need for test program) */ + +char __libraw1394_version_0_8_99; + +/* This function is to be used by the autoconf macro to find the lib version */ +const char *raw1394_get_libversion() +{ + return VERSION; +}