build: Replace Autotools with Meson
Quick rundown of benefits: - Much faster: - Autotools (with autogen): 22 seconds - Meson: 7 seconds - Meson (with ccache): 2 seconds - Simpler: - ~1000 lines smaller - Single simple language - Potentially better Windows (Visual Studio) support What is not done: - Complete Windows support - OSX support (easy) Closes #2013 Closes #1937 Closes #1803
This commit is contained in:
@@ -1,89 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
include $(top_srcdir)/m4/clang-analyze.am
|
||||
|
||||
noinst_LIBRARIES = libhexchatcommon.a
|
||||
|
||||
AM_CPPFLAGS = $(COMMON_CFLAGS) -I$(top_srcdir)
|
||||
|
||||
EXTRA_DIST = \
|
||||
cfgfiles.h \
|
||||
chanopt.h \
|
||||
ctcp.h \
|
||||
dcc.h \
|
||||
fe.h \
|
||||
hexchat.h \
|
||||
hexchatc.h \
|
||||
hexchat-plugin.h \
|
||||
history.h \
|
||||
ignore.h \
|
||||
inbound.h \
|
||||
inet.h \
|
||||
make-te.c \
|
||||
marshalers.list \
|
||||
modes.h \
|
||||
network.h \
|
||||
notify.h \
|
||||
outbound.h \
|
||||
plugin.h \
|
||||
plugin-identd.h \
|
||||
plugin-timer.h \
|
||||
proto-irc.h \
|
||||
server.h \
|
||||
servlist.h \
|
||||
ssl.h \
|
||||
ssl.c \
|
||||
text.h \
|
||||
typedef.h \
|
||||
textenums.h \
|
||||
textevents.h \
|
||||
textevents.in \
|
||||
tree.h \
|
||||
url.h \
|
||||
userlist.h \
|
||||
util.h
|
||||
|
||||
if USE_OPENSSL
|
||||
ssl_c = ssl.c
|
||||
endif
|
||||
|
||||
if USE_DBUS
|
||||
dbusdir = dbus
|
||||
libhexchatcommon_a_LIBADD = \
|
||||
$(top_builddir)/src/common/dbus/dbus-*.$(OBJEXT)
|
||||
endif
|
||||
SUBDIRS = $(dbusdir) .
|
||||
|
||||
if DO_PLUGIN
|
||||
include_HEADERS = hexchat-plugin.h
|
||||
endif
|
||||
|
||||
noinst_PROGRAMS = make-te
|
||||
|
||||
libhexchatcommon_a_SOURCES = cfgfiles.c chanopt.c ctcp.c dcc.c hexchat.c \
|
||||
history.c ignore.c inbound.c marshal.c modes.c network.c notify.c \
|
||||
outbound.c plugin.c plugin-identd.c plugin-timer.c proto-irc.c server.c servlist.c \
|
||||
$(ssl_c) text.c tree.c url.c userlist.c util.c
|
||||
libhexchatcommon_a_CFLAGS = $(LIBPROXY_CFLAGS)
|
||||
|
||||
textenums.h: textevents.h
|
||||
|
||||
textevents.h: $(srcdir)/textevents.in make-te
|
||||
$(AM_V_GEN) ./make-te < $< > $@ 2> textenums.h
|
||||
|
||||
marshal.h: $(srcdir)/marshalers.list
|
||||
$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_hexchat_marshal --header $< > $@
|
||||
|
||||
marshal.c: $(srcdir)/marshalers.list
|
||||
$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_hexchat_marshal --body $< > $@
|
||||
|
||||
|
||||
if DO_STATIC_ANALYSIS
|
||||
analyze_plists = $(libhexchatcommon_a_SOURCES:%.c=%.plist)
|
||||
all-local: $(analyze_plists)
|
||||
MOSTLYCLEANFILES = $(analyze_plists)
|
||||
endif
|
||||
|
||||
BUILT_SOURCES = textenums.h textevents.h marshal.c marshal.h
|
||||
|
||||
CLEANFILES = $(BUILT_SOURCES)
|
||||
@@ -291,8 +291,8 @@ cfg_get_int (char *cfg, char *var)
|
||||
char *xdir = NULL; /* utf-8 encoding */
|
||||
|
||||
#ifdef WIN32
|
||||
#include <Windows.h>
|
||||
#include <ShlObj.h>
|
||||
#include <windows.h>
|
||||
#include <shlobj.h>
|
||||
#endif
|
||||
|
||||
char *
|
||||
@@ -552,7 +552,7 @@ const struct prefs vars[] =
|
||||
{"stamp_text", P_OFFINT (hex_stamp_text), TYPE_BOOL},
|
||||
{"stamp_text_format", P_OFFSET (hex_stamp_text_format), TYPE_STR},
|
||||
|
||||
{"text_autocopy_color", P_OFFINT (hex_text_autocopy_color), TYPE_BOOL},
|
||||
{"text_autocopy_color", P_OFFINT (hex_text_autocopy_color), TYPE_BOOL},
|
||||
{"text_autocopy_stamp", P_OFFINT (hex_text_autocopy_stamp), TYPE_BOOL},
|
||||
{"text_autocopy_text", P_OFFINT (hex_text_autocopy_text), TYPE_BOOL},
|
||||
{"text_background", P_OFFSET (hex_text_background), TYPE_STR},
|
||||
@@ -635,7 +635,7 @@ get_default_language (void)
|
||||
if (!locale)
|
||||
locale = g_getenv ("LANG") ? g_getenv ("LANG") : "en";
|
||||
|
||||
/* we might end up with something like "en_US.UTF-8". We will try to
|
||||
/* we might end up with something like "en_US.UTF-8". We will try to
|
||||
* search for "en_US"; if it fails we search for "en".
|
||||
*/
|
||||
lang = g_strdup (locale);
|
||||
@@ -735,7 +735,7 @@ load_default_config(void)
|
||||
memset (&prefs, 0, sizeof (struct hexchatprefs));
|
||||
|
||||
/* put in default values, anything left out is automatically zero */
|
||||
|
||||
|
||||
/* BOOLEANS */
|
||||
prefs.hex_away_show_once = 1;
|
||||
prefs.hex_away_track = 1;
|
||||
@@ -918,7 +918,7 @@ make_config_dirs (void)
|
||||
|
||||
if (g_mkdir_with_parents (get_xdir (), 0700) != 0)
|
||||
return -1;
|
||||
|
||||
|
||||
buf = g_build_filename (get_xdir (), "addons", NULL);
|
||||
if (g_mkdir (buf, 0700) != 0)
|
||||
{
|
||||
@@ -926,7 +926,7 @@ make_config_dirs (void)
|
||||
return -1;
|
||||
}
|
||||
g_free (buf);
|
||||
|
||||
|
||||
buf = g_build_filename (get_xdir (), HEXCHAT_SOUND_DIR, NULL);
|
||||
if (g_mkdir (buf, 0700) != 0)
|
||||
{
|
||||
@@ -983,7 +983,7 @@ load_config (void)
|
||||
i++;
|
||||
}
|
||||
while (vars[i].name);
|
||||
|
||||
|
||||
g_free (cfg);
|
||||
|
||||
if (prefs.hex_gui_win_height < 138)
|
||||
@@ -1009,7 +1009,7 @@ save_config (void)
|
||||
|
||||
config = default_file ();
|
||||
new_config = g_strconcat (config, ".new", NULL);
|
||||
|
||||
|
||||
fh = g_open (new_config, OFLAGS | O_TRUNC | O_WRONLY | O_CREAT, 0600);
|
||||
if (fh == -1)
|
||||
{
|
||||
@@ -1023,7 +1023,7 @@ save_config (void)
|
||||
g_free (new_config);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
i = 0;
|
||||
do
|
||||
{
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
noinst_LIBRARIES = libhexchatdbus.a
|
||||
libhexchatdbus_a_SOURCES = \
|
||||
dbus-plugin.c \
|
||||
dbus-plugin.h \
|
||||
dbus-client.c \
|
||||
dbus-client.h
|
||||
|
||||
EXTRA_DIST = \
|
||||
remote-object.xml \
|
||||
example.py \
|
||||
org.hexchat.service.service.in
|
||||
|
||||
BUILT_SOURCES = \
|
||||
remote-object-glue.h
|
||||
|
||||
# Dbus service file
|
||||
servicedir = $(DBUS_SERVICES_DIR)
|
||||
service_in_files = org.hexchat.service.service.in
|
||||
service_DATA = $(service_in_files:.service.in=.service)
|
||||
|
||||
CLEANFILES = $(BUILT_SOURCES) $(service_DATA)
|
||||
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/src/common $(COMMON_CFLAGS) $(DBUS_CFLAGS)
|
||||
|
||||
noinst_PROGRAMS = example
|
||||
example_SOURCES = example.c
|
||||
example_LDADD = $(DBUS_LIBS) $(GLIB_LIBS)
|
||||
|
||||
remote-object-glue.h: remote-object.xml
|
||||
$(AM_V_GEN) $(LIBTOOL) --mode=execute $(DBUS_BINDING_TOOL) --prefix=remote_object --mode=glib-server --output=$@ $<
|
||||
|
||||
# Rule to make the service file with bindir expanded
|
||||
$(service_DATA): $(service_in_files) Makefile
|
||||
@sed -e "s|\@bindir\@|$(bindir)|" $< > $@
|
||||
|
||||
44
src/common/dbus/meson.build
Normal file
44
src/common/dbus/meson.build
Normal file
@@ -0,0 +1,44 @@
|
||||
dbus_deps = [
|
||||
dependency('dbus-glib-1')
|
||||
]
|
||||
|
||||
dbus_sources = [
|
||||
'dbus-plugin.c',
|
||||
'dbus-client.c'
|
||||
]
|
||||
|
||||
dbus_includes = [
|
||||
include_directories('..'),
|
||||
config_h_include
|
||||
]
|
||||
|
||||
dbus_service_dir = join_paths(get_option('datadir'), 'dbus-1/services')
|
||||
|
||||
dbus_conf = configuration_data()
|
||||
dbus_conf.set('bindir', join_paths(get_option('prefix'), get_option('bindir')))
|
||||
configure_file(
|
||||
input: 'org.hexchat.service.service.in',
|
||||
output: 'org.hexchat.service.service',
|
||||
configuration: dbus_conf,
|
||||
install: true,
|
||||
install_dir: dbus_service_dir
|
||||
)
|
||||
|
||||
dbus_binding_tool = find_program('dbus-binding-tool')
|
||||
dbus_remote_object = custom_target('remote-object-glue',
|
||||
input: 'remote-object.xml',
|
||||
output: 'remote-object-glue.h',
|
||||
command: [dbus_binding_tool, '--prefix=remote_object', '--mode=glib-server',
|
||||
'--output=@OUTPUT@', '@INPUT@']
|
||||
)
|
||||
|
||||
hexchat_dbus = static_library('hexchatdbus',
|
||||
sources: [dbus_remote_object, marshal] + dbus_sources,
|
||||
dependencies: common_deps + dbus_deps,
|
||||
include_directories: dbus_includes,
|
||||
pic: true
|
||||
)
|
||||
|
||||
hexchat_dbus_dep = declare_dependency(
|
||||
link_with: hexchat_dbus
|
||||
)
|
||||
55
src/common/make-te.py
Executable file
55
src/common/make-te.py
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
|
||||
inf = open(sys.argv[1])
|
||||
eventf = open(sys.argv[2], 'w')
|
||||
enumsf = open(sys.argv[3], 'w')
|
||||
|
||||
enumsf.write(\
|
||||
'''
|
||||
/* this file is auto generated, edit textevents.in instead! */
|
||||
|
||||
enum
|
||||
{
|
||||
''')
|
||||
|
||||
eventf.write(\
|
||||
'''
|
||||
/* this file is auto generated, edit textevents.in instead! */
|
||||
|
||||
const struct text_event te[] = {
|
||||
''')
|
||||
|
||||
try:
|
||||
while True:
|
||||
name = inf.readline().strip()
|
||||
event_enum = inf.readline().strip()
|
||||
event_help = inf.readline().strip()
|
||||
event_str = inf.readline().strip()
|
||||
args = inf.readline().strip()
|
||||
translate = True
|
||||
|
||||
if args[0] == 'n':
|
||||
args = int(args[1]) | 128
|
||||
translate = False
|
||||
else:
|
||||
args = int(args)
|
||||
|
||||
if translate:
|
||||
event_str = 'N_("%s")' %event_str
|
||||
else:
|
||||
event_str = '"%s"' %event_str
|
||||
|
||||
enumsf.write('\t%s,\n' %event_enum)
|
||||
eventf.write('\n{"%s", %s, %u,\n%s},\n' %(
|
||||
name, event_help, args, event_str,
|
||||
))
|
||||
|
||||
inf.readline() # whitespace
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
enumsf.write('\tNUM_XP\n};\n')
|
||||
eventf.write('};\n')
|
||||
|
||||
116
src/common/meson.build
Normal file
116
src/common/meson.build
Normal file
@@ -0,0 +1,116 @@
|
||||
common_sources = [
|
||||
'cfgfiles.c',
|
||||
'chanopt.c',
|
||||
'ctcp.c',
|
||||
'dcc.c',
|
||||
'hexchat.c',
|
||||
'history.c',
|
||||
'ignore.c',
|
||||
'inbound.c',
|
||||
'modes.c',
|
||||
'network.c',
|
||||
'notify.c',
|
||||
'outbound.c',
|
||||
'plugin.c',
|
||||
'plugin-identd.c',
|
||||
'plugin-timer.c',
|
||||
'proto-irc.c',
|
||||
'server.c',
|
||||
'servlist.c',
|
||||
'text.c',
|
||||
'tree.c',
|
||||
'url.c',
|
||||
'userlist.c',
|
||||
'util.c'
|
||||
]
|
||||
|
||||
common_deps = [
|
||||
libgio_dep,
|
||||
]
|
||||
|
||||
common_includes = [
|
||||
config_h_include,
|
||||
include_directories('.')
|
||||
]
|
||||
|
||||
common_cflags = [
|
||||
'-DHAVE_CONFIG_H',
|
||||
]
|
||||
|
||||
if host_machine.system() == 'windows'
|
||||
common_deps += [
|
||||
cc.find_library('ws2_32'), # winsock
|
||||
cc.find_library('winmm'), # playsound
|
||||
cc.find_library('wbemuuid'), # sysinfo
|
||||
]
|
||||
|
||||
common_sources += 'sysinfo/win32/backend.c'
|
||||
common_includes += include_directories('sysinfo')
|
||||
endif
|
||||
|
||||
marshal = gnome.genmarshal('marshal',
|
||||
sources: 'marshalers.list',
|
||||
prefix: '_hexchat_marshal',
|
||||
internal: true
|
||||
)
|
||||
|
||||
make_te = find_program('make-te.py')
|
||||
|
||||
textevents = custom_target('textevents',
|
||||
input: 'textevents.in',
|
||||
output: ['textevents.h', 'textenums.h'],
|
||||
command: [make_te, '@INPUT@', '@OUTPUT0@', '@OUTPUT1@']
|
||||
)
|
||||
|
||||
# TODO:
|
||||
# LOOKUPD
|
||||
# SIGACTION
|
||||
# HAVE_GTK_MAC
|
||||
|
||||
if get_option('with-ssl')
|
||||
common_sources += 'ssl.c'
|
||||
common_deps += libssl_dep
|
||||
endif
|
||||
|
||||
if get_option('with-libproxy')
|
||||
common_deps += dependency('libproxy-1.0')
|
||||
endif
|
||||
|
||||
if get_option('with-libcanberra')
|
||||
common_deps += dependency('libcanberra', version: '>= 0.22')
|
||||
endif
|
||||
|
||||
if get_option('with-dbus')
|
||||
subdir('dbus')
|
||||
common_deps += hexchat_dbus_dep
|
||||
common_includes += include_directories('dbus')
|
||||
endif
|
||||
|
||||
if get_option('with-plugin')
|
||||
common_deps += libgmodule_dep
|
||||
common_cflags += '-DHEXCHATLIBDIR="@0@"'.format(join_paths(get_option('prefix'),
|
||||
get_option('libdir'),
|
||||
'hexchat/plugins'))
|
||||
|
||||
install_headers('hexchat-plugin.h')
|
||||
endif
|
||||
|
||||
hexchat_common = static_library('hexchatcommon',
|
||||
sources: [textevents] + marshal + common_sources,
|
||||
include_directories: config_h_include,
|
||||
dependencies: common_deps,
|
||||
c_args: common_cflags,
|
||||
pic: true
|
||||
)
|
||||
|
||||
hexchat_common_dep = declare_dependency(
|
||||
link_with: hexchat_common,
|
||||
include_directories: common_includes,
|
||||
compile_args: common_cflags,
|
||||
dependencies: libgio_dep,
|
||||
)
|
||||
|
||||
hexchat_plugin_dep = declare_dependency(
|
||||
include_directories: common_includes,
|
||||
compile_args: common_cflags,
|
||||
)
|
||||
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <wchar.h>
|
||||
#include <windows.h>
|
||||
#include <wbemidl.h>
|
||||
|
||||
@@ -41,17 +42,17 @@ typedef enum
|
||||
QUERY_WMI_HDD,
|
||||
} QueryWmiType;
|
||||
|
||||
char *query_wmi (QueryWmiType mode);
|
||||
char *read_os_name (IWbemClassObject *object);
|
||||
char *read_cpu_info (IWbemClassObject *object);
|
||||
char *read_vga_name (IWbemClassObject *object);
|
||||
static char *query_wmi (QueryWmiType mode);
|
||||
static char *read_os_name (IWbemClassObject *object);
|
||||
static char *read_cpu_info (IWbemClassObject *object);
|
||||
static char *read_vga_name (IWbemClassObject *object);
|
||||
|
||||
guint64 hdd_capacity;
|
||||
guint64 hdd_free_space;
|
||||
char *read_hdd_info (IWbemClassObject *object);
|
||||
static guint64 hdd_capacity;
|
||||
static guint64 hdd_free_space;
|
||||
static char *read_hdd_info (IWbemClassObject *object);
|
||||
|
||||
char *bstr_to_utf8 (BSTR bstr);
|
||||
guint64 variant_to_uint64 (VARIANT *variant);
|
||||
static char *bstr_to_utf8 (BSTR bstr);
|
||||
static guint64 variant_to_uint64 (VARIANT *variant);
|
||||
|
||||
char *
|
||||
sysinfo_get_cpu (void)
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
#include <ctype.h>
|
||||
#include "util.h"
|
||||
|
||||
#if defined (USING_FREEBSD) || defined (__APPLE__)
|
||||
#if defined (__FreeBSD__) || defined (__APPLE__)
|
||||
#include <sys/sysctl.h>
|
||||
#endif
|
||||
|
||||
@@ -360,13 +360,13 @@ strip_hidden_attribute (char *src, char *dst)
|
||||
return len;
|
||||
}
|
||||
|
||||
#if defined (USING_LINUX) || defined (USING_FREEBSD) || defined (__APPLE__) || defined (__CYGWIN__)
|
||||
#if defined (__linux__) || defined (__FreeBSD__) || defined (__APPLE__) || defined (__CYGWIN__)
|
||||
|
||||
static void
|
||||
get_cpu_info (double *mhz, int *cpus)
|
||||
{
|
||||
|
||||
#if defined(USING_LINUX) || defined (__CYGWIN__)
|
||||
#if defined(__linux__) || defined (__CYGWIN__)
|
||||
|
||||
char buf[256];
|
||||
int fh;
|
||||
@@ -404,7 +404,7 @@ get_cpu_info (double *mhz, int *cpus)
|
||||
*cpus = 1;
|
||||
|
||||
#endif
|
||||
#ifdef USING_FREEBSD
|
||||
#ifdef __FreeBSD__
|
||||
|
||||
int mib[2], ncpu;
|
||||
u_long freq;
|
||||
@@ -495,7 +495,7 @@ get_sys_str (int with_cpu)
|
||||
char *
|
||||
get_sys_str (int with_cpu)
|
||||
{
|
||||
#if defined (USING_LINUX) || defined (USING_FREEBSD) || defined (__APPLE__) || defined (__CYGWIN__)
|
||||
#if defined (__linux__) || defined (__FreeBSD__) || defined (__APPLE__) || defined (__CYGWIN__)
|
||||
double mhz;
|
||||
#endif
|
||||
int cpus = 1;
|
||||
@@ -507,7 +507,7 @@ get_sys_str (int with_cpu)
|
||||
|
||||
uname (&un);
|
||||
|
||||
#if defined (USING_LINUX) || defined (USING_FREEBSD) || defined (__APPLE__) || defined (__CYGWIN__)
|
||||
#if defined (__linux__) || defined (__FreeBSD__) || defined (__APPLE__) || defined (__CYGWIN__)
|
||||
get_cpu_info (&mhz, &cpus);
|
||||
if (mhz && with_cpu)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user