diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/dleyna-core')
3 files changed, 152 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/dleyna-core/0001-Search-connectors-in-DLEYNA_CONNECTOR_PATH.patch b/nixpkgs/pkgs/development/libraries/dleyna-core/0001-Search-connectors-in-DLEYNA_CONNECTOR_PATH.patch new file mode 100644 index 000000000000..cc50c1598005 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/dleyna-core/0001-Search-connectors-in-DLEYNA_CONNECTOR_PATH.patch @@ -0,0 +1,95 @@ +From bf549a028a5da122b7a4206529711b969c2ecd48 Mon Sep 17 00:00:00 2001 +From: Jan Tojnar <jtojnar@gmail.com> +Date: Fri, 1 Sep 2017 13:49:06 +0200 +Subject: [PATCH] Search connectors in DLEYNA_CONNECTOR_PATH + +Previously, the connectors would only be looked for in a single +directory, specified during compilation. This patch allows to +traverse a list of directories provided by an environment variable. +--- + libdleyna/core/connector-mgr.c | 63 ++++++++++++++++++++++++++++-------------- + 1 file changed, 42 insertions(+), 21 deletions(-) + +diff --git a/libdleyna/core/connector-mgr.c b/libdleyna/core/connector-mgr.c +index eafb16c..8041c67 100644 +--- a/libdleyna/core/connector-mgr.c ++++ b/libdleyna/core/connector-mgr.c +@@ -34,33 +34,54 @@ const dleyna_connector_t *dleyna_connector_mgr_load(const gchar *name) + const dleyna_connector_t *connector; + dleyna_connector_get_interface_t get_interface; + gchar *path; ++ const gchar *connector_path; ++ gchar **connector_path_list; ++ gsize i; + + DLEYNA_LOG_DEBUG("Enter"); + +- path = g_strdup_printf("%s/%s%s.so", CONNECTOR_DIR, +- DLEYNA_CONNECTOR_LIB_PATTERN, name); +- module = g_module_open(path, G_MODULE_BIND_LAZY); +- g_free(path); ++ connector_path = g_getenv ("DLEYNA_CONNECTOR_PATH"); ++ if (!connector_path) { ++ DLEYNA_LOG_DEBUG ("DLEYNA_CONNECTOR_PATH not set"); ++ connector_path = CONNECTOR_DIR; ++ } else { ++ DLEYNA_LOG_DEBUG ("DLEYNA_CONNECTOR_PATH set to %s", connector_path); ++ } ++ ++ connector_path_list = g_strsplit (connector_path, G_SEARCHPATH_SEPARATOR_S, 0); ++ ++ for (i = 0; connector_path_list[i]; i++) { ++ path = g_strdup_printf("%s/%s%s.so", connector_path_list[i], ++ DLEYNA_CONNECTOR_LIB_PATTERN, name); ++ module = g_module_open(path, G_MODULE_BIND_LAZY); ++ g_free(path); ++ ++ if (module) { ++ if (!g_connectors) ++ g_connectors = g_hash_table_new(g_direct_hash, ++ g_direct_equal); ++ ++ if (g_module_symbol(module, "dleyna_connector_get_interface", ++ (gpointer *)&get_interface)) { ++ connector = get_interface(); ++ g_hash_table_insert(g_connectors, (gpointer)connector, ++ module); ++ ++ break; ++ } else { ++ connector = NULL; ++ g_module_close(module); ++ DLEYNA_LOG_CRITICAL( ++ "Connector '%s' entry point not found", ++ name); ++ } + +- if (module) { +- if (!g_connectors) +- g_connectors = g_hash_table_new(g_direct_hash, +- g_direct_equal); +- +- if (g_module_symbol(module, "dleyna_connector_get_interface", +- (gpointer *)&get_interface)) { +- connector = get_interface(); +- g_hash_table_insert(g_connectors, (gpointer)connector, +- module); +- } else { +- connector = NULL; +- g_module_close(module); +- DLEYNA_LOG_CRITICAL( +- "Connector '%s' entry point not found", +- name); + } ++ } + +- } else { ++ g_strfreev (connector_path_list); ++ ++ if (!module) { + connector = NULL; + DLEYNA_LOG_CRITICAL("Connector '%s' not found", name); + } +-- +2.14.1 + diff --git a/nixpkgs/pkgs/development/libraries/dleyna-core/default.nix b/nixpkgs/pkgs/development/libraries/dleyna-core/default.nix new file mode 100644 index 000000000000..1f0a9bc7c597 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/dleyna-core/default.nix @@ -0,0 +1,49 @@ +{ stdenv +, fetchFromGitHub +, fetchpatch +, autoreconfHook +, pkgconfig +, gupnp +}: + +stdenv.mkDerivation rec { + pname = "dleyna-core"; + version = "0.6.0"; + + setupHook = ./setup-hook.sh; + + src = fetchFromGitHub { + owner = "01org"; + repo = pname; + rev = "v${version}"; + sha256 = "1x5vj5zfk95avyg6g3nf6gar250cfrgla2ixj2ifn8pcick2d9vq"; + }; + + patches = [ + ./0001-Search-connectors-in-DLEYNA_CONNECTOR_PATH.patch + + # fix build with gupnp 1.2 + # https://github.com/intel/dleyna-core/pull/52 + (fetchpatch { + url = "https://github.com/intel/dleyna-core/commit/41b2e56f67b6fc9c8c256b86957d281644b9b846.patch"; + sha256 = "1h758cp65v7qyfpvyqdri7q0gwx85mhdpkb2y8waq735q5q9ib39"; + }) + ]; + + nativeBuildInputs = [ + autoreconfHook + pkgconfig + ]; + + propagatedBuildInputs = [ + gupnp + ]; + + meta = with stdenv.lib; { + description = "Library of utility functions that are used by the higher level dLeyna"; + homepage = "https://01.org/dleyna"; + maintainers = [ maintainers.jtojnar ]; + platforms = platforms.linux; + license = licenses.lgpl21; + }; +} diff --git a/nixpkgs/pkgs/development/libraries/dleyna-core/setup-hook.sh b/nixpkgs/pkgs/development/libraries/dleyna-core/setup-hook.sh new file mode 100644 index 000000000000..287ad4dc1897 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/dleyna-core/setup-hook.sh @@ -0,0 +1,8 @@ +addDleynaConnectorPath () { + if test -d "$1/lib/dleyna-1.0/connectors" + then + export DLEYNA_CONNECTOR_PATH="${DLEYNA_CONNECTOR_PATH-}${DLEYNA_CONNECTOR_PATH:+:}$1/lib/dleyna-1.0/connectors" + fi +} + +addEnvHooks "$targetOffset" addDleynaConnectorPath |