CELIX-347: Improves dependency manager linking, so library with undefined 
symbols are not expected (for Linux)


Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/0251da23
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/0251da23
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/0251da23

Branch: refs/heads/release/celix-2.0.0
Commit: 0251da239366df133b4f23cc7b0529df7eb82a45
Parents: 90adc1f
Author: Pepijn Noltes <[email protected]>
Authored: Tue Feb 16 14:56:18 2016 +0100
Committer: Pepijn Noltes <[email protected]>
Committed: Tue Feb 16 14:56:18 2016 +0100

----------------------------------------------------------------------
 dependency_manager/private/src/dm_service_dependency.c | 10 ++++++++--
 examples/dm_example/phase1/CMakeLists.txt              |  4 ++--
 examples/dm_example/phase2a/CMakeLists.txt             |  4 ++--
 examples/dm_example/phase2b/CMakeLists.txt             |  4 ++--
 examples/dm_example/phase3/CMakeLists.txt              |  4 ++--
 5 files changed, 16 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/0251da23/dependency_manager/private/src/dm_service_dependency.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_service_dependency.c 
b/dependency_manager/private/src/dm_service_dependency.c
index 4e77175..f81bd93 100644
--- a/dependency_manager/private/src/dm_service_dependency.c
+++ b/dependency_manager/private/src/dm_service_dependency.c
@@ -229,10 +229,16 @@ celix_status_t 
serviceDependency_setService(dm_service_dependency_pt dependency,
 
             while (arrayListIterator_hasNext(filterElementsIter) == true) {
                 char* filterElement = (char*) 
arrayListIterator_next(filterElementsIter);
-                size_t len = strlen(dependency->tracked_filter) + 
strlen(filterElement) + 4;
+                size_t len = strnlen(dependency->tracked_filter, 1024*1024) + 
strnlen(filterElement, 1024*1024) + 4;
                 char* newFilter = calloc(len, sizeof(*newFilter));
 
-                snprintf(newFilter, len, "(&%s%s)", 
dependency->tracked_filter, filterElement);
+                if (dependency->tracked_filter[0] == '(' && 
dependency->tracked_filter[1] == '&') {
+                    //already have an & (AND) can combine with additional 
filter -> easier to read
+                    size_t orgLen = strnlen(dependency->tracked_filter, 
1024*1024);
+                    snprintf(newFilter, len, "%.*s%s)", (int)orgLen -1, 
dependency->tracked_filter, filterElement);
+                } else {
+                    snprintf(newFilter, len, "(&%s%s)", 
dependency->tracked_filter, filterElement);
+                }
 
                 free(dependency->tracked_filter);
                 free(filterElement);

http://git-wip-us.apache.org/repos/asf/celix/blob/0251da23/examples/dm_example/phase1/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase1/CMakeLists.txt 
b/examples/dm_example/phase1/CMakeLists.txt
index d61fc77..b8c34b3 100644
--- a/examples/dm_example/phase1/CMakeLists.txt
+++ b/examples/dm_example/phase1/CMakeLists.txt
@@ -32,7 +32,7 @@ add_bundle(phase1
 #bundle_private_libs(phase1 dependency_manager)
 
 IF(APPLE)
-target_link_libraries(phase1 celix_framework -Wl,-all_load 
dependency_manager_static)
+    target_link_libraries(phase1 celix_framework -Wl,-all_load 
dependency_manager_static)
 else()
-target_link_libraries(phase1 -Wl,--whole-archive dependency_manager_static 
-Wl,--no-whole-archive celix_framework)
+    target_link_libraries(phase1 -Wl,--no-undefined -Wl,--whole-archive 
dependency_manager_static -Wl,--no-whole-archive celix_framework)
 ENDIF()

http://git-wip-us.apache.org/repos/asf/celix/blob/0251da23/examples/dm_example/phase2a/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2a/CMakeLists.txt 
b/examples/dm_example/phase2a/CMakeLists.txt
index 0884250..5474534 100644
--- a/examples/dm_example/phase2a/CMakeLists.txt
+++ b/examples/dm_example/phase2a/CMakeLists.txt
@@ -29,7 +29,7 @@ add_bundle(phase2a
 )
 
 IF(APPLE)
-target_link_libraries(phase2a celix_framework -Wl,-all_load 
dependency_manager_static)
+    target_link_libraries(phase2a celix_framework -Wl,-all_load 
dependency_manager_static)
 else()
-target_link_libraries(phase2a -Wl,--whole-archive dependency_manager_static 
-Wl,--no-whole-archive celix_framework)
+    target_link_libraries(phase2a -Wl,--no-undefined -Wl,--whole-archive 
dependency_manager_static -Wl,--no-whole-archive celix_framework)
 ENDIF()

http://git-wip-us.apache.org/repos/asf/celix/blob/0251da23/examples/dm_example/phase2b/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase2b/CMakeLists.txt 
b/examples/dm_example/phase2b/CMakeLists.txt
index 5bd2a6e..ff3089c 100644
--- a/examples/dm_example/phase2b/CMakeLists.txt
+++ b/examples/dm_example/phase2b/CMakeLists.txt
@@ -31,7 +31,7 @@ add_bundle(phase2b
 #bundle_private_libs(phase2b dependency_manager)
 
 IF(APPLE)
-target_link_libraries(phase2b celix_framework -Wl,-all_load 
dependency_manager_static)
+    target_link_libraries(phase2b celix_framework -Wl,-all_load 
dependency_manager_static)
 else()
-target_link_libraries(phase2b -Wl,--whole-archive dependency_manager_static 
-Wl,--no-whole-archive celix_framework)
+    target_link_libraries(phase2b -Wl,--no-undefined -Wl,--whole-archive 
dependency_manager_static -Wl,--no-whole-archive celix_framework)
 ENDIF()

http://git-wip-us.apache.org/repos/asf/celix/blob/0251da23/examples/dm_example/phase3/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/dm_example/phase3/CMakeLists.txt 
b/examples/dm_example/phase3/CMakeLists.txt
index ba195cd..71d31c0 100644
--- a/examples/dm_example/phase3/CMakeLists.txt
+++ b/examples/dm_example/phase3/CMakeLists.txt
@@ -31,7 +31,7 @@ add_bundle(phase3
 #bundle_private_libs(phase3 dependency_manager)
 
 IF(APPLE)
-target_link_libraries(phase3 celix_framework -Wl,-all_load 
dependency_manager_static)
+    target_link_libraries(phase3 celix_framework -Wl,-all_load 
dependency_manager_static)
 else()
-target_link_libraries(phase3 -Wl,--whole-archive dependency_manager_static 
-Wl,--no-whole-archive celix_framework)
+    target_link_libraries(phase3 -Wl,--no-undefined -Wl,--whole-archive 
dependency_manager_static -Wl,--no-whole-archive celix_framework)
 ENDIF()

Reply via email to