packaging: also support rpmbuild from Tizen:2.3
[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 "${CMAKE_INSTALL_LIBDIR}" 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" OR "x_${VERSION}" STREQUAL "x_-128-NOTFOUND")
20   message (WARNING " - Install git to compile a production libmraa!")
21   set (VERSION "v0.8.1-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." OFF)
58 option (FTDI4222 "Build with FTDI FT4222 subplatform support." OFF)
59 option (IPK "Generate IPK using CPack" OFF)
60 option (RPM "Generate RPM using CPack" OFF)
61 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
62 option (ENABLEEXAMPLES "Disable building of examples" ON)
63 option (INSTALLGPIOTOOL "Install gpio tool" OFF)
64 option (BUILDARCH "Override architecture to build for - override" OFF)
65 option (TESTS "Override the addition of tests" ON)
66
67 set (MRAAPLATFORMFORCE "" CACHE STRING "ALL")
68
69 if (NOT BUILDSWIG)
70   set (BUILDSWIGPYTHON OFF)
71   set (BUILDSWIGNODE OFF)
72   set (BUILDSWIGJAVA OFF)
73 endif()
74
75 if (NOT BUILDARCH)
76   include (TargetArch)
77   target_architecture (DETECTED_ARCH)
78   message( INFO " - Target arch is ${DETECTED_ARCH}")
79 else ()
80   set (DETECTED_ARCH ${BUILDARCH})
81   message( INFO " - Override arch is ${DETECTED_ARCH}")
82 endif()
83
84 if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
85     OR DETECTED_ARCH STREQUAL "i386")
86   set (X86PLAT ON)
87 elseif (DETECTED_ARCH MATCHES "arm.*")
88   set (ARMPLAT ON)
89 else ()
90   message(FATAL_ERROR "Only x86 and arm platforms currently supported")
91 endif()
92
93 if (BUILDSWIGPYTHON)
94   if (BUILDPYTHON3)
95     set (PYTHONBUILD_VERSION 3)
96   else ()
97     set (PYTHONBUILD_VERSION 2.7)
98   endif ()
99   find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
100   if (TESTS)
101     if (${PYTHONINTERP_FOUND})
102       enable_testing ()
103       add_subdirectory (tests)
104     endif ()
105   endif ()
106 endif ()
107
108 if (BUILDDOC)
109   # add a target to generate API documentation with Doxygen
110   find_package (Doxygen)
111   if (DOXYGEN_FOUND)
112     configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
113     if (BUILDSWIGJAVA)
114       configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.java.in ${CMAKE_CURRENT_BINARY_DIR}/src/java/Doxyfile @ONLY)
115     endif ()
116     add_custom_target (doc
117       ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
118       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
119       COMMENT "Generating API documentation with Doxygen" VERBATIM
120     )
121   endif (DOXYGEN_FOUND)
122 endif ()
123
124 if (IPK)
125   # Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
126   if (DEFINED ENV{OECORE_TARGET_SYSROOT})
127     GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
128     string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
129   else ()
130     # debian uses amd64 to denote x86_64
131     if (DETECTED_ARCH STREQUAL "x86_64")
132       set (TARGET_ARCH "amd64")
133     else ()
134       set (TARGET_ARCH ${DETECTED_ARCH})
135     endif ()
136   endif ()
137   message (INFO " - Package arch is ${TARGET_ARCH}")
138
139   set(CPACK_GENERATOR "DEB" "TGZ")
140   set(OPKG_ARCH ${TARGET_ARCH})
141   set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
142   set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
143   set(mraa_PACKAGE_ON_TAG ".")
144   if ("${VERSION_COMMIT}" STREQUAL "")
145     set(mraa_PACKAGE_ON_TAG "")
146   endif()
147   set(CPACK_PACKAGE_VERSION 
148       "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
149   set(CPACK_PACKAGE_NAME "mraa")
150   set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
151   set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
152   set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
153   set(CPACK_DEBIAN_PACKAGE_PROVIDES "mraa-dev, mraa-dbg, mraa-doc")
154   set(CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_PROVIDES}, libmraa, libmraa-dev, libmraa-doc")
155   set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
156   set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
157   include (CPack)
158 endif()
159
160 if (RPM)
161   message (INFO " - Enabled RPM packaging for ${DETECTED_ARCH}")
162   set(CMAKE_INSTALL_PREFIX "/usr")
163   set(CPACK_PACKAGE_VERSION ${VERSION})
164   set(CPACK_GENERATOR "RPM")
165   set(CPACK_PACKAGE_NAME "libmraa${mraa_VERSION_MAJOR}")
166   set(CPACK_PACKAGE_RELEASE 1)
167   set(CPACK_PACKAGE_VERSION
168       "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
169   set(CPACK_PACKAGE_CONTACT "Intel IoT-Devkit")
170   set(CPACK_PACKAGE_VENDOR "Intel IoT-Devkit")
171   set(CPACK_RPM_PACKAGE_PROVIDES "${CPACK_PACKAGE_NAME}-devel")
172   # Get distro tag (e.g. 'fc20') by parsing output of rpm --showrc
173   EXECUTE_PROCESS(
174     COMMAND rpm --showrc
175     COMMAND grep -w dist
176     COMMAND sed -e "s/\\t./ /"
177     COMMAND awk "{printf \"%s\", \$NF}"
178     OUTPUT_VARIABLE DIST_TAG
179   )
180   set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${DIST_TAG}.${DETECTED_ARCH}")
181   include(CPack)
182 endif()
183
184 add_subdirectory (src)
185 if (ENABLEEXAMPLES)
186   add_subdirectory (examples)
187 endif ()