Hi Pepijn, your changes/fix is working. Hello world example works as expected.
I will try to migrate all my bundles to CELIX 2.x. This looks like more work than I first expected. Thank you for the support. Enjoy the days away. Kind Regards, Miroslav 2016-04-22 15:37 GMT+02:00 Pepijn Noltes <[email protected]>: > Hi Miroslav, > > > On Thu, Apr 21, 2016 at 9:49 PM Miroslav Beranič < > [email protected]> wrote: > >> Hi Pepijn, >> >> I've updated GIT repository. This was quick. >> >> $ sh ./run.sh >> -> entry .cache/bundle4/version0.0/root >> Mongoose started on: 8081 >> Launcher: Framework Started >> ^C INFO: FRAMEWORK: Start shutdownthread >> INFO: FRAMEWORK: Shutdown >> Mongoose stopped >> INFO: FRAMEWORK: Successful shutdown >> Launcher: Exit >> $ >> >> Looks like it works. So thank you very much. >> >> I thought bundle_files are only for the per-file addition of resources >> to the bundle. Need to check it out further. >> >> Well, I used IMPORT_LIBRARIES until now -- so this was not used/picked >> up by CELIX? Hmmm. >> > > Yeah. I really did not expect this was used, I did take the effort to look > a bit more deeply. The support for import libraries is still in the > framework, so I had this wrong. > I added an issue [1] and committed an update to the develop branch to > enable import libraries in the updated cmake commands. See hello_world as > example. > > Could you test if this works for you? > > Do note, that this is different from what you used to do. I have been > investigating how Celix could do import libraries. The challenges is that > normally dlopen has a flat namespace. > Meaning that if there is a library with a certain SONAME header, that > library will automatically be used to satisfies a NEEDED header... well as > far is I known. > The result is that SONAME and NEEDED need to match only when the resolver > has resolved the libraries. This implies that we need to runtime update the > library binaries. > > I have been investigating dlmopen [2], part of the latest (?) gnu libc, and > this seems a perfect solution, but is only for the "latest and greatest" > linux distros. > Another solution solution could be explicitly reloading certain libraries, > but I still need to test this. > > In short import libraries works, but I am not sure how it acts if multiple > exported library versions are available in the framework... > > Btw I will be away for a few days, so if there any more issues I am not > able the respond directly. > > [1] https://issues.apache.org/jira/browse/CELIX-356 > [2] http://man7.org/linux/man-pages/man3/dlopen.3.html > > > > >> >> >> OK, I have like this (this is current setup, working with CELIX 1.x -- >> do not know the exact version number). >> >> Bundle 1: >> >> BUNDLE_LIBRARY(my_lib_1 >> SOURCES >> private/src/source.c >> LINK_LIBRARIES >> celix_framework >> ) >> >> BUNDLE_PRIVATE_LIBRARY(private >> SOURCES >> private/src/activator.c >> LINK_LIBRARIES >> celix_framework >> my_lib_1 >> ) >> >> BUNDLE( >> ACTIVATOR "${BUNDLE_SYMBOLICNAME}-private" >> PRIVATE_LIBRARIES "private" >> EXPORT_LIBRARIES my_lib_1 >> ) >> >> I use this in other bundles: >> BUNDLE(my_bundle_1 >> SOURCES >> private/src/activator >> IMPORT_LIBRARIES >> "my_lib_1" >> ) >> >> >> Well, do not ask me how I picked up this flow, as I forgot. I picked >> up from existing (at that time) examples, samples and CELIX source >> tree. >> >> >> Do you suggest better flow/arrangement of the bundles/libraries? >> >> >> One thing that I would like to achieve is: >> a.) Make my own sources compiled to a library available to other >> bundles on the same CELIX deployment. >> b.) Make 3rd party libraries deployed on CELIX and available to other >> bundles deployed on the same CELIX deployment >> >> I thought this solves my issue, do you suggest another approach? >> >> >> >> Well, I'm still working on "my" HTTP CELIX Service. I do not want to >> make it public, as I have to work on the API and developer examples >> and documentation. What I can say is --- CELIX is my top favorite >> project to work with. It brought back the love for the C language. I >> know you do not agree/approve C++, I will have to use it - as I am >> using Boost Spirit for a text parser. It is the only C/C++ project >> that I know to work with. >> I also wrote small CSP - C server pages parser, to be able to write >> "JSP like" pages and do like <%= "Hello world" %> ( and much more :D >> ), compile it to C (at the CMake run) and deploy it to CELIX bundle >> and be deployed and served on /hello URL. BUT: it is long way to have >> it memory leak free and developer friendly. Hacking is one effort, >> public/production project takes another :D . >> >> >> All in all, thank you for the quick response. Now I have another bone >> to chew on :D . >> >> >> >> Thank you. Kind Regards, >> Miroslav >> >> >> >> >> >> 2016-04-21 21:05 GMT+02:00 Pepijn Noltes <[email protected]>: >> > Hi Miroslav, >> > >> > On Thu, Apr 21, 2016 at 5:57 PM, Miroslav Beranič >> > <[email protected]> wrote: >> >> Hi Pepijn, >> >> >> >> I've just now, yesterday, updated GIT - and took time to checkout new >> >> version of CELIX. >> >> Nothing was building nor working :D So that is a good start - a lot of >> changes. >> >> >> >> I think I am more-or-less clear on all the changes done, but some are >> >> still getting my head knocking against my desk. >> >> >> >> As I did not find answer in the current source tree or documentation, >> >> can be I was sloppy, but. Could you be kind to help me about a bit. >> >> >> >> So I had a bundle, that has CMake definition like this: >> >> >> >> bundle(${BUNDLE_SYMBOLICNAME} >> >> SOURCES >> >> private/src/activator >> >> DIRECTORIES >> >> root >> >> ) >> >> >> >> Where did the DIRECTORIES command/directive move to? I saw: add_files, >> >> but not directories. >> >> I looked at the mongoose example, but - I am not able to get it >> >> working, as it looks like it is also missing this root directory in >> >> the bundle entry set. >> > >> > Oops. Good catch, yes the mongoose example did not work anymore. I >> > just committed the fix on the develop branch. >> > Please check this out, it uses the bundle_files cmake command to add a >> > directory to the bundle. >> > I did notice that for me make clean was needed to trigger a new >> > creation of the bundle zip. >> > >> >> >> >> I build CELIX and Mongoose example like this: >> >> >> >> >> >> git clone https://github.com/apache/celix.git >> >> git checkout develop >> >> >> >> mkdir build && cd build >> >> cmake -DBUILD_DEPENDENCY_MANAGER=ON -DBUILD_DEPLOYMENT_ADMIN=ON >> >> -DBUILD_DEVICE_ACCESS=ON -DBUILD_DEVICE_ACCESS_EXAMPLE=ON >> >> -DBUILD_EXAMPLES=ON -DBUILD_FRAMEWORK=ON -DBUILD_LAUNCHER=ON >> >> -DBUILD_LOG_SERVICE=ON -DBUILD_LOG_WRITER=ON >> >> -DBUILD_LOG_WRITER_SYSLOG=ON -DBUILD_REMOTE_SERVICE_ADMIN=ON >> >> -DBUILD_REMOTE_SHELL=ON -DBUILD_SHELL=ON -DBUILD_SHELL_TUI=ON >> >> -DCMAKE_BUILD_TYPE=Debug -DDOXYFILE_LATEX=ON >> >> -DJAR_COMMAND=/opt/jdk1.8/bin/jar -DCMAKE_INSTALL_PREFIX=/opt/celix/ >> >> ../celix/ >> >> >> >> make all >> >> >> >> make deploy >> >> >> >> >> >> cd deploy/mongoose_deploy >> >> >> >> $ sh ./run.sh >> >> -> entry (null) >> >> Launcher: Framework Started >> >> INFO: FRAMEWORK: Start shutdownthread >> >> >> >> CTRL+C >> >> >> >> INFO: FRAMEWORK: Shutdown >> >> Segmentation fault (core dumped) >> >> $ >> >> $ tree .cache/bundle4/ >> >> .cache/bundle4/ >> >> ├── bundle.id >> >> ├── bundle.lastmodified >> >> ├── bundle.location >> >> └── version0.0 >> >> ├── libmongoose.so.0 >> >> ├── META-INF >> >> │ └── MANIFEST.MF >> >> └── revision.location >> >> >> >> 2 directories, 6 files >> >> >> >> >> >> Did I miss something or is this example not correct? It looks like it >> >> is missing something as the startup fails and there is no response on >> >> port 8081. >> >> >> >> >> >> Another problem I have, and also failed to find appropriate replacement >> is: >> >> >> >> BUNDLE(${BUNDLE_SYMBOLICNAME} >> >> SOURCES >> >> private/src/activator.c >> >> IMPORT_LIBRARIES >> >> "eu.mibesis.httpservice.api.library" >> >> "eu.mibesis.mvc.api.library" >> >> ) >> >> >> >> With what is the command IMPORT_LIBRARIES replaced? Also for this I >> >> did not find working replacement. >> > >> > The IMPORT_LIBARIES is also part of the updated cmake command. But i >> > saw there was a typo in the >> > cmake command document. I also commit a update for this on the develop >> branch. >> > >> > That being said, import libraries are not yet supported. >> > I known we had some experimental changes from that, but in the current >> > master/develop this is not used. >> > Note that this is not the result of the revamped cmake commands. >> > >> > Do you really import the libraries from different bundles? >> > Or do want to embed the libraries in your bundles, because for the >> > latter you the PRIVATE_LIBRARIES options in add_bundle (or >> > bundles_private_libs cmake command) >> > >> > >> >> >> >> For other changes it was well documented and working as advertised. >> >> >> >> >> >> I've tried master and develop branch from GitHub GIT repository. >> >> >> >> I've also not tried the celix bootstrap project, but it looks really >> >> interesting. +1 for it. >> >> >> >> >> >> Kind Regards, >> >> Miroslav >> >> >> >> >> >> 2016-02-04 14:44 GMT+01:00 Pepijn Noltes <[email protected]>: >> >>> Hi All, >> >>> >> >>> I have been working on a revamp of the Celix specific CMake commands. >> The >> >>> main reason to do this was to get rid of the deploy.cmake files. >> >>> At the moment these files are needed when you want to create a >> "deployment" >> >>> of a selection of bundes. >> >>> One of the problems is that even if you disabled a certain >> subdirectory the >> >>> deploy.cmake in that directory will still be processed. To counter this >> >>> additional CMake code is needed. >> >>> >> >>> To solve this and some other issues I rewrote the Packaging.cmake so >> that >> >>> to process is more based on CMake target properties [1] and CMake >> generator >> >>> expressions [2]. I also took the liberty to split up and rename the >> >>> commands in a more CMake style (e.g. add_<target_type> commands) >> >>> >> >>> Differences are >> >>> - No separate deploy.cmake needed. You can use add_deploy in normal >> >>> CMakeLists.txt files. Also as result no additional test concerning >> >>> subprojects are needed. >> >>> - bundle command has become add_bundle command >> >>> - deploy command has become add_deploy command >> >>> - possibility to create multiple bundles in one CMakeLists.txt file. >> >>> - There are several supporting CMake commands for add_bundle and >> add_deploy >> >>> - version info of bundle also used for so version information >> >>> - libcelix_framework, libcelix_utils and libcelix_dfi are now generated >> >>> with a so version. >> >>> - Added CMake commands are documented in documents dir, see [3] >> >>> - Legacy wrapper command for bundle -> add_bundle and deploy-> >> add_deploy >> >>> exists. Supporting most, but not all old features. >> >>> - For the Celix project all existing bundle commands and deploy.cmake >> files >> >>> are updated to the new commands >> >>> - If jar or zip command is present on the host system, make install >> can be >> >>> used. If not make install-all (CPack) must be used. CMake will >> generate a >> >>> message for this. >> >>> - add_deploy supports adding not yet existing bundle targets. Removing >> the >> >>> need for certain add_bundle ordering. >> >>> - support for Ninja and "make -j" >> >>> - Moved and updated the "Apache Celix Subprojects", "building Apache >> Celix" >> >>> and "Getting Started with Apache Celix" to the documents dir, see [4]. >> [5] >> >>> and [6] >> >>> >> >>> If there are no objections I would like to merge this feature into the >> >>> development branch. >> >>> The documentation still needs some work and there are probably still >> some >> >>> bugs. but I would prefer to push this in preparation of a next Celix >> >>> release. >> >>> >> >>> [1] >> https://cmake.org/cmake/help/v3.4/command/set_target_properties.html >> >>> [2] >> >>> >> https://cmake.org/cmake/help/v3.4/manual/cmake-generator-expressions.7.html?highlight=generator >> >>> [3] >> >>> >> https://github.com/apache/celix/blob/feature/CELIX-335_deploy_refactoring/documents/cmake_commands/readme.md >> >>> [4] >> >>> >> https://github.com/apache/celix/tree/feature/CELIX-335_deploy_refactoring/documents/subprojects >> >>> [5] >> >>> >> https://github.com/apache/celix/tree/feature/CELIX-335_deploy_refactoring/documents/building >> >>> [6] >> >>> >> https://github.com/apache/celix/tree/feature/CELIX-335_deploy_refactoring/documents/getting_started >> >>> >> >>> >> >>> Greetings, >> >>> Pepijn >> >> >> >> >> >> >> >> -- >> >> Miroslav Beranič >> >> MIBESIS >> >> +386(0)40/814-843 >> >> [email protected] >> >> http://www.mibesis.si >> >> >> >> -- >> Miroslav Beranič >> MIBESIS >> +386(0)40/814-843 >> [email protected] >> http://www.mibesis.si >> -- Miroslav Beranič MIBESIS +386(0)40/814-843 [email protected] http://www.mibesis.si
