From Mathias Helsing, "Cpack support submission with:

Better package naming. example
openscenegraph-core-2.7.7-Linux-i386.tar.gz on my ubuntu laptop and
openscenegraph-core.2.7.7-win32-x86-vc80.tar.gz on winxp.

CMakers will not get options for selecting compression format. TGZ
goes for all platforms (on win32 I use 7zip)

The wrappers is now given the COMPONENT name
libopenscenegraph-wrappers. Feel free to change the name.

On windows with visual studio the OsgCPack script make some efforts to
discover the compiler used but support is a bit poor so I've given
CMake acces to OSG_CPACK_COMPILER to provide some mean to name the
compiler.

stop

The platform part is taken from CMAKE_SYSTEM_NAME and for windows I
change this to win32 or win64 based on CMAKE_CL_64. This might not be
necessary if the arch part has that information. This information is
taken from CMAKE_SYSTEM_PROCESSOR. I only have 32bit here so if some
of you could uncomment line 15,16 in OsgCPack.cmake and report what
cmake report it would be nice. I'm especially interested anything but
win32 and linux32"
This commit is contained in:
Robert Osfield 2008-12-15 14:07:29 +00:00
parent 25f4baf990
commit 4c32c577d5
3 changed files with 108 additions and 45 deletions

View File

@ -720,10 +720,14 @@ IF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
SET(OSG_CONFIG_HAS_BEEN_RUN_BEFORE 1 CACHE INTERNAL "Flag to track whether this is the first time running CMake or if CMake has been configured before")
ENDIF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
OPTION(BUILD_PACKAGES "Set to ON to generate CPack configuration files and default packaging targets" OFF)
IF(BUILD_PACKAGES)
INCLUDE(OsgCPack)
ENDIF(BUILD_PACKAGES)
# CPack is only available for cmake version >= 2.6.0
IF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION GREATER 4)
# If CMake >= 2.6.0
OPTION(BUILD_OSG_PACKAGES "Set to ON to generate CPack configuration files and default packaging targets" OFF)
IF(BUILD_OSG_PACKAGES)
INCLUDE(OsgCPack)
ENDIF(BUILD_OSG_PACKAGES)
ENDIF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION GREATER 4)
#-----------------------------------------------------------------------------
### uninstall target

View File

@ -1,7 +1,72 @@
#
# collect a descriptive system specification string <system>-<arch>-<compiler>
#
# resolve architecture. The reason i "change" i686 to i386 is that debian packages
# require i386 so this is for the future
IF("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
SET(SYSTEM_ARCH "i386")
ELSE("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
SET(SYSTEM_ARCH ${CMAKE_SYSTEM_PROCESSOR})
ENDIF("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
# set a default system name - use CMake setting (Linux|Windows|...)
SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
#message(STATUS "CMAKE_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}")
#message(STATUS "CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}")
SET(OSG_CPACK_COMPILER "" CACHE STRING "This ia short string (vc90, vc80sp1, g++-4.3, ...) describing your compiler. The string is used for creating package filenames")
# Windows specific settings.
# For windows the compiler needs to be specified in the package filename
IF(WIN32)
IF(MSVC)
#message(STATUS "MSVC_VERSION ${MSVC_VERSION}")
#Visual C++, 32-bit, version 6.0 1200
#Visual C++, 32-bit, version .net 2002 1300
#Visual C++, 32-bit, version .net 2003 1310
#Visual C++, 32-bit, version 2005 1400 (vc80)
#Visual C++, 32-bit, version 2005 SP1 14?? (vc80_sp1)
#Visual C++, 32-bit, version 2008 1500 (vc90)
IF(MSVC_VERSION EQUAL 1500)
SET(OSG_CPACK_COMPILER "vc90")
ENDIF(MSVC_VERSION EQUAL 1500)
IF(MSVC_VERSION EQUAL 1400) # This doesn't work with my 2005 vc80sp1 compiler
SET(OSG_CPACK_COMPILER "vc80")
ELSE(MSVC_VERSION EQUAL 1400)
IF(CMAKE_COMPILER_2005)
SET(OSG_CPACK_COMPILER "vc80")
ENDIF(CMAKE_COMPILER_2005)
ENDIF(MSVC_VERSION EQUAL 1400)
IF(MSVC_VERSION EQUAL 1310)
SET(OSG_CPACK_COMPILER "vc70")
ENDIF(MSVC_VERSION EQUAL 1310)
# check arch bitcount and include this in the system name
IF(CMAKE_CL_64)
SET(SYSTEM_NAME "win64")
ELSE(CMAKE_CL_64)
SET(SYSTEM_NAME "win32")
ENDIF(CMAKE_CL_64)
ENDIF(MSVC)
ENDIF(WIN32)
IF(OSG_CPACK_COMPILER)
SET(OSG_CPACK_SYSTEM_SPEC_STRING ${SYSTEM_NAME}-${SYSTEM_ARCH}-${OSG_CPACK_COMPILER})
ELSE(OSG_CPACK_COMPILER)
SET(OSG_CPACK_SYSTEM_SPEC_STRING ${SYSTEM_NAME}-${SYSTEM_ARCH})
ENDIF(OSG_CPACK_COMPILER)
#message(STATUS "OSG_CPACK_SYSTEM_SPEC_STRING ${OSG_CPACK_SYSTEM_SPEC_STRING}")
# expose this to the user/packager
SET(CPACK_PACKAGE_CONTACT "" CACHE STRING "Supply contact information (email) here")
## variables that apply to all packages
SET(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
SET(CPACK_PACKAGE_FILE_NAME "openscenegraph-${OPENSCENEGRAPH_VERSION}")
SET(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME} ${OPENSCENEGRAPH_VERSION})
SET(CPACK_PACKAGE_FILE_NAME "openscenegraph-all-${OPENSCENEGRAPH_VERSION}-${OSG_CPACK_SYSTEM_SPEC_STRING}")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The OpenSceneGraph is an open source high performance 3d graphics toolkit")
SET(CPACK_PACKAGE_VENDOR "The OpenSceneGraph authors")
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${OpenSceneGraph_SOURCE_DIR}/README.txt")
@ -19,60 +84,54 @@ SET(CPACK_SOURCE_PACKAGE_FILE_NAME "openscenegraph-${OPENSCENEGRAPH_VERSION}-src
# If you don't name your builddir here it will get pulled into the src package. Size of my build tree is gigabytes so you dont want this
SET(CPACK_SOURCE_IGNORE_FILES "/\\\\\\\\.svn/;\\\\\\\\.swp$;\\\\\\\\.#;/#;build" CACHE STRING "Add ignore patterns that will left out of the src package")
# platform specifics. Per default generate zips on win32 and tgz's on unix
IF(APPLE)
# don't really know how to do it on the MAC yet
ELSE(APPLE)
IF(WIN32 AND NOT UNIX)
OPTION(BUILD_NSIS_PACKAGE "Turn this ON if you want to generate a visual installer using NSIS (nsis.sourceforge.net)" OFF)
IF(BUILD_NSIS_PACKAGE)
# There is a bug in NSIS that does not handle full unix paths properly. Make
# sure there is at least one set of four (4) backlasshes.
SET(CPACK_PACKAGE_ICON "${OpenSceneGraph_SOURCE_DIR}/PlatformSpecifics/Windows/icons\\\\osg.ico")
SET(CPACK_NSIS_INSTALLED_ICON_NAME "")
SET(CPACK_NSIS_DISPLAY_NAME "OpenSceneGraph ${OPENSCENEGRAPH_VERSION}")
SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.openscenegraph.org/projects/osg/wiki/Support")
SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.openscenegraph.org/projects/osg/wiki/About")
SET(CPACK_NSIS_CONTACT "")
SET(CPACK_NSIS_MODIFY_PATH ON)
# these goes for all platforms. Setting these stops the CPack.cmake script from generating options about other package compression formats (.z .tz, etc.)
SET(CPACK_GENERATOR "TGZ")
SET(CPACK_SOURCE_GENERATOR "TGZ")
SET(CPACK_GENERATOR "NSIS")
ELSE(BUILD_NSIS_PACKAGE)
SET(CPACK_GENERATOR "ZIP")
ENDIF(BUILD_NSIS_PACKAGE)
ELSE(WIN32 AND NOT UNIX)
SET(CPACK_STRIP_FILES ON)
SET(CPACK_SOURCE_STRIP_FILES ON)
IF(WIN32 AND NOT UNIX)
OPTION(BUILD_NSIS_PACKAGE "Turn this ON if you want to generate a visual installer using NSIS (nsis.sourceforge.net)" OFF)
IF(BUILD_NSIS_PACKAGE)
# There is a bug in NSIS that does not handle full unix paths properly. Make
# sure there is at least one set of four (4) backlasshes.
SET(CPACK_PACKAGE_ICON "${OpenSceneGraph_SOURCE_DIR}/PlatformSpecifics/Windows/icons\\\\osg.ico")
SET(CPACK_NSIS_INSTALLED_ICON_NAME "")
SET(CPACK_NSIS_DISPLAY_NAME "OpenSceneGraph ${OPENSCENEGRAPH_VERSION}")
SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.openscenegraph.org/projects/osg/wiki/Support")
SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.openscenegraph.org/projects/osg/wiki/About")
SET(CPACK_NSIS_CONTACT "")
SET(CPACK_NSIS_MODIFY_PATH ON)
SET(CPACK_GENERATOR "TGZ")
ENDIF(WIN32 AND NOT UNIX)
ENDIF(APPLE)
SET(CPACK_GENERATOR "NSIS")
ENDIF(BUILD_NSIS_PACKAGE)
ELSE(WIN32 AND NOT UNIX)
SET(CPACK_STRIP_FILES ON)
SET(CPACK_SOURCE_STRIP_FILES ON)
ENDIF(WIN32 AND NOT UNIX)
STRING(TOLOWER "${CMAKE_SYSTEM_NAME}" CPACK_SYSTEM_NAME)
#STRING(TOLOWER "${CMAKE_SYSTEM_NAME}" CPACK_SYSTEM_NAME)
# include CPack will generate CPackConfig.cmake and CPackSourceConfig.cmake
# Including CPack will generate CPackConfig.cmake and CPackSourceConfig.cmake and make targets regardless of how i call it
# The first idea was to not use it at all and that might be where we're going. For now it also defines some useful macros, especially
# for the visual installers, so I decided to include it to have the possibility to create visual installers for ms and mac and then try to
# make the best use I could of the targets that including CPack implies
include(CPack)
INCLUDE(CPack)
# includiong CPack will generate a PACKAGE project on MSVC and package/package_src target on unixes. For MSVC I also create a PACACKGE_SRC
# includiong CPack will generate a PACKAGE project on MSVC and package/package_src target on unixes. For MSVC also create a PACKAGE_SOURCE
IF(MSVC_IDE)
add_custom_target("PACKAGE-SOURCE"
ADD_CUSTOM_TARGET("PACKAGE-SOURCE"
COMMAND ${CMAKE_CPACK_COMMAND} --config ${OpenSceneGraph_BINARY_DIR}/CPackSourceConfig.cmake
)
ENDIF(MSVC_IDE)
# including CPack also has the benefit of creating this nice var which is a collection of all defined COMPONENTS
# including CPack also has the benefit of creating this nice variable which is a collection of all defined COMPONENTS
# Create configs and targets for each component
FOREACH(package ${CPACK_COMPONENTS_ALL})
set(CPACK_PACKAGE_FILE_NAME ${package}-${OPENSCENEGRAPH_VERSION}-${CPACK_SYSTEM_NAME})
set(OSG_CPACK_COMPONENT ${package})
configure_file("${OpenSceneGraph_SOURCE_DIR}/CMakeModules/OsgCPackConfig.cmake.in" "${OpenSceneGraph_BINARY_DIR}/CPackConfig-${OSG_CPACK_COMPONENT}.cmake" IMMEDIATE)
SET(CPACK_PACKAGE_FILE_NAME ${package}-${OPENSCENEGRAPH_VERSION}-${OSG_CPACK_SYSTEM_SPEC_STRING})
SET(OSG_CPACK_COMPONENT ${package})
CONFIGURE_FILE("${OpenSceneGraph_SOURCE_DIR}/CMakeModules/OsgCPackConfig.cmake.in" "${OpenSceneGraph_BINARY_DIR}/CPackConfig-${OSG_CPACK_COMPONENT}.cmake" IMMEDIATE)
add_custom_target("package_${package}"
ADD_CUSTOM_TARGET("package_${package}"
COMMAND ${CMAKE_CPACK_COMMAND} --config ${OpenSceneGraph_BINARY_DIR}/CPackConfig-${OSG_CPACK_COMPONENT}.cmake
COMMENT Run CPack packaging for ${package}...
)

View File

@ -114,9 +114,9 @@ MACRO(ADD_WRAPPER_LIB SUBDIR EXPORTDEF)
REMOVE(EXCLUDE ${EXCLUDE})
IF(WIN32)
INSTALL(TARGETS ${TARGET_NAME} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib/${OSG_PLUGINS} LIBRARY DESTINATION bin/${OSG_PLUGINS} )
INSTALL(TARGETS ${TARGET_NAME} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib/${OSG_PLUGINS} LIBRARY DESTINATION bin/${OSG_PLUGINS} COMPONENT libopenscenegraph-wrappers)
ELSE(WIN32)
INSTALL(TARGETS ${TARGET_NAME} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} LIBRARY DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} )
INSTALL(TARGETS ${TARGET_NAME} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} LIBRARY DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} COMPONENT libopenscenegraph-wrappers)
ENDIF(WIN32)
ENDMACRO(ADD_WRAPPER_LIB)