Open Allen-Webb opened 2 years ago
It looks like you can rely on absl_config.pc to provide the redundant CFLAGS, and strip them from everything else that requires absl_config.
Here is a patch we are considering using for ChromeOS: https://chromium-review.googlesource.com/c/chromiumos/overlays/chromiumos-overlay/+/3630468/1/dev-cpp/abseil-cpp/files/abseil-cpp-20211102.0-fix-pkgconfig.patch
I see you're making your own absl.pc in src_compile
- are you having problems using that one or using the files we provide?
What specific pkg-config invocation is leading to problems? I'd like to reproduce this so I can validate your proposed patch.
I am having issues with the files provided. Picking an arbitrary sublibrary absl_base: here is the output without my fix:
pkg-config --cflags absl_base
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX \
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX \
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX \
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX \
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX \
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX \
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX \
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX \
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX \
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX \
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX
On doublechecking with my patch it looks like absl_config is being filtered in error, but ideally it would have the shared cflags since it is required by all the other sub-libraries. Here is pkgconfig for it:
pkg-config --cflags absl_config
-Wno-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-float-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-unknown-warning-option -DNOMINMAX
Notice the lack of repetition.
Piling on to this issue, on macOS the abseil pkgconfig files now contain flags that make other software fail:
$ pkg-config --cflags absl_random_internal_randen_hwaes
-Wno-float-conversion \
-Wno-implicit-float-conversion \
-Wno-implicit-int-float-conversion \
-Wno-unknown-warning-option \
-DNOMINMAX \
-Xarch_x86_64 \
-Xarch_arm64 \
-Wno-unused-command-line-argument \
-Wno-float-conversion \
-Wno-implicit-float-conversion \
-Wno-implicit-int-float-conversion \
-Wno-unknown-warning-option \
-DNOMINMAX \
-Xarch_x86_64 \
-Xarch_arm64 \
-Wno-unused-command-line-argument \
-Wno-float-conversion \
-Wno-implicit-float-conversion \
-Wno-implicit-int-float-conversion \
-Wno-unknown-warning-option \
-DNOMINMAX \
-Wno-float-conversion \
-Wno-implicit-float-conversion \
-Wno-implicit-int-float-conversion \
-Wno-unknown-warning-option \
-DNOMINMAX \
-I/opt/local/include
The inclusion of -Xarch_x86_64
and -Xarch_arm64
causes
$ /usr/bin/clang++ \
-I/opt/local/var/macports/build/_opt_dports_devel_Bear/Bear/work/build/subprojects/Build/BearSource \
-I/opt/local/var/macports/build/_opt_dports_devel_Bear/Bear/work/build/subprojects/Build/BearSource/intercept/proto \
-isystem /opt/local/libexec/openssl3/include \
-pipe \
-Os \
-DNDEBUG \
-I/opt/local/include \
-stdlib=libc++ \
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk \
-fno-exceptions \
-DSPDLOG_NO_EXCEPTIONS \
-DGOOGLE_PROTOBUF_NO_RTTI \
-Wall \
-Wextra \
-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk \
-mmacosx-version-min=12.0 \
-Wno-float-conversion \
-Wno-implicit-float-conversion \
-Wno-implicit-int-float-conversion \
-Wno-unknown-warning-option \
-DNOMINMAX \
-Xarch_x86_64 \
-Xarch_arm64 \
-Wno-unused-command-line-argument \
-std=c++17 \
-MD \
-MT intercept/proto/CMakeFiles/rpc_a.dir/supervise.pb.cc.o \
-MF CMakeFiles/rpc_a.dir/supervise.pb.cc.o.d \
-o CMakeFiles/rpc_a.dir/supervise.pb.cc.o \
-c /opt/local/var/macports/build/_opt_dports_devel_Bear/Bear/work/build/subprojects/Build/BearSource/intercept/proto/supervise.pb.cc
clang: error: invalid Xarch argument: '-Xarch_x86_64 -Xarch_arm64', options requiring arguments are unsupported
Is it really necessary to include all these cflags in the pkg-config files? Shouldn't the pkg-config files only include those flags that are required to compile against abseil (which certainly none of the warning options are, for example)?
I agree there shouldn't be warning related flags in the pkg-config entries.
The issue which the inclusion of -Xarch_x86_64
and -Xarch_arm64
causes is here:
Including the pkgconfig from abseil results in hundreds of CFLAGS many of which are redundant. I believe they could be restructured to have one common pkconfig that is added to "requires" so the CFLAGS are only included once.
Here is an example of the CFLAGS that are repeated: