From f2e702d81f67140d18304b432c68619d6812e259 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Wed, 10 Feb 2021 09:53:58 +0100
Subject: [PATCH] Replaced iphreeqc submodule with CPM.

Had to make some modifications to iphreeqc:

https://github.com/ufz/iphreeqc/commit/b1047d3eb03e7ef1b850231be35acb9c6a2cf345
---
 .gitmodules                                   |   3 -
 .../CreateChemicalSolverInterface.cpp         |   2 +-
 ChemistryLib/PhreeqcIO.cpp                    |   2 +-
 ChemistryLib/PhreeqcKernel.cpp                |   7 +-
 ChemistryLib/PhreeqcKernel.h                  |   4 +-
 .../PhreeqcKernelData/AqueousSolution.h       |   6 +-
 .../PhreeqcKernelData/EquilibriumReactants.h  |   4 +-
 .../InitialAqueousSolution.h                  |   4 +-
 .../PhreeqcKernelData/KineticReactant.h       |   4 +-
 ThirdParty/CMakeLists.txt                     |   7 --
 ThirdParty/iphreeqc/CMakeLists.txt            | 104 -----------------
 ThirdParty/iphreeqc/src                       |   1 -
 scripts/cmake/Dependencies.cmake              |  13 +++
 scripts/cmake/SubmoduleSetup.cmake            |   3 -
 scripts/cmake/iphreeqc.cmake                  | 106 ++++++++++++++++++
 15 files changed, 136 insertions(+), 134 deletions(-)
 delete mode 100644 ThirdParty/iphreeqc/CMakeLists.txt
 delete mode 160000 ThirdParty/iphreeqc/src
 create mode 100644 scripts/cmake/iphreeqc.cmake

diff --git a/.gitmodules b/.gitmodules
index 20187dedb45..1cc94fa678b 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,9 +1,6 @@
 [submodule "ThirdParty/SwmmInterface"]
 	path = ThirdParty/SwmmInterface
 	url = https://github.com/ufz/SwmmInterface.git
-[submodule "ThirdParty/iphreeqc/src"]
-	path = ThirdParty/iphreeqc/src
-	url = https://github.com/ufz/iphreeqc.git
 [submodule "ThirdParty/MGIS"]
 	path = ThirdParty/MGIS
 	url = https://github.com/ufz/MFrontGenericInterfaceSupport.git
diff --git a/ChemistryLib/CreateChemicalSolverInterface.cpp b/ChemistryLib/CreateChemicalSolverInterface.cpp
index 75d4c6a646c..437eb979a3b 100644
--- a/ChemistryLib/CreateChemicalSolverInterface.cpp
+++ b/ChemistryLib/CreateChemicalSolverInterface.cpp
@@ -10,7 +10,7 @@
 
 #include "CreateChemicalSolverInterface.h"
 
-#include <iphreeqc/src/src/phreeqcpp/cxxKinetics.h>
+#include <phreeqcpp/cxxKinetics.h>
 
 #include "BaseLib/ConfigTree.h"
 #include "BaseLib/FileTools.h"
diff --git a/ChemistryLib/PhreeqcIO.cpp b/ChemistryLib/PhreeqcIO.cpp
index 2cba14a7570..42d4ec00fc2 100644
--- a/ChemistryLib/PhreeqcIO.cpp
+++ b/ChemistryLib/PhreeqcIO.cpp
@@ -10,7 +10,7 @@
 
 #include "PhreeqcIO.h"
 
-#include <iphreeqc/src/src/IPhreeqc.h>
+#include <IPhreeqc.h>
 
 #include <boost/algorithm/string.hpp>
 #include <cmath>
diff --git a/ChemistryLib/PhreeqcKernel.cpp b/ChemistryLib/PhreeqcKernel.cpp
index 8091d800c8a..1c8a3c2f077 100644
--- a/ChemistryLib/PhreeqcKernel.cpp
+++ b/ChemistryLib/PhreeqcKernel.cpp
@@ -8,16 +8,17 @@
  *
  */
 
+#include "PhreeqcKernel.h"
+
+#include <phreeqcpp/cxxKinetics.h>
+
 #include <cmath>
 #include <cstdlib>
 
 #include "BaseLib/Error.h"
-#include "PhreeqcKernel.h"
 #include "PhreeqcKernelData/AqueousSolution.h"
 #include "PhreeqcKernelData/ReactionRate.h"
 
-#include <iphreeqc/src/src/phreeqcpp/cxxKinetics.h>
-
 namespace ChemistryLib
 {
 namespace PhreeqcKernelData
diff --git a/ChemistryLib/PhreeqcKernel.h b/ChemistryLib/PhreeqcKernel.h
index 54ad8427094..b77c3cebc22 100644
--- a/ChemistryLib/PhreeqcKernel.h
+++ b/ChemistryLib/PhreeqcKernel.h
@@ -10,6 +10,8 @@
 
 #pragma once
 
+#include <phreeqcpp/Phreeqc.h>
+
 #include <map>
 #include <vector>
 
@@ -17,8 +19,6 @@
 #include "PhreeqcKernelData/EquilibriumReactants.h"
 #include "PhreeqcKernelData/KineticReactant.h"
 
-#include <iphreeqc/src/src/phreeqcpp/Phreeqc.h>
-
 class cxxSolution;
 class cxxISolution;
 
diff --git a/ChemistryLib/PhreeqcKernelData/AqueousSolution.h b/ChemistryLib/PhreeqcKernelData/AqueousSolution.h
index 4ecedaee2f4..89b795df015 100644
--- a/ChemistryLib/PhreeqcKernelData/AqueousSolution.h
+++ b/ChemistryLib/PhreeqcKernelData/AqueousSolution.h
@@ -10,10 +10,10 @@
 
 #pragma once
 
-#include <memory>
+#include <phreeqcpp/Solution.h>
+#include <phreeqcpp/common/phrqtype.h>
 
-#include <iphreeqc/src/src/phreeqcpp/common/phrqtype.h>
-#include <iphreeqc/src/src/phreeqcpp/Solution.h>
+#include <memory>
 
 namespace ChemistryLib
 {
diff --git a/ChemistryLib/PhreeqcKernelData/EquilibriumReactants.h b/ChemistryLib/PhreeqcKernelData/EquilibriumReactants.h
index 65c125c20cf..34ad8539dbf 100644
--- a/ChemistryLib/PhreeqcKernelData/EquilibriumReactants.h
+++ b/ChemistryLib/PhreeqcKernelData/EquilibriumReactants.h
@@ -10,12 +10,12 @@
 
 #pragma once
 
+#include <phreeqcpp/PPassemblage.h>
+
 #include <set>
 #include <string>
 #include <vector>
 
-#include <iphreeqc/src/src/phreeqcpp/PPassemblage.h>
-
 namespace ChemistryLib
 {
 namespace PhreeqcKernelData
diff --git a/ChemistryLib/PhreeqcKernelData/InitialAqueousSolution.h b/ChemistryLib/PhreeqcKernelData/InitialAqueousSolution.h
index 3cb1f3bab3b..e1df7c643d5 100644
--- a/ChemistryLib/PhreeqcKernelData/InitialAqueousSolution.h
+++ b/ChemistryLib/PhreeqcKernelData/InitialAqueousSolution.h
@@ -10,11 +10,11 @@
 
 #pragma once
 
+#include <phreeqcpp/ISolution.h>
+
 #include <map>
 #include <string>
 
-#include <iphreeqc/src/src/phreeqcpp/ISolution.h>
-
 namespace ChemistryLib
 {
 namespace PhreeqcKernelData
diff --git a/ChemistryLib/PhreeqcKernelData/KineticReactant.h b/ChemistryLib/PhreeqcKernelData/KineticReactant.h
index 5f5fc4359df..df82bd8463a 100644
--- a/ChemistryLib/PhreeqcKernelData/KineticReactant.h
+++ b/ChemistryLib/PhreeqcKernelData/KineticReactant.h
@@ -10,11 +10,11 @@
 
 #pragma once
 
+#include <phreeqcpp/cxxKinetics.h>
+
 #include <string>
 #include <vector>
 
-#include <iphreeqc/src/src/phreeqcpp/cxxKinetics.h>
-
 namespace ChemistryLib
 {
 namespace PhreeqcKernelData
diff --git a/ThirdParty/CMakeLists.txt b/ThirdParty/CMakeLists.txt
index 32bec04c0f1..b3080d6eab3 100644
--- a/ThirdParty/CMakeLists.txt
+++ b/ThirdParty/CMakeLists.txt
@@ -1,10 +1,3 @@
-# iphreeqc
-if (OGS_BUILD_PROCESS_ComponentTransport
-    OR OGS_BUILD_PROCESS_RichardsComponentTransport)
-    add_subdirectory(iphreeqc)
-    list(APPEND DISABLE_WARNINGS_TARGETS iphreeqc)
-endif()
-
 # MFrontGenericInterfaceSupport
 if (OGS_USE_MFRONT)
     set(enable-doxygen-doc OFF CACHE INTERNAL "")
diff --git a/ThirdParty/iphreeqc/CMakeLists.txt b/ThirdParty/iphreeqc/CMakeLists.txt
deleted file mode 100644
index 7b1e61d53c4..00000000000
--- a/ThirdParty/iphreeqc/CMakeLists.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-project(IPhreeqc CXX C)
-set(IPHREEQC_VERSION 3.5.0)
-
-set(SOURCES
-    src/src/CSelectedOutput.cpp
-    src/src/fwrap.cpp
-    src/src/IPhreeqc.cpp
-    src/src/IPhreeqc_interface_F.cpp
-    src/src/IPhreeqcLib.cpp
-    src/src/Var.c
-    src/src/phreeqcpp/advection.cpp
-    src/src/phreeqcpp/basicsubs.cpp
-    src/src/phreeqcpp/cl1.cpp
-    src/src/phreeqcpp/cvdense.cpp
-    src/src/phreeqcpp/cvode.cpp
-    src/src/phreeqcpp/cxxKinetics.cxx
-    src/src/phreeqcpp/cxxMix.cxx
-    src/src/phreeqcpp/dense.cpp
-    src/src/phreeqcpp/Dictionary.cpp
-    src/src/phreeqcpp/dumper.cpp
-    src/src/phreeqcpp/Exchange.cxx
-    src/src/phreeqcpp/ExchComp.cxx
-    src/src/phreeqcpp/GasComp.cxx
-    src/src/phreeqcpp/gases.cpp
-    src/src/phreeqcpp/GasPhase.cxx
-    src/src/phreeqcpp/input.cpp
-    src/src/phreeqcpp/integrate.cpp
-    src/src/phreeqcpp/inverse.cpp
-    src/src/phreeqcpp/ISolution.cxx
-    src/src/phreeqcpp/ISolutionComp.cxx
-    src/src/phreeqcpp/isotopes.cpp
-    src/src/phreeqcpp/kinetics.cpp
-    src/src/phreeqcpp/KineticsComp.cxx
-    src/src/phreeqcpp/mainsubs.cpp
-    src/src/phreeqcpp/model.cpp
-    src/src/phreeqcpp/NameDouble.cxx
-    src/src/phreeqcpp/NumKeyword.cxx
-    src/src/phreeqcpp/nvector.cpp
-    src/src/phreeqcpp/nvector_serial.cpp
-    src/src/phreeqcpp/parse.cpp
-    src/src/phreeqcpp/PBasic.cpp
-    src/src/phreeqcpp/phqalloc.cpp
-    src/src/phreeqcpp/Phreeqc.cpp
-    src/src/phreeqcpp/PHRQ_io_output.cpp
-    src/src/phreeqcpp/pitzer.cpp
-    src/src/phreeqcpp/pitzer_structures.cpp
-    src/src/phreeqcpp/PPassemblage.cxx
-    src/src/phreeqcpp/PPassemblageComp.cxx
-    src/src/phreeqcpp/prep.cpp
-    src/src/phreeqcpp/Pressure.cxx
-    src/src/phreeqcpp/print.cpp
-    src/src/phreeqcpp/Reaction.cxx
-    src/src/phreeqcpp/read.cpp
-    src/src/phreeqcpp/ReadClass.cxx
-    src/src/phreeqcpp/readtr.cpp
-    src/src/phreeqcpp/runner.cpp
-    src/src/phreeqcpp/SelectedOutput.cpp
-    src/src/phreeqcpp/Serializer.cxx
-    src/src/phreeqcpp/sit.cpp
-    src/src/phreeqcpp/smalldense.cpp
-    src/src/phreeqcpp/Solution.cxx
-    src/src/phreeqcpp/SolutionIsotope.cxx
-    src/src/phreeqcpp/spread.cpp
-    src/src/phreeqcpp/SS.cxx
-    src/src/phreeqcpp/SSassemblage.cxx
-    src/src/phreeqcpp/SScomp.cxx
-    src/src/phreeqcpp/step.cpp
-    src/src/phreeqcpp/StorageBin.cxx
-    src/src/phreeqcpp/StorageBinList.cpp
-    src/src/phreeqcpp/structures.cpp
-    src/src/phreeqcpp/sundialsmath.cpp
-    src/src/phreeqcpp/Surface.cxx
-    src/src/phreeqcpp/SurfaceCharge.cxx
-    src/src/phreeqcpp/SurfaceComp.cxx
-    src/src/phreeqcpp/System.cxx
-    src/src/phreeqcpp/tally.cpp
-    src/src/phreeqcpp/Temperature.cxx
-    src/src/phreeqcpp/tidy.cpp
-    src/src/phreeqcpp/transport.cpp
-    src/src/phreeqcpp/Use.cpp
-    src/src/phreeqcpp/UserPunch.cpp
-    src/src/phreeqcpp/utilities.cpp
-    src/src/phreeqcpp/common/Parser.cxx
-    src/src/phreeqcpp/common/PHRQ_base.cxx
-    src/src/phreeqcpp/common/PHRQ_io.cpp
-    src/src/phreeqcpp/common/Utils.cxx
-    src/src/phreeqcpp/PhreeqcKeywords/Keywords.cpp
-)
-
-# compile Var.c as c++
-SET_SOURCE_FILES_PROPERTIES(src/src/Var.c PROPERTIES LANGUAGE CXX)
-
-add_library(iphreeqc STATIC ${SOURCES})
-target_include_directories(iphreeqc BEFORE
-    PUBLIC
-    ${CMAKE_CURRENT_SOURCE_DIR}/src/src/phreeqcpp/common
-    ${CMAKE_CURRENT_SOURCE_DIR}/src/src/phreeqcpp/PhreeqcKeywords
-    PRIVATE
-    ${CMAKE_CURRENT_SOURCE_DIR}/src/src
-    ${CMAKE_CURRENT_SOURCE_DIR}/src/src/phreeqcpp
-)
-# Exclude iphreeqc target from clang-tidy tests because it handles the above
-# mentioned 'src/src/Var.c' file as c, not c++.
-set_target_properties(iphreeqc PROPERTIES CXX_CLANG_TIDY "")
diff --git a/ThirdParty/iphreeqc/src b/ThirdParty/iphreeqc/src
deleted file mode 160000
index 091c216d69e..00000000000
--- a/ThirdParty/iphreeqc/src
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 091c216d69ef3947549ba230cece35215a79699c
diff --git a/scripts/cmake/Dependencies.cmake b/scripts/cmake/Dependencies.cmake
index c2b9e2d7a75..9241876be3d 100644
--- a/scripts/cmake/Dependencies.cmake
+++ b/scripts/cmake/Dependencies.cmake
@@ -82,3 +82,16 @@ if(OGS_USE_PYTHON)
             "PYBIND11_PYTHON_VERSION ${Python3_VERSION}"
     )
 endif()
+
+if (OGS_BUILD_PROCESS_ComponentTransport
+    OR OGS_BUILD_PROCESS_RichardsComponentTransport)
+    CPMAddPackage(
+        NAME iphreeqc
+        GITHUB_REPOSITORY ufz/iphreeqc
+        GIT_TAG b1047d3eb03e7ef1b850231be35acb9c6a2cf345
+        DOWNLOAD_ONLY YES
+    )
+    if(iphreeqc_ADDED)
+        include(scripts/cmake/iphreeqc.cmake)
+    endif()
+endif()
diff --git a/scripts/cmake/SubmoduleSetup.cmake b/scripts/cmake/SubmoduleSetup.cmake
index 5d3737ebe2b..cd7c41079e1 100644
--- a/scripts/cmake/SubmoduleSetup.cmake
+++ b/scripts/cmake/SubmoduleSetup.cmake
@@ -3,9 +3,6 @@ if(NOT IS_GIT_REPO)
 endif()
 
 # This file initializes the required submodules
-set(REQUIRED_SUBMODULES
-    ThirdParty/iphreeqc/src
-)
 if(OGS_USE_XDMF)
     list(APPEND REQUIRED_SUBMODULES ThirdParty/xdmf)
 endif()
diff --git a/scripts/cmake/iphreeqc.cmake b/scripts/cmake/iphreeqc.cmake
new file mode 100644
index 00000000000..97912b59957
--- /dev/null
+++ b/scripts/cmake/iphreeqc.cmake
@@ -0,0 +1,106 @@
+project(IPhreeqc CXX C)
+set(IPHREEQC_VERSION 3.5.0)
+
+set(SOURCES
+    ${iphreeqc_SOURCE_DIR}/src/CSelectedOutput.cpp
+    ${iphreeqc_SOURCE_DIR}/src/fwrap.cpp
+    ${iphreeqc_SOURCE_DIR}/src/IPhreeqc.cpp
+    ${iphreeqc_SOURCE_DIR}/src/IPhreeqc_interface_F.cpp
+    ${iphreeqc_SOURCE_DIR}/src/IPhreeqcLib.cpp
+    ${iphreeqc_SOURCE_DIR}/src/Var.c
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/advection.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/basicsubs.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/cl1.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/cvdense.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/cvode.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/cxxKinetics.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/cxxMix.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/dense.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/Dictionary.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/dumper.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/Exchange.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/ExchComp.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/GasComp.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/gases.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/GasPhase.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/input.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/integrate.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/inverse.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/ISolution.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/ISolutionComp.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/isotopes.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/kinetics.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/KineticsComp.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/mainsubs.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/model.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/NameDouble.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/NumKeyword.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/nvector.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/nvector_serial.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/parse.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/PBasic.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/phqalloc.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/Phreeqc.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/PHRQ_io_output.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/pitzer.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/pitzer_structures.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/PPassemblage.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/PPassemblageComp.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/prep.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/Pressure.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/print.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/Reaction.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/read.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/ReadClass.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/readtr.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/runner.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/SelectedOutput.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/Serializer.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/sit.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/smalldense.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/Solution.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/SolutionIsotope.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/spread.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/SS.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/SSassemblage.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/SScomp.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/step.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/StorageBin.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/StorageBinList.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/structures.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/sundialsmath.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/Surface.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/SurfaceCharge.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/SurfaceComp.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/System.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/tally.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/Temperature.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/tidy.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/transport.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/Use.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/UserPunch.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/utilities.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/common/Parser.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/common/PHRQ_base.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/common/PHRQ_io.cpp
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/common/Utils.cxx
+    ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/PhreeqcKeywords/Keywords.cpp
+)
+
+# compile Var.c as c++
+SET_SOURCE_FILES_PROPERTIES(${iphreeqc_SOURCE_DIR}/src/Var.c PROPERTIES LANGUAGE CXX)
+
+add_library(iphreeqc STATIC ${SOURCES})
+target_include_directories(iphreeqc
+    PUBLIC
+        ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/common
+        ${iphreeqc_SOURCE_DIR}/src/phreeqcpp/PhreeqcKeywords
+        ${iphreeqc_SOURCE_DIR}/src/phreeqcpp
+        ${iphreeqc_SOURCE_DIR}/src
+)
+target_compile_definitions(iphreeqc
+    PUBLIC LDBLE=double
+)
+# Exclude iphreeqc target from clang-tidy tests because it handles the above
+# mentioned 'src/src/Var.c' file as c, not c++.
+set_target_properties(iphreeqc PROPERTIES CXX_CLANG_TIDY "")
-- 
GitLab