unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
* pkg-config support
@ 2008-04-28 21:33 Ludovic Courtès
  2008-04-29  9:44 ` Thien-Thi Nguyen
  2008-05-01  8:59 ` Neil Jerram
  0 siblings, 2 replies; 10+ messages in thread
From: Ludovic Courtès @ 2008-04-28 21:33 UTC (permalink / raw)
  To: guile-devel

[-- Attachment #1: Type: text/plain, Size: 1138 bytes --]

Hi,

Pkg-config support has been requested several times [0, 1], and I think
time has come to add it.  :-)  Marius once postponed it considering it
undesirable to maintain two configuration mechanisms [2], but I think
the maintenance overhead is really negligible.

Several patches [3, 4] have been posted and this one is vaguely based on
the one by Aaron VanDevender [4].  The rationale for doing it in
Automake rather than through `AC_CONFIG_FILES' is that `$pkgdatadir' is
not available in the latter.  I'm not sure whether that should be
`guile.pc' or `guile-1.8.pc'.  We can probably go for `guile.pc' and
change the name in future versions if need be.

The patch also reinstates `autoconf.texi', which was not included by
`guile.texi', and adds a few lines of (obvious) documentation.

OK to apply?

Thanks,
Ludovic.

[0] http://article.gmane.org/gmane.lisp.guile.user/6190
[1] http://thread.gmane.org/gmane.lisp.guile.devel/5212/focus=5213
[2] http://thread.gmane.org/gmane.lisp.guile.devel/1991/focus=2376

[3] http://thread.gmane.org/gmane.lisp.guile.devel/1991
[4] http://thread.gmane.org/gmane.lisp.guile.user/5337/focus=5339


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: The patch --]
[-- Type: text/x-patch, Size: 4666 bytes --]

diff --git a/.gitignore b/.gitignore
index fde5392..f1d8bbc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -69,3 +69,4 @@ guile-config/guile-config
 guile-readline/guile-readline-config.h
 guile-readline/guile-readline-config.h.in
 TAGS
+guile.pc
diff --git a/Makefile.am b/Makefile.am
index 7b4d0c3..3b3771d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -31,7 +31,7 @@ bin_SCRIPTS = guile-tools
 
 include_HEADERS = libguile.h
 
-EXTRA_DIST = LICENSE HACKING GUILE-VERSION FAQ
+EXTRA_DIST = LICENSE HACKING GUILE-VERSION FAQ guile.pc.in
 
 TESTS = check-guile
 
@@ -39,4 +39,21 @@ ACLOCAL_AMFLAGS = -I guile-config
 
 DISTCLEANFILES = check-guile.log
 
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = guile.pc
+
+# Note: `sitedir' must be kept in sync with `GUILE_SITE_DIR' in `guile.m4'.
+guile.pc: guile.pc.in
+	$(SED) -e 's,@prefix\@,$(prefix),g'				\
+	       -e 's,@exec_prefix\@,$(exec_prefix),g'			\
+	       -e 's,@libdir\@,$(libdir),g'				\
+	       -e 's,@datadir\@,$(datadir),g'				\
+	       -e 's,@sitedir\@,$(pkgdatadir)/site,g'			\
+	       -e 's,@libguileinterface\@,$(LIBGUILE_INTERFACE),g'	\
+	       -e 's,@GUILE_CFLAGS\@,$(GUILE_CFLAGS),g'			\
+	       -e 's,@GUILE_LIBS\@,$(GUILE_LIBS),g'			\
+	       -e 's,@GUILE_VERSION\@,$(GUILE_VERSION),g' $< > $@
+
+CLEANFILES = guile.pc
+
 # Makefile.am ends here
diff --git a/configure.in b/configure.in
index 390c33b..f7f6564 100644
--- a/configure.in
+++ b/configure.in
@@ -69,6 +69,7 @@ AC_LIBTOOL_WIN32_DLL
 AC_PROG_INSTALL
 AC_PROG_CC
 AC_PROG_CPP
+AC_PROG_SED
 AC_PROG_AWK
 
 AC_AIX
diff --git a/doc/ref/autoconf.texi b/doc/ref/autoconf.texi
index 828155c..8622fde 100644
--- a/doc/ref/autoconf.texi
+++ b/doc/ref/autoconf.texi
@@ -8,10 +8,10 @@
 @node Autoconf Support
 @chapter Autoconf Support
 
-When Guile is installed, a set of autoconf macros is also installed as
-PREFIX/share/aclocal/guile.m4.  This chapter documents the macros provided in
-that file, as well as the high-level guile-tool Autofrisk.  @xref{Top,The GNU
-Autoconf Manual,,autoconf}, for more info.
+When Guile is installed, a pkg-config description file and a set of
+Autoconf macros is installed.  This chapter documents pkg-config and
+Autoconf support, as well as the high-level guile-tool Autofrisk.
+@xref{Top,The GNU Autoconf Manual,,autoconf}, for more info.
 
 @menu
 * Autoconf Background::         Why use autoconf?
@@ -45,7 +45,38 @@ checks.
 @node Autoconf Macros
 @section Autoconf Macros
 
-The macro names all begin with "GUILE_".
+@cindex pkg-config
+@cindex autoconf
+
+GNU Guile provides a @dfn{pkg-config} description file, installed as
+@file{@var{prefix}/lib/pkgconfig/guile.pc}, which contains all the
+information necessary to compile and link C applications that use Guile.
+The @code{pkg-config} program is able to read this file and provide this
+information to application programmers; it can be obtained at
+@url{http://pkg-config.freedesktop.org/}.
+
+The following command lines give respectively the C compilation and link
+flags needed to build Guile-using programs:
+
+@example
+pkg-config guile --cflags
+pkg-config guile --libs
+@end example
+
+To ease use of pkg-config with Autoconf, pkg-config comes with a
+convenient Autoconf macro.  The following example looks for Guile and
+sets the @code{GUILE_CFLAGS} and @code{GUILE_LIBS} variables
+accordingly, or prints an error and exits if Guile was not found:
+
+@findex PKG_CHECK_MODULES
+
+@example
+PKG_CHECK_MODULES([GUILE], [guile])
+@end example
+
+Guile comes with additional Autoconf macros providing more information,
+installed as @file{@var{prefix}/share/aclocal/guile.m4}.  Their names
+all begin with @code{GUILE_}.
 
 @c see Makefile.am
 @include autoconf-macros.texi
diff --git a/doc/ref/guile.texi b/doc/ref/guile.texi
index 9e742f4..7c17b36 100644
--- a/doc/ref/guile.texi
+++ b/doc/ref/guile.texi
@@ -176,6 +176,8 @@ x
 
 * Guile Modules::
 
+* Autoconf Support::
+
 Appendices
 
 * Data Representation::             All the details.
@@ -361,6 +363,8 @@ available through both Scheme and C interfaces.
 @include scsh.texi
 @include scheme-debugging.texi
 
+@include autoconf.texi
+
 @include data-rep.texi
 @include fdl.texi
 
diff --git a/guile.pc.in b/guile.pc.in
new file mode 100644
index 0000000..cefde96
--- /dev/null
+++ b/guile.pc.in
@@ -0,0 +1,14 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datadir=@datadir@
+
+sitedir=@sitedir@
+libguileinterface=@libguileinterface@
+
+Name: GNU Guile
+Description: GNU's Ubiquitous Intelligent Language for Extension
+Version: @GUILE_VERSION@
+Libs: -L${libdir} -lguile @GUILE_LIBS@
+Cflags: -I${includedir} @GUILE_CFLAGS@

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: pkg-config support
  2008-04-28 21:33 pkg-config support Ludovic Courtès
@ 2008-04-29  9:44 ` Thien-Thi Nguyen
  2008-04-30 11:49   ` Ludovic Courtès
  2008-05-01  8:59 ` Neil Jerram
  1 sibling, 1 reply; 10+ messages in thread
From: Thien-Thi Nguyen @ 2008-04-29  9:44 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-devel

[-- Attachment #1: Type: text/plain, Size: 414 bytes --]

() ludo@gnu.org (Ludovic Courtès)
() Mon, 28 Apr 2008 23:33:34 +0200

   +# Note: `sitedir' must be kept in sync with
   `GUILE_SITE_DIR' in `guile.m4'.

The 1.4.x guile.m4 (appended) also has GUILE_LIBSITE_DIR.
I think this would be a good addition; third parties can
install machine- (architecture-) dependent files there.

thi


__________________________________________________________________

[-- Attachment #2: guile.m4 --]
[-- Type: application/octet-stream, Size: 15723 bytes --]

## Some -*-autoconf-*- macros for working with Guile.
##
## Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008 Thien-Thi Nguyen
## Copyright (C) 1998, 2001 Free Software Foundation, Inc.
##
## This file is part of GUILE
##
## GUILE is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 3, or (at your option)
## any later version.
##
## GUILE is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this software; see the file COPYING.  If not, write to
## the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
## Boston, MA 02110-1301, USA.

## Index
## -----
##
## GUILE_PROGS -- set paths to Guile interpreter, config and tool programs
## GUILE_FLAGS -- set flags for compiling and linking with Guile
## GUILE_SITE_DIR -- find path to Guile "site" directory (non-md files)
## GUILE_LIBSITE_DIR -- find path to Guile "library site" dir (md files)
## GUILE_CHECK -- evaluate Guile Scheme code and capture the return value
## GUILE_PROVIDEDP -- check if a feature symbol is provided
## GUILE_MODULE_CHECK -- check feature of a Guile Scheme module
## GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module
## GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable
## GUILE_MODULE_EXPORTS -- check if a module exports a variable
## GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable
## GUILE_CHECK_ICE9_OPTARGS -- use (ice-9 optargs) for (ice-9 optargs-kw)?
## GUILE_MODULE_CATALOG_PREP -- machinery for pre-inst merged module catalog
## GUILE_TOOLS_PROG -- find absolute filename of a guile-tools program
## GUILE_C2X_METHOD -- choose "guile-tools c2x" or "guile-snarf"
## GUILE_MODSUP_H -- define HAVE_GUILE_MODSUP_H if it is indeed available

## Code
## ----

## NOTE: Comments preceding an AC_DEFUN (starting from "Usage:") are massaged
## into doc/ref/autoconf-macros.texi (see Makefile.am in that directory).

# {Program Detection}

# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs
#
# Usage: GUILE_PROGS
#
# Look for programs @code{guile}, @code{guile-config} and
# @code{guile-tools}, and set variables @var{GUILE}, @var{GUILE_CONFIG} and
# @var{GUILE_TOOLS}, to their paths, respectively.  If either of the first two
# is not found, signal error.
#
# Mark the variables for substitution, as by @code{AC_SUBST}.
#
AC_DEFUN([GUILE_PROGS],
 [AC_PATH_PROG(GUILE,guile)
  if test "$GUILE" = "" ; then
      AC_MSG_ERROR([guile required but not found])
  fi
  AC_SUBST(GUILE)
  AC_PATH_PROG(GUILE_CONFIG,guile-config)
  if test "$GUILE_CONFIG" = "" ; then
      AC_MSG_ERROR([guile-config required but not found])
  fi
  AC_SUBST(GUILE_CONFIG)
  AC_PATH_PROG(GUILE_TOOLS,guile-tools)
  AC_SUBST(GUILE_TOOLS)
 ])

# {Compilation Flags Reporting}

# GUILE_FLAGS -- set flags for compiling and linking with Guile
#
# Usage: GUILE_FLAGS
#
# Run the @code{guile-config} script, installed with Guile, to
# find out where Guile's header files and libraries are installed.  Set
# two variables, @var{GUILE_CFLAGS} and @var{GUILE_LDFLAGS}.
#
# @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that
# uses Guile header files.  This is almost always just a @code{-I} flag.
#
# @var{GUILE_LDFLAGS}: flags to pass to the linker to link a program against
# Guile.  This includes @code{-lguile} for the Guile library itself, any
# libraries that Guile itself requires (like -lqthreads), and so on.  It may
# also include a @code{-L} flag to tell the compiler where to find the
# libraries.
#
# Mark the variables for substitution, as by @code{AC_SUBST}.
#
AC_DEFUN([GUILE_FLAGS],
 [AC_REQUIRE([GUILE_PROGS])dnl
  AC_MSG_CHECKING([libguile compile flags])
  GUILE_CFLAGS="`$GUILE_CONFIG compile`"
  AC_MSG_RESULT([$GUILE_CFLAGS])
  AC_MSG_CHECKING([libguile link flags])
  GUILE_LDFLAGS="`$GUILE_CONFIG link`"
  AC_MSG_RESULT([$GUILE_LDFLAGS])
  AC_SUBST(GUILE_CFLAGS)
  AC_SUBST(GUILE_LDFLAGS)
 ])

# {Installation Directories}

# GUILE_SITE_DIR -- find path to Guile "site" directory
#
# Usage: GUILE_SITE_DIR
#
# Look for Guile's "site" directory, usually something like
# PREFIX/share/guile/site, and set var @var{GUILE_SITE} to the path.
# Note that PREFIX is that of Guile, which may or may not coincide
# with the one specified by @code{configure --prefix}.
# Note also that the var name is different from the macro name.
#
# Mark the variable for substitution, as by @code{AC_SUBST}.
#
AC_DEFUN([GUILE_SITE_DIR],
 [AC_REQUIRE([GUILE_PROGS])dnl
  AC_MSG_CHECKING(for Guile site directory)
  # Try built-in reprefixing.
  GUILE_SITE=`[$GUILE_CONFIG] re-prefix-info scheme_site_dir 2>/dev/null`
  # If no joy, do it "manually".
  if test x"$GUILE_SITE" = x ; then
    GUILE_SITE=`[$GUILE_CONFIG] info prefix`
    GUILE_SITE=`[$GUILE_CONFIG] info pkgdatadir | sed s,$GUILE_SITE,'${prefix}',`
    GUILE_SITE="$GUILE_SITE/site"
  fi
  # If still no joy, make an educated guess.
  if test x"$GUILE_SITE" = x/site ; then
    GUILE_SITE='${datadir}/guile/site'
  fi
  AC_MSG_RESULT($GUILE_SITE)
  AC_SUBST(GUILE_SITE)
 ])

# GUILE_LIBSITE_DIR -- find path to Guile "library site" directory
#
# Usage: GUILE_LIBSITE_DIR
#
# Look for Guile's "library site" directory, usually something like
# PREFIX/lib/guile/site, and set var @var{GUILE_LIBSITE} to the path.
# Note that PREFIX is that of Guile, which may or may not coincide
# with the one specified by @code{configure --prefix}.
# Note also that the var name is different from the macro name.
#
# Mark the variable for substitution, as by @code{AC_SUBST}.
#
AC_DEFUN([GUILE_LIBSITE_DIR],
 [AC_REQUIRE([GUILE_PROGS])dnl
  AC_MSG_CHECKING(for Guile library site directory)
  # Try built-in reprefixing.
  GUILE_LIBSITE=`[$GUILE_CONFIG] re-prefix-info pkglibdir 2>/dev/null`
  # If no joy, do it "manually".
  if test x"$GUILE_LIBSITE" = x ; then
    GUILE_LIBSITE=`[$GUILE_CONFIG] info exec_prefix`
    GUILE_LIBSITE=`[$GUILE_CONFIG] info pkglibdir | sed s,$GUILE_LIBSITE,'${exec_prefix}',`
  fi
  GUILE_LIBSITE="$GUILE_LIBSITE"/site
  # If still no joy, make an educated guess.
  if test x"$GUILE_LIBSITE" = x/site ; then
    GUILE_LIBSITE='${libdir}/guile/site'
  fi
  AC_MSG_RESULT($GUILE_LIBSITE)
  AC_SUBST(GUILE_LIBSITE)
 ])

# {General Feature Checks}

# GUILE_CHECK -- evaluate Guile Scheme code and capture the return value
#
# Usage: GUILE_CHECK(var,check)
#
# Set @var{var} to the numeric return value of evaluating @var{check}.
# @var{var} is a shell variable name to be set to the return value.
#
# @var{check} is one or more Guile Scheme expression, evaluated with
# "$GUILE -c", the last of which should return either 0 or non-#f to
# indicate the check passed.  Non-0 number or #f indicates failure.
# This is conventionally achieved by wrapping the last expression in
# @code{exit}.  For example, @code{(foo) (bar) (exit (baz))}.
#
# Avoid using the character "#" since that confuses autoconf.
#
AC_DEFUN([GUILE_CHECK],
 [AC_REQUIRE([GUILE_PROGS])
  $GUILE -c "$2" > /dev/null 2>&1
  $1=$?
 ])

# GUILE_PROVIDEDP -- check if a feature symbol is provided
#
# Usage: GUILE_PROVIDEDP(var,feature)
#
# Set @var{var} based on whether or not @var{feature} is @code{provided?}.
# @var{var} is a shell variable name to be set to "yes" or "no".
# @var{feature} is a symbol, like: @code{posix}.
#
AC_DEFUN([GUILE_PROVIDEDP],
         [AC_MSG_CHECKING([if guile provides feature `$2'])
          GUILE_CHECK($1,(exit (provided? (quote $2))))
          if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi
          AC_MSG_RESULT($$1)
         ])

# {Scheme Module Checks}

# GUILE_MODULE_CHECK -- check feature of a Guile Scheme module
#
# Usage: GUILE_MODULE_CHECK(var,module,featuretest,description)
#
# Set @var{var} based on whether or not @var{module} supports @var{featuretest}.
# @var{var} is a shell variable name to be set to "yes" or "no".
# @var{module} is a list of symbols, like: @code{(ice-9 common-list)}.
# @var{featuretest} is an expression acceptable to GUILE_CHECK, q.v.
# @var{description} is a present-tense verb phrase (passed to AC_MSG_CHECKING).
#
AC_DEFUN([GUILE_MODULE_CHECK],
         [AC_MSG_CHECKING([if $2 $4])
	  GUILE_CHECK($1,[(use-modules $2) (exit ((lambda () $3)))])
	  if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi
          AC_MSG_RESULT($$1)
         ])

# GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module
#
# Usage: GUILE_MODULE_AVAILABLE(var,module)
#
# Set @var{var} based on whether or not @var{module} can be found.
# @var{var} is a shell variable name to be set to "yes" or "no".
# @var{module} is a list of symbols, like: @code{(ice-9 common-list)}.
#
AC_DEFUN([GUILE_MODULE_AVAILABLE],
         [GUILE_MODULE_CHECK($1,$2,0,is available)
         ])

# GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable
#
# Usage: GUILE_MODULE_REQUIRED(symlist)
#
# Check that the module named by @var{symlist} is available.  If not, fail.
# @var{symlist} is a list of symbols, WITHOUT surrounding parens,
# like: @code{ice-9 common-list}.
#
AC_DEFUN([GUILE_MODULE_REQUIRED],
         [GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1))
          if test "$ac_guile_module_required" = "no" ; then
              AC_MSG_ERROR([required guile module not found: ($1)])
          fi
         ])

# GUILE_MODULE_EXPORTS -- check if a module exports a variable
#
# Usage: GUILE_MODULE_EXPORTS(var,module,modvar)
#
# Set @var{var} based on whether or not @var{module} exports @var{modvar}.
# @var{var} is a shell variable to be set to "yes" or "no".
# @var{module} is a list of symbols, like: @code{(ice-9 common-list)}.
# @var{modvar} is the Guile Scheme variable to check.
#
AC_DEFUN([GUILE_MODULE_EXPORTS],
 [GUILE_MODULE_CHECK($1,$2,$3,exports `$3')
 ])

# GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable
#
# Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar)
#
# Check if @var{module} exports @var{modvar}.  If not, fail.
# @var{module} is a list of symbols, like: @code{(ice-9 common-list)}.
# @var{modvar} is the Guile Scheme variable to check.
#
AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT],
 [GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2)
  if test "$guile_module_required_export" = "no" ; then
      AC_MSG_ERROR([module $1 does not export $2; required])
  fi
 ])

# {Miscellaneous}

# GUILE_CHECK_ICE9_OPTARGS -- use (ice-9 optargs) for (ice-9 optargs-kw)?
#
# Usage: GUILE_CHECK_ICE9_OPTARGS(var)
#
# Check if module @code{(ice-9 optargs-kw)} is available.  If so, set
# shell var @var{var} to "no" (see why below).  Otherwise, check if
# module @code{(ice-9 optargs)} acts like @code{(ice-9 optargs-kw)}.
# If so, set @var{var} to "yes", otherwise set it to "no".
#
# Mark the variable for substitution, as by @code{AC_SUBST}.
#
# Some versions of Guile provide a module @code{(ice-9 optargs)} that
# acts like @code{(ice-9 optargs-kw)} (and subsequently omit the latter,
# instead of providing both).  Code that uses @code{(ice-9 optargs-kw)}
# solely can be textually kludged to load @code{(ice-9 optargs)} in
# these situations if @var{var} has value "yes".  Here is a Makefile.am
# fragment that demonstrates the technique:
#
# @example
# install-data-hook:
#         if test "$(need_optargs_kludge)" = yes ; then \
#            sed s/optargs-kw/optargs/ foo.scm > TMP ; \
#            mv TMP foo.scm ; \
#         fi
# @end example
#
# In this example, @var{var} is @code{need_optargs_kludge}.  If it turns
# out @code{(ice-9 optargs-kw)} is available, @code{need_optargs_kludge}
# would have value "no", and the kludge would neither be required nor
# applied.
#
AC_DEFUN([GUILE_CHECK_ICE9_OPTARGS],[
  GUILE_MODULE_AVAILABLE($1, (ice-9 optargs-kw))
  if test "$$1" = yes ; then
    $1=no
  else
    GUILE_MODULE_CHECK($1, (ice-9 optargs),
      [(= 2 ((lambda* (a #:optional b) b) 4 2))],
      [acts like (ice-9 optargs-kw)])
  fi
  AC_SUBST($1)
])

# GUILE_MODULE_CATALOG_PREP -- machinery for pre-inst merged module catalog
#
# Usage: GUILE_MODULE_CATALOG_PREP([fragname])
#
# Define two AC_CONFIG_COMMAND commands to manage the local module catalog.
#
# @table @code
# @item module-catalog-prep
# This command runs towards the tail end of a @code{configure} invocation.
# It does these actions:
#
# @itemize
# @item Create a dependencies subdirectory named by the
# shell var @code{DEPDIR}, or ".deps" if not that var is not defined.
# This step is skipped if the directory already exists.
#
# @item Create a dummy makefile fragment file in the dependencies
# directory named @file{.Pmodule-catalog}.
# This step is skipped if the file already exists.  Optional
# arg FRAGNAME specifies another filename for the makefile fragment.
#
# @item Append an @code{include} directive to @file{./Makefile}.
# This step is skipped if the directive has already been appended.
# @end itemize
#
# @item module-catalog-clean-local
# This command is intended to be run as an action in the Makefile.am
# target @code{clean-local}.  It re-initializes the dependencies file
# (ie, @var{FRAGNAME} or @file{.Pmodule-catalog} in the deps dir).
# You still need to add the module catalog's name to the Makefile.am
# var @code{CLEANFILES}.  For example:
#
# @example
# # fragment of top-level Makefile.am
# CLEANFILES = .module-catalog
# clean-local:
#         ./config.status module-catalog-clean-local
# @end example
# @end table
#
AC_DEFUN([GUILE_MODULE_CATALOG_PREP],[
  AC_CONFIG_COMMANDS([module-catalog-prep],[
    test x"$DEPDIR" = x && DEPDIR=".deps"
    test -d "$DEPDIR" || mkdir "$DEPDIR"
    prereq="$DEPDIR/m4_case([$1],[],[.Pmodule-catalog],[$1])"
    test -f "$prereq" || echo '# dummy' > "$prereq"
    grep -q "include $prereq" Makefile || echo "include $prereq" >> Makefile
  ])
  AC_CONFIG_COMMANDS([module-catalog-clean-local],[
    prereq="$DEPDIR/m4_case([$1],[],[.Pmodule-catalog],[$1])"
    test -f "$prereq" && echo '# dummy' > "$prereq"
  ])
])

# GUILE_TOOLS_PROG -- find absolute filename of a guile-tools program
#
# Usage: GUILE_TOOLS_PROG(var,program,[notfound])
#
# Set shell variable @var{var} to be the absolute filename of the
# guile-tools @var{program} if it exists, or to ":" otherwise.
# Optional third arg @var{notfound} is the value to use instead of ":".
#
# Mark the variable for substitution, as by @code{AC_SUBST}.
#
AC_DEFUN([GUILE_TOOLS_PROG],[
  AC_REQUIRE([GUILE_PROGS])dnl
  AC_MSG_CHECKING([for "guile-tools $2"])
  $1=no
  if $GUILE_TOOLS -p PROGRAM >/dev/null 2>&1 ; then
    $1=`$GUILE_TOOLS -p $2`
  elif $GUILE_TOOLS | grep -q $2 ; then
    $1=`$GUILE_TOOLS --help | $SED '/.*cripts dir: /!d;s///'`/$2
  fi
  AC_MSG_RESULT([$$1])
  test "$$1" = no && $1=m4_case([$3],[],[:],[$3])
  AC_SUBST($1)
])

# GUILE_C2X_METHOD -- choose "guile-tools c2x" or "guile-snarf"
#
# Usage: GUILE_C2X_METHOD(var)
#
# Set shell variable @var{var} to be either the
# absolute filename of the "guile-tools c2x" program,
# or "guile-snarf", preferring the former if it is available.
#
# Mark the variable for substitution, as by @code{AC_SUBST}.
#
AC_DEFUN([GUILE_C2X_METHOD],[
  GUILE_TOOLS_PROG([$1],[c2x],[guile-snarf])
])

# GUILE_MODSUP_H -- define HAVE_GUILE_MODSUP_H if it is indeed available
#
# Usage: GUILE_MODSUP_H
#
# Check for header <guile/modsup.h> using AC_CHECK_HEADERS.
# If found, define the cpp symbol HAVE_GUILE_MODSUP_H in config.h.
#
AC_DEFUN([GUILE_MODSUP_H],[
  AC_CHECK_HEADERS([guile/modsup.h])
])

## guile.m4 ends here

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: pkg-config support
  2008-04-29  9:44 ` Thien-Thi Nguyen
@ 2008-04-30 11:49   ` Ludovic Courtès
  2008-04-30 13:24     ` Thien-Thi Nguyen
  2008-05-01 16:21     ` Andy Wingo
  0 siblings, 2 replies; 10+ messages in thread
From: Ludovic Courtès @ 2008-04-30 11:49 UTC (permalink / raw)
  To: Thien-Thi Nguyen; +Cc: guile-devel

Hi,

Thien-Thi Nguyen <ttn@gnuvola.org> writes:

> () ludo@gnu.org (Ludovic Courtès)
> () Mon, 28 Apr 2008 23:33:34 +0200
>
>    +# Note: `sitedir' must be kept in sync with
>    `GUILE_SITE_DIR' in `guile.m4'.
>
> The 1.4.x guile.m4 (appended) also has GUILE_LIBSITE_DIR.
> I think this would be a good addition; third parties can
> install machine- (architecture-) dependent files there.

Actually, both look like a bad idea to me.  :-)

Having a package that installs its modules to $(GUILE_SITE) instead of
$prefix/something is Bad(tm) as it breaks user expectations and the GCS
(see "Variables for Installation Directories"), and it makes it
impossible to run `distcheck' anyway.  Thus many packages end up having
their own `--with-guilemoduledir' option or similar that determines the
installation directory of Guile modules and defaults to
$prefix/something.

As for libraries, there's an additional problem.  Libraries that are not
meant to be used from C (e.g., bindings of some C library whose C API is
not public) would better fit under $pkglibdir than under $libdir.  In
that case, the `.scm' module that calls `load-extension' must contain
the full path to the lib, since it cannot expect it to be in ld.so's
search path.  The problem is that doing so precludes running tests from
the build tree, before installation.  (This is another instance of the
problem that Libtool has with `RPATH', where the `RPATH' in the build
tree must be different from the one in the installed library, so that
the in-tree library can be used for testing purposes before
installation.  Libtool solves it by rebuilding the library with the
right `RPATH' at "make install" time.)

IMO what we really need is:

  1. Autoconf support for, say, `--guilemoduledir', so that Guile
     packages can use it consistently;

  2. Automake support to somehow solve the above problem with the path
     passed to `load-extension'.

Both would be nice usability improvements.

Thanks,
Ludovic.




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: pkg-config support
  2008-04-30 11:49   ` Ludovic Courtès
@ 2008-04-30 13:24     ` Thien-Thi Nguyen
  2008-05-04 20:06       ` Ludovic Courtès
  2008-05-01 16:21     ` Andy Wingo
  1 sibling, 1 reply; 10+ messages in thread
From: Thien-Thi Nguyen @ 2008-04-30 13:24 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-devel

() ludo@gnu.org (Ludovic Courtès)
() Wed, 30 Apr 2008 13:49:14 +0200

   Having a package that installs its modules to $(GUILE_SITE) instead
   of $prefix/something is Bad(tm) as it breaks user expectations and
   the GCS (see "Variables for Installation Directories")

I guess i will disagree on user expectations.  I'm a (strange, granted)
user and when i install Emacs Lisp, i expect there to be a `lispdir'
(with defaults under Emacs' tree, but customizable, of course), and
likewise for both .scm and .so files, under GUILE_SITE and
GUILE_LIBSITE, respectively.

This is because Emacs advertizes its "site" directory and nicely handles
third-party files installed there.  Likewise Guile w/ its "site".  In
Guile 1.4.x (and, as you may know, also for Guile 1.6.x), specially
crafted shared object files somewhere under %load-path (either "site" or
"libsite") can be handled just as well as scheme files, w/o any libtool
hassles.

So, having used these facilities, i expect them and welcome macros like
GUILE_SITE and GUILE_LIBSITE that make the process easier.  Probably the
GCS should be extended to encourage use of these (then inclusion in
Autoconf will be a side-effect).

   and it makes it impossible to run `distcheck' anyway.

Could you please explain this (or point me to some relevant docs)?

   Thus many packages end up having their own `--with-guilemoduledir'
   option or similar that determines the installation directory of Guile
   modules and defaults to $prefix/something.

This sounds like an argument for including GUILE_SITE and GUILE_LIBSITE.
Am i misunderstanding you?

   As for libraries, there's an additional problem.  Libraries that are
   not meant to be used from C (e.g., bindings of some C library whose C
   API is not public) would better fit under $pkglibdir than under
   $libdir.

Sure.  Private libraries should not be installed under GUILE_LIBSITE.
That's not under discussion.

   In that case, the `.scm' module that calls `load-extension' must
   contain the full path to the lib, since it cannot expect it to be in
   ld.so's search path.  The problem is that doing so precludes running
   tests from the build tree, before installation.  (This is another
   instance of the problem that Libtool has with `RPATH', where the
   `RPATH' in the build tree must be different from the one in the
   installed library, so that the in-tree library can be used for
   testing purposes before installation.  Libtool solves it by
   rebuilding the library with the right `RPATH' at "make install"
   time.)

I sympathize w/ the `load-extension' difficulties, but don't experience
them, personally.  Guile 1.4.x treats (certain) shared object libraries
as first-class modules, using "module catalogs" to locate a particular
module.  This builds on capabilities that were dropped after Guile 1.6.x
(IIUC).  Perhaps those can be brought back.  The end result is that i do
"make check" all the time using pre-installed modules.  No Big Deal.

Libtool is nice, but i've discovered that having Guile answer the "where
is it on the filesystem?" question is nicer.

   IMO what we really need is:

     1. Autoconf support for, say, `--guilemoduledir', so that Guile
        packages can use it consistently;

For Autoconf to adopt something, it helps our case if that something
exists and is in use, first.  It's backwards to expect a good-fitting
standardization effort to come from Autoconf.

     2. Automake support to somehow solve the above problem with the
        path passed to `load-extension'.

Good luck w/ that!  I've been happy w/o `load-extension'; IMHO the
sooner you let go of its approach the sooner you can be happy w/o it,
too.

thi




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: pkg-config support
  2008-04-28 21:33 pkg-config support Ludovic Courtès
  2008-04-29  9:44 ` Thien-Thi Nguyen
@ 2008-05-01  8:59 ` Neil Jerram
  2008-05-04 20:36   ` Ludovic Courtès
  1 sibling, 1 reply; 10+ messages in thread
From: Neil Jerram @ 2008-05-01  8:59 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-devel

ludo@gnu.org (Ludovic Courtès) writes:

> Hi,
>
> Pkg-config support has been requested several times [0, 1], and I think
> time has come to add it.  :-)  Marius once postponed it considering it
> undesirable to maintain two configuration mechanisms [2], but I think
> the maintenance overhead is really negligible.

Agreed, this is a nice addition.

> Several patches [3, 4] have been posted and this one is vaguely based on
> the one by Aaron VanDevender [4].  The rationale for doing it in
> Automake rather than through `AC_CONFIG_FILES' is that `$pkgdatadir' is
> not available in the latter.

But $pkgdatadir is always ${datadir}/guile.  So, in my view, better to
rely on this and use AC_CONFIG_FILES, instead of introducing the sed
dependency and incantation in Makefile.am.

>  I'm not sure whether that should be
> `guile.pc' or `guile-1.8.pc'.  We can probably go for `guile.pc' and
> change the name in future versions if need be.

I'd vote for guile-1.8.pc now.

> The patch also reinstates `autoconf.texi', which was not included by
> `guile.texi', and adds a few lines of (obvious) documentation.

Nice.

Regards,
        Neil





^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: pkg-config support
  2008-04-30 11:49   ` Ludovic Courtès
  2008-04-30 13:24     ` Thien-Thi Nguyen
@ 2008-05-01 16:21     ` Andy Wingo
  2008-05-05  7:28       ` Ludovic Courtès
  1 sibling, 1 reply; 10+ messages in thread
From: Andy Wingo @ 2008-05-01 16:21 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: Thien-Thi Nguyen, guile-devel

On Wed 30 Apr 2008 13:49, ludo@gnu.org (Ludovic Courtès) writes:

> As for libraries, there's an additional problem.  Libraries that are not
> meant to be used from C (e.g., bindings of some C library whose C API is
> not public) would better fit under $pkglibdir than under $libdir.  In
> that case, the `.scm' module that calls `load-extension' must contain
> the full path to the lib, since it cannot expect it to be in ld.so's
> search path.  The problem is that doing so precludes running tests from
> the build tree, before installation.

This is cairo/config.scm.in:

(define-module (cairo config)
  :export     (*cairo-lib-path*
               *cairo-documentation-path*))

(define *cairo-lib-path* "@cairolibpath@")
(define *cairo-documentation-path* "@cairodocumentationpath@")


This is part of cairo/Makefile.am:

config.scm: Makefile config.scm.in
	sed -e "s|@cairolibpath\@|$(lib_builddir)/libguile-cairo|" \
	    -e "s|@cairodocumentationpath\@|$(docs_builddir)/cairo-procedures.txt|" \
	    $(srcdir)/config.scm.in > config.scm

install-data-local: Makefile config.scm.in
	$(mkinstalldirs) $(DESTDIR)$(moduledir)
	sed -e "s|@cairolibpath\@|$(libdir)/libguile-cairo|" \
	    -e "s|@cairodocumentationpath\@|$(moduledir)/cairo-procedures.txt|" \
	    $(srcdir)/config.scm.in > $(DESTDIR)$(moduledir)/config.scm
	chmod 644 $(DESTDIR)$(moduledir)/config.scm

uninstall-local:
	rm -f $(DESTDIR)$(moduledir)/config.scm

It's verbose but it does work in both cases.

Andy
-- 
http://wingolog.org/




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: pkg-config support
  2008-04-30 13:24     ` Thien-Thi Nguyen
@ 2008-05-04 20:06       ` Ludovic Courtès
  2008-05-25 18:17         ` Thien-Thi Nguyen
  0 siblings, 1 reply; 10+ messages in thread
From: Ludovic Courtès @ 2008-05-04 20:06 UTC (permalink / raw)
  To: guile-devel

Hi,

Thien-Thi Nguyen <ttn@gnuvola.org> writes:

> () ludo@gnu.org (Ludovic Courtès)
> () Wed, 30 Apr 2008 13:49:14 +0200
>
>    Having a package that installs its modules to $(GUILE_SITE) instead
>    of $prefix/something is Bad(tm) as it breaks user expectations and
>    the GCS (see "Variables for Installation Directories")
>
> I guess i will disagree on user expectations.  I'm a (strange, granted)
> user and when i install Emacs Lisp, i expect there to be a `lispdir'
> (with defaults under Emacs' tree, but customizable, of course), and
> likewise for both .scm and .so files, under GUILE_SITE and
> GUILE_LIBSITE, respectively.

What I meant by "it breaks user expectations and the GCS" is that, if a
package installs its modules to GUILE_SITE regardless of the
user-provided $prefix, then it breaks the expectation that everything
the package installs falls under $prefix unless explicitly asked to do
otherwise.

> This is because Emacs advertizes its "site" directory and nicely handles
> third-party files installed there.  Likewise Guile w/ its "site".  In
> Guile 1.4.x (and, as you may know, also for Guile 1.6.x), specially
> crafted shared object files somewhere under %load-path (either "site" or
> "libsite") can be handled just as well as scheme files, w/o any libtool
> hassles.

Sure, but that's the same problem if one installs a library under /foo
instead of /lib or /usr/lib: the linker/loader search path has to be
upgraded accordingly, and Libtool actually warns you about it at
installation time.  In several `configure.ac', I have this:

  if test "$guilemoduledir" != "$GUILE_SITE"; then
     # Guile won't be able to locate the module "out of the box", so
     # warn the user.
     AC_MSG_WARN([`guilemoduledir' ($guilemoduledir) is different from `GUILE_SITE' ($GUILE_SITE).])
     AC_MSG_WARN([Make sure to adjust the `GUILE_LOAD_PATH' environment variable accordingly,])
     AC_MSG_WARN([or re-run `configure' with `--with-guilemoduledir=$GUILE_SITE'.])
  fi

>    and it makes it impossible to run `distcheck' anyway.
>
> Could you please explain this (or point me to some relevant docs)?

Often, installing to GUILE_SITE requires root privileges, which prevents
`distcheck' from working when run as a user.

I hope this clarifies my position.

Thanks,
Ludovic.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: pkg-config support
  2008-05-01  8:59 ` Neil Jerram
@ 2008-05-04 20:36   ` Ludovic Courtès
  0 siblings, 0 replies; 10+ messages in thread
From: Ludovic Courtès @ 2008-05-04 20:36 UTC (permalink / raw)
  To: guile-devel

[-- Attachment #1: Type: text/plain, Size: 377 bytes --]

Hi,

Neil Jerram <neil@ossau.uklinux.net> writes:

> But $pkgdatadir is always ${datadir}/guile.  So, in my view, better to
> rely on this and use AC_CONFIG_FILES, instead of introducing the sed
> dependency and incantation in Makefile.am.

Right.

> I'd vote for guile-1.8.pc now.

OK, probably safer.

Based on your remarks, I committed the attached patch.

Thanks!

Ludo'.


[-- Attachment #2: The patch --]
[-- Type: text/x-patch, Size: 7131 bytes --]

From 94a997d18262ddf515180070fa8673cbf194f8ae Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Sun, 4 May 2008 22:19:30 +0200
Subject: [PATCH] Add `pkg-config' support.

---
 .gitignore            |    1 +
 ChangeLog             |    9 +++++++++
 Makefile.am           |    5 ++++-
 NEWS                  |    4 ++++
 configure.in          |    7 +++++++
 doc/ref/ChangeLog     |   11 +++++++++++
 doc/ref/autoconf.texi |   41 ++++++++++++++++++++++++++++++++++++-----
 doc/ref/guile.texi    |    4 ++++
 guile-1.8.pc.in       |   15 +++++++++++++++
 9 files changed, 91 insertions(+), 6 deletions(-)
 create mode 100644 guile-1.8.pc.in

diff --git a/.gitignore b/.gitignore
index fde5392..a122176 100644
--- a/.gitignore
+++ b/.gitignore
@@ -69,3 +69,4 @@ guile-config/guile-config
 guile-readline/guile-readline-config.h
 guile-readline/guile-readline-config.h.in
 TAGS
+guile-1.8.pc
diff --git a/ChangeLog b/ChangeLog
index eada026..fe63267 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-05-04  Ludovic Courtès  <ludo@gnu.org>
+
+	Add `pkg-config' support.  Suggested by Aaron VanDevender, Greg
+	Troxel, and others.
+
+	* configure.in: Substitute `sitedir', produce `guile-1.8.pc'.
+	* Makefile.am (EXTRA_DIST): Add `guile-1.8.pc.in'.
+	(pkgconfigdir, pkgconfig_DATA): New.
+
 2008-04-26  Ludovic Courtès  <ludo@gnu.org>
 
 	* configure.in (BUILD_PTHREAD_SUPPORT): New Automake
diff --git a/Makefile.am b/Makefile.am
index 7b4d0c3..a275f01 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -31,7 +31,7 @@ bin_SCRIPTS = guile-tools
 
 include_HEADERS = libguile.h
 
-EXTRA_DIST = LICENSE HACKING GUILE-VERSION FAQ
+EXTRA_DIST = LICENSE HACKING GUILE-VERSION FAQ guile-1.8.pc.in
 
 TESTS = check-guile
 
@@ -39,4 +39,7 @@ ACLOCAL_AMFLAGS = -I guile-config
 
 DISTCLEANFILES = check-guile.log
 
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = guile-1.8.pc
+
 # Makefile.am ends here
diff --git a/NEWS b/NEWS
index 041c83d..12a289e 100644
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,10 @@ The new repository can be accessed using
 "git-clone git://git.sv.gnu.org/guile.git", or can be browsed on-line at
 http://git.sv.gnu.org/gitweb/?p=guile.git .  See `README' for details.
 
+** Add support for `pkg-config'
+
+See "Autoconf Support" in the manual for details.
+
 * New modules (see the manual for details)
 
 ** `(srfi srfi-88)'
diff --git a/configure.in b/configure.in
index 390c33b..276172f 100644
--- a/configure.in
+++ b/configure.in
@@ -1430,6 +1430,12 @@ AC_SUBST(top_builddir_absolute)
 top_srcdir_absolute=`(cd $srcdir && pwd)`
 AC_SUBST(top_srcdir_absolute)
 
+dnl We need `sitedir' in `guile-1.8.pc'.
+dnl Note: `sitedir' must be kept in sync with `GUILE_SITE_DIR' in `guile.m4'.
+pkgdatadir="$datadir/guile"
+sitedir="$pkgdatadir/site"
+AC_SUBST([sitedir])
+
 # Additional SCM_I_GSC definitions are above.
 AC_SUBST([SCM_I_GSC_GUILE_DEBUG])
 AC_SUBST([SCM_I_GSC_GUILE_DEBUG_FREELIST])
@@ -1475,6 +1481,7 @@ AC_CONFIG_FILES([
   test-suite/standalone/Makefile
 ])
 
+AC_CONFIG_FILES([guile-1.8.pc])
 AC_CONFIG_FILES([check-guile], [chmod +x check-guile])
 AC_CONFIG_FILES([benchmark-guile], [chmod +x benchmark-guile])
 AC_CONFIG_FILES([guile-tools], [chmod +x guile-tools])
diff --git a/doc/ref/ChangeLog b/doc/ref/ChangeLog
index 9aa7559..c2ed8f9 100644
--- a/doc/ref/ChangeLog
+++ b/doc/ref/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-04  Ludovic Courtès  <ludo@gnu.org>
+
+	* guile.texi (Guile Modules): Include `autoconf.texi'.
+	* autoconf.texi (Autoconf Support): Mention `pkg-config'.
+	(Autoconf Macros): Document `pkg-config' support.
+
 2008-04-26  Ludovic Courtès  <ludo@gnu.org>
 
 	* srfi-modules.texi (SRFI-88): New section.
@@ -2582,3 +2588,8 @@
 	The change log for files in this directory continues backwards
 	from 2001-08-27 in ../ChangeLog, as all the Guile documentation
 	prior to this date was contained in a single directory.
+
+
+;; Local Variables:
+;; coding: utf-8
+;; End:
diff --git a/doc/ref/autoconf.texi b/doc/ref/autoconf.texi
index 828155c..83686da 100644
--- a/doc/ref/autoconf.texi
+++ b/doc/ref/autoconf.texi
@@ -8,10 +8,10 @@
 @node Autoconf Support
 @chapter Autoconf Support
 
-When Guile is installed, a set of autoconf macros is also installed as
-PREFIX/share/aclocal/guile.m4.  This chapter documents the macros provided in
-that file, as well as the high-level guile-tool Autofrisk.  @xref{Top,The GNU
-Autoconf Manual,,autoconf}, for more info.
+When Guile is installed, a pkg-config description file and a set of
+Autoconf macros is installed.  This chapter documents pkg-config and
+Autoconf support, as well as the high-level guile-tool Autofrisk.
+@xref{Top,The GNU Autoconf Manual,,autoconf}, for more info.
 
 @menu
 * Autoconf Background::         Why use autoconf?
@@ -45,7 +45,38 @@ checks.
 @node Autoconf Macros
 @section Autoconf Macros
 
-The macro names all begin with "GUILE_".
+@cindex pkg-config
+@cindex autoconf
+
+GNU Guile provides a @dfn{pkg-config} description file, installed as
+@file{@var{prefix}/lib/pkgconfig/guile-1.8.pc}, which contains all the
+information necessary to compile and link C applications that use Guile.
+The @code{pkg-config} program is able to read this file and provide this
+information to application programmers; it can be obtained at
+@url{http://pkg-config.freedesktop.org/}.
+
+The following command lines give respectively the C compilation and link
+flags needed to build Guile-using programs:
+
+@example
+pkg-config guile-1.8 --cflags
+pkg-config guile-1.8 --libs
+@end example
+
+To ease use of pkg-config with Autoconf, pkg-config comes with a
+convenient Autoconf macro.  The following example looks for Guile and
+sets the @code{GUILE_CFLAGS} and @code{GUILE_LIBS} variables
+accordingly, or prints an error and exits if Guile was not found:
+
+@findex PKG_CHECK_MODULES
+
+@example
+PKG_CHECK_MODULES([GUILE], [guile-1.8])
+@end example
+
+Guile comes with additional Autoconf macros providing more information,
+installed as @file{@var{prefix}/share/aclocal/guile.m4}.  Their names
+all begin with @code{GUILE_}.
 
 @c see Makefile.am
 @include autoconf-macros.texi
diff --git a/doc/ref/guile.texi b/doc/ref/guile.texi
index 9e742f4..7c17b36 100644
--- a/doc/ref/guile.texi
+++ b/doc/ref/guile.texi
@@ -176,6 +176,8 @@ x
 
 * Guile Modules::
 
+* Autoconf Support::
+
 Appendices
 
 * Data Representation::             All the details.
@@ -361,6 +363,8 @@ available through both Scheme and C interfaces.
 @include scsh.texi
 @include scheme-debugging.texi
 
+@include autoconf.texi
+
 @include data-rep.texi
 @include fdl.texi
 
diff --git a/guile-1.8.pc.in b/guile-1.8.pc.in
new file mode 100644
index 0000000..15c83d8
--- /dev/null
+++ b/guile-1.8.pc.in
@@ -0,0 +1,15 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datarootdir=@datarootdir@
+datadir=@datadir@
+
+sitedir=@sitedir@
+libguileinterface=@LIBGUILE_INTERFACE@
+
+Name: GNU Guile
+Description: GNU's Ubiquitous Intelligent Language for Extension
+Version: @GUILE_VERSION@
+Libs: -L${libdir} -lguile @GUILE_LIBS@
+Cflags: -I${includedir} @GUILE_CFLAGS@
-- 
1.5.5


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: pkg-config support
  2008-05-01 16:21     ` Andy Wingo
@ 2008-05-05  7:28       ` Ludovic Courtès
  0 siblings, 0 replies; 10+ messages in thread
From: Ludovic Courtès @ 2008-05-05  7:28 UTC (permalink / raw)
  To: guile-devel

Hi Andy,

Andy Wingo <wingo@pobox.com> writes:

> install-data-local: Makefile config.scm.in
> 	$(mkinstalldirs) $(DESTDIR)$(moduledir)
> 	sed -e "s|@cairolibpath\@|$(libdir)/libguile-cairo|" \
> 	    -e "s|@cairodocumentationpath\@|$(moduledir)/cairo-procedures.txt|" \
> 	    $(srcdir)/config.scm.in > $(DESTDIR)$(moduledir)/config.scm
> 	chmod 644 $(DESTDIR)$(moduledir)/config.scm

Yes, that's exactly what I had in mind.  It'd be nice if Automake could
somehow do it by itself.

Thanks,
Ludovic.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: pkg-config support
  2008-05-04 20:06       ` Ludovic Courtès
@ 2008-05-25 18:17         ` Thien-Thi Nguyen
  0 siblings, 0 replies; 10+ messages in thread
From: Thien-Thi Nguyen @ 2008-05-25 18:17 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-devel

() ludo@gnu.org (Ludovic Courtès)
() Sun, 04 May 2008 22:06:58 +0200

   [rationale]
   I hope this clarifies my position.

Yes, thanks for explaining.
I'll go ponder these ideas for a bit, now.

thi




^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2008-05-25 18:17 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-28 21:33 pkg-config support Ludovic Courtès
2008-04-29  9:44 ` Thien-Thi Nguyen
2008-04-30 11:49   ` Ludovic Courtès
2008-04-30 13:24     ` Thien-Thi Nguyen
2008-05-04 20:06       ` Ludovic Courtès
2008-05-25 18:17         ` Thien-Thi Nguyen
2008-05-01 16:21     ` Andy Wingo
2008-05-05  7:28       ` Ludovic Courtès
2008-05-01  8:59 ` Neil Jerram
2008-05-04 20:36   ` Ludovic Courtès

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).