CMake: fix indentation and normalize braces
[libftdi] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
2
3 # Project
4 project(libftdi1 C)
5 set(MAJOR_VERSION 1)
6 set(MINOR_VERSION 5)
7 set(PACKAGE libftdi1)
8 set(VERSION_STRING ${MAJOR_VERSION}.${MINOR_VERSION})
9 set(VERSION ${VERSION_STRING})
10 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
11
12 # CMake
13 if("${CMAKE_BUILD_TYPE}" STREQUAL "")
14   set(CMAKE_BUILD_TYPE     RelWithDebInfo)
15 endif("${CMAKE_BUILD_TYPE}" STREQUAL "")
16 set(CMAKE_COLOR_MAKEFILE ON)
17
18 add_definitions(-Wall)
19
20 include(CMakeOptions.txt)
21
22 # Debug build
23 message("-- Build type: ${CMAKE_BUILD_TYPE}")
24 if(${CMAKE_BUILD_TYPE} STREQUAL Debug)
25   add_definitions(-DDEBUG)
26 endif(${CMAKE_BUILD_TYPE} STREQUAL Debug)
27
28 # find libusb
29 find_package( PkgConfig )
30 if (PkgConfig_FOUND)
31   pkg_check_modules( LIBUSB libusb-1.0 )
32   if (LIBUSB_FOUND)
33     include_directories ( ${LIBUSB_INCLUDE_DIRS} )
34   else()
35     find_package ( USB1 REQUIRED )
36     include_directories ( ${LIBUSB_INCLUDE_DIR} )
37   endif()
38 endif()
39
40 # Find Boost
41 if (FTDIPP OR BUILD_TESTS)
42   find_package( Boost REQUIRED )
43 endif()
44
45 # Set components
46 set(CPACK_COMPONENTS_ALL sharedlibs staticlibs headers)
47 set(CPACK_COMPONENT_SHAREDLIBS_DISPLAY_NAME "Shared libraries")
48 set(CPACK_COMPONENT_STATICLIBS_DISPLAY_NAME "Static libraries")
49 set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ Headers")
50
51 set(CPACK_COMPONENT_SHAREDLIBS_DESCRIPTION
52 "Shared library for general use.")
53 set(CPACK_COMPONENT_STATICLIBS_DESCRIPTION
54 "Static library, good if you want to embed libftdi1 in your application.")
55 set(CPACK_COMPONENT_HEADERS_DESCRIPTION
56 "C/C++ header files.")
57
58 set(CPACK_COMPONENT_SHAREDLIBS_GROUP "Development")
59 set(CPACK_COMPONENT_STATICLIBS_GROUP "Development")
60 set(CPACK_COMPONENT_HEADERS_GROUP    "Development")
61
62 # guess LIB_SUFFIX, don't take debian multiarch into account
63 if ( NOT DEFINED LIB_SUFFIX )
64   if( CMAKE_SYSTEM_NAME MATCHES "Linux"
65       AND NOT CMAKE_CROSSCOMPILING
66       AND NOT EXISTS "/etc/debian_version"
67       AND NOT EXISTS "/etc/arch-release" )
68     if ( "${CMAKE_SIZEOF_VOID_P}" EQUAL "8" )
69       set ( LIB_SUFFIX 64 )
70     endif ()
71   endif ()
72 endif ()
73
74 if(NOT APPLE)
75   if(CMAKE_SIZEOF_VOID_P EQUAL 4)
76     SET(PACK_ARCH "")
77   else(CMAKE_SIZEOF_VOID_P EQUAL 8)
78     SET(PACK_ARCH .x86_64)
79   endif(CMAKE_SIZEOF_VOID_P EQUAL 4)
80 else(NOT APPLE)
81   SET(PACK_ARCH "")
82 endif(NOT APPLE)
83
84 # Package information
85 set(CPACK_PACKAGE_VERSION              ${VERSION_STRING})
86 set(CPACK_PACKAGE_CONTACT              "Intra2net AG <libftdi@developer.intra2net.com>")
87 set(CPACK_PACKAGE_DESCRIPTION          "libftdi1 library.")
88 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY  ${CPACK_PACKAGE_DESCRIPTION})
89
90 # Package settings
91 if ( UNIX )
92   set(CPACK_GENERATOR                    "DEB;RPM")
93   set(CPACK_CMAKE_GENERATOR              "Unix Makefiles")
94   set(CPACK_PACKAGE_NAME                 ${PROJECT_NAME})
95   set(CPACK_PACKAGE_FILE_NAME            ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}${PACK_ARCH})
96 endif ()
97
98 if ( WIN32 )
99   set ( CPACK_GENERATOR                    "NSIS" )
100   set ( CPACK_CMAKE_GENERATOR              "MinGW Makefiles" )
101   set ( CPACK_PACKAGE_NAME                 "${PROJECT_NAME}" )
102   set ( CPACK_PACKAGE_VENDOR               "" )
103   set ( CPACK_PACKAGE_INSTALL_DIRECTORY    "libftdi1" )
104   set ( CPACK_PACKAGE_FILE_NAME            "${PROJECT_NAME}-${VERSION_STRING}-win32")
105   set ( CPACK_NSIS_DISPLAY_NAME            "libftdi1" )
106   set ( CPACK_NSIS_MODIFY_PATH             ON )
107 endif ()
108
109 set(CPACK_RESOURCE_FILE_LICENSE        ${CMAKE_SOURCE_DIR}/LICENSE)
110
111 set(CPACK_SOURCE_GENERATOR             TGZ)
112 set(CPACK_SOURCE_IGNORE_FILES          "\\\\.git;~$;build/")
113 set(CPACK_SOURCE_PACKAGE_FILE_NAME     ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION})
114
115 # Subdirectories
116 if ( UNIX )
117   set ( CPACK_SET_DESTDIR ON )
118 endif ()
119
120 # "make dist" target
121 set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${VERSION_STRING})
122 add_custom_target(dist
123     COMMAND git archive --prefix=${ARCHIVE_NAME}/ HEAD
124             | bzip2 > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
125     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
126
127 if ( DOCUMENTATION )
128   find_package ( Doxygen REQUIRED)
129
130   # Copy doxy.config.in
131   set(top_srcdir ${CMAKE_SOURCE_DIR})
132   configure_file(${CMAKE_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile )
133   configure_file(${CMAKE_SOURCE_DIR}/doc/Doxyfile.xml.in ${CMAKE_BINARY_DIR}/Doxyfile.xml )
134
135   # Run doxygen
136   add_custom_command(
137     OUTPUT ${CMAKE_BINARY_DIR}/doc/html/index.html
138     COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/doc
139     COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile
140     DEPENDS ${c_headers};${c_sources};${cpp_sources};${cpp_headers}
141   )
142
143   add_custom_target(docs ALL DEPENDS ${CMAKE_BINARY_DIR}/doc/html/index.html)
144 endif ()
145
146 add_subdirectory(src)
147 if ( FTDIPP )
148   project(libftdi1 C CXX)
149   add_subdirectory(ftdipp)
150 endif ()
151 if ( PYTHON_BINDINGS )
152 add_subdirectory(python)
153 endif ()
154 if ( FTDI_EEPROM )
155   add_subdirectory(ftdi_eeprom)
156 endif ()
157 if ( EXAMPLES )
158   add_subdirectory(examples)
159 endif ()
160 add_subdirectory(packages)
161 if ( BUILD_TESTS )
162   project(libftdi1 C CXX)
163   add_subdirectory(test)
164 endif ()
165
166 # PkgConfig
167 set(prefix      ${CMAKE_INSTALL_PREFIX})
168 set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
169 set(includedir  ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME})
170
171 if(${UNIX})
172   set(libdir      ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})
173 endif(${UNIX})
174 if(${WIN32})
175   set(libdir      ${CMAKE_INSTALL_PREFIX}/bin)
176 endif(${WIN32})
177
178 configure_file(${CMAKE_SOURCE_DIR}/libftdi1.pc.in ${CMAKE_BINARY_DIR}/libftdi1.pc @ONLY)
179 configure_file(${CMAKE_SOURCE_DIR}/libftdipp1.pc.in ${CMAKE_BINARY_DIR}/libftdipp1.pc @ONLY)
180 install(FILES ${CMAKE_BINARY_DIR}/libftdi1.pc ${CMAKE_BINARY_DIR}/libftdipp1.pc
181         DESTINATION lib${LIB_SUFFIX}/pkgconfig)
182
183 if (UNIX OR MINGW)
184   configure_file ( libftdi1-config.in ${CMAKE_CURRENT_BINARY_DIR}/libftdi1-config @ONLY )
185   install ( PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libftdi1-config
186             DESTINATION bin )
187 endif ()
188
189 # config script install path
190 if ( NOT DEFINED LIBFTDI_CMAKE_CONFIG_DIR )
191   set ( LIBFTDI_CMAKE_CONFIG_DIR lib${LIB_SUFFIX}/cmake/libftdi1 )
192 endif ()
193
194 set ( LIBFTDI_INCLUDE_DIR ${includedir} )
195 set ( LIBFTDI_INCLUDE_DIRS ${LIBFTDI_INCLUDE_DIR} )
196 set ( LIBFTDI_LIBRARY ftdi1 )
197 set ( LIBFTDI_LIBRARIES ${LIBFTDI_LIBRARY} )
198 list ( APPEND LIBFTDI_LIBRARIES ${LIBUSB_LIBRARIES} )
199 set ( LIBFTDI_STATIC_LIBRARY ftdi1.a )
200 set ( LIBFTDI_STATIC_LIBRARIES ${LIBFTDI_STATIC_LIBRARY} )
201 list ( APPEND LIBFTDI_STATIC_LIBRARIES ${LIBUSB_LIBRARIES} )
202 if ( FTDIPP )
203   set ( LIBFTDIPP_LIBRARY ftdipp1 )
204   set ( LIBFTDIPP_LIBRARIES ${LIBFTDIPP_LIBRARY} )
205   list ( APPEND LIBFTDIPP_LIBRARIES ${LIBUSB_LIBRARIES} )
206 endif ()
207 set ( LIBFTDI_LIBRARY_DIRS ${libdir} )
208 set ( LIBFTDI_ROOT_DIR ${prefix} )
209 set ( LIBFTDI_VERSION_STRING ${VERSION_STRING} )
210 set ( LIBFTDI_VERSION_MAJOR ${MAJOR_VERSION} )
211 set ( LIBFTDI_VERSION_MINOR ${MINOR_VERSION} )
212
213 set ( LIBFTDI_USE_FILE ${CMAKE_INSTALL_PREFIX}/${LIBFTDI_CMAKE_CONFIG_DIR}/UseLibFTDI1.cmake )
214
215 include(CMakePackageConfigHelpers)
216
217 configure_package_config_file (
218   cmake/LibFTDI1Config.cmake.in
219   ${CMAKE_CURRENT_BINARY_DIR}/LibFTDI1Config.cmake
220   INSTALL_DESTINATION ${LIBFTDI_CMAKE_CONFIG_DIR}
221   PATH_VARS
222     LIBFTDI_USE_FILE
223     LIBFTDI_ROOT_DIR
224     LIBFTDI_INCLUDE_DIR
225     LIBFTDI_INCLUDE_DIRS
226     LIBFTDI_LIBRARY_DIRS
227   NO_CHECK_REQUIRED_COMPONENTS_MACRO
228 )
229 write_basic_package_version_file (
230   LibFTDI1ConfigVersion.cmake
231   VERSION ${LIBFTDI_VERSION_STRING}
232   COMPATIBILITY AnyNewerVersion
233 )
234
235 install (
236   FILES
237     ${CMAKE_CURRENT_BINARY_DIR}/LibFTDI1Config.cmake
238     ${CMAKE_CURRENT_BINARY_DIR}/LibFTDI1ConfigVersion.cmake
239     cmake/UseLibFTDI1.cmake
240   DESTINATION ${LIBFTDI_CMAKE_CONFIG_DIR}
241 )
242
243 include(CPack)
244
245 message (STATUS "Summary of build options:
246
247   Build static libs: ${STATICLIBS}
248   Build C++ bindings: ${FTDIPP}
249   Build Python bindings: ${PYTHON_BINDINGS}
250   Build ftdi_eeprom: ${FTDI_EEPROM}
251   Build examples: ${EXAMPLES}
252   Build tests: ${BUILD_TESTS}
253   Build API documentation: ${DOCUMENTATION}
254 ")