1
# - Pack source helper module
2
# By default CPack pack everything under the source directory, this is usually
3
# undesirable. We avoid this by using the sane default ignore list.
5
# Read and Defines following variable:
6
# PACK_SOURCE_IGNORE_FILES_DEFAULT: Default list of file patterns
7
# that are normally exclude from the source package.
8
# Override it by setting it before INCLUDE(PackSource).
9
# Defines following target:
10
# pack_remove_old: Remove old source package files.
11
# Defines following macro:
12
# PACK_SOURCE(var outputDir [generator])
13
# - Pack source files as <projectName>-<PRJ_VER>-Source.<packFormat>,
15
# + var: The filename of source package is outputted to this var.
17
# + outputDir: Directory to write source tarball.
18
# + generator: (Optional) Method to make tarball. Basically this argument
19
# is passed as CPACK_GENERATOR. Default to TGZ.
20
# Variable to be read:
21
# + PROJECT_NAME: Project name
22
# + PRJ_VER: Project version
23
# + PACK_SOURCE_IGNORE_FILES: A list of regex filename pattern to indicate
24
# the files to be excluded. Note that cmake generated file
25
# (PACK_SOURCE_IGNORE_FILE_CMAKE) is already in this list.
27
# + pack_src: Pack source files like package_source.
28
# This target depends on version_check.
29
# + clean_pack_src: Remove all source packages.
30
# + clean_old_pack_src: Remove all old source package.
31
# This target depends on version_check.
34
IF(NOT DEFINED _PACK_SOURCE_CMAKE_)
35
SET (_PACK_SOURCE_CMAKE_ "DEFINED")
36
SET(PACK_SOURCE_IGNORE_FILES_DEFAULT
37
"/\\\\.svn/" "/CVS/" "/\\\\.git/" "\\\\.gitignore$" "/\\\\.hg/"
39
"~$" "\\\\.swp$" "\\\\.log$" "\\\\.bak$" "\\\\.old$"
40
"\\\\.gmo$" "\\\\.cache$"
41
"\\\\.tar.gz$" "\\\\.tar.bz2$" "/src/config\\\\.h$" "NO_PACK")
43
SET(PACK_SOURCE_IGNORE_FILES_CMAKE "/CMakeFiles/" "_CPack_Packages/" "/Testing/"
44
"\\\\.directory$" "CMakeCache\\\\.txt$"
45
"/install_manifest.txt$"
46
"/cmake_install\\\\.cmake$" "/cmake_uninstall\\\\.cmake$""/CPack.*\\\\.cmake$" "/CTestTestfile\\\\.cmake$"
50
INCLUDE(ManageVersion)
52
MACRO(PACK_SOURCE var outputDir)
53
SET(PACK_SOURCE_IGNORE_FILES ${PACK_SOURCE_IGNORE_FILES}
54
${PACK_SOURCE_IGNORE_FILES_CMAKE} ${PACK_SOURCE_IGNORE_FILES_DEFAULT})
55
#MESSAGE("PACK_SOURCE_IGNORE_FILES=${PACK_SOURCE_IGNORE_FILES}")
57
IF(PRJ_VER STREQUAL "")
58
MESSAGE(FATAL_ERROR "PRJ_VER not defined")
59
ENDIF(PRJ_VER STREQUAL "")
61
SET(CPACK_GENERATOR "${ARGV3}")
63
SET(CPACK_GENERATOR "TGZ")
65
SET(CPACK_SOURCE_GENERATOR ${CPACK_GENERATOR})
66
IF(${CPACK_GENERATOR} STREQUAL "TGZ")
67
SET(_pack_source_ext "tar.gz")
68
ELSEIF(${CPACK_GENERATOR} STREQUAL "TBZ2")
69
SET(_pack_source_ext "tar.bz2")
70
ELSEIF(${CPACK_GENERATOR} STREQUAL "ZIP")
71
SET(_pack_source_ext "zip")
72
ENDIF(${CPACK_GENERATOR} STREQUAL "TGZ")
74
SET(CPACK_SOURCE_IGNORE_FILES ${PACK_SOURCE_IGNORE_FILES})
75
SET(CPACK_PACKAGE_VERSION ${PRJ_VER})
77
# Get relative path of outputDir
78
FILE(RELATIVE_PATH _outputDir_rel ${CMAKE_BINARY_DIR} ${outputDir})
79
#MESSAGE("#_outputDir_rel=${_outputDir_rel}")
81
IF(EXISTS ${CMAKE_SOURCE_DIR}/COPYING)
82
SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/README)
83
ENDIF(EXISTS ${CMAKE_SOURCE_DIR}/COPYING)
85
IF(EXISTS ${CMAKE_SOURCE_DIR}/README)
86
SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
87
ENDIF(EXISTS ${CMAKE_SOURCE_DIR}/README)
89
IF(DEFINED PROJECT_DESCRIPTION)
90
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
91
ENDIF(DEFINED PROJECT_DESCRIPTION)
93
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PRJ_VER}-Source")
94
SET(${var} "${CPACK_SOURCE_PACKAGE_FILE_NAME}.${_pack_source_ext}")
98
ADD_CUSTOM_COMMAND(OUTPUT "${_outputDir_rel}/${${var}}"
100
DEPENDS ChangeLog ${RELEASE_FILE}
101
COMMENT "Packing the source"
104
IF("${_outputDir_rel}" STREQUAL ".")
105
ADD_CUSTOM_TARGET(pack_src
106
COMMAND make package_source
109
ELSE("${_outputDir_rel}" STREQUAL ".")
110
ADD_CUSTOM_TARGET(pack_src
111
COMMAND make package_source
112
COMMAND cmake -E copy ${${var}} "${_outputDir_rel}/"
113
COMMAND cmake -E remove ${${var}}
116
ENDIF("${_outputDir_rel}" STREQUAL ".")
118
ADD_DEPENDENCIES(pack_src version_check)
120
ADD_CUSTOM_TARGET(clean_old_pack_src
122
-name '${PROJECT_NAME}*.${_pack_source_ext}' ! -name '${PROJECT_NAME}-${PRJ_VER}-*.${_pack_source_ext}'
124
COMMENT "Cleaning old source packages"
127
ADD_DEPENDENCIES(clean_old_pack_src version_check)
129
ADD_CUSTOM_TARGET(clean_pack_src
131
-name '${PROJECT_NAME}*.${_pack_source_ext}'
133
COMMENT "Cleaning all source packages"
135
ENDMACRO(PACK_SOURCE var outputDir)
138
ENDIF(NOT DEFINED _PACK_SOURCE_CMAKE_)