Hi Florian,
On 2024-04-10 16:40, Florian Forster wrote:
pkg-config references paths (/build/reproducible-path/…) that likely
exist on the build system, but are not provided by the package:
```
# pkg-config epics-base --cflags | sed -e 's/ */\n/g'
-I/build/reproducible-path/epics-base-7.0.8+dfsg1/include
-I/build/reproducible-path/epics-base-7.0.8+dfsg1/include/os/Linux
-I/build/reproducible-path/epics-base-7.0.8+dfsg1/include/compiler/gcc
-D_GNU_SOURCE
-D_DEFAULT_SOURCE
-D_X86_64_
-DUNIX
-Dlinux
-ffile-prefix-map=/build/reproducible-path/epics-base-7.0.8+dfsg1=.
-D_FORTIFY_SOURCE=2
-ffile-prefix-map=/build/reproducible-path/epics-base-7.0.8+dfsg1=.
-fstack-protector-strong
-fstack-clash-protection
-fcf-protection
-D_FORTIFY_SOURCE=2
-mtune=generic
-m64
# dpkg -L epics-dev | grep /build; echo $?
1
```
You are right - this has been reported as bug #1059706 and marked as
fixed since, although incorrect paths apparently were left in
epics-base.pc. I have reopened #1059706 to deal with that.
Unrelated to this bug: my recommendation would be to keep the CPP flags
(`-I`, `-D`) and remove the C flags (`-f`, `-m`).
It seems that EPICS straightforwardly puts its build flags to
epics-base.pc. Many of these flags are specific to EPICS build and
should not be used for reverse-dependencies.
What compiler do you use?
We test our project with GCC and clang.
OK, thanks.
Does this patch work for you?
Kind of. It fixes the compiler specific include described in the initial
report, but fails to find an OS specific include:
```
In file included from /usr/include/epics/cadef.h:35,
from src/epics.c:26:
/usr/include/epics/epicsThread.h:468:10: fatal error: osdThread.h: No
such file or directory
468 | #include "osdThread.h"
| ^~~~~~~~~~~~~
```
Can you as well try to add /usr/include/compiler/gcc to your compiler's include
path?
That path alone is not enough, but this works:
```
make CPPFLAGS="-I/usr/include/epics -I/usr/include/epics/compiler/gcc
-I/usr/include/epics/os/Linux"
```
I guess that both /usr/include/epics/os/Linux/ and
/usr/include/epics/compiler/gcc/ should be in the include path. Thus the
following should work on GCC without patching EPICS code:
make CPPFLAGS="-I/usr/include/epics -I/usr/include/epics/compiler/gcc
-I/usr/include/epics/os/Linux"
I wonder why clang cannot work with compilerSpecific.h. Most likely it
contains GCC-specific instructions.
I think a viable solution for clang would be to create an empty file in
/usr/include/epics/compiler/clang/compilerSpecific.h (no compiler
specific settings for clang) and use include paths to indicate the used
compiler, for clang:
make CPPFLAGS="-I/usr/include/epics -I/usr/include/epics/compiler/clang
-I/usr/include/epics/os/Linux"
However, this should better be discussed with the upstream. They may
want to automatically identify the compiler using __GNUC__ and similar
checks.
Thanks for your time and effort maintaining this package, I appreciate it!
Thank you for the report!
Best wishes,
Andrius
--
debian-science-maintainers mailing list
debian-science-maintainers@alioth-lists.debian.net
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/debian-science-maintainers