pan-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Pan-users] I want to try to build Pan from the git


From: Duncan
Subject: Re: [Pan-users] I want to try to build Pan from the git
Date: Sat, 4 May 2013 06:17:14 +0000 (UTC)
User-agent: Pan/0.140 (Chocolate Salty Balls; GIT b00f96e /usr/src/portage/src/egit-src/pan2)

Bob posted on Thu, 02 May 2013 19:58:24 +0000 as excerpted:

> On Thu, 02 May 2013 19:54:39 +0000, Bob wrote:
> 
>> what would I need to download to do so?
>> Am running Mint 13 Maya (LTS) AMD-64.
>> 
>> Already posted similar message in the developer group,
>> 
>> Bob
> 
> OOP's also have Mint LMDE 201303 AMD-64 newly installed and running.

I'm not the best authority on this, as I run gentoo, which being end-user 
build-from-source by default, doesn't do the runtime/buildtime package 
splits that most binary distros do.  However, since nobody else seems to 
be responding... and years ago I did run a binary-based distro (Mandrake) 
and build from sources for some things, so I do know a bit about it...

The easiest way to build from live-git on a binary-based distro is to 
break it down into steps.  Note that the below is a bit of a worst-case, 
and that in most cases, other than the runtime/devel split I mention 
below, which a good package management system should pretty much take 
care of for you with step #1, it ends up sounding much worse than it 
actually ends up being when you actually do it.

Step one, get the existing distro package to build from source using its 
source-package (srpm or whatever, I don't know what debian-based-distros 
call the source package).  That will pull in most of the dependencies you 
need, including the -dev/-devel packages for the necessary libraries.

It's worth noting specifically once again, since it confuses nearly 
everybody on a binary-based distro the first time or two they build 
something from source, that binary-based distros break most of their 
libraries into two packages, the runtime package that is commonly 
depended upon by other binary packages using that library, and the build-
time or -dev(el) package that only those building anything that depends 
on that library from source need.  The runtime package contains the 
actual library binaries, while the build-time package contains the 
headers (*.h files), pkgconfig files (*.pc), etc, that aren't needed to 
actually run anything using that library, but ARE needed to build against 
it.

So if you see an error that libsomething.so isn't installed when you know 
it is, what's normally because the libsomething-devel package isn't 
installed, so while the binary/runtime bits of the library might be 
installed, it can't be used to build anything because the -devel package 
is missing.

By first building the existing version from sources using the distro's 
normal source-package, its package-manager should pull in most of these 
-dev packages automatically, and if it misses any, you should get an 
error that's easier to match up to a missing -dev package or whatever, 
than you would if you went straight to building live-git.

Of course, that also serves as a "gentle" intro to building from source, 
while the distro package manager is still managing most of the deps, etc, 
thus taking some of the mystery out of it while getting you used to the 
general procedure, what a normal build looks like, etc.

Step two, once you can successfully build and run the distro's existing 
version from its existing sources, advance to the latest version tarball 
from upstream, pan 0.139 in our case.

Sometimes, you'll need a later version of some library than what shipped 
with your distro, since you're now building upstream's latest shipped 
version.  Other times, the distro did some distro-specific patching 
making its version easier to build on that distro, or something, and 
you'll need to figure out how to make the unpatched sources build or to 
patch them yourself.  But by this point you should recognize what's going 
on a bit more, making it easier to figure out the problem and the version 
of the library you need to update to, if that's the problem, or be able 
to tell because it's looking in the wrong place for something compared to 
what the distro version did, that the distro version was either 
configured special to look where it looked, or patched to do so, thus 
being familiar with what your native distro version build looks like is 
already half the answer to any problems you encounter at this stage.

It's also worth noting that package source tarballs typically include 
INSTALL and/or README files that tell you something about what you need 
to build the package, and how.  Sometimes there's similar information on 
the package's homepage.  Pan is no exception.

Once you get the latest release-version from upstream successfully 
building and running, THEN go for step 3, actually trying the git-live 
version.

This step can actually be the hardest, because there's less documentation 
on it, and there's often some additional dependencies that aren't needed 
for building from a release tarball, because part of the release process 
is doing some pre-config, etc, that individual users have to do when 
they're building from the raw un-release-prepared sources.  (The same 
files are often there, just outdated, as the sources have changed since 
the last release updated the pre-config files to match the sources.)

And honestly, I remember not being able to overcome this step back on 
mandrake for some time -- I could build from a release tarball, but not 
from the live sources, and I didn't know what I was missing.  I don't 
remember for sure whether I /ever/ actually overcame that on mandrake, or 
whether it was only after switching to gentoo, that I was able to do it, 
everything seeming to "just work", because gentoo actually defaults to 
building from sources so makes vastly different assumptions about the 
tools and configuration that should be default on the distro.

I still don't have the greatest personal understanding of this step, but 
I've been able to guide a number of folks thru it, by "cheating", as it 
were, just looking at the gentoo live-ebuild (or one for another similar 
package if there isn't one for that package, tho for pan there is, so 
it's easy enough) to see what it does, one command at a time, and having 
the person I'm guiding thru the process do the same thing, only manually.

When you get to that point, I'll do that.  Meanwhile, it's enough for now 
to describe it in higher level terms.  Pan, like many free/libre and open 
source packages, is autotools based.

When one builds from a release tarball, normally all one does is unpack 
the tarball, cd into it, run ./configure (which is a script that detects 
what's available on the platform and sets up the build appropriately), 
then make (which actually builds the binaries from sources), then make 
install (which installs the binaries made in the last step).

But, where did this configure script come from?  It's auto-generated by 
the various components of the autotools package, automake, autoconf, etc, 
in several steps, from much shorter "recipe" files.  Running these to 
update the configure script against the latest sources is a routine part 
of preparing for a release, and is thus normally already done in the 
release-version tarballs a project ships.  But once you graduate to the 
level of building from live-sources, you're typically building from 
sources that have changed since the last time the configure script was 
built, so it may be outdated and no longer function as expected, unless 
you do the release-prep steps yourself.

The problem is that except for developers themselves, this whole process 
isn't so well documented, and the documentation for developers tends to 
be *MUCH* more complicated than it should be for a non-dev normal end-
user simply trying to build the current unreleased sources.  Among other 
things, there are several versions of autoconf, automake, libtool, etc, 
and if a project's using a version different than what a distro ships, 
there can be issues getting it to work properly.  Not to harp on it /too/ 
much, but this is one of the areas where a default-from-source distro 
tends to be far easier, because it normally assumes its users are going 
to be /doing/ such things.  For example, on gentoo, it's routine to have 
several versions of automake and autoconf installed at the same time, 
parallel to each other, with a wrapper that normally sorts out which one 
should be used, and a method of specifying one version directly, if for 
some reason the wrapper is making the wrong choice.  On a binary-based 
distro, by contrast, the assumption is that most users will only run 
packages pre-built by the distro, and if there's autoconf and automake 
installed at all by default, there may not be provision to install 
different versions in parallel, making it far more of a hassle to build a 
package that doesn't work with a distro's default version.

Of course, whatever VCS (version control system, most often git these 
days as it is with pan, but it used to be svn most often, and rcs before 
that, and there's other VCSs as well) an upstream uses, must be installed 
as well, once you're building from live sources.  That's unnecessary when 
building from a pre-packaged tarball.  However, given that you already 
specified building pan from git, it's likely you already expected this 
requirement.

So anyway, once you get step #2, building from the latest pan tarball, 
working, and have git installed and are otherwise in general ready to go, 
post again to that effect, and if nobody else does, I'll try to guide you 
thru the additional pre-configure steps.  Again, it probably looks a lot 
worse as I've described it above than it actually is in practice, but I 
know I passed the other hurdles easier than I did this one, which took me 
quite awhile, and I may have only done it once I switched to gentoo.  But 
as I've said, I've helped others thru it, so it's possible.  And if 
you're lucky, your distro might make it easy enough that you find you 
don't need the extra help I and others did to get over that hurdle, after 
all. =:^)

-- 
Duncan - List replies preferred.   No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master."  Richard Stallman




reply via email to

[Prev in Thread] Current Thread [Next in Thread]