Fix when statically linking with distro's boost: in this case, we most likely also...
authorBastien Montagne <montagne29@wanadoo.fr>
Mon, 19 Nov 2012 08:51:35 +0000 (08:51 +0000)
committerBastien Montagne <montagne29@wanadoo.fr>
Mon, 19 Nov 2012 08:51:35 +0000 (08:51 +0000)
So when you enable Boost_USE_STATIC_LIBS, you should also set Boost_USE_ICU to True. Will add a note about that in build doc too.

CMakeLists.txt
build_files/cmake/Modules/FindIcuLinux.cmake [new file with mode: 0644]
build_files/cmake/macros.cmake

index fe1a6d033355cad23d87c36f6624d8ac0612ac69..634ada0eecc73aad6925ac79a581dd4ceb4f5699 100644 (file)
@@ -644,6 +644,9 @@ if(UNIX AND NOT APPLE)
                                list(APPEND __boost_packages locale)
                        endif()
                        find_package(Boost 1.34 COMPONENTS ${__boost_packages})
+                       if(Boost_USE_STATIC_LIBS AND Boost_USE_ICU)
+                               find_package(IcuLinux)
+                       endif()
                        mark_as_advanced(Boost_DIR)  # why doesnt boost do this?
                endif()
 
diff --git a/build_files/cmake/Modules/FindIcuLinux.cmake b/build_files/cmake/Modules/FindIcuLinux.cmake
new file mode 100644 (file)
index 0000000..e0e5873
--- /dev/null
@@ -0,0 +1,146 @@
+# - Find static icu libraries
+# Find the native static icu libraries (needed for static boost_locale :/ ).
+# This module defines
+#  ICU_LIBRARIES, libraries to link against to use icu.
+#  ICU_ROOT_DIR, The base directory to search for icu.
+#                    This can also be an environment variable.
+#  ICU_FOUND, If false, do not try to use icu.
+#
+# also defined, but not for general use are
+#  ICU_LIBRARY_xxx, where to find the icu libraries.
+
+#=============================================================================
+# Copyright 2012 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If ICU_ROOT_DIR was defined in the environment, use it.
+IF(NOT ICU_ROOT_DIR AND NOT $ENV{ICU_ROOT_DIR} STREQUAL "")
+  SET(ICU_ROOT_DIR $ENV{ICU_ROOT_DIR})
+ENDIF()
+
+if(Boost_USE_STATIC_LIBS)
+  set(_icu_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+  set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
+endif()
+
+SET(_icu_SEARCH_DIRS
+  ${ICU_ROOT_DIR}
+  /usr/local
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+)
+
+# We don't need includes, only libs to link against...
+#FIND_PATH(ICU_INCLUDE_DIR
+#  NAMES
+#    utf.h
+#  HINTS
+#    ${_icu_SEARCH_DIRS}
+#  PATH_SUFFIXES
+#    include/unicode
+#)
+
+FIND_LIBRARY(ICU_LIBRARY_DATA
+  NAMES
+    icudata
+  HINTS
+    ${_icu_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+FIND_LIBRARY(ICU_LIBRARY_I18N
+  NAMES
+    icui18n
+  HINTS
+    ${_icu_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+FIND_LIBRARY(ICU_LIBRARY_IO
+  NAMES
+    icuio
+  HINTS
+    ${_icu_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+FIND_LIBRARY(ICU_LIBRARY_LE
+  NAMES
+    icule
+  HINTS
+    ${_icu_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+FIND_LIBRARY(ICU_LIBRARY_LX
+  NAMES
+    iculx
+  HINTS
+    ${_icu_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+FIND_LIBRARY(ICU_LIBRARY_TU
+  NAMES
+    icutu
+  HINTS
+    ${_icu_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+FIND_LIBRARY(ICU_LIBRARY_UC
+  NAMES
+    icuuc
+  HINTS
+    ${_icu_SEARCH_DIRS}
+  PATH_SUFFIXES
+    lib64 lib
+  )
+
+# Restore the original find library ordering
+if(Boost_USE_STATIC_LIBS)
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ${_icu_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set ICU_FOUND to TRUE if 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Icu DEFAULT_MSG
+    ICU_LIBRARY_DATA
+    ICU_LIBRARY_I18N
+    ICU_LIBRARY_IO
+    ICU_LIBRARY_LE
+    ICU_LIBRARY_LX
+    ICU_LIBRARY_TU
+    ICU_LIBRARY_UC
+)
+
+IF(ICU_FOUND)
+  SET(ICU_LIBRARIES ${ICU_LIBRARY_DATA} ${ICU_LIBRARY_I18N} ${ICU_LIBRARY_IO} ${ICU_LIBRARY_LE} ${ICU_LIBRARY_LX} ${ICU_LIBRARY_TU} ${ICU_LIBRARY_UC})
+  SET(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR})
+ENDIF(ICU_FOUND)
+
+MARK_AS_ADVANCED(
+  ICU_INCLUDE_DIR
+  ICU_LIBRARY_DATA
+  ICU_LIBRARY_I18N
+  ICU_LIBRARY_IO
+  ICU_LIBRARY_LE
+  ICU_LIBRARY_LX
+  ICU_LIBRARY_TU
+  ICU_LIBRARY_UC
+)
index 4f1d34f993cf8943c6be15746d3acc29e2d0e2ef..efa258aa9dcdfc98d40f3bcdfbeca10fe2cb8b98 100644 (file)
@@ -312,6 +312,9 @@ macro(setup_liblinks
        endif()
        if(WITH_BOOST)
                target_link_libraries(${target} ${BOOST_LIBRARIES})
+               if(Boost_USE_STATIC_LIBS AND Boost_USE_ICU)
+                       target_link_libraries(${target} ${ICU_LIBRARIES})
+               endif()
        endif()
        target_link_libraries(${target} ${JPEG_LIBRARIES})
        if(WITH_IMAGE_OPENEXR)