diff options
Diffstat (limited to 'indra/cmake')
60 files changed, 1919 insertions, 1540 deletions
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index db2cdb5ff8..98eeed09b3 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -4,27 +4,28 @@  include(Variables) -  # Portable compilation flags. - -if (EXISTS ${CMAKE_SOURCE_DIR}/llphysics) -  # The release build should only offer to send crash reports if we're -  # building from a Linden internal source tree. -  set(release_crash_reports 1) -else (EXISTS ${CMAKE_SOURCE_DIR}/llphysics) -  set(release_crash_reports 0)  -endif (EXISTS ${CMAKE_SOURCE_DIR}/llphysics) -  set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DLL_DEBUG=1")  set(CMAKE_CXX_FLAGS_RELEASE -    "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=${release_crash_reports} -DNDEBUG")  +    "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -DNDEBUG")   set(CMAKE_CXX_FLAGS_RELWITHDEBINFO  -    "-DLL_RELEASE=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1") +    "-DLL_RELEASE=1 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1") +# Configure crash reporting +set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds") +set(NON_RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in developer builds") -# Don't bother with a MinSizeRel build. +if(RELEASE_CRASH_REPORTING) +  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DLL_SEND_CRASH_REPORTS=1") +endif() + +if(NON_RELEASE_CRASH_REPORTING) +  set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DLL_SEND_CRASH_REPORTS=1") +  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DLL_SEND_CRASH_REPORTS=1") +endif()   +# Don't bother with a MinSizeRel build.  set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug" CACHE STRING      "Supported build types." FORCE) @@ -35,13 +36,20 @@ if (WINDOWS)    # Don't build DLLs.    set(BUILD_SHARED_LIBS OFF) -  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP" +  # for "backwards compatibility", cmake sneaks in the Zm1000 option which royally +  # screws incredibuild. this hack disables it. +  # for details see: http://connect.microsoft.com/VisualStudio/feedback/details/368107/clxx-fatal-error-c1027-inconsistent-values-for-ym-between-creation-and-use-of-precompiled-headers +  # http://www.ogre3d.org/forums/viewtopic.php?f=2&t=60015 +  # http://www.cmake.org/pipermail/cmake/2009-September/032143.html +  string(REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + +  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP -D_SCL_SECURE_NO_WARNINGS=1"        CACHE STRING "C++ compiler debug options" FORCE)    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO  -      "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob2" +      "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob0 -D_SECURE_STL=0"        CACHE STRING "C++ compiler release-with-debug options" FORCE)    set(CMAKE_CXX_FLAGS_RELEASE -      "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2" +      "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"        CACHE STRING "C++ compiler release options" FORCE)    set(CMAKE_CXX_STANDARD_LIBRARIES "") @@ -49,6 +57,7 @@ if (WINDOWS)    add_definitions(        /DLL_WINDOWS=1 +      /DDOM_DYNAMIC        /DUNICODE        /D_UNICODE         /GS @@ -58,18 +67,10 @@ if (WINDOWS)        /Zc:forScope        /nologo        /Oy- -      ) -      -  if(MSVC80 OR MSVC90) -    set(CMAKE_CXX_FLAGS_RELEASE -      "${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0" -      CACHE STRING "C++ compiler release options" FORCE) -    -    add_definitions(        /Zc:wchar_t- +      /arch:SSE2        ) -  endif (MSVC80 OR MSVC90) -   +         # Are we using the crummy Visual Studio KDU build workaround?    if (NOT VS_DISABLE_FATAL_WARNINGS)      add_definitions(/WX) @@ -142,6 +143,8 @@ if (LINUX)        -fno-strict-aliasing        -fsigned-char        -g +      -msse2 +      -mfpmath=sse        -pthread        ) @@ -161,10 +164,6 @@ if (LINUX)        link_directories(/usr/lib/mysql4/mysql)      endif (EXISTS /usr/lib/mysql4/mysql) -    add_definitions( -        -msse2 -        -mfpmath=sse -        )    endif (SERVER)    if (VIEWER) @@ -172,6 +171,11 @@ if (LINUX)      add_definitions(-fvisibility=hidden)      # don't catch SIGCHLD in our base application class for the viewer - some of our 3rd party libs may need their *own* SIGCHLD handler to work.  Sigh!  The viewer doesn't need to catch SIGCHLD anyway.      add_definitions(-DLL_IGNORE_SIGCHLD) +    if (WORD_SIZE EQUAL 32) +      add_definitions(-march=pentium4) +    endif (WORD_SIZE EQUAL 32) +    add_definitions(-mfpmath=sse) +    #add_definitions(-ftree-vectorize) # THIS CRASHES GCC 3.1-3.2      if (NOT STANDALONE)        # this stops us requiring a really recent glibc at runtime        add_definitions(-fno-stack-protector) @@ -211,7 +215,7 @@ if (LINUX OR DARWIN)      set(GCC_WARNINGS "${GCC_WARNINGS} -Werror")    endif (NOT GCC_DISABLE_FATAL_WARNINGS) -  set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor -Woverloaded-virtual") +  set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor")    set(CMAKE_C_FLAGS "${GCC_WARNINGS} ${CMAKE_C_FLAGS}")    set(CMAKE_CXX_FLAGS "${GCC_CXX_WARNINGS} ${CMAKE_CXX_FLAGS}") diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index 180504d286..daafa00fe2 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -32,27 +32,21 @@ else (STANDALONE)        )    elseif (DARWIN)      if (LLCOMMON_LINK_SHARED) -      set(APR_selector     "0.3.7.dylib") -      set(APRUTIL_selector "0.3.8.dylib") +      set(APR_selector     "0.dylib") +      set(APRUTIL_selector "0.dylib")      else (LLCOMMON_LINK_SHARED)        set(APR_selector     "a")        set(APRUTIL_selector "a")      endif (LLCOMMON_LINK_SHARED) -    set(APR_LIBRARIES  -      debug ${ARCH_PREBUILT_DIRS_DEBUG}/libapr-1.${APR_selector} -      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.${APR_selector} -      ) -    set(APRUTIL_LIBRARIES  -      debug ${ARCH_PREBUILT_DIRS_DEBUG}/libaprutil-1.${APRUTIL_selector} -      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.${APRUTIL_selector} -      ) +    set(APR_LIBRARIES libapr-1.${APR_selector}) +    set(APRUTIL_LIBRARIES libaprutil-1.${APRUTIL_selector})      set(APRICONV_LIBRARIES iconv)    else (WINDOWS)      set(APR_LIBRARIES apr-1)      set(APRUTIL_LIBRARIES aprutil-1)      set(APRICONV_LIBRARIES iconv)    endif (WINDOWS) -  set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/apr-1) +  set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/apr-1)    if (LINUX)      if (VIEWER) diff --git a/indra/cmake/BerkeleyDB.cmake b/indra/cmake/BerkeleyDB.cmake index d98e79179d..57b53f46ff 100644 --- a/indra/cmake/BerkeleyDB.cmake +++ b/indra/cmake/BerkeleyDB.cmake @@ -6,6 +6,12 @@ set(DB_FIND_REQUIRED ON)  if (STANDALONE)    include(FindBerkeleyDB)  else (STANDALONE) -  set(DB_LIBRARIES db-4.2) +  if (LINUX) +    # Need to add dependency pthread explicitely to support ld.gold. +    use_prebuilt_binary(db) +    set(DB_LIBRARIES db-5.1 pthread) +  else (LINUX) +    set(DB_LIBRARIES db-4.2) +  endif (LINUX)    set(DB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)  endif (STANDALONE) diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake index 7ce57a5572..2135f0584c 100644 --- a/indra/cmake/Boost.cmake +++ b/indra/cmake/Boost.cmake @@ -10,23 +10,15 @@ if (STANDALONE)    set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)    set(BOOST_REGEX_LIBRARY boost_regex-mt)    set(BOOST_SIGNALS_LIBRARY boost_signals-mt) +  set(BOOST_SYSTEM_LIBRARY boost_system-mt) +  set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)  else (STANDALONE)    use_prebuilt_binary(boost)    set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)    if (WINDOWS) -    set(BOOST_VERSION 1_39) -    if (MSVC71) -      set(BOOST_PROGRAM_OPTIONS_LIBRARY  -          optimized libboost_program_options-vc71-mt-s-${BOOST_VERSION} -          debug libboost_program_options-vc71-mt-sgd-${BOOST_VERSION}) -      set(BOOST_REGEX_LIBRARY -          optimized libboost_regex-vc71-mt-s-${BOOST_VERSION} -          debug libboost_regex-vc71-mt-sgd-${BOOST_VERSION}) -      set(BOOST_SIGNALS_LIBRARY  -          optimized libboost_signals-vc71-mt-s-${BOOST_VERSION} -          debug libboost_signals-vc71-mt-sgd-${BOOST_VERSION}) -    else (MSVC71) +    set(BOOST_VERSION 1_45) +    if(MSVC80)        set(BOOST_PROGRAM_OPTIONS_LIBRARY             optimized libboost_program_options-vc80-mt-${BOOST_VERSION}            debug libboost_program_options-vc80-mt-gd-${BOOST_VERSION}) @@ -36,14 +28,31 @@ else (STANDALONE)        set(BOOST_SIGNALS_LIBRARY             optimized libboost_signals-vc80-mt-${BOOST_VERSION}            debug libboost_signals-vc80-mt-gd-${BOOST_VERSION}) -    endif (MSVC71) -  elseif (DARWIN) -    set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-xgcc40-mt) -    set(BOOST_REGEX_LIBRARY boost_regex-xgcc40-mt) -    set(BOOST_SIGNALS_LIBRARY boost_signals-xgcc40-mt) -  elseif (LINUX) -    set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-gcc41-mt) -    set(BOOST_REGEX_LIBRARY boost_regex-gcc41-mt) -    set(BOOST_SIGNALS_LIBRARY boost_signals-gcc41-mt) +      set(BOOST_SYSTEM_LIBRARY  +          optimized libboost_system-vc80-mt-${BOOST_VERSION} +          debug libboost_system-vc80-mt-gd-${BOOST_VERSION}) +      set(BOOST_FILESYSTEM_LIBRARY  +          optimized libboost_filesystem-vc80-mt-${BOOST_VERSION} +          debug libboost_filesystem-vc80-mt-gd-${BOOST_VERSION}) +    else(MSVC80) +      # MSVC 10.0 config +      set(BOOST_PROGRAM_OPTIONS_LIBRARY  +          optimized libboost_program_options-vc100-mt-${BOOST_VERSION} +          debug libboost_program_options-vc100-mt-gd-${BOOST_VERSION}) +      set(BOOST_REGEX_LIBRARY +          optimized libboost_regex-vc100-mt-${BOOST_VERSION} +          debug libboost_regex-vc100-mt-gd-${BOOST_VERSION}) +      set(BOOST_SYSTEM_LIBRARY  +          optimized libboost_system-vc100-mt-${BOOST_VERSION} +          debug libboost_system-vc100-mt-gd-${BOOST_VERSION}) +      set(BOOST_FILESYSTEM_LIBRARY  +          optimized libboost_filesystem-vc100-mt-${BOOST_VERSION} +          debug libboost_filesystem-vc100-mt-gd-${BOOST_VERSION})     +    endif (MSVC80) +  elseif (DARWIN OR LINUX) +    set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options) +    set(BOOST_REGEX_LIBRARY boost_regex) +    set(BOOST_SYSTEM_LIBRARY boost_system) +    set(BOOST_FILESYSTEM_LIBRARY boost_filesystem)    endif (WINDOWS)  endif (STANDALONE) diff --git a/indra/cmake/CARes.cmake b/indra/cmake/CARes.cmake index 1850b706ac..b0dac5b12f 100644 --- a/indra/cmake/CARes.cmake +++ b/indra/cmake/CARes.cmake @@ -13,10 +13,7 @@ else (STANDALONE)      if (WINDOWS)          set(CARES_LIBRARIES areslib)      elseif (DARWIN) -        set(CARES_LIBRARIES -          optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libcares.a -          debug ${ARCH_PREBUILT_DIRS_DEBUG}/libcares.a -          ) +       set(CARES_LIBRARIES cares)      else (WINDOWS)          set(CARES_LIBRARIES cares)      endif (WINDOWS) diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt index 6470836286..279d577a27 100644 --- a/indra/cmake/CMakeLists.txt +++ b/indra/cmake/CMakeLists.txt @@ -20,7 +20,6 @@ set(cmake_SOURCE_FILES      CSharpMacros.cmake      DBusGlib.cmake      DirectX.cmake -    ELFIO.cmake      EXPAT.cmake      FindAPR.cmake      FindBerkeleyDB.cmake @@ -29,12 +28,13 @@ set(cmake_SOURCE_FILES      FindFMOD.cmake      FindGooglePerfTools.cmake      FindMono.cmake -    FindMT.cmake      FindMySQL.cmake      FindOpenJPEG.cmake      FindXmlRpcEpi.cmake +    FindZLIB.cmake      FMOD.cmake      FreeType.cmake +    GLOD.cmake      GStreamer010Plugin.cmake      GooglePerfTools.cmake      JPEG.cmake @@ -42,6 +42,7 @@ set(cmake_SOURCE_FILES      LLAudio.cmake      LLCharacter.cmake      LLCommon.cmake +    LLConvexDecomposition.cmake      LLCrashLogger.cmake      LLDatabase.cmake      LLImage.cmake @@ -84,7 +85,6 @@ source_group("Shared Rules" FILES ${cmake_SOURCE_FILES})  set(master_SOURCE_FILES      ../CMakeLists.txt -    ../develop.py      )  if (SERVER) diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake index 6e5fed4d52..9aba08e573 100644 --- a/indra/cmake/CURL.cmake +++ b/indra/cmake/CURL.cmake @@ -10,10 +10,10 @@ else (STANDALONE)    use_prebuilt_binary(curl)    if (WINDOWS)      set(CURL_LIBRARIES  -    debug libcurld -    optimized libcurl) +    debug libcurld.lib +    optimized libcurl.lib)    else (WINDOWS) -    set(CURL_LIBRARIES curl) +    set(CURL_LIBRARIES libcurl.a)    endif (WINDOWS)    set(CURL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)  endif (STANDALONE) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index e852cf463c..394db362b1 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -5,6 +5,7 @@  # VisualStudio.  include(CMakeCopyIfDifferent) +include(Linking)  ###################################################################  # set up platform specific lists of files that need to be copied @@ -16,7 +17,7 @@ if(WINDOWS)      #*******************************      # VIVOX - *NOTE: no debug version -    set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32") +    set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")      set(vivox_files          SLVoice.exe          libsndfile-1.dll @@ -30,24 +31,28 @@ if(WINDOWS)      #*******************************      # Misc shared libs  -    # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables -    # or ARCH_PREBUILT_DIRS -    set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") +    set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")      set(debug_files          openjpegd.dll          libapr-1.dll          libaprutil-1.dll          libapriconv-1.dll +        ssleay32.dll +        libeay32.dll +        libcollada14dom22-d.dll +        glod.dll              ) -    # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables -    # or ARCH_PREBUILT_DIRS -    set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") +    set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")      set(release_files          openjpeg.dll          libapr-1.dll          libaprutil-1.dll          libapriconv-1.dll +        ssleay32.dll +        libeay32.dll +        libcollada14dom22.dll +        glod.dll          )      if(USE_GOOGLE_PERFTOOLS) @@ -60,28 +65,13 @@ if(WINDOWS)        set(release_files ${release_files} fmod.dll)      endif (FMOD) -    #******************************* -    # LLKDU -    set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") -    if(NOT EXISTS ${internal_llkdu_path}) -        if (EXISTS "${debug_src_dir}/llkdu.dll") -            set(debug_llkdu_src "${debug_src_dir}/llkdu.dll") -            set(debug_llkdu_dst "${SHARED_LIB_STAGING_DIR_DEBUG}/llkdu.dll") -        endif (EXISTS "${debug_src_dir}/llkdu.dll") - -        if (EXISTS "${release_src_dir}/llkdu.dll") -            set(release_llkdu_src "${release_src_dir}/llkdu.dll") -            set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELEASE}/llkdu.dll") -            set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}/llkdu.dll") -        endif (EXISTS "${release_src_dir}/llkdu.dll") -    endif (NOT EXISTS ${internal_llkdu_path}) -  #*******************************  # Copy MS C runtime dlls, required for packaging.  # *TODO - Adapt this to support VC9  if (MSVC80)      FIND_PATH(debug_msvc8_redist_path msvcr80d.dll          PATHS +        ${MSVC_DEBUG_REDIST_PATH}           [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT          NO_DEFAULT_PATH          NO_DEFAULT_PATH @@ -106,6 +96,7 @@ if (MSVC80)      FIND_PATH(release_msvc8_redist_path msvcr80.dll          PATHS +        ${MSVC_REDIST_PATH}           [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT          NO_DEFAULT_PATH          NO_DEFAULT_PATH @@ -135,6 +126,64 @@ if (MSVC80)          set(third_party_targets ${third_party_targets} ${out_targets})      endif (EXISTS ${release_msvc8_redist_path}) +elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010 +    FIND_PATH(debug_msvc10_redist_path msvcr100d.dll +        PATHS +        ${MSVC_DEBUG_REDIST_PATH} +         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC100.DebugCRT +        [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64 +        [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32 +        NO_DEFAULT_PATH +        ) + +    if(EXISTS ${debug_msvc10_redist_path}) +        set(debug_msvc10_files +            msvcr100d.dll +            msvcp100d.dll +            ) + +        copy_if_different( +            ${debug_msvc10_redist_path} +            "${SHARED_LIB_STAGING_DIR_DEBUG}" +            out_targets +            ${debug_msvc10_files} +            ) +        set(third_party_targets ${third_party_targets} ${out_targets}) + +    endif () + +    FIND_PATH(release_msvc10_redist_path msvcr100.dll +        PATHS +        ${MSVC_REDIST_PATH} +         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC100.CRT +        [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64 +        [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32 +        NO_DEFAULT_PATH +        ) + +    if(EXISTS ${release_msvc10_redist_path}) +        set(release_msvc10_files +            msvcr100.dll +            msvcp100.dll +            ) + +        copy_if_different( +            ${release_msvc10_redist_path} +            "${SHARED_LIB_STAGING_DIR_RELEASE}" +            out_targets +            ${release_msvc10_files} +            ) +        set(third_party_targets ${third_party_targets} ${out_targets}) + +        copy_if_different( +            ${release_msvc10_redist_path} +            "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}" +            out_targets +            ${release_msvc10_files} +            ) +        set(third_party_targets ${third_party_targets} ${out_targets}) +           +    endif ()  endif (MSVC80)  elseif(DARWIN) @@ -142,7 +191,7 @@ elseif(DARWIN)      set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO   "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Resources")      set(SHARED_LIB_STAGING_DIR_RELEASE          "${SHARED_LIB_STAGING_DIR}/Release/Resources") -    set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/universal-darwin") +    set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")      set(vivox_files          SLVoice          libsndfile.dylib @@ -151,44 +200,28 @@ elseif(DARWIN)          libvivoxplatform.dylib          libvivoxsdk.dylib         ) -    # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables -    # or ARCH_PREBUILT_DIRS -    set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_debug") +    set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")      set(debug_files         ) -    # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables -    # or ARCH_PREBUILT_DIRS -    set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release") +    set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")      set(release_files -        libapr-1.0.3.7.dylib +        libapr-1.0.dylib          libapr-1.dylib -        libaprutil-1.0.3.8.dylib +        libaprutil-1.0.dylib          libaprutil-1.dylib -        libexpat.0.5.0.dylib +        libexpat.1.5.2.dylib          libexpat.dylib -        libllqtwebkit.dylib +        libGLOD.dylib +    libllqtwebkit.dylib +    libminizip.a          libndofdev.dylib          libexception_handler.dylib +    libcollada14dom.dylib         )      # fmod is statically linked on darwin      set(fmod_files "") -    #******************************* -    # LLKDU -    set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") -    if(NOT EXISTS ${internal_llkdu_path}) -        if (EXISTS "${debug_src_dir}/libllkdu.dylib") -            set(debug_llkdu_src "${debug_src_dir}/libllkdu.dylib") -            set(debug_llkdu_dst "${SHARED_LIB_STAGING_DIR_DEBUG}/libllkdu.dylib") -        endif (EXISTS "${debug_src_dir}/libllkdu.dylib") - -        if (EXISTS "${release_src_dir}/libllkdu.dylib") -            set(release_llkdu_src "${release_src_dir}/libllkdu.dylib") -            set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELEASE}/libllkdu.dylib") -            set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}/libllkdu.dylib") -        endif (EXISTS "${release_src_dir}/libllkdu.dylib") -    endif (NOT EXISTS ${internal_llkdu_path})  elseif(LINUX)      # linux is weird, multiple side by side configurations aren't supported      # and we don't seem to have any debug shared libs built yet anyways... @@ -196,7 +229,7 @@ elseif(LINUX)      set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO   "${SHARED_LIB_STAGING_DIR}")      set(SHARED_LIB_STAGING_DIR_RELEASE          "${SHARED_LIB_STAGING_DIR}") -    set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") +    set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")      set(vivox_files          libsndfile.so.1          libortp.so @@ -207,56 +240,45 @@ elseif(LINUX)         )      # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables      # or ARCH_PREBUILT_DIRS -    set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_debug") +    set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")      set(debug_files         )      # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables      # or ARCH_PREBUILT_DIRS -    set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_release_client") +    set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")      # *FIX - figure out what to do with duplicate libalut.so here -brad      set(release_files          libapr-1.so.0          libaprutil-1.so.0          libatk-1.0.so          libbreakpad_client.so.0 -        libcrypto.so.0.9.7 -        libdb-4.2.so +        libcollada14dom.so +        libcrypto.so.1.0.0 +        libdb-5.1.so          libexpat.so          libexpat.so.1 +    libglod.so          libgmock_main.so          libgmock.so.0          libgmodule-2.0.so          libgobject-2.0.so          libgtest_main.so          libgtest.so.0 +    libminizip.so          libopenal.so          libopenjpeg.so          libssl.so -        libstacktrace.so -        libtcmalloc.so -        libuuid.so.1 -        libssl.so.0.9.7 +        libtcmalloc_minimal.so +        libuuid.so.16 +        libuuid.so.16.0.22 +        libssl.so.1.0.0 +        libfontconfig.so.1.4.4         )      if (FMOD)        set(release_files ${release_files} "libfmod-3.75.so")      endif (FMOD) -    #******************************* -    # LLKDU -    set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") -    if(NOT EXISTS ${internal_llkdu_path}) -        if (EXISTS "${debug_src_dir}/libllkdu.so") -            set(debug_llkdu_src "${debug_src_dir}/libllkdu.so") -            set(debug_llkdu_dst "${SHARED_LIB_STAGING_DIR_DEBUG}/libllkdu.so") -        endif (EXISTS "${debug_src_dir}/libllkdu.so") - -        if (EXISTS "${release_src_dir}/libllkdu.so") -            set(release_llkdu_src "${release_src_dir}/libllkdu.so") -            set(release_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELEASE}/libllkdu.so") -            set(relwithdebinfo_llkdu_dst "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}/libllkdu.so") -        endif (EXISTS "${release_src_dir}/libllkdu.so") -    endif(NOT EXISTS ${internal_llkdu_path})  else(WINDOWS)      message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...")      set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux") @@ -334,40 +356,29 @@ copy_if_different(      )  set(third_party_targets ${third_party_targets} ${out_targets}) -#******************************* -# LLKDU -set(internal_llkdu_path "${CMAKE_SOURCE_DIR}/llkdu") -if(NOT EXISTS ${internal_llkdu_path}) -    if (EXISTS "${debug_llkdu_src}") -        ADD_CUSTOM_COMMAND( -            OUTPUT  ${debug_llkdu_dst} -            COMMAND ${CMAKE_COMMAND} -E copy_if_different ${debug_llkdu_src} ${debug_llkdu_dst} -            DEPENDS ${debug_llkdu_src} -            COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_DEBUG}" -            ) -        set(third_party_targets ${third_party_targets} $} ${debug_llkdu_dst}) -    endif (EXISTS "${debug_llkdu_src}") - -    if (EXISTS "${release_llkdu_src}") -        ADD_CUSTOM_COMMAND( -            OUTPUT  ${release_llkdu_dst} -            COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${release_llkdu_dst} -            DEPENDS ${release_llkdu_src} -            COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_RELEASE}" -            ) -        set(third_party_targets ${third_party_targets} ${release_llkdu_dst}) - -        ADD_CUSTOM_COMMAND( -            OUTPUT  ${relwithdebinfo_llkdu_dst} -            COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${relwithdebinfo_llkdu_dst} -            DEPENDS ${release_llkdu_src} -            COMMENT "Copying llkdu.dll ${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}" -            ) -        set(third_party_targets ${third_party_targets} ${relwithdebinfo_llkdu_dst}) -    endif (EXISTS "${release_llkdu_src}") - -endif (NOT EXISTS ${internal_llkdu_path}) - +if (FMOD_SDK_DIR) +    copy_if_different( +        ${FMOD_SDK_DIR}  +        "${CMAKE_CURRENT_BINARY_DIR}/Debug" +        out_targets  +        ${fmod_files} +        ) +    set(all_targets ${all_targets} ${out_targets}) +    copy_if_different( +        ${FMOD_SDK_DIR}  +        "${CMAKE_CURRENT_BINARY_DIR}/Release" +        out_targets  +        ${fmod_files} +        ) +    set(all_targets ${all_targets} ${out_targets}) +    copy_if_different( +        ${FMOD_SDK_DIR}  +        "${CMAKE_CURRENT_BINARY_DIR}/RelWithDbgInfo" +        out_targets  +        ${fmod_files} +        ) +    set(all_targets ${all_targets} ${out_targets}) +endif (FMOD_SDK_DIR)  if(NOT STANDALONE)    add_custom_target( diff --git a/indra/cmake/DBusGlib.cmake b/indra/cmake/DBusGlib.cmake index cfc4ccd404..83c08d3350 100644 --- a/indra/cmake/DBusGlib.cmake +++ b/indra/cmake/DBusGlib.cmake @@ -10,7 +10,7 @@ elseif (LINUX)    use_prebuilt_binary(dbusglib)    set(DBUSGLIB_FOUND ON FORCE BOOL)    set(DBUSGLIB_INCLUDE_DIRS -      ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0 +      ${LIBS_PREBUILT_DIR}/include/dbus        )    # We don't need to explicitly link against dbus-glib itself, because    # the viewer probes for the system's copy at runtime. diff --git a/indra/cmake/DirectX.cmake b/indra/cmake/DirectX.cmake index 29724ee2fc..b2a18805d4 100644 --- a/indra/cmake/DirectX.cmake +++ b/indra/cmake/DirectX.cmake @@ -3,6 +3,7 @@  if (VIEWER AND WINDOWS)    find_path(DIRECTX_INCLUDE_DIR dxdiag.h              "$ENV{DXSDK_DIR}/Include" +            "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2009)/Include"              "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (March 2009)/Include"              "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2008)/Include"              "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2008)/Include" @@ -24,6 +25,7 @@ if (VIEWER AND WINDOWS)    find_path(DIRECTX_LIBRARY_DIR dxguid.lib              "$ENV{DXSDK_DIR}/Lib/x86" +            "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2009)/Lib/x86"              "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (March 2009)/Lib/x86"              "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2008)/Lib/x86"              "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2008)/Lib/x86" diff --git a/indra/cmake/ELFIO.cmake b/indra/cmake/ELFIO.cmake deleted file mode 100644 index e51993b0f7..0000000000 --- a/indra/cmake/ELFIO.cmake +++ /dev/null @@ -1,19 +0,0 @@ -# -*- cmake -*- -include(Prebuilt) - -set(ELFIO_FIND_QUIETLY ON) - -if (STANDALONE) -  include(FindELFIO) -elseif (LINUX) -  use_prebuilt_binary(elfio) -  set(ELFIO_LIBRARIES ELFIO) -  set(ELFIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) -  set(ELFIO_FOUND "YES") -endif (STANDALONE) - -if (ELFIO_FOUND) -  add_definitions(-DLL_ELFBIN=1) -else (ELFIO_FOUND) -  set(ELFIO_INCLUDE_DIR "") -endif (ELFIO_FOUND) diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake index dcf44cd642..3586c1160a 100644 --- a/indra/cmake/FMOD.cmake +++ b/indra/cmake/FMOD.cmake @@ -1,26 +1,39 @@  # -*- cmake -*- -set(FMOD ON CACHE BOOL "Use FMOD sound library.") +# FMOD can be set when launching the make using the argument -DFMOD:BOOL=ON +# When building using proprietary binaries though (i.e. having access to LL private servers), +# we always build with FMOD. +# Open source devs should use the -DFMOD:BOOL=ON then if they want to build with FMOD, whether +# they are using STANDALONE or not. +if (INSTALL_PROPRIETARY) +  set(FMOD ON CACHE BOOL "Use FMOD sound library.") +endif (INSTALL_PROPRIETARY)  if (FMOD)    if (STANDALONE) +    # In that case, we use the version of the library installed on the system      set(FMOD_FIND_REQUIRED ON)      include(FindFMOD)    else (STANDALONE) -    if (INSTALL_PROPRIETARY) +    if (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) +      # If the path have been specified in the arguments, use that +      set(FMOD_LIBRARIES ${FMOD_LIBRARY}) +      MESSAGE(STATUS "Using FMOD path: ${FMOD_LIBRARIES}, ${FMOD_INCLUDE_DIR}") +    else (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) +      # If not, we're going to try to get the package listed in autobuild.xml +      # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL)  +      # as accessing the private LL location will fail if you don't have the credential        include(Prebuilt) -      use_prebuilt_binary(fmod) -    endif (INSTALL_PROPRIETARY) -     -    if (WINDOWS) -      set(FMOD_LIBRARY fmod) -    elseif (DARWIN) -      set(FMOD_LIBRARY fmod) -    elseif (LINUX) -      set(FMOD_LIBRARY fmod-3.75) -    endif (WINDOWS) - -    SET(FMOD_LIBRARIES ${FMOD_LIBRARY}) -    set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) +      use_prebuilt_binary(fmod)     +      if (WINDOWS) +        set(FMOD_LIBRARY fmod) +      elseif (DARWIN) +        set(FMOD_LIBRARY fmod) +      elseif (LINUX) +        set(FMOD_LIBRARY fmod-3.75) +      endif (WINDOWS) +      set(FMOD_LIBRARIES ${FMOD_LIBRARY}) +      set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) +    endif (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)    endif (STANDALONE)  endif (FMOD) diff --git a/indra/cmake/FindAutobuild.cmake b/indra/cmake/FindAutobuild.cmake new file mode 100644 index 0000000000..4b5fd484ae --- /dev/null +++ b/indra/cmake/FindAutobuild.cmake @@ -0,0 +1,41 @@ +# -*- cmake -*- +# +# Find the autobuild tool +# +# Output variables: +# +#   AUTOBUILD_EXECUTABLE - path to autobuild or pautobuild executable + +# *TODO - if cmake was executed by autobuild, autobuild will have set the AUTOBUILD env var +# update this to check for that case + +IF (NOT AUTOBUILD_EXECUTABLE) +    IF(WIN32) +      SET(AUTOBUILD_EXE_NAMES autobuild.cmd autobuild.exe) +    ELSE(WIN32) +      SET(AUTOBUILD_EXE_NAMES autobuild) +    ENDIF(WIN32) + +    SET(AUTOBUILD_EXECUTABLE) +    FIND_PROGRAM( +      AUTOBUILD_EXECUTABLE  +      NAMES ${AUTOBUILD_EXE_NAMES} +      PATHS  +    ENV PATH +    ${CMAKE_SOURCE_DIR}/..  +    ${CMAKE_SOURCE_DIR}/../.. +    ${CMAKE_SOURCE_DIR}/../../.. +      PATH_SUFFIXES "/autobuild/bin/" +    ) + +    IF (AUTOBUILD_EXECUTABLE) +      GET_FILENAME_COMPONENT(_autobuild_name ${AUTOBUILD_EXECUTABLE} NAME_WE) +      MESSAGE(STATUS "Using autobuild at: ${AUTOBUILD_EXECUTABLE}") +    ELSE (AUTOBUILD_EXECUTABLE) +      IF (AUTOBUILD_FIND_REQUIRED) +    MESSAGE(FATAL_ERROR "Could not find autobuild executable") +      ENDIF (AUTOBUILD_FIND_REQUIRED) +    ENDIF (AUTOBUILD_EXECUTABLE) + +    MARK_AS_ADVANCED(AUTOBUILD_EXECUTABLE) +ENDIF (NOT AUTOBUILD_EXECUTABLE) diff --git a/indra/cmake/FindFMOD.cmake b/indra/cmake/FindFMOD.cmake index e60b386027..1ebbc8c96e 100644 --- a/indra/cmake/FindFMOD.cmake +++ b/indra/cmake/FindFMOD.cmake @@ -11,7 +11,7 @@  FIND_PATH(FMOD_INCLUDE_DIR fmod.h PATH_SUFFIXES fmod) -SET(FMOD_NAMES ${FMOD_NAMES} fmod fmodvc fmod-3.75) +SET(FMOD_NAMES ${FMOD_NAMES} fmod fmodvc fmodex fmod-3.75)  FIND_LIBRARY(FMOD_LIBRARY    NAMES ${FMOD_NAMES}    PATH_SUFFIXES fmod diff --git a/indra/cmake/FindGLH.cmake b/indra/cmake/FindGLH.cmake new file mode 100644 index 0000000000..3d16adaf03 --- /dev/null +++ b/indra/cmake/FindGLH.cmake @@ -0,0 +1,30 @@ +# -*- cmake -*- + +# - Find GLH +# Find the Graphic Library Helper includes. +# This module defines +#  GLH_INCLUDE_DIR, where to find glh/glh_linear.h. +#  GLH_FOUND, If false, do not try to use GLH. + +find_path(GLH_INCLUDE_DIR glh/glh_linear.h +    NO_SYSTEM_ENVIRONMENT_PATH +    ) + +if (GLH_INCLUDE_DIR) +  set(GLH_FOUND "YES") +else (GLH_INCLUDE_DIR) +  set(GLH_FOUND "NO") +endif (GLH_INCLUDE_DIR) + +if (GLH_FOUND) +  if (NOT GLH_FIND_QUIETLY) +    message(STATUS "Found GLH: ${GLH_INCLUDE_DIR}") +    set(GLH_FIND_QUIETLY TRUE) # Only alert us the first time +  endif (NOT GLH_FIND_QUIETLY) +else (GLH_FOUND) +  if (GLH_FIND_REQUIRED) +    message(FATAL_ERROR "Could not find GLH") +  endif (GLH_FIND_REQUIRED) +endif (GLH_FOUND) + +mark_as_advanced(GLH_INCLUDE_DIR) diff --git a/indra/cmake/FindJsonCpp.cmake b/indra/cmake/FindJsonCpp.cmake index 9d16f2aaab..0b056ada58 100644 --- a/indra/cmake/FindJsonCpp.cmake +++ b/indra/cmake/FindJsonCpp.cmake @@ -21,7 +21,12 @@ EXEC_PROGRAM(${CMAKE_CXX_COMPILER}              OUTPUT_STRIP_TRAILING_WHITESPACE              ) +# Try to find a library that was compiled with the same compiler version as we currently use.  SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson_linux-gcc-${_gcc_COMPILER_VERSION}_libmt.so) +IF (STANDALONE) +    # On standalone, assume that the system installed library was compiled with the used compiler. +    SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson.so) +ENDIF (STANDALONE)  FIND_LIBRARY(JSONCPP_LIBRARY    NAMES ${JSONCPP_NAMES}    PATHS /usr/lib /usr/local/lib diff --git a/indra/cmake/FindLLQtWebkit.cmake b/indra/cmake/FindLLQtWebkit.cmake new file mode 100644 index 0000000000..2f666d3bf0 --- /dev/null +++ b/indra/cmake/FindLLQtWebkit.cmake @@ -0,0 +1,62 @@ +# -*- cmake -*- + +# - Find llqtwebkit +# Find the llqtwebkit includes and library +# This module defines +#  LLQTWEBKIT_INCLUDE_DIR, where to find llqtwebkit.h, etc. +#  LLQTWEBKIT_LIBRARY, the llqtwebkit library with full path. +#  LLQTWEBKIT_FOUND, If false, do not try to use llqtwebkit. +# also defined, but not for general use are +#  LLQTWEBKIT_LIBRARIES, the libraries needed to use llqtwebkit. +#  LLQTWEBKIT_LIBRARY_DIRS, where to find the llqtwebkit library. +#  LLQTWEBKIT_DEFINITIONS - You should add_definitions(${LLQTWEBKIT_DEFINITIONS}) +#      before compiling code that includes llqtwebkit library files. + +# Try to use pkg-config first. +# This allows to have two different libllqtwebkit packages installed: +# one for viewer 2.x and one for viewer 1.x. +include(FindPkgConfig) +if (PKG_CONFIG_FOUND) +    if (LLQtWebkit_FIND_REQUIRED AND LLQtWebkit_FIND_VERSION) +        set(_PACKAGE_ARGS libllqtwebkit>=${LLQtWebkit_FIND_VERSION} REQUIRED) +    else (LLQtWebkit_FIND_REQUIRED AND LLQtWebkit_FIND_VERSION) +        set(_PACKAGE_ARGS libllqtwebkit) +    endif (LLQtWebkit_FIND_REQUIRED AND LLQtWebkit_FIND_VERSION) +    if (NOT "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_LESS "2.8.2") +      # As virtually nobody will have a pkg-config file for this, do this check always quiet. +      # Unfortunately cmake 2.8.2 or higher is required for pkg_check_modules to have a 'QUIET'. +      set(_PACKAGE_ARGS ${_PACKAGE_ARGS} QUIET) +    endif () +    pkg_check_modules(LLQTWEBKIT ${_PACKAGE_ARGS}) +endif (PKG_CONFIG_FOUND) +set(LLQTWEBKIT_DEFINITIONS ${LLQTWEBKIT_CFLAGS_OTHER}) + +find_path(LLQTWEBKIT_INCLUDE_DIR llqtwebkit.h NO_SYSTEM_ENVIRONMENT_PATH HINTS ${LLQTWEBKIT_INCLUDE_DIRS}) + +find_library(LLQTWEBKIT_LIBRARY NAMES llqtwebkit NO_SYSTEM_ENVIRONMENT_PATH HINTS ${LLQTWEBKIT_LIBRARY_DIRS}) + +if (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND)   # If pkg-config couldn't find it, pretend we don't have pkg-config. +   set(LLQTWEBKIT_LIBRARIES llqtwebkit) +   get_filename_component(LLQTWEBKIT_LIBRARY_DIRS ${LLQTWEBKIT_LIBRARY} PATH) +endif (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) + +# Handle the QUIETLY and REQUIRED arguments and set LLQTWEBKIT_FOUND +# to TRUE if all listed variables are TRUE. +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( +  LLQTWEBKIT +  DEFAULT_MSG +  LLQTWEBKIT_LIBRARY +  LLQTWEBKIT_INCLUDE_DIR +  LLQTWEBKIT_LIBRARIES +  LLQTWEBKIT_LIBRARY_DIRS +  ) + +mark_as_advanced( +  LLQTWEBKIT_LIBRARY +  LLQTWEBKIT_INCLUDE_DIR +  LLQTWEBKIT_LIBRARIES +  LLQTWEBKIT_LIBRARY_DIRS +  LLQTWEBKIT_DEFINITIONS +  ) + diff --git a/indra/cmake/FindNDOF.cmake b/indra/cmake/FindNDOF.cmake new file mode 100644 index 0000000000..6dcf590a53 --- /dev/null +++ b/indra/cmake/FindNDOF.cmake @@ -0,0 +1,39 @@ +# -*- cmake -*- + +# - Find NDOF +# Find the NDOF includes and library +# This module defines +#  NDOF_INCLUDE_DIR, where to find ndofdev_external.h, etc. +#  NDOF_LIBRARY, the library needed to use NDOF. +#  NDOF_FOUND, If false, do not try to use NDOF. + +find_path(NDOF_INCLUDE_DIR ndofdev_external.h +  PATH_SUFFIXES ndofdev +  ) + +set(NDOF_NAMES ${NDOF_NAMES} ndofdev libndofdev) +find_library(NDOF_LIBRARY +  NAMES ${NDOF_NAMES} +  ) + +if (NDOF_LIBRARY AND NDOF_INCLUDE_DIR) +  set(NDOF_FOUND "YES") +else (NDOF_LIBRARY AND NDOF_INCLUDE_DIR) +  set(NDOF_FOUND "NO") +endif (NDOF_LIBRARY AND NDOF_INCLUDE_DIR) + + +if (NDOF_FOUND) +  if (NOT NDOF_FIND_QUIETLY) +    message(STATUS "Found NDOF: Library in '${NDOF_LIBRARY}' and header in '${NDOF_INCLUDE_DIR}' ") +  endif (NOT NDOF_FIND_QUIETLY) +else (NDOF_FOUND) +  if (NDOF_FIND_REQUIRED) +    message(FATAL_ERROR " * * *\nCould not find NDOF library!\nIf you don't need Space Navigator Joystick support you can skip this test by configuring with -DNDOF:BOOL=OFF\n * * *") +  endif (NDOF_FIND_REQUIRED) +endif (NDOF_FOUND) + +mark_as_advanced( +  NDOF_LIBRARY +  NDOF_INCLUDE_DIR +  ) diff --git a/indra/cmake/FindTut.cmake b/indra/cmake/FindTut.cmake deleted file mode 100644 index b5d58f6396..0000000000 --- a/indra/cmake/FindTut.cmake +++ /dev/null @@ -1,31 +0,0 @@ -# -*- cmake -*- - -# - Find Tut -# Find the Tut unit test framework includes and library -# This module defines -#  TUT_INCLUDE_DIR, where to find tut.h, etc. -#  TUT_FOUND, If false, do not try to use Tut. - -find_path(TUT_INCLUDE_DIR tut.h -    /usr/local/include/ -    /usr/include -    ) - -if (TUT_INCLUDE_DIR) -  set(TUT_FOUND "YES") -else (TUT_INCLUDE_DIR) -  set(TUT_FOUND "NO") -endif (TUT_INCLUDE_DIR) - -if (TUT_FOUND) -  if (NOT TUT_FIND_QUIETLY) -    message(STATUS "Found Tut: ${TUT_INCLUDE_DIR}") -    set(TUT_FIND_QUIETLY TRUE) # Only alert us the first time -  endif (NOT TUT_FIND_QUIETLY) -else (TUT_FOUND) -  if (TUT_FIND_REQUIRED) -    message(FATAL_ERROR "Could not find Tut") -  endif (TUT_FIND_REQUIRED) -endif (TUT_FOUND) - -mark_as_advanced(TUT_INCLUDE_DIR) diff --git a/indra/cmake/FindZLIB.cmake b/indra/cmake/FindZLIB.cmake new file mode 100644 index 0000000000..03a7db9d6f --- /dev/null +++ b/indra/cmake/FindZLIB.cmake @@ -0,0 +1,46 @@ +# -*- cmake -*- + +# - Find zlib +# Find the ZLIB includes and library +# This module defines +#  ZLIB_INCLUDE_DIRS, where to find zlib.h, etc. +#  ZLIB_LIBRARIES, the libraries needed to use zlib. +#  ZLIB_FOUND, If false, do not try to use zlib. +# +# This FindZLIB is about 43 times as fast the one provided with cmake (2.8.x), +# because it doesn't look up the version of zlib, resulting in a dramatic +# speed up for configure (from 4 minutes 22 seconds to 6 seconds). +# +# Note: Since this file is only used for standalone, the windows +# specific parts were left out. + +FIND_PATH(ZLIB_INCLUDE_DIR zlib.h +  NO_SYSTEM_ENVIRONMENT_PATH +  ) + +FIND_LIBRARY(ZLIB_LIBRARY z) + +if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) +  SET(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) +  SET(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) +  SET(ZLIB_FOUND "YES") +else (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) +  SET(ZLIB_FOUND "NO") +endif (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) + +if (ZLIB_FOUND) +  if (NOT ZLIB_FIND_QUIETLY) +    message(STATUS "Found ZLIB: ${ZLIB_LIBRARIES}") +    SET(ZLIB_FIND_QUIETLY TRUE) +  endif (NOT ZLIB_FIND_QUIETLY) +else (ZLIB_FOUND) +  if (ZLIB_FIND_REQUIRED) +    message(FATAL_ERROR "Could not find ZLIB library") +  endif (ZLIB_FIND_REQUIRED) +endif (ZLIB_FOUND) + +mark_as_advanced( +  ZLIB_LIBRARY +  ZLIB_INCLUDE_DIR +  ) + diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake index 5f1aa26e89..43a9d282d0 100644 --- a/indra/cmake/FreeType.cmake +++ b/indra/cmake/FreeType.cmake @@ -9,7 +9,7 @@ else (STANDALONE)    use_prebuilt_binary(freetype)    if (LINUX)      set(FREETYPE_INCLUDE_DIRS -        ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) +        ${LIBS_PREBUILT_DIR}/include)    else (LINUX)      set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)    endif (LINUX) diff --git a/indra/cmake/GLH.cmake b/indra/cmake/GLH.cmake new file mode 100644 index 0000000000..911dbe4017 --- /dev/null +++ b/indra/cmake/GLH.cmake @@ -0,0 +1,11 @@ +# -*- cmake -*- +include(Prebuilt) + +set(GLH_FIND_REQUIRED TRUE) +set(GLH_FIND_QUIETLY TRUE) + +if (STANDALONE) +  include(FindGLH) +else (STANDALONE) +  use_prebuilt_binary(glh_linear) +endif (STANDALONE) diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake new file mode 100644 index 0000000000..77221d55ed --- /dev/null +++ b/indra/cmake/GLOD.cmake @@ -0,0 +1,9 @@ +# -*- cmake -*- +include(Prebuilt) + +if (NOT STANDALONE) +  use_prebuilt_binary(GLOD) +endif (NOT STANDALONE) + +set(GLOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) +set(GLOD_LIBRARIES glod) diff --git a/indra/cmake/GStreamer010Plugin.cmake b/indra/cmake/GStreamer010Plugin.cmake index 0ca432da18..d2d0699bcd 100644 --- a/indra/cmake/GStreamer010Plugin.cmake +++ b/indra/cmake/GStreamer010Plugin.cmake @@ -13,9 +13,9 @@ elseif (LINUX)    set(GSTREAMER010_FOUND ON FORCE BOOL)    set(GSTREAMER010_PLUGINS_BASE_FOUND ON FORCE BOOL)    set(GSTREAMER010_INCLUDE_DIRS -      ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/gstreamer-0.10 -      ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0 -      ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/libxml2 +      ${LIBS_PREBUILT_DIR}/include/gstreamer-0.10 +      ${LIBS_PREBUILT_DIR}/include/glib-2.0 +      ${LIBS_PREBUILT_DIR}/include/libxml2        )    # We don't need to explicitly link against gstreamer itself, because    # LLMediaImplGStreamer probes for the system's copy at runtime. diff --git a/indra/cmake/GetPrerequisites_2_8.cmake b/indra/cmake/GetPrerequisites_2_8.cmake index 5a24842c89..05ec1539ba 100644 --- a/indra/cmake/GetPrerequisites_2_8.cmake +++ b/indra/cmake/GetPrerequisites_2_8.cmake @@ -1,786 +1,786 @@ -# GetPrerequisites.cmake
 -#
 -# This script provides functions to list the .dll, .dylib or .so files that an
 -# executable or shared library file depends on. (Its prerequisites.)
 -#
 -# It uses various tools to obtain the list of required shared library files:
 -#   dumpbin (Windows)
 -#   ldd (Linux/Unix)
 -#   otool (Mac OSX)
 -#
 -# The following functions are provided by this script:
 -#   gp_append_unique
 -#   is_file_executable
 -#   gp_item_default_embedded_path
 -#     (projects can override with gp_item_default_embedded_path_override)
 -#   gp_resolve_item
 -#     (projects can override with gp_resolve_item_override)
 -#   gp_resolved_file_type
 -#   gp_file_type
 -#   get_prerequisites
 -#   list_prerequisites
 -#   list_prerequisites_by_glob
 -#
 -# Requires CMake 2.6 or greater because it uses function, break, return and
 -# PARENT_SCOPE.
 -
 -#=============================================================================
 -# Copyright 2008-2009 Kitware, Inc.
 -#
 -# 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.
 -#=============================================================================
 -# (To distributed this file outside of CMake, substitute the full
 -#  License text for the above reference.)
 -
 -# gp_append_unique list_var value
 -#
 -# Append value to the list variable ${list_var} only if the value is not
 -# already in the list.
 -#
 -function(gp_append_unique list_var value)
 -  set(contains 0)
 -
 -  foreach(item ${${list_var}})
 -    if("${item}" STREQUAL "${value}")
 -      set(contains 1)
 -      break()
 -    endif("${item}" STREQUAL "${value}")
 -  endforeach(item)
 -
 -  if(NOT contains)
 -    set(${list_var} ${${list_var}} "${value}" PARENT_SCOPE)
 -  endif(NOT contains)
 -endfunction(gp_append_unique)
 -
 -
 -# is_file_executable file result_var
 -#
 -# Return 1 in ${result_var} if ${file} is a binary executable.
 -#
 -# Return 0 in ${result_var} otherwise.
 -#
 -function(is_file_executable file result_var)
 -  #
 -  # A file is not executable until proven otherwise:
 -  #
 -  set(${result_var} 0 PARENT_SCOPE)
 -
 -  get_filename_component(file_full "${file}" ABSOLUTE)
 -  string(TOLOWER "${file_full}" file_full_lower)
 -
 -  # If file name ends in .exe on Windows, *assume* executable:
 -  #
 -  if(WIN32)
 -    if("${file_full_lower}" MATCHES "\\.exe$")
 -      set(${result_var} 1 PARENT_SCOPE)
 -      return()
 -    endif("${file_full_lower}" MATCHES "\\.exe$")
 -
 -    # A clause could be added here that uses output or return value of dumpbin
 -    # to determine ${result_var}. In 99%+? practical cases, the exe name
 -    # match will be sufficient...
 -    #
 -  endif(WIN32)
 -
 -  # Use the information returned from the Unix shell command "file" to
 -  # determine if ${file_full} should be considered an executable file...
 -  #
 -  # If the file command's output contains "executable" and does *not* contain
 -  # "text" then it is likely an executable suitable for prerequisite analysis
 -  # via the get_prerequisites macro.
 -  #
 -  if(UNIX)
 -    if(NOT file_cmd)
 -      find_program(file_cmd "file")
 -    endif(NOT file_cmd)
 -
 -    if(file_cmd)
 -      execute_process(COMMAND "${file_cmd}" "${file_full}"
 -        OUTPUT_VARIABLE file_ov
 -        OUTPUT_STRIP_TRAILING_WHITESPACE
 -        )
 -
 -      # Replace the name of the file in the output with a placeholder token
 -      # (the string " _file_full_ ") so that just in case the path name of
 -      # the file contains the word "text" or "executable" we are not fooled
 -      # into thinking "the wrong thing" because the file name matches the
 -      # other 'file' command output we are looking for...
 -      #
 -      string(REPLACE "${file_full}" " _file_full_ " file_ov "${file_ov}")
 -      string(TOLOWER "${file_ov}" file_ov)
 -
 -      #message(STATUS "file_ov='${file_ov}'")
 -      if("${file_ov}" MATCHES "executable")
 -        #message(STATUS "executable!")
 -        if("${file_ov}" MATCHES "text")
 -          #message(STATUS "but text, so *not* a binary executable!")
 -        else("${file_ov}" MATCHES "text")
 -          set(${result_var} 1 PARENT_SCOPE)
 -          return()
 -        endif("${file_ov}" MATCHES "text")
 -      endif("${file_ov}" MATCHES "executable")
 -    else(file_cmd)
 -      message(STATUS "warning: No 'file' command, skipping execute_process...")
 -    endif(file_cmd)
 -  endif(UNIX)
 -endfunction(is_file_executable)
 -
 -
 -# gp_item_default_embedded_path item default_embedded_path_var
 -#
 -# Return the path that others should refer to the item by when the item
 -# is embedded inside a bundle.
 -#
 -# Override on a per-project basis by providing a project-specific
 -# gp_item_default_embedded_path_override function.
 -#
 -function(gp_item_default_embedded_path item default_embedded_path_var)
 -
 -  # On Windows and Linux, "embed" prerequisites in the same directory
 -  # as the executable by default:
 -  #
 -  set(path "@executable_path")
 -  set(overridden 0)
 -
 -  # On the Mac, relative to the executable depending on the type
 -  # of the thing we are embedding:
 -  #
 -  if(APPLE)
 -    #
 -    # The assumption here is that all executables in the bundle will be
 -    # in same-level-directories inside the bundle. The parent directory
 -    # of an executable inside the bundle should be MacOS or a sibling of
 -    # MacOS and all embedded paths returned from here will begin with
 -    # "@executable_path/../" and will work from all executables in all
 -    # such same-level-directories inside the bundle.
 -    #
 -
 -    # By default, embed things right next to the main bundle executable:
 -    #
 -    set(path "@executable_path/../../Contents/MacOS")
 -
 -    # Embed .dylibs right next to the main bundle executable:
 -    #
 -    if(item MATCHES "\\.dylib$")
 -      set(path "@executable_path/../MacOS")
 -      set(overridden 1)
 -    endif(item MATCHES "\\.dylib$")
 -
 -    # Embed frameworks in the embedded "Frameworks" directory (sibling of MacOS):
 -    #
 -    if(NOT overridden)
 -      if(item MATCHES "[^/]+\\.framework/")
 -        set(path "@executable_path/../Frameworks")
 -        set(overridden 1)
 -      endif(item MATCHES "[^/]+\\.framework/")
 -    endif(NOT overridden)
 -  endif()
 -
 -  # Provide a hook so that projects can override the default embedded location
 -  # of any given library by whatever logic they choose:
 -  #
 -  if(COMMAND gp_item_default_embedded_path_override)
 -    gp_item_default_embedded_path_override("${item}" path)
 -  endif(COMMAND gp_item_default_embedded_path_override)
 -
 -  set(${default_embedded_path_var} "${path}" PARENT_SCOPE)
 -endfunction(gp_item_default_embedded_path)
 -
 -
 -# gp_resolve_item context item exepath dirs resolved_item_var
 -#
 -# Resolve an item into an existing full path file.
 -#
 -# Override on a per-project basis by providing a project-specific
 -# gp_resolve_item_override function.
 -#
 -function(gp_resolve_item context item exepath dirs resolved_item_var)
 -  set(resolved 0)
 -  set(resolved_item "${item}")
 -
 -  # Is it already resolved?
 -  #
 -  if(EXISTS "${resolved_item}")
 -    set(resolved 1)
 -  endif(EXISTS "${resolved_item}")
 -
 -  if(NOT resolved)
 -    if(item MATCHES "@executable_path")
 -      #
 -      # @executable_path references are assumed relative to exepath
 -      #
 -      string(REPLACE "@executable_path" "${exepath}" ri "${item}")
 -      get_filename_component(ri "${ri}" ABSOLUTE)
 -
 -      if(EXISTS "${ri}")
 -        #message(STATUS "info: embedded item exists (${ri})")
 -        set(resolved 1)
 -        set(resolved_item "${ri}")
 -      else(EXISTS "${ri}")
 -        message(STATUS "warning: embedded item does not exist '${ri}'")
 -      endif(EXISTS "${ri}")
 -    endif(item MATCHES "@executable_path")
 -  endif(NOT resolved)
 -
 -  if(NOT resolved)
 -    if(item MATCHES "@loader_path")
 -      #
 -      # @loader_path references are assumed relative to the
 -      # PATH of the given "context" (presumably another library)
 -      #
 -      get_filename_component(contextpath "${context}" PATH)
 -      string(REPLACE "@loader_path" "${contextpath}" ri "${item}")
 -      get_filename_component(ri "${ri}" ABSOLUTE)
 -
 -      if(EXISTS "${ri}")
 -        #message(STATUS "info: embedded item exists (${ri})")
 -        set(resolved 1)
 -        set(resolved_item "${ri}")
 -      else(EXISTS "${ri}")
 -        message(STATUS "warning: embedded item does not exist '${ri}'")
 -      endif(EXISTS "${ri}")
 -    endif(item MATCHES "@loader_path")
 -  endif(NOT resolved)
 -
 -  if(NOT resolved)
 -    set(ri "ri-NOTFOUND")
 -    find_file(ri "${item}" ${exepath} ${dirs} NO_DEFAULT_PATH)
 -    find_file(ri "${item}" ${exepath} ${dirs} /usr/lib)
 -    if(ri)
 -      #message(STATUS "info: 'find_file' in exepath/dirs (${ri})")
 -      set(resolved 1)
 -      set(resolved_item "${ri}")
 -      set(ri "ri-NOTFOUND")
 -    endif(ri)
 -  endif(NOT resolved)
 -
 -  if(NOT resolved)
 -    if(item MATCHES "[^/]+\\.framework/")
 -      set(fw "fw-NOTFOUND")
 -      find_file(fw "${item}"
 -        "~/Library/Frameworks"
 -        "/Library/Frameworks"
 -        "/System/Library/Frameworks"
 -      )
 -      if(fw)
 -        #message(STATUS "info: 'find_file' found framework (${fw})")
 -        set(resolved 1)
 -        set(resolved_item "${fw}")
 -        set(fw "fw-NOTFOUND")
 -      endif(fw)
 -    endif(item MATCHES "[^/]+\\.framework/")
 -  endif(NOT resolved)
 -
 -  # Using find_program on Windows will find dll files that are in the PATH.
 -  # (Converting simple file names into full path names if found.)
 -  #
 -  if(WIN32)
 -  if(NOT resolved)
 -    set(ri "ri-NOTFOUND")
 -    find_program(ri "${item}" PATHS "${exepath};${dirs}" NO_DEFAULT_PATH)
 -    find_program(ri "${item}" PATHS "${exepath};${dirs}")
 -    if(ri)
 -      #message(STATUS "info: 'find_program' in exepath/dirs (${ri})")
 -      set(resolved 1)
 -      set(resolved_item "${ri}")
 -      set(ri "ri-NOTFOUND")
 -    endif(ri)
 -  endif(NOT resolved)
 -  endif(WIN32)
 -
 -  # Provide a hook so that projects can override item resolution
 -  # by whatever logic they choose:
 -  #
 -  if(COMMAND gp_resolve_item_override)
 -    gp_resolve_item_override("${context}" "${item}" "${exepath}" "${dirs}" resolved_item resolved)
 -  endif(COMMAND gp_resolve_item_override)
 -
 -  if(NOT resolved)
 -    message(STATUS "
 -warning: cannot resolve item '${item}'
 -
 -  possible problems:
 -    need more directories?
 -    need to use InstallRequiredSystemLibraries?
 -    run in install tree instead of build tree?
 -")
 -#    message(STATUS "
 -#******************************************************************************
 -#warning: cannot resolve item '${item}'
 -#
 -#  possible problems:
 -#    need more directories?
 -#    need to use InstallRequiredSystemLibraries?
 -#    run in install tree instead of build tree?
 -#
 -#    context='${context}'
 -#    item='${item}'
 -#    exepath='${exepath}'
 -#    dirs='${dirs}'
 -#    resolved_item_var='${resolved_item_var}'
 -#******************************************************************************
 -#")
 -  endif(NOT resolved)
 -
 -  set(${resolved_item_var} "${resolved_item}" PARENT_SCOPE)
 -endfunction(gp_resolve_item)
 -
 -
 -# gp_resolved_file_type original_file file exepath dirs type_var
 -#
 -# Return the type of ${file} with respect to ${original_file}. String
 -# describing type of prerequisite is returned in variable named ${type_var}.
 -#
 -# Use ${exepath} and ${dirs} if necessary to resolve non-absolute ${file}
 -# values -- but only for non-embedded items.
 -#
 -# Possible types are:
 -#   system
 -#   local
 -#   embedded
 -#   other
 -#
 -function(gp_resolved_file_type original_file file exepath dirs type_var)
 -  #message(STATUS "**")
 -
 -  if(NOT IS_ABSOLUTE "${original_file}")
 -    message(STATUS "warning: gp_resolved_file_type expects absolute full path for first arg original_file")
 -  endif()
 -
 -  set(is_embedded 0)
 -  set(is_local 0)
 -  set(is_system 0)
 -
 -  set(resolved_file "${file}")
 -
 -  if("${file}" MATCHES "^@(executable|loader)_path")
 -    set(is_embedded 1)
 -  endif()
 -
 -  if(NOT is_embedded)
 -    if(NOT IS_ABSOLUTE "${file}")
 -      gp_resolve_item("${original_file}" "${file}" "${exepath}" "${dirs}" resolved_file)
 -    endif()
 -
 -    string(TOLOWER "${original_file}" original_lower)
 -    string(TOLOWER "${resolved_file}" lower)
 -
 -    if(UNIX)
 -      if(resolved_file MATCHES "^(/lib/|/lib32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/lib64/|/usr/X11R6/)")
 -        set(is_system 1)
 -      endif()
 -    endif()
 -
 -    if(APPLE)
 -      if(resolved_file MATCHES "^(/System/Library/|/usr/lib/)")
 -        set(is_system 1)
 -      endif()
 -    endif()
 -
 -    if(WIN32)
 -      string(TOLOWER "$ENV{SystemRoot}" sysroot)
 -      string(REGEX REPLACE "\\\\" "/" sysroot "${sysroot}")
 -
 -      string(TOLOWER "$ENV{windir}" windir)
 -      string(REGEX REPLACE "\\\\" "/" windir "${windir}")
 -
 -      if(lower MATCHES "^(${sysroot}/system|${windir}/system|${sysroot}/syswow|${windir}/syswow|(.*/)*msvc[^/]+dll)")
 -        set(is_system 1)
 -      endif()
 -    endif()
 -
 -    if(NOT is_system)
 -      get_filename_component(original_path "${original_lower}" PATH)
 -      get_filename_component(path "${lower}" PATH)
 -      if("${original_path}" STREQUAL "${path}")
 -        set(is_local 1)
 -      endif()
 -    endif()
 -  endif()
 -
 -  # Return type string based on computed booleans:
 -  #
 -  set(type "other")
 -
 -  if(is_system)
 -    set(type "system")
 -  elseif(is_embedded)
 -    set(type "embedded")
 -  elseif(is_local)
 -    set(type "local")
 -  endif()
 -
 -  #message(STATUS "gp_resolved_file_type: '${file}' '${resolved_file}'")
 -  #message(STATUS "                type: '${type}'")
 -
 -  if(NOT is_embedded)
 -    if(NOT IS_ABSOLUTE "${resolved_file}")
 -      if(lower MATCHES "^msvc[^/]+dll" AND is_system)
 -        message(STATUS "info: non-absolute msvc file '${file}' returning type '${type}'")
 -      else()
 -        message(STATUS "warning: gp_resolved_file_type non-absolute file '${file}' returning type '${type}' -- possibly incorrect")
 -      endif()
 -    endif()
 -  endif()
 -
 -  set(${type_var} "${type}" PARENT_SCOPE)
 -
 -  #message(STATUS "**")
 -endfunction()
 -
 -
 -# gp_file_type original_file file type_var
 -#
 -# Return the type of ${file} with respect to ${original_file}. String
 -# describing type of prerequisite is returned in variable named ${type_var}.
 -#
 -# Possible types are:
 -#   system
 -#   local
 -#   embedded
 -#   other
 -#
 -function(gp_file_type original_file file type_var)
 -  if(NOT IS_ABSOLUTE "${original_file}")
 -    message(STATUS "warning: gp_file_type expects absolute full path for first arg original_file")
 -  endif()
 -
 -  get_filename_component(exepath "${original_file}" PATH)
 -
 -  set(type "")
 -  gp_resolved_file_type("${original_file}" "${file}" "${exepath}" "" type)
 -
 -  set(${type_var} "${type}" PARENT_SCOPE)
 -endfunction(gp_file_type)
 -
 -
 -# get_prerequisites target prerequisites_var exclude_system recurse dirs
 -#
 -# Get the list of shared library files required by ${target}. The list in
 -# the variable named ${prerequisites_var} should be empty on first entry to
 -# this function. On exit, ${prerequisites_var} will contain the list of
 -# required shared library files.
 -#
 -#  target is the full path to an executable file
 -#
 -#  prerequisites_var is the name of a CMake variable to contain the results
 -#
 -#  exclude_system is 0 or 1: 0 to include "system" prerequisites , 1 to
 -#   exclude them
 -#
 -#  recurse is 0 or 1: 0 for direct prerequisites only, 1 for all prerequisites
 -#   recursively
 -#
 -#  exepath is the path to the top level executable used for @executable_path
 -#   replacment on the Mac
 -#
 -#  dirs is a list of paths where libraries might be found: these paths are
 -#   searched first when a target without any path info is given. Then standard
 -#   system locations are also searched: PATH, Framework locations, /usr/lib...
 -#
 -function(get_prerequisites target prerequisites_var exclude_system recurse exepath dirs)
 -  set(verbose 0)
 -  set(eol_char "E")
 -
 -  if(NOT IS_ABSOLUTE "${target}")
 -    message("warning: target '${target}' is not absolute...")
 -  endif(NOT IS_ABSOLUTE "${target}")
 -
 -  if(NOT EXISTS "${target}")
 -    message("warning: target '${target}' does not exist...")
 -  endif(NOT EXISTS "${target}")
 -
 -  # <setup-gp_tool-vars>
 -  #
 -  # Try to choose the right tool by default. Caller can set gp_tool prior to
 -  # calling this function to force using a different tool.
 -  #
 -  if("${gp_tool}" STREQUAL "")
 -    set(gp_tool "ldd")
 -    if(APPLE)
 -      set(gp_tool "otool")
 -    endif(APPLE)
 -    if(WIN32)
 -      set(gp_tool "dumpbin")
 -    endif(WIN32)
 -  endif("${gp_tool}" STREQUAL "")
 -
 -  set(gp_tool_known 0)
 -
 -  if("${gp_tool}" STREQUAL "ldd")
 -    set(gp_cmd_args "")
 -    set(gp_regex "^[\t ]*[^\t ]+ => ([^\t ]+).*${eol_char}$")
 -    set(gp_regex_cmp_count 1)
 -    set(gp_tool_known 1)
 -  endif("${gp_tool}" STREQUAL "ldd")
 -
 -  if("${gp_tool}" STREQUAL "otool")
 -    set(gp_cmd_args "-L")
 -    set(gp_regex "^\t([^\t]+) \\(compatibility version ([0-9]+.[0-9]+.[0-9]+), current version ([0-9]+.[0-9]+.[0-9]+)\\)${eol_char}$")
 -    set(gp_regex_cmp_count 3)
 -    set(gp_tool_known 1)
 -  endif("${gp_tool}" STREQUAL "otool")
 -
 -  if("${gp_tool}" STREQUAL "dumpbin")
 -    set(gp_cmd_args "/dependents")
 -    set(gp_regex "^    ([^ ].*[Dd][Ll][Ll])${eol_char}$")
 -    set(gp_regex_cmp_count 1)
 -    set(gp_tool_known 1)
 -    set(ENV{VS_UNICODE_OUTPUT} "") # Block extra output from inside VS IDE.
 -  endif("${gp_tool}" STREQUAL "dumpbin")
 -
 -  if(NOT gp_tool_known)
 -    message(STATUS "warning: gp_tool='${gp_tool}' is an unknown tool...")
 -    message(STATUS "CMake function get_prerequisites needs more code to handle '${gp_tool}'")
 -    message(STATUS "Valid gp_tool values are dumpbin, ldd and otool.")
 -    return()
 -  endif(NOT gp_tool_known)
 -
 -  set(gp_cmd_paths ${gp_cmd_paths}
 -    "C:/Program Files/Microsoft Visual Studio 9.0/VC/bin"
 -    "C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin"
 -    "C:/Program Files/Microsoft Visual Studio 8/VC/BIN"
 -    "C:/Program Files (x86)/Microsoft Visual Studio 8/VC/BIN"
 -    "C:/Program Files/Microsoft Visual Studio .NET 2003/VC7/BIN"
 -    "C:/Program Files (x86)/Microsoft Visual Studio .NET 2003/VC7/BIN"
 -    "/usr/local/bin"
 -    "/usr/bin"
 -    )
 -
 -  find_program(gp_cmd ${gp_tool} PATHS ${gp_cmd_paths})
 -
 -  if(NOT gp_cmd)
 -    message(STATUS "warning: could not find '${gp_tool}' - cannot analyze prerequisites...")
 -    return()
 -  endif(NOT gp_cmd)
 -
 -  if("${gp_tool}" STREQUAL "dumpbin")
 -    # When running dumpbin, it also needs the "Common7/IDE" directory in the
 -    # PATH. It will already be in the PATH if being run from a Visual Studio
 -    # command prompt. Add it to the PATH here in case we are running from a
 -    # different command prompt.
 -    #
 -    get_filename_component(gp_cmd_dir "${gp_cmd}" PATH)
 -    get_filename_component(gp_cmd_dlls_dir "${gp_cmd_dir}/../../Common7/IDE" ABSOLUTE)
 -    if(EXISTS "${gp_cmd_dlls_dir}")
 -      # only add to the path if it is not already in the path
 -      if(NOT "$ENV{PATH}" MATCHES "${gp_cmd_dlls_dir}")
 -        set(ENV{PATH} "$ENV{PATH};${gp_cmd_dlls_dir}")
 -      endif(NOT "$ENV{PATH}" MATCHES "${gp_cmd_dlls_dir}")
 -    endif(EXISTS "${gp_cmd_dlls_dir}")
 -  endif("${gp_tool}" STREQUAL "dumpbin")
 -  #
 -  # </setup-gp_tool-vars>
 -
 -  if("${gp_tool}" STREQUAL "ldd")
 -    set(old_ld_env "$ENV{LD_LIBRARY_PATH}")
 -    foreach(dir ${exepath} ${dirs})
 -      set(ENV{LD_LIBRARY_PATH} "${dir}:$ENV{LD_LIBRARY_PATH}")
 -    endforeach(dir)
 -  endif("${gp_tool}" STREQUAL "ldd")
 -
 -
 -  # Track new prerequisites at each new level of recursion. Start with an
 -  # empty list at each level:
 -  #
 -  set(unseen_prereqs)
 -
 -  # Run gp_cmd on the target:
 -  #
 -  execute_process(
 -    COMMAND ${gp_cmd} ${gp_cmd_args} ${target}
 -    OUTPUT_VARIABLE gp_cmd_ov
 -    )
 -
 -  if("${gp_tool}" STREQUAL "ldd")
 -    set(ENV{LD_LIBRARY_PATH} "${old_ld_env}")
 -  endif("${gp_tool}" STREQUAL "ldd")
 -
 -  if(verbose)
 -    message(STATUS "<RawOutput cmd='${gp_cmd} ${gp_cmd_args} ${target}'>")
 -    message(STATUS "gp_cmd_ov='${gp_cmd_ov}'")
 -    message(STATUS "</RawOutput>")
 -  endif(verbose)
 -
 -  get_filename_component(target_dir "${target}" PATH)
 -
 -  # Convert to a list of lines:
 -  #
 -  string(REGEX REPLACE ";" "\\\\;" candidates "${gp_cmd_ov}")
 -  string(REGEX REPLACE "\n" "${eol_char};" candidates "${candidates}")
 -
 -  # Analyze each line for file names that match the regular expression:
 -  #
 -  foreach(candidate ${candidates})
 -  if("${candidate}" MATCHES "${gp_regex}")
 -    # Extract information from each candidate:
 -    string(REGEX REPLACE "${gp_regex}" "\\1" raw_item "${candidate}")
 -
 -    if(gp_regex_cmp_count GREATER 1)
 -      string(REGEX REPLACE "${gp_regex}" "\\2" raw_compat_version "${candidate}")
 -      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" compat_major_version "${raw_compat_version}")
 -      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" compat_minor_version "${raw_compat_version}")
 -      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" compat_patch_version "${raw_compat_version}")
 -    endif(gp_regex_cmp_count GREATER 1)
 -
 -    if(gp_regex_cmp_count GREATER 2)
 -      string(REGEX REPLACE "${gp_regex}" "\\3" raw_current_version "${candidate}")
 -      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" current_major_version "${raw_current_version}")
 -      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" current_minor_version "${raw_current_version}")
 -      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" current_patch_version "${raw_current_version}")
 -    endif(gp_regex_cmp_count GREATER 2)
 -
 -    # Use the raw_item as the list entries returned by this function. Use the
 -    # gp_resolve_item function to resolve it to an actual full path file if
 -    # necessary.
 -    #
 -    set(item "${raw_item}")
 -
 -    # Add each item unless it is excluded:
 -    #
 -    set(add_item 1)
 -
 -    if(${exclude_system})
 -      set(type "")
 -      gp_resolved_file_type("${target}" "${item}" "${exepath}" "${dirs}" type)
 -      if("${type}" STREQUAL "system")
 -        set(add_item 0)
 -      endif("${type}" STREQUAL "system")
 -    endif(${exclude_system})
 -
 -    if(add_item)
 -      list(LENGTH ${prerequisites_var} list_length_before_append)
 -      gp_append_unique(${prerequisites_var} "${item}")
 -      list(LENGTH ${prerequisites_var} list_length_after_append)
 -
 -      if(${recurse})
 -        # If item was really added, this is the first time we have seen it.
 -        # Add it to unseen_prereqs so that we can recursively add *its*
 -        # prerequisites...
 -        #
 -        # But first: resolve its name to an absolute full path name such
 -        # that the analysis tools can simply accept it as input.
 -        #
 -        if(NOT list_length_before_append EQUAL list_length_after_append)
 -          gp_resolve_item("${target}" "${item}" "${exepath}" "${dirs}" resolved_item)
 -          set(unseen_prereqs ${unseen_prereqs} "${resolved_item}")
 -        endif(NOT list_length_before_append EQUAL list_length_after_append)
 -      endif(${recurse})
 -    endif(add_item)
 -  else("${candidate}" MATCHES "${gp_regex}")
 -    if(verbose)
 -      message(STATUS "ignoring non-matching line: '${candidate}'")
 -    endif(verbose)
 -  endif("${candidate}" MATCHES "${gp_regex}")
 -  endforeach(candidate)
 -
 -  list(LENGTH ${prerequisites_var} prerequisites_var_length)
 -  if(prerequisites_var_length GREATER 0)
 -    list(SORT ${prerequisites_var})
 -  endif(prerequisites_var_length GREATER 0)
 -  if(${recurse})
 -    set(more_inputs ${unseen_prereqs})
 -    foreach(input ${more_inputs})
 -      get_prerequisites("${input}" ${prerequisites_var} ${exclude_system} ${recurse} "${exepath}" "${dirs}")
 -    endforeach(input)
 -  endif(${recurse})
 -
 -  set(${prerequisites_var} ${${prerequisites_var}} PARENT_SCOPE)
 -endfunction(get_prerequisites)
 -
 -
 -# list_prerequisites target all exclude_system verbose
 -#
 -#  ARGV0 (target) is the full path to an executable file
 -#
 -#  optional ARGV1 (all) is 0 or 1: 0 for direct prerequisites only,
 -#   1 for all prerequisites recursively
 -#
 -#  optional ARGV2 (exclude_system) is 0 or 1: 0 to include "system"
 -#   prerequisites , 1 to exclude them
 -#
 -#  optional ARGV3 (verbose) is 0 or 1: 0 to print only full path
 -#   names of prerequisites, 1 to print extra information
 -#
 -function(list_prerequisites target)
 -  if("${ARGV1}" STREQUAL "")
 -    set(all 1)
 -  else("${ARGV1}" STREQUAL "")
 -    set(all "${ARGV1}")
 -  endif("${ARGV1}" STREQUAL "")
 -
 -  if("${ARGV2}" STREQUAL "")
 -    set(exclude_system 0)
 -  else("${ARGV2}" STREQUAL "")
 -    set(exclude_system "${ARGV2}")
 -  endif("${ARGV2}" STREQUAL "")
 -
 -  if("${ARGV3}" STREQUAL "")
 -    set(verbose 0)
 -  else("${ARGV3}" STREQUAL "")
 -    set(verbose "${ARGV3}")
 -  endif("${ARGV3}" STREQUAL "")
 -
 -  set(count 0)
 -  set(count_str "")
 -  set(print_count "${verbose}")
 -  set(print_prerequisite_type "${verbose}")
 -  set(print_target "${verbose}")
 -  set(type_str "")
 -
 -  get_filename_component(exepath "${target}" PATH)
 -
 -  set(prereqs "")
 -  get_prerequisites("${target}" prereqs ${exclude_system} ${all} "${exepath}" "")
 -
 -  if(print_target)
 -    message(STATUS "File '${target}' depends on:")
 -  endif(print_target)
 -
 -  foreach(d ${prereqs})
 -    math(EXPR count "${count} + 1")
 -
 -    if(print_count)
 -      set(count_str "${count}. ")
 -    endif(print_count)
 -
 -    if(print_prerequisite_type)
 -      gp_file_type("${target}" "${d}" type)
 -      set(type_str " (${type})")
 -    endif(print_prerequisite_type)
 -
 -    message(STATUS "${count_str}${d}${type_str}")
 -  endforeach(d)
 -endfunction(list_prerequisites)
 -
 -
 -# list_prerequisites_by_glob glob_arg glob_exp
 -#
 -#  glob_arg is GLOB or GLOB_RECURSE
 -#
 -#  glob_exp is a globbing expression used with "file(GLOB" to retrieve a list
 -#   of matching files. If a matching file is executable, its prerequisites are
 -#   listed.
 -#
 -# Any additional (optional) arguments provided are passed along as the
 -# optional arguments to the list_prerequisites calls.
 -#
 -function(list_prerequisites_by_glob glob_arg glob_exp)
 -  message(STATUS "=============================================================================")
 -  message(STATUS "List prerequisites of executables matching ${glob_arg} '${glob_exp}'")
 -  message(STATUS "")
 -  file(${glob_arg} file_list ${glob_exp})
 -  foreach(f ${file_list})
 -    is_file_executable("${f}" is_f_executable)
 -    if(is_f_executable)
 -      message(STATUS "=============================================================================")
 -      list_prerequisites("${f}" ${ARGN})
 -      message(STATUS "")
 -    endif(is_f_executable)
 -  endforeach(f)
 -endfunction(list_prerequisites_by_glob)
 +# GetPrerequisites.cmake +# +# This script provides functions to list the .dll, .dylib or .so files that an +# executable or shared library file depends on. (Its prerequisites.) +# +# It uses various tools to obtain the list of required shared library files: +#   dumpbin (Windows) +#   ldd (Linux/Unix) +#   otool (Mac OSX) +# +# The following functions are provided by this script: +#   gp_append_unique +#   is_file_executable +#   gp_item_default_embedded_path +#     (projects can override with gp_item_default_embedded_path_override) +#   gp_resolve_item +#     (projects can override with gp_resolve_item_override) +#   gp_resolved_file_type +#   gp_file_type +#   get_prerequisites +#   list_prerequisites +#   list_prerequisites_by_glob +# +# Requires CMake 2.6 or greater because it uses function, break, return and +# PARENT_SCOPE. + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# 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. +#============================================================================= +# (To distributed this file outside of CMake, substitute the full +#  License text for the above reference.) + +# gp_append_unique list_var value +# +# Append value to the list variable ${list_var} only if the value is not +# already in the list. +# +function(gp_append_unique list_var value) +  set(contains 0) + +  foreach(item ${${list_var}}) +    if("${item}" STREQUAL "${value}") +      set(contains 1) +      break() +    endif("${item}" STREQUAL "${value}") +  endforeach(item) + +  if(NOT contains) +    set(${list_var} ${${list_var}} "${value}" PARENT_SCOPE) +  endif(NOT contains) +endfunction(gp_append_unique) + + +# is_file_executable file result_var +# +# Return 1 in ${result_var} if ${file} is a binary executable. +# +# Return 0 in ${result_var} otherwise. +# +function(is_file_executable file result_var) +  # +  # A file is not executable until proven otherwise: +  # +  set(${result_var} 0 PARENT_SCOPE) + +  get_filename_component(file_full "${file}" ABSOLUTE) +  string(TOLOWER "${file_full}" file_full_lower) + +  # If file name ends in .exe on Windows, *assume* executable: +  # +  if(WIN32) +    if("${file_full_lower}" MATCHES "\\.exe$") +      set(${result_var} 1 PARENT_SCOPE) +      return() +    endif("${file_full_lower}" MATCHES "\\.exe$") + +    # A clause could be added here that uses output or return value of dumpbin +    # to determine ${result_var}. In 99%+? practical cases, the exe name +    # match will be sufficient... +    # +  endif(WIN32) + +  # Use the information returned from the Unix shell command "file" to +  # determine if ${file_full} should be considered an executable file... +  # +  # If the file command's output contains "executable" and does *not* contain +  # "text" then it is likely an executable suitable for prerequisite analysis +  # via the get_prerequisites macro. +  # +  if(UNIX) +    if(NOT file_cmd) +      find_program(file_cmd "file") +    endif(NOT file_cmd) + +    if(file_cmd) +      execute_process(COMMAND "${file_cmd}" "${file_full}" +        OUTPUT_VARIABLE file_ov +        OUTPUT_STRIP_TRAILING_WHITESPACE +        ) + +      # Replace the name of the file in the output with a placeholder token +      # (the string " _file_full_ ") so that just in case the path name of +      # the file contains the word "text" or "executable" we are not fooled +      # into thinking "the wrong thing" because the file name matches the +      # other 'file' command output we are looking for... +      # +      string(REPLACE "${file_full}" " _file_full_ " file_ov "${file_ov}") +      string(TOLOWER "${file_ov}" file_ov) + +      #message(STATUS "file_ov='${file_ov}'") +      if("${file_ov}" MATCHES "executable") +        #message(STATUS "executable!") +        if("${file_ov}" MATCHES "text") +          #message(STATUS "but text, so *not* a binary executable!") +        else("${file_ov}" MATCHES "text") +          set(${result_var} 1 PARENT_SCOPE) +          return() +        endif("${file_ov}" MATCHES "text") +      endif("${file_ov}" MATCHES "executable") +    else(file_cmd) +      message(STATUS "warning: No 'file' command, skipping execute_process...") +    endif(file_cmd) +  endif(UNIX) +endfunction(is_file_executable) + + +# gp_item_default_embedded_path item default_embedded_path_var +# +# Return the path that others should refer to the item by when the item +# is embedded inside a bundle. +# +# Override on a per-project basis by providing a project-specific +# gp_item_default_embedded_path_override function. +# +function(gp_item_default_embedded_path item default_embedded_path_var) + +  # On Windows and Linux, "embed" prerequisites in the same directory +  # as the executable by default: +  # +  set(path "@executable_path") +  set(overridden 0) + +  # On the Mac, relative to the executable depending on the type +  # of the thing we are embedding: +  # +  if(APPLE) +    # +    # The assumption here is that all executables in the bundle will be +    # in same-level-directories inside the bundle. The parent directory +    # of an executable inside the bundle should be MacOS or a sibling of +    # MacOS and all embedded paths returned from here will begin with +    # "@executable_path/../" and will work from all executables in all +    # such same-level-directories inside the bundle. +    # + +    # By default, embed things right next to the main bundle executable: +    # +    set(path "@executable_path/../../Contents/MacOS") + +    # Embed .dylibs right next to the main bundle executable: +    # +    if(item MATCHES "\\.dylib$") +      set(path "@executable_path/../MacOS") +      set(overridden 1) +    endif(item MATCHES "\\.dylib$") + +    # Embed frameworks in the embedded "Frameworks" directory (sibling of MacOS): +    # +    if(NOT overridden) +      if(item MATCHES "[^/]+\\.framework/") +        set(path "@executable_path/../Frameworks") +        set(overridden 1) +      endif(item MATCHES "[^/]+\\.framework/") +    endif(NOT overridden) +  endif() + +  # Provide a hook so that projects can override the default embedded location +  # of any given library by whatever logic they choose: +  # +  if(COMMAND gp_item_default_embedded_path_override) +    gp_item_default_embedded_path_override("${item}" path) +  endif(COMMAND gp_item_default_embedded_path_override) + +  set(${default_embedded_path_var} "${path}" PARENT_SCOPE) +endfunction(gp_item_default_embedded_path) + + +# gp_resolve_item context item exepath dirs resolved_item_var +# +# Resolve an item into an existing full path file. +# +# Override on a per-project basis by providing a project-specific +# gp_resolve_item_override function. +# +function(gp_resolve_item context item exepath dirs resolved_item_var) +  set(resolved 0) +  set(resolved_item "${item}") + +  # Is it already resolved? +  # +  if(EXISTS "${resolved_item}") +    set(resolved 1) +  endif(EXISTS "${resolved_item}") + +  if(NOT resolved) +    if(item MATCHES "@executable_path") +      # +      # @executable_path references are assumed relative to exepath +      # +      string(REPLACE "@executable_path" "${exepath}" ri "${item}") +      get_filename_component(ri "${ri}" ABSOLUTE) + +      if(EXISTS "${ri}") +        #message(STATUS "info: embedded item exists (${ri})") +        set(resolved 1) +        set(resolved_item "${ri}") +      else(EXISTS "${ri}") +        message(STATUS "warning: embedded item does not exist '${ri}'") +      endif(EXISTS "${ri}") +    endif(item MATCHES "@executable_path") +  endif(NOT resolved) + +  if(NOT resolved) +    if(item MATCHES "@loader_path") +      # +      # @loader_path references are assumed relative to the +      # PATH of the given "context" (presumably another library) +      # +      get_filename_component(contextpath "${context}" PATH) +      string(REPLACE "@loader_path" "${contextpath}" ri "${item}") +      get_filename_component(ri "${ri}" ABSOLUTE) + +      if(EXISTS "${ri}") +        #message(STATUS "info: embedded item exists (${ri})") +        set(resolved 1) +        set(resolved_item "${ri}") +      else(EXISTS "${ri}") +        message(STATUS "warning: embedded item does not exist '${ri}'") +      endif(EXISTS "${ri}") +    endif(item MATCHES "@loader_path") +  endif(NOT resolved) + +  if(NOT resolved) +    set(ri "ri-NOTFOUND") +    find_file(ri "${item}" ${exepath} ${dirs} NO_DEFAULT_PATH) +    find_file(ri "${item}" ${exepath} ${dirs} /usr/lib) +    if(ri) +      #message(STATUS "info: 'find_file' in exepath/dirs (${ri})") +      set(resolved 1) +      set(resolved_item "${ri}") +      set(ri "ri-NOTFOUND") +    endif(ri) +  endif(NOT resolved) + +  if(NOT resolved) +    if(item MATCHES "[^/]+\\.framework/") +      set(fw "fw-NOTFOUND") +      find_file(fw "${item}" +        "~/Library/Frameworks" +        "/Library/Frameworks" +        "/System/Library/Frameworks" +      ) +      if(fw) +        #message(STATUS "info: 'find_file' found framework (${fw})") +        set(resolved 1) +        set(resolved_item "${fw}") +        set(fw "fw-NOTFOUND") +      endif(fw) +    endif(item MATCHES "[^/]+\\.framework/") +  endif(NOT resolved) + +  # Using find_program on Windows will find dll files that are in the PATH. +  # (Converting simple file names into full path names if found.) +  # +  if(WIN32) +  if(NOT resolved) +    set(ri "ri-NOTFOUND") +    find_program(ri "${item}" PATHS "${exepath};${dirs}" NO_DEFAULT_PATH) +    find_program(ri "${item}" PATHS "${exepath};${dirs}") +    if(ri) +      #message(STATUS "info: 'find_program' in exepath/dirs (${ri})") +      set(resolved 1) +      set(resolved_item "${ri}") +      set(ri "ri-NOTFOUND") +    endif(ri) +  endif(NOT resolved) +  endif(WIN32) + +  # Provide a hook so that projects can override item resolution +  # by whatever logic they choose: +  # +  if(COMMAND gp_resolve_item_override) +    gp_resolve_item_override("${context}" "${item}" "${exepath}" "${dirs}" resolved_item resolved) +  endif(COMMAND gp_resolve_item_override) + +  if(NOT resolved) +    message(STATUS " +warning: cannot resolve item '${item}' + +  possible problems: +    need more directories? +    need to use InstallRequiredSystemLibraries? +    run in install tree instead of build tree? +") +#    message(STATUS " +#****************************************************************************** +#warning: cannot resolve item '${item}' +# +#  possible problems: +#    need more directories? +#    need to use InstallRequiredSystemLibraries? +#    run in install tree instead of build tree? +# +#    context='${context}' +#    item='${item}' +#    exepath='${exepath}' +#    dirs='${dirs}' +#    resolved_item_var='${resolved_item_var}' +#****************************************************************************** +#") +  endif(NOT resolved) + +  set(${resolved_item_var} "${resolved_item}" PARENT_SCOPE) +endfunction(gp_resolve_item) + + +# gp_resolved_file_type original_file file exepath dirs type_var +# +# Return the type of ${file} with respect to ${original_file}. String +# describing type of prerequisite is returned in variable named ${type_var}. +# +# Use ${exepath} and ${dirs} if necessary to resolve non-absolute ${file} +# values -- but only for non-embedded items. +# +# Possible types are: +#   system +#   local +#   embedded +#   other +# +function(gp_resolved_file_type original_file file exepath dirs type_var) +  #message(STATUS "**") + +  if(NOT IS_ABSOLUTE "${original_file}") +    message(STATUS "warning: gp_resolved_file_type expects absolute full path for first arg original_file") +  endif() + +  set(is_embedded 0) +  set(is_local 0) +  set(is_system 0) + +  set(resolved_file "${file}") + +  if("${file}" MATCHES "^@(executable|loader)_path") +    set(is_embedded 1) +  endif() + +  if(NOT is_embedded) +    if(NOT IS_ABSOLUTE "${file}") +      gp_resolve_item("${original_file}" "${file}" "${exepath}" "${dirs}" resolved_file) +    endif() + +    string(TOLOWER "${original_file}" original_lower) +    string(TOLOWER "${resolved_file}" lower) + +    if(UNIX) +      if(resolved_file MATCHES "^(/lib/|/lib32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/lib64/|/usr/X11R6/)") +        set(is_system 1) +      endif() +    endif() + +    if(APPLE) +      if(resolved_file MATCHES "^(/System/Library/|/usr/lib/)") +        set(is_system 1) +      endif() +    endif() + +    if(WIN32) +      string(TOLOWER "$ENV{SystemRoot}" sysroot) +      string(REGEX REPLACE "\\\\" "/" sysroot "${sysroot}") + +      string(TOLOWER "$ENV{windir}" windir) +      string(REGEX REPLACE "\\\\" "/" windir "${windir}") + +      if(lower MATCHES "^(${sysroot}/system|${windir}/system|${sysroot}/syswow|${windir}/syswow|(.*/)*msvc[^/]+dll)") +        set(is_system 1) +      endif() +    endif() + +    if(NOT is_system) +      get_filename_component(original_path "${original_lower}" PATH) +      get_filename_component(path "${lower}" PATH) +      if("${original_path}" STREQUAL "${path}") +        set(is_local 1) +      endif() +    endif() +  endif() + +  # Return type string based on computed booleans: +  # +  set(type "other") + +  if(is_system) +    set(type "system") +  elseif(is_embedded) +    set(type "embedded") +  elseif(is_local) +    set(type "local") +  endif() + +  #message(STATUS "gp_resolved_file_type: '${file}' '${resolved_file}'") +  #message(STATUS "                type: '${type}'") + +  if(NOT is_embedded) +    if(NOT IS_ABSOLUTE "${resolved_file}") +      if(lower MATCHES "^msvc[^/]+dll" AND is_system) +        message(STATUS "info: non-absolute msvc file '${file}' returning type '${type}'") +      else() +        message(STATUS "warning: gp_resolved_file_type non-absolute file '${file}' returning type '${type}' -- possibly incorrect") +      endif() +    endif() +  endif() + +  set(${type_var} "${type}" PARENT_SCOPE) + +  #message(STATUS "**") +endfunction() + + +# gp_file_type original_file file type_var +# +# Return the type of ${file} with respect to ${original_file}. String +# describing type of prerequisite is returned in variable named ${type_var}. +# +# Possible types are: +#   system +#   local +#   embedded +#   other +# +function(gp_file_type original_file file type_var) +  if(NOT IS_ABSOLUTE "${original_file}") +    message(STATUS "warning: gp_file_type expects absolute full path for first arg original_file") +  endif() + +  get_filename_component(exepath "${original_file}" PATH) + +  set(type "") +  gp_resolved_file_type("${original_file}" "${file}" "${exepath}" "" type) + +  set(${type_var} "${type}" PARENT_SCOPE) +endfunction(gp_file_type) + + +# get_prerequisites target prerequisites_var exclude_system recurse dirs +# +# Get the list of shared library files required by ${target}. The list in +# the variable named ${prerequisites_var} should be empty on first entry to +# this function. On exit, ${prerequisites_var} will contain the list of +# required shared library files. +# +#  target is the full path to an executable file +# +#  prerequisites_var is the name of a CMake variable to contain the results +# +#  exclude_system is 0 or 1: 0 to include "system" prerequisites , 1 to +#   exclude them +# +#  recurse is 0 or 1: 0 for direct prerequisites only, 1 for all prerequisites +#   recursively +# +#  exepath is the path to the top level executable used for @executable_path +#   replacment on the Mac +# +#  dirs is a list of paths where libraries might be found: these paths are +#   searched first when a target without any path info is given. Then standard +#   system locations are also searched: PATH, Framework locations, /usr/lib... +# +function(get_prerequisites target prerequisites_var exclude_system recurse exepath dirs) +  set(verbose 0) +  set(eol_char "E") + +  if(NOT IS_ABSOLUTE "${target}") +    message("warning: target '${target}' is not absolute...") +  endif(NOT IS_ABSOLUTE "${target}") + +  if(NOT EXISTS "${target}") +    message("warning: target '${target}' does not exist...") +  endif(NOT EXISTS "${target}") + +  # <setup-gp_tool-vars> +  # +  # Try to choose the right tool by default. Caller can set gp_tool prior to +  # calling this function to force using a different tool. +  # +  if("${gp_tool}" STREQUAL "") +    set(gp_tool "ldd") +    if(APPLE) +      set(gp_tool "otool") +    endif(APPLE) +    if(WIN32) +      set(gp_tool "dumpbin") +    endif(WIN32) +  endif("${gp_tool}" STREQUAL "") + +  set(gp_tool_known 0) + +  if("${gp_tool}" STREQUAL "ldd") +    set(gp_cmd_args "") +    set(gp_regex "^[\t ]*[^\t ]+ => ([^\t ]+).*${eol_char}$") +    set(gp_regex_cmp_count 1) +    set(gp_tool_known 1) +  endif("${gp_tool}" STREQUAL "ldd") + +  if("${gp_tool}" STREQUAL "otool") +    set(gp_cmd_args "-L") +    set(gp_regex "^\t([^\t]+) \\(compatibility version ([0-9]+.[0-9]+.[0-9]+), current version ([0-9]+.[0-9]+.[0-9]+)\\)${eol_char}$") +    set(gp_regex_cmp_count 3) +    set(gp_tool_known 1) +  endif("${gp_tool}" STREQUAL "otool") + +  if("${gp_tool}" STREQUAL "dumpbin") +    set(gp_cmd_args "/dependents") +    set(gp_regex "^    ([^ ].*[Dd][Ll][Ll])${eol_char}$") +    set(gp_regex_cmp_count 1) +    set(gp_tool_known 1) +    set(ENV{VS_UNICODE_OUTPUT} "") # Block extra output from inside VS IDE. +  endif("${gp_tool}" STREQUAL "dumpbin") + +  if(NOT gp_tool_known) +    message(STATUS "warning: gp_tool='${gp_tool}' is an unknown tool...") +    message(STATUS "CMake function get_prerequisites needs more code to handle '${gp_tool}'") +    message(STATUS "Valid gp_tool values are dumpbin, ldd and otool.") +    return() +  endif(NOT gp_tool_known) + +  set(gp_cmd_paths ${gp_cmd_paths} +    "C:/Program Files/Microsoft Visual Studio 9.0/VC/bin" +    "C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin" +    "C:/Program Files/Microsoft Visual Studio 8/VC/BIN" +    "C:/Program Files (x86)/Microsoft Visual Studio 8/VC/BIN" +    "C:/Program Files/Microsoft Visual Studio .NET 2003/VC7/BIN" +    "C:/Program Files (x86)/Microsoft Visual Studio .NET 2003/VC7/BIN" +    "/usr/local/bin" +    "/usr/bin" +    ) + +  find_program(gp_cmd ${gp_tool} PATHS ${gp_cmd_paths}) + +  if(NOT gp_cmd) +    message(STATUS "warning: could not find '${gp_tool}' - cannot analyze prerequisites...") +    return() +  endif(NOT gp_cmd) + +  if("${gp_tool}" STREQUAL "dumpbin") +    # When running dumpbin, it also needs the "Common7/IDE" directory in the +    # PATH. It will already be in the PATH if being run from a Visual Studio +    # command prompt. Add it to the PATH here in case we are running from a +    # different command prompt. +    # +    get_filename_component(gp_cmd_dir "${gp_cmd}" PATH) +    get_filename_component(gp_cmd_dlls_dir "${gp_cmd_dir}/../../Common7/IDE" ABSOLUTE) +    if(EXISTS "${gp_cmd_dlls_dir}") +      # only add to the path if it is not already in the path +      if(NOT "$ENV{PATH}" MATCHES "${gp_cmd_dlls_dir}") +        set(ENV{PATH} "$ENV{PATH};${gp_cmd_dlls_dir}") +      endif(NOT "$ENV{PATH}" MATCHES "${gp_cmd_dlls_dir}") +    endif(EXISTS "${gp_cmd_dlls_dir}") +  endif("${gp_tool}" STREQUAL "dumpbin") +  # +  # </setup-gp_tool-vars> + +  if("${gp_tool}" STREQUAL "ldd") +    set(old_ld_env "$ENV{LD_LIBRARY_PATH}") +    foreach(dir ${exepath} ${dirs}) +      set(ENV{LD_LIBRARY_PATH} "${dir}:$ENV{LD_LIBRARY_PATH}") +    endforeach(dir) +  endif("${gp_tool}" STREQUAL "ldd") + + +  # Track new prerequisites at each new level of recursion. Start with an +  # empty list at each level: +  # +  set(unseen_prereqs) + +  # Run gp_cmd on the target: +  # +  execute_process( +    COMMAND ${gp_cmd} ${gp_cmd_args} ${target} +    OUTPUT_VARIABLE gp_cmd_ov +    ) + +  if("${gp_tool}" STREQUAL "ldd") +    set(ENV{LD_LIBRARY_PATH} "${old_ld_env}") +  endif("${gp_tool}" STREQUAL "ldd") + +  if(verbose) +    message(STATUS "<RawOutput cmd='${gp_cmd} ${gp_cmd_args} ${target}'>") +    message(STATUS "gp_cmd_ov='${gp_cmd_ov}'") +    message(STATUS "</RawOutput>") +  endif(verbose) + +  get_filename_component(target_dir "${target}" PATH) + +  # Convert to a list of lines: +  # +  string(REGEX REPLACE ";" "\\\\;" candidates "${gp_cmd_ov}") +  string(REGEX REPLACE "\n" "${eol_char};" candidates "${candidates}") + +  # Analyze each line for file names that match the regular expression: +  # +  foreach(candidate ${candidates}) +  if("${candidate}" MATCHES "${gp_regex}") +    # Extract information from each candidate: +    string(REGEX REPLACE "${gp_regex}" "\\1" raw_item "${candidate}") + +    if(gp_regex_cmp_count GREATER 1) +      string(REGEX REPLACE "${gp_regex}" "\\2" raw_compat_version "${candidate}") +      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" compat_major_version "${raw_compat_version}") +      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" compat_minor_version "${raw_compat_version}") +      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" compat_patch_version "${raw_compat_version}") +    endif(gp_regex_cmp_count GREATER 1) + +    if(gp_regex_cmp_count GREATER 2) +      string(REGEX REPLACE "${gp_regex}" "\\3" raw_current_version "${candidate}") +      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" current_major_version "${raw_current_version}") +      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" current_minor_version "${raw_current_version}") +      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" current_patch_version "${raw_current_version}") +    endif(gp_regex_cmp_count GREATER 2) + +    # Use the raw_item as the list entries returned by this function. Use the +    # gp_resolve_item function to resolve it to an actual full path file if +    # necessary. +    # +    set(item "${raw_item}") + +    # Add each item unless it is excluded: +    # +    set(add_item 1) + +    if(${exclude_system}) +      set(type "") +      gp_resolved_file_type("${target}" "${item}" "${exepath}" "${dirs}" type) +      if("${type}" STREQUAL "system") +        set(add_item 0) +      endif("${type}" STREQUAL "system") +    endif(${exclude_system}) + +    if(add_item) +      list(LENGTH ${prerequisites_var} list_length_before_append) +      gp_append_unique(${prerequisites_var} "${item}") +      list(LENGTH ${prerequisites_var} list_length_after_append) + +      if(${recurse}) +        # If item was really added, this is the first time we have seen it. +        # Add it to unseen_prereqs so that we can recursively add *its* +        # prerequisites... +        # +        # But first: resolve its name to an absolute full path name such +        # that the analysis tools can simply accept it as input. +        # +        if(NOT list_length_before_append EQUAL list_length_after_append) +          gp_resolve_item("${target}" "${item}" "${exepath}" "${dirs}" resolved_item) +          set(unseen_prereqs ${unseen_prereqs} "${resolved_item}") +        endif(NOT list_length_before_append EQUAL list_length_after_append) +      endif(${recurse}) +    endif(add_item) +  else("${candidate}" MATCHES "${gp_regex}") +    if(verbose) +      message(STATUS "ignoring non-matching line: '${candidate}'") +    endif(verbose) +  endif("${candidate}" MATCHES "${gp_regex}") +  endforeach(candidate) + +  list(LENGTH ${prerequisites_var} prerequisites_var_length) +  if(prerequisites_var_length GREATER 0) +    list(SORT ${prerequisites_var}) +  endif(prerequisites_var_length GREATER 0) +  if(${recurse}) +    set(more_inputs ${unseen_prereqs}) +    foreach(input ${more_inputs}) +      get_prerequisites("${input}" ${prerequisites_var} ${exclude_system} ${recurse} "${exepath}" "${dirs}") +    endforeach(input) +  endif(${recurse}) + +  set(${prerequisites_var} ${${prerequisites_var}} PARENT_SCOPE) +endfunction(get_prerequisites) + + +# list_prerequisites target all exclude_system verbose +# +#  ARGV0 (target) is the full path to an executable file +# +#  optional ARGV1 (all) is 0 or 1: 0 for direct prerequisites only, +#   1 for all prerequisites recursively +# +#  optional ARGV2 (exclude_system) is 0 or 1: 0 to include "system" +#   prerequisites , 1 to exclude them +# +#  optional ARGV3 (verbose) is 0 or 1: 0 to print only full path +#   names of prerequisites, 1 to print extra information +# +function(list_prerequisites target) +  if("${ARGV1}" STREQUAL "") +    set(all 1) +  else("${ARGV1}" STREQUAL "") +    set(all "${ARGV1}") +  endif("${ARGV1}" STREQUAL "") + +  if("${ARGV2}" STREQUAL "") +    set(exclude_system 0) +  else("${ARGV2}" STREQUAL "") +    set(exclude_system "${ARGV2}") +  endif("${ARGV2}" STREQUAL "") + +  if("${ARGV3}" STREQUAL "") +    set(verbose 0) +  else("${ARGV3}" STREQUAL "") +    set(verbose "${ARGV3}") +  endif("${ARGV3}" STREQUAL "") + +  set(count 0) +  set(count_str "") +  set(print_count "${verbose}") +  set(print_prerequisite_type "${verbose}") +  set(print_target "${verbose}") +  set(type_str "") + +  get_filename_component(exepath "${target}" PATH) + +  set(prereqs "") +  get_prerequisites("${target}" prereqs ${exclude_system} ${all} "${exepath}" "") + +  if(print_target) +    message(STATUS "File '${target}' depends on:") +  endif(print_target) + +  foreach(d ${prereqs}) +    math(EXPR count "${count} + 1") + +    if(print_count) +      set(count_str "${count}. ") +    endif(print_count) + +    if(print_prerequisite_type) +      gp_file_type("${target}" "${d}" type) +      set(type_str " (${type})") +    endif(print_prerequisite_type) + +    message(STATUS "${count_str}${d}${type_str}") +  endforeach(d) +endfunction(list_prerequisites) + + +# list_prerequisites_by_glob glob_arg glob_exp +# +#  glob_arg is GLOB or GLOB_RECURSE +# +#  glob_exp is a globbing expression used with "file(GLOB" to retrieve a list +#   of matching files. If a matching file is executable, its prerequisites are +#   listed. +# +# Any additional (optional) arguments provided are passed along as the +# optional arguments to the list_prerequisites calls. +# +function(list_prerequisites_by_glob glob_arg glob_exp) +  message(STATUS "=============================================================================") +  message(STATUS "List prerequisites of executables matching ${glob_arg} '${glob_exp}'") +  message(STATUS "") +  file(${glob_arg} file_list ${glob_exp}) +  foreach(f ${file_list}) +    is_file_executable("${f}" is_f_executable) +    if(is_f_executable) +      message(STATUS "=============================================================================") +      list_prerequisites("${f}" ${ARGN}) +      message(STATUS "") +    endif(is_f_executable) +  endforeach(f) +endfunction(list_prerequisites_by_glob) diff --git a/indra/cmake/GoogleMock.cmake b/indra/cmake/GoogleMock.cmake index ca5a8034ba..c4c96a9af7 100644 --- a/indra/cmake/GoogleMock.cmake +++ b/indra/cmake/GoogleMock.cmake @@ -8,9 +8,10 @@ set(GOOGLEMOCK_INCLUDE_DIRS      ${LIBS_PREBUILT_DIR}/include)  if (LINUX) +    # VWR-24366: gmock is underlinked, it needs gtest.      set(GOOGLEMOCK_LIBRARIES  -        gmock   -        gtest) +        gmock -Wl,--no-as-needed +        gtest -Wl,--as-needed)  elseif(WINDOWS)      set(GOOGLEMOCK_LIBRARIES           gmock) diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake index 946fc6b375..d9f91193be 100644 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -4,20 +4,20 @@ include(Prebuilt)  if (STANDALONE)    include(FindGooglePerfTools)  else (STANDALONE) -  use_prebuilt_binary(google)    if (WINDOWS) -    use_prebuilt_binary(google-perftools) +    use_prebuilt_binary(tcmalloc)      set(TCMALLOC_LIBRARIES           debug libtcmalloc_minimal-debug          optimized libtcmalloc_minimal)      set(GOOGLE_PERFTOOLS_FOUND "YES")    endif (WINDOWS)    if (LINUX) -    set(TCMALLOC_LIBRARIES tcmalloc) -    set(STACKTRACE_LIBRARIES stacktrace) +    use_prebuilt_binary(tcmalloc) +    set(TCMALLOC_LIBRARIES  +    tcmalloc)      set(PROFILER_LIBRARIES profiler)      set(GOOGLE_PERFTOOLS_INCLUDE_DIR -        ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) +        ${LIBS_PREBUILT_DIR}/include)      set(GOOGLE_PERFTOOLS_FOUND "YES")    endif (LINUX)  endif (STANDALONE) @@ -29,12 +29,11 @@ if (GOOGLE_PERFTOOLS_FOUND)  endif (GOOGLE_PERFTOOLS_FOUND)  if (WINDOWS) -    # *TODO -reenable this once we get server usage sorted out -    #set(USE_GOOGLE_PERFTOOLS ON) +    set(USE_GOOGLE_PERFTOOLS ON)  endif (WINDOWS)  if (USE_GOOGLE_PERFTOOLS) -  set(TCMALLOC_FLAG -DLL_USE_TCMALLOC=1) +  set(TCMALLOC_FLAG -ULL_USE_TCMALLOC=1)    include_directories(${GOOGLE_PERFTOOLS_INCLUDE_DIR})    set(GOOGLE_PERFTOOLS_LIBRARIES ${TCMALLOC_LIBRARIES} ${STACKTRACE_LIBRARIES} ${PROFILER_LIBRARIES})  else (USE_GOOGLE_PERFTOOLS) diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake index 9514d59f64..4f99efd602 100644 --- a/indra/cmake/JPEG.cmake +++ b/indra/cmake/JPEG.cmake @@ -12,10 +12,7 @@ else (STANDALONE)    if (LINUX)      set(JPEG_LIBRARIES jpeg)    elseif (DARWIN) -    set(JPEG_LIBRARIES -      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/liblljpeg.a -      debug ${ARCH_PREBUILT_DIRS_DEBUG}/liblljpeg.a -      ) +    set(JPEG_LIBRARIES jpeg)    elseif (WINDOWS)      set(JPEG_LIBRARIES jpeglib)    endif (LINUX) diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake index 7dd565be7c..7ad73e5683 100644 --- a/indra/cmake/JsonCpp.cmake +++ b/indra/cmake/JsonCpp.cmake @@ -11,12 +11,12 @@ else (STANDALONE)    use_prebuilt_binary(jsoncpp)    if (WINDOWS)      set(JSONCPP_LIBRARIES  -      debug json_vc80d -      optimized json_vc80) +      debug json_vc100debug_libmt.lib +      optimized json_vc100_libmt)    elseif (DARWIN) -    set(JSONCPP_LIBRARIES json_mac-universal-gcc_libmt) +    set(JSONCPP_LIBRARIES libjson_linux-gcc-4.0.1_libmt.a)    elseif (LINUX) -    set(JSONCPP_LIBRARIES jsoncpp) +    set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a)    endif (WINDOWS) -  set(JSONCPP_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/jsoncpp) +  set(JSONCPP_INCLUDE_DIR "${LIBS_PREBUILT_DIR}/include/jsoncpp" "${LIBS_PREBUILT_DIR}/include/json")  endif (STANDALONE) diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake index 29e2492551..08feab6e36 100644 --- a/indra/cmake/LLAddBuildTest.cmake +++ b/indra/cmake/LLAddBuildTest.cmake @@ -1,273 +1,272 @@ -# -*- cmake -*-
 -include(LLTestCommand)
 -include(GoogleMock)
 -
 -MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
 -  # Given a project name and a list of sourcefiles (with optional properties on each),
 -  # add targets to build and run the tests specified.
 -  # ASSUMPTIONS:
 -  # * this macro is being executed in the project file that is passed in
 -  # * current working SOURCE dir is that project dir
 -  # * there is a subfolder tests/ with test code corresponding to the filenames passed in
 -  # * properties for each sourcefile passed in indicate what libs to link that file with (MAKE NO ASSUMPTIONS ASIDE FROM TUT)
 -  #
 -  # More info and examples at: https://wiki.secondlife.com/wiki/How_to_add_unit_tests_to_indra_code
 -  #
 -  # WARNING: do NOT modify this code without working with poppy -
 -  # there is another branch that will conflict heavily with any changes here.
 -INCLUDE(GoogleMock)
 -
 -
 -  IF(LL_TEST_VERBOSE)
 -    MESSAGE("LL_ADD_PROJECT_UNIT_TESTS UNITTEST_PROJECT_${project} sources: ${sources}")
 -  ENDIF(LL_TEST_VERBOSE)
 -
 -  # Start with the header and project-wide setup before making targets
 -  #project(UNITTEST_PROJECT_${project})
 -  # Setup includes, paths, etc
 -  SET(alltest_SOURCE_FILES
 -    ${CMAKE_SOURCE_DIR}/test/test.cpp
 -    ${CMAKE_SOURCE_DIR}/test/lltut.cpp
 -    )
 -  SET(alltest_DEP_TARGETS
 -    # needed by the test harness itself
 -    ${APRUTIL_LIBRARIES}
 -    ${APR_LIBRARIES}
 -    llcommon
 -    )
 -  IF(NOT "${project}" STREQUAL "llmath")
 -    # add llmath as a dep unless the tested module *is* llmath!
 -    LIST(APPEND alltest_DEP_TARGETS
 -      llmath
 -      )
 -  ENDIF(NOT "${project}" STREQUAL "llmath")
 -  SET(alltest_INCLUDE_DIRS
 -    ${LLMATH_INCLUDE_DIRS}
 -    ${LLCOMMON_INCLUDE_DIRS}
 -    ${LIBS_OPEN_DIR}/test
 -    ${GOOGLEMOCK_INCLUDE_DIRS}
 -    )
 -  SET(alltest_LIBRARIES
 -    ${GOOGLEMOCK_LIBRARIES}
 -    ${PTHREAD_LIBRARY}
 -    ${WINDOWS_LIBRARIES}
 -    )
 -  # Headers, for convenience in targets.
 -  SET(alltest_HEADER_FILES
 -    ${CMAKE_SOURCE_DIR}/test/test.h
 -    )
 -
 -  # Use the default flags
 -  if (LINUX)
 -    SET(CMAKE_EXE_LINKER_FLAGS "")
 -  endif (LINUX)
 -
 -  # start the source test executable definitions
 -  SET(${project}_TEST_OUTPUT "")
 -  FOREACH (source ${sources})
 -    STRING( REGEX REPLACE "(.*)\\.[^.]+$" "\\1" name ${source} )
 -    STRING( REGEX REPLACE ".*\\.([^.]+)$" "\\1" extension ${source} )
 -    IF(LL_TEST_VERBOSE)
 -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS UNITTEST_PROJECT_${project} individual source: ${source} (${name}.${extension})")
 -    ENDIF(LL_TEST_VERBOSE)
 -
 -    #
 -    # Per-codefile additional / external source, header, and include dir property extraction
 -    #
 -    # Source
 -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_SOURCE_FILES ${source} LL_TEST_ADDITIONAL_SOURCE_FILES)
 -    IF(${name}_test_additional_SOURCE_FILES MATCHES NOTFOUND)
 -      SET(${name}_test_additional_SOURCE_FILES "")
 -    ENDIF(${name}_test_additional_SOURCE_FILES MATCHES NOTFOUND)
 -    SET(${name}_test_SOURCE_FILES ${source} tests/${name}_test.${extension} ${alltest_SOURCE_FILES} ${${name}_test_additional_SOURCE_FILES} )
 -    IF(LL_TEST_VERBOSE)
 -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_SOURCE_FILES ${${name}_test_SOURCE_FILES}")
 -    ENDIF(LL_TEST_VERBOSE)
 -    # Headers
 -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_HEADER_FILES ${source} LL_TEST_ADDITIONAL_HEADER_FILES)
 -    IF(${name}_test_additional_HEADER_FILES MATCHES NOTFOUND)
 -      SET(${name}_test_additional_HEADER_FILES "")
 -    ENDIF(${name}_test_additional_HEADER_FILES MATCHES NOTFOUND)
 -    SET(${name}_test_HEADER_FILES ${name}.h ${${name}_test_additional_HEADER_FILES})
 -    set_source_files_properties(${${name}_test_HEADER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE)
 -    LIST(APPEND ${name}_test_SOURCE_FILES ${${name}_test_HEADER_FILES})
 -    IF(LL_TEST_VERBOSE)
 -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_HEADER_FILES ${${name}_test_HEADER_FILES}")
 -    ENDIF(LL_TEST_VERBOSE)
 -    # Include dirs
 -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_INCLUDE_DIRS ${source} LL_TEST_ADDITIONAL_INCLUDE_DIRS)
 -    IF(${name}_test_additional_INCLUDE_DIRS MATCHES NOTFOUND)
 -      SET(${name}_test_additional_INCLUDE_DIRS "")
 -    ENDIF(${name}_test_additional_INCLUDE_DIRS MATCHES NOTFOUND)
 -    INCLUDE_DIRECTORIES(${alltest_INCLUDE_DIRS} ${name}_test_additional_INCLUDE_DIRS )
 -    IF(LL_TEST_VERBOSE)
 -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_INCLUDE_DIRS ${${name}_test_additional_INCLUDE_DIRS}")
 -    ENDIF(LL_TEST_VERBOSE)
 -
 -
 -    # Setup target
 -    ADD_EXECUTABLE(PROJECT_${project}_TEST_${name} ${${name}_test_SOURCE_FILES})
 -    SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}")
 -
 -    #
 -    # Per-codefile additional / external project dep and lib dep property extraction
 -    #
 -    # WARNING: it's REALLY IMPORTANT to not mix these. I guarantee it will not work in the future. + poppy 2009-04-19
 -    # Projects
 -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_PROJECTS ${source} LL_TEST_ADDITIONAL_PROJECTS)
 -    IF(${name}_test_additional_PROJECTS MATCHES NOTFOUND)
 -      SET(${name}_test_additional_PROJECTS "")
 -    ENDIF(${name}_test_additional_PROJECTS MATCHES NOTFOUND)
 -    # Libraries
 -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_LIBRARIES ${source} LL_TEST_ADDITIONAL_LIBRARIES)
 -    IF(${name}_test_additional_LIBRARIES MATCHES NOTFOUND)
 -      SET(${name}_test_additional_LIBRARIES "")
 -    ENDIF(${name}_test_additional_LIBRARIES MATCHES NOTFOUND)
 -    IF(LL_TEST_VERBOSE)
 -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_PROJECTS ${${name}_test_additional_PROJECTS}")
 -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_LIBRARIES ${${name}_test_additional_LIBRARIES}")
 -    ENDIF(LL_TEST_VERBOSE)
 -    # Add to project
 -    TARGET_LINK_LIBRARIES(PROJECT_${project}_TEST_${name} ${alltest_LIBRARIES} ${alltest_DEP_TARGETS} ${${name}_test_additional_PROJECTS} ${${name}_test_additional_LIBRARIES} )
 -    # Compile-time Definitions
 -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_CFLAGS ${source} LL_TEST_ADDITIONAL_CFLAGS)
 -     IF(NOT ${name}_test_additional_CFLAGS MATCHES NOTFOUND)
 -       SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name} PROPERTIES COMPILE_FLAGS ${${name}_test_additional_CFLAGS} )
 -       IF(LL_TEST_VERBOSE)
 -         MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_CFLAGS ${${name}_test_additional_CFLAGS}")
 -       ENDIF(LL_TEST_VERBOSE)
 -     ENDIF(NOT ${name}_test_additional_CFLAGS MATCHES NOTFOUND)
 -     
 -    #
 -    # Setup test targets
 -    #
 -    GET_TARGET_PROPERTY(TEST_EXE PROJECT_${project}_TEST_${name} LOCATION)
 -    SET(TEST_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/PROJECT_${project}_TEST_${name}_ok.txt)
 -    SET(TEST_CMD ${TEST_EXE} --touch=${TEST_OUTPUT} --sourcedir=${CMAKE_CURRENT_SOURCE_DIR})
 -
 -    # daveh - what configuration does this use? Debug? it's cmake-time, not build time. + poppy 2009-04-19
 -    IF(LL_TEST_VERBOSE)
 -      MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_cmd  = ${TEST_CMD}")
 -    ENDIF(LL_TEST_VERBOSE)
 -
 -    SET_TEST_PATH(LD_LIBRARY_PATH)
 -    LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${TEST_CMD})
 -    IF(LL_TEST_VERBOSE)
 -      MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_script  = ${TEST_SCRIPT_CMD}")
 -    ENDIF(LL_TEST_VERBOSE)
 -    # Add test 
 -    ADD_CUSTOM_COMMAND(
 -        OUTPUT ${TEST_OUTPUT}
 -        COMMAND ${TEST_SCRIPT_CMD}
 -        DEPENDS PROJECT_${project}_TEST_${name}
 -        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
 -        )
 -    # Why not add custom target and add POST_BUILD command?
 -    # Slightly less uncertain behavior
 -    # (OUTPUT commands run non-deterministically AFAIK) + poppy 2009-04-19
 -    # > I did not use a post build step as I could not make it notify of a 
 -    # > failure after the first time you build and fail a test. - daveh 2009-04-20
 -    LIST(APPEND ${project}_TEST_OUTPUT ${TEST_OUTPUT})
 -  ENDFOREACH (source)
 -
 -  # Add the test runner target per-project
 -  # (replaces old _test_ok targets all over the place)
 -  ADD_CUSTOM_TARGET(${project}_tests ALL DEPENDS ${${project}_TEST_OUTPUT})
 -  ADD_DEPENDENCIES(${project} ${project}_tests)
 -ENDMACRO(LL_ADD_PROJECT_UNIT_TESTS)
 -
 -FUNCTION(LL_ADD_INTEGRATION_TEST 
 -    testname
 -    additional_source_files
 -    library_dependencies
 -# variable args
 -    )
 -  if(TEST_DEBUG)
 -    message(STATUS "Adding INTEGRATION_TEST_${testname} - debug output is on")
 -  endif(TEST_DEBUG)
 -  
 -  SET(source_files
 -    tests/${testname}_test.cpp
 -    ${CMAKE_SOURCE_DIR}/test/test.cpp
 -    ${CMAKE_SOURCE_DIR}/test/lltut.cpp
 -    ${additional_source_files}
 -    )
 -
 -  SET(libraries
 -    ${library_dependencies}
 -    ${GOOGLEMOCK_LIBRARIES}
 -    ${PTHREAD_LIBRARY}
 -    )
 -
 -  # Add test executable build target
 -  if(TEST_DEBUG)
 -    message(STATUS "ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})")
 -  endif(TEST_DEBUG)
 -  ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})
 -  SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}")
 -
 -  # Add link deps to the executable
 -  if(TEST_DEBUG)
 -    message(STATUS "TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries})")
 -  endif(TEST_DEBUG)
 -  TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries})
 -
 -  # Create the test running command
 -  SET(test_command ${ARGN})
 -  GET_TARGET_PROPERTY(TEST_EXE INTEGRATION_TEST_${testname} LOCATION)
 -  LIST(FIND test_command "{}" test_exe_pos)
 -  IF(test_exe_pos LESS 0)
 -    # The {} marker means "the full pathname of the test executable."
 -    # test_exe_pos -1 means we didn't find it -- so append the test executable
 -    # name to $ARGN, the variable part of the arg list. This is convenient
 -    # shorthand for both straightforward execution of the test program (empty
 -    # $ARGN) and for running a "wrapper" program of some kind accepting the
 -    # pathname of the test program as the last of its args. You need specify
 -    # {} only if the test program's pathname isn't the last argument in the
 -    # desired command line.
 -    LIST(APPEND test_command "${TEST_EXE}")
 -  ELSE (test_exe_pos LESS 0)
 -    # Found {} marker at test_exe_pos. Remove the {}...
 -    LIST(REMOVE_AT test_command test_exe_pos)
 -    # ...and replace it with the actual name of the test executable.
 -    LIST(INSERT test_command test_exe_pos "${TEST_EXE}")
 -  ENDIF (test_exe_pos LESS 0)
 -
 -  SET_TEST_PATH(LD_LIBRARY_PATH)
 -  LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${test_command})
 -
 -  if(TEST_DEBUG)
 -    message(STATUS "TEST_SCRIPT_CMD: ${TEST_SCRIPT_CMD}")
 -  endif(TEST_DEBUG)
 -
 -  ADD_CUSTOM_COMMAND(
 -    TARGET INTEGRATION_TEST_${testname}
 -    POST_BUILD
 -    COMMAND ${TEST_SCRIPT_CMD}
 -    )
 -
 -  # Use CTEST? Not sure how to yet...
 -  # ADD_TEST(INTEGRATION_TEST_RUNNER_${testname} ${TEST_SCRIPT_CMD})
 -
 -ENDFUNCTION(LL_ADD_INTEGRATION_TEST)
 -
 -MACRO(SET_TEST_PATH LISTVAR)
 -  IF(WINDOWS)
 -    # We typically build/package only Release variants of third-party
 -    # libraries, so append the Release staging dir in case the library being
 -    # sought doesn't have a debug variant.
 -    set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR} ${SHARED_LIB_STAGING_DIR}/Release)
 -  ELSEIF(DARWIN)
 -    # We typically build/package only Release variants of third-party
 -    # libraries, so append the Release staging dir in case the library being
 -    # sought doesn't have a debug variant.
 -    set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources ${SHARED_LIB_STAGING_DIR}/Release/Resources /usr/lib)
 -  ELSE(WINDOWS)
 -    # Linux uses a single staging directory anyway.
 -    IF (STANDALONE)
 -      set(${LISTVAR} ${CMAKE_BINARY_DIR}/llcommon /usr/lib /usr/local/lib)
 -    ELSE (STANDALONE)
 -      set(${LISTVAR} ${SHARED_LIB_STAGING_DIR} /usr/lib)
 -    ENDIF (STANDALONE)
 -  ENDIF(WINDOWS)
 -ENDMACRO(SET_TEST_PATH)
 +# -*- cmake -*- +include(LLTestCommand) +include(GoogleMock) +include(Tut) + +MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources) +  # Given a project name and a list of sourcefiles (with optional properties on each), +  # add targets to build and run the tests specified. +  # ASSUMPTIONS: +  # * this macro is being executed in the project file that is passed in +  # * current working SOURCE dir is that project dir +  # * there is a subfolder tests/ with test code corresponding to the filenames passed in +  # * properties for each sourcefile passed in indicate what libs to link that file with (MAKE NO ASSUMPTIONS ASIDE FROM TUT) +  # +  # More info and examples at: https://wiki.secondlife.com/wiki/How_to_add_unit_tests_to_indra_code +  # +  # WARNING: do NOT modify this code without working with poppy - +  # there is another branch that will conflict heavily with any changes here. +INCLUDE(GoogleMock) + + +  IF(LL_TEST_VERBOSE) +    MESSAGE("LL_ADD_PROJECT_UNIT_TESTS UNITTEST_PROJECT_${project} sources: ${sources}") +  ENDIF(LL_TEST_VERBOSE) + +  # Start with the header and project-wide setup before making targets +  #project(UNITTEST_PROJECT_${project}) +  # Setup includes, paths, etc +  SET(alltest_SOURCE_FILES +    ${CMAKE_SOURCE_DIR}/test/test.cpp +    ${CMAKE_SOURCE_DIR}/test/lltut.cpp +    ) +  SET(alltest_DEP_TARGETS +    # needed by the test harness itself +    ${APRUTIL_LIBRARIES} +    ${APR_LIBRARIES} +    llcommon +    ) +  IF(NOT "${project}" STREQUAL "llmath") +    # add llmath as a dep unless the tested module *is* llmath! +    LIST(APPEND alltest_DEP_TARGETS +      llmath +      ) +  ENDIF(NOT "${project}" STREQUAL "llmath") +  SET(alltest_INCLUDE_DIRS +    ${LLMATH_INCLUDE_DIRS} +    ${LLCOMMON_INCLUDE_DIRS} +    ${LIBS_OPEN_DIR}/test +    ${GOOGLEMOCK_INCLUDE_DIRS} +    ) +  SET(alltest_LIBRARIES +    ${GOOGLEMOCK_LIBRARIES} +    ${PTHREAD_LIBRARY} +    ${WINDOWS_LIBRARIES} +    ) +  # Headers, for convenience in targets. +  SET(alltest_HEADER_FILES +    ${CMAKE_SOURCE_DIR}/test/test.h +    ) + +  # start the source test executable definitions +  SET(${project}_TEST_OUTPUT "") +  FOREACH (source ${sources}) +    STRING( REGEX REPLACE "(.*)\\.[^.]+$" "\\1" name ${source} ) +    STRING( REGEX REPLACE ".*\\.([^.]+)$" "\\1" extension ${source} ) +    IF(LL_TEST_VERBOSE) +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS UNITTEST_PROJECT_${project} individual source: ${source} (${name}.${extension})") +    ENDIF(LL_TEST_VERBOSE) + +    # +    # Per-codefile additional / external source, header, and include dir property extraction +    # +    # Source +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_SOURCE_FILES ${source} LL_TEST_ADDITIONAL_SOURCE_FILES) +    IF(${name}_test_additional_SOURCE_FILES MATCHES NOTFOUND) +      SET(${name}_test_additional_SOURCE_FILES "") +    ENDIF(${name}_test_additional_SOURCE_FILES MATCHES NOTFOUND) +    SET(${name}_test_SOURCE_FILES ${source} tests/${name}_test.${extension} ${alltest_SOURCE_FILES} ${${name}_test_additional_SOURCE_FILES} ) +    IF(LL_TEST_VERBOSE) +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_SOURCE_FILES ${${name}_test_SOURCE_FILES}") +    ENDIF(LL_TEST_VERBOSE) +    # Headers +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_HEADER_FILES ${source} LL_TEST_ADDITIONAL_HEADER_FILES) +    IF(${name}_test_additional_HEADER_FILES MATCHES NOTFOUND) +      SET(${name}_test_additional_HEADER_FILES "") +    ENDIF(${name}_test_additional_HEADER_FILES MATCHES NOTFOUND) +    SET(${name}_test_HEADER_FILES ${name}.h ${${name}_test_additional_HEADER_FILES}) +    set_source_files_properties(${${name}_test_HEADER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE) +    LIST(APPEND ${name}_test_SOURCE_FILES ${${name}_test_HEADER_FILES}) +    IF(LL_TEST_VERBOSE) +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_HEADER_FILES ${${name}_test_HEADER_FILES}") +    ENDIF(LL_TEST_VERBOSE) +    # Include dirs +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_INCLUDE_DIRS ${source} LL_TEST_ADDITIONAL_INCLUDE_DIRS) +    IF(${name}_test_additional_INCLUDE_DIRS MATCHES NOTFOUND) +      SET(${name}_test_additional_INCLUDE_DIRS "") +    ENDIF(${name}_test_additional_INCLUDE_DIRS MATCHES NOTFOUND) +    INCLUDE_DIRECTORIES(${alltest_INCLUDE_DIRS} ${${name}_test_additional_INCLUDE_DIRS} ) +    IF(LL_TEST_VERBOSE) +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_INCLUDE_DIRS ${${name}_test_additional_INCLUDE_DIRS}") +    ENDIF(LL_TEST_VERBOSE) + + +    # Setup target +    ADD_EXECUTABLE(PROJECT_${project}_TEST_${name} ${${name}_test_SOURCE_FILES}) +    SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}") + +    # +    # Per-codefile additional / external project dep and lib dep property extraction +    # +    # WARNING: it's REALLY IMPORTANT to not mix these. I guarantee it will not work in the future. + poppy 2009-04-19 +    # Projects +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_PROJECTS ${source} LL_TEST_ADDITIONAL_PROJECTS) +    IF(${name}_test_additional_PROJECTS MATCHES NOTFOUND) +      SET(${name}_test_additional_PROJECTS "") +    ENDIF(${name}_test_additional_PROJECTS MATCHES NOTFOUND) +    # Libraries +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_LIBRARIES ${source} LL_TEST_ADDITIONAL_LIBRARIES) +    IF(${name}_test_additional_LIBRARIES MATCHES NOTFOUND) +      SET(${name}_test_additional_LIBRARIES "") +    ENDIF(${name}_test_additional_LIBRARIES MATCHES NOTFOUND) +    IF(LL_TEST_VERBOSE) +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_PROJECTS ${${name}_test_additional_PROJECTS}") +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_LIBRARIES ${${name}_test_additional_LIBRARIES}") +    ENDIF(LL_TEST_VERBOSE) +    # Add to project +    TARGET_LINK_LIBRARIES(PROJECT_${project}_TEST_${name} ${alltest_LIBRARIES} ${alltest_DEP_TARGETS} ${${name}_test_additional_PROJECTS} ${${name}_test_additional_LIBRARIES} ) +    # Compile-time Definitions +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_CFLAGS ${source} LL_TEST_ADDITIONAL_CFLAGS) +     IF(NOT ${name}_test_additional_CFLAGS MATCHES NOTFOUND) +       SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name} PROPERTIES COMPILE_FLAGS ${${name}_test_additional_CFLAGS} ) +       IF(LL_TEST_VERBOSE) +         MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_CFLAGS ${${name}_test_additional_CFLAGS}") +       ENDIF(LL_TEST_VERBOSE) +     ENDIF(NOT ${name}_test_additional_CFLAGS MATCHES NOTFOUND) +      +    # +    # Setup test targets +    # +    GET_TARGET_PROPERTY(TEST_EXE PROJECT_${project}_TEST_${name} LOCATION) +    SET(TEST_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/PROJECT_${project}_TEST_${name}_ok.txt) +    SET(TEST_CMD ${TEST_EXE} --touch=${TEST_OUTPUT} --sourcedir=${CMAKE_CURRENT_SOURCE_DIR}) + +    # daveh - what configuration does this use? Debug? it's cmake-time, not build time. + poppy 2009-04-19 +    IF(LL_TEST_VERBOSE) +      MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_cmd  = ${TEST_CMD}") +    ENDIF(LL_TEST_VERBOSE) + +    SET_TEST_PATH(LD_LIBRARY_PATH) +    LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${TEST_CMD}) +    IF(LL_TEST_VERBOSE) +      MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_script  = ${TEST_SCRIPT_CMD}") +    ENDIF(LL_TEST_VERBOSE) +    # Add test  +    ADD_CUSTOM_COMMAND( +        OUTPUT ${TEST_OUTPUT} +        COMMAND ${TEST_SCRIPT_CMD} +        DEPENDS PROJECT_${project}_TEST_${name} +        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +        ) +    # Why not add custom target and add POST_BUILD command? +    # Slightly less uncertain behavior +    # (OUTPUT commands run non-deterministically AFAIK) + poppy 2009-04-19 +    # > I did not use a post build step as I could not make it notify of a  +    # > failure after the first time you build and fail a test. - daveh 2009-04-20 +    LIST(APPEND ${project}_TEST_OUTPUT ${TEST_OUTPUT}) +  ENDFOREACH (source) + +  # Add the test runner target per-project +  # (replaces old _test_ok targets all over the place) +  ADD_CUSTOM_TARGET(${project}_tests ALL DEPENDS ${${project}_TEST_OUTPUT}) +  ADD_DEPENDENCIES(${project} ${project}_tests) +ENDMACRO(LL_ADD_PROJECT_UNIT_TESTS) + +FUNCTION(LL_ADD_INTEGRATION_TEST  +    testname +    additional_source_files +    library_dependencies +# variable args +    ) +  if(TEST_DEBUG) +    message(STATUS "Adding INTEGRATION_TEST_${testname} - debug output is on") +  endif(TEST_DEBUG) +   +  SET(source_files +    tests/${testname}_test.cpp +    ${CMAKE_SOURCE_DIR}/test/test.cpp +    ${CMAKE_SOURCE_DIR}/test/lltut.cpp +    ${additional_source_files} +    ) + +  SET(libraries +    ${library_dependencies} +    ${GOOGLEMOCK_LIBRARIES} +    ${PTHREAD_LIBRARY} +    ) + +  # Add test executable build target +  if(TEST_DEBUG) +    message(STATUS "ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})") +  endif(TEST_DEBUG) +  ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files}) +  SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}") +  if(STANDALONE) +    SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES COMPILE_FLAGS -I"${TUT_INCLUDE_DIR}") +  endif(STANDALONE) + +  # Add link deps to the executable +  if(TEST_DEBUG) +    message(STATUS "TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries})") +  endif(TEST_DEBUG) +  TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries}) + +  # Create the test running command +  SET(test_command ${ARGN}) +  GET_TARGET_PROPERTY(TEST_EXE INTEGRATION_TEST_${testname} LOCATION) +  LIST(FIND test_command "{}" test_exe_pos) +  IF(test_exe_pos LESS 0) +    # The {} marker means "the full pathname of the test executable." +    # test_exe_pos -1 means we didn't find it -- so append the test executable +    # name to $ARGN, the variable part of the arg list. This is convenient +    # shorthand for both straightforward execution of the test program (empty +    # $ARGN) and for running a "wrapper" program of some kind accepting the +    # pathname of the test program as the last of its args. You need specify +    # {} only if the test program's pathname isn't the last argument in the +    # desired command line. +    LIST(APPEND test_command "${TEST_EXE}") +  ELSE (test_exe_pos LESS 0) +    # Found {} marker at test_exe_pos. Remove the {}... +    LIST(REMOVE_AT test_command test_exe_pos) +    # ...and replace it with the actual name of the test executable. +    LIST(INSERT test_command test_exe_pos "${TEST_EXE}") +  ENDIF (test_exe_pos LESS 0) + +  SET_TEST_PATH(LD_LIBRARY_PATH) +  LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${test_command}) + +  if(TEST_DEBUG) +    message(STATUS "TEST_SCRIPT_CMD: ${TEST_SCRIPT_CMD}") +  endif(TEST_DEBUG) + +  ADD_CUSTOM_COMMAND( +    TARGET INTEGRATION_TEST_${testname} +    POST_BUILD +    COMMAND ${TEST_SCRIPT_CMD} +    ) + +  # Use CTEST? Not sure how to yet... +  # ADD_TEST(INTEGRATION_TEST_RUNNER_${testname} ${TEST_SCRIPT_CMD}) + +ENDFUNCTION(LL_ADD_INTEGRATION_TEST) + +MACRO(SET_TEST_PATH LISTVAR) +  IF(WINDOWS) +    # We typically build/package only Release variants of third-party +    # libraries, so append the Release staging dir in case the library being +    # sought doesn't have a debug variant. +    set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR} ${SHARED_LIB_STAGING_DIR}/Release) +  ELSEIF(DARWIN) +    # We typically build/package only Release variants of third-party +    # libraries, so append the Release staging dir in case the library being +    # sought doesn't have a debug variant. +    set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources ${SHARED_LIB_STAGING_DIR}/Release/Resources /usr/lib) +  ELSE(WINDOWS) +    # Linux uses a single staging directory anyway. +    IF (STANDALONE) +      set(${LISTVAR} ${CMAKE_BINARY_DIR}/llcommon /usr/lib /usr/local/lib) +    ELSE (STANDALONE) +      set(${LISTVAR} ${SHARED_LIB_STAGING_DIR} /usr/lib) +    ENDIF (STANDALONE) +  ENDIF(WINDOWS) +ENDMACRO(SET_TEST_PATH) diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake index d1ab264a41..17e211cb99 100644 --- a/indra/cmake/LLCommon.cmake +++ b/indra/cmake/LLCommon.cmake @@ -13,7 +13,14 @@ set(LLCOMMON_INCLUDE_DIRS      ${Boost_INCLUDE_DIRS}      ) -set(LLCOMMON_LIBRARIES llcommon) +if (LINUX) +    # In order to support using ld.gold on linux, we need to explicitely +    # specify all libraries that llcommon uses. +    # llcommon uses `clock_gettime' which is provided by librt on linux. +    set(LLCOMMON_LIBRARIES llcommon rt) +else (LINUX) +    set(LLCOMMON_LIBRARIES llcommon) +endif (LINUX)  add_definitions(${TCMALLOC_FLAG}) diff --git a/indra/cmake/LLConvexDecomposition.cmake b/indra/cmake/LLConvexDecomposition.cmake new file mode 100644 index 0000000000..8e44504782 --- /dev/null +++ b/indra/cmake/LLConvexDecomposition.cmake @@ -0,0 +1,12 @@ +# -*- cmake -*- +include(Prebuilt) + +set(LLCONVEXDECOMP_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) +   +if (INSTALL_PROPRIETARY AND NOT STANDALONE) +  use_prebuilt_binary(llconvexdecomposition) +  set(LLCONVEXDECOMP_LIBRARY llconvexdecomposition) +else (INSTALL_PROPRIETARY AND NOT STANDALONE) +  use_prebuilt_binary(llconvexdecompositionstub) +  set(LLCONVEXDECOMP_LIBRARY llconvexdecompositionstub) +endif (INSTALL_PROPRIETARY AND NOT STANDALONE) diff --git a/indra/cmake/LLKDU.cmake b/indra/cmake/LLKDU.cmake index 27c8ada686..e478b01f84 100644 --- a/indra/cmake/LLKDU.cmake +++ b/indra/cmake/LLKDU.cmake @@ -1,7 +1,21 @@  # -*- cmake -*- -include(Prebuilt) -if (INSTALL_PROPRIETARY AND NOT STANDALONE) +# USE_KDU can be set when launching cmake as an option using the argument -DUSE_KDU:BOOL=ON +# When building using proprietary binaries though (i.e. having access to LL private servers),  +# we always build with KDU +if (INSTALL_PROPRIETARY) +  set(USE_KDU ON CACHE BOOL "Use Kakadu library.") +endif (INSTALL_PROPRIETARY) + +if (USE_KDU) +  include(Prebuilt)    use_prebuilt_binary(kdu) -  set(LLKDU_LIBRARY llkdu) -endif (INSTALL_PROPRIETARY AND NOT STANDALONE) +  if (WINDOWS) +    set(KDU_LIBRARY kdu.lib) +  else (WINDOWS) +    set(KDU_LIBRARY libkdu.a) +  endif (WINDOWS) +  set(KDU_INCLUDE_DIR ${AUTOBUILD_INSTALL_DIR}/include/kdu) +  set(LLKDU_INCLUDE_DIRS ${LIBS_OPEN_DIR}/llkdu) +  set(LLKDU_LIBRARIES llkdu) +endif (USE_KDU) diff --git a/indra/cmake/LLPlugin.cmake b/indra/cmake/LLPlugin.cmake index 9722f16c3c..399cb332dd 100644 --- a/indra/cmake/LLPlugin.cmake +++ b/indra/cmake/LLPlugin.cmake @@ -5,4 +5,10 @@ set(LLPLUGIN_INCLUDE_DIRS      ${LIBS_OPEN_DIR}/llplugin      ) -set(LLPLUGIN_LIBRARIES llplugin) +if (LINUX) +    # In order to support using ld.gold on linux, we need to explicitely +    # specify all libraries that llplugin uses. +    set(LLPLUGIN_LIBRARIES llplugin pthread) +else (LINUX) +    set(LLPLUGIN_LIBRARIES llplugin) +endif (LINUX) diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake index d397b78f1c..f15a2c2649 100644 --- a/indra/cmake/LLPrimitive.cmake +++ b/indra/cmake/LLPrimitive.cmake @@ -1,7 +1,33 @@  # -*- cmake -*- +# these should be moved to their own cmake file +include(Prebuilt) +use_prebuilt_binary(colladadom) +use_prebuilt_binary(pcre) +use_prebuilt_binary(libxml) +  set(LLPRIMITIVE_INCLUDE_DIRS      ${LIBS_OPEN_DIR}/llprimitive      ) +if (WINDOWS) +    set(LLPRIMITIVE_LIBRARIES  +        debug llprimitive +        optimized llprimitive +        debug libcollada14dom22-d +        optimized libcollada14dom22 +        debug libboost_filesystem-vc100-mt-gd-1_45 +        optimized libboost_filesystem-vc100-mt-1_45 +        debug libboost_system-vc100-mt-gd-1_45 +        optimized libboost_system-vc100-mt-1_45 +        ) +else (WINDOWS) +    set(LLPRIMITIVE_LIBRARIES  +        llprimitive +        collada14dom +        minizip +        xml2 +        pcrecpp +        pcre +        ) +endif (WINDOWS) -set(LLPRIMITIVE_LIBRARIES llprimitive) diff --git a/indra/cmake/LLRender.cmake b/indra/cmake/LLRender.cmake index c47e8878e9..8427928151 100644 --- a/indra/cmake/LLRender.cmake +++ b/indra/cmake/LLRender.cmake @@ -1,9 +1,11 @@  # -*- cmake -*-  include(FreeType) +include(GLH)  set(LLRENDER_INCLUDE_DIRS      ${LIBS_OPEN_DIR}/llrender +    ${GLH_INCLUDE_DIR}      )  if (SERVER AND LINUX) diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake index e29076c738..14dd67f32f 100644 --- a/indra/cmake/LLSharedLibs.cmake +++ b/indra/cmake/LLSharedLibs.cmake @@ -38,18 +38,17 @@ endmacro(ll_deploy_sharedlibs_command)  # ll_stage_sharedlib  # Performs config and adds a copy command for a sharedlib target.  macro(ll_stage_sharedlib DSO_TARGET) -  if(SHARED_LIB_STAGING_DIR) -    # target gets written to the DLL staging directory. -    # Also this directory is shared with RunBuildTest.cmake, y'know, for the tests. -    set_target_properties(${DSO_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SHARED_LIB_STAGING_DIR}) -    if(NOT WINDOWS) -      get_target_property(DSO_PATH ${DSO_TARGET} LOCATION) -      get_filename_component(DSO_FILE ${DSO_PATH} NAME) -      if(DARWIN) -        set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources) -      else(DARWIN) -        set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}) -      endif(DARWIN) +  # target gets written to the DLL staging directory. +  # Also this directory is shared with RunBuildTest.cmake, y'know, for the tests. +  set_target_properties(${DSO_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SHARED_LIB_STAGING_DIR}) +  if(NOT WINDOWS) +    get_target_property(DSO_PATH ${DSO_TARGET} LOCATION) +    get_filename_component(DSO_FILE ${DSO_PATH} NAME) +    if(DARWIN) +      set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources) +    else(DARWIN) +      set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}) +    endif(DARWIN)        # *TODO - maybe make this a symbolic link? -brad        add_custom_command( @@ -63,7 +62,6 @@ macro(ll_stage_sharedlib DSO_TARGET)            COMMENT "Copying llcommon to the staging folder."          )      endif(NOT WINDOWS) -  endif(SHARED_LIB_STAGING_DIR)    if (DARWIN)      set_target_properties(${DSO_TARGET} PROPERTIES diff --git a/indra/cmake/LLTestCommand.cmake b/indra/cmake/LLTestCommand.cmake index 554559edbd..b5a0580a90 100644 --- a/indra/cmake/LLTestCommand.cmake +++ b/indra/cmake/LLTestCommand.cmake @@ -1,3 +1,4 @@ +include(Python)  MACRO(LL_TEST_COMMAND OUTVAR LD_LIBRARY_PATH)    # nat wonders how Kitware can use the term 'function' for a construct that    # cannot return a value. And yet, variables you set inside a FUNCTION are diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake index a5b9cf47a4..b4bb9a078a 100644 --- a/indra/cmake/LLWindow.cmake +++ b/indra/cmake/LLWindow.cmake @@ -18,7 +18,7 @@ else (STANDALONE)      use_prebuilt_binary(SDL)      set (SDL_FOUND TRUE)      set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/i686-linux) -    set (SDL_LIBRARY SDL) +    set (SDL_LIBRARY SDL directfb fusion direct)    endif (LINUX AND VIEWER)  endif (STANDALONE) diff --git a/indra/cmake/LScript.cmake b/indra/cmake/LScript.cmake index 86bfcb7440..21e78fc2c0 100644 --- a/indra/cmake/LScript.cmake +++ b/indra/cmake/LScript.cmake @@ -13,4 +13,4 @@ set(LSCRIPT_LIBRARIES      lscript_library      ) -set(LSCRIPT_EXECUTE_MONO_LIBRARIES lscript_execute_mono)
\ No newline at end of file +set(LSCRIPT_EXECUTE_MONO_LIBRARIES lscript_execute_mono) diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake index bca99caf2a..47f944f9a5 100644 --- a/indra/cmake/Linking.cmake +++ b/indra/cmake/Linking.cmake @@ -1,32 +1,47 @@  # -*- cmake -*- -if (NOT STANDALONE) -  if (WINDOWS) -    set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib) -    set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release) -    set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug) -    set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs") -    set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged executables") -  elseif (LINUX) -    if (VIEWER) -      set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release_client) -    else (VIEWER) -      set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release) -    endif (VIEWER) -    set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS}) -    set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS}) -    set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib CACHE FILEPATH "Location of staged .sos") -    set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin CACHE FILEPATH "Location of staged executables") -  elseif (DARWIN) -    set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release) -    set(ARCH_PREBUILT_DIRS ${ARCH_PREBUILT_DIRS_RELEASE}) -    set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS_RELEASE}) -    set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs") -    set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)" CACHE FILEPATH "Location of staged executables") -  endif (WINDOWS) -endif (NOT STANDALONE) +include(Variables) -link_directories(${ARCH_PREBUILT_DIRS}) +set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib) +set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release) +set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug) +if (WINDOWS) +  set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) +  set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) +elseif (LINUX) +  set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib) +  set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin) +elseif (DARWIN) +  set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) +  set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs") +endif (WINDOWS) + +# Autobuild packages must provide 'release' versions of libraries, but may provide versions for +# specific build types.  AUTOBUILD_LIBS_INSTALL_DIRS lists first the build type directory and then +# the 'release' directory (as a default fallback). +# *NOTE - we have to take special care to use CMAKE_CFG_INTDIR on IDE generators (like mac and +# windows) and CMAKE_BUILD_TYPE on Makefile based generators (like linux).  The reason for this is +# that CMAKE_BUILD_TYPE is essentially meaningless at configuration time for IDE generators and +# CMAKE_CFG_INTDIR is meaningless at build time for Makefile generators +if(WINDOWS OR DARWIN) +  # the cmake xcode and VS generators implicitly append ${CMAKE_CFG_INTDIR} to the library paths for us +  # fortunately both windows and darwin are case insensitive filesystems so this works. +  set(AUTOBUILD_LIBS_INSTALL_DIRS "${AUTOBUILD_INSTALL_DIR}/lib/") +else(WINDOWS OR DARWIN) +  # else block is for linux and any other makefile based generators +  string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER) +  set(AUTOBUILD_LIBS_INSTALL_DIRS ${AUTOBUILD_INSTALL_DIR}/lib/${CMAKE_BUILD_TYPE_LOWER}) +endif(WINDOWS OR DARWIN) + +if (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release") +  # When we're building something other than Release, append the +  # packages/lib/release directory to deal with autobuild packages that don't +  # provide (e.g.) lib/debug libraries. +  list(APPEND AUTOBUILD_LIBS_INSTALL_DIRS ${ARCH_PREBUILT_DIRS_RELEASE}) +  message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}, extending AUTOBUILD_LIBS_INSTALL_DIRS") +endif (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release") +message(STATUS "For ${CMAKE_BUILD_TYPE}, AUTOBUILD_LIBS_INSTALL_DIRS: ${AUTOBUILD_LIBS_INSTALL_DIRS}") +link_directories(${AUTOBUILD_LIBS_INSTALL_DIRS})  if (LINUX)    set(DL_LIBRARY dl) diff --git a/indra/cmake/MonoEmbed.cmake b/indra/cmake/MonoEmbed.cmake index 0f1f23309c..30890aed21 100644 --- a/indra/cmake/MonoEmbed.cmake +++ b/indra/cmake/MonoEmbed.cmake @@ -37,9 +37,9 @@ IF (DARWIN)  ELSE (DARWIN) -  SET(MONO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)   +  SET(MONO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)      SET(GLIB_2_0_PLATFORM_INCLUDE_DIR -    ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0) +    ${LIBS_PREBUILT_DIR}/include/glib-2.0)    SET(GLIB_2_0_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/glib-2.0)    INCLUDE_DIRECTORIES( diff --git a/indra/cmake/MySQL.cmake b/indra/cmake/MySQL.cmake index e591fbc3d8..218482449d 100644 --- a/indra/cmake/MySQL.cmake +++ b/indra/cmake/MySQL.cmake @@ -7,7 +7,7 @@ use_prebuilt_binary(mysql)  if (LINUX)    if (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")      set(MYSQL_LIBRARIES mysqlclient) -    set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) +    set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)    else (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")      # Use the native MySQL library on a 64-bit system.      set(MYSQL_FIND_QUIETLY ON) @@ -16,9 +16,9 @@ if (LINUX)    endif (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")  elseif (WINDOWS)    set(MYSQL_LIBRARIES mysqlclient) -  set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) +  set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)  elseif (DARWIN) -  set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) +  set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)    set(MYSQL_LIBRARIES      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libmysqlclient.a      debug ${ARCH_PREBUILT_DIRS_DEBUG}/libmysqlclient.a diff --git a/indra/cmake/NDOF.cmake b/indra/cmake/NDOF.cmake index dad74e99b1..be6fe415f2 100644 --- a/indra/cmake/NDOF.cmake +++ b/indra/cmake/NDOF.cmake @@ -1,14 +1,32 @@  # -*- cmake -*-  include(Prebuilt) -use_prebuilt_binary(ndofdev) +set(NDOF ON CACHE BOOL "Use NDOF space navigator joystick library.") -if (WINDOWS OR DARWIN OR LINUX) +if (NDOF) +  if (STANDALONE) +    set(NDOF_FIND_REQUIRED ON) +    include(FindNDOF) +  else (STANDALONE) +    use_prebuilt_binary(ndofdev) + +    if (WINDOWS) +      set(NDOF_LIBRARY libndofdev) +    elseif (DARWIN OR LINUX) +      set(NDOF_LIBRARY ndofdev) +    endif (WINDOWS) + +    set(NDOF_INCLUDE_DIR ${ARCH_PREBUILT_DIRS}/include/ndofdev) +    set(NDOF_FOUND 1) +  endif (STANDALONE) +endif (NDOF) + +if (NDOF_FOUND)    add_definitions(-DLIB_NDOF=1) -endif (WINDOWS OR DARWIN OR LINUX) +  include_directories(${NDOF_INCLUDE_DIR}) +else (NDOF_FOUND) +  message(STATUS "Building without N-DoF joystick support") +  set(NDOF_INCLUDE_DIR "") +  set(NDOF_LIBRARY "") +endif (NDOF_FOUND) -if (WINDOWS) -  set(NDOF_LIBRARY libndofdev) -elseif (DARWIN OR LINUX) -  set(NDOF_LIBRARY ndofdev) -endif (WINDOWS) diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake index d01c680ed1..a3e1fb924e 100644 --- a/indra/cmake/OPENAL.cmake +++ b/indra/cmake/OPENAL.cmake @@ -9,18 +9,26 @@ else (LINUX)  endif (LINUX)  if (OPENAL) +  set(OPENAL_LIB_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/AL")    if (STANDALONE)      include(FindPkgConfig)      include(FindOpenAL)      pkg_check_modules(OPENAL_LIB REQUIRED openal)      pkg_check_modules(FREEALUT_LIB REQUIRED freealut)    else (STANDALONE) -    use_prebuilt_binary(openal-soft) +    use_prebuilt_binary(openal_soft)    endif (STANDALONE) -  set(OPENAL_LIBRARIES  -    openal -    alut +  if(WINDOWS) +    set(OPENAL_LIBRARIES  +      OpenAL32 +      alut      ) +  else() +    set(OPENAL_LIBRARIES  +      openal +      alut +    ) +  endif()  endif (OPENAL)  if (OPENAL) diff --git a/indra/cmake/OpenGL.cmake b/indra/cmake/OpenGL.cmake index 6a2b6811af..0a3dd976b4 100644 --- a/indra/cmake/OpenGL.cmake +++ b/indra/cmake/OpenGL.cmake @@ -2,8 +2,7 @@  include(Prebuilt)  if (NOT STANDALONE) -  use_prebuilt_binary(GL) -  # possible glh_linear should have its own .cmake file instead +  use_prebuilt_binary(glext)    use_prebuilt_binary(glh_linear) -  set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) +  set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)  endif (NOT STANDALONE) diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake index 81584c09ea..2704912eb5 100644 --- a/indra/cmake/OpenSSL.cmake +++ b/indra/cmake/OpenSSL.cmake @@ -11,13 +11,13 @@ else (STANDALONE)    if (WINDOWS)      set(OPENSSL_LIBRARIES ssleay32 libeay32)    else (WINDOWS) -    set(OPENSSL_LIBRARIES ssl) +    set(OPENSSL_LIBRARIES ssl crypto)    endif (WINDOWS) -  set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include) +  set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)  endif (STANDALONE)  if (LINUX)    set(CRYPTO_LIBRARIES crypto)  elseif (DARWIN) -  set(CRYPTO_LIBRARIES llcrypto) +  set(CRYPTO_LIBRARIES crypto)  endif (LINUX) diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake index f6522d9e2f..913c575672 100644 --- a/indra/cmake/PNG.cmake +++ b/indra/cmake/PNG.cmake @@ -8,6 +8,14 @@ if (STANDALONE)    include(FindPNG)  else (STANDALONE)    use_prebuilt_binary(libpng) -  set(PNG_LIBRARIES png12) -  set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng12) +  if (WINDOWS) +    set(PNG_LIBRARIES libpng15) +    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15) +  elseif(DARWIN) +    set(PNG_LIBRARIES png15) +    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15) +  else() +    set(PNG_LIBRARIES png15) +    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15) +  endif()  endif (STANDALONE) diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake index a91519278c..dbb4dfc46c 100644 --- a/indra/cmake/Prebuilt.cmake +++ b/indra/cmake/Prebuilt.cmake @@ -1,44 +1,53 @@  # -*- cmake -*- -include(Python) -include(FindSCP) +include(FindAutobuild) +if(INSTALL_PROPRIETARY) +  include(FindSCP) +endif(INSTALL_PROPRIETARY) +# The use_prebuilt_binary macro handles automated installation of package +# dependencies using autobuild.  The goal is that 'autobuild install' should +# only be run when we know we need to install a new package.  This should be +# the case in a clean checkout, or if autobuild.xml has been updated since the +# last run (encapsulated by the file ${CMAKE_BINARY_DIR}/temp/sentinel_installed), +# or if a previous attempt to install the package has failed (the exit status +# of previous attempts is serialized in the file +# ${CMAKE_BINARY_DIR}/temp/${_binary}_installed)  macro (use_prebuilt_binary _binary) -  if (NOT STANDALONE) -    if(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) -      if(INSTALL_PROPRIETARY) -        include(FindSCP) -        if(DEBUG_PREBUILT) -          message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. --scp=${SCP_EXECUTABLE} ${_binary}") -        endif(DEBUG_PREBUILT) -        execute_process(COMMAND ${PYTHON_EXECUTABLE} -          install.py  -          --install-dir=${CMAKE_SOURCE_DIR}/.. -          --scp=${SCP_EXECUTABLE} -          ${_binary} -          WORKING_DIRECTORY ${SCRIPTS_DIR} -          RESULT_VARIABLE ${_binary}_installed -          ) -      else(INSTALL_PROPRIETARY) -        if(DEBUG_PREBUILT) -          message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. ${_binary}") -        endif(DEBUG_PREBUILT) -        execute_process(COMMAND ${PYTHON_EXECUTABLE} -          install.py  -          --install-dir=${CMAKE_SOURCE_DIR}/.. -          ${_binary} -          WORKING_DIRECTORY ${SCRIPTS_DIR} -          RESULT_VARIABLE ${_binary}_installed -          ) -      endif(INSTALL_PROPRIETARY) +  if (NOT DEFINED STANDALONE_${_binary}) +    set(STANDALONE_${_binary} ${STANDALONE}) +  endif (NOT DEFINED STANDALONE_${_binary}) + +  if (NOT STANDALONE_${_binary}) +    if("${${_binary}_installed}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/${_binary}_installed") +      file(READ ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${_binary}_installed") +      if(DEBUG_PREBUILT) +        message(STATUS "${_binary}_installed: \"${${_binary}_installed}\"") +      endif(DEBUG_PREBUILT) +    endif("${${_binary}_installed}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/${_binary}_installed") + +    if(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0) +      if(DEBUG_PREBUILT) +        message("cd ${CMAKE_SOURCE_DIR} && ${AUTOBUILD_EXECUTABLE} install +        --install-dir=${AUTOBUILD_INSTALL_DIR} +        --skip-license-check +        ${_binary} ") +      endif(DEBUG_PREBUILT) +      execute_process(COMMAND "${AUTOBUILD_EXECUTABLE}" +        install +        --install-dir=${AUTOBUILD_INSTALL_DIR} +        --skip-license-check +        ${_binary} +        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" +        RESULT_VARIABLE ${_binary}_installed +        )        file(WRITE ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${${_binary}_installed}") -    else(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) -      set(${_binary}_installed 0) -    endif(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed) +    endif(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0) +      if(NOT ${_binary}_installed EQUAL 0)        message(FATAL_ERROR                "Failed to download or unpack prebuilt '${_binary}'."                " Process returned ${${_binary}_installed}.")      endif (NOT ${_binary}_installed EQUAL 0) -  endif (NOT STANDALONE) +  endif (NOT STANDALONE_${_binary})  endmacro (use_prebuilt_binary _binary) diff --git a/indra/cmake/Pth.cmake b/indra/cmake/Pth.cmake deleted file mode 100644 index a28f6ec696..0000000000 --- a/indra/cmake/Pth.cmake +++ /dev/null @@ -1,21 +0,0 @@ -# -*- cmake -*- -include(Prebuilt) - -set(PTH_FIND_QUIETLY ON) -set(PTH_FIND_REQUIRED ON) - -if (STANDALONE) -#  ?? How would I construct FindPTH.cmake? This file was cloned from -#  CURL.cmake, which uses include(FindCURL), but there's no FindCURL.cmake? -#  include(FindPTH) -else (STANDALONE) -  # This library is only needed to support Boost.Coroutine, and only on Mac. -  if (DARWIN) -    use_prebuilt_binary(pth) -    set(PTH_LIBRARIES pth) -    set(PTH_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) -  else (DARWIN) -    set(PTH_LIBRARIES) -    set(PTH_INCLUDE_DIRS) -  endif (DARWIN) -endif (STANDALONE) diff --git a/indra/cmake/PulseAudio.cmake b/indra/cmake/PulseAudio.cmake index e918de0198..360a971058 100644 --- a/indra/cmake/PulseAudio.cmake +++ b/indra/cmake/PulseAudio.cmake @@ -1,7 +1,7 @@  # -*- cmake -*-  include(Prebuilt) -set(PULSEAUDIO ON CACHE BOOL "Build with PulseAudio support, if available.") +set(PULSEAUDIO OFF CACHE BOOL "Build with PulseAudio support, if available.")  if (PULSEAUDIO)    if (STANDALONE) diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake index 02f432e3c1..012f4e20d8 100644 --- a/indra/cmake/QuickTimePlugin.cmake +++ b/indra/cmake/QuickTimePlugin.cmake @@ -33,7 +33,7 @@ elseif (WINDOWS)    endif (DEBUG_QUICKTIME_LIBRARY AND RELEASE_QUICKTIME_LIBRARY)    include_directories( -    ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/quicktime +    ${LIBS_PREBUILT_DIR}/include/quicktime      "${QUICKTIME_SDK_DIR}\\CIncludes"      )  endif (DARWIN) diff --git a/indra/cmake/TemplateCheck.cmake b/indra/cmake/TemplateCheck.cmake index 90d58d93ad..2fada2eda9 100644 --- a/indra/cmake/TemplateCheck.cmake +++ b/indra/cmake/TemplateCheck.cmake @@ -5,11 +5,10 @@ include(Python)  macro (check_message_template _target)    add_custom_command(        TARGET ${_target} -      POST_BUILD +      PRE_LINK        COMMAND ${PYTHON_EXECUTABLE} -      ARGS ${SCRIPTS_DIR}/md5check.py -           3f19d130400c547de36278a6b6f9b028 -           ${SCRIPTS_DIR}/messages/message_template.msg +      ARGS ${SCRIPTS_DIR}/template_verifier.py +           --mode=development --cache_master --master_url=${TEMPLATE_VERIFIER_MASTER_URL} ${TEMPLATE_VERIFIER_OPTIONS}        COMMENT "Verifying message template - See http://wiki.secondlife.com/wiki/Template_verifier.py"        )  endmacro (check_message_template) diff --git a/indra/cmake/Tut.cmake b/indra/cmake/Tut.cmake index 784560471d..7488e9dcb0 100644 --- a/indra/cmake/Tut.cmake +++ b/indra/cmake/Tut.cmake @@ -1,12 +1,6 @@  # -*- cmake -*-  include(Prebuilt) -set(TUT_FIND_REQUIRED TRUE) -set(TUT_FIND_QUIETLY TRUE) - -if (STANDALONE) -  include(FindTut) -  include_directories(${TUT_INCLUDE_DIR}) -else (STANDALONE) +if (NOT STANDALONE)    use_prebuilt_binary(tut) -endif (STANDALONE) +endif(NOT STANDALONE) diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake index f529f5b644..91e5258fb7 100644 --- a/indra/cmake/UI.cmake +++ b/indra/cmake/UI.cmake @@ -51,11 +51,11 @@ else (STANDALONE)    endif (LINUX)    include_directories ( -      ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include +      ${LIBS_PREBUILT_DIR}/include        ${LIBS_PREBUILT_DIR}/include        )    foreach(include ${${LL_ARCH}_INCLUDES}) -      include_directories(${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/${include}) +      include_directories(${LIBS_PREBUILT_DIR}/include/${include})    endforeach(include)  endif (STANDALONE) diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake index 5dc0cabf03..4cbf7aa043 100644 --- a/indra/cmake/Variables.cmake +++ b/indra/cmake/Variables.cmake @@ -17,6 +17,10 @@  # Relative and absolute paths to subtrees. +if(NOT DEFINED COMMON_CMAKE_DIR) +    set(COMMON_CMAKE_DIR "${CMAKE_SOURCE_DIR}/cmake") +endif(NOT DEFINED COMMON_CMAKE_DIR) +  set(LIBS_CLOSED_PREFIX)  set(LIBS_OPEN_PREFIX)  set(LIBS_SERVER_PREFIX) @@ -25,22 +29,41 @@ set(SERVER_PREFIX)  set(VIEWER_PREFIX)  set(INTEGRATION_TESTS_PREFIX)  set(LL_TESTS ON CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation") +set(INCREMENTAL_LINK OFF CACHE BOOL "Use incremental linking on win32 builds (enable for faster links on some machines)") + +if(LIBS_CLOSED_DIR) +  file(TO_CMAKE_PATH "${LIBS_CLOSED_DIR}" LIBS_CLOSED_DIR) +else(LIBS_CLOSED_DIR) +  set(LIBS_CLOSED_DIR ${CMAKE_SOURCE_DIR}/${LIBS_CLOSED_PREFIX}) +endif(LIBS_CLOSED_DIR) +if(LIBS_COMMON_DIR) +  file(TO_CMAKE_PATH "${LIBS_COMMON_DIR}" LIBS_COMMON_DIR) +else(LIBS_COMMON_DIR) +  set(LIBS_COMMON_DIR ${CMAKE_SOURCE_DIR}/${LIBS_OPEN_PREFIX}) +endif(LIBS_COMMON_DIR) +set(LIBS_OPEN_DIR ${LIBS_COMMON_DIR}) -set(LIBS_CLOSED_DIR ${CMAKE_SOURCE_DIR}/${LIBS_CLOSED_PREFIX}) -set(LIBS_OPEN_DIR ${CMAKE_SOURCE_DIR}/${LIBS_OPEN_PREFIX})  set(LIBS_SERVER_DIR ${CMAKE_SOURCE_DIR}/${LIBS_SERVER_PREFIX})  set(SCRIPTS_DIR ${CMAKE_SOURCE_DIR}/${SCRIPTS_PREFIX})  set(SERVER_DIR ${CMAKE_SOURCE_DIR}/${SERVER_PREFIX})  set(VIEWER_DIR ${CMAKE_SOURCE_DIR}/${VIEWER_PREFIX}) -set(LIBS_PREBUILT_DIR ${CMAKE_SOURCE_DIR}/../libraries CACHE PATH +set(AUTOBUILD_INSTALL_DIR ${CMAKE_BINARY_DIR}/packages) + +set(LIBS_PREBUILT_DIR ${AUTOBUILD_INSTALL_DIR} CACHE PATH      "Location of prebuilt libraries.")  if (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)    # We use this as a marker that you can try to use the proprietary libraries.    set(INSTALL_PROPRIETARY ON CACHE BOOL "Install proprietary binaries")  endif (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake) +set(TEMPLATE_VERIFIER_OPTIONS "" CACHE STRING "Options for scripts/template_verifier.py") +set(TEMPLATE_VERIFIER_MASTER_URL "http://bitbucket.org/lindenlab/master-message-template/raw/tip/message_template.msg" CACHE STRING "Location of the master message template") +if (NOT CMAKE_BUILD_TYPE) +  set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING +      "Build type.  One of: Debug Release RelWithDebInfo" FORCE) +endif (NOT CMAKE_BUILD_TYPE)  if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")    set(WINDOWS ON BOOL FORCE) @@ -54,20 +77,19 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")    set(LINUX ON BOOl FORCE)    # If someone has specified a word size, use that to determine the -  # architecture.  Otherwise, let the compiler specify the word size. -  # Using uname will break under chroots and other cross arch compiles. RC +  # architecture.  Otherwise, let the architecture specify the word size.    if (WORD_SIZE EQUAL 32)      set(ARCH i686)    elseif (WORD_SIZE EQUAL 64)      set(ARCH x86_64)    else (WORD_SIZE EQUAL 32) -    if(CMAKE_SIZEOF_VOID_P MATCHES 4) -      set(ARCH i686) -      set(WORD_SIZE 32) -    else(CMAKE_SIZEOF_VOID_P MATCHES 4) -      set(ARCH x86_64) +    execute_process(COMMAND uname -m COMMAND sed s/i.86/i686/ +                    OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) +    if (ARCH STREQUAL x86_64)        set(WORD_SIZE 64) -    endif(CMAKE_SIZEOF_VOID_P MATCHES 4) +    else (ARCH STREQUAL x86_64) +      set(WORD_SIZE 32) +    endif (ARCH STREQUAL x86_64)    endif (WORD_SIZE EQUAL 32)    set(LL_ARCH ${ARCH}_linux) @@ -76,25 +98,12 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")  if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")    set(DARWIN 1) - -  # NOTE: If specifying a different SDK with CMAKE_OSX_SYSROOT at configure -  # time you should also specify CMAKE_OSX_DEPLOYMENT_TARGET explicitly, -  # otherwise CMAKE_OSX_SYSROOT will be overridden here. We can't just check -  # for it being unset, as it gets set to the system default :( - -  # Default to building against the 10.4 SDK if no deployment target is -  # specified. -  if (NOT CMAKE_OSX_DEPLOYMENT_TARGET) -    # NOTE: setting -isysroot is NOT adequate: http://lists.apple.com/archives/Xcode-users/2007/Oct/msg00696.html -    # see http://public.kitware.com/Bug/view.php?id=9959 + poppy -    set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk) -    set(CMAKE_OSX_DEPLOYMENT_TARGET 10.4) -  endif (NOT CMAKE_OSX_DEPLOYMENT_TARGET) - -  # GCC 4.2 is incompatible with the MacOSX 10.4 SDK -  if (${CMAKE_OSX_SYSROOT} MATCHES "10.4u") -    set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.0") -  endif (${CMAKE_OSX_SYSROOT} MATCHES "10.4u") +   +  # To support a different SDK update these Xcode settings: +  set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5) +  set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk) +  set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.0") +  set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf-with-dsym)    # NOTE: To attempt an i386/PPC Universal build, add this on the configure line:    # -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc' @@ -125,7 +134,9 @@ set(VIEWER ON CACHE BOOL "Build Second Life viewer.")  set(VIEWER_CHANNEL "LindenDeveloper" CACHE STRING "Viewer Channel Name")  set(VIEWER_LOGIN_CHANNEL ${VIEWER_CHANNEL} CACHE STRING "Fake login channel for A/B Testing") +set(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside")  set(STANDALONE OFF CACHE BOOL "Do not use Linden-supplied prebuilt libraries.") +set(UNATTENDED OFF CACHE BOOL "Should be set to ON for building with VC Express editions.")  if (NOT STANDALONE AND EXISTS ${CMAKE_SOURCE_DIR}/llphysics)      set(SERVER ON CACHE BOOL "Build Second Life server software.") @@ -144,3 +155,4 @@ endif (LINUX AND SERVER AND VIEWER)  set(USE_PRECOMPILED_HEADERS ON CACHE BOOL "Enable use of precompiled header directives where supported.")  source_group("CMake Rules" FILES CMakeLists.txt) + diff --git a/indra/cmake/VisualLeakDetector.cmake b/indra/cmake/VisualLeakDetector.cmake new file mode 100644 index 0000000000..d3ba554e46 --- /dev/null +++ b/indra/cmake/VisualLeakDetector.cmake @@ -0,0 +1,15 @@ +# -*- cmake -*- + +if (VIEWER) + +  set(INCLUDE_VLD_CMAKE OFF CACHE BOOL "Build the Windows viewer with Visual Leak Detector turned on or off") + +  if (INCLUDE_VLD_CMAKE) + +    if (WINDOWS) +      add_definitions(-DINCLUDE_VLD=1) +    endif (WINDOWS) + +  endif (INCLUDE_VLD_CMAKE) + +endif (VIEWER) diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake index 12ba1b1b35..d9df78bfc8 100644 --- a/indra/cmake/WebKitLibPlugin.cmake +++ b/indra/cmake/WebKitLibPlugin.cmake @@ -3,57 +3,84 @@ include(Linking)  include(Prebuilt)  if (STANDALONE) -  set(WEBKITLIBPLUGIN OFF CACHE BOOL -      "WEBKITLIBPLUGIN support for the llplugin/llmedia test apps.") +  # The minimal version, 4.4.3, is rather arbitrary: it's the version in Debian/Lenny. +  find_package(Qt4 4.4.3 COMPONENTS QtCore QtGui QtNetwork QtOpenGL QtWebKit REQUIRED) +  include(${QT_USE_FILE}) +  set(QTDIR $ENV{QTDIR}) +  if (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin") +    message(FATAL_ERROR "\"${QT_BINARY_DIR}\" is unequal \"${QTDIR}/bin\"; " +      "Qt is found by looking for qmake in your PATH. " +      "Please set your PATH such that 'qmake' is found in \$QTDIR/bin, " +      "or unset QTDIR if the found Qt is correct.") +    endif (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin") +  find_package(LLQtWebkit REQUIRED QUIET) +  # Add the plugins. +  set(QT_PLUGIN_LIBRARIES) +  foreach(qlibname qgif qjpeg) +    find_library(QT_PLUGIN_${qlibname} ${qlibname} PATHS ${QT_PLUGINS_DIR}/imageformats NO_DEFAULT_PATH) +    if (QT_PLUGIN_${qlibname}) +      list(APPEND QT_PLUGIN_LIBRARIES ${QT_PLUGIN_${qlibname}}) +    else (QT_PLUGIN_${qtlibname}) +      message(FATAL_ERROR "Could not find the Qt plugin ${qlibname} in \"${QT_PLUGINS_DIR}/imageformats\"!") +    endif (QT_PLUGIN_${qlibname}) +  endforeach(qlibname) +  # qjpeg depends on libjpeg +  list(APPEND QT_PLUGIN_LIBRARIES jpeg) +    set(WEBKITLIBPLUGIN OFF CACHE BOOL +        "WEBKITLIBPLUGIN support for the llplugin/llmedia test apps.")  else (STANDALONE) -  use_prebuilt_binary(llqtwebkit) -  set(WEBKITLIBPLUGIN ON CACHE BOOL -      "WEBKITLIBPLUGIN support for the llplugin/llmedia test apps.") +    use_prebuilt_binary(llqtwebkit) +    set(WEBKITLIBPLUGIN ON CACHE BOOL +        "WEBKITLIBPLUGIN support for the llplugin/llmedia test apps.")  endif (STANDALONE)  if (WINDOWS) -  set(WEBKIT_PLUGIN_LIBRARIES -      debug llqtwebkitd -      debug QtWebKitd4 -      debug QtOpenGLd4 -      debug QtNetworkd4 -      debug QtGuid4 -      debug QtCored4 -      debug qtmaind -      optimized llqtwebkit -      optimized QtWebKit4 -      optimized QtOpenGL4 -      optimized QtNetwork4 -      optimized QtGui4 -      optimized QtCore4 -      optimized qtmain -      ) +    set(WEBKIT_PLUGIN_LIBRARIES  +    debug llqtwebkitd +    debug QtWebKitd4 +    debug QtOpenGLd4 +    debug QtNetworkd4 +    debug QtGuid4 +    debug QtCored4 +    debug qtmaind +    optimized llqtwebkit +    optimized QtWebKit4 +    optimized QtOpenGL4 +    optimized QtNetwork4 +    optimized QtGui4 +    optimized QtCore4 +    optimized qtmain +    )  elseif (DARWIN) -  set(WEBKIT_PLUGIN_LIBRARIES -      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib -      debug ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib -      ) +    set(WEBKIT_PLUGIN_LIBRARIES +        optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib +        debug ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib +        )  elseif (LINUX) -  if (STANDALONE)  -    set(WEBKIT_PLUGIN_LIBRARIES llqtwebkit) -  else (STANDALONE) +    set(WEBKIT_PLUGIN_LIBRARIES ${LLQTWEBKIT_LIBRARY} ${QT_LIBRARIES} ${QT_PLUGIN_LIBRARIES})      set(WEBKIT_PLUGIN_LIBRARIES          llqtwebkit - -        qgif -        qjpeg - +#        qico +#        qpng +#        qtiff +#        qsvg +#        QtSvg          QtWebKit          QtOpenGL          QtNetwork          QtGui          QtCore - -        jpeg +        jscore +#        qgif +#        qjpeg +#        jpeg          fontconfig          X11          Xrender          GL + +#        sqlite3 +#        Xi +#        SM          ) -  endif (STANDALONE)  endif (WINDOWS) diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake index 107d1926ba..5bd4848245 100644 --- a/indra/cmake/XmlRpcEpi.cmake +++ b/indra/cmake/XmlRpcEpi.cmake @@ -9,7 +9,10 @@ if (STANDALONE)  else (STANDALONE)      use_prebuilt_binary(xmlrpc-epi)      if (WINDOWS) -        set(XMLRPCEPI_LIBRARIES xmlrpcepi) +        set(XMLRPCEPI_LIBRARIES  +            debug xmlrpc-epid +            optimized xmlrpc-epi +        )      else (WINDOWS)          set(XMLRPCEPI_LIBRARIES xmlrpc-epi)      endif (WINDOWS) diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py index 37aa75e364..ce2d1e0386 100644 --- a/indra/cmake/run_build_test.py +++ b/indra/cmake/run_build_test.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python  """\  @file   run_build_test.py  @author Nat Goodspeed @@ -109,6 +109,8 @@ def main(command, libpath=[], vars={}):      os.environ.update(dict([(str(key), str(value)) for key, value in vars.iteritems()]))      # Run the child process.      print "Running: %s" % " ".join(command) +    # Make sure we see all relevant output *before* child-process output. +    sys.stdout.flush()      return subprocess.call(command)  if __name__ == "__main__":  | 
