From f2998110b6fa16a7bb600ce2ce43a0bcf71bd783 Mon Sep 17 00:00:00 2001
From: Stefan Bienert <stefan.bienert@unibas.ch>
Date: Thu, 19 Sep 2013 15:57:13 +0200
Subject: [PATCH] Playing around with CMake

---
 CMakeLists.txt              |   1 +
 cmake_support/PROMOD3.cmake | 136 +++++++++++++++++++-----------------
 2 files changed, 72 insertions(+), 65 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f51bb031..ac0bb336 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -65,6 +65,7 @@ set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
 ## e.g. add_subdirectory(src), subdirs have thier own CMakeLists.txt
 add_subdirectory(config)
 add_subdirectory(meld)
+add_subdirectory(scripts)
 
 ## report setup
 message(STATUS "PROMOD3 will be built with the following options:\n"
diff --git a/cmake_support/PROMOD3.cmake b/cmake_support/PROMOD3.cmake
index e00f5360..496cd3fc 100644
--- a/cmake_support/PROMOD3.cmake
+++ b/cmake_support/PROMOD3.cmake
@@ -506,28 +506,28 @@ macro(pymod)
   #-----------------------------------------------------------------------------
   set(_ARG_PREFIX promod3)
   parse_argument_list(_ARG 
-                      "NAME;CPP;PY;LINK;OUTPUT_DIR;UI;PREFIX" "" ${ARGN})
+                      "NAME;CPP;PY;LINK;OUTPUT_DIR;PREFIX" "" ${ARGN})
   if (NOT _ARG_NAME)
     message(FATAL_ERROR "invalid use of pymod(): a name must be provided")
   endif()
-  if (ENABLE_STATIC)
-    return()
-  endif()
   if (_ARG_OUTPUT_DIR)
-    set(PYMOD_DIR "python${PYTHON_VERSION}/site-packages/${_ARG_OUTPUT_DIR}")
+    set(PYMOD_DIR "python${PYTHON_VERSION}/site-packages/promod3/${_ARG_OUTPUT_DIR}")
   else()
-    set(PYMOD_DIR "python${PYTHON_VERSION}/site-packages/${_ARG_PREFIX}/${_ARG_NAME}")
+    if (_ARG_PREFIX)
+        set(PYMOD_DIR "python${PYTHON_VERSION}/site-packages/promod3/${_ARG_PREFIX}/${_ARG_NAME}")
+    else()
+      set(PYMOD_DIR "python${PYTHON_VERSION}/site-packages/promod3/${_ARG_NAME}")
+    endif()
   endif()
   set(_LIB_NAME ${_ARG_PREFIX}_${_ARG_NAME})
   set(PYMOD_STAGE_DIR "${LIB_STAGE_PATH}/${PYMOD_DIR}")
   file(MAKE_DIRECTORY ${PYMOD_STAGE_DIR})
-  include_directories(${PYTHON_INCLUDE_PATH})
   #-----------------------------------------------------------------------------
   # compile and link C++ wrappers
   #-----------------------------------------------------------------------------
   if (_ARG_CPP)
-    add_library("_${_LIB_NAME}" MODULE ${_ARG_CPP})
-    set_target_properties("_${_LIB_NAME}"
+    add_library("_${_ARG_NAME}" MODULE ${_ARG_CPP})
+    set_target_properties("_${_ARG_NAME}"
                           PROPERTIES ECHO_STRING
                           "Building Python Module ${_ARG_NAME}")
     if (_ARG_PREFIX)
@@ -537,78 +537,84 @@ macro(pymod)
     endif()
     get_target_property(_CUSTOM_CHECK "${_PARENT_NAME}" HEADER_ONLY)
     if (NOT _CUSTOM_CHECK)
-      set(_PARENT_LIB_NAME "${_PARENT_NAME}")
+      set(_PARENT_ARG_NAME "${_PARENT_NAME}")
     endif()
-    target_link_libraries("_${_LIB_NAME}" ${_PARENT_LIB_NAME} 
+    target_link_libraries("_${_ARG_NAME}" ${_PARENT_ARG_NAME} 
                           ${PYTHON_LIBRARIES} ${BOOST_PYTHON_LIBRARIES})
-
-    set_target_properties("_${_LIB_NAME}"
-                          PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PYMOD_STAGE_DIR})
-    set_target_properties("_${_LIB_NAME}"
-                          PROPERTIES LIBRARY_OUTPUT_DIRECTORY_RELEASE ${PYMOD_STAGE_DIR})
-    set_target_properties("_${_LIB_NAME}"
-                          PROPERTIES LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PYMOD_STAGE_DIR})
-
-    if (NOT ENABLE_STATIC)
-      if (_USE_RPATH)
-        string(REGEX REPLACE "/[^/]*" "/.." inv_pymod_path "/${PYMOD_DIR}")
-        set_target_properties("_${_LIB_NAME}"
-                              PROPERTIES INSTALL_RPATH "$ORIGIN${inv_pymod_path}/")
-      else()
-        set_target_properties("_${_LIB_NAME}"
-                              PROPERTIES INSTALL_RPATH "")
-      endif()
-    endif()
+    set_target_properties("_${_ARG_NAME}"
+                          PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PYMOD_STAGE_DIR}
+                          INSTALL_NAME_DIR "@rpath")
     if (APPLE)
       file(RELATIVE_PATH _REL_PATH "${PYMOD_STAGE_DIR}" "${LIB_STAGE_PATH}")
-      set_target_properties("_${_LIB_NAME}" PROPERTIES
-                            LINK_FLAGS "-Wl,-rpath,@loader_path/${_REL_PATH}"
-                            INSTALL_NAME_DIR "@rpath")
+      set_target_properties(_${_ARG_NAME} PROPERTIES
+                            LINK_FLAGS "-Wl,-rpath,@${_REL_PATH}")
     endif()                          
-    set_target_properties("_${_LIB_NAME}"
-                        PROPERTIES PREFIX "")
-    install(TARGETS "_${_LIB_NAME}" LIBRARY DESTINATION
+    if (NOT WIN32)
+      set_target_properties("_${_ARG_NAME}"
+                          PROPERTIES PREFIX "")
+    else ()
+      set_target_properties("_${_ARG_NAME}"
+                          PROPERTIES PREFIX "../")
+
+      set_target_properties("_${_ARG_NAME}"
+                          PROPERTIES SUFFIX ".pyd")
+
+    endif()
+    install(TARGETS "_${_ARG_NAME}" LIBRARY DESTINATION
             "${LIB_DIR}/${PYMOD_DIR}")
   else()
-    add_custom_target("_${_LIB_NAME}" ALL)
+    add_custom_target("_${_ARG_NAME}" ALL)
   endif()
-  #-----------------------------------------------------------------------------
-  # build ui files
-  #-----------------------------------------------------------------------------
-  if (_ARG_UI)
-    ui_to_python(${_LIB_NAME} ${PYMOD_DIR} ${PYMOD_STAGE_DIR} ${_ARG_UI})
-  endif()  
-  #-----------------------------------------------------------------------------
-  # compile python files
-  #-----------------------------------------------------------------------------
   if (_ARG_PY)
-    parse_file_list("${_ARG_PY}" _PYFILE_MAP)
-    map(KEYS _PYFILE_MAP _PYFILE_MAP_KEYS)
-    foreach(_DIR ${_PYFILE_MAP_KEYS})
-      map(GET _PYFILE_MAP ${_DIR} _PY_FILES)
-      set(_ABS_PY_FILES)
-      set(_PY_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${_DIR}")
-      foreach(_PY ${_PY_FILES})
-        list(APPEND _ABS_PY_FILES "${_PY_SOURCE_DIR}/${_PY}")
-      endforeach()
-      install(FILES ${_ABS_PY_FILES} DESTINATION "${LIB_DIR}/${PYMOD_DIR}/${_DIR}")
-      string(REPLACE "/" "_" _DIR_NO_SLASH "${_DIR}")
-      set(_PYMOD_TARGET "${_LIB_NAME}_${_DIR_NO_SLASH}_pymod")
-      string(REPLACE "_." "" _PYMOD_TARGET "${_PYMOD_TARGET}")
-      add_custom_target(${_PYMOD_TARGET} ALL)
-      copy_if_different("./" "${PYMOD_STAGE_DIR}/${_DIR}"
-                        "${_ABS_PY_FILES}" "TARGETS"
-                        "${_PYMOD_TARGET}")
-      compile_py_files(_${_LIB_NAME} ${PYMOD_STAGE_DIR}/${_DIR} compiled_files ${_ABS_PY_FILES})
-      install(FILES ${compiled_files} DESTINATION "${LIB_DIR}/${PYMOD_DIR}/${_DIR}")
+    set(_PY_FILES)
+    set(_EXPECT_IN_DIR FALSE)
+    foreach(_PY_FILE ${_ARG_PY})
+      if (_PY_FILE STREQUAL "IN_DIR")
+        set(_EXPECT_IN_DIR TRUE)
+      else()
+        if (_EXPECT_IN_DIR)
+          set(_EXPECT_IN_DIR FALSE)
+          set(_DIR ${_PY_FILE})
+          set(_ABS_PY_FILES)
+          set(_PY_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${_DIR}")
+          foreach(_PY ${_PY_FILES})
+            list(APPEND _ABS_PY_FILES "${_PY_SOURCE_DIR}/${_PY}")
+          endforeach()
+          install(FILES ${_ABS_PY_FILES} DESTINATION
+                  "${LIB_DIR}/${PYMOD_DIR}/${_DIR}")
+          string(REPLACE "/" "_" _DIR_NO_SLASH "${_DIR}")
+          add_custom_target("${_ARG_NAME}_${_DIR_NO_SLASH}_pymod" ALL)
+          copy_if_different("./" "${PYMOD_STAGE_DIR}/${_DIR}" 
+                            "${_ABS_PY_FILES}" "TARGETS"
+                            "${_ARG_NAME}_${_DIR_NO_SLASH}_pymod")
+          set(_PY_FILES)
+        else()
+          list(APPEND _PY_FILES "${_PY_FILE}")
+        endif()
+      endif()
     endforeach()
+    if (_PY_FILES)
+      add_custom_target("${_ARG_NAME}_pymod" ALL)
+      #add_custom_target("${_LIB_NAME}_pymod" ALL)
+      copy_if_different("./" "${PYMOD_STAGE_DIR}" "${_ABS_PY_FILES}" "TARGETS"
+                        "${_ARG_NAME}_pymod")
+      #add_dependencies("_${_LIB_NAME}" "${_LIB_NAME}_pymod")
+      add_dependencies("_${_ARG_NAME}" "${_ARG_NAME}_pymod")
+      #copy_if_different("./" "${PYMOD_STAGE_DIR}" "${_PY_FILES}" "TARGETS"
+      #                  "${_ARG_NAME}_pymod")
+
+
+      include_directories(${PYTHON_INCLUDE_PATH})
+      install(FILES ${_PY_FILES} DESTINATION "${LIB_DIR}/${PYMOD_DIR}")
+      endif()
   endif()  
   get_target_property(_MOD_DEPS "${_PARENT_NAME}" MODULE_DEPS)
   if(_MOD_DEPS)
     foreach(dep ${_MOD_DEPS})
-       add_dependencies("_${_LIB_NAME}" "_${dep}")
+       add_dependencies("_${_ARG_NAME}" "_${dep}")
     endforeach()
   endif()
+
 endmacro()
 
 add_custom_target(check)
-- 
GitLab