111441302c
With the switch to meson, the problem previously fixed in #1822 came back. The build system might pick up the installed hexchat-config.h instead of using the header in the source directory, as the compiler arguments would be in the order of "-I${prefix}/include -I..". It seems that the c_args in meson are always put to the front of the compiler arguments, in order to be able to override any include paths from dependencies. However, this was not the intention here, so perl should also be modeled as a dependency. This ensures that the arguments with local include directories come first.
92 lines
2.2 KiB
Meson
92 lines
2.2 KiB
Meson
generate_perl_header = find_program('generate_header.py')
|
|
|
|
hexchat_perl_module = custom_target('hexchat-perl-header',
|
|
input: [
|
|
'lib/HexChat.pm',
|
|
'lib/Xchat.pm',
|
|
'lib/HexChat/Embed.pm',
|
|
'lib/HexChat/List/Network.pm',
|
|
'lib/HexChat/List/Network/Entry.pm',
|
|
'lib/HexChat/List/Network/AutoJoin.pm',
|
|
],
|
|
output: 'hexchat.pm.h',
|
|
command: [generate_perl_header, '@OUTPUT@', '@INPUT@']
|
|
)
|
|
|
|
perl_cflags = []
|
|
irc_perl_module = []
|
|
|
|
if get_option('with-perl-legacy-api')
|
|
irc_perl_module = custom_target('irc-perl-header',
|
|
input: 'lib/IRC.pm',
|
|
output: 'irc.pm.h',
|
|
command: [generate_perl_header, '@OUTPUT@', '@INPUT@']
|
|
)
|
|
perl_cflags += '-DOLD_PERL'
|
|
endif
|
|
|
|
perl = find_program(get_option('with-perl'))
|
|
|
|
ret = run_command([perl, '-MExtUtils::Embed', '-e', 'ccopts'])
|
|
if ret.returncode() != 0
|
|
error('perl: Failed to get cflags')
|
|
endif
|
|
foreach flag : ret.stdout().strip().split(' ')
|
|
if flag.startswith('-I') or flag.startswith('-D')
|
|
perl_cflags += flag
|
|
endif
|
|
endforeach
|
|
|
|
ret = run_command([perl, '-MExtUtils::Embed', '-e', 'ldopts'])
|
|
if ret.returncode() != 0
|
|
error('perl: Failed to get ldflags')
|
|
endif
|
|
perl_ldflags = []
|
|
perl_rpath = ''
|
|
foreach flag : ret.stdout().strip().split(' ')
|
|
if flag.startswith('-L') or flag.startswith('-l')
|
|
perl_ldflags += flag
|
|
endif
|
|
if flag.startswith('-Wl,-rpath,')
|
|
# Install rpath
|
|
split = flag.split(',')
|
|
perl_rpath = split[split.length() - 1]
|
|
|
|
# For in tree
|
|
perl_ldflags += flag
|
|
endif
|
|
endforeach
|
|
|
|
perl_cflags += [
|
|
# Perl has its own 'config.h' that we must override
|
|
# TODO: Just rename ours to something more unique.
|
|
'-include', meson.build_root() + '/config.h'
|
|
]
|
|
|
|
if not cc.links('''
|
|
#define PERL_NO_INLINE_FUNCTIONS
|
|
#include <EXTERN.h>
|
|
#include <perl.h>
|
|
|
|
int main(void) {
|
|
PerlInterpreter *my_perl = perl_alloc();
|
|
return 0;
|
|
}
|
|
''', args: perl_cflags + perl_ldflags)
|
|
error('found perl not suitable for plugin')
|
|
endif
|
|
|
|
perl_dep = declare_dependency(
|
|
compile_args: perl_cflags,
|
|
link_args: perl_ldflags
|
|
)
|
|
|
|
shared_module('perl',
|
|
sources: ['perl.c', hexchat_perl_module, irc_perl_module],
|
|
dependencies: [libgio_dep, hexchat_plugin_dep, perl_dep],
|
|
install: true,
|
|
install_dir: plugindir,
|
|
install_rpath: perl_rpath,
|
|
name_prefix: '',
|
|
)
|