gpgme android build fails looking for /usr/local/lib/libgpg-error.la
Marcus Brinkmann
marcus.brinkmann at ruhr-uni-bochum.de
Mon Mar 12 16:52:16 CET 2012
On 03/10/2012 12:44 AM, Hans-Christoph Steiner wrote:
>
> On Mar 9, 2012, at 2:04 PM, Hans-Christoph Steiner wrote:
>
>>
>> On Mar 9, 2012, at 1:23 PM, Marcus Brinkmann wrote:
>>
>>> On 03/01/2012 02:29 AM, Hans-Christoph Steiner wrote:
>>>>
>>>> So gpgme is building fine on Android using the attached patch, it just doesn't finish linking to libgpg-error because the build system is convinced that its in /usr/local/lib, where it is definitely not. I tried to trace it a bit, but no luck yet. Any ideas where this is being set?
>>>>
>>>> To see how I'm building gpgme, check out the gpgme-build target in this Makefile, that will show the ./configure flags, etc.
>>>> https://github.com/guardianproject/gnupg-for-android/blob/master/external/Makefile
>>>
>>> It seems the libgpg-error configure is missing the --prefix=$(prefix) on the configure command line.
>>>
>>> That is necessary to set the path in gpg-error-config which is queried by gpgme's configure to locate gpg-error.
>>>
>>> I made a pull request on github (first time for me):
>>>
>>> https://github.com/guardianproject/gnupg-for-android/pull/2
>>
>> Awesome, thank you! I merged it and am running a whole new build now.
>
> Here's the next step:
>
> - could you update config.sub and config.guess to the latest version? That's required for Android support, i.e. the host arm-linux-androidabi, otherwise ./configure dies like this:
>
> checking host system type... Invalid configuration `arm-linux-androideabi':
> system `androideabi' not recognized
> configure: error: /bin/bash ./config.sub arm-linux-androideabi failed
Fixed in gpgme ced1ad01aed32d1e4c5000f3b901db018ef7bf1e
> - I needed to apply the attached simple patch to get things building since Android does not have SYS_gettid but does define __linux. It seems to be something in _GNU_SOURCE, so __gnu_linux__ seems an appropriate test.
Or we just use __NR_gettid, which should work everywhere.
Fixed in gpgme ff0a640a18e7b7457e6c2edfdc8307bf44628b60
> - the *-config scripts don't seem to work when cross-compiling, since they use prefix= but they don't include DESTDIR, i.e. they assume that the libs are all installed into their final destination. Or am I missing something? I'm using ./configure --with-gpg-error-prefix=$(LOCAL) ($LOCAL is the full path, not just the prefix) but that doesn't seem to help because I get:
>
> /bin/sed: can't read /data/data/info.guardianproject.gpg/app_opt/lib/libgpg-error.la: No such file or directory
> libtool: link: `/data/data/info.guardianproject.gpg/app_opt/lib/libgpg-error.la' is not a valid libtool archive
>
> I've also tried using sed to replace the prefix= line in each *-config script to the full path, and it also gives a similar error. But I found that merely running "make -C gpgme" works...
The way this is supposed to work is this:
At configure time, --prefix= should be used with the actual path where
the files will be found at the time you compile the next package.
make DESTDIR is for installing into a staging area for packaging. The
files will not be usable until they are relocated to the actual prefix.
For a cross-build, things are confused a bit, of course, as you want to
access the files in two locations, one path for the build system and one
for the host. Oh well. For Windows builds, we prefer the cross
environment and do the runtime lookup dynamically in cooperation with
the installer. For non-Windows systems, the other way around may be
more convenient. But then, you might have to do some work anyway to
make sure files are found in the android filesystem, which probably is
different from a normal Unix install.
So I'd say try the approach to set the cross build locations with
configure --prefix option, which is the least amount of hassle at build
time, and then patch things up for the android host install later, by
using configure options such as gpgme's --with-gpg or if necessary,
adjusting the code that locates various bits of the system in gpgme and
gpg (gpg-conf in particular). It depends on the packaging and how the
android filesystem works.
I might have a look at your build scripts and suggest something more
specific, but maybe you have already thought about how the android
packaging etc will work and can share some thoughts on that?
Thanks,
Marcus
More information about the Gnupg-devel
mailing list