[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[vidalia-svn] r3914: Add vidalia_install_tool, vidalia_install_qt4_framework, and (in vidalia/trunk: cmake pkg/osx)
Author: edmanm
Date: 2009-06-28 22:41:32 -0400 (Sun, 28 Jun 2009)
New Revision: 3914
Added:
vidalia/trunk/cmake/ParseArgumentsMacro.cmake
Modified:
vidalia/trunk/cmake/VidaliaMacros.cmake
vidalia/trunk/pkg/osx/CMakeLists.txt
Log:
Add vidalia_install_tool, vidalia_install_qt4_framework, and
vidalia_install_dylib CMake macros to take care of moving Qt and Marble
libraries into the .app bundle as needed and play the install_name_tool
game on libraries and their dependencies. Also add a dist-osx-libraries
target that does all that for you.
Added: vidalia/trunk/cmake/ParseArgumentsMacro.cmake
===================================================================
--- vidalia/trunk/cmake/ParseArgumentsMacro.cmake (rev 0)
+++ vidalia/trunk/cmake/ParseArgumentsMacro.cmake 2009-06-29 02:41:32 UTC (rev 3914)
@@ -0,0 +1,35 @@
+##
+## From http://www.cmake.org/Wiki/CMakeMacroParseArguments
+##
+
+MACRO(PARSE_ARGUMENTS prefix arg_names option_names)
+ SET(DEFAULT_ARGS)
+ FOREACH(arg_name ${arg_names})
+ SET(${prefix}_${arg_name})
+ ENDFOREACH(arg_name)
+ FOREACH(option ${option_names})
+ SET(${prefix}_${option} FALSE)
+ ENDFOREACH(option)
+
+ SET(current_arg_name DEFAULT_ARGS)
+ SET(current_arg_list)
+ FOREACH(arg ${ARGN})
+ SET(larg_names ${arg_names})
+ LIST(FIND larg_names "${arg}" is_arg_name)
+ IF (is_arg_name GREATER -1)
+ SET(${prefix}_${current_arg_name} ${current_arg_list})
+ SET(current_arg_name ${arg})
+ SET(current_arg_list)
+ ELSE (is_arg_name GREATER -1)
+ SET(loption_names ${option_names})
+ LIST(FIND loption_names "${arg}" is_option)
+ IF (is_option GREATER -1)
+ SET(${prefix}_${arg} TRUE)
+ ELSE (is_option GREATER -1)
+ SET(current_arg_list ${current_arg_list} ${arg})
+ ENDIF (is_option GREATER -1)
+ ENDIF (is_arg_name GREATER -1)
+ ENDFOREACH(arg)
+ SET(${prefix}_${current_arg_name} ${current_arg_list})
+ENDMACRO(PARSE_ARGUMENTS)
+
Property changes on: vidalia/trunk/cmake/ParseArgumentsMacro.cmake
___________________________________________________________________
Added: svn:eol-style
+ native
Modified: vidalia/trunk/cmake/VidaliaMacros.cmake
===================================================================
--- vidalia/trunk/cmake/VidaliaMacros.cmake 2009-06-29 02:37:35 UTC (rev 3913)
+++ vidalia/trunk/cmake/VidaliaMacros.cmake 2009-06-29 02:41:32 UTC (rev 3914)
@@ -147,7 +147,87 @@
set(${OUTFILES} ${${OUTFILES}} ${wxl})
endmacro(VIDALIA_ADD_WXL)
+if (APPLE)
+ include(${Vidalia_SOURCE_DIR}/cmake/ParseArgumentsMacro.cmake)
+ ## Calls the install_name_tool utility to change the dependent shared
+ ## library or framework install name to the corresponding library or
+ ## framework that was previously installed in the .app bundle using
+ ## VIDALIA_INSTALL_QT4_FRAMEWORK or VIDALIA_INSTALL_DYLIB when the given
+ ## build target is executed.
+ macro(VIDALIA_INSTALL_NAME_TOOL)
+ parse_arguments(INSTALL_NAME_TOOL "TARGET;LIBRARIES;FRAMEWORKS" "" ${ARGN})
+
+ foreach(bin ${INSTALL_NAME_TOOL_DEFAULT_ARGS})
+ foreach(it ${INSTALL_NAME_TOOL_FRAMEWORKS})
+ add_custom_command(TARGET ${INSTALL_NAME_TOOL_TARGET}
+ COMMAND install_name_tool -change
+ ${it} @executable_path/../Frameworks/${it} ${bin}
+ )
+ endforeach(it)
+ foreach(it ${INSTALL_NAME_TOOL_LIBRARIES})
+ get_filename_component(libname ${it} NAME)
+ add_custom_command(TARGET ${INSTALL_NAME_TOOL_TARGET}
+ COMMAND install_name_tool -change
+ ${it} @executable_path/lib/${libname} ${bin}
+ )
+ endforeach(it)
+ endforeach(bin)
+ endmacro(VIDALIA_INSTALL_NAME_TOOL)
+
+ ## Copies the specified Qt4 framework into the .app bundle, updates its
+ ## shared library identification name, and changes any dependent Qt4
+ ## framework or shared library names to reference a framework previously
+ ## installed in the .app bundle using VIDALIA_INSTALL_QT4_FRAMEWORK.
+ macro(VIDALIA_INSTALL_QT4_FRAMEWORK)
+ parse_arguments(INSTALL_QT4_FRAMEWORK
+ "NAME;TARGET;LIBRARY;APP_BUNDLE;DEPENDS_FRAMEWORKS;DEPENDS_LIBRARIES" ""
+ ${ARGN}
+ )
+
+ set(framework "${INSTALL_QT4_FRAMEWORK_NAME}.framework/Versions/4")
+ set(outdir "${INSTALL_QT4_FRAMEWORK_APP_BUNDLE}/Contents/Frameworks/${framework}")
+ get_filename_component(libname "${INSTALL_QT4_FRAMEWORK_LIBRARY}" NAME)
+ add_custom_command(TARGET ${INSTALL_QT4_FRAMEWORK_TARGET}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${outdir}
+ COMMAND ${CMAKE_COMMAND} -E copy ${INSTALL_QT4_FRAMEWORK_LIBRARY} ${outdir}/
+ COMMAND install_name_tool -id
+ @executable_path/../Frameworks/${framework}/${libname} ${outdir}/${libname}
+ )
+ vidalia_install_name_tool(${outdir}/${libname}
+ TARGET ${INSTALL_QT4_FRAMEWORK_TARGET}
+ LIBRARIES ${INSTALL_QT4_FRAMEWORK_DEPENDS_LIBRARIES}
+ FRAMEWORKS ${INSTALL_QT4_FRAMEWORK_DEPENDS_FRAMEWORKS}
+ )
+ set(${INSTALL_QT4_FRAMEWORK_DEFAULT_ARGS} ${framework}/${libname})
+ endmacro(VIDALIA_INSTALL_QT4_FRAMEWORK)
+
+ ## Copies the specified .dylib into the .app bundle, updates its shared
+ ## library identification name, and changes any dependent framework or
+ ## shared library names to reference a framework or shared library
+ ## previously installed in the .app bundle.
+ macro(VIDALIA_INSTALL_DYLIB)
+ parse_arguments(INSTALL_DYLIB
+ "TARGET;LIBRARY;APP_BUNDLE;DEPENDS_FRAMEWORKS;DEPENDS_LIBRARIES" ""
+ ${ARGN}
+ )
+
+ set(outdir "${INSTALL_DYLIB_APP_BUNDLE}/Contents/MacOS/lib/")
+ get_filename_component(libname "${INSTALL_DYLIB_LIBRARY}" NAME)
+ add_custom_command(TARGET ${INSTALL_DYLIB_TARGET}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${outdir}
+ COMMAND ${CMAKE_COMMAND} -E copy ${INSTALL_DYLIB_LIBRARY} ${outdir}/
+ COMMAND install_name_tool -id @executable_path/lib/${libname}
+ )
+ vidalia_install_name_tool(${outir}/${libname}
+ TARGET ${INSTALL_DYLIB_TARGET}
+ LIBRARIES ${INSTALL_DYLIB_DEPENDS_LIBRARIES}
+ FRAMEWORKS ${INSTALL_DYLIB_DEPENDS_FRAMEWORKS}
+ )
+ set(${INSTALL_DYLIB_DEFAULT_ARGS} "${libname}")
+ endmacro(VIDALIA_INSTALL_DYLIB)
+endif(APPLE)
+
if (WIN32)
## Wraps the supplied .rc files in windres commands if we're building
## with MinGW. Otherwise, it just adds the .rc files directly to the
Modified: vidalia/trunk/pkg/osx/CMakeLists.txt
===================================================================
--- vidalia/trunk/pkg/osx/CMakeLists.txt 2009-06-29 02:37:35 UTC (rev 3913)
+++ vidalia/trunk/pkg/osx/CMakeLists.txt 2009-06-29 02:41:32 UTC (rev 3914)
@@ -16,147 +16,81 @@
${CMAKE_CURRENT_BINARY_DIR}/builddmg.sh
)
+set(VIDALIA_APP_BUNDLE_ROOT ${Vidalia_BINARY_DIR}/src/vidalia/Vidalia.app)
+get_target_property(VIDALIA_EXECUTABLE Vidalia LOCATION)
+add_custom_target(dist-osx-libraries DEPENDS Vidalia)
if (QT_USE_FRAMEWORKS)
- set(bindir ${Vidalia_BINARY_DIR}/src/vidalia/Vidalia.app/Contents/MacOS)
- add_custom_target(dist-osx
- COMMAND cp
- ${QT_QTCORE_LIBRARY}/QtCore ${bindir}/
- COMMAND cp
- ${QT_QTGUI_LIBRARY}/QtGui ${bindir}/
- COMMAND cp
- ${QT_QTNETWORK_LIBRARY}/QtNetwork ${bindir}/
- COMMAND cp
- ${QT_QTXML_LIBRARY}/QtXml ${bindir}/
-
- COMMAND install_name_tool
- -id @executable_path/QtCore ${bindir}/QtCore
- COMMAND install_name_tool
- -id @executable_path/QtGui ${bindir}/QtGui
- COMMAND install_name_tool
- -id @executable_path/QtNetwork ${bindir}/QtNetwork
- COMMAND install_name_tool
- -id @executable_path/QtXml ${bindir}/QtXml
-
- COMMAND install_name_tool
- -change QtCore.framework/Versions/4/QtCore
- @executable_path/QtCore ${bindir}/Vidalia
- COMMAND install_name_tool
- -change QtGui.framework/Versions/4/QtGui
- @executable_path/QtGui ${bindir}/Vidalia
- COMMAND install_name_tool
- -change QtNetwork.framework/Versions/4/QtNetwork
- @executable_path/QtNetwork ${bindir}/Vidalia
- COMMAND install_name_tool
- -change QtXml.framework/Versions/4/QtXml
- @executable_path/QtXml ${bindir}/Vidalia
-
- COMMAND install_name_tool
- -change QtCore.framework/Versions/4/QtCore
- @executable_path/QtCore ${bindir}/QtGui
- COMMAND install_name_tool
- -change QtCore.framework/Versions/4/QtCore
- @executable_path/QtCore ${bindir}/QtNetwork
- COMMAND install_name_tool
- -change QtCore.framework/Versions/4/QtCore
- @executable_path/QtCore ${bindir}/QtXml
-
- DEPENDS ${bindir}/Vidalia
+ vidalia_install_qt4_framework(QtCore
+ TARGET dist-osx-libraries NAME QtCore
+ LIBRARY ${QT_QTCORE_LIBRARY}/QtCore
+ APP_BUNDLE ${VIDALIA_APP_BUNDLE_ROOT}
)
+ vidalia_install_qt4_framework(QtGui
+ TARGET dist-osx-libraries NAME QtGui
+ LIBRARY ${QT_QTGUI_LIBRARY}/QtGui
+ APP_BUNDLE ${VIDALIA_APP_BUNDLE_ROOT}
+ DEPENDS_FRAMEWORKS ${QtCore}
+ )
+ vidalia_install_qt4_framework(QtNetwork
+ TARGET dist-osx-libraries NAME QtNetwork
+ LIBRARY ${QT_QTNETWORK_LIBRARY}/QtNetwork
+ APP_BUNDLE ${VIDALIA_APP_BUNDLE_ROOT}
+ DEPENDS_FRAMEWORKS ${QtCore}
+ )
+ vidalia_install_qt4_framework(QtXml
+ TARGET dist-osx-libraries NAME QtXml
+ LIBRARY ${QT_QTXML_LIBRARY}/QtXml
+ APP_BUNDLE ${VIDALIA_APP_BUNDLE_ROOT}
+ DEPENDS_FRAMEWORKS ${QtCore}
+ )
+ vidalia_install_name_tool(${VIDALIA_EXECUTABLE}
+ TARGET dist-osx-libraries
+ FRAMEWORKS ${QtCore} ${QtGui} ${QtNetwork} ${QtXml}
+ )
if (USE_MARBLE)
- get_filename_component(marblewidget ${MARBLEWIDGET_LIBRARY} NAME)
-
- add_custom_command(TARGET dist-osx
- COMMAND cp
- ${QT_QTSVG_LIBRARY}/QtSvg ${bindir}/
- COMMAND cp
- ${QT_QTWEBKIT_LIBRARY}/QtWebKit ${bindir}/
- COMMAND cp
- ${QT_QTSCRIPT_LIBRARY}/QtScript ${bindir}/
- COMMAND cp
- ${QT_QTDBUS_LIBRARY}/QtDBus ${bindir}/
- COMMAND cp
- ${MARBLEWIDGET_LIBRARY} ${bindir}/
-
- COMMAND install_name_tool
- -id @executable_path/QtSvg ${bindir}/QtSvg
- COMMAND install_name_tool
- -id @executable_path/QtWebKit ${bindir}/QtWebKit
- COMMAND install_name_tool
- -id @executable_path/QtScript ${bindir}/QtScript
- COMMAND install_name_tool
- -id @executable_path/QtDBus ${bindir}/QtDBus
- COMMAND install_name_tool
- -id @executable_path/${marblewidget} ${bindir}/${marblewidget}
-
- COMMAND install_name_tool
- -change QtSvg.framework/Versions/4/QtSvg
- @executable_path/QtSvg ${bindir}/Vidalia
- COMMAND install_name_tool
- -change QtWebKit.framework/Versions/4/QtWebKit
- @executable_path/QtWebKit ${bindir}/Vidalia
- COMMAND install_name_tool
- -change QtScript.framework/Versions/4/QtScript
- @executable_path/QtScript ${bindir}/Vidalia
- COMMAND install_name_tool
- -change QtDBus.framework/Versions/4/QtDBus
- @executable_path/QtDBus ${bindir}/Vidalia
- COMMAND install_name_tool
- -change @executable_path/lib/${marblewidget}
- @executable_path/${marblewidget} ${bindir}/Vidalia
- COMMAND install_name_tool
- -change ${MARBLEWIDGET_LIBRARY}
- @executable_path/${marblewidget} ${bindir}/Vidalia
-
- COMMAND install_name_tool
- -change QtCore.framework/Versions/4/QtCore
- @executable_path/QtCore ${bindir}/${marblewidget}
- COMMAND install_name_tool
- -change QtGui.framework/Versions/4/QtGui
- @executable_path/QtGui ${bindir}/${marblewidget}
- COMMAND install_name_tool
- -change QtNetwork.framework/Versions/4/QtNetwork
- @executable_path/QtNetwork ${bindir}/${marblewidget}
- COMMAND install_name_tool
- -change QtXml.framework/Versions/4/QtXml
- @executable_path/QtXml ${bindir}/${marblewidget}
- COMMAND install_name_tool
- -change QtSvg.framework/Versions/4/QtSvg
- @executable_path/QtSvg ${bindir}/${marblewidget}
- COMMAND install_name_tool
- -change QtScript.framework/Versions/4/QtScript
- @executable_path/QtScript ${bindir}/${marblewidget}
- COMMAND install_name_tool
- -change QtWebKit.framework/Versions/4/QtWebKit
- @executable_path/QtWebKit ${bindir}/${marblewidget}
- COMMAND install_name_tool
- -change QtDBus.framework/Versions/4/QtDBus
- @executable_path/QtDBus ${bindir}/${marblewidget}
-
- COMMAND install_name_tool
- -change QtGui.framework/Versions/4/QtGui
- @executable_path/QtGui ${bindir}/QtSvg
- COMMAND install_name_tool
- -change QtCore.framework/Versions/4/QtCore
- @executable_path/QtCore ${bindir}/QtSvg
- COMMAND install_name_tool
- -change QtGui.framework/Versions/4/QtGui
- @executable_path/QtGui ${bindir}/QtWebKit
- COMMAND install_name_tool
- -change QtNetwork.framework/Versions/4/QtNetwork
- @executable_path/QtNetwork ${bindir}/QtWebKit
- COMMAND install_name_tool
- -change QtCore.framework/Versions/4/QtCore
- @executable_path/QtCore ${bindir}/QtWebKit
- COMMAND install_name_tool
- -change QtCore.framework/Versions/4/QtCore
- @executable_path/QtCore ${bindir}/QtScript
- COMMAND install_name_tool
- -change QtXml.framework/Versions/4/QtXml
- @executable_path/QtXml ${bindir}/QtDBus
- COMMAND install_name_tool
- -change QtCore.framework/Versions/4/QtCore
- @executable_path/QtCore ${bindir}/QtDBus
+ vidalia_install_qt4_framework(QtSvg
+ TARGET dist-osx-libraries NAME QtSvg
+ LIBRARY ${QT_QTSVG_LIBRARY}/QtSvg
+ APP_BUNDLE ${VIDALIA_APP_BUNDLE_ROOT}
+ DEPENDS_FRAMEWORKS ${QtCore} ${QtGui}
)
+ vidalia_install_qt4_framework(QtScript
+ TARGET dist-osx-libraries NAME QtScript
+ LIBRARY ${QT_QTSCRIPT_LIBRARY}/QtScript
+ APP_BUNDLE ${VIDALIA_APP_BUNDLE_ROOT}
+ DEPENDS_FRAMEWORKS ${QtCore}
+ )
+ vidalia_install_qt4_framework(QtDBus
+ TARGET dist-osx-libraries NAME QtDBus
+ LIBRARY ${QT_QTDBUS_LIBRARY}/QtDBus
+ APP_BUNDLE ${VIDALIA_APP_BUNDLE_ROOT}
+ DEPENDS_FRAMEWORKS ${QtCore} ${QtXml}
+ )
+ vidalia_install_qt4_framework(QtPhonon
+ TARGET dist-osx-libraries NAME phonon
+ LIBRARY ${QT_PHONON_LIBRARY}/phonon
+ APP_BUNDLE ${VIDALIA_APP_BUNDLE_ROOT}
+ DEPENDS_FRAMEWORKS ${QtCore} ${QtGui} ${QtXml} ${QtDBus}
+ )
+ vidalia_install_qt4_framework(QtWebKit
+ TARGET dist-osx-libraries NAME QtWebKit
+ LIBRARY ${QT_QTWEBKIT_LIBRARY}/QtWebKit
+ APP_BUNDLE ${VIDALIA_APP_BUNDLE_ROOT}
+ DEPENDS_FRAMEWORKS ${QtCore} ${QtGui} ${QtNetwork} ${QtXml} ${QtDBus}
+ ${QtPhonon}
+ )
+ vidalia_install_dylib(MarbleWidget
+ TARGET dist-osx-libraries
+ LIBRARY ${MARBLEWIDGET_LIBRARY}
+ APP_BUNDLE ${VIDALIA_APP_BUNDLE_ROOT}
+ DEPENDS_FRAMEWORKS ${QtCore} ${QtGui} ${QtNetwork} ${QtXml} ${QtSvg}
+ ${QtDBus} ${QtScript} ${QtWebKit}
+ )
+ vidalia_install_name_tool(${VIDALIA_EXECUTABLE}
+ TARGET dist-osx-libraries
+ FRAMEWORKS ${QtSvg} ${QtDBus} ${QtScript} ${QtWebKit}
+ LIBRARIES ${MARBLEWIDGET_LIBRARY}
+ )
endif(USE_MARBLE)
endif(QT_USE_FRAMEWORKS)