You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2018/01/31 20:05:31 UTC
[7/8] celix git commit: CELIX-413: Moves the example to an additional
dir, so that examples can also be build outside the celix project
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase1/src/Phase1Cmp.cc
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase1/src/Phase1Cmp.cc b/examples/celix-examples/dm_example_cxx/phase1/src/Phase1Cmp.cc
new file mode 100644
index 0000000..e82f381
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase1/src/Phase1Cmp.cc
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "Phase1Cmp.h"
+#include <iostream>
+#include <stdlib.h>
+#include <stdio.h>
+
+void Phase1Cmp::init() {
+ std::cout << "init Phase1Cmp\n";
+}
+
+void Phase1Cmp::start() {
+ std::cout << "start Phase1Cmp\n";
+}
+
+void Phase1Cmp::stop() {
+ std::cout << "stop Phase1Cmp\n";
+}
+
+void Phase1Cmp::deinit() {
+ std::cout << "deinit Phase1Cmp\n";
+}
+
+int Phase1Cmp::getData() {
+ counter += 1;
+ return (int)random();
+};
+
+std::string Phase1Cmp::getName() {
+ return std::string {"IPhase"};
+}
+
+int Phase1Cmp::infoCmd([[gnu::unused]] char * line, FILE *out, [[gnu::unused]] FILE* err) {
+ fprintf(out, "Phase1: number of getData calls: %u\n", counter);
+ return 0;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase1/src/Phase1Cmp.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase1/src/Phase1Cmp.h b/examples/celix-examples/dm_example_cxx/phase1/src/Phase1Cmp.h
new file mode 100644
index 0000000..f475c41
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase1/src/Phase1Cmp.h
@@ -0,0 +1,44 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef CELIX_PHASE1CMP_H
+#define CELIX_PHASE1CMP_H
+
+#include "IPhase1.h"
+#include "IName.h"
+#include <stdint.h>
+#include <stdio.h>
+
+class Phase1Cmp : public srv::info::IName, public IPhase1 {
+ uint32_t counter = 0;
+public:
+ Phase1Cmp() = default;
+ virtual ~Phase1Cmp() = default;
+
+ void init();
+ void start();
+ void stop();
+ void deinit();
+
+ int getData() override; //implements IPhase1
+ int infoCmd(char* line, FILE *out, FILE* err); //implements cmd service
+ std::string getName() override;
+};
+
+#endif //CELIX_PHASE1CMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase2/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase2/CMakeLists.txt b/examples/celix-examples/dm_example_cxx/phase2/CMakeLists.txt
new file mode 100644
index 0000000..f2b3813
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase2/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+add_celix_bundle(dm_example_cxx_phase2a
+ SYMBOLIC_NAME phase2a_cxx
+ VERSION 0.0.1
+ SOURCES
+ src/Phase2aActivator.cc
+ src/Phase2aCmp.cc
+)
+target_include_directories(dm_example_cxx_phase2a PRIVATE src)
+target_link_libraries(dm_example_cxx_phase2a PRIVATE Celix::log_service_api dm_example_cxx_api)
+
+add_celix_bundle(dm_example_cxx_phase2b
+ SYMBOLIC_NAME phase2b_cxx
+ VERSION 0.0.1
+ SOURCES
+ src/Phase2bActivator.cc
+ src/Phase2bCmp.cc
+ )
+target_include_directories(dm_example_cxx_phase2b PRIVATE src)
+target_link_libraries(dm_example_cxx_phase2b PRIVATE Celix::log_service_api dm_example_cxx_api)
+
+IF(APPLE)
+ target_link_libraries(dm_example_cxx_phase2a PRIVATE -Wl,-all_load Celix::dependency_manager_cxx_static)
+ target_link_libraries(dm_example_cxx_phase2b PRIVATE -Wl,-all_load Celix::dependency_manager_cxx_static)
+else()
+ if(ENABLE_ADDRESS_SANITIZER)
+ #With asan there can be undefined symbols
+ target_link_libraries(dm_example_cxx_phase2a PRIVATE -Wl,--whole-archive Celix::dependency_manager_cxx_static -Wl,--no-whole-archive)
+ target_link_libraries(dm_example_cxx_phase2b PRIVATE -Wl,--whole-archive Celix::dependency_manager_cxx_static -Wl,--no-whole-archive)
+ else()
+ target_link_libraries(dm_example_cxx_phase2a PRIVATE -Wl,--whole-archive Celix::dependency_manager_cxx_static -Wl,--no-whole-archive)
+ target_link_libraries(dm_example_cxx_phase2b PRIVATE -Wl,--whole-archive Celix::dependency_manager_cxx_static -Wl,--no-whole-archive)
+
+ endif()
+endif()
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase2/src/Phase2Activator.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase2/src/Phase2Activator.h b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2Activator.h
new file mode 100644
index 0000000..069b2ae
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2Activator.h
@@ -0,0 +1,34 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef CELIX_PHASE2AACTIVATOR_H
+#define CELIX_PHASE2AACTIVATOR_H
+
+#include "celix/dm/DmActivator.h"
+
+using namespace celix::dm;
+
+class Phase2Activator : public DmActivator {
+public:
+ Phase2Activator(DependencyManager& mng) : DmActivator(mng) {}
+ virtual void init();
+ virtual void deinit();
+};
+
+#endif //CELIX_PHASE2AACTIVATOR_H
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase2/src/Phase2Cmp.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase2/src/Phase2Cmp.h b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2Cmp.h
new file mode 100644
index 0000000..87b6e8e
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2Cmp.h
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef CELIX_PHASE2CMP_H
+#define CELIX_PHASE2CMP_H
+
+#include "IName.h"
+#include "IPhase1.h"
+#include "IPhase2.h"
+#include <stdint.h>
+#include <stdio.h>
+#include <thread>
+#include <iostream>
+
+extern "C" {
+#include "log_service.h"
+};
+
+class Phase2Cmp : public IPhase2 {
+public:
+ Phase2Cmp() = default;
+ virtual ~Phase2Cmp() { std::cout << "Destroying Phase2\n"; };
+
+ Phase2Cmp(Phase2Cmp&& other) noexcept;
+ Phase2Cmp& operator=(Phase2Cmp&&) = default;
+
+ Phase2Cmp(const Phase2Cmp& other) = delete;
+ Phase2Cmp operator=(const Phase2Cmp&) = delete;
+
+ void setPhase1(IPhase1* phase); //injector used by dependency manager
+ void setName(srv::info::IName* name) { std::cout << "Setting IName with name: " << (name != nullptr ? name->getName() : "null") << std::endl; }
+ void setLogService(const log_service_t* logSrv);
+
+ double getData() override; //implements IPhase2
+private:
+ IPhase1* phase1 {nullptr};
+ const log_service_t* logSrv {nullptr};
+};
+
+#endif //CELIX_PHASE2CMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase2/src/Phase2aActivator.cc
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase2/src/Phase2aActivator.cc b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2aActivator.cc
new file mode 100644
index 0000000..e33ae0e
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2aActivator.cc
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <IName.h>
+#include "Phase2Cmp.h"
+#include "Phase2Activator.h"
+#include "log_service.h"
+
+using namespace celix::dm;
+
+
+DmActivator* DmActivator::create(DependencyManager& mng) {
+ return new Phase2Activator(mng);
+}
+
+
+void Phase2Activator::init() {
+
+ Properties props {};
+ props["name"] = "phase2a";
+
+ Component<Phase2Cmp>& cmp = mng.createComponent<Phase2Cmp>()
+ .setInstance(Phase2Cmp())
+ .addInterface<IPhase2>(IPHASE2_VERSION, props);
+
+ cmp.createServiceDependency<IPhase1>()
+ .setRequired(true)
+ .setCallbacks(&Phase2Cmp::setPhase1);
+
+ cmp.createServiceDependency<srv::info::IName>()
+ .setVersionRange("[1.0.0,2)")
+ .setCallbacks(&Phase2Cmp::setName);
+
+ cmp.createCServiceDependency<log_service_t>(OSGI_LOGSERVICE_NAME)
+ .setRequired(false)
+ .setCallbacks(&Phase2Cmp::setLogService);
+}
+
+void Phase2Activator::deinit() {
+
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase2/src/Phase2aCmp.cc
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase2/src/Phase2aCmp.cc b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2aCmp.cc
new file mode 100644
index 0000000..4f68679
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2aCmp.cc
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "Phase2Cmp.h"
+#include <iostream>
+#include <stdlib.h>
+#include <stdio.h>
+
+Phase2Cmp::Phase2Cmp(Phase2Cmp&& other) noexcept : phase1(other.phase1), logSrv{other.logSrv} {
+ std::cout << "Move constructor Phase2aCmp called\n";
+ other.phase1 = nullptr;
+ other.logSrv = nullptr;
+}
+
+void Phase2Cmp::setPhase1(IPhase1* phase1) {
+ std::cout << "setting phase1 for phase2\n";
+ this->phase1 = phase1;
+}
+
+void Phase2Cmp::setLogService(const log_service_t* logSrv) {
+ this->logSrv = logSrv;
+}
+
+double Phase2Cmp::getData() {
+ if (this->logSrv != NULL) {
+ this->logSrv->log(this->logSrv->logger, OSGI_LOGSERVICE_DEBUG, (char *) "getting data from phase2cmp A\n");
+ }
+ return phase1->getData() * 42.0;
+};
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase2/src/Phase2bActivator.cc
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase2/src/Phase2bActivator.cc b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2bActivator.cc
new file mode 100644
index 0000000..4fba8c0
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2bActivator.cc
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "Phase2Cmp.h"
+#include "Phase2Activator.h"
+#include "log_service.h"
+
+using namespace celix::dm;
+
+
+DmActivator* DmActivator::create(DependencyManager& mng) {
+ return new Phase2Activator(mng);
+}
+
+void Phase2Activator::init() {
+
+ Properties props {};
+ props["name"] = "phase2b";
+
+ Component<Phase2Cmp>& cmp = mng.createComponent<Phase2Cmp>()
+ .addInterface<IPhase2>(IPHASE2_VERSION, props);
+
+ cmp.createServiceDependency<IPhase1>()
+ .setRequired(true)
+ .setCallbacks(&Phase2Cmp::setPhase1);
+
+ cmp.createCServiceDependency<log_service_t>(OSGI_LOGSERVICE_NAME)
+ .setRequired(false)
+ .setCallbacks(&Phase2Cmp::setLogService);
+}
+
+void Phase2Activator::deinit() {
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase2/src/Phase2bCmp.cc
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase2/src/Phase2bCmp.cc b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2bCmp.cc
new file mode 100644
index 0000000..2f420a0
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase2/src/Phase2bCmp.cc
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "Phase2Cmp.h"
+#include <iostream>
+#include <stdlib.h>
+#include <stdio.h>
+
+Phase2Cmp::Phase2Cmp(Phase2Cmp&& other) noexcept : phase1(other.phase1), logSrv{other.logSrv} {
+ std::cout << "Move constructor Phase2bCmp called\n";
+ other.phase1 = nullptr;
+ other.logSrv = nullptr;
+}
+
+void Phase2Cmp::setPhase1(IPhase1* phase1) {
+ std::cout << "setting phase1 for phase2\n";
+ this->phase1 = phase1;
+}
+
+void Phase2Cmp::setLogService(const log_service_t* logSrv) {
+ this->logSrv = logSrv;
+}
+
+double Phase2Cmp::getData() {
+ if (this->logSrv != NULL) {
+ this->logSrv->log(this->logSrv->logger, OSGI_LOGSERVICE_DEBUG, (char *) "getting data from phase2cmp B\n");
+ }
+ return phase1->getData() * 24.0;
+};
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3/CMakeLists.txt b/examples/celix-examples/dm_example_cxx/phase3/CMakeLists.txt
new file mode 100644
index 0000000..c583f25
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+add_celix_bundle(dm_example_cxx_phase3
+ SYMBOLIC_NAME phase3_cxx
+ VERSION 0.0.1
+ SOURCES
+ src/Phase3Activator.cc
+ src/Phase3BaseActivator.cc
+ src/Phase3Cmp.cc
+)
+target_include_directories(dm_example_cxx_phase3 PRIVATE src)
+target_link_libraries(dm_example_cxx_phase3 PRIVATE dm_example_cxx_api pthread)
+
+IF(APPLE)
+ target_link_libraries(dm_example_cxx_phase3 PRIVATE -Wl,-all_load Celix::dependency_manager_cxx_static)
+else()
+ if(ENABLE_ADDRESS_SANITIZER)
+ #With asan there can be undefined symbols
+ target_link_libraries(dm_example_cxx_phase3 PRIVATE -Wl,--whole-archive Celix::dependency_manager_cxx_static -Wl,--no-whole-archive)
+ else()
+ target_link_libraries(dm_example_cxx_phase3 PRIVATE -Wl,--no-undefined -Wl,--whole-archive Celix::dependency_manager_cxx_static -Wl,--no-whole-archive)
+ endif()
+endif()
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Activator.cc
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Activator.cc b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Activator.cc
new file mode 100644
index 0000000..f5aa178
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Activator.cc
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+#include "Phase3Cmp.h"
+#include "Phase3Activator.h"
+
+using namespace celix::dm;
+
+
+DmActivator* DmActivator::create(DependencyManager& mng) {
+ return new Phase3Activator(mng);
+}
+
+void Phase3Activator::init() {
+ Phase3BaseActivator::init();
+ cmp.createServiceDependency<IPhase2>()
+ .setRequired(false)
+ .setFilter("(&(name=phase2a)(non-existing=*))")
+ .setCallbacks(&Phase3Cmp::setPhase2a);
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Activator.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Activator.h b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Activator.h
new file mode 100644
index 0000000..e02cd61
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Activator.h
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef CELIX_PHASE3ACTIVATOR_H
+#define CELIX_PHASE3ACTIVATOR_H
+
+#include "Phase3BaseActivator.h"
+
+using namespace celix::dm;
+
+class Phase3Activator : public Phase3BaseActivator {
+public:
+ Phase3Activator(DependencyManager& mng) : Phase3BaseActivator(mng) {}
+ virtual void init();
+};
+
+#endif //CELIX_PHASE2AACTIVATOR_H
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3/src/Phase3BaseActivator.cc
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3/src/Phase3BaseActivator.cc b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3BaseActivator.cc
new file mode 100644
index 0000000..37746dc
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3BaseActivator.cc
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "Phase3Cmp.h"
+#include "Phase3BaseActivator.h"
+
+using namespace celix::dm;
+
+void Phase3BaseActivator::init() {
+ cmp.setCallbacks(nullptr, &Phase3Cmp::start, &Phase3Cmp::stop, nullptr);
+
+ cmp.createServiceDependency<IPhase2>()
+ .setRequired(true)
+ .setCallbacks(&Phase3Cmp::addPhase2, &Phase3Cmp::removePhase2);
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3/src/Phase3BaseActivator.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3/src/Phase3BaseActivator.h b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3BaseActivator.h
new file mode 100644
index 0000000..0f3d813
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3BaseActivator.h
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef CELIX_PHASE3BASEACTIVATOR_H
+#define CELIX_PHASE3BASEACTIVATOR_H
+
+#include "celix/dm/DmActivator.h"
+
+using namespace celix::dm;
+
+class Phase3BaseActivator : public DmActivator {
+public:
+ Phase3BaseActivator(DependencyManager& mng) : DmActivator(mng), cmp(mng.createComponent<Phase3Cmp>()) {}
+ void init();
+protected:
+ celix::dm::Component<Phase3Cmp>& cmp;
+};
+
+#endif //CELIX_PHASE3BASEACTIVATOR_H
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Cmp.cc
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Cmp.cc b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Cmp.cc
new file mode 100644
index 0000000..dba5942
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Cmp.cc
@@ -0,0 +1,65 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "Phase3Cmp.h"
+#include <iostream>
+#include <stdlib.h>
+#include <stdio.h>
+#include <thread>
+#include <chrono>
+#include <sstream>
+
+void Phase3Cmp::start() {
+ std::cout << "start Phase3Cmp\n";
+ running = true;
+ pollThread = std::thread {&Phase3Cmp::poll, this};
+}
+
+void Phase3Cmp::stop() {
+ std::cout << "stop Phase3Cmp\n";
+ running = false;
+ pollThread.join();
+}
+
+void Phase3Cmp::poll() {
+ while (running) {
+ std::cout << "polling Phase3Cmp\n";
+ for (std::pair<IPhase2*, celix::dm::Properties> pair : this->phases) {
+ std::ostringstream oss {};
+ oss << "current data for " << pair.second["name"] << " is " << pair.first->getData() << "\n";
+ std::cout << oss.str();
+ }
+ std::this_thread::sleep_for(std::chrono::milliseconds(1000));
+ }
+}
+
+void Phase3Cmp::addPhase2(IPhase2* phase2, celix::dm::Properties&& props) {
+ std::cout << "adding Iphase2 for Phase3Cmp\n";
+ std::pair<IPhase2*, celix::dm::Properties> pair {phase2, props};
+ this->phases[phase2] = props;
+}
+
+void Phase3Cmp::removePhase2(IPhase2* phase2, [[gnu::unused]] celix::dm::Properties&& props) {
+ std::cout << "adding Iphase2 for Phase3Cmp\n";
+ this->phases.erase(phase2);
+}
+
+void Phase3Cmp::setPhase2a([[gnu::unused]] IPhase2* phase) {
+ std::cout << "setting phase2a\n";
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Cmp.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Cmp.h b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Cmp.h
new file mode 100644
index 0000000..8b7e974
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3/src/Phase3Cmp.h
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef CELIX_PHASE3CMP_H
+#define CELIX_PHASE3CMP_H
+
+#include "IPhase1.h"
+#include "IPhase2.h"
+#include <stdint.h>
+#include <stdio.h>
+#include <thread>
+#include <iostream>
+#include <list>
+#include "celix/dm/Properties.h"
+
+class Phase3Cmp {
+ std::map<IPhase2*,celix::dm::Properties> phases {};
+ bool running {false};
+ std::thread pollThread {};
+public:
+ Phase3Cmp() { std::cout << "Constructing Phase3Cmp\n"; }
+ virtual ~Phase3Cmp() = default;
+
+ void start();
+ void stop();
+
+ void poll();
+
+ void addPhase2(IPhase2* phase, celix::dm::Properties&& props); //injector used by dependency manager
+ void removePhase2(IPhase2* phase, celix::dm::Properties&& props); //injector used by dependency manager
+ void setPhase2a(IPhase2* phase);
+};
+
+#endif //CELIX_PHASE3CMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3_locking/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3_locking/CMakeLists.txt b/examples/celix-examples/dm_example_cxx/phase3_locking/CMakeLists.txt
new file mode 100644
index 0000000..7a6823a
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3_locking/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
+add_celix_bundle(dm_example_cxx_phase3_locking
+ SYMBOLIC_NAME phase3_locking_cxx
+ VERSION 0.0.1
+ SOURCES
+ src/Phase3LockingActivator.cc
+ src/Phase3LockingCmp.cc
+)
+target_include_directories(dm_example_cxx_phase3_locking PRIVATE src)
+target_link_libraries(dm_example_cxx_phase3_locking PRIVATE dm_example_cxx_api pthread)
+
+IF(APPLE)
+ target_link_libraries(dm_example_cxx_phase3_locking PRIVATE -Wl,-all_load Celix::dependency_manager_cxx_static)
+else()
+ if(ENABLE_ADDRESS_SANITIZER)
+ #With asan there can be undefined symbols
+ target_link_libraries(dm_example_cxx_phase3_locking PRIVATE -Wl,--whole-archive Celix::dependency_manager_cxx_static -Wl,--no-whole-archive)
+ else()
+ target_link_libraries(dm_example_cxx_phase3_locking PRIVATE -Wl,--no-undefined -Wl,--whole-archive Celix::dependency_manager_cxx_static -Wl,--no-whole-archive)
+ endif()
+endif()
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingActivator.cc
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingActivator.cc b/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingActivator.cc
new file mode 100644
index 0000000..29d178e
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingActivator.cc
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+#include "Phase3LockingCmp.h"
+#include "Phase3LockingActivator.h"
+
+#include <memory>
+
+using namespace celix::dm;
+
+
+DmActivator* DmActivator::create(DependencyManager& mng) {
+ return new Phase3LockingActivator(mng);
+}
+
+void Phase3LockingActivator::init() {
+ auto inst = std::shared_ptr<Phase3LockingCmp> {new Phase3LockingCmp {}};
+
+ Component<Phase3LockingCmp>& cmp = mng.createComponent<Phase3LockingCmp>(inst) //set inst using a shared ptr
+ .setCallbacks(nullptr, &Phase3LockingCmp::start, &Phase3LockingCmp::stop, nullptr);
+
+ cmp.createServiceDependency<IPhase2>()
+ .setStrategy(DependencyUpdateStrategy::locking)
+ .setCallbacks(&Phase3LockingCmp::addPhase2, &Phase3LockingCmp::removePhase2);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingActivator.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingActivator.h b/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingActivator.h
new file mode 100644
index 0000000..78d1748
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingActivator.h
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef CELIX_PHASE3LOCKINGACTIVATOR_H
+#define CELIX_PHASE3LOCKINGACTIVATOR_H
+
+#include "celix/dm/DmActivator.h"
+
+using namespace celix::dm;
+
+class Phase3LockingActivator : public DmActivator {
+public:
+ Phase3LockingActivator(DependencyManager& mng) : DmActivator(mng) {}
+ virtual void init();
+};
+
+#endif //CELIX_PHASE3LOCKINGAACTIVATOR_H
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingCmp.cc
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingCmp.cc b/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingCmp.cc
new file mode 100644
index 0000000..b0f5e3e
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingCmp.cc
@@ -0,0 +1,66 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "Phase3LockingCmp.h"
+#include <iostream>
+#include <stdlib.h>
+#include <stdio.h>
+#include <thread>
+#include <chrono>
+#include <sstream>
+
+void Phase3LockingCmp::start() {
+ std::cout << "start Phase3LockingCmp\n";
+ running = true;
+ //pollThread = std::thread {&Phase3LockingCmp::poll, std::ref(*this)};
+ pollThread = std::thread {&Phase3LockingCmp::poll, this};
+}
+
+void Phase3LockingCmp::stop() {
+ std::cout << "stop Phase3LockingCmp\n";
+ running = false;
+ pollThread.join();
+}
+
+void Phase3LockingCmp::poll() {
+ while (running) {
+ std::cout << "polling Phase3LockingCmp\n";
+ mutex.lock();
+ for (std::pair<IPhase2*, celix::dm::Properties> pair : this->phases) {
+ std::ostringstream oss {};
+ oss << "current data for " << pair.second["name"] << " is " << pair.first->getData() << "\n";
+ std::cout << oss.str();
+ }
+ mutex.unlock();
+ std::this_thread::sleep_for(std::chrono::milliseconds(1000));
+ }
+}
+
+void Phase3LockingCmp::addPhase2(IPhase2* phase2, celix::dm::Properties&& props) {
+ std::cout << "adding Iphase2 for Phase3LockingCmp\n";
+ std::lock_guard<std::mutex> lock(mutex);
+ std::pair<IPhase2*, celix::dm::Properties> pair {phase2, props};
+ this->phases[phase2] = props;
+}
+
+void Phase3LockingCmp::removePhase2(IPhase2* phase2, [[gnu::unused]] celix::dm::Properties&& props) {
+ std::cout << "adding Iphase2 for Phase3LockingCmp\n";
+ std::lock_guard<std::mutex> lock(mutex);
+ this->phases.erase(phase2);
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingCmp.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingCmp.h b/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingCmp.h
new file mode 100644
index 0000000..678fa80
--- /dev/null
+++ b/examples/celix-examples/dm_example_cxx/phase3_locking/src/Phase3LockingCmp.h
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef CELIX_PHASE3LOCKINGCMP_H
+#define CELIX_PHASE3LOCKINGCMP_H
+
+#include "IPhase2.h"
+#include <stdint.h>
+#include <stdio.h>
+#include <thread>
+#include <iostream>
+#include <mutex>
+#include <map>
+#include "celix/dm/Properties.h"
+
+class Phase3LockingCmp {
+ std::map<IPhase2*,celix::dm::Properties> phases {};
+ bool running {false};
+ std::thread pollThread {};
+ std::mutex mutex {};
+public:
+ Phase3LockingCmp() = default;
+ virtual ~Phase3LockingCmp() = default;
+
+ void start();
+ void stop();
+
+ void poll();
+
+ void addPhase2(IPhase2* phase, celix::dm::Properties&& props); //injector used by dependency manager
+ void removePhase2(IPhase2* phase, celix::dm::Properties&& props); //injector used by dependency manager
+};
+
+#endif //CELIX_PHASE3LOCKINGCMP_H
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/embedding/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/celix-examples/embedding/CMakeLists.txt b/examples/celix-examples/embedding/CMakeLists.txt
new file mode 100644
index 0000000..9c96948
--- /dev/null
+++ b/examples/celix-examples/embedding/CMakeLists.txt
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
+add_executable(embedding private/src/main)
+target_link_libraries(embedding Celix::framework )
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/embedding/private/src/main.c
----------------------------------------------------------------------
diff --git a/examples/celix-examples/embedding/private/src/main.c b/examples/celix-examples/embedding/private/src/main.c
new file mode 100644
index 0000000..b77cb22
--- /dev/null
+++ b/examples/celix-examples/embedding/private/src/main.c
@@ -0,0 +1,99 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * main.c
+ *
+ * \date May 22, 2013
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdlib.h>
+
+#include "celix_launcher.h"
+#include "celix_errno.h"
+#include "framework.h"
+#include "bundle_context.h"
+
+struct foo {
+
+};
+
+struct fooSrv {
+ struct foo *handle;
+ celix_status_t (*foo)(struct foo *handle);
+};
+
+celix_status_t embedded_foo();
+
+int main(void) {
+
+ framework_pt framework = NULL;
+
+ properties_pt config = properties_create();
+ int rc = celixLauncher_launchWithProperties(config, &framework);
+
+ if (rc == 0) {
+ bundle_pt fwBundle = NULL;
+ if(framework_getFrameworkBundle(framework, &fwBundle) == CELIX_SUCCESS){
+
+ if(bundle_start(fwBundle) == CELIX_SUCCESS){
+
+ bundle_context_pt context = NULL;
+ bundle_getContext(fwBundle, &context);
+
+ struct foo *f = calloc(1, sizeof(*f));
+ struct fooSrv *fs = calloc(1, sizeof(*fs));
+
+ fs->handle = f;
+ fs->foo = embedded_foo;
+
+ service_registration_pt reg = NULL;
+
+ if(bundleContext_registerService(context, "foo", fs, NULL, ®) == CELIX_SUCCESS){
+
+ service_reference_pt ref = NULL;
+ if(bundleContext_getServiceReference(context, "foo", &ref) == CELIX_SUCCESS){
+
+ void *fs2 = NULL;
+ bundleContext_getService(context, ref, &fs2);
+
+ ((struct fooSrv*) fs2)->foo(((struct fooSrv*) fs2)->handle);
+
+ bundleContext_ungetService(context, ref, NULL);
+ bundleContext_ungetServiceReference(context, ref);
+ serviceRegistration_unregister(reg);
+ }
+ }
+
+ free(f);
+ free(fs);
+ }
+ }
+ celixLauncher_destroy(framework);
+ }
+
+ return rc;
+
+}
+
+celix_status_t embedded_foo() {
+ printf("foo\n");
+ return CELIX_SUCCESS;
+}
+
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/hello_world/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/celix-examples/hello_world/CMakeLists.txt b/examples/celix-examples/hello_world/CMakeLists.txt
new file mode 100644
index 0000000..130cef0
--- /dev/null
+++ b/examples/celix-examples/hello_world/CMakeLists.txt
@@ -0,0 +1,63 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+if(NOT APPLE)
+#Importing and exporting libraries not (yet) work under OSX.
+
+include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
+include_directories("public/include")
+
+add_library(hello_testlib SHARED
+ private/src/test
+)
+set_library_version(hello_testlib "4.3.2") # sets target propery VERSION to 4.3.2 and SOVERSION to 4
+
+
+add_library(hello_test2lib SHARED
+ private/src/test2
+)
+set_library_version(hello_test2lib "3.3.3")
+
+add_celix_bundle(hello_bundle
+ VERSION "1.2"
+ SOURCES
+ private/src/activator.c
+ IMPORT_LIBRARIES hello_test2lib
+)
+
+add_celix_bundle(hello_export
+ VERSION "1.0"
+ NO_ACTIVATOR
+ EXPORT_LIBRARIES hello_test2lib
+)
+
+celix_bundle_private_libs(hello_bundle
+ hello_testlib
+)
+
+add_celix_container(helloworld_byref
+ GROUP hello
+ BUNDLES hello_export hello_bundle ${CELIX_SHELL_BUNDLE} ${CELIX_SHELL_TUI_BUNDLE}
+)
+
+add_celix_container(helloworld_withcopy
+ GROUP hello
+ COPY #Ensures that bundles are copied in the deploy location
+ BUNDLES hello_export hello_bundle ${SHELL_BUNDLE} ${SHELL_TUI_BUNDLE}
+)
+
+endif()
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/hello_world/private/src/activator.c
----------------------------------------------------------------------
diff --git a/examples/celix-examples/hello_world/private/src/activator.c b/examples/celix-examples/hello_world/private/src/activator.c
new file mode 100644
index 0000000..37cf782
--- /dev/null
+++ b/examples/celix-examples/hello_world/private/src/activator.c
@@ -0,0 +1,68 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * activator.c
+ *
+ * \date Aug 20, 2010
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "bundle_activator.h"
+
+#include "test.h"
+#include "test2.h"
+
+struct userData {
+ char * word;
+};
+
+celix_status_t bundleActivator_create(bundle_context_pt context, void **userData) {
+ celix_status_t status = CELIX_SUCCESS;
+ *userData = malloc(sizeof(struct userData));
+ if (*userData != NULL) {
+ ((struct userData *)(*userData))->word = "World";
+ } else {
+ status = CELIX_START_ERROR;
+ }
+ return status;
+}
+
+celix_status_t bundleActivator_start(void * userData, bundle_context_pt context) {
+ struct userData * data = (struct userData *) userData;
+ printf("Hello %s\n", data->word);
+
+ doo();
+ bar();
+
+ return CELIX_SUCCESS;
+}
+
+celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) {
+ struct userData * data = (struct userData *) userData;
+ printf("Goodbye %s\n", data->word);
+ return CELIX_SUCCESS;
+}
+
+celix_status_t bundleActivator_destroy(void * userData, bundle_context_pt context) {
+ free(userData);
+ return CELIX_SUCCESS;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/hello_world/private/src/test.c
----------------------------------------------------------------------
diff --git a/examples/celix-examples/hello_world/private/src/test.c b/examples/celix-examples/hello_world/private/src/test.c
new file mode 100644
index 0000000..280fc61
--- /dev/null
+++ b/examples/celix-examples/hello_world/private/src/test.c
@@ -0,0 +1,32 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * test.c
+ *
+ * \date 12 Feb 2014
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#include <stdio.h>
+
+void doo()
+{
+ printf("Hello from second lib\n");
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/hello_world/private/src/test2.c
----------------------------------------------------------------------
diff --git a/examples/celix-examples/hello_world/private/src/test2.c b/examples/celix-examples/hello_world/private/src/test2.c
new file mode 100644
index 0000000..9beb1bc
--- /dev/null
+++ b/examples/celix-examples/hello_world/private/src/test2.c
@@ -0,0 +1,32 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * test.c
+ *
+ * \date 12 Feb 2014
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#include <stdio.h>
+
+void bar()
+{
+ printf("Hello from (imported) third lib\n");
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/hello_world/public/include/test.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/hello_world/public/include/test.h b/examples/celix-examples/hello_world/public/include/test.h
new file mode 100644
index 0000000..cdbd05d
--- /dev/null
+++ b/examples/celix-examples/hello_world/public/include/test.h
@@ -0,0 +1,34 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * test.h
+ *
+ * \date 12 Feb 2014
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#ifndef TEST_H_
+#define TEST_H_
+
+
+void doo(void);
+
+
+#endif /* TEST_H_ */
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/hello_world/public/include/test2.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/hello_world/public/include/test2.h b/examples/celix-examples/hello_world/public/include/test2.h
new file mode 100644
index 0000000..bff9048
--- /dev/null
+++ b/examples/celix-examples/hello_world/public/include/test2.h
@@ -0,0 +1,34 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * test.h
+ *
+ * \date 12 Feb 2014
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#ifndef TEST2_H_
+#define TEST2_H_
+
+
+void bar(void);
+
+
+#endif /* TEST2_H_ */
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/hello_world_test/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/celix-examples/hello_world_test/CMakeLists.txt b/examples/celix-examples/hello_world_test/CMakeLists.txt
new file mode 100644
index 0000000..41045b2
--- /dev/null
+++ b/examples/celix-examples/hello_world_test/CMakeLists.txt
@@ -0,0 +1,90 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+#############################################################################
+## NOTE Examples of using add_celix_bundle and add_celix_container and assorted commands ##
+#############################################################################
+
+add_celix_bundle(hellotest1
+ VERSION "1.2"
+ SOURCES
+ private/src/activator
+)
+
+target_include_directories(hellotest1 PRIVATE
+ ${PROJECT_SOURCE_DIR}/utils/public/include
+ public/include
+)
+
+
+celix_bundle_headers(hellotest1
+ "X-WebContent: web"
+ "X-MediaType: application/json"
+)
+
+add_library(tlib SHARED
+ private/src/test
+)
+set_library_version(tlib "4.3.2") # sets target propery VERSION to 4.3.2 and SOVERSION to 4
+
+#celix_bundle_private_libs(hellotest1
+# #/usr/local/lib/libjansson.4.dylib
+# /usr/lib64/libjansson.so.4
+#)
+celix_bundle_private_libs(hellotest1
+ tlib
+ #/usr/lib/libcurl.4.dylib
+ # /usr/lib64/libcurl.so.4
+)
+
+
+add_celix_container(hello_test_deploy
+ BUNDLES hellotest1 hellotest2 #NOTE hellotest2 is still a unknown target
+ PROPERTIES
+ "Test=true"
+)
+
+#add_celix_container(hello_test_deploy_fail
+# BUNDLES nonexisting
+#)
+
+#NOTE: Gives error:
+#Error evaluating generator expression:
+#
+# $<TARGET_PROPERTY:nonexisting,BUNDLE_FILE>
+#
+# Target "nonexisting" not found.
+
+
+
+add_library(hello2act SHARED
+ private/src/activator
+)
+set_library_version(hello2act "3.2.4") #sets VERSION prop to 3.2.4 and SOVERSION to 3
+target_link_libraries(hello2act PRIVATE Celix::framework )
+add_celix_bundle(hellotest2
+ VERSION "1.0.0" #can be the same as activator lib, but does not have to be
+ ACTIVATOR hello2act
+)
+
+#add_celix_bundle(hellotest3
+# VERSION "2.1.2"
+ #ACTIVATOR /usr/local/lib/libjansson.4.dylib
+ #ACTIVATOR /usr/lib64/libjansson.so.4
+ #)
+
+
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/hello_world_test/private/src/activator.c
----------------------------------------------------------------------
diff --git a/examples/celix-examples/hello_world_test/private/src/activator.c b/examples/celix-examples/hello_world_test/private/src/activator.c
new file mode 100644
index 0000000..2185e16
--- /dev/null
+++ b/examples/celix-examples/hello_world_test/private/src/activator.c
@@ -0,0 +1,63 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * activator.c
+ *
+ * \date Aug 20, 2010
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "bundle_activator.h"
+
+
+struct userData {
+ char * word;
+};
+
+celix_status_t bundleActivator_create(bundle_context_pt __attribute__((unused)) context, void **userData) {
+ celix_status_t status = CELIX_SUCCESS;
+ *userData = malloc(sizeof(struct userData));
+ if (*userData != NULL) {
+ ((struct userData *)(*userData))->word = "Import";
+ } else {
+ status = CELIX_START_ERROR;
+ }
+ return status;
+}
+
+celix_status_t bundleActivator_start(void * userData, bundle_context_pt __attribute__((unused)) context) {
+ struct userData * data = (struct userData *) userData;
+ printf("Hello %s\n", data->word);
+
+ return CELIX_SUCCESS;
+}
+
+celix_status_t bundleActivator_stop(void * userData, bundle_context_pt __attribute__((unused)) context) {
+ struct userData * data = (struct userData *) userData;
+ printf("Goodbye %s\n", data->word);
+ return CELIX_SUCCESS;
+}
+
+celix_status_t bundleActivator_destroy(void * userData, bundle_context_pt __attribute__((unused)) context) {
+ free(userData);
+ return CELIX_SUCCESS;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/hello_world_test/private/src/test.c
----------------------------------------------------------------------
diff --git a/examples/celix-examples/hello_world_test/private/src/test.c b/examples/celix-examples/hello_world_test/private/src/test.c
new file mode 100644
index 0000000..280fc61
--- /dev/null
+++ b/examples/celix-examples/hello_world_test/private/src/test.c
@@ -0,0 +1,32 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * test.c
+ *
+ * \date 12 Feb 2014
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#include <stdio.h>
+
+void doo()
+{
+ printf("Hello from second lib\n");
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/hello_world_test/public/include/test.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/hello_world_test/public/include/test.h b/examples/celix-examples/hello_world_test/public/include/test.h
new file mode 100644
index 0000000..cdbd05d
--- /dev/null
+++ b/examples/celix-examples/hello_world_test/public/include/test.h
@@ -0,0 +1,34 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * test.h
+ *
+ * \date 12 Feb 2014
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+
+#ifndef TEST_H_
+#define TEST_H_
+
+
+void doo(void);
+
+
+#endif /* TEST_H_ */
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/log_service_example/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/celix-examples/log_service_example/CMakeLists.txt b/examples/celix-examples/log_service_example/CMakeLists.txt
new file mode 100644
index 0000000..31f6fc8
--- /dev/null
+++ b/examples/celix-examples/log_service_example/CMakeLists.txt
@@ -0,0 +1,31 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+#Importing and exporting libraries not (yet) work under OSX.
+
+add_celix_bundle(log_service_example
+ VERSION "1.0"
+ SOURCES
+ src/activator.c
+)
+target_include_directories(log_service_example PRIVATE src)
+target_link_libraries(log_service_example PRIVATE Celix::log_service_api Celix::log_helper)
+
+add_celix_container(log_example
+ GROUP log_service
+ BUNDLES log_service_example Celix::log_service Celix::shell Celix::shell_tui
+)
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/log_service_example/src/activator.c
----------------------------------------------------------------------
diff --git a/examples/celix-examples/log_service_example/src/activator.c b/examples/celix-examples/log_service_example/src/activator.c
new file mode 100644
index 0000000..75eaf59
--- /dev/null
+++ b/examples/celix-examples/log_service_example/src/activator.c
@@ -0,0 +1,85 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * activator.c
+ *
+ * \date Sep 11, 2017
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "bundle_activator.h"
+#include "log_helper.h"
+
+struct userData {
+ pthread_t logger_thread;
+ bool running;
+ log_helper_pt log_helper;
+};
+
+static void *loggerThread(void *userData);
+
+celix_status_t bundleActivator_create(bundle_context_pt context, void **userData) {
+ celix_status_t status = CELIX_SUCCESS;
+ *userData = calloc(1, sizeof(struct userData));
+ if (*userData != NULL) {
+ struct userData * data = (struct userData *) *userData;
+ status = logHelper_create(context, &data->log_helper);
+ } else {
+ status = CELIX_START_ERROR;
+ }
+ return status;
+}
+
+
+celix_status_t bundleActivator_start(void * userData, bundle_context_pt context) {
+ struct userData * data = (struct userData *) userData;
+ printf("Started log example\n");
+ logHelper_start(data->log_helper);
+ data->running = true;
+ pthread_create(&data->logger_thread, NULL, loggerThread, data);
+ return CELIX_SUCCESS;
+}
+
+celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) {
+ struct userData * data = (struct userData *) userData;
+ printf("Stopping logger example\n");
+ data->running = false;
+ pthread_join(data->logger_thread, NULL);
+ logHelper_stop(data->log_helper);
+ return CELIX_SUCCESS;
+}
+
+celix_status_t bundleActivator_destroy(void * userData, bundle_context_pt context) {
+ struct userData * data = (struct userData *) userData;
+ logHelper_destroy(&data->log_helper);
+ free(userData);
+ return CELIX_SUCCESS;
+}
+
+static void *loggerThread(void *userData) {
+ struct userData * data = (struct userData *) userData;
+ while (data->running) {
+ logHelper_log(data->log_helper, OSGI_LOGSERVICE_INFO, "My log message");
+ sleep(1);
+ }
+ return NULL;
+}
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/mongoose/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/celix-examples/mongoose/CMakeLists.txt b/examples/celix-examples/mongoose/CMakeLists.txt
new file mode 100644
index 0000000..d0e94ae
--- /dev/null
+++ b/examples/celix-examples/mongoose/CMakeLists.txt
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+add_library(mongooselib STATIC private/src/mongoose.c)
+SET_TARGET_PROPERTIES(mongooselib PROPERTIES COMPILE_FLAGS -fPIC)
+
+SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_mongoose")
+SET(BUNDLE_VERSION "0.0.1")
+
+include_directories("private/include")
+include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
+
+if(WIN32)
+ set(LIBS wsock32)
+endif(WIN32)
+
+add_celix_bundle(mongoose
+ VERSION 0.0.1
+ SOURCES
+ private/src/activator
+ private/include/mongoose.h
+)
+
+celix_bundle_files(mongoose ${CMAKE_CURRENT_LIST_DIR}/root)
+
+target_link_libraries(mongoose PRIVATE mongooselib ${LIBS})
+
+add_celix_container("mongoose_deploy" BUNDLES Celix::shell Celix::shell_tui Celix::log_service mongoose)
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/mongoose/private/include/mongoose.h
----------------------------------------------------------------------
diff --git a/examples/celix-examples/mongoose/private/include/mongoose.h b/examples/celix-examples/mongoose/private/include/mongoose.h
new file mode 100644
index 0000000..a846df4
--- /dev/null
+++ b/examples/celix-examples/mongoose/private/include/mongoose.h
@@ -0,0 +1,218 @@
+// Copyright (c) 2004-2010 Sergey Lyubka
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#ifndef MONGOOSE_HEADER_INCLUDED
+#define MONGOOSE_HEADER_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+struct mg_context; // Handle for the HTTP service itself
+struct mg_connection; // Handle for the individual connection
+
+
+// This structure contains information about the HTTP request.
+struct mg_request_info {
+ char *request_method; // "GET", "POST", etc
+ char *uri; // URL-decoded URI
+ char *http_version; // E.g. "1.0", "1.1"
+ char *query_string; // \0 - terminated
+ char *remote_user; // Authenticated user
+ char *log_message; // Mongoose error log message
+ long remote_ip; // Client's IP address
+ int remote_port; // Client's port
+ int status_code; // HTTP reply status code
+ int is_ssl; // 1 if SSL-ed, 0 if not
+ int num_headers; // Number of headers
+ struct mg_header {
+ char *name; // HTTP header name
+ char *value; // HTTP header value
+ } http_headers[64]; // Maximum 64 headers
+};
+
+// Various events on which user-defined function is called by Mongoose.
+enum mg_event {
+ MG_NEW_REQUEST, // New HTTP request has arrived from the client
+ MG_HTTP_ERROR, // HTTP error must be returned to the client
+ MG_EVENT_LOG, // Mongoose logs an event, request_info.log_message
+ MG_INIT_SSL, // Mongoose initializes SSL. Instead of mg_connection *,
+ // SSL context is passed to the callback function.
+};
+
+// Prototype for the user-defined function. Mongoose calls this function
+// on every event mentioned above.
+//
+// Parameters:
+// event: which event has been triggered.
+// conn: opaque connection handler. Could be used to read, write data to the
+// client, etc. See functions below that accept "mg_connection *".
+// request_info: Information about HTTP request.
+//
+// Return:
+// If handler returns non-NULL, that means that handler has processed the
+// request by sending appropriate HTTP reply to the client. Mongoose treats
+// the request as served.
+// If callback returns NULL, that means that callback has not processed
+// the request. Handler must not send any data to the client in this case.
+// Mongoose proceeds with request handling as if nothing happened.
+typedef void * (*mg_callback_pt)(enum mg_event event,
+ struct mg_connection *conn,
+ const struct mg_request_info *request_info);
+
+
+// Start web server.
+//
+// Parameters:
+// callback: user defined event handling function or NULL.
+// options: NULL terminated list of option_name, option_value pairs that
+// specify Mongoose configuration parameters.
+//
+// Example:
+// const char *options[] = {
+// "document_root", "/var/www",
+// "listening_ports", "80,443s",
+// NULL
+// };
+// struct mg_context *ctx = mg_start(&my_func, options);
+//
+// Please refer to http://code.google.com/p/mongoose/wiki/MongooseManual
+// for the list of valid option and their possible values.
+//
+// Return:
+// web server context, or NULL on error.
+struct mg_context *mg_start(mg_callback_pt callback, const char **options);
+
+
+// Stop the web server.
+//
+// Must be called last, when an application wants to stop the web server and
+// release all associated resources. This function blocks until all Mongoose
+// threads are stopped. Context pointer becomes invalid.
+void mg_stop(struct mg_context *);
+
+
+// Get the value of particular configuration parameter.
+// The value returned is read-only. Mongoose does not allow changing
+// configuration at run time.
+// If given parameter name is not valid, NULL is returned. For valid
+// names, return value is guaranteed to be non-NULL. If parameter is not
+// set, zero-length string is returned.
+const char *mg_get_option(const struct mg_context *ctx, const char *name);
+
+
+// Return array of strings that represent valid configuration options.
+// For each option, a short name, long name, and default value is returned.
+// Array is NULL terminated.
+const char **mg_get_valid_option_names(void);
+
+
+// Add, edit or delete the entry in the passwords file.
+//
+// This function allows an application to manipulate .htpasswd files on the
+// fly by adding, deleting and changing user records. This is one of the
+// several ways of implementing authentication on the server side. For another,
+// cookie-based way please refer to the examples/chat.c in the source tree.
+//
+// If password is not NULL, entry is added (or modified if already exists).
+// If password is NULL, entry is deleted.
+//
+// Return:
+// 1 on success, 0 on error.
+int mg_modify_passwords_file(struct mg_context *ctx,
+ const char *passwords_file_name, const char *user, const char *password);
+
+// Send data to the client.
+int mg_write(struct mg_connection *, const void *buf, size_t len);
+
+
+// Send data to the browser using printf() semantics.
+//
+// Works exactly like mg_write(), but allows to do message formatting.
+// Note that mg_printf() uses internal buffer of size IO_BUF_SIZE
+// (8 Kb by default) as temporary message storage for formatting. Do not
+// print data that is bigger than that, otherwise it will be truncated.
+int mg_printf(struct mg_connection *, const char *fmt, ...);
+
+
+// Read data from the remote end, return number of bytes read.
+int mg_read(struct mg_connection *, void *buf, size_t len);
+
+
+// Get the value of particular HTTP header.
+//
+// This is a helper function. It traverses request_info->http_headers array,
+// and if the header is present in the array, returns its value. If it is
+// not present, NULL is returned.
+const char *mg_get_header(const struct mg_connection *, const char *name);
+
+
+// Get a value of particular form variable.
+//
+// Parameters:
+// data: pointer to form-uri-encoded buffer. This could be either POST data,
+// or request_info.query_string.
+// data_len: length of the encoded data.
+// var_name: variable name to decode from the buffer
+// buf: destination buffer for the decoded variable
+// buf_len: length of the destination buffer
+//
+// Return:
+// On success, length of the decoded variable.
+// On error, -1 (variable not found, or destination buffer is too small).
+//
+// Destination buffer is guaranteed to be '\0' - terminated. In case of
+// failure, dst[0] == '\0'.
+int mg_get_var(const char *data, size_t data_len,
+ const char *var_name, char *buf, size_t buf_len);
+
+// Fetch value of certain cookie variable into the destination buffer.
+//
+// Destination buffer is guaranteed to be '\0' - terminated. In case of
+// failure, dst[0] == '\0'. Note that RFC allows many occurrences of the same
+// parameter. This function returns only first occurrence.
+//
+// Return:
+// On success, value length.
+// On error, -1 (either "Cookie:" header is not present at all, or the
+// requested parameter is not found, or destination buffer is too small
+// to hold the value).
+int mg_get_cookie(const struct mg_connection *,
+ const char *cookie_name, char *buf, size_t buf_len);
+
+
+// Return Mongoose version.
+const char *mg_version(void);
+
+
+// MD5 hash given strings.
+// Buffer 'buf' must be 33 bytes long. Varargs is a NULL terminated list of
+// asciiz strings. When function returns, buf will contain human-readable
+// MD5 hash. Example:
+// char buf[33];
+// mg_md5(buf, "aa", "bb", NULL);
+void mg_md5(char *buf, ...);
+
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // MONGOOSE_HEADER_INCLUDED
http://git-wip-us.apache.org/repos/asf/celix/blob/a8b8410f/examples/celix-examples/mongoose/private/src/activator.c
----------------------------------------------------------------------
diff --git a/examples/celix-examples/mongoose/private/src/activator.c b/examples/celix-examples/mongoose/private/src/activator.c
new file mode 100644
index 0000000..beea9df
--- /dev/null
+++ b/examples/celix-examples/mongoose/private/src/activator.c
@@ -0,0 +1,79 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements. See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership. The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * activator.c
+ *
+ * \date Aug 20, 2010
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "bundle_activator.h"
+#include "mongoose.h"
+
+struct userData {
+ struct mg_context *ctx;
+ char* entry;
+};
+
+celix_status_t bundleActivator_create(bundle_context_pt __attribute__((unused)) context, void **userData) {
+ *userData = calloc(1, sizeof(struct userData));
+ return CELIX_SUCCESS;
+}
+
+celix_status_t bundleActivator_start(void * userData, bundle_context_pt context) {
+ bundle_pt bundle;
+ celix_status_t status = CELIX_SUCCESS;
+ struct userData * data = (struct userData *) userData;
+
+ if (bundleContext_getBundle(context, &bundle) == CELIX_SUCCESS) {
+ bundle_getEntry(bundle, "root", &data->entry);
+ const char *options[] = {
+ "document_root", data->entry,
+ "listening_ports", "8081",
+ NULL
+ };
+
+ data->ctx = mg_start(NULL, options);
+
+ if (data->ctx) {
+ printf("Mongoose started on: %s\n", mg_get_option(data->ctx, "listening_ports"));
+ }
+ } else {
+ status = CELIX_START_ERROR;
+ }
+
+ return status;
+}
+
+celix_status_t bundleActivator_stop(void * userData, bundle_context_pt __attribute__((unused)) context) {
+ struct userData * data = (struct userData *) userData;
+ mg_stop(data->ctx);
+ printf("Mongoose stopped\n");
+ return CELIX_SUCCESS;
+}
+
+celix_status_t bundleActivator_destroy(void * userData, bundle_context_pt __attribute__((unused)) context) {
+ struct userData * data = (struct userData *) userData;
+ free(data->entry);
+ free(data);
+ return CELIX_SUCCESS;
+}