From 74ab782d6cae1fd3bbec31d97a2a15dfa247571b Mon Sep 17 00:00:00 2001 From: "Charlton, Scott R." Date: Wed, 14 Aug 2024 13:11:05 -0600 Subject: [PATCH 1/4] Added IPHREEQC_ENABLE_MODULE to matrix for test-clang --- .github/workflows/cmake.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 0d915d61..607b5878 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -114,6 +114,7 @@ jobs: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] + enable_module: [OFF, ON] runs-on: ${{ matrix.os }} env: @@ -138,15 +139,15 @@ jobs: - name: CMake configure if: runner.os == 'Linux' - run: CC=clang CXX=clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON + run: CC=clang CXX=clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:BOOL=OFF -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - name: CMake configure if: runner.os == 'macOS' - run: CC=$(brew --prefix llvm@15)/bin/clang CXX=$(brew --prefix llvm@15)/bin/clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON + run: CC=$(brew --prefix llvm@15)/bin/clang CXX=$(brew --prefix llvm@15)/bin/clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:BOOL=OFF -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - name: CMake configure if: runner.os == 'Windows' - run: cmake -B ${{ env.BUILD_DIR }} -A x64 -T "ClangCL" -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON + run: cmake -B ${{ env.BUILD_DIR }} -A x64 -T "ClangCL" -DBUILD_SHARED_LIBS:BOOL=OFF -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - name: CMake build run: cmake --build ${{ env.BUILD_DIR }} @@ -157,7 +158,7 @@ jobs: - name: Upload results uses: actions/upload-artifact@v4 with: - name: ${{ matrix.os }}-${{ github.job }}-results + name: ${{ matrix.os }}-${{ github.job }}-ENABLE_MODULE=${{ matrix.enable_module }}-results path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/Testing/ test-shared-clang: From 5e2ca7ad5317e3160e9d0ce75ea4b7261c617c11 Mon Sep 17 00:00:00 2001 From: "Charlton, Scott R." Date: Wed, 14 Aug 2024 14:11:04 -0600 Subject: [PATCH 2/4] Combined test-clang with test-shared-clang using matrix --- .github/workflows/cmake.yml | 60 ++++--------------------------------- 1 file changed, 5 insertions(+), 55 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 607b5878..475c7ac6 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -114,6 +114,7 @@ jobs: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] + shared_libs: [OFF, ON] enable_module: [OFF, ON] runs-on: ${{ matrix.os }} @@ -139,15 +140,15 @@ jobs: - name: CMake configure if: runner.os == 'Linux' - run: CC=clang CXX=clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:BOOL=OFF -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON + run: CC=clang CXX=clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - name: CMake configure if: runner.os == 'macOS' - run: CC=$(brew --prefix llvm@15)/bin/clang CXX=$(brew --prefix llvm@15)/bin/clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:BOOL=OFF -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON + run: CC=$(brew --prefix llvm@15)/bin/clang CXX=$(brew --prefix llvm@15)/bin/clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - name: CMake configure if: runner.os == 'Windows' - run: cmake -B ${{ env.BUILD_DIR }} -A x64 -T "ClangCL" -DBUILD_SHARED_LIBS:BOOL=OFF -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON + run: cmake -B ${{ env.BUILD_DIR }} -A x64 -T "ClangCL" -DBUILD_SHARED_LIBS:${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - name: CMake build run: cmake --build ${{ env.BUILD_DIR }} @@ -158,58 +159,7 @@ jobs: - name: Upload results uses: actions/upload-artifact@v4 with: - name: ${{ matrix.os }}-${{ github.job }}-ENABLE_MODULE=${{ matrix.enable_module }}-results - path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/Testing/ - - test-shared-clang: - strategy: - fail-fast: false - matrix: - os: [macos-latest, ubuntu-latest, windows-latest] - - runs-on: ${{ matrix.os }} - env: - BUILD_DIR: _build - - steps: - - uses: actions/checkout@v4 - - - name: Install ninja valgrind (Linux) - if: runner.os == 'Linux' - run: sudo apt-get update && sudo apt-get install -y ninja-build valgrind - - - name: Install ninja (macOS) - if: runner.os == 'macOS' - run: brew install ninja - - - name: Set up Visual Studio shell (Windows) - if: runner.os == 'Windows' - uses: egor-tensin/vs-shell@v2 - with: - arch: x64 - - - name: CMake configure - if: runner.os == 'Linux' - run: CC=clang CXX=clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - - - name: CMake configure - if: runner.os == 'macOS' - run: CC=$(brew --prefix llvm@15)/bin/clang CXX=$(brew --prefix llvm@15)/bin/clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - - - name: CMake configure - if: runner.os == 'Windows' - run: cmake -B ${{ env.BUILD_DIR }} -A x64 -T "ClangCL" -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - - - name: CMake build - run: cmake --build ${{ env.BUILD_DIR }} - - - name: CTest - run: ctest --test-dir ${{ env.BUILD_DIR }} - - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.os }}-${{ github.job }}-results + name: ${{ matrix.os }}-${{ github.job }}-SHARED=${{ matrix.shared_libs }}-MODULE=${{ matrix.enable_module }}-results path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/Testing/ chm: From 767f32d8194ca00c7966db1bd5dc7da718bc1c03 Mon Sep 17 00:00:00 2001 From: "Charlton, Scott R." Date: Wed, 14 Aug 2024 15:08:34 -0600 Subject: [PATCH 3/4] Fixed build_shared_libs syntax --- .github/workflows/cmake.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 475c7ac6..1e6f48c6 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -140,15 +140,15 @@ jobs: - name: CMake configure if: runner.os == 'Linux' - run: CC=clang CXX=clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON + run: CC=clang CXX=clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - name: CMake configure if: runner.os == 'macOS' - run: CC=$(brew --prefix llvm@15)/bin/clang CXX=$(brew --prefix llvm@15)/bin/clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS:${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON + run: CC=$(brew --prefix llvm@15)/bin/clang CXX=$(brew --prefix llvm@15)/bin/clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - name: CMake configure if: runner.os == 'Windows' - run: cmake -B ${{ env.BUILD_DIR }} -A x64 -T "ClangCL" -DBUILD_SHARED_LIBS:${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON + run: cmake -B ${{ env.BUILD_DIR }} -A x64 -T "ClangCL" -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - name: CMake build run: cmake --build ${{ env.BUILD_DIR }} From 9e2e1561be4bc0e00e44a66d4ff20f7e313ee18d Mon Sep 17 00:00:00 2001 From: "Charlton, Scott R." Date: Thu, 15 Aug 2024 10:12:44 -0600 Subject: [PATCH 4/4] 50 apple clang 15 with c++11 or higher reports warnings wwritable strings in pbasiccpp (#57) Change char* -> const char* for callbacks --- src/IPhreeqc.cpp | 2 +- src/IPhreeqc.h | 2 +- src/IPhreeqc.hpp | 2 +- src/IPhreeqcLib.cpp | 2 +- src/IPhreeqc_interface_F.cpp | 2 +- src/IPhreeqc_interface_F.h | 2 +- src/fimpl.h | 2 +- src/fwrap.cpp | 2 +- src/fwrap.h | 2 +- src/phreeqcpp/Phreeqc.h | 6 +++--- src/phreeqcpp/basicsubs.cpp | 6 +++--- 11 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/IPhreeqc.cpp b/src/IPhreeqc.cpp index c71c42ac..20b967b4 100644 --- a/src/IPhreeqc.cpp +++ b/src/IPhreeqc.cpp @@ -931,7 +931,7 @@ void IPhreeqc::SetBasicCallback(double (*fcn)(double x1, double x2, const char * this->PhreeqcPtr->register_basic_callback(fcn, cookie1); } #ifdef IPHREEQC_NO_FORTRAN_MODULE -void IPhreeqc::SetBasicFortranCallback(double (*fcn)(double *x1, double *x2, char *str, size_t l)) +void IPhreeqc::SetBasicFortranCallback(double (*fcn)(double *x1, double *x2, const char *str, size_t l)) { this->PhreeqcPtr->register_fortran_basic_callback(fcn); } diff --git a/src/IPhreeqc.h b/src/IPhreeqc.h index 62d99029..6be24c24 100644 --- a/src/IPhreeqc.h +++ b/src/IPhreeqc.h @@ -1711,7 +1711,7 @@ Headings * @include ic */ #ifdef IPHREEQC_NO_FORTRAN_MODULE - IPQ_DLL_EXPORT IPQ_RESULT SetBasicFortranCallback(int id, double (*fcn)(double *x1, double *x2, char *str, size_t l)); + IPQ_DLL_EXPORT IPQ_RESULT SetBasicFortranCallback(int id, double (*fcn)(double *x1, double *x2, const char *str, size_t l)); #else IPQ_DLL_EXPORT IPQ_RESULT SetBasicFortranCallback(int id, double (*fcn)(double *x1, double *x2, const char *str, int l)); #endif diff --git a/src/IPhreeqc.hpp b/src/IPhreeqc.hpp index c79957b5..036b14ca 100644 --- a/src/IPhreeqc.hpp +++ b/src/IPhreeqc.hpp @@ -718,7 +718,7 @@ public: * @see SetBasicCallback */ #ifdef IPHREEQC_NO_FORTRAN_MODULE - void SetBasicFortranCallback(double (*fcn)(double *x1, double *x2, char *str, size_t l)); + void SetBasicFortranCallback(double (*fcn)(double *x1, double *x2, const char *str, size_t l)); #else void SetBasicFortranCallback(double (*fcn)(double *x1, double *x2, const char *str, int l)); #endif diff --git a/src/IPhreeqcLib.cpp b/src/IPhreeqcLib.cpp index b57755ab..d0a3f0ba 100644 --- a/src/IPhreeqcLib.cpp +++ b/src/IPhreeqcLib.cpp @@ -802,7 +802,7 @@ SetBasicCallback(int id, double (*fcn)(double x1, double x2, const char *str, vo #if !defined(R_SO) #ifdef IPHREEQC_NO_FORTRAN_MODULE IPQ_RESULT -SetBasicFortranCallback(int id, double (*fcn)(double *x1, double *x2, char *str, size_t l)) +SetBasicFortranCallback(int id, double (*fcn)(double *x1, double *x2, const char *str, size_t l)) { IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id); if (IPhreeqcPtr) diff --git a/src/IPhreeqc_interface_F.cpp b/src/IPhreeqc_interface_F.cpp index e25590fb..4063d748 100644 --- a/src/IPhreeqc_interface_F.cpp +++ b/src/IPhreeqc_interface_F.cpp @@ -414,7 +414,7 @@ RunStringF(int *id, char* input) } #ifdef IPHREEQC_NO_FORTRAN_MODULE IPQ_RESULT -SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, char *str, size_t l)) +SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, const char *str, size_t l)) { return ::SetBasicFortranCallback(*id, fcn); } diff --git a/src/IPhreeqc_interface_F.h b/src/IPhreeqc_interface_F.h index d3fe29ec..3e77604f 100644 --- a/src/IPhreeqc_interface_F.h +++ b/src/IPhreeqc_interface_F.h @@ -133,7 +133,7 @@ extern "C" { IPQ_DLL_EXPORT int RunFileF(int *id, char* filename); IPQ_DLL_EXPORT int RunStringF(int *id, char* input); #ifdef IPHREEQC_NO_FORTRAN_MODULE - IPQ_DLL_EXPORT IPQ_RESULT SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, char *str, size_t l)); + IPQ_DLL_EXPORT IPQ_RESULT SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, const char *str, size_t l)); #else IPQ_DLL_EXPORT IPQ_RESULT SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, const char *str, int l)); #endif diff --git a/src/fimpl.h b/src/fimpl.h index de9eb214..eddf5a45 100644 --- a/src/fimpl.h +++ b/src/fimpl.h @@ -208,7 +208,7 @@ IPQ_DLL_EXPORT int IPQ_DECL IPQ_CASE_UND(runstring, RUNSTRING, runstring_, RUNS { return RunStringF(id, input, len); } -IPQ_DLL_EXPORT int IPQ_DECL IPQ_CASE_UND(setbasicfortrancallback, SETBASICFORTRANCALLBACK, setbasicfortrancallback_, SETBASICFORTRANCALLBACK_)(int *id, double (*fcn)(double *x1, double *x2, char *str, size_t l)) +IPQ_DLL_EXPORT int IPQ_DECL IPQ_CASE_UND(setbasicfortrancallback, SETBASICFORTRANCALLBACK, setbasicfortrancallback_, SETBASICFORTRANCALLBACK_)(int *id, double (*fcn)(double *x1, double *x2, const char *str, size_t l)) { return SetBasicFortranCallbackF(id, fcn); } diff --git a/src/fwrap.cpp b/src/fwrap.cpp index bdec8e5a..6903c4f8 100644 --- a/src/fwrap.cpp +++ b/src/fwrap.cpp @@ -482,7 +482,7 @@ RunStringF(int *id, char* input, size_t input_length) } IPQ_RESULT -SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, char *str, size_t l)) +SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, const char *str, size_t l)) { return ::SetBasicFortranCallback(*id, fcn); } diff --git a/src/fwrap.h b/src/fwrap.h index c95758d0..b4449f30 100644 --- a/src/fwrap.h +++ b/src/fwrap.h @@ -135,7 +135,7 @@ extern "C" { int RunAccumulatedF(int *id); int RunFileF(int *id, char* filename, size_t filename_length); int RunStringF(int *id, char* input, size_t input_length); - IPQ_RESULT SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, char *str, size_t l)); + IPQ_RESULT SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, const char *str, size_t l)); IPQ_RESULT SetCurrentSelectedOutputUserNumberF(int *id, int *n); IPQ_RESULT SetDumpFileNameF(int *id, char* fname, size_t fname_length); IPQ_RESULT SetDumpFileOnF(int *id, int* dump_on); diff --git a/src/phreeqcpp/Phreeqc.h b/src/phreeqcpp/Phreeqc.h index 5607f2bc..ddff8262 100644 --- a/src/phreeqcpp/Phreeqc.h +++ b/src/phreeqcpp/Phreeqc.h @@ -93,13 +93,13 @@ public: int basic_run(char* commands, void* lnbase, void* vbase, void* lpbase); void basic_free(void); #ifdef IPHREEQC_NO_FORTRAN_MODULE - double basic_callback(double x1, double x2, char* str); + double basic_callback(double x1, double x2, const char* str); #else double basic_callback(double x1, double x2, const char* str); #endif void register_basic_callback(double (*fcn)(double x1, double x2, const char* str, void* cookie), void* cookie1); #ifdef IPHREEQC_NO_FORTRAN_MODULE - void register_fortran_basic_callback(double (*fcn)(double* x1, double* x2, char* str, size_t l)); + void register_fortran_basic_callback(double (*fcn)(double* x1, double* x2, const char* str, size_t l)); #else void register_fortran_basic_callback(double (*fcn)(double* x1, double* x2, const char* str, int l)); #endif @@ -1661,7 +1661,7 @@ protected: double (*basic_callback_ptr) (double x1, double x2, const char* str, void* cookie); void* basic_callback_cookie; #ifdef IPHREEQC_NO_FORTRAN_MODULE - double (*basic_fortran_callback_ptr) (double* x1, double* x2, char* str, size_t l); + double (*basic_fortran_callback_ptr) (double* x1, double* x2, const char* str, size_t l); #else double (*basic_fortran_callback_ptr) (double* x1, double* x2, const char* str, int l); #endif diff --git a/src/phreeqcpp/basicsubs.cpp b/src/phreeqcpp/basicsubs.cpp index d49141da..c92e8c30 100644 --- a/src/phreeqcpp/basicsubs.cpp +++ b/src/phreeqcpp/basicsubs.cpp @@ -4242,7 +4242,7 @@ basic_callback(double x1, double x2, const char * str) #ifdef IPHREEQC_NO_FORTRAN_MODULE double Phreeqc:: -basic_callback(double x1, double x2, char * str) +basic_callback(double x1, double x2, const char * str) #else double Phreeqc:: basic_callback(double x1, double x2, const char * str) @@ -4253,7 +4253,7 @@ basic_callback(double x1, double x2, const char * str) if (basic_callback_ptr != NULL) { - return (*basic_callback_ptr) (x1, x2, (const char *) str, basic_callback_cookie); + return (*basic_callback_ptr) (x1, x2, str, basic_callback_cookie); } if (basic_fortran_callback_ptr != NULL) { @@ -4274,7 +4274,7 @@ Phreeqc::register_basic_callback(double (*fcn)(double x1, double x2, const char } #ifdef IPHREEQC_NO_FORTRAN_MODULE void -Phreeqc::register_fortran_basic_callback(double ( *fcn)(double *x1, double *x2, char *str, size_t l)) +Phreeqc::register_fortran_basic_callback(double ( *fcn)(double *x1, double *x2, const char *str, size_t l)) { this->basic_fortran_callback_ptr = fcn; }