Revision: 77245
http://sourceforge.net/p/brlcad/code/77245
Author: starseeker
Date: 2020-09-26 18:32:02 +0000 (Sat, 26 Sep 2020)
Log Message:
-----------
Work on building a few more libraries. Still need to figure out how to handle
non-standard lib name package finding...
Modified Paths:
--------------
brlcad/branches/thirdparty_rework/src/superbuild/CMakeLists.txt
Modified: brlcad/branches/thirdparty_rework/src/superbuild/CMakeLists.txt
===================================================================
--- brlcad/branches/thirdparty_rework/src/superbuild/CMakeLists.txt
2020-09-26 17:41:28 UTC (rev 77244)
+++ brlcad/branches/thirdparty_rework/src/superbuild/CMakeLists.txt
2020-09-26 18:32:02 UTC (rev 77245)
@@ -9,14 +9,22 @@
# Debugging flag for ExternalProject tools
set(EXTPROJ_VERBOSE 0)
-# Load some CMake macros to handle the special case of third party libraries.
-include(ThirdParty)
-
# Superbuilds use ExternalProject_Add, and BRL-CAD defines some additional
# targets for managing them.
include(ExternalProject)
+# Note- make sure CMAKE_BINARY_DIR and CMAKE_INSTALL_PREFIX are finalized
+# BEFORE including this file!
include(ExternalProject_Target)
+# Load some CMake macros to handle the special case of third party libraries.
+include(ThirdParty)
+
+
+# For now, turn everything on:
+set(BRLCAD_LEVEL2 ON)
+set(BRLCAD_LEVEL3 ON)
+
+
set(BRLCAD_DEPS)
###############################################################################
@@ -85,7 +93,247 @@
endif (${CMAKE_PROJECT_NAME}_ZLIB_BUILD)
+# With MSVC, some of the non-CMake subbuilds are going to need the vcvars bat
+# file to set up the environment.
+if(MSVC)
+ get_filename_component(COMPILER_DIR "${CMAKE_C_COMPILER}" DIRECTORY)
+ get_filename_component(COMPILER_ROOT "${COMPILER_DIR}" NAME)
+ set(VCVARS_BAT "${COMPILER_DIR}/vcvars${COMPILER_ROOT}.bat")
+ if(NOT EXISTS "${VCVARS_BAT}")
+ # Try the VS2017 location (https://stackoverflow.com/q/43372235)
+ set(COMPILER_ROOT "")
+ foreach(DIRS RANGE 0 5)
+ get_filename_component(COMPILER_DIR "${COMPILER_DIR}" DIRECTORY)
+ endforeach(DIRS RANGE 0 5)
+ set(COMPILER_DIR "${COMPILER_DIR}/Auxiliary/Build")
+ if(CMAKE_CL_64)
+ set(VCVARS_BAT "${COMPILER_DIR}/vcvars64.bat")
+ else(CMAKE_CL_64)
+ set(VCVARS_BAT "${COMPILER_DIR}/vcvars32.bat")
+ endif(CMAKE_CL_64)
+ if(NOT EXISTS "${VCVARS_BAT}")
+ message(FATAL_ERROR "Could not find vcvars bat file in ${COMPILER_DIR}")
+ endif(NOT EXISTS "${VCVARS_BAT}")
+ endif(NOT EXISTS "${VCVARS_BAT}")
+endif(MSVC)
+
+# In case we need to pass some sort of reasonable parallel
+# flag to a build system, check our processor count
+include(ProcessorCount)
+ProcessorCount(N)
+math(EXPR pcnt "${N} / 2")
+if (NOT pcnt)
+ set(pcnt 1)
+endif (NOT pcnt)
+
+
###############################################################################
+# libregex
+###############################################################################
+
+set (regex_DESCRIPTION "
+Option for enabling and disabling compilation of the Regular
+Expression Library provided with BRL-CAD's source distribution.
+Default is AUTO, responsive to the toplevel BRLCAD_BUNDLED_LIBS option
+and testing first for a system version if BRLCAD_BUNDLED_LIBS is also
+AUTO.
+")
+THIRD_PARTY(libregex REGEX regex regex_DESCRIPTION ALIASES ENABLE_REGEX)
+
+if (${CMAKE_PROJECT_NAME}_REGEX_BUILD)
+
+ set(REGEX_VERSION "1.0.4")
+ if (MSVC)
+ set(REGEX_BASENAME regex_brl)
+ set(REGEX_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
+ else (MSVC)
+ set(REGEX_BASENAME libregex_brl)
+ set(REGEX_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}.${REGEX_VERSION})
+ endif (MSVC)
+
+ # Platform differences in default linker behavior make it difficult to
+ # guarantee that our libregex symbols will override libc. We'll avoid the
+ # issue by renaming our libregex symbols to be incompatible with libc.
+ ExternalProject_Add(REGEX_BLD
+ SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../other/libregex"
+ BUILD_ALWAYS ${EXTERNAL_BUILD_UPDATE} ${LOG_OPTS}
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLIB_DIR=${LIB_DIR}
-DBIN_DIR=${BIN_DIR}
+ -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
+ -DREGEX_PREFIX_STR=libregex_
+ )
+
+ ExternalProject_Target(regex REGEX_BLD
+ OUTPUT_FILE ${REGEX_BASENAME}${REGEX_SUFFIX}
+ STATIC_OUTPUT_FILE ${REGEX_BASENAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
+ SYMLINKS
"${REGEX_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX};${REGEX_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.1"
+ LINK_TARGET "${REGEX_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ STATIC_LINK_TARGET "${REGEX_BASENAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ RPATH
+ )
+ ExternalProject_ByProducts(REGEX_BLD ${INCLUDE_DIR}
+ regex.h
+ )
+
+ list(APPEND BRLCAD_DEPS REGEX_BLD)
+
+ set(REGEX_LIBRARIES regex CACHE STRING "Building bundled libregex" FORCE)
+ set(REGEX_INCLUDE_DIRS "${CMAKE_BINARY_DIR}/${INCLUDE_DIR}" CACHE STRING
"Directory containing regex headers." FORCE)
+
+ SetTargetFolder(REGEX_BLD "Third Party Libraries")
+ SetTargetFolder(regex "Third Party Libraries")
+
+endif (${CMAKE_PROJECT_NAME}_REGEX_BUILD)
+
+
+###############################################################################
+# netpbm library - support for pnm,ppm,pbm, etc. image files
+###############################################################################
+
+set(netpbm_DESCRIPTION "
+Option for enabling and disabling compilation of the netpbm library
+provided with BRL-CAD's source code. Default is AUTO, responsive to
+the toplevel BRLCAD_BUNDLED_LIBS option and testing first for a system
+version if BRLCAD_BUNDLED_LIBS is also AUTO.
+")
+THIRD_PARTY(libnetpbm NETPBM netpbm netpbm_DESCRIPTION REQUIRED_VARS
BRLCAD_LEVEL2 ALIASES ENABLE_NETPBM)
+
+if (${CMAKE_PROJECT_NAME}_NETPBM_BUILD)
+
+ if (MSVC)
+ set(NETPBM_BASENAME regex_brl)
+ else (MSVC)
+ set(NETPBM_BASENAME libregex_brl)
+ endif (MSVC)
+
+ ExternalProject_Add(NETPBM_BLD
+ SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../other/libnetpbm"
+ BUILD_ALWAYS ${EXTERNAL_BUILD_UPDATE} ${LOG_OPTS}
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLIB_DIR=${LIB_DIR}
-DBIN_DIR=${BIN_DIR}
+ -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
+ )
+ ExternalProject_Target(netpbm NETPBM_BLD
+ OUTPUT_FILE ${NETPBM_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
+ STATIC_OUTPUT_FILE ${NETPBM_BASENAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
+ RPATH
+ )
+
+ ExternalProject_ByProducts(NETPBM_BLD ${INCLUDE_DIR}
+ netpbm/bitio.h
+ netpbm/colorname.h
+ netpbm/pam.h
+ netpbm/pammap.h
+ netpbm/pbm.h
+ netpbm/pbmfont.h
+ netpbm/pgm.h
+ netpbm/pm.h
+ netpbm/pm_gamma.h
+ netpbm/pm_system.h
+ netpbm/pnm.h
+ netpbm/ppm.h
+ netpbm/ppmcmap.h
+ netpbm/ppmfloyd.h
+ )
+
+ list(APPEND BRLCAD_DEPS NETPBM_BLD)
+
+ set(NETPBM_LIBRARIES netpbm CACHE STRING "Building bundled netpbm" FORCE)
+ set(NETPBM_INCLUDE_DIRS "${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/netpbm" CACHE
STRING "Directory containing netpbm headers." FORCE)
+
+ SetTargetFolder(NETPBM_BLD "Third Party Libraries")
+ SetTargetFolder(netpbm "Third Party Libraries")
+
+endif (${CMAKE_PROJECT_NAME}_NETPBM_BUILD)
+
+
+###############################################################################
+# libpng - Portable Network Graphics image file support
+###############################################################################
+
+# NOTE: we need to have libpng's internal call to find_package looking for zlib
+# locate our local copy if we have one. Defining the ZLIB_ROOT prefix for
+# find_package and setting the library file to our custom library name is
+# intended to do this (requires CMake 3.12).
+
+set(png_DESCRIPTION "
+Option for enabling and disabling compilation of the Portable Network
+Graphics library provided with BRL-CAD's source distribution. Default
+is AUTO, responsive to the toplevel BRLCAD_BUNDLED_LIBS option and
+testing first for a system version if BRLCAD_BUNDLED_LIBS is also
+AUTO.
+")
+
+# We generally don't want the Mac framework libpng...
+set(CMAKE_FIND_FRAMEWORK LAST)
+
+THIRD_PARTY(libpng PNG png png_DESCRIPTION REQUIRED_VARS BRLCAD_LEVEL2 ALIASES
ENABLE_PNG)
+
+if (${CMAKE_PROJECT_NAME}_PNG_BUILD)
+
+ set(PNG_VERSION_MAJOR 16)
+ set(PNG_VERSION_MINOR 37)
+ set(PNG_LIB_NAME png_brl)
+
+ if (MSVC)
+ set(PNG_BASENAME ${PNG_LIB_NAME})
+ set(PNG_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
+ else (MSVC)
+ set(PNG_BASENAME lib${PNG_LIB_NAME})
+ set(PNG_SUFFIX
${CMAKE_SHARED_LIBRARY_SUFFIX}.${PNG_VERSION_MAJOR}.${PNG_VERSION_MINOR}.0)
+ endif (MSVC)
+
+ if (TARGET ZLIB_BLD)
+ ExternalProject_Add(PNG_BLD
+ SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../other/libpng"
+ BUILD_ALWAYS ${EXTERNAL_BUILD_UPDATE} ${LOG_OPTS}
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
-DCMAKE_INSTALL_LIBDIR=${LIB_DIR}
+ -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH}
+ -DPNG_STATIC=${BUILD_STATIC_LIBS} -DSKIP_INSTALL_FILES=ON
-DSKIP_INSTALL_EXECUTABLES=ON
+ -DSKIP_INSTALL_EXPORT=ON -DPNG_TESTS=OFF
-Dld-version-script=OFF
+ -DZLIB_ROOT=${CMAKE_BINARY_DIR}
-DZLIB_LIBRARY=$<TARGET_LINKER_FILE_DIR:zlib>/${ZLIB_BASENAME}$<TARGET_LINKER_FILE_SUFFIX:zlib>
+ -DPNG_LIB_NAME=${PNG_LIB_NAME} -DPNG_PREFIX=brl_
+ DEPENDS ${ZLIB_TARGET}
+ )
+ else (TARGET ZLIB_BLD)
+ ExternalProject_Add(PNG_BLD
+ SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libpng"
+ BUILD_ALWAYS ${EXTERNAL_BUILD_UPDATE} ${LOG_OPTS}
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
-DCMAKE_INSTALL_LIBDIR=${LIB_DIR}
+ -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH}
+ -DPNG_STATIC=${BUILD_STATIC_LIBS} -DSKIP_INSTALL_FILES=ON
-DSKIP_INSTALL_EXECUTABLES=ON
+ -DSKIP_INSTALL_EXPORT=ON -DPNG_TESTS=OFF
-Dld-version-script=OFF
+ -DPNG_PREFIX=brl_
+ )
+ endif (TARGET ZLIB_BLD)
+ ExternalProject_Target(png PNG_BLD
+ OUTPUT_FILE ${PNG_BASENAME}${PNG_SUFFIX}
+ STATIC_OUTPUT_FILE ${PNG_BASENAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
+ SYMLINKS
"${PNG_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX};${PNG_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${PNG_VERSION_MAJOR};${PNG_BASENAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ LINK_TARGET "${PNG_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ STATIC_LINK_TARGET "${PNG_BASENAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ RPATH
+ )
+ ExternalProject_ByProducts(PNG_BLD ${INCLUDE_DIR}
+ png.h
+ pngconf.h
+ pnglibconf.h
+ libpng${PNG_VERSION_MAJOR}/png.h
+ libpng${PNG_VERSION_MAJOR}/pngconf.h
+ libpng${PNG_VERSION_MAJOR}/pnglibconf.h
+ )
+
+ list(APPEND BRLCAD_DEPS PNG_BLD)
+
+ set(PNG_LIBRARIES png CACHE STRING "Building bundled libpng" FORCE)
+ set(PNG_INCLUDE_DIRS "${CMAKE_BINARY_DIR}/${INCLUDE_DIR}" CACHE STRING
"Directory containing libpng headers." FORCE)
+
+ SetTargetFolder(PNG_BLD "Third Party Libraries")
+ SetTargetFolder(png "Third Party Libraries")
+
+endif (${CMAKE_PROJECT_NAME}_PNG_BUILD)
+
+
+
+###############################################################################
# openNURBS - Non-Uniform Rational B-Spline support
###############################################################################
@@ -263,7 +511,7 @@
SOURCE_DIR "${BRLCAD_SOURCE_DIR}"
PREFIX ${BRLCAD_BINARY_DIR}/brlcad
BINARY_DIR ${BRLCAD_BINARY_DIR}/brlcad-build
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-DLIB_DIR=${LIB_DIR} -DBIN_DIR=${BIN_DIR}
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLIB_DIR=${LIB_DIR}
-DBIN_DIR=${BIN_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DSUBBUILD=ON
DEPENDS ${BRLCAD_DEPS}
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