diff --git a/.github/workflows/ci-scripts-build.yml b/.github/workflows/ci-scripts-build.yml index 070f6f2..beefedb 100644 --- a/.github/workflows/ci-scripts-build.yml +++ b/.github/workflows/ci-scripts-build.yml @@ -177,9 +177,10 @@ jobs: if: ${{ always() && runner.os == 'macOS' }} run: otool -D -L -l bundle/usr/*/lib/*.dylib lib/*/*.dylib bin/*/pvxinfo - name: readelf - if: ${{ always() && runner.os == 'Linux' }} + if: ${{ always() && runner.os == 'Linux' && matrix.base != '3.14' }} run: find bundle/usr lib -name '*.so' -print0 | xargs -0 readelf -d bin/linux-*/pvxinfo - name: Host info + if: ${{ matrix.base != '3.14' }} run: python .ci/cue.py --add-path "{TOP}/bin/{EPICS_HOST_ARCH}" --add-path "{TOP}/bundle/usr/{EPICS_HOST_ARCH}/lib" exec pvxinfo -D - name: Test env setup run: echo "UBSAN_OPTIONS=log_path=$PWD/UBSAN:suppressions=$PWD/.ci-local/ubsan.supp:report_error_type=1:print_stacktrace=1" >> $GITHUB_ENV diff --git a/tools/Makefile b/tools/Makefile index 18785fc..9c885d2 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -5,6 +5,8 @@ include $(TOP)/configure/CONFIG # ADD MACRO DEFINITIONS AFTER THIS LINE #============================= +ifdef BASE_3_15 + # access to private headers USR_CPPFLAGS += -I$(TOP)/src @@ -34,6 +36,8 @@ pvxlist_SRCS += list.cpp PROD += pvxmshim pvxmshim_SRCS += mshim.cpp +endif # BASE_3_15 + #=========================== include $(TOP)/configure/RULES diff --git a/tools/put.cpp b/tools/put.cpp index a57b453..8685c54 100644 --- a/tools/put.cpp +++ b/tools/put.cpp @@ -12,8 +12,11 @@ #include #include +#define PVXS_ENABLE_EXPERT_API + #include #include +#include #include "utilpvt.h" #include "evhelper.h" @@ -85,9 +88,10 @@ int main(int argc, char *argv[]) if(argc-optind==1 && std::string(argv[optind]).find_first_of('=')==std::string::npos) { // only one field assignment, and field name omitted. - // implies .value + // if JSON map, treat as entire struct. Others imply .value - values["value"] = argv[optind]; + auto sval(argv[optind]); + values[sval[0]=='{' ? "" : "value"] = sval; } else { for(auto n : range(optind, argc)) { @@ -120,9 +124,18 @@ int main(int argc, char *argv[]) val.unmark(false, true); for(auto& pair : values) { try{ - val[pair.first] = pair.second; - }catch(NoConvert& e){ - throw std::runtime_error(SB()<<"Unable to assign "<