source: trunk/CMakeLists.txt @ 14505

Last change on this file since 14505 was 14505, checked in by mikedld, 6 years ago

Bump miniupnpc revision to fix MINIUPNP_STATICLIB macro definition

File size: 15.7 KB
Line 
1cmake_minimum_required(VERSION 2.8.5 FATAL_ERROR)
2project(transmission)
3
4list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
5
6include(CheckIncludeFile)
7include(CheckIncludeFiles)
8include(CheckFunctionExists)
9include(CheckLibraryExists)
10include(ExternalProject)
11include(GNUInstallDirs)
12include(TrMacros)
13
14        option(ENABLE_DAEMON        "Build daemon" ON)
15tr_auto_option(ENABLE_GTK           "Build GTK+ client" AUTO)
16tr_auto_option(ENABLE_QT            "Build Qt client" AUTO)
17        option(ENABLE_UTILS         "Build utils (create, edit, show)" ON)
18        option(ENABLE_CLI           "Build command-line client" OFF)
19        option(ENABLE_TESTS         "Build unit tests" ON)
20        option(ENABLE_LIGHTWEIGHT   "Optimize libtransmission for low-resource systems: smaller cache size, prefer unencrypted peer connections, etc." OFF)
21        option(ENABLE_UTP           "Build µTP support" ON)
22        option(ENABLE_NLS           "Enable native language support" ON)
23        option(INSTALL_DOC          "Build/install documentation" ON)
24        option(INSTALL_LIB          "Install the library" OFF)
25        option(USE_QT5              "Use Qt 5 (instead of default Qt 4)" OFF)
26tr_auto_option(USE_SYSTEM_EVENT2    "Use system event2 library" AUTO)
27tr_auto_option(USE_SYSTEM_DHT       "Use system dht library" AUTO)
28tr_auto_option(USE_SYSTEM_MINIUPNPC "Use system miniupnpc library" AUTO)
29tr_auto_option(USE_SYSTEM_NATPMP    "Use system natpmp library" AUTO)
30tr_auto_option(USE_SYSTEM_UTP       "Use system utp library" AUTO)
31tr_auto_option(USE_SYSTEM_B64       "Use system b64 library" AUTO)
32tr_list_option(WITH_CRYPTO          "Use specified crypto library" AUTO openssl cyassl polarssl)
33tr_auto_option(WITH_INOTIFY         "Enable inotify support (on systems that support it)" AUTO)
34tr_auto_option(WITH_KQUEUE          "Enable kqueue support (on systems that support it)" AUTO)
35tr_auto_option(WITH_SYSTEMD         "Add support for systemd startup notification (on systems that support it)" AUTO)
36
37set(TR_NAME ${PROJECT_NAME})
38
39# convention: -TR MAJOR MINOR MAINT STATUS - (each a single char)
40# STATUS: "X" for prerelease beta builds,
41#         "Z" for unsupported trunk builds,
42#         "0" for stable, supported releases
43# these should be the only two lines you need to change
44set(TR_USER_AGENT_PREFIX "2.84+")
45set(TR_PEER_ID_PREFIX "-TR284Z-")
46
47string(REGEX MATCH "^([0-9]+)\\.([0-9]+).*" TR_VERSION "${TR_USER_AGENT_PREFIX}")
48set(TR_VERSION_MAJOR "${CMAKE_MATCH_1}")
49set(TR_VERSION_MINOR "${CMAKE_MATCH_2}")
50
51if(TR_PEER_ID_PREFIX MATCHES "X-$")
52    set(TR_BETA_RELEASE 1)
53elseif(TR_PEER_ID_PREFIX MATCHES "Z-$")
54    set(TR_NIGHTLY_RELEASE 1)
55else()
56    set(TR_STABLE_RELEASE 1)
57endif()
58
59if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.svn)
60    find_package(Subversion)
61    if(Subversion_FOUND)
62        Subversion_WC_INFO(${CMAKE_SOURCE_DIR} TR_SVN)
63        set(TR_SCM_REVISION "${TR_SVN_WC_REVISION}")
64    endif()
65
66    if("${TR_SCM_REVISION}" STREQUAL "")
67        file(GLOB_RECURSE TR_ALL_SOURCES RELATIVE ${CMAKE_SOURCE_DIR} *.cc *.[chm] *.po)
68        set(TR_SCM_REVISION 0)
69        foreach(F ${TR_ALL_SOURCES})
70            file(STRINGS ${F} F_ID REGEX "\\$Id:")
71            if(F_ID MATCHES "\\$Id: [^ ]+ ([0-9]+) " AND CMAKE_MATCH_1 GREATER TR_SCM_REVISION)
72                set(TR_SCM_REVISION ${CMAKE_MATCH_1})
73            endif()
74        endforeach()
75    endif()
76elseif(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
77    find_package(Git)
78    if(GIT_FOUND)
79        execute_process(
80            COMMAND
81                ${GIT_EXECUTABLE} rev-list --max-count=1 --abbrev-commit HEAD
82            WORKING_DIRECTORY
83                ${CMAKE_SOURCE_DIR}
84            OUTPUT_VARIABLE
85                TR_SCM_REVISION
86            OUTPUT_STRIP_TRAILING_WHITESPACE
87        )
88    endif()
89endif()
90
91if("${TR_SCM_REVISION}" STREQUAL "")
92    set(TR_SCM_REVISION 0)
93endif()
94
95set_property(GLOBAL PROPERTY USE_FOLDERS ON)
96
97set(CURL_MINIMUM            7.15.4)
98set(EVENT2_MINIMUM          2.0.10)
99set(OPENSSL_MINIMUM         0.9.4)
100set(CYASSL_MINIMUM          3.0)
101set(POLARSSL_MINIMUM        1.2)
102set(ZLIB_MINIMUM            1.2.3)
103set(GTK_MINIMUM             3.4.0)
104set(GLIB_MINIMUM            2.32.0)
105set(GIO_MINIMUM             2.26.0)
106set(LIBAPPINDICATOR_MINIMUM 0.4.90)
107
108tr_github_upstream(EVENT2    libevent/libevent  c51b159cff 7be95856a39714dfd2218cb56415c990)
109tr_github_upstream(NATPMP    miniupnp/libnatpmp 31ebda6226 7e8deb00a98220622a6f2aeb98b8921b)
110tr_github_upstream(MINIUPNPC miniupnp/miniupnp  5de2bcb561 bdc5b64b9b8401d3524c50b9ec8173c1)
111tr_github_upstream(DHT       jech/dht           bf62643a95 0a2a2abe447d8a73f0084c1bc837e566)
112tr_github_upstream(UTP       bittorrent/libutp  7c4f19abdf 8b92aa05abec5f6675cdde6477cd6f51)
113tr_github_upstream(B64       mikedld/libb64     c1e3323498 10128cb30ad768d2c4caf627e0f69db3)
114
115if(WIN32)
116    foreach(L C CXX)
117        # Target version (Vista and up)
118        set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -DWINVER=0x0600 -D_WIN32_WINNT=0x0600")
119        # Use Unicode API (although we always use W or A names explicitly)
120        set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -DUNICODE -D_UNICODE")
121        # Filter out needless definitions
122        set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -DWIN32_LEAN_AND_MEAN -DNOMINMAX")
123        # Ignore various deprecation and security warnings (at least for now)
124        set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS")
125        # Increase maximum FD_SET size
126        set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -DFD_SETSIZE=1024")
127        if(MSVC)
128            # Reduce noise (at least for now)
129            set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} /wd4244 /wd4267")
130        endif()
131    endforeach()
132endif()
133
134find_package(Threads)
135find_package(PkgConfig QUIET)
136
137find_package(CURL ${CURL_MINIMUM} REQUIRED)
138
139if(UNIX)
140    find_package(ICONV REQUIRED)
141endif()
142
143if(WITH_CRYPTO STREQUAL "AUTO" OR WITH_CRYPTO STREQUAL "openssl")
144    tr_get_required_flag(WITH_CRYPTO OPENSSL_IS_REQUIRED)
145    find_package(OpenSSL ${OPENSSL_MINIMUM} ${OPENSSL_IS_REQUIRED})
146    tr_fixup_list_option(WITH_CRYPTO "openssl" OPENSSL_FOUND "AUTO" OPENSSL_IS_REQUIRED)
147    if(WITH_CRYPTO STREQUAL "openssl")
148        set(CRYPTO_PKG "openssl")
149        set(CRYPTO_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
150        set(CRYPTO_LIBRARIES ${OPENSSL_LIBRARIES})
151    endif()
152endif()
153if(WITH_CRYPTO STREQUAL "AUTO" OR WITH_CRYPTO STREQUAL "cyassl")
154    tr_get_required_flag(WITH_CRYPTO CYASSL_IS_REQUIRED)
155    find_package(CyaSSL ${CYASSL_MINIMUM} ${CYASSL_IS_REQUIRED})
156    tr_fixup_list_option(WITH_CRYPTO "cyassl" CYASSL_FOUND "AUTO" CYASSL_IS_REQUIRED)
157    if(WITH_CRYPTO STREQUAL "cyassl")
158        set(CRYPTO_PKG "cyassl")
159        set(CRYPTO_INCLUDE_DIRS ${CYASSL_INCLUDE_DIRS})
160        set(CRYPTO_LIBRARIES ${CYASSL_LIBRARIES})
161    endif()
162endif()
163if(WITH_CRYPTO STREQUAL "AUTO" OR WITH_CRYPTO STREQUAL "polarssl")
164    tr_get_required_flag(WITH_CRYPTO POLARSSL_IS_REQUIRED)
165    find_package(PolarSSL ${POLARSSL_MINIMUM} ${POLARSSL_IS_REQUIRED})
166    tr_fixup_list_option(WITH_CRYPTO "polarssl" POLARSSL_FOUND "AUTO" POLARSSL_IS_REQUIRED)
167    if(WITH_CRYPTO STREQUAL "polarssl")
168        set(CRYPTO_PKG "polarssl")
169        set(CRYPTO_INCLUDE_DIRS ${POLARSSL_INCLUDE_DIRS})
170        set(CRYPTO_LIBRARIES ${POLARSSL_LIBRARIES})
171    endif()
172endif()
173# We should have found the library by now
174if(CRYPTO_PKG STREQUAL "")
175    if(WITH_CRYPTO STREQUAL "AUTO")
176        message(FATAL_ERROR "Unable to find any supported crypto library.")
177    else()
178        message(FATAL_ERROR "Requested crypto library '${WITH_CRYPTO}' is not supported.")
179    endif()
180endif()
181
182if(ENABLE_GTK)
183    tr_get_required_flag(ENABLE_GTK GTK_IS_REQUIRED)
184
185    pkg_check_modules(GTK ${GTK_IS_REQUIRED}
186        gtk+-3.0>=${GTK_MINIMUM}
187        glib-2.0>=${GLIB_MINIMUM}
188        gio-2.0>=${GIO_MINIMUM}
189        gmodule-2.0>=${GLIB_MINIMUM}
190        gthread-2.0>=${GLIB_MINIMUM})
191
192    tr_fixup_auto_option(ENABLE_GTK GTK_FOUND GTK_IS_REQUIRED)
193
194    set(WITH_LIBAPPINDICATOR OFF)
195    if(ENABLE_GTK)
196        pkg_check_modules(LIBAPPINDICATOR appindicator3-0.1>=${LIBAPPINDICATOR_MINIMUM})
197        if(LIBAPPINDICATOR_FOUND)
198            set(WITH_LIBAPPINDICATOR ON)
199        endif()
200    endif()
201endif()
202
203if(ENABLE_QT)
204    tr_get_required_flag(ENABLE_QT QT_IS_REQUIRED)
205
206    if(POLICY CMP0020)
207        cmake_policy(SET CMP0020 NEW)
208    endif()
209
210    if(USE_QT5)
211        set(TR_QT5_MODULES Core Gui Widgets Network DBus LinguistTools)
212        set(QT_FOUND ON)
213        foreach(M ${TR_QT5_MODULES})
214            find_package(Qt5${M} ${QT_IS_REQUIRED})
215            if(NOT Qt5${M}_FOUND)
216                set(QT_FOUND OFF)
217                break()
218            endif()
219        endforeach()
220    else()
221        find_package(Qt4 4.6.2 ${QT_IS_REQUIRED} COMPONENTS QtCore QtGui QtNetwork QtDBus)
222    endif()
223
224    tr_fixup_auto_option(ENABLE_QT QT_FOUND QT_IS_REQUIRED)
225endif()
226
227find_package(ZLIB ${ZLIB_MINIMUM})
228if(ZLIB_FOUND)
229    add_definitions(-DHAVE_ZLIB)
230endif()
231
232set(THIRD_PARTY_DIR ${CMAKE_SOURCE_DIR}/third-party)
233
234if(WIN32)
235    tr_add_external_auto_library(EVENT2 event
236        PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/event2.cmake" "<SOURCE_DIR>/CMakeLists.txt")
237else()
238    tr_add_external_auto_library(EVENT2 event
239        BUILD_IN_SOURCE 1
240        CONFIGURE_COMMAND "<SOURCE_DIR>/autogen.sh"
241                  COMMAND "<SOURCE_DIR>/configure" "--prefix=<INSTALL_DIR>" "--disable-shared")
242endif()
243
244tr_add_external_auto_library(NATPMP natpmp
245    PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/natpmp.cmake" "<SOURCE_DIR>/CMakeLists.txt")
246if(NOT USE_SYSTEM_NATPMP)
247    set(NATPMP_DEFINITIONS -DNATPMP_STATICLIB)
248endif()
249
250tr_add_external_auto_library(MINIUPNPC miniupnpc
251    PATCH_COMMAND "${CMAKE_COMMAND}" -E remove_directory "<SOURCE_DIR>/minissdpd"
252          COMMAND "${CMAKE_COMMAND}" -E remove_directory "<SOURCE_DIR>/miniupnpc-async"
253          COMMAND "${CMAKE_COMMAND}" -E remove_directory "<SOURCE_DIR>/miniupnpc-libevent"
254          COMMAND "${CMAKE_COMMAND}" -E remove_directory "<SOURCE_DIR>/miniupnpd"
255          COMMAND "${CMAKE_COMMAND}" -E remove "<SOURCE_DIR>/README"
256          COMMAND "${CMAKE_COMMAND}" -E copy_directory "<SOURCE_DIR>/miniupnpc" "<SOURCE_DIR>"
257          COMMAND "${CMAKE_COMMAND}" -E remove_directory "<SOURCE_DIR>/miniupnpc"
258    CMAKE_ARGS
259        -DUPNPC_BUILD_STATIC=ON
260        -DUPNPC_BUILD_SHARED=OFF
261        -DUPNPC_BUILD_TESTS=OFF)
262set(MINIUPNPC_DEFINITIONS -DSYSTEM_MINIUPNP)
263if(NOT USE_SYSTEM_MINIUPNPC)
264    list(APPEND MINIUPNPC_DEFINITIONS -DMINIUPNP_STATICLIB)
265    set(MINIUPNPC_VERSION 1.9)
266    set(MINIUPNPC_API_VERSION 12)
267endif()
268
269tr_add_external_auto_library(DHT dht
270    PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/dht.cmake" "<SOURCE_DIR>/CMakeLists.txt")
271
272if(ENABLE_UTP)
273    tr_add_external_auto_library(UTP utp
274        PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/utp.cmake" "<SOURCE_DIR>/CMakeLists.txt"
275              COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/utp_config.h" "<SOURCE_DIR>/utp_config.h"
276              COMMAND "${CMAKE_COMMAND}" -E chdir "<SOURCE_DIR>" patch -p1 --binary -i "${THIRD_PARTY_DIR}/utp-01-ticket-5002.patch")
277endif()
278
279tr_add_external_auto_library(B64 b64
280    PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${THIRD_PARTY_DIR}/b64.cmake" "<SOURCE_DIR>/CMakeLists.txt"
281          COMMAND "${CMAKE_COMMAND}" -E chdir "<SOURCE_DIR>" patch -p1 -i "${THIRD_PARTY_DIR}/b64-01-newline.patch"
282          COMMAND "${CMAKE_COMMAND}" -E chdir "<SOURCE_DIR>" patch -p1 -i "${THIRD_PARTY_DIR}/b64-02-unsigned-char.patch")
283
284if(WITH_INOTIFY)
285    tr_get_required_flag(WITH_INOTIFY INOTIFY_IS_REQUIRED)
286
287    set(INOTIFY_FOUND OFF)
288    check_include_file(sys/inotify.h HAVE_SYS_INOTIFY_H)
289    check_function_exists(inotify_init HAVE_INOTIFY_INIT)
290    if(HAVE_SYS_INOTIFY_H AND HAVE_INOTIFY_INIT)
291        set(INOTIFY_FOUND ON)
292    endif()
293
294    tr_fixup_auto_option(WITH_INOTIFY INOTIFY_FOUND INOTIFY_IS_REQUIRED)
295endif()
296
297if(WITH_KQUEUE)
298    tr_get_required_flag(WITH_KQUEUE KQUEUE_IS_REQUIRED)
299
300    set(KQUEUE_FOUND OFF)
301    check_include_files("sys/types.h;sys/event.h" HAVE_SYS_EVENT_H)
302    check_function_exists(kqueue HAVE_KQUEUE)
303    if(HAVE_SYS_EVENT_H AND HAVE_KQUEUE)
304        set(KQUEUE_FOUND ON)
305    endif()
306
307    tr_fixup_auto_option(WITH_KQUEUE KQUEUE_FOUND KQUEUE_IS_REQUIRED)
308endif()
309
310if(WITH_SYSTEMD)
311    tr_get_required_flag(WITH_SYSTEMD SYSTEMD_IS_REQUIRED)
312
313    pkg_check_modules(SYSTEMD_DAEMON ${SYSTEMD_IS_REQUIRED} libsystemd-daemon)
314
315    tr_fixup_auto_option(WITH_SYSTEMD SYSTEMD_DAEMON_FOUND SYSTEMD_IS_REQUIRED)
316endif()
317
318include_directories(${CMAKE_BINARY_DIR})
319
320if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
321    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
322    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
323
324    set(NEEDED_COMPILER_FLAGS
325        -Wall
326        -W
327        -Wcast-align
328        -Wfloat-equal
329        -Wformat-security
330        -Wmissing-format-attribute
331        -Wpointer-arith
332        -Wredundant-decls
333        -Wundef
334        -Wunused-parameter
335        -Wwrite-strings)
336
337    if(NOT CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_VERSION VERSION_GREATER "3.3")
338        list(APPEND NEEDED_COMPILER_FLAGS
339            -Wextra
340            -Winit-self)
341    endif()
342
343    set(NEEDED_C_COMPILER_FLAGS
344        ${NEEDED_COMPILER_FLAGS}
345        -Winline
346        -Wmissing-declarations
347        -Wnested-externs
348        -Wstrict-prototypes)
349    string(REPLACE ";" " " NEEDED_C_COMPILER_FLAGS_STRING "${NEEDED_C_COMPILER_FLAGS}")
350    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NEEDED_C_COMPILER_FLAGS_STRING}")
351
352    set(NEEDED_CXX_COMPILER_FLAGS
353        ${NEEDED_COMPILER_FLAGS})
354    string(REPLACE ";" " " NEEDED_CXX_COMPILER_FLAGS_STRING "${NEEDED_CXX_COMPILER_FLAGS}")
355    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NEEDED_CXX_COMPILER_FLAGS_STRING}")
356endif()
357
358include(LargeFileSupport)
359
360set(NEEDED_HEADERS
361    stdbool.h
362    sys/statvfs.h
363    xfs/xfs.h)
364
365if(ENABLE_NLS)
366    list(APPEND NEEDED_HEADERS libintl.h)
367endif()
368
369foreach(H ${NEEDED_HEADERS})
370    tr_make_id("${H}" H_ID)
371    check_include_file(${H} HAVE_${H_ID})
372    if(HAVE_${H_ID})
373        add_definitions(-DHAVE_${H_ID})
374    endif()
375endforeach()
376
377set(NEEDED_FUNCTIONS
378    canonicalize_file_name
379    daemon
380    fallocate64
381    getmntent
382    getpagesize
383    htonll
384    iconv_open
385    localtime_r
386    memmem
387    mkdtemp
388    ntohll
389    posix_fadvise
390    posix_fallocate
391    posix_memalign
392    pread
393    pwrite
394    statvfs
395    strlcpy
396    strsep
397    syslog
398    valloc)
399
400foreach(F ${NEEDED_FUNCTIONS})
401    tr_make_id("${F}" F_ID)
402    check_function_exists(${F} HAVE_${F_ID})
403    if(HAVE_${F_ID})
404        add_definitions(-DHAVE_${F_ID})
405    endif()
406endforeach()
407
408# if(MINGW)
409#     check_function_exists(__mingw_printf HAVE_MINGW_PRINTF)
410#     if(HAVE_MINGW_PRINTF)
411#         add_definitions(-D__USE_MINGW_ANSI_STDIO=1 -D__STDC_FORMAT_MACROS=1)
412#     endif()
413# endif()
414
415if(ENABLE_NLS)
416    check_library_exists(intl libintl_gettext "" HAVE_LIBINTL)
417    if(HAVE_LIBINTL)
418        set(LIBINTL_LIBRARY intl)
419    endif()
420endif()
421
422check_library_exists(m sqrt "" HAVE_LIBM)
423if(HAVE_LIBM)
424    set(LIBM_LIBRARY m)
425endif()
426
427if(ENABLE_TESTS)
428    enable_testing()
429    include(CTest)
430endif()
431
432add_subdirectory(libtransmission)
433
434foreach(P daemon cli utils gtk qt)
435    string(TOUPPER "${P}" P_ID)
436    if(ENABLE_${P_ID})
437        add_subdirectory(${P})
438    endif()
439endforeach()
440
441if(ENABLE_DAEMON OR ENABLE_GTK OR ENABLE_QT)
442    install(DIRECTORY web DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${TR_NAME}
443        PATTERN *.am EXCLUDE
444        PATTERN *.scss EXCLUDE)
445endif()
446
447if(ENABLE_GTK AND ENABLE_NLS)
448    find_package(Gettext REQUIRED)
449    add_subdirectory(po)
450endif()
451
452if(INSTALL_DOC)
453    install(FILES AUTHORS COPYING NEWS README extras/rpc-spec.txt extras/send-email-when-torrent-done.sh DESTINATION ${CMAKE_INSTALL_DOCDIR})
454endif()
455
456set(CPACK_SOURCE_GENERATOR TBZ2)
457set(CPACK_SOURCE_PACKAGE_FILE_NAME "${TR_NAME}-${TR_USER_AGENT_PREFIX}")
458set(CPACK_SOURCE_IGNORE_FILES
459    \\\\.svn
460)
461
462include(CPack)
Note: See TracBrowser for help on using the repository browser.