Hi Antal, Thank you for your feedback. I finally discovered the cmake variable equivalent for DESTDIR which is CMAKE_STAGING_PREFIX. So: set(EXEC_PREFIX "/usr") set(SYSLOG_NG_CMAKE_ARGS ${CCACHE_LAUNCH_RULE} -DCMAKE_INSTALL_PREFIX=${EXEC_PREFIX} -DCMAKE_STAGING_PREFIX=${SYSLOG_NG_INSTALL_DIR} ) And then use this CMAKE_ARGS in the External project. Now I running into another issue: *root@5526d87140af:/thanos/src/target/build# cat /thanos/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CMakeError.logDetermining size of struct cmsgcred failed with the following output:Change Dir: /thanos/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CMakeTmpRun Build Command:"/usr/bin/make" "cmTC_05392/fast"make[3]: Entering directory '/thanos/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CMakeTmp'/usr/bin/make -f CMakeFiles/cmTC_05392.dir/build.make CMakeFiles/cmTC_05392.dir/buildmake[4]: Entering directory '/thanos/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CMakeTmp'Building C object CMakeFiles/cmTC_05392.dir/STRUCT_CMSGCRED.c.o/usr/bin/cc -D_GNU_SOURCE=1 -fPIE -o CMakeFiles/cmTC_05392.dir/STRUCT_CMSGCRED.c.o -c /thanos/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c/thanos/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c:19:22: error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' #define SIZE (sizeof(struct cmsgcred)) ^/thanos/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c:21:12: note: in expansion of macro 'SIZE' ('0' + ((SIZE / 10000)%10)), ^~~~/home/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c:19:22: error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' #define SIZE (sizeof(struct cmsgcred)) ^/home/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c:22:12: note: in expansion of macro 'SIZE' ('0' + ((SIZE / 1000)%10)), ^~~~/home/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c:19:22: error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' #define SIZE (sizeof(struct cmsgcred)) ^/home/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c:23:12: note: in expansion of macro 'SIZE' ('0' + ((SIZE / 100)%10)), ^~~~/home/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c:19:22: error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' #define SIZE (sizeof(struct cmsgcred)) ^/home/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c:24:12: note: in expansion of macro 'SIZE' ('0' + ((SIZE / 10)%10)), ^~~~/home/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c:19:22: error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' #define SIZE (sizeof(struct cmsgcred)) ^/home/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CheckTypeSize/STRUCT_CMSGCRED.c:25:12: note: in expansion of macro 'SIZE' ('0' + (SIZE % 10)), ^~~~CMakeFiles/cmTC_05392.dir/build.make:65: recipe for target 'CMakeFiles/cmTC_05392.dir/STRUCT_CMSGCRED.c.o' failedmake[4]: *** [CMakeFiles/cmTC_05392.dir/STRUCT_CMSGCRED.c.o] Error 1make[4]: Leaving directory '/home/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CMakeTmp'Makefile:126: recipe for target 'cmTC_05392/fast' failedmake[3]: *** [cmTC_05392/fast] Error 2make[3]: Leaving directory '/home/src/target/build_sim_cc_x86_64/syslog-ng-ext/src/syslog-ng-ext-build/CMakeFiles/CMakeTmp'* It seems something related with the definition of __linux__ and __FreeBSD__. Can you help me? Thanks in advance, Alex On Tue, Nov 5, 2019 at 7:43 AM Antal Nemes (anemes) < Antal.Nemes@oneidentity.com> wrote:
Hi Alex,
There are two concepts: CMAKE_INSTALL_PREFIX and DESTDIR, that I think you need to apply now.
As a refresher, here is my understanding. CMAKE_INSTALL_PREFIX must be set to the directory, where the artifacts should reside in the custom os. That is most probably "/usr". That should set the the RPATH correctly.
However, from packaging point of view, this causes a little trouble. Because when someone calls make install, the artifacts will be installed to CMAKE_INSTALL_PREFIX, merging the new files with the build OS files. And from that it is very hard to collect the artifacts properly.
That is what DESTDIR is intended to resolve. Instead of calling make install, one needs to call make DESTDIR=<abs path to artifact directory> install. That will create the same structure that would have been created in CMAKE_INSTALL_PREFIX, just in $DESTDIR/$CMAKE_INSTALL_PREFIX. From that you can call targz or anything on the directory to collect the artifacts.
For example: after $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_JAVA=no $ make -j $ mkdir /tmp/result $ make DESTDIR=/tmp/result install
created a /tmp/result/usr/sbin/syslog-ng etc files, but with RPATH:
$ objdump -x /tmp/result/usr/sbin/syslog-ng |grep RPATH RPATH /usr/lib
as expected.
I am afraid I do not know how to translate these into ExternalProject_add though.
Br, Antal ------------------------------ *From:* syslog-ng <syslog-ng-bounces@lists.balabit.hu> on behalf of Alexandre Santos <alexandre.rosas.santos@gmail.com> *Sent:* Monday, November 4, 2019 19:40 *To:* syslog-ng@lists.balabit.hu <syslog-ng@lists.balabit.hu> *Subject:* [syslog-ng] Building syslog with cmake as external project
CAUTION: This email originated from outside of the organization. Do not follow guidance, click links, or open attachments unless you recognize the sender and know the content is safe.
Hi All,
I am trying to build syslog-ng with cmake to add it to a custom Linux distribution.
The problem is that when the syslog-ng is compiled it gets the RPATH of the location where it has been generated:
*root@5526d87140af:/home/src/**chassisx/build# ldd syslog-ng-install/sbin/syslog-*
*ng linux-vdso.so.1 (0x00007fff151ed000) libsyslog-ng.so.3.24.1 => /home/src/target/build/**syslog-ng-install/lib/* *libsyslog-ng.so.3.24.1 (0x00007f81baf89000) libeventlog.so => /home/src/target/build/**syslog-ng-install/lib/* *libeventlog.so (0x00007f81bad84000) libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/* *libgmodule-2.0.so.0 (0x00007f81bab80000) libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/* *libgthread-2.0.so.0 (0x00007f81ba97e000) libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-* *2.0.so.0 (0x00007f81ba66a000) libivykis.so.0 => /home/src/target/build/**syslog-ng-install/lib/* *libivykis.so.0 (0x00007f81ba45b000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.* *so.3 (0x00007f81ba1e8000) libresolv.so.2 => /lib/x86_64-linux-gnu/* *libresolv.so.2 (0x00007f81b9fd1000) libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/* *libssl.so.1.1 (0x00007f81b9d65000) libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/* *libcrypto.so.1.1 (0x00007f81b98cc000) libsecret-storage.so => /home/src/target/build/**syslog-ng-install/lib/* *libsecret-storage.so (0x00007f81b96c8000) libpthread.so.0 => /lib/x86_64-linux-gnu/* *libpthread.so.0 (0x00007f81b94ab000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.*
*6 (0x00007f81b910c000) /lib64/ld-linux-x86-64.so.2 (0x00007f81bb48e000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.**so.2 (0x00007f81b8f08000)*
I am using the cmake file in attachment.
Can you help me? Thanks in advance,
Alex
______________________________________________________________________________ Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng Documentation: http://www.balabit.com/support/documentation/?product=syslog-ng FAQ: http://www.balabit.com/wiki/syslog-ng-faq