Make FHS compliant, split RPMs, fix compilation on older GCCs

This commit is contained in:
Marvin W 2017-04-03 14:10:17 +02:00
parent 22adbd38dc
commit 8248cfcbb2
No known key found for this signature in database
GPG key ID: 072E9235DB996F2A
8 changed files with 97 additions and 37 deletions

View file

@ -36,7 +36,7 @@ set_path(DESKTOP_FILE_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/applications" "Instal
set_path(ICON_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/icons" "Installation directory for icons") set_path(ICON_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/icons" "Installation directory for icons")
set_path(INCLUDE_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/include" "Installation directory for C header files") set_path(INCLUDE_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/include" "Installation directory for C header files")
set_path(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/${LIBDIR_NAME}" "Installation directory for object code libraries") set_path(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/${LIBDIR_NAME}" "Installation directory for object code libraries")
set_path(PLUGIN_INSTALL_DIR "${DATA_INSTALL_DIR}/plugins" "Installation directory for dino plugin object code files") set_path(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/dino/plugins" "Installation directory for dino plugin object code files")
set_path(VAPI_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/vala/vapi" "Installation directory for Vala API files") set_path(VAPI_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/vala/vapi" "Installation directory for Vala API files")
set(TARGET_INSTALL LIBRARY DESTINATION ${LIB_INSTALL_DIR} RUNTIME DESTINATION ${BIN_INSTALL_DIR} PUBLIC_HEADER DESTINATION ${INCLUDE_INSTALL_DIR} ARCHIVE DESTINATION ${LIB_INSTALL_DIR}) set(TARGET_INSTALL LIBRARY DESTINATION ${LIB_INSTALL_DIR} RUNTIME DESTINATION ${BIN_INSTALL_DIR} PUBLIC_HEADER DESTINATION ${INCLUDE_INSTALL_DIR} ARCHIVE DESTINATION ${LIB_INSTALL_DIR})

View file

@ -22,9 +22,9 @@
%global shortcommit %(c=%{commit}; echo ${c:0:7}) %global shortcommit %(c=%{commit}; echo ${c:0:7})
Name: dino Name: dino
Version: 0 Version: 0.0
Release: 0%{?dist} Release: 1%{?dist}
#Release: 0.git.%{shortcommit}%{?dist} #Release: 1.git.%{shortcommit}%{?dist}
Summary: Modern Jabber/XMPP Client using GTK+/Vala Summary: Modern Jabber/XMPP Client using GTK+/Vala
License: GPLv3 License: GPLv3
URL: https://github.com/dino/dino URL: https://github.com/dino/dino
@ -46,6 +46,10 @@ BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(openssl) BuildRequires: pkgconfig(openssl)
BuildRequires: gpgme-devel BuildRequires: gpgme-devel
Requires: hicolor-icon-theme Requires: hicolor-icon-theme
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
# Technically these aren't requirements, we just want them always installed...
Requires: %{name}-plugin-omemo%{?_isa} = %{version}-%{release}
Requires: %{name}-plugin-openpgp%{?_isa} = %{version}-%{release}
%description %description
Dino is an instant messaging client for the Jabber/XMPP network, Dino is an instant messaging client for the Jabber/XMPP network,
@ -56,14 +60,36 @@ for XMPP's latest encryption features. Future versions will provide
a plug-in API, so that developers can easily add new optional a plug-in API, so that developers can easily add new optional
features. features.
%package devel %package libs
Summary: Development files for %{name} Summary: Libraries for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel %package libs-devel
The %{name}-devel package contains libraries and header files for Summary: Development files for %{name}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%package plugin-omemo
Summary: OMEMO plugin for %{name}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%package plugin-openpgp
Summary: OMEMO plugin for %{name}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description libs
The %{name}-libs package contains libraries used and provided by %{name}.
%description libs-devel
The %{name}-libs-devel package contains libraries and header files for
developing plugins for %{name}. developing plugins for %{name}.
%description plugin-omemo
The %{name}-plugin-omemo package contains a plugin that adds support for
OMEMO encryption to Dino.
%description plugin-openpgp
The %{name}-plugin-openpgp package contains a plugin that adds support for
OpenPGP encryption to Dino.
%prep %prep
%setup -n "dino-v%{version}" %setup -n "dino-v%{version}"
#%setup -n "dino-%{commit}" #%setup -n "dino-%{commit}"
@ -85,31 +111,62 @@ update-desktop-database &> /dev/null || :
if [ $1 -eq 0 ] ; then if [ $1 -eq 0 ] ; then
touch --no-create %{_datadir}/icons/hicolor &>/dev/null touch --no-create %{_datadir}/icons/hicolor &>/dev/null
gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor &>/dev/null || : gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor &>/dev/null || :
glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
fi fi
%posttrans %posttrans
gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor &>/dev/null || : gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor &>/dev/null || :
%post libs
/sbin/ldconfig
if [ $1 -eq 0 ] ; then
glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
fi
%postun libs
/sbin/ldconfig
%posttrans libs
glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
%files %files
%license LICENSE %license LICENSE
%doc README.md %doc README.md
%{_bindir}/dino %{_bindir}/dino
%{_libdir}/libdino.so
%{_libdir}/libqlite.so
%{_libdir}/libxmpp-vala.so
%{_datadir}/dino
%{_datadir}/applications/dino.desktop %{_datadir}/applications/dino.desktop
%{_datadir}/glib-2.0/schemas/dino.gschema.xml
%{_datadir}/icons/hicolor/*/apps/dino.* %{_datadir}/icons/hicolor/*/apps/dino.*
%{_datadir}/icons/hicolor/*/apps/dino-* %{_datadir}/icons/hicolor/*/apps/dino-*
%{_datadir}/icons/hicolor/*/status/dino-* %{_datadir}/icons/hicolor/*/status/dino-*
%files devel %files libs
%license LICENSE
%doc README.md
%{_datadir}/glib-2.0/schemas/dino.gschema.xml
%{_libdir}/libdino.so.*
%{_libdir}/libqlite.so.*
%{_libdir}/libxmpp-vala.so.*
%files libs-devel
%license LICENSE
%doc README.md
%{_includedir}/* %{_includedir}/*
%{_libdir}/libdino.so
%{_libdir}/libqlite.so
%{_libdir}/libxmpp-vala.so
%{_datadir}/vala/vapi %{_datadir}/vala/vapi
%files plugin-omemo
%license LICENSE
%doc README.md
%{_libdir}/dino/plugins/omemo.so
%files plugin-openpgp
%license LICENSE
%doc README.md
%{_libdir}/dino/plugins/openpgp.so
%changelog %changelog
* Fri Mar 24 2017 - 0.0 * Mon Apr 3 2017 - 0.0-1
- Split packages
* Fri Mar 24 2017 - 0.0-0
- Initial version - Initial version

View file

@ -54,11 +54,11 @@ GENERATE_HEADER
dino dino
) )
add_definitions(${VALA_CFLAGS}) add_definitions(${VALA_CFLAGS} -DDINO_PLUGINS_SYSTEM_PLUGIN_DIR="${PLUGIN_INSTALL_DIR}" -DDINO_PLUGINS_SYSTEM_LIBDIR_NAME="${LIBDIR_NAME}")
add_library(libdino SHARED ${LIBDINO_VALA_C}) add_library(libdino SHARED ${LIBDINO_VALA_C})
add_dependencies(libdino xmpp-vala-vapi qlite-vapi) add_dependencies(libdino xmpp-vala-vapi qlite-vapi)
target_link_libraries(libdino xmpp-vala qlite ${LIBDINO_PACKAGES} -lm) target_link_libraries(libdino xmpp-vala qlite ${LIBDINO_PACKAGES} m)
set_target_properties(libdino PROPERTIES PREFIX "") set_target_properties(libdino PROPERTIES PREFIX "" VERSION 0.0 SOVERSION 0)
add_custom_target(dino-vapi add_custom_target(dino-vapi
DEPENDS DEPENDS

View file

@ -1,5 +1,8 @@
namespace Dino.Plugins { namespace Dino.Plugins {
private extern const string SYSTEM_LIBDIR_NAME;
private extern const string SYSTEM_PLUGIN_DIR;
private class Info : Object { private class Info : Object {
public Module module; public Module module;
public Type gtype; public Type gtype;
@ -19,30 +22,28 @@ public class Loader : Object {
private Info[] infos = new Info[0]; private Info[] infos = new Info[0];
public Loader(string? exec_str = null) { public Loader(string? exec_str = null) {
search_paths += Application.get_storage_dir(); if (Environment.get_variable("DINO_PLUGIN_DIR") != null) {
search_paths += Environment.get_variable("DINO_PLUGIN_DIR");
}
search_paths += Path.build_filename(Environment.get_home_dir(), ".local", "lib", "dino", "plugins");
string? exec_path = exec_str; string? exec_path = exec_str;
if (exec_path != null) { if (exec_path != null) {
if (!exec_path.contains(Path.DIR_SEPARATOR_S)) { if (!exec_path.contains(Path.DIR_SEPARATOR_S)) {
exec_path = Environment.find_program_in_path(exec_str); exec_path = Environment.find_program_in_path(exec_str);
} }
// TODO: more robust is detection if installed if (Path.get_dirname(exec_path).contains("dino") || Path.get_dirname(exec_path) == "." || Path.get_dirname(exec_path).contains("build")) {
if (!exec_path.has_prefix("/usr/")) { search_paths += Path.build_filename(Path.get_dirname(exec_path), "plugins");
search_paths += Path.get_dirname(exec_path);
} }
}
foreach (string dir in Environment.get_system_data_dirs()) {
search_paths += Path.build_filename(dir, "dino");
}
if (exec_path != null) {
if (Path.get_basename(Path.get_dirname(exec_path)) == "bin") { if (Path.get_basename(Path.get_dirname(exec_path)) == "bin") {
search_paths += Path.build_filename(Path.get_dirname(Path.get_dirname(exec_path)), "share", "dino"); search_paths += Path.build_filename(Path.get_dirname(Path.get_dirname(exec_path)), SYSTEM_LIBDIR_NAME, "dino", "plugins");
} }
} }
search_paths += SYSTEM_PLUGIN_DIR;
} }
public void print_search_paths() { public void print_search_paths() {
foreach (string prefix in search_paths) { foreach (string prefix in search_paths) {
print(@"$prefix/plugins\n"); print(@"$prefix\n");
} }
} }
@ -54,7 +55,7 @@ public class Loader : Object {
Module module = null; Module module = null;
string path = ""; string path = "";
foreach (string prefix in search_paths) { foreach (string prefix in search_paths) {
path = Path.build_filename(prefix, "plugins", name); path = Path.build_filename(prefix, name);
module = Module.open (path, ModuleFlags.BIND_LAZY); module = Module.open (path, ModuleFlags.BIND_LAZY);
if (module != null) break; if (module != null) break;
} }

View file

@ -16,10 +16,10 @@ void main(string[] args) {
Gtk.init(ref args); Gtk.init(ref args);
Dino.Ui.Application app = new Dino.Ui.Application(); Dino.Ui.Application app = new Dino.Ui.Application();
app.add_main_option("show-plugin-paths", 0, 0, OptionArg.NONE, "Display plugin search paths and exit", null); app.add_main_option("plugin-paths", 0, 0, OptionArg.NONE, "Display plugin search paths and exit", null);
app.handle_local_options.connect((options) => { app.handle_local_options.connect((options) => {
Variant v = options.lookup_value("show-plugin-paths", VariantType.BOOLEAN); Variant v = options.lookup_value("plugin-paths", VariantType.BOOLEAN);
if (v != null && v.get_type() == VariantType.BOOLEAN && v.get_boolean()) { if (v != null && v.get_boolean()) {
loader.print_search_paths(); loader.print_search_paths();
return 0; return 0;
} }

View file

@ -34,7 +34,7 @@ set(CFLAGS ${VALA_CFLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}/libsignal-protocol-c/src
add_definitions(${CFLAGS}) add_definitions(${CFLAGS})
add_library(signal-protocol-vala ${SIGNAL_PROTOCOL_VALA_C} ${CMAKE_CURRENT_SOURCE_DIR}/src/signal_helper.c) add_library(signal-protocol-vala ${SIGNAL_PROTOCOL_VALA_C} ${CMAKE_CURRENT_SOURCE_DIR}/src/signal_helper.c)
add_dependencies(signal-protocol-vala signal-protocol-c) add_dependencies(signal-protocol-vala signal-protocol-c)
target_link_libraries(signal-protocol-vala ${SIGNAL_PROTOCOL_PACKAGES} ${OPENSSL_CRYPTO_LIBRARY} signal-protocol-c -lm) target_link_libraries(signal-protocol-vala ${SIGNAL_PROTOCOL_PACKAGES} ${OPENSSL_CRYPTO_LIBRARY} signal-protocol-c m)
set_property(TARGET signal-protocol-vala PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET signal-protocol-vala PROPERTY POSITION_INDEPENDENT_CODE ON)
set(SIGNAL_PROTOCOL_C_HEADERS set(SIGNAL_PROTOCOL_C_HEADERS

View file

@ -28,6 +28,7 @@ GENERATE_HEADER
add_definitions(${VALA_CFLAGS}) add_definitions(${VALA_CFLAGS})
add_library(qlite SHARED ${QLITE_VALA_C}) add_library(qlite SHARED ${QLITE_VALA_C})
target_link_libraries(qlite ${QLITE_PACKAGES}) target_link_libraries(qlite ${QLITE_PACKAGES})
set_target_properties(qlite PROPERTIES VERSION 0.1 SOVERSION 0)
add_custom_target(qlite-vapi add_custom_target(qlite-vapi
DEPENDS DEPENDS

View file

@ -67,6 +67,7 @@ GENERATE_HEADER
add_definitions(${VALA_CFLAGS}) add_definitions(${VALA_CFLAGS})
add_library(xmpp-vala SHARED ${ENGINE_VALA_C}) add_library(xmpp-vala SHARED ${ENGINE_VALA_C})
target_link_libraries(xmpp-vala ${ENGINE_PACKAGES}) target_link_libraries(xmpp-vala ${ENGINE_PACKAGES})
set_target_properties(xmpp-vala PROPERTIES VERSION 0.1 SOVERSION 0)
add_custom_target(xmpp-vala-vapi add_custom_target(xmpp-vala-vapi
DEPENDS DEPENDS