Revision: 77355
          http://sourceforge.net/p/brlcad/code/77355
Author:   starseeker
Date:     2020-10-07 14:43:16 +0000 (Wed, 07 Oct 2020)
Log Message:
-----------
Checkpoint.  Need to stop and rethink again.  Previous approach woudl work for 
single config setups, but will not work for multiconfig.  Need multiple 
'installed' copies in the build dir in the multiconfig setup, which isn't what 
the build systems are designed for - they expect one final install dir.

Modified Paths:
--------------
    brlcad/branches/thirdparty_rework/CMakeLists.txt
    brlcad/branches/thirdparty_rework/src/superbuild/CMakeLists.txt
    brlcad/branches/thirdparty_rework/src/superbuild/zlib.cmake

Modified: brlcad/branches/thirdparty_rework/CMakeLists.txt
===================================================================
--- brlcad/branches/thirdparty_rework/CMakeLists.txt    2020-10-06 22:28:42 UTC 
(rev 77354)
+++ brlcad/branches/thirdparty_rework/CMakeLists.txt    2020-10-07 14:43:16 UTC 
(rev 77355)
@@ -239,15 +239,26 @@
 endforeach(v ${VARS})
 
 # Now we prepare and invoke the superbuild as a separate process
+file(REMOVE "${CMAKE_BINARY_DIR}/superbuild/CMakeCache.txt")
 execute_process(
-  COMMAND ${CMAKE_COMMAND} -S ${CMAKE_SOURCE_DIR}/src/superbuild 
-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} 
-DCMAKE_BUILD_RPATH=${CMAKE_BUILD_RPATH}
+  COMMAND ${CMAKE_COMMAND} -S ${CMAKE_SOURCE_DIR}/src/superbuild -G 
${CMAKE_GENERATOR} -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} 
-DCMAKE_BUILD_RPATH=${CMAKE_BUILD_RPATH}
   WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/superbuild"
   )
-execute_process(
-  COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/superbuild -j12 
--config Release --target all
-  WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/superbuild"
-  )
 
+if (CMAKE_CONFIGURATION_TYPES)
+  foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/superbuild -j12 
--config ${CFG_TYPE} --target all
+      WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/superbuild"
+      )
+  endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
+else (CMAKE_CONFIGURATION_TYPES)
+  execute_process(
+    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/superbuild -j12 
--config Release --target all
+    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/superbuild"
+    )
+endif (CMAKE_CONFIGURATION_TYPES)
+
 if (NOT EXISTS ${CMAKE_BINARY_DIR}/superbuild.cmake)
   message(FATAL_ERROR "Third party library info file 
${CMAKE_BINARY_DIR}/superbuild.cmake was not found.")
 endif (NOT EXISTS ${CMAKE_BINARY_DIR}/superbuild.cmake)
@@ -254,22 +265,36 @@
 
 # Find packages based on superbuild results
 include(${CMAKE_BINARY_DIR}/superbuild.cmake)
-find_package(LEMON)
-find_package(RE2C)
-find_package(PERPLEX)
-find_package(ZLIB)
-find_package(PNG)
-find_package(REGEX)
-find_package(NETPBM)
+
+set(PKGS LEMON RE2C PERPLEX ZLIB PNG REGEX NETPBM)
+foreach(P ${PKGS})
+  unset(${P}_FOUND CACHE)
+  unset(${P}_LIBRARY CACHE)
+  find_package(${P})
+endforeach(P ${PKGS})
 if (BRLCAD_ENABLE_STEPCODE)
+  set(STEPCODE_FOUND "STEPCODE-NOTFOUND" CACHE STRING "STEPCODE_FOUND" FORCE)
   find_package(STEPCODE)
 endif (BRLCAD_ENABLE_STEPCODE)
 #find_package(BSON)
 if (BRLCAD_ENABLE_GDAL)
+  set(PROJ4_FOUND "PROJ4-NOTFOUND" CACHE STRING "PROJ4_FOUND" FORCE)
   find_package(PROJ4)
+  set(GDAL_FOUND "GDAL-NOTFOUND" CACHE STRING "GDAL_FOUND" FORCE)
   find_package(GDAL)
 endif (BRLCAD_ENABLE_GDAL)
 if (BRLCAD_ENABLE_TCL)
+  unset(TCL_FOUND CACHE)
+  unset(TCL_INCLUDE_PATH CACHE)
+  unset(TCL_LIBRARY CACHE)
+  unset(TCL_STUB_LIBRARY CACHE)
+  unset(TCL_TCLSH CACHE)
+  unset(TK_INCLUDE_PATH CACHE)
+  unset(TK_LIBRARY CACHE)
+  unset(TK_STUB_LIBRARY CACHE)
+  unset(TK_WISH CACHE)
+  unset(TK_X11_GRAPHICS CACHE)
+  unset(TTK_STUB_LIBRARY CACHE)
   find_package(TCL)
 endif (BRLCAD_ENABLE_TCL)
 

Modified: brlcad/branches/thirdparty_rework/src/superbuild/CMakeLists.txt
===================================================================
--- brlcad/branches/thirdparty_rework/src/superbuild/CMakeLists.txt     
2020-10-06 22:28:42 UTC (rev 77354)
+++ brlcad/branches/thirdparty_rework/src/superbuild/CMakeLists.txt     
2020-10-07 14:43:16 UTC (rev 77355)
@@ -137,7 +137,9 @@
 # It's not enough to simply generate the outputs - we'll also need to install
 # them, which means passing the relevant information back up to the parent
 # build.  We do so with a file the parent build knows to look for:
-file(WRITE "${BRLCAD_BINARY_DIR}/superbuild.cmake" "\#superbuild outputs\n")
+set(SUPERBUILD_OUTPUT "${BRLCAD_BINARY_DIR}/superbuild.cmake")
+file(WRITE "${SUPERBUILD_OUTPUT}" "\#superbuild outputs\n")
+file(APPEND "${SUPERBUILD_OUTPUT}" "set(BUNDLED_DEPS)\n")
 
 ###############################################################################
 # BRL-CAD and some of its dependencies require the lemon, re2c and perplex
@@ -200,22 +202,40 @@
 endif (TARGET PERPLEX_BLD)
 if (TARGET NETPBM_BLD)
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(NETPBM_ROOT 
\"${BRLCAD_BINARY_DIR}\")\n")
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS NETPBM)\n")
 endif (TARGET NETPBM_BLD)
 if (TARGET STEPCODE_BLD)
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(STEPCODE_ROOT 
\"${BRLCAD_BINARY_DIR}\")\n")
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS STEPCODE)\n")
 endif (TARGET STEPCODE_BLD)
 if (TARGET BSON_BLD)
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(BSON_ROOT 
\"${BRLCAD_BINARY_DIR}\")\n")
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS BSON)\n")
 endif (TARGET BSON_BLD)
 if (TARGET PROJ4_BLD)
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(PROJ4_ROOT 
\"${BRLCAD_BINARY_DIR}\")\n")
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS PROJ4)\n")
 endif (TARGET PROJ4_BLD)
 if (TARGET GDAL_BLD)
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(GDAL_ROOT 
\"${BRLCAD_BINARY_DIR}\")\n")
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS GDAL)\n")
 endif (TARGET GDAL_BLD)
 if (TARGET TCL_BLD)
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(TCL_ROOT 
\"${BRLCAD_BINARY_DIR}\")\n")
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS TCL)\n")
 endif (TARGET TCL_BLD)
+if (TARGET TK_BLD)
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS TK)\n")
+endif (TARGET TK_BLD)
+if (TARGET ITCL_BLD)
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS ITCL)\n")
+endif (TARGET ITCL_BLD)
+if (TARGET ITK_BLD)
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS ITK)\n")
+endif (TARGET ITK_BLD)
+if (TARGET IWIDGETS_BLD)
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS IWIDGETS)\n")
+endif (TARGET IWIDGETS_BLD)
 
 # (For REGEX, ZLIB and PNG we need to do a little extra work and supply our
 # custom library names so find_package knows about them.)
@@ -222,14 +242,17 @@
 if (TARGET REGEX_BLD)
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(REGEX_ROOT 
\"${BRLCAD_BINARY_DIR}\")\n")
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(REGEX_LIBRARY 
\"${BRLCAD_BINARY_DIR}/${LIB_DIR}/${REGEX_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}\")\n")
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS REGEX)\n")
 endif (TARGET REGEX_BLD)
 if (TARGET ZLIB_BLD)
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(ZLIB_ROOT 
\"${BRLCAD_BINARY_DIR}\")\n")
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(ZLIB_LIBRARY 
\"${BRLCAD_BINARY_DIR}/${LIB_DIR}/${ZLIB_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}\")\n")
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS ZLIB)\n")
 endif (TARGET ZLIB_BLD)
 if (TARGET PNG_BLD)
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(PNG_ROOT 
\"${BRLCAD_BINARY_DIR}\")\n")
   file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "set(PNG_LIBRARY 
\"${BRLCAD_BINARY_DIR}/${LIB_DIR}/${PNG_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}\")\n")
+  file(APPEND "${BRLCAD_BINARY_DIR}/superbuild.cmake" "list(APPEND 
BUNDLED_DEPS PNG)\n")
 endif (TARGET PNG_BLD)
 
 # Local Variables:

Modified: brlcad/branches/thirdparty_rework/src/superbuild/zlib.cmake
===================================================================
--- brlcad/branches/thirdparty_rework/src/superbuild/zlib.cmake 2020-10-06 
22:28:42 UTC (rev 77354)
+++ brlcad/branches/thirdparty_rework/src/superbuild/zlib.cmake 2020-10-07 
14:43:16 UTC (rev 77355)
@@ -7,6 +7,18 @@
 
 THIRD_PARTY(libz ZLIB zlib zlib_DESCRIPTION ALIASES ENABLE_ZLIB ENABLE_LIBZ)
 
+# TODO - it's not enough just to build - we also need to be able to reset
+# if we have already built and the top level options change from enabled
+# to disabled.  Resetting entails an unset(var CACHE) on all the find_package
+# variables associated with this package, and removing from the build directory
+# any previously generated build products.
+
+# In the long run it might be cleaner to compile the 3rd party component with a
+# target dir like CMAKE_BUILD_DIR/superbuild/zlib.  Then, define a ZLIB_CPY
+# target that copies all the relevant files to the build dir and a ZLIB_CLEAN
+# that removes them but doesn't remove superbuild/zlib.  That way flipping
+# between bundled and system won't trigger needless rebuilds.
+
 if (BRLCAD_ZLIB_BUILD)
 
   set(ZLIB_VERSION 1.2.11)
@@ -24,10 +36,14 @@
     set(ZLIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}.${ZLIB_VERSION})
   endif (MSVC)
 
+  if (NOT DEFINED ZLIB_BLD_DIR)
+    set(ZLIB_BLD_DIR "${CMAKE_INSTALL_PREFIX}/superbuild/zlib")
+  endif (NOT DEFINED ZLIB_BLD_DIR)
+
   ExternalProject_Add(ZLIB_BLD
     SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/zlib"
     BUILD_ALWAYS ${EXTERNAL_BUILD_UPDATE} ${LOG_OPTS}
-    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} 
-DLIB_DIR=${LIB_DIR} -DBIN_DIR=${BIN_DIR}
+    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${ZLIB_BLD_DIR} -DLIB_DIR=${LIB_DIR} 
-DBIN_DIR=${BIN_DIR}
     -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} 
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
     -DZ_PREFIX_STR=${Z_PREFIX_STR}
     )
@@ -47,23 +63,62 @@
     )
   \n")
 
-  list(APPEND BRLCAD_DEPS ZLIB_BLD)
+  # We're supplying ZLIB - tell find_package where to look
+  file(APPEND "${SUPERBUILD_OUTPUT}" "set(ZLIB_ROOT 
\"${CMAKE_INSTALL_PREFIX}\")\n")
 
-  set(ZLIB_LIBRARIES zlib CACHE STRING "Building bundled zlib" FORCE)
-  set(ZLIB_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${INCLUDE_DIR}" CACHE STRING 
"Directory containing zlib headers." FORCE)
+  # We need to stage the files from the install directory used by the build
+  # (or the supplied pre-compiled dir, if defined) to the BRL-CAD build dirs.
+  file(APPEND "${SUPERBUILD_OUTPUT}" "file(GLOB_RECURSE ZLIB_FILES RELATIVE 
\"${ZLIB_BLD_DIR}\" \"${ZLIB_BLD_DIR}/*\")\n")
+  file(APPEND "${SUPERBUILD_OUTPUT}" "foreach(ZF \${ZLIB_FILES})\n")
+  file(APPEND "${SUPERBUILD_OUTPUT}" "   execute_process(COMMAND 
\"${CMAKE_COMMAND}\" -E copy \"${ZLIB_BLD_DIR}/\${ZF}\" 
\"\${BRLCAD_BINARY_DIR}/\${ZF}\")\n")
+  file(APPEND "${SUPERBUILD_OUTPUT}" "endforeach(ZF \${ZLIB_FILES})\n")
 
-  SetTargetFolder(ZLIB_BLD "Third Party Libraries")
-  SetTargetFolder(zlib "Third Party Libraries")
-
 else (BRLCAD_ZLIB_BUILD)
 
-  set(Z_PREFIX_STR "" CACHE STRING "clear prefix for zlib functions" FORCE)
-  set(Z_PREFIX_STR)
-  set(ZLIB_LIBRARIES ${ZLIB_LIBRARY_RELEASE} CACHE STRING "ZLIB_LIBRARIES" 
FORCE)
-  set(ZLIB_INCLUDE_DIRS "${ZLIB_INCLUDE_DIR}" CACHE STRING "ZLIB include 
directory" FORCE)
+  # We're NOT supplying ZLIB - clear key outputs from build dir, if present,
+  # so they won't interfere with find_package or the build targets
+  set(CLEAR_FILES
+    ${ZLIB_BASENAME}${ZLIB_SUFFIX}
+    ${ZLIB_BASENAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
+    ${ZLIB_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
+    ${ZLIB_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.1
+    zconf.h
+    zlib.h
+    )
+  foreach(CF ${CLEAR_FILES})
+    file(REMOVE "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}/${CF}")
+    file(REMOVE "${CMAKE_INSTALL_PREFIX}/${BIN_DIR}/${CF}")
+    file(REMOVE "${CMAKE_INSTALL_PREFIX}/${INCLUDE_DIR}/${CF}")
+    set(ALL_FILES ${LIB_FILES} ${BIN_FILES} ${INC_FILES})
+      file(REMOVE "${CMAKE_INSTALL_PREFIX}/${CFG_TYPE}/${LIB_DIR}/${CF}")
+      file(REMOVE "${CMAKE_INSTALL_PREFIX}/${CFG_TYPE}/${BIN_DIR}/${CF}")
+      file(REMOVE "${CMAKE_INSTALL_PREFIX}/${CFG_TYPE}/${INCLUDE_DIR}/${CF}")
+    endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
+  endforeach(CF ${CLEAR_FILES})
 
+  # If BRLCAD_DEPS is set, set ZLIB_ROOT to prefer that directory
+  if (BRLCAD_DEPS)
+    if (EXISTS "${BRLCAD_DEPS}/zlib")
+      file(APPEND "${SUPERBUILD_OUTPUT}" "set(ZLIB_ROOT 
\"${BRLCAD_DEPS}/zlib\")\n")
+    elseif (EXISTS "${BRLCAD_DEPS}")
+      file(APPEND "${SUPERBUILD_OUTPUT}" "set(ZLIB_ROOT \"${BRLCAD_DEPS}\")\n")
+    endif (EXISTS "${BRLCAD_DEPS}/zlib")
+  endif (BRLCAD_DEPS)
+
 endif (BRLCAD_ZLIB_BUILD)
 
+# In case we have altered settings from one configure stage to the next, we
+# need to make sure the find_package variables are cleared.  This way
+# find_package will actually run again, and pick up what might be new vales
+# compared to the previous run.
+file(APPEND "${SUPERBUILD_OUTPUT}" "unset(ZLIB_FOUND CACHE)\n")
+file(APPEND "${SUPERBUILD_OUTPUT}" "unset(ZLIB_LIBRARY CACHE)\n")
+file(APPEND "${SUPERBUILD_OUTPUT}" "unset(ZLIB_LIBRARIES CACHE)\n")
+file(APPEND "${SUPERBUILD_OUTPUT}" "unset(ZLIB_INCLUDE_DIR CACHE)\n")
+file(APPEND "${SUPERBUILD_OUTPUT}" "unset(ZLIB_INCLUDE_DIRS CACHE)\n")
+file(APPEND "${SUPERBUILD_OUTPUT}" "unset(ZLIB_VERSION_STRING CACHE)\n")
+
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to