diff --git a/CMakeLists.txt b/CMakeLists.txt index bd4aedbee..61951392e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/CMakeModules/OsgCPack.cmake b/CMakeModules/OsgCPack.cmake index b7818c78f..90b1cf438 100644 --- a/CMakeModules/OsgCPack.cmake +++ b/CMakeModules/OsgCPack.cmake @@ -1,7 +1,72 @@ +# +# collect a descriptive system specification string -- +# +# 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}... ) diff --git a/src/osgWrappers/CMakeLists.txt b/src/osgWrappers/CMakeLists.txt index 2d6e3f26a..994395dd0 100644 --- a/src/osgWrappers/CMakeLists.txt +++ b/src/osgWrappers/CMakeLists.txt @@ -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)