cmake: Set install prefix to /usr for RPM packaging
[contrib/mraa.git] / CMakeLists.txt
1 cmake_minimum_required (VERSION 2.8)
2 project (mraa)
3
4 FIND_PACKAGE (Threads REQUIRED)
5
6 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fno-omit-frame-pointer")
7 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")
8 set (LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "Installation path for libraries")
9
10 # Set CMAKE_LIB_INSTALL_DIR if not defined
11 include(GNUInstallDirs)
12
13 # Appends the cmake/modules path to MAKE_MODULE_PATH variable.
14 set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
15
16 # Make a version file containing the current version from git.
17 include (GetGitRevisionDescription)
18 git_describe (VERSION "--tags")
19 if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND" OR "x_${VERSION}" STREQUAL "x_HEAD-HASH-NOTFOUND")
20   message (WARNING " - Install git to compile a production libmraa!")
21   set (VERSION "v0.7.5-dirty")
22 endif ()
23
24 message (INFO " - libmraa Version ${VERSION}")
25
26 #parse the version information into pieces.
27 string (REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
28 string (REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
29 string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION}")
30 string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+\\-([0-9]+).*" "\\1" VERSION_COMMIT "${VERSION}")
31 string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+-[0-9]+\\-(.*)" "\\1" VERSION_SHA1 "${VERSION}")
32 set (VERSION_SHORT "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
33
34 if ("${VERSION_COMMIT}" MATCHES "^v.*")
35   set (VERSION_COMMIT "")
36 endif()
37
38 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/version.c.in
39                 ${CMAKE_CURRENT_BINARY_DIR}/src/version.c)
40
41 # this is the library version, independant of git revision
42 set (mraa_VERSION_MAJOR ${VERSION_MAJOR})
43 set (mraa_VERSION_MINOR ${VERSION_MINOR})
44 set (mraa_VERSION_PATCH ${VERSION_PATCH})
45 set (mraa_VERSION_STRING ${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH})
46
47 set (CMAKE_SWIG_FLAGS "")
48
49 find_path (SYSTEM_USR_DIR "stdlib.h")
50 include_directories (${SYSTEM_USR_DIR})
51
52 option (BUILDDOC "Build all doc." OFF)
53 option (BUILDSWIG "Build swig modules." ON)
54 option (BUILDSWIGPYTHON "Build swig python modules." ON)
55 option (BUILDSWIGNODE "Build swig node modules." ON)
56 option (BUILDSWIGJAVA "Build Java API." OFF)
57 option (USBPLAT "Detection USB platform." ON)
58 option (FTDID2XX "Build with FTDI D2xx subplatform support." OFF)
59 option (FTDI4222 "Build with FTDI FT4222 subplatform support." OFF)
60 option (IPK "Generate IPK using CPack" OFF)
61 option (RPM "Generate RPM using CPack" OFF)
62 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
63 option (ENABLEEXAMPLES "Disable building of examples" ON)
64 option (INSTALLGPIOTOOL "Install gpio tool" OFF)
65 option (BUILDARCH "Override architecture to build for - override" OFF)
66 option (TESTS "Override the addition of tests" ON)
67
68 if (NOT BUILDSWIG)
69   set (BUILDSWIGPYTHON OFF)
70   set (BUILDSWIGNODE OFF)
71   set (BUILDSWIGJAVA OFF)
72 endif()
73
74 if (NOT BUILDARCH)
75   include (TargetArch)
76   target_architecture (DETECTED_ARCH)
77   message( INFO " - Target arch is ${DETECTED_ARCH}")
78 else ()
79   set (DETECTED_ARCH ${BUILDARCH})
80   message( INFO " - Override arch is ${DETECTED_ARCH}")
81 endif()
82
83 if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
84     OR DETECTED_ARCH STREQUAL "i386")
85   set (X86PLAT ON)
86 elseif (DETECTED_ARCH MATCHES "arm.*")
87   set (ARMPLAT ON)
88 else ()
89   message(FATAL_ERROR "Only x86 and arm platforms currently supported")
90 endif()
91
92 if (BUILDSWIGPYTHON)
93   if (BUILDPYTHON3)
94     set (PYTHONBUILD_VERSION 3)
95   else ()
96     set (PYTHONBUILD_VERSION 2.7)
97   endif ()
98   find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
99   if (TESTS)
100     if (${PYTHONINTERP_FOUND})
101       enable_testing ()
102       add_subdirectory (tests)
103     endif ()
104   endif ()
105 endif ()
106
107 if (BUILDDOC)
108   # add a target to generate API documentation with Doxygen
109   find_package (Doxygen)
110   if (DOXYGEN_FOUND)
111     configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
112     add_custom_target (doc
113       ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
114       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
115       COMMENT "Generating API documentation with Doxygen" VERBATIM
116     )
117   endif (DOXYGEN_FOUND)
118 endif ()
119
120 if (IPK)
121   # Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
122   if (DEFINED ENV{OECORE_TARGET_SYSROOT})
123     GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
124     string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
125   else ()
126     # debian uses amd64 to denote x86_64
127     if (DETECTED_ARCH STREQUAL "x86_64")
128       set (TARGET_ARCH "amd64")
129     else ()
130       set (TARGET_ARCH ${DETECTED_ARCH})
131     endif ()
132   endif ()
133   message (INFO " - Package arch is ${TARGET_ARCH}")
134
135   set(CPACK_GENERATOR "DEB" "TGZ")
136   set(OPKG_ARCH ${TARGET_ARCH})
137   set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
138   set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
139   set(mraa_PACKAGE_ON_TAG ".")
140   if ("${VERSION_COMMIT}" STREQUAL "")
141     set(mraa_PACKAGE_ON_TAG "")
142   endif()
143   set(CPACK_PACKAGE_VERSION 
144       "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
145   set(CPACK_PACKAGE_NAME "mraa")
146   set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
147   set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
148   set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
149   set(CPACK_DEBIAN_PACKAGE_PROVIDES "mraa-dev, mraa-dbg, mraa-doc")
150   set(CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_PROVIDES}, libmraa, libmraa-dev, libmraa-doc")
151   set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
152   set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
153   include (CPack)
154 endif()
155
156 if (RPM)
157   message (INFO " - Enabled RPM packaging for ${DETECTED_ARCH}")
158   set(CMAKE_INSTALL_PREFIX "/usr")
159   set(CPACK_PACKAGE_VERSION ${VERSION})
160   set(CPACK_GENERATOR "RPM")
161   set(CPACK_PACKAGE_NAME "libmraa${mraa_VERSION_MAJOR}")
162   set(CPACK_PACKAGE_RELEASE 1)
163   set(CPACK_PACKAGE_VERSION
164       "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
165   set(CPACK_PACKAGE_CONTACT "Intel IoT-Devkit")
166   set(CPACK_PACKAGE_VENDOR "Intel IoT-Devkit")
167   set(CPACK_RPM_PACKAGE_PROVIDES "${CPACK_PACKAGE_NAME}-devel")
168   # Get distro tag (e.g. 'fc20') by parsing output of rpm --showrc
169   EXECUTE_PROCESS(
170     COMMAND rpm --showrc
171     COMMAND grep -w dist
172     COMMAND sed -e "s/\\t./ /"
173     COMMAND awk "{printf \"%s\", \$NF}"
174     OUTPUT_VARIABLE DIST_TAG
175   )
176   set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${DIST_TAG}.${DETECTED_ARCH}")
177   include(CPack)
178 endif()
179
180 add_subdirectory (src)
181 if (ENABLEEXAMPLES)
182   add_subdirectory (examples)
183 endif ()