diff options
author | Hubert Figuière <hub@figuiere.net> | 2013-06-29 22:05:20 -0400 |
---|---|---|
committer | Hubert Figuière <hub@figuiere.net> | 2013-06-29 22:08:01 -0400 |
commit | 4652015fe779e12fb06ff8fa56bf70e373cd3894 (patch) | |
tree | de8d78fb704c3eb86802c07eace17eaea0f2ddde /build/XMP_Config.cmake | |
parent | 81a4c6bcb1879cb321246590faca595e9746f8e5 (diff) |
Update to XMP SDK CC 2013.06
Diffstat (limited to 'build/XMP_Config.cmake')
-rw-r--r-- | build/XMP_Config.cmake | 521 |
1 files changed, 521 insertions, 0 deletions
diff --git a/build/XMP_Config.cmake b/build/XMP_Config.cmake new file mode 100644 index 0000000..60526c3 --- /dev/null +++ b/build/XMP_Config.cmake @@ -0,0 +1,521 @@ +# ================================================================================================= +# ADOBE SYSTEMS INCORPORATED +# Copyright 2013 Adobe Systems Incorporated +# All Rights Reserved +# +# NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms +# of the Adobe license agreement accompanying it. +# ================================================================================================= + +# ============================================================================== +# define minimum cmake version +cmake_minimum_required(VERSION 2.8.6) + +# ============================================================================== +# Shared config for XMPTOOLKIT and TestRunner +# ============================================================================== +if(NOT DEFINED XMP_ROOT) + set(XMP_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}) + message (XMP_ROOT= " ${XMP_ROOT} ") +endif() +if(NOT DEFINED COMMON_BUILD_SHARED_DIR) + set(COMMON_BUILD_SHARED_DIR ${XMP_ROOT}/build/shared) + message (COMMON_BUILD_SHARED_DIR= " ${COMMON_BUILD_SHARED_DIR} ") +endif() + +#add definition specific to XMP and shared by all projects +add_definitions(-DXML_STATIC=1 -DHAVE_EXPAT_CONFIG_H=1) +if(XMP_BUILD_STATIC) + add_definitions(-DXMP_StaticBuild=1) +endif() + +set (XMPROOT_DIR ${XMP_ROOT}) +set (COMPONENT XMP) + + +# Load project specific MACRO, VARIABLES; set for component and pass to the common file where there are set +if (UNIX) + if (APPLE) + if (APPLE_IOS) + include(${XMP_ROOT}/build/XMP_Ios.cmake) + else () + include(${XMP_ROOT}/build/XMP_Mac.cmake) + endif () + else () + execute_process(COMMAND "uname" OUTPUT_VARIABLE OSNAME) + string(TOUPPER "${OSNAME}" OSNAME) + + if ( ${OSNAME} MATCHES SUNOS) + execute_process(COMMAND "uname" "-p" OUTPUT_VARIABLE PLATFORM_SUNOS_ARCH) + string(TOUPPER "${PLATFORM_SUNOS_ARCH}" PLATFORM_SUNOS_ARCH) + + if ( ${PLATFORM_SUNOS_ARCH} MATCHES SPARC) + include(${XMP_ROOT}/build/XMP_sunos_sparc.cmake) + else() + include(${XMP_ROOT}/build/XMP_sunos_intel.cmake) + endif() + else() + include(${XMP_ROOT}/build/XMP_Linux.cmake) + endif() + endif () +else () + if (WIN32) + include(${XMP_ROOT}/build/XMP_Win.cmake) + endif () +endif () + + + +include(${COMMON_BUILD_SHARED_DIR}/SharedConfig.cmake) + + +# ============================================================================== +# Function: Create output dir and copy static library to it +# ============================================================================== +# +function(CreateStaticLib productname outputDir) + if(UNIX) + add_custom_command (TARGET ${productname} POST_BUILD + COMMAND mkdir -p ${outputDir} + COMMAND cp -f -p ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${productname}.a ${outputDir}/lib${productname}.a + COMMENT "create output directory and copy lib to it") + endif(UNIX) +endfunction(CreateStaticLib) + +# ============================================================================== +# Function: Copy resource(s) to bundle/lib resource folder +# ============================================================================== +# +function(CopyResource appname outputDir copyWhat) + if(XMP_BUILD_STATIC) + add_custom_command (TARGET ${productname} COMMAND ${CMAKE_COMMAND} -E remove_directory ${outputDir} COMMENT "Remove resource dir") + if(UNIX) + add_custom_command (TARGET ${appname} POST_BUILD + COMMAND mkdir -p ${outputDir} + COMMAND cp -f ${copyWhat} ${outputDir} + COMMENT "Copy resource") + else(UNIX) + file(TO_NATIVE_PATH "${outputDir}" outputDir_NAT) + file(TO_NATIVE_PATH "${copyWhat}" copyWhat_NAT) + add_custom_command (TARGET ${appname} POST_BUILD + COMMAND mkdir ${outputDir_NAT} + COMMAND copy /Y ${copyWhat_NAT} ${outputDir_NAT} + COMMENT "Copy resource") + endif(UNIX) + else(XMP_BUILD_STATIC) + if(UNIX) + if(APPLE) + if(APPLE_IOS) + else(APPLE_IOS) + add_custom_command (TARGET ${appname} POST_BUILD + COMMAND mkdir -p ${outputDir} + COMMAND cp -f ${copyWhat} ${outputDir} + COMMENT "Copy resource") + endif(APPLE_IOS) + else(APPLE) + # Linux + add_custom_command (TARGET ${appname} POST_BUILD + COMMAND mkdir -p ${outputDir} + COMMAND cp -f ${copyWhat} ${outputDir} + COMMENT "Copy resource") + endif(APPLE) + endif(UNIX) + endif(XMP_BUILD_STATIC) +endfunction(CopyResource) + +# ============================================================================== +# Function: Create a plugin shell and copy necessary things into resource folder +# ============================================================================== +# Win: DLL, resources are linked into DLL +# OSX: Make Bundle, resources are copied into Bundle's resource folder +# Linux: so, resources reside in a folder next to the so with so's name and ".resource" extension +# +function(CreatePlugin productname outputDir copyWhat) + if(UNIX) + if(APPLE) + if(APPLE_IOS OR XMP_BUILD_STATIC) + CreateStaticLib(${productname} ${outputDir}) + CopyResource(${productname} "${outputDir}/lib${productname}.resources" "${copyWhat}") + else() + # create a bundle, copy essential executable into bundle, but don't change output path + #MakeBundle(${productname} "bundle" ${outputDir} "Info.plist" "Info_plist.h") + MakeBundle(${productname} "xpi" ${outputDir} "" ) + # copy resources + #CopyResource(${productname} "${outputDir}/${productname}.bundle/Contents/Resources" "${copyWhat}") + + # redo on this level: force no extension to make below bundle creation work + set(CMAKE_SHARED_MODULE_PREFIX "" PARENT_SCOPE) + set(CMAKE_SHARED_MODULE_SUFFIX "" PARENT_SCOPE) + endif() + else(APPLE) + # Linux + if(XMP_BUILD_STATIC) + CreateStaticLib(${productname} ${outputDir}) + CopyResource(${productname} "${outputDir}/lib${productname}.resources" "${copyWhat}") + else() + set(XMP_SHARED_MODULE_SUFFIX ".xpi") + set_target_properties(${productname} PROPERTIES SUFFIX ${XMP_SHARED_MODULE_SUFFIX}) + set_target_properties(${productname} PROPERTIES PREFIX "") + set(LIBRARY_OUTPUT_PATH ${outputDir} PARENT_SCOPE) + # copy resources + #CopyResource(${productname} "${outputDir}/${productname}.resources" "${copyWhat}") + + # ExpliXMPly set a softlink with the version e.g plugin.so.2.0.0-> plugin.so for each Plugin + #if ( NOT DEFINED XMP_VERSION) + set (XMP_VERSION 1.0.0) # if not set this should only be the case for the SDK templates we set it to 1.0.0 + #endif() + #set_target_properties(${productname} PROPERTIES SOVERSION ${XMP_VERSION}) + endif() + endif(APPLE) + else(UNIX) + if(WIN32) + # set pre/suf-fix + set(CMAKE_SHARED_MODULE_PREFIX "" PARENT_SCOPE) + set(XMP_SHARED_MODULE_SUFFIX ".xpi") + set_target_properties(${productname} PROPERTIES SUFFIX ${XMP_SHARED_MODULE_SUFFIX}) + # we can't use LIBRARY_OUTPUT_PATH, so build in CMake dir and copy, otherwise an unwanted subfolder is created + add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} + -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/${XMP_BUILDMODE_DIR} ${outputDir}/${TARGET_NAME} + COMMENT "Copy to output dir") + + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPRODUCT_NAME=\"${PRODUCT_NAME}\"" PARENT_SCOPE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPRODUCT_NAME=\"${PRODUCT_NAME}\"" PARENT_SCOPE) + + if(XMP_BUILD_STATIC) + CopyResource(${productname} "${outputDir}/${productname}.resources" "${copyWhat}") + endif(XMP_BUILD_STATIC) + endif(WIN32) + endif(UNIX) +endfunction(CreatePlugin) + +# ============================================================================== +# Function: Find plugins in XMPPlugin folder and return the list of names +# ============================================================================== +# +function(FindEnabledPlugins resultName) + file (GLOB XMPPLUGIN_DIRS ${XMP_ROOT}/XMPPlugin/*) + foreach(item ${XMPPLUGIN_DIRS}) + file (GLOB plugin_project FILES ${item}/build/CMakeLists.txt) + if(plugin_project) + get_filename_component(pluginProjectName ${item} NAME) + if (NOT ${pluginProjectName}_EXCLUDE) + set(names ${names} ${pluginProjectName}) + endif() + endif() + endforeach() + set(${resultName} ${names} PARENT_SCOPE) +endfunction(FindEnabledPlugins) + +# ============================================================================== +# Function: Append static lib to target +# ============================================================================== +# +function(AppendStaticLib outputDir targetName srcLibDir srcLibName) + if(UNIX) + if(APPLE_IOS) + add_custom_command (TARGET ${targetName} POST_BUILD + COMMAND mkdir -p ${srcLibDir}/${srcLibName}_TEMP + COMMAND cd ${srcLibDir}/${srcLibName}_TEMP && ${CMAKE_AR} x ${srcLibDir}/lib${srcLibName}.a + #COMMAND split lipo ${srcLibDir}/lib${srcLibName}.a -thin armv6 -output ${srcLibDir}/lib${srcLibName}arm6.a + #COMMAND split lipo ${srcLibDir}/lib${srcLibName}.a -thin armv7 -output ${srcLibDir}/lib${srcLibName}arm7.a + #COMMAND merge again lipo ${srcLibDir}/lib${srcLibName}arm6.a ${srcLibDir}/lib${srcLibName}arm7.a -create -output ${srcLibDir}/lib${srcLibName}.a + COMMAND ${CMAKE_AR} rs ${outputDir}/lib${targetName}.a ${srcLibDir}/${srcLibName}_TEMP/*.o + COMMAND rm -rf ${srcLibDir}/${srcLibName}_TEMP + COMMENT "extract objects from lib${srcLibName}.a and pack to lib${targetName}.a") + else() + add_custom_command (TARGET ${targetName} POST_BUILD + COMMAND mkdir -p ${srcLibDir}/${srcLibName}_TEMP + COMMAND cd ${srcLibDir}/${srcLibName}_TEMP + && ${CMAKE_AR} x ${srcLibDir}/lib${srcLibName}.a + COMMAND ${CMAKE_AR} rs ${outputDir}/lib${targetName}.a ${srcLibDir}/${srcLibName}_TEMP/*.o + COMMAND rm -rf ${srcLibDir}/${srcLibName}_TEMP + COMMENT "extract objects from lib${srcLibName}.a and pack to lib${targetName}.a") + endif() + else(UNIX) + if(WIN32) + add_custom_command (TARGET ${targetName} POST_BUILD + COMMAND cd ${outputDir} + && lib.exe /OUT:${targetName}.lib ${outputDir}/${targetName}.lib ${srcLibDir}/${srcLibName}.lib + COMMENT "extract objects from ${srcLibName}.lib and pack to ${targetName}.lib") + endif(WIN32) + endif(UNIX) +endfunction(AppendStaticLib) + +# ============================================================================== +# Function: INTERNAL used only! +# Merge static plugin libraries into output library +# ============================================================================== +# +function(MergeStaticLibs_Internal outputDir targetName useSubDir srcLibDir srcLibNames) + foreach(libName ${${srcLibNames}}) + if(useSubDir) + set(correctedDir ${srcLibDir}/${libName}) + else() + set(correctedDir ${srcLibDir}) + endif() + AppendStaticLib(${outputDir} ${targetName} ${correctedDir} ${libName}) + endforeach() +endfunction(MergeStaticLibs_Internal) + +# ============================================================================== +# Function: Merge static plugin libraries into output library +# ============================================================================== +# +function(MergeStaticLibs outputDir targetName useSubDir srcLibDir srcLibNames) + MergeStaticLibs_Internal(${outputDir} ${targetName} ${useSubDir} ${srcLibDir} ${srcLibNames}) + if(APPLE) + if(APPLE_IOS) + else(APPLE_IOS) + # APPLE need run ranlib to fix broken TOC + add_custom_command (TARGET ${targetName} POST_BUILD + COMMENT "Run ranlib to fix broken TOC of library file lib${targetName}.a" + COMMAND ${CMAKE_RANLIB} ${outputDir}/lib${targetName}.a + ) + endif(APPLE_IOS) + endif(APPLE) +endfunction(MergeStaticLibs) + +# ============================================================================== +# Function: Get XMP Framework's output name +# ============================================================================== +# +function(GetXMPFrameworkOutputName result) + if(UNIX) + if(APPLE) + if(XMP_BUILD_STATIC) + set(outputName "libXMP.a") + else() + set(outputName "XMP.framework") + endif() + else(APPLE) + if(XMP_BUILD_STATIC) + set(outputName "libXMP.a") + else() + set(outputName "libXMP.so") + endif() + endif(APPLE) + else(UNIX) + if(WIN32) + if(XMP_BUILD_STATIC) + set(outputName "XMP.lib") + else() + set(outputName "XMP.dll") + endif() + endif(WIN32) + endif(UNIX) + set(${result} ${outputName} PARENT_SCOPE) +endfunction(GetXMPFrameworkOutputName) + +# ============================================================================== +# Macro: Add Plugin API files to project +# For convenience we define the sources as a variable. You can add +# header files and cpp/c files and CMake will sort them out +# ============================================================================== +# +macro(AddPluginApiFiles relativePathToXMPPluginFolder) + file (GLOB API_INCLUDE_FILES ${PROJECT_SOURCE_DIR}/${relativePathToXMPPluginFolder}/XMPFilesPlugins/api/source/*.h) + source_group(api\\include FILES ${API_INCLUDE_FILES}) + + file (GLOB API_SOURCE_FILES ${PROJECT_SOURCE_DIR}/${relativePathToXMPPluginFolder}/XMPFilesPlugins/api/source/*.cpp ) + source_group(api\\source FILES ${API_SOURCE_FILES}) +endmacro(AddPluginApiFiles) + +# ============================================================================== +# Macro: Add Resource files to project +# For convenience we define the sources as a variable. You can add +# header files and cpp/c files and CMake will sort them out +# ============================================================================== +# +macro(AddPluginResourceFiles) + list(APPEND RESOURCE_FILES ${PROJECT_ROOT}/resource/txt/MODULE_IDENTIFIER.txt) + if (CMAKE_CL_64) + list(APPEND RESOURCE_FILES ${PROJECT_ROOT}/resource/txt/XMPPLUGINUIDS-64.txt) + else() + list(APPEND RESOURCE_FILES ${PROJECT_ROOT}/resource/txt/XMPPLUGINUIDS-32.txt) + endif() + + # If we build for windows systems, we also include the resource file containing the manifest, icon and other resources + if(WIN32) + if (CMAKE_CL_64) + list (APPEND RESOURCE_FILES ${RESOURCE_ROOT}/${XMP_PLATFORM_SHORT}/${PRODUCT_NAME}-64.rc) + else(CMAKE_CL_64) + list (APPEND RESOURCE_FILES ${RESOURCE_ROOT}/${XMP_PLATFORM_SHORT}/${PRODUCT_NAME}-32.rc) + endif(CMAKE_CL_64) + endif() + source_group("Resource Files" FILES ${RESOURCE_FILES}) +endmacro(AddPluginResourceFiles) + + +# ============================================================================== +# Macro: Set Plugin Output folder +# ============================================================================== +# +macro(SetPluginOutputPath) + if(UNIX) + if(APPLE) + set(OUTPUT_DIR ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/toolkit/XMPFilesPlugins/public/${XMP_PLATFORM_FOLDER}/${CMAKE_CFG_INTDIR}) + else() + endif() + else() + set(OUTPUT_DIR ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/toolkit/XMPFilesPlugins/public/${XMP_PLATFORM_FOLDER}/${CMAKE_CFG_INTDIR}/${PRODUCT_NAME}) + endif() +endmacro(SetPluginOutputPath) + +# ============================================================================== +# Function: Setup XMP for the application +# Copy XMP library, create a symbolic link to Plug-ins, copy MediaAccess and fixup +# ============================================================================== +# +function(SetupXMPForApp appname outputDir) + # are optional parameter set? + if(ARGV2 AND NOT APPLE_IOS) + if(${ARGV2} MATCHES "FFMPEG") + set(copyFFMpegLibs 1) + else() + set(copyFFMpegLibs 0) + endif() + else() + set(copyFFMpegLibs 0) + endif() + + if(NOT copyFFMpegLibs) + set(ignoreCommand "#") + else () + set(ignoreCommand "COMMAND") + endif() + + if(APPLE_IOS) + set(ignoreCommandOnIOS "#") + set(ignoreCommandOnOSX "COMMAND") + else () + set(ignoreCommandOnIOS "COMMAND") + set(ignoreCommandOnOSX "#") + endif() + + + if(UNIX) + if(APPLE) + set(BUILT_PRODUCTS_DIR ${outputDir}/${appname}.app/Contents) + # GetXMPFrameworkOutputName(XMP_FRAMEWORK_NAME) + add_custom_command (TARGET ${appname} POST_BUILD + COMMENT "Copy necessary XMP items and create symlink to Plug-ins dir" + COMMAND echo clear XMP dir + ${ignoreCommandOnIOS} rm -fR ${BUILT_PRODUCTS_DIR}/Frameworks/XMP + COMMAND mkdir -p ${BUILT_PRODUCTS_DIR}/Frameworks/XMP + ${ignoreCommandOnIOS} echo Copy XMP + ${ignoreCommandOnIOS} rm -fR ${BUILT_PRODUCTS_DIR}/Frameworks/${XMP_FRAMEWORK_NAME}* + ${ignoreCommandOnIOS} ln -s ${XMPLIBRARIES_DIR}/${XMP_FRAMEWORK_NAME} ${BUILT_PRODUCTS_DIR}/Frameworks/${XMP_FRAMEWORK_NAME} + ${ignoreCommandOnIOS} ln -s ${XMPLIBRARIES_DIR}/${XMP_FRAMEWORK_NAME}.dSYM ${BUILT_PRODUCTS_DIR}/Frameworks/${XMP_FRAMEWORK_NAME}.dSYM + ${ignoreCommand} echo Copy MediaAccess + ${ignoreCommand} mkdir -p ${BUILT_PRODUCTS_DIR}/Frameworks/XMP/MediaAccess + ${ignoreCommand} cp -fpR ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/toolkit/public/SDK/bin/MediaAccess/${XMP_PLATFORM_FOLDER}/${XMP_BUILDMODE_DIR}/ ${BUILT_PRODUCTS_DIR}/Frameworks/XMP/MediaAccess + ${ignoreCommand} cp -fpR ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/toolkit/public/SDK/bin/MediaAccess/ffmpeg/bin/${XMP_BITDEPTH}/lib* ${BUILT_PRODUCTS_DIR}/Frameworks/XMP/MediaAccess + ${ignoreCommand} ${XMPROOT_DIR}/XMPMediaAccess/build/UpdateFFMPEGLibSearchPath.sh "@executable_path/../Frameworks/XMP/MediaAccess" "${BUILT_PRODUCTS_DIR}/Frameworks/XMP/MediaAccess" + ${ignoreCommandOnIOS} echo Copy XMP plugins shared libs + ${ignoreCommandOnIOS} cp -f -p -R ${XMPLIBRARIES_DIR}/Plug-ins/copy_to_app_dir/ ${BUILT_PRODUCTS_DIR}/Frameworks/ + ${ignoreCommandOnIOS} echo create symlinks + ${ignoreCommandOnIOS} ln -s ${XMPLIBRARIES_DIR}/Plug-ins/ ${BUILT_PRODUCTS_DIR}/Frameworks/XMP/Plug-ins + ${ignoreCommandOnOSX} echo copy plugin data + ${ignoreCommandOnOSX} mkdir -p ${BUILT_PRODUCTS_DIR}/Resources/XMP/Plug-ins + ${ignoreCommandOnOSX} cp -fpR ${XMPLIBRARIES_DIR}/Plug-ins/ ${BUILT_PRODUCTS_DIR}/Resources/XMP/Plug-ins + ) + else(APPLE) + # Do not copy FFMpeg libs if they don't exist + if(NOT EXISTS ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/toolkit/public/SDK/bin/MediaAccess/${XMP_PLATFORM_FOLDER}/${XMP_BUILDMODE_DIR}/FFMpegWrapper.mediaaccess) + set(ignoreCommand "#") + else () + set(ignoreCommand "COMMAND") + endif() + + set(BUILT_PRODUCTS_DIR ${outputDir}) + # GetXMPFrameworkOutputName(XMP_FRAMEWORK_NAME) + add_custom_command (TARGET ${appname} POST_BUILD + COMMENT "Copy necessary XMP items and create symlink to Plug-ins dir" + COMMAND echo clear XMP dir + COMMAND rm -f -R ${BUILT_PRODUCTS_DIR}/XMP + COMMAND mkdir -p ${BUILT_PRODUCTS_DIR}/XMP + COMMAND echo Copy XMP + COMMAND rm -f -R ${BUILT_PRODUCTS_DIR}/libXMP* + COMMAND ln -s ${XMPLIBRARIES_DIR}/${XMP_FRAMEWORK_NAME} ${BUILT_PRODUCTS_DIR}/${XMP_FRAMEWORK_NAME} + ${ignoreCommand} echo Copy MediaAccess + ${ignoreCommand} mkdir -p ${BUILT_PRODUCTS_DIR}/XMP/MediaAccess + ${ignoreCommand} cp -fpR ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/toolkit/public/SDK/bin/MediaAccess/${XMP_PLATFORM_FOLDER}/${XMP_BUILDMODE_DIR}/*.* ${BUILT_PRODUCTS_DIR}/XMP/MediaAccess + #COMMAND ${ignoreCommand} cp -fpR ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/toolkit/public/SDK/bin/MediaAccess/ffmpeg/bin/${XMP_BITDEPTH}/*.* ${BUILT_PRODUCTS_DIR}/XMP/MediaAccess + COMMAND echo Copy XMP plugins shared libs + #COMMAND cp -f -p -R ${XMPLIBRARIES_DIR}/Plug-ins/copy_to_app_dir/ ${BUILT_PRODUCTS_DIR}/ + COMMAND echo create symlinks + COMMAND ln -s ${XMPLIBRARIES_DIR}/Plug-ins/ ${BUILT_PRODUCTS_DIR}/XMP/Plug-ins + ) + endif(APPLE) + else(UNIX) + if(WIN32) + # Windows ------------------------------------------- + set(BUILT_PRODUCTS_DIR ${outputDir}) + # GetXMPFrameworkOutputName(XMP_FRAMEWORK_NAME) + file(TO_NATIVE_PATH "${BUILT_PRODUCTS_DIR}/XMP/Plug-ins" BUILT_PLUGINS_DIR_NAT) + file(TO_NATIVE_PATH "${XMPLIBRARIES_DIR}/Plug-ins" PLUGINS_DIR_NAT) + file(TO_NATIVE_PATH "${BUILT_PRODUCTS_DIR}/${XMP_FRAMEWORK_NAME}" DEST_XMP_NAT) + file(TO_NATIVE_PATH "${XMPLIBRARIES_DIR}/${XMP_FRAMEWORK_NAME}" SRC_XMP_NAT) + file(TO_NATIVE_PATH "${BUILT_PRODUCTS_DIR}/XMP.pdb" DEST_XMP_PDB_NAT) + file(TO_NATIVE_PATH "${XMPLIBRARIES_DIR}/XMP.pdb" SRC_XMP_PDB_NAT) + + #For Windows XP we need to use junction.exe instead of mklink which is only available on Windows Vista and above + if((${CMAKE_SYSTEM} MATCHES "Windows-5.1") OR (${CMAKE_SYSTEM} MATCHES "Windows-5.2")) + message (STATUS "- Use junction.exe to create links instead of mklink we either run on Win XP 32 or 64 bit") + set(link_command ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/resources/tools/junction/junction.exe -accepteula ) + set(remove_XMP "echo") + set(copy_link_XMP ${CMAKE_COMMAND} -E copy ${SRC_XMP_NAT} ${BUILT_PRODUCTS_DIR}/) + set(copy_link_XMP_pdb ${CMAKE_COMMAND} -E copy ${SRC_XMP_PDB_NAT} ${BUILT_PRODUCTS_DIR}/) + else() + set(link_command mklink /D ) + set(remove_XMP ${CMAKE_COMMAND} -E remove -f ${DEST_XMP_NAT} ${DEST_XMP_PDB_NAT}) + set(copy_link_XMP mklink ${DEST_XMP_NAT} ${SRC_XMP_NAT}) + set(copy_link_XMP_pdb mklink ${DEST_XMP_PDB_NAT} ${SRC_XMP_PDB_NAT}) + endif() + + add_custom_command (TARGET ${appname} POST_BUILD + COMMENT "Copy necessary XMP items and create symlink to Plug-ins dir" + COMMAND echo - clear XMP dir + COMMAND ${CMAKE_COMMAND} -E make_directory ${BUILT_PRODUCTS_DIR}/XMP + COMMAND echo - symlink XMP.dll and XMP.pdb + COMMAND ${remove_XMP} + COMMAND ${copy_link_XMP} + COMMAND ${copy_link_XMP_pdb} + COMMAND echo - copy XMP plugins shared libs (tbb etc) + COMMAND ${CMAKE_COMMAND} -E copy_directory ${XMPLIBRARIES_DIR}/Plug-ins/copy_to_app_dir/ ${BUILT_PRODUCTS_DIR} + ${ignoreCommand} echo - copy FFMPEG libs + ${ignoreCommand} ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/toolkit/public/SDK/bin/MediaAccess/ffmpeg/bin/${XMP_BITDEPTH}/ ${BUILT_PRODUCTS_DIR}/XMP/MediaAccess + ${ignoreCommand} ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/toolkit/public/SDK/bin/MediaAccess/${XMP_PLATFORM_FOLDER}/${XMP_BUILDMODE_DIR}/FFMpegWrapper.mediaaccess ${BUILT_PRODUCTS_DIR}/XMP/MediaAccess/FFMpegWrapper.mediaaccess + ${ignoreCommand} ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/${XMP_THIS_PROJECT_RELATIVEPATH}/toolkit/public/SDK/bin/MediaAccess/${XMP_PLATFORM_FOLDER}/${XMP_BUILDMODE_DIR}/ffmpegwrapper.pdb ${BUILT_PRODUCTS_DIR}/XMP/MediaAccess/ffmpegwrapper.pdb + COMMAND echo - remove symbolic link to plug-ins dir + COMMAND rmdir ${BUILT_PLUGINS_DIR_NAT} + COMMAND echo - execute symbolic link command + COMMAND ${link_command} ${BUILT_PLUGINS_DIR_NAT} ${PLUGINS_DIR_NAT} + ) + endif(WIN32) + endif(UNIX) +endfunction(SetupXMPForApp) + +# ============================================================================== +# Function: GenerateInitFileForStaticBuild +# Collect registrar initializer functions and create source in temp directory +# out of it for static linkage +# ============================================================================== +# +function(GenerateInitFileForStaticBuild) + if(XMP_BUILD_STATIC) + set(targetFile ${XMP_ROOT}/XMPApi/source/PluginStaticInit_TEMP.cpp) + file(REMOVE ${targetFile}) + + set(initDecl "#if XMP_BUILD_STATIC\n\n") + set(initFunc "namespace XMP\n{\n void InstanciateRegistrarsForAllPlugins()\n {\n") + foreach(pluginName ${XMP_ENABLED_PLUGINS}) + set(initDecl "${initDecl}extern void ${pluginName}_InstanciateRegistrars()\;\n") + set(initFunc "${initFunc} ::${pluginName}_InstanciateRegistrars()\;\n") + endforeach() + set(initFunc "${initFunc} }\n}\n") + set(initFunc "${initDecl}\n${initFunc}\n#endif\n") + + file(WRITE ${targetFile} ${initFunc}) + endif(XMP_BUILD_STATIC) +endfunction(GenerateInitFileForStaticBuild) |