On Mon, 6 Jan 2014 17:21:04 -0500
Chris Marshall <devel.chm...@gmail.com> wrote:

> Hi Paul-
> 
> I'm a bit confused by the discussion so far.  Alien modules are to
> provide external dependencies "wrapped up" for perl modules to use
> and not, in general, as a way to resolve C library dependencies.
> Once installed, an Alien module should provide all the information
> needed to use the library from/with perl without any other tools
> being involved.
> 
> The only issue with the non-standard library location is that you
> need to have the right location for the various compile and link
> parts of install and execution for the perl module depending on the
> provided Alien library.  In general, different platforms all have
> different default and not-so-default locations for system package
> installs.  Even in the case of a root user install, the specific
> paths may need to be adjusted for the given platform type and/or
> local configuration.
> 
> Here is a scenario that I think represents the case of interest
> below and how it might be implemented.
> 
> I have a perl module MyXS that depends on library A and library B
> (through the fact that library A uses library B).  In that case,
> the MyXS install would have a dependency on Alien::A, which, when
> satisfied, allows the MyXS configuration to determine everything
> about what is needed to use the library A bindings for its work.
> 
> Since library A depends on library B, it might make sense to have
> an Alien::B module whose job it is to install/detect library B and
> to provide the needed information to Alien::A.  NOTE:  Alien::A
> will be providing whatever is needed on the library B configuration
> side to MyXS.  This is all determined by what and how the libraries
> are to be used.
> 
> It should also be possible to have OtherXS need library B and to
> have it as a direct dependency in CPAN which would configure or
> install with the needed information to support perl development or
> bindings using library B.

So, ignore Alien and perl and everything for a moment.

  uniblium exists.
  libtermkey depends on unibilium. uses pkg-config to find it.

This works fine when root is installing it in a real place.
This works fine when non-root is installing it somewhere they made up
(e.g. $HOME/lib and $HOME/include), and sets PKG_CONFIG_PATH
appropriately.

Now consider Alien.

  Alien::unibilium installs unibilium into the only place it knows how
   - namely, somewhere in Perl's @INC dir.

  At this point, how does the C library "libtermkey"'s Makefile, manage
  to find unibilium, to link against it?

The pkg-config that libtermkey's Makefile invokes cannot itself find
the unibilium.pc file because it's hidden in Perl's @INC dir.


I currently can't see how Alien::libtermkey /can/ provide a totally
hassle-free self-contained "just do it" installation of libtermkey and
its own C-level dependencies, because of this fact.

This surely limits Alien wrappings to only being useful for C libraries
that don't themselves have other C-level dependencies.

Unless I have missed something - how does anyone else do this?

-- 
Paul "LeoNerd" Evans

leon...@leonerd.org.uk
ICQ# 4135350       |  Registered Linux# 179460
http://www.leonerd.org.uk/

Reply via email to