meson: do a build-time check for strlcpy before attempting runtime check

In cross-compilation environments the runtime check isn't possible so it is up
to the builder to seed the cross file, but we can definitely state that strlcpy
doesn't exist with a build test.
This commit is contained in:
Ross Burton 2019-03-13 16:22:09 +00:00
parent 3c44026dc4
commit fc88e56bfc

View File

@ -1859,24 +1859,27 @@ if host_system != 'windows' and get_option('xattr')
endif
endif
# Test if we have strlcpy/strlcat with a compatible implementation:
# https://bugzilla.gnome.org/show_bug.cgi?id=53933
if cc_can_run
rres = cc.run('''#include <stdlib.h>
#include <string.h>
int main() {
char p[10];
(void) strlcpy (p, "hi", 10);
if (strlcat (p, "bye", 0) != 3)
return 1;
return 0;
}''',
name : 'OpenBSD strlcpy/strlcat')
if rres.compiled() and rres.returncode() == 0
# If strlcpy is present (BSD and similar), check that it conforms to the BSD
# specification. Specifically Solaris 8's strlcpy() does not, see
# https://bugzilla.gnome.org/show_bug.cgi?id=53933 for further context.
if cc.has_function('strlcpy')
if cc_can_run
rres = cc.run('''#include <stdlib.h>
#include <string.h>
int main() {
char p[10];
(void) strlcpy (p, "hi", 10);
if (strlcat (p, "bye", 0) != 3)
return 1;
return 0;
}''',
name : 'OpenBSD strlcpy/strlcat')
if rres.compiled() and rres.returncode() == 0
glib_conf.set('HAVE_STRLCPY', 1)
endif
elif meson.get_cross_property('have_strlcpy', false)
glib_conf.set('HAVE_STRLCPY', 1)
endif
elif meson.get_cross_property('have_strlcpy', false)
glib_conf.set('HAVE_STRLCPY', 1)
endif
python = import('python').find_installation('python3')