Re: [Libguestfs] [PATCH] macosx: Darwin-specific autoconf macros

Pino Toscano
Thu, 12 Feb 2015 18:42:23 -0000

On Thursday 12 February 2015 17:49:55 Margaret Lewicka
wrote:
> * Replace LD_LIBRARY_PATH with DYLD_LIBRARY_PATH for Darwin
> * Remove the -lcrypt flag for Darwin (unsupported)
> ---
>  configure.ac   | 13 +++++++++++++
>  run.in         | 10 +++++-----
>  v2v/link.sh.in |  2 +-
>  3 files changed, 19 insertions(+), 6 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index d68190a..295de11 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -582,6 +582,19 @@ fi
>  AC_MSG_RESULT([$DISTRO])
>  AC_SUBST([DISTRO])
>
> +AC_MSG_CHECKING([whether we're building on Mac OS X])
> +if test "x$(uname)" = "xDarwin"; then
> +  AC_MSG_RESULT([yes])
> +  LCRYPT_FLAG> +  SHARED_LIBS_PATH="DYLD_LIBRARY_PATH"
> +else
> +  AC_MSG_RESULT([no])
> +  LCRYPT_FLAG="-lcrypt"
> +  SHARED_LIBS_PATH="LD_LIBRARY_PATH"
> +fi
> +AC_SUBST([LCRYPT_FLAG])
> +AC_SUBST([SHARED_LIBS_PATH])

We link to libcrypt because it provides crypt(), at least on GNU libc
and on the FreeBSD libc; it seems not the case on Mac OS X, looking
at your patch.
I'd say that this should turn into a proper configure check, trying to
use crypt() without extra libraries and if not possible with libcrypt.

Also (minor style detail) I'd call the variable name e.g. LIBCRYPT.

>  dnl Add extra packages to the appliance.
>  AC_ARG_WITH([extra-packages],
>      [AS_HELP_STRING([--with-extra-packages="pkg1 pkg2 ..."],
> diff --git a/run.in b/run.in
> index a8c2904..4612e0e 100755
> --- a/run.in
> +++ b/run.in
> @@ -77,13 +77,13 @@ fi
>
PATH="$b/align:$b/builder:$b/cat:$b/customize:$b/df:$b/diff:$b/edit:$b/erlang:$b/fish:$b/format:$b/fuse:$b/inspector:$b/make-fs:$b/p2v:$b/rescue:$b/resize:$b/sparsify:$b/sysprep:$b/test-tool:$b/tools:$b/v2v:$PATH"
>  export PATH
>
> -# Set LD_LIBRARY_PATH to contain library.
> -if [ -z "$LD_LIBRARY_PATH" ]; then
> -
LD_LIBRARY_PATH="$b/src/.libs:$b/java/.libs:$b/gobject/.libs"
> +# Set @SHARED_LIBS_PATH@ to contain library.
> +if [ -z "$@SHARED_LIBS_PATH@" ]; then
> +
@SHARED_LIBS_PATH@="$b/src/.libs:$b/java/.libs:$b/gobject/.libs"
>  else
> -
LD_LIBRARY_PATH="$b/src/.libs:$b/java/.libs:$b/gobject/.libs:$LD_LIBRARY_PATH"
> +
@SHARED_LIBS_PATH@="$b/src/.libs:$b/java/.libs:$b/gobject/.libs:$@SHARED_LIBS_PATH@"
>  fi
> -export LD_LIBRARY_PATH
> +export @SHARED_LIBS_PATH@

Is setting LD_LIBRARY_PATH somehow harmful/problematic on Mac OS X?
If not, I'd say to use a variable for the library paths we want to add,
then adding them to both LD_LIBRARY_PATH and DYLD_LIBRARY_PATH;
something like
  libdirs="$b/src/.libs:...etc"
  # Set LD_LIBRARY_PATH to contain library.
  if [ -z "$LD_LIBRARY_PATH" ]; then
    LD_LIBRARY_PATH="$libdirs"
  else
    LD_LIBRARY_PATH="$libdirs:$LD_LIBRARY_PATH"
  fi
  export LD_LIBRARY_PATH
  # ditto for DYLD_LIBRARY_PATH

Thanks,
--
Pino Toscano