Ports and their dependencies (run deps and also versioning questions)
Joshua Root
jmr at macports.org
Sun Jun 8 04:54:58 PDT 2008
Tabitha McNerney wrote:
> On 6/6/08, *Joshua Root* <jmr at macports.org <mailto:jmr at macports.org>> wrote:
> Tabitha McNerney wrote:
>
> But, then my script ran into this specific problem:
>
> $ port info --depends_lib speex @1.0.5
>
> -->
>
> depends_lib: lib:libogg:libogg
>
> Hmmm ... the repeat of the library dependency libogg looks to be
> incorrect.
> Also, the first instance of the libogg dependency is preceded by
> "lib:" but
> shouldn't that be "port:" instead?
>
>
> This is not an error, but a different type of dependency. A
> "port:foo" dependency means "install the port named 'foo'", whereas
> "lib:foo:bar" means "check if the library 'foo' is present, and if
> not, install the port named 'bar'". You can also use 'bin' or 'path'
> instead of 'lib' to make the port installation conditional on the
> absence of executables and arbitrary files, respectively.
>
>
> Hi, I have a followup question. I noticed that with the subversion port,
> when I get information from it (along with enabling its variant, the
> perl variant), for the lib_depends output, I get:
>
> $ port info --depends_lib postgresql81 @8.1.11 +perl
>
>
> -->
>
> depends_lib: port:readline, port:openssl, port:zlib, bin:perl:perl5.8
>
>
> So if I follow Josh's logic, what this means is that there is a library
> dependency of a non-port type that has an executable condition which is
> saying, in a paraphrase:
>
> "the port installation of subversion plus its perl variant has library
> MacPort dependencies of readline, openssl and zlib' and it has a
> non-MacPort dependency baed on the perl binary executable. If this perl
> executable is available on the operating system (e.g., Mac OS X) then
> use it, but if this perl executable can not be found, then the MacPort
> perl5.8 should be installed and once its installed its binary executable
> shall be used" ??
That's right (though the last part, "once its installed its binary
executable shall be used," is an implicit consequence rather than a
guarantee made by the dependency).
> Is it not unusual to see binary executable types of non-port
> dependencies in the library (depends_lib) definition of a port? It
> doesn't matter if binary requirements are in fact mixed and matched
> (regardless of dependency type, library, build, run)?
Depends_lib doesn't apply to only libraries. Its actual meaning is
"these dependencies are required both at build time and at runtime."
Depends_build means "required at build time but not runtime", and
depends_run means "required at runtime but not build time." So all
dependency specifications (bin,lib,path,port) are valid in each list
(depends_lib,depends_build,depends_run). (Do we have preferred
disambiguating terminology for these concepts? Would make discussing
them a lot clearer...)
As I mentioned in the earlier discussion of gperf, MacPorts didn't
always have port: dependencies, so there are probably quite a few of the
other kinds left around which should really be changed to port:. Often
they don't cause any problems; sometimes, as with gperf, they do.
Apart from XFree86, a deliberate one that you'll see a lot is
bin:tex:texlive. This is because there are multiple TeX distribution
ports, which are quite large, and many ports will work with any of them
equally well.
- Josh
More information about the macports-users
mailing list