aloha olaf
i've embedded some more text way down towards the bottom
regarding the AS_CASE(x$host_os,...) call and my solution
history as related to/with solaris 10 sparc and its libusb.
ras
Olaf Meeuwissen wrote:
Hi,
r. a. schmied writes:
Olaf Meeuwissen wrote:
Hi!
TL;DR I am going to merge this shortly after 2019-06-12 10:00 UTC unless
someone raises objection here or in the [merge request][0].
[...]
aloha olaf and interested saners
i've got one of those out-of-band systems (sun solaris 10 sparc update 8).
this is a very brief list of my handling of issues with configure as
shipped and possibly with configure.ac after this change takes place.
nothing that cannot be overcome.
FTR, configure.ac has not changed.
when i run configure i have to set loads of envvars to set things right
but something i've been unable to fix with the current autotools system,
well two things:
1) to get a clean compile of umax_pp.c i had to add -D_XPG6 for gcc 4.9.0
and my system to compile.
i'm still unsure why any of the umax stuff is being compiled as that
backend is not a listed backend unless it is needed for test or net.
This is a separate issue and unrelated dropping generated files. I've
submitted #93 to make support for parallel I/O an option. That should
properly address your trouble as well.
https://gitlab.com/sane-project/backends/issues/93
IIRC, the problem is caused by tools/umax_pp.c ...
2) my os has libusb at /usr/sfw/lib and provides /usr/sfw/bin/libusb-config
to get the libs and cflags much like pkg-config does. i've been
struggling to get a workable set of autotool macros to work around
this problem. i think i have a partial solution but it re-instates the
current override to always use pkg-config for 2 specifically listed
systems. i can provide these autotool changes if you are interested.
(ax_path_generic.m4 and ax_compare_version.m4 added to m4, 25 lines
or so added to configure.am. also i've not yet been able to get test
compiles or test links to work for this hack -- i'm expecting the book
'autotools: A Practioner's Guide' to be delivered in the coming week.)
You should be able to add an extra case to the AS_CASE(x$host_os,...)
call. It already special cases beos* and os2*. You can just add your
own using a suitable shell glob for the value of your $host_os.
By all means share your "hack".
first off the AS_CASE(x$host_os,...) in configure.ac is
intentionally disabled because of the leading 'x' char;
as x$host_os is never going to match any $host_os variable.
at least that was what i found when i created a case for solaris*.
what this 'disabling' does do is always forces the *) choice
which employs pkg-config to get the data for libusb.
so without the pkg-config pc file for libusb configure failed
UNLESS i pre-set USB_CFLAGS and USB_LIBS on configure environment.
then, because configure then found usb.h it went ahead and
set #define HAVE_LIBUSB 1
i saw/see no way to force configure to define HAVE_LIBUSB_LEGACY
instead, short of re-working configure.ac as i have done.
the only thing i really needed to change after running the standard
configure with my manual settings for USB_CFLAGS and USB_LIBS was
./include/sane/config.h:
comment out: /* #define HAVE_LIBUSB 1 */
insert: #define HAVE_LIBUSB_LEGACY 1
./include/sane/config.h is a generated file. Your hack is probably not
doing the right thing and I guess it may have something to do with your
libusb-config utility setting HAVE_LIBUSB. Your configure.ac changes
need to transfer it value to HAVE_LIBUSB_LEGACY (if it's 0.1) and clear
the value of HAVE_LIBUSB.
yes -- understood -- i'm just explaining that with a shell script
of fewer than 15 lines (most comments) run after configure,
specifically to adjust ./include/sane/config.h as described
solved my particular problem.
this i did way back in may 2018 when i first built with sane-backends-1.0.27.
but now seeing you saners are going to make a relatively large
delta to configure and friends i figured i try to solve this
solaris usblib problem 'the autotools way'.
it took me, a total novice with autotools, 25 lines added to configure.ac
plus including ax_path_generic.m4 and ax_compare_version.m4 to the
m4 dir to do it. all that and the changes to configure.ac still don't
run compile/link trial tests like the pkg-config version does.
other things about autotools i've learned about the hard way:
for example the current configure setup uses envvars
USB_CFLAGS and USB_LIBS, but the ax_path_generic.m4 and
ax_compare_version.m4 use/create envvars LIBUSB_CFLAGS and
LIBUSB_LIBS. that might be because i'm still a nooby with
autotools, but it still is a wrinkle that really should be
ironed out. i'm sure there are others ....
i'm gonna attach my diffs to configure.ac base on the git
reference version e13b80fa. in addition, just to be sure they
are the same ones i've used, the two m4 files to be added to the
m4 dir (ax_path_generic.m4, ax_compare_version.m4).
this configure.ac change does indeed generate the correct
./include/sane/config.h for sol10u8 sparc with the old old
usblib, but it is still somewhat deficient as described.
consider it a starting point for an autotools journeyman.
attached: configure.ac.patch
m4/ax_compare_version.m4
m4/ax_path_generic.m4
for historical reference here is the original script that
'fixes' ./include/sane/config.h. it is used immediately
after configure is run with envvars USB_CFLAGS and USB_LIBS
appropriately set, but before any gnu makes are run.
this is not the autotools way; it is a cheap and dirty
hack that is only suited to die-hard solaris using grey-beards.
#!/bin/bash
GSED=$( command -v gsed )
configh=$( find . -name config.h -print )
# echo "found configh == \"$configh\""
#
# if #define HAVE_LIBUSB 1 is present comment it out
# append after #undef HAVE_LIBUSB_LEGACY
# #define HAVE_LIBUSB_LEGACY 1
#
$GSED -i \
-e "s@^#define HAVE_LIBUSB 1@/* & */@" \
-e "\@^.*#undef HAVE_LIBUSB_LEGACY.*@ {
a\
#define HAVE_LIBUSB_LEGACY 1
}" \
$configh
this was trivially done following configure with an edit-in-place
sed command (15 lines as bash script).
Hope this helps,
--
Olaf Meeuwissen, LPIC-2 FSF Associate Member since 2004-01-27
GnuPG key: F84A2DD9/B3C0 2F47 EA19 64F4 9F13 F43E B8A4 A88A F84A 2DD9
Support Free Software https://my.fsf.org/donate
Join the Free Software Foundation https://my.fsf.org/join
--- configure.ac 2019/05/21 15:45:11 1.1
+++ configure.ac 2019/05/29 21:39:16
@@ -380,7 +380,32 @@
[with_usb=check])
AS_IF([test xno != "x$with_usb"],
[have_usb=no
- AS_CASE(x$host_os, dnl odd-ball operating systems first
+ AS_CASE( $host_os, dnl odd-ball operating systems first
+ # solaris* host_os -- a leading odd-ball operating system
+ [solaris*],
+ [AX_PATH_GENERIC(libusb,
+ 0.1.7,,
+ [
+ usb_rpath=
+ USB_LIBS="${LIBUSB_LIBS}";
+ USB_CFLAGS="${LIBUSB_CFLAGS}";
+ have_usb="yes";
+ AC_DEFINE([HAVE_LIBUSB_LEGACY], [1],
+ [Define to 1 if you have libusb-0.1])
+ AC_CHECK_HEADER(/usr/sfw/include/usb.h,
+ [ # we have /usr/sfw/include/usb.h
+ ac_cv_header_usb_h="${ac_cv_header__usr_sfw_include_usb_h}"
+ have_usb="yes"],
+ [ # aint got /usr/sfw/include/usb.h
+ have_usb="no"],
+ )
+ AC_CHECK_LIB(usb, usb_interrupt_read,
+ [have_usb="yes"],
+ [have_usb="no"],)
+ ],,
+ libusb-config,,
+ )
+ ], # end case solaris* host_os
[beos*],
[AC_CHECK_HEADER(be/drivers/USB_scanner.h, [have_usb=yes])],
[os2*],
# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_compare_version.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE],
[ACTION-IF-FALSE])
#
# DESCRIPTION
#
# This macro compares two version strings. Due to the various number of
# minor-version numbers that can exist, and the fact that string
# comparisons are not compatible with numeric comparisons, this is not
# necessarily trivial to do in a autoconf script. This macro makes doing
# these comparisons easy.
#
# The six basic comparisons are available, as well as checking equality
# limited to a certain number of minor-version levels.
#
# The operator OP determines what type of comparison to do, and can be one
# of:
#
# eq - equal (test A == B)
# ne - not equal (test A != B)
# le - less than or equal (test A <= B)
# ge - greater than or equal (test A >= B)
# lt - less than (test A < B)
# gt - greater than (test A > B)
#
# Additionally, the eq and ne operator can have a number after it to limit
# the test to that number of minor versions.
#
# eq0 - equal up to the length of the shorter version
# ne0 - not equal up to the length of the shorter version
# eqN - equal up to N sub-version levels
# neN - not equal up to N sub-version levels
#
# When the condition is true, shell commands ACTION-IF-TRUE are run,
# otherwise shell commands ACTION-IF-FALSE are run. The environment
# variable 'ax_compare_version' is always set to either 'true' or 'false'
# as well.
#
# Examples:
#
# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8])
# AX_COMPARE_VERSION([3.15],[lt],[3.15.8])
#
# would both be true.
#
# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8])
# AX_COMPARE_VERSION([3.15],[gt],[3.15.8])
#
# would both be false.
#
# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8])
#
# would be true because it is only comparing two minor versions.
#
# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15])
#
# would be true because it is only comparing the lesser number of minor
# versions of the two values.
#
# Note: The characters that separate the version numbers do not matter. An
# empty string is the same as version 0. OP is evaluated by autoconf, not
# configure, so must be a string, not a variable.
#
# The author would like to acknowledge Guido Draheim whose advice about
# the m4_case and m4_ifvaln functions make this macro only include the
# portions necessary to perform the specific comparison specified by the
# OP argument in the final configure script.
#
# LICENSE
#
# Copyright (c) 2008 Tim Toolan <[email protected]>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 13
dnl #########################################################################
AC_DEFUN([AX_COMPARE_VERSION], [
AC_REQUIRE([AC_PROG_AWK])
# Used to indicate true or false condition
ax_compare_version=false
# Convert the two version strings to be compared into a format that
# allows a simple string comparison. The end result is that a version
# string of the form 1.12.5-r617 will be converted to the form
# 0001001200050617. In other words, each number is zero padded to four
# digits, and non digits are removed.
AS_VAR_PUSHDEF([A],[ax_compare_version_A])
A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
-e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
-e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-e 's/[[^0-9]]//g'`
AS_VAR_PUSHDEF([B],[ax_compare_version_B])
B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
-e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
-e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-e 's/[[^0-9]]//g'`
dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary
dnl # then the first line is used to determine if the condition is true.
dnl # The sed right after the echo is to remove any indented white space.
m4_case(m4_tolower($2),
[lt],[
ax_compare_version=`echo "x$A
x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"`
],
[gt],[
ax_compare_version=`echo "x$A
x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"`
],
[le],[
ax_compare_version=`echo "x$A
x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"`
],
[ge],[
ax_compare_version=`echo "x$A
x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"`
],[
dnl Split the operator from the subversion count if present.
m4_bmatch(m4_substr($2,2),
[0],[
# A count of zero means use the length of the shorter version.
# Determine the number of characters in A and B.
ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'`
ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'`
# Set A to no more than B's length and B to no more than A's length.
A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"`
B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"`
],
[[0-9]+],[
# A count greater than zero means use only that many subversions
A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
],
[.+],[
AC_WARNING(
[invalid OP numeric parameter: $2])
],[])
# Pad zeros at end of numbers to make same length.
ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`"
B="$B`echo $A | sed 's/./0/g'`"
A="$ax_compare_version_tmp_A"
# Check for equality or inequality as necessary.
m4_case(m4_tolower(m4_substr($2,0,2)),
[eq],[
test "x$A" = "x$B" && ax_compare_version=true
],
[ne],[
test "x$A" != "x$B" && ax_compare_version=true
],[
AC_WARNING([invalid OP parameter: $2])
])
])
AS_VAR_POPDEF([A])dnl
AS_VAR_POPDEF([B])dnl
dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE.
if test "$ax_compare_version" = "true" ; then
m4_ifvaln([$4],[$4],[:])dnl
m4_ifvaln([$5],[else $5])dnl
fi
]) dnl AX_COMPARE_VERSION
# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_path_generic.html
# ===========================================================================
#
# SYNOPSIS
#
#
AX_PATH_GENERIC(LIBRARY,[MINIMUM-VERSION,[SED-EXPR-EXTRACTOR]],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND],[CONFIG-SCRIPTS],[CFLAGS-ARG],[LIBS-ARG])
#
# DESCRIPTION
#
# Runs the LIBRARY-config script and defines LIBRARY_CFLAGS and
# LIBRARY_LIBS unless the user had predefined them in the environment.
#
# The script must support `--cflags' and `--libs' args. If MINIMUM-VERSION
# is specified, the script must also support the `--version' arg. If the
# `--with-library-[exec-]prefix' arguments to ./configure are given, it
# must also support `--prefix' and `--exec-prefix'. Preferably use
# CONFIG-SCRIPTS as config script, CFLAGS-ARG instead of `--cflags` and
# LIBS-ARG instead of `--libs`, if given.
#
# The SED-EXPR-EXTRACTOR parameter represents the expression used in sed
# to extract the version number. Use it if your 'foo-config --version'
# dumps something like 'Foo library v1.0.0 (alfa)' instead of '1.0.0'.
#
# The macro respects LIBRARY_CONFIG, LIBRARY_CFLAGS and LIBRARY_LIBS
# variables. If the first one is defined, it specifies the name of the
# config script to use. If the latter two are defined, the script is not
# ran at all and their values are used instead (if only one of them is
# defined, the empty value of the remaining one is still used).
#
# Example:
#
# AX_PATH_GENERIC(Foo, 1.0.0)
#
# would run `foo-config --version' and check that it is at least 1.0.0, if
# successful the following variables would be defined and substituted:
#
# FOO_CFLAGS to `foo-config --cflags`
# FOO_LIBS to `foo-config --libs`
#
# Example:
#
# AX_PATH_GENERIC([Bar],,,[
# AC_MSG_ERROR([Cannot find Bar library])
# ])
#
# would check for bar-config program, defining and substituting the
# following variables:
#
# BAR_CFLAGS to `bar-config --cflags`
# BAR_LIBS to `bar-config --libs`
#
# Example:
#
# ./configure BAZ_LIBS=/usr/lib/libbaz.a
#
# would link with a static version of baz library even if `baz-config
# --libs` returns just "-lbaz" that would normally result in using the
# shared library.
#
# This macro is a rearranged version of AC_PATH_GENERIC from Angus Lees.
#
# LICENSE
#
# Copyright (c) 2009 Francesco Salvestrini <[email protected]>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 17
AU_ALIAS([AC_PATH_GENERIC], [AX_PATH_GENERIC])
AC_DEFUN([AX_PATH_GENERIC],[
AC_REQUIRE([AC_PROG_SED])
dnl we're going to need uppercase and lowercase versions of the
dnl string `LIBRARY'
pushdef([UP], translit([$1], [a-z], [A-Z]))dnl
pushdef([DOWN], translit([$1], [A-Z], [a-z]))dnl
AC_ARG_WITH(DOWN-prefix,[AS_HELP_STRING([--with-]DOWN[-prefix=PREFIX],
[Prefix where $1 is installed (optional)])],
DOWN[]_config_prefix="$withval", DOWN[]_config_prefix="")
AC_ARG_WITH(DOWN-exec-prefix,[AS_HELP_STRING([--with-]DOWN[-exec-prefix=EPREFIX],
[Exec prefix where $1 is installed (optional)])],
DOWN[]_config_exec_prefix="$withval", DOWN[]_config_exec_prefix="")
AC_ARG_VAR(UP[]_CONFIG, [config script used for $1])
AC_ARG_VAR(UP[]_CFLAGS, [CFLAGS used for $1])
AC_ARG_VAR(UP[]_LIBS, [LIBS used for $1])
AS_IF([test x"$UP[]_CFLAGS" != x -o x"$UP[]_LIBS" != x],[
dnl Don't run config script at all, use user-provided values instead.
AC_SUBST(UP[]_CFLAGS)
AC_SUBST(UP[]_LIBS)
:
$4
],[
AS_IF([test x$DOWN[]_config_exec_prefix != x],[
DOWN[]_config_args="$DOWN[]_config_args
--exec-prefix=$DOWN[]_config_exec_prefix"
AS_IF([test x${UP[]_CONFIG+set} != xset],[
UP[]_CONFIG=$DOWN[]_config_exec_prefix/bin/DOWN-config
])
])
AS_IF([test x$DOWN[]_config_prefix != x],[
DOWN[]_config_args="$DOWN[]_config_args --prefix=$DOWN[]_config_prefix"
AS_IF([test x${UP[]_CONFIG+set} != xset],[
UP[]_CONFIG=$DOWN[]_config_prefix/bin/DOWN-config
])
])
AC_PATH_PROGS(UP[]_CONFIG,[$6 DOWN-config],[no])
AS_IF([test "$UP[]_CONFIG" = "no"],[
:
$5
],[
dnl Get the CFLAGS from LIBRARY-config script
AS_IF([test x"$7" = x],[
UP[]_CFLAGS="`$UP[]_CONFIG $DOWN[]_config_args --cflags`"
],[
UP[]_CFLAGS="`$UP[]_CONFIG $DOWN[]_config_args $7`"
])
dnl Get the LIBS from LIBRARY-config script
AS_IF([test x"$8" = x],[
UP[]_LIBS="`$UP[]_CONFIG $DOWN[]_config_args --libs`"
],[
UP[]_LIBS="`$UP[]_CONFIG $DOWN[]_config_args $8`"
])
AS_IF([test x"$2" != x],[
dnl Check for provided library version
AS_IF([test x"$3" != x],[
dnl Use provided sed expression
DOWN[]_version="`$UP[]_CONFIG $DOWN[]_config_args --version | $SED -e
$3`"
],[
DOWN[]_version="`$UP[]_CONFIG $DOWN[]_config_args --version | $SED -e
's/^\ *\(.*\)\ *$/\1/'`"
])
AC_MSG_CHECKING([for $1 ($DOWN[]_version) >= $2])
AX_COMPARE_VERSION($DOWN[]_version,[ge],[$2],[
AC_MSG_RESULT([yes])
AC_SUBST(UP[]_CFLAGS)
AC_SUBST(UP[]_LIBS)
:
$4
],[
AC_MSG_RESULT([no])
:
$5
])
],[
AC_SUBST(UP[]_CFLAGS)
AC_SUBST(UP[]_LIBS)
:
$4
])
])
])
popdef([UP])
popdef([DOWN])
])
--
sane-devel mailing list: [email protected]
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/sane-devel
Unsubscribe: Send mail with subject "unsubscribe your_password"
to [email protected]