Description: modifying the CMakeList.txt files to be able to build both static
 and shared libraries, also with and without MPI support.
 Also reporting the version and soversion defined in d/rules.
Author: Xavier Warin <xavier.warin@gmail.com>
        Pierre Gruet <pgt@debian.org>
Forwarded: not-needed
Last-Update: 2021-10-22

--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -48,6 +48,9 @@
   ADD_DEFINITIONS(-DUSE_LONG_TEST)
 ENDIF(BUILD_LONG_TEST)
 
+# do we BUILD STATIC lib?
+OPTION(BUILD_DYNLIB "Build Dynamic libs" ON)
+
 # Boost
 IF(BUILD_TEST)
   FIND_PACKAGE(Boost COMPONENTS unit_test_framework  system  timer chrono log thread  REQUIRED)
@@ -58,24 +61,7 @@
 FIND_PACKAGE(Boost COMPONENTS serialization REQUIRED)
 MESSAGE(STATUS "Boost serialization : ${Boost_SERIALIZATION_LIBRARY}")
 INCLUDE_DIRECTORIES(SYSTEM ${Boost_INCLUDE_DIRS})
-IF(BUILD_MPI)
-  FIND_PACKAGE(MPI)
-  IF(NOT MPI_CXX_FOUND)
-    SET(BUILD_MPI OFF)
-  ELSE()
-    FIND_PACKAGE(Boost COMPONENTS mpi )
-    IF(Boost_MPI_FOUND)
-      MESSAGE(STATUS "Boost mpi: ${Boost_MPI_LIBRARY}")
-    ENDIF(Boost_MPI_FOUND)
-    IF(Boost_MPI_FOUND)
-      INCLUDE_DIRECTORIES(SYSTEM ${MPI_CXX_INCLUDE_PATH})
-      ADD_DEFINITIONS(-DUSE_MPI)
-    ELSE()
-      MESSAGE(STATUS "Boost modules mpi  not found. Set BUILD_MPI=OFF")
-      SET(BUILD_MPI OFF)
-    ENDIF(Boost_MPI_FOUND)
-  ENDIF(NOT MPI_CXX_FOUND)
-ENDIF(BUILD_MPI)
+
 
 IF (WIN32)
   #zlib
@@ -176,24 +162,68 @@
 SET(SOURCE_DIR_LIB9 ${PROJECT_SOURCE_DIR}/StOpt/tree)
 SET(SOURCE_DIR_LIB10 ${PROJECT_SOURCE_DIR}/StOpt/cdf)
 FILE(GLOB SOURCE  ${SOURCE_DIR_LIB1}/*.cpp ${SOURCE_DIR_LIB2}/*.cpp  ${SOURCE_DIR_LIB3}/*.cpp  ${SOURCE_DIR_LIB4}/*.cpp   ${SOURCE_DIR_LIB5}/*.cpp  ${SOURCE_DIR_LIB6}/*.cpp ${SOURCE_DIR_LIB7}/*.cpp  ${SOURCE_DIR_LIB8}/*.cpp ${SOURCE_DIR_LIB9}/*.cpp ${SOURCE_DIR_LIB10}/*.cpp  )
-IF (WIN32)
-  SET(SUFF "/Release")
-  SET(EXTENSION ".exe")
-  ADD_LIBRARY(StOpt STATIC ${SOURCE})
-ELSE()
-   ADD_LIBRARY(StOpt SHARED ${SOURCE})
-ENDIF()
-IF(BUILD_MPI)
-  TARGET_LINK_LIBRARIES(StOpt ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES}    ${Boost_CHRONO_LIBRARY}  ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY}  ${Boost_MPI_LIBRARY}  ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY}  ${Boost_LOG_LIBRARY}  ${BZIP2_LIBRARIES}  ${ZLIB_LIBRARIES})
-ELSE()
-  TARGET_LINK_LIBRARIES(StOpt     ${Boost_CHRONO_LIBRARY}  ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY}  ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY} ${Boost_LOG_LIBRARY} ${BZIP2_LIBRARIES}  ${ZLIB_LIBRARIES} )
-ENDIF()
+
+ADD_LIBRARY(StOpt-dyn SHARED ${SOURCE})
+ADD_LIBRARY(StOpt-stat STATIC ${SOURCE})
+ADD_LIBRARY(StOpt-mpi-stat STATIC ${SOURCE})
+ADD_LIBRARY(StOpt-mpi-python-dyn SHARED ${SOURCE})
+
+  FIND_PACKAGE(MPI)
+  IF(NOT MPI_CXX_FOUND)
+    SET(BUILD_MPI OFF)
+  ELSE()
+    FIND_PACKAGE(Boost COMPONENTS mpi )
+    IF(Boost_MPI_FOUND)
+      MESSAGE(STATUS "Boost mpi: ${Boost_MPI_LIBRARY}")
+    ENDIF(Boost_MPI_FOUND)
+    IF(Boost_MPI_FOUND)
+      INCLUDE_DIRECTORIES(SYSTEM ${MPI_CXX_INCLUDE_PATH})
+      target_compile_definitions(StOpt-mpi-stat PUBLIC USE_MPI)
+      target_compile_definitions(StOpt-mpi-python-dyn PUBLIC USE_MPI)
+    ELSE()
+      MESSAGE(STATUS "Boost modules mpi  not found. Set BUILD_MPI=OFF")
+      SET(BUILD_MPI OFF)
+    ENDIF(Boost_MPI_FOUND)
+  ENDIF(NOT MPI_CXX_FOUND)
+
+  TARGET_LINK_LIBRARIES(StOpt-mpi-stat ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES}    ${Boost_CHRONO_LIBRARY}  ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY}  ${Boost_MPI_LIBRARY}  ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY}  ${Boost_LOG_LIBRARY}  ${BZIP2_LIBRARIES}  ${ZLIB_LIBRARIES})
+  TARGET_LINK_LIBRARIES(StOpt-mpi-python-dyn ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES}    ${Boost_CHRONO_LIBRARY}  ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY}  ${Boost_MPI_LIBRARY}  ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY}  ${Boost_LOG_LIBRARY}  ${BZIP2_LIBRARIES}  ${ZLIB_LIBRARIES})
+  TARGET_LINK_LIBRARIES(StOpt-dyn     ${Boost_CHRONO_LIBRARY}  ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY}  ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY} ${Boost_LOG_LIBRARY} ${BZIP2_LIBRARIES}  ${ZLIB_LIBRARIES} )
+  TARGET_LINK_LIBRARIES(StOpt-stat     ${Boost_CHRONO_LIBRARY}  ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY}  ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY} ${Boost_LOG_LIBRARY} ${BZIP2_LIBRARIES}  ${ZLIB_LIBRARIES} )
+
 IF(OPENMP_CXX_FOUND)
-   TARGET_LINK_LIBRARIES(StOpt OpenMP::OpenMP_CXX)
+  TARGET_LINK_LIBRARIES(StOpt-mpi-stat OpenMP::OpenMP_CXX)
+  TARGET_LINK_LIBRARIES(StOpt-mpi-python-dyn OpenMP::OpenMP_CXX)
+  TARGET_LINK_LIBRARIES(StOpt-dyn OpenMP::OpenMP_CXX)
+  TARGET_LINK_LIBRARIES(StOpt-stat OpenMP::OpenMP_CXX)
 ENDIF(OPENMP_CXX_FOUND)
-SET (STOPT_LIB StOpt)
+SET (STOPT_LIB StOpt-mpi-python-dyn)
+
+set_target_properties(StOpt-mpi-stat PROPERTIES
+        OUTPUT_NAME stopt-mpi
+)
+
+set_target_properties(StOpt-mpi-python-dyn PROPERTIES
+        VERSION ${VERSION_STOPT}
+        SOVERSION ${SOVERSION_STOPT}
+        OUTPUT_NAME stopt-mpi
+)
+
+set_target_properties(StOpt-dyn PROPERTIES
+        VERSION ${VERSION_STOPT}
+        SOVERSION ${SOVERSION_STOPT}
+        OUTPUT_NAME stopt
+)
+
+set_target_properties(StOpt-stat PROPERTIES
+        OUTPUT_NAME stopt
+)
+
 #install lib
-INSTALL(TARGETS StOpt COMPONENT libraries DESTINATION "lib")
+INSTALL(TARGETS StOpt-mpi-stat COMPONENT libraries DESTINATION "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+INSTALL(TARGETS StOpt-mpi-python-dyn COMPONENT libraries DESTINATION "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+INSTALL(TARGETS StOpt-dyn COMPONENT libraries DESTINATION "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+INSTALL(TARGETS StOpt-stat COMPONENT libraries DESTINATION "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
 # install headers
 INSTALL(DIRECTORY StOpt
     COMPONENT headers
@@ -211,7 +241,6 @@
     ${INSTALL_PERMISSIONS_SRC}
     )
 
-IF(BUILD_PYTHON)
     
   # Python
   FIND_PACKAGE(Python REQUIRED COMPONENTS Interpreter Development)
@@ -287,16 +316,15 @@
   ENDIF()
  
   # INSTALLATION
-  INSTALL(TARGETS StOptGrids  COMPONENT libraries DESTINATION "lib")
-  INSTALL(TARGETS StOptReg   COMPONENT libraries DESTINATION "lib")
-  INSTALL(TARGETS StOptTree   COMPONENT libraries DESTINATION "lib")
-  INSTALL(TARGETS StOptGlobal  COMPONENT libraries DESTINATION "lib")
-  INSTALL(TARGETS StOptGeners  COMPONENT libraries DESTINATION "lib")
+  INSTALL(TARGETS StOptGrids  COMPONENT libraries DESTINATION "lib/python3/dist-packages")
+  INSTALL(TARGETS StOptReg   COMPONENT libraries DESTINATION "lib/python3/dist-packages")
+  INSTALL(TARGETS StOptTree   COMPONENT libraries DESTINATION "lib/python3/dist-packages")
+  INSTALL(TARGETS StOptGlobal  COMPONENT libraries DESTINATION "lib/python3/dist-packages")
+  INSTALL(TARGETS StOptGeners  COMPONENT libraries DESTINATION "lib/python3/dist-packages")
 
 
-  IF (BUILD_SDDP)
-    ADD_DEFINITIONS(-DSDDPPYTHON)
     ADD_LIBRARY(StOptSDDP  SHARED  ${SOURCE_PYTHON}/Pybind11StOptSDDP.cpp)
+    target_compile_definitions(StOptSDDP PUBLIC SDDPPYTHON)
     IF (APPLE)
       TARGET_LINK_LIBRARIES(StOptSDDP  ${STOPT_LIB}   ${GENERS_LIB} ${Boost_SERIALIZATION_LIBRARY}  ${Boost_MPI_LIBRARY} ${Boost_TIMER_LIBRARY} )
       SET_TARGET_PROPERTIES(StOptSDDP  PROPERTIES  PREFIX "" SUFFIX ${PYTHON_SUFFIX}  COMPILE_DEFINITIONS  "PYTHONMODULE;NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION" LINK_FLAGS "-undefined dynamic_lookup" )
@@ -305,11 +333,9 @@
       SET_TARGET_PROPERTIES(StOptSDDP  PROPERTIES  PREFIX "" SUFFIX ${PYTHON_SUFFIX}  COMPILE_DEFINITIONS  "PYTHONMODULE;NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION")
     ENDIF()
     # INSTALLATION
-    INSTALL(TARGETS StOptSDDP COMPONENT libraries DESTINATION "lib")
+    INSTALL(TARGETS StOptSDDP COMPONENT libraries DESTINATION "lib/python3/dist-packages")
     
-  ENDIF(BUILD_SDDP)
   
-ENDIF(BUILD_PYTHON)
 
 
 IF(BUILD_TEST)
