From de6ef60063227678a35485060d33c5ab6c918eac Mon Sep 17 00:00:00 2001
From: Niels Sascha Reedijk <niels.reedijk@gmail.com>
Date: Sun, 29 Sep 2013 17:35:14 +0200
Subject: [PATCH 1/3] Always use dlopen and dlsym to load libsolv
Previous implementation used weak symbols on all platforms except Haiku. Mac OS X also does not support this use of weak symbols. In the discussion of #10028 it was decided that probably more platforms will have problems with this approach, so instead use the approach that always works.
---
src/kits/package/solver/LibsolvSolver.cpp | 16 ----------------
src/kits/package/solver/Solver.cpp | 15 ---------------
2 files changed, 31 deletions(-)
diff --git a/src/kits/package/solver/LibsolvSolver.cpp b/src/kits/package/solver/LibsolvSolver.cpp
index a3ecbb7..12a4b6a 100644
a
|
b
|
|
38 | 38 | // abort()s. Obviously that isn't good behavior for a library. |
39 | 39 | |
40 | 40 | |
41 | | #ifdef __HAIKU__ |
42 | | |
43 | | |
44 | 41 | BSolver* |
45 | 42 | BPackageKit::create_solver() |
46 | 43 | { |
… |
… |
BPackageKit::create_solver()
|
48 | 45 | } |
49 | 46 | |
50 | 47 | |
51 | | #else |
52 | | |
53 | | |
54 | | extern "C" BSolver* |
55 | | __create_libsolv_solver() |
56 | | { |
57 | | return new(std::nothrow) LibsolvSolver; |
58 | | } |
59 | | |
60 | | |
61 | | #endif |
62 | | |
63 | | |
64 | 48 | struct LibsolvSolver::SolvQueue : Queue { |
65 | 49 | SolvQueue() |
66 | 50 | { |
diff --git a/src/kits/package/solver/Solver.cpp b/src/kits/package/solver/Solver.cpp
index e6984cd..7f5c630 100644
a
|
b
|
|
13 | 13 | typedef BPackageKit::BSolver* CreateSolverFunction(); |
14 | 14 | |
15 | 15 | |
16 | | #ifdef __HAIKU__ |
17 | | |
18 | | |
19 | 16 | #include <dlfcn.h> |
20 | 17 | #include <pthread.h> |
21 | 18 | |
… |
… |
load_libsolv_solver_add_on()
|
41 | 38 | dlclose(imageHandle); |
42 | 39 | } |
43 | 40 | |
44 | | #else |
45 | | |
46 | | |
47 | | static BPackageKit::BSolver* __create_libsolv_solver() |
48 | | __attribute__((weakref("__create_libsolv_solver"))); |
49 | | static CreateSolverFunction* sCreateSolver = &__create_libsolv_solver; |
50 | | |
51 | | |
52 | | #endif |
53 | | |
54 | 41 | |
55 | 42 | namespace BPackageKit { |
56 | 43 | |
… |
… |
BSolver::~BSolver()
|
68 | 55 | /*static*/ status_t |
69 | 56 | BSolver::Create(BSolver*& _solver) |
70 | 57 | { |
71 | | #ifdef __HAIKU__ |
72 | 58 | pthread_once(&sLoadLibsolvSolverAddOnInitOnce, &load_libsolv_solver_add_on); |
73 | | #endif |
74 | 59 | if (sCreateSolver == NULL) |
75 | 60 | return B_NOT_SUPPORTED; |
76 | 61 | |