[Cmake-commits] [cmake-commits] david.cole committed CMakeLists.txt NONE 1.1 VerifyResult.cmake NONE 1.1 mylib.cpp NONE 1.1 mylib.h NONE 1.1 mylibapp.cpp NONE 1.1

cmake-commits at cmake.org cmake-commits at cmake.org
Tue Jun 17 11:39:28 EDT 2008


Update of /cvsroot/CMake/CMake/Tests/CPackComponents
In directory public:/mounts/ram/cvs-serv23549/Tests/CPackComponents

Added Files:
	CMakeLists.txt VerifyResult.cmake mylib.cpp mylib.h 
	mylibapp.cpp 
Log Message:
ENH: Add patch for feature request #6847 - CPack components for NSIS and PackageMaker installers. Thanks to Doug Gregor for all the hard work involved with implementing this patch! Also added new test CPackComponents that is conditionally executed only when NSIS or PackageMaker installer builders are available.


--- NEW FILE: VerifyResult.cmake ---
message(STATUS "=============================================================================")
message(STATUS "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)")
message(STATUS "")

if(NOT CPackComponents_BINARY_DIR)
  message(FATAL_ERROR "CPackComponents_BINARY_DIR not set")
endif(NOT CPackComponents_BINARY_DIR)

set(expected_file_mask "")

if(WIN32)
  # Only expect the *.exe installer if it looks like NSIS is
  # installed on this machine:
  #
  find_program(NSIS_MAKENSIS_EXECUTABLE NAMES makensis
    PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS]
    DOC "makensis.exe location"
    )
  if(NSIS_MAKENSIS_EXECUTABLE)
    set(expected_file_mask "${CPackComponents_BINARY_DIR}/*.exe")
  endif(NSIS_MAKENSIS_EXECUTABLE)
endif(WIN32)

if(APPLE)
  # Always expect the *.dmg installer - PackageMaker should always
  # be installed on a development Mac:
  #
  set(expected_file_mask "${CPackComponents_BINARY_DIR}/*.dmg")
endif(APPLE)

if(expected_file_mask)
  set(expected_count 1)
  file(GLOB expected_file "${expected_file_mask}")

  message(STATUS "expected_count='${expected_count}'")
  message(STATUS "expected_file='${expected_file}'")
  message(STATUS "expected_file_mask='${expected_file_mask}'")

  if(NOT expected_file)
    message(FATAL_ERROR "error: expected_file does not exist: CPackComponents test fails.")
  endif(NOT expected_file)

  list(LENGTH expected_file actual_count)
  message(STATUS "actual_count='${actual_count}'")
  if(NOT actual_count EQUAL expected_count)
    message(FATAL_ERROR "error: expected_count does not match actual_count: CPackComponents test fails.")
  endif(NOT actual_count EQUAL expected_count)
endif(expected_file_mask)

--- NEW FILE: mylib.h ---
void mylib_function();

--- NEW FILE: CMakeLists.txt ---
# CPack Example: User-selectable Installation Components
#
# In this example, we have a simple library (mylib) with an example
# application (mylibapp). We create a binary installer that allows
# users to select which pieces will be installed: the example
# application, the library binaries, and/or the header file.
cmake_minimum_required(VERSION 2.6)
project(CPackComponents)

# Create the mylib library
add_library(mylib mylib.cpp)

# Create the mylibapp application
add_executable(mylibapp mylibapp.cpp)
target_link_libraries(mylibapp mylib)

# Create installation targets. Note that we put each kind of file
# into a different component via COMPONENT. These components will 
# be used to create the installation components.
install(TARGETS mylib 
  ARCHIVE
  DESTINATION lib
  COMPONENT libraries)
install(TARGETS mylibapp
  RUNTIME
  DESTINATION bin
  COMPONENT applications)
install(FILES mylib.h
  DESTINATION include
  COMPONENT headers)

# CPack boilerplate for this project
set(CPACK_PACKAGE_NAME "MyLib")
set(CPACK_PACKAGE_VENDOR "CMake.org")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyLib - CPack Component Installation Example")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_VERSION_MAJOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CPack Component Example")

# Tell CPack all of the components to install. The "ALL"
# refers to the fact that this is the set of components that
# will be included when CPack is instructed to put everything
# into the binary installer (the default behavior).
set(CPACK_COMPONENTS_ALL applications libraries headers)

# Set the displayed names for each of the components to install.
# These will be displayed in the list of components inside the installer.
set(CPACK_COMPONENT_APPLICATIONS_DISPLAY_NAME "MyLib Application")
set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries")
set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ Headers")

# Provide descriptions for each of the components to install.
# When the user hovers the mouse over the name of a component,
# the description will be shown in the "Description" box in the
# installer. If no descriptions are provided, the "Description"
# box will be removed.
set(CPACK_COMPONENT_APPLICATIONS_DESCRIPTION
  "An extremely useful application that makes use of MyLib")
set(CPACK_COMPONENT_LIBRARIES_DESCRIPTION
  "Static libraries used to build programs with MyLib")
set(CPACK_COMPONENT_HEADERS_DESCRIPTION
  "C/C++ header files for use with MyLib")

# Put the components into two different groups: "Runtime" and "Development"
set(CPACK_COMPONENT_APPLICATIONS_GROUP "Runtime")
set(CPACK_COMPONENT_LIBRARIES_GROUP "Development")
set(CPACK_COMPONENT_HEADERS_GROUP "Development")

# Expand the "Development" group by default, since we have so few components.
# Also, provide this group with a description.
set(CPACK_COMPONENT_GROUP_DEVELOPMENT_EXPANDED ON)
set(CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION
  "All of the tools you'll ever need to develop software")

# It doesn't make sense to install the headers without the libraries
# (because you could never use the headers!), so make the headers component
# depend on the libraries component.
set(CPACK_COMPONENT_HEADERS_DEPENDS libraries)

# Create two installation types with pre-selected components.
# The "Developer" installation has just the library and headers,
# while the "Full" installation has everything.
set(CPACK_ALL_INSTALL_TYPES Full Developer)
set(CPACK_INSTALL_TYPE_FULL_DISPLAY_NAME "Everything")
set(CPACK_COMPONENT_LIBRARIES_INSTALL_TYPES Developer Full)
set(CPACK_COMPONENT_HEADERS_INSTALL_TYPES Developer Full)
set(CPACK_COMPONENT_APPLICATIONS_INSTALL_TYPES Full)

# Include CPack to introduce the appropriate targets
include(CPack)

--- NEW FILE: mylibapp.cpp ---
#include "mylib.h"

int main()
{
  mylib_function();
}

--- NEW FILE: mylib.cpp ---
#include "mylib.h"
#include "stdio.h"

void mylib_function()
{
  printf("This is mylib");
}



More information about the Cmake-commits mailing list