/alps/pcitool

To get this branch, use:
bzr branch http://darksoft.org/webbzr/alps/pcitool
370 by Suren A. Chilingaryan
RPM generation
1
project(pcitool C)
126 by Suren A. Chilingaryan
multithread preprocessing of ipecamera frames and code reorganization
2
405.1.2 by Suren A. Chilingaryan
Fix ABI version
3
set(RELEASE "0")
403 by Suren A. Chilingaryan
Allow mapping of arbitrary memory areas
4
set(PCILIB_VERSION "0.2.8")
405.1.2 by Suren A. Chilingaryan
Fix ABI version
5
set(PCILIB_ABI_VERSION "2")
126 by Suren A. Chilingaryan
multithread preprocessing of ipecamera frames and code reorganization
6
346.1.10 by Vasilii Chernov
1. Cmakelists - move copy xml folder command to root file
7
cmake_minimum_required(VERSION 2.8)
324 by Suren A. Chilingaryan
Documentation update
8
#set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH true)
9
#set(CMAKE_PREFIX_PATH ${CMAKE_SYSTEM_PREFIX_PATH})
126 by Suren A. Chilingaryan
multithread preprocessing of ipecamera frames and code reorganization
10
346.1.16 by Vasilii Chernov
1. Add cmake BUILD_PYTHON_MODULES option.
11
set(DISABLE_PCITOOL FALSE CACHE BOOL "Build only the library")
353 by Suren A. Chilingaryan
Merge Python scripting support from Vasiliy Chernov
12
set(DISABLE_PYTHON FALSE CACHE BOOL "Disable python scripting support") 
372 by Suren A. Chilingaryan
Integrate last part of Python code from Vasiliy Chernov
13
set(DISABLE_SERVERS FALSE CACHE BOOL "Disable Web API support") 
152 by Suren A. Chilingaryan
build scripts: allow to build the library without pcitool
14
253 by Suren A. Chilingaryan
Include version information in all API descriptions
15
#list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
152 by Suren A. Chilingaryan
build scripts: allow to build the library without pcitool
16
387 by Suren A. Chilingaryan
Use GNUInstallDirs to detect install directories (should fix problems on Debian/Ubuntu)
17
18
include(GNUInstallDirs)
19
include(CheckIncludeFiles)
20
21
include(cmake/tools.cmake)
22
include(cmake/version.cmake)
23
VERSION_TO_VARS(${PCILIB_VERSION} PCILIB_VERSION_MAJOR PCILIB_VERSION_MINOR PCILIB_VERSION_MICRO)
24
25
set(EXTRA_SYSTEM_LIBS -lrt)
26
add_definitions("-fPIC --std=c99 -Wall -O2 -gdwarf-2 -g3 -fno-omit-frame-pointer")
27
#add_definitions("-fPIC --std=c99 -Wall -O2")
28
29
find_package(PkgConfig REQUIRED)
30
find_package(Threads REQUIRED)
31
find_package(Doxygen)
370 by Suren A. Chilingaryan
RPM generation
32
33
if (NOT DEFINED PCILIB_PLUGIN_DIR)
388 by Suren A. Chilingaryan
Use GNUInstallDirs
34
    set(PCILIB_PLUGIN_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/pcilib" CACHE PATH "Directory to install plugins")
370 by Suren A. Chilingaryan
RPM generation
35
endif (NOT DEFINED PCILIB_PLUGIN_DIR)
36
37
if (NOT DEFINED PCILIB_DATA_DIR)
388 by Suren A. Chilingaryan
Use GNUInstallDirs
38
    set(PCILIB_DATA_DIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}/pcilib" CACHE PATH "Directory to install data files")
370 by Suren A. Chilingaryan
RPM generation
39
endif (NOT DEFINED PCILIB_DATA_DIR)
40
41
if (NOT DEFINED PCILIB_MODEL_DIR)
42
    set(PCILIB_MODEL_DIR "${PCILIB_DATA_DIR}/models" CACHE PATH "Directory to install XML models")
43
endif (NOT DEFINED PCILIB_MODEL_DIR)
44
372 by Suren A. Chilingaryan
Integrate last part of Python code from Vasiliy Chernov
45
if (NOT DEFINED PCILIB_SERVER_DIR)
46
    set(PCILIB_SERVER_DIR "${PCILIB_DATA_DIR}/pyserver" CACHE PATH "Directory to install python server")
47
endif (NOT DEFINED PCILIB_SERVER_DIR)
48
370 by Suren A. Chilingaryan
RPM generation
49
if (NOT DEFINED PCILIB_DOC_DIR)
400 by Suren A. Chilingaryan
Further fixes for out-of-source compilation
50
    set(PCILIB_DOC_DIR "${CMAKE_BINARY_DIR}/docs/" CACHE PATH "Directory to install documentation")
370 by Suren A. Chilingaryan
RPM generation
51
endif (NOT DEFINED PCILIB_DOC_DIR)
52
    
53
if (NOT DEFINED PCILIB_DEBUG_DIR)
54
    set(PCILIB_DEBUG_DIR "." CACHE PATH "Directory to write debug information")
55
endif (NOT DEFINED PCILIB_DEBUG_DIR)
56
400 by Suren A. Chilingaryan
Further fixes for out-of-source compilation
57
if (NOT DEFINED PCILIB_DYNAMIC_HEADERS_INC)
58
    set(PCILIB_DYNAMIC_HEADERS_INC "-I${CMAKE_BINARY_DIR}")
59
endif (NOT DEFINED PCILIB_DYNAMIC_HEADERS_INC)
60
388 by Suren A. Chilingaryan
Use GNUInstallDirs
61
SET(ENV{PKG_CONFIG_PATH} "${CMAKE_INSTALL_LIBDIR}/pkgconfig:$ENV{PKG_CONFIG_PATH}")
302 by Suren A. Chilingaryan
Fixes out-of-source builds and minor build issues
62
353 by Suren A. Chilingaryan
Merge Python scripting support from Vasiliy Chernov
63
if (NOT DISABLE_PYTHON)
367 by Suren A. Chilingaryan
Further improvements of Python scripting and web-interface API for register manipulations by Vasiliy Chernov
64
    set(PYTHON_VERSION 2.7 CACHE STRING "python version")
65
346.1.35 by Vasilii Chernov
Add Python3 support
66
    find_package(PythonInterp ${PYTHON_VERSION} REQUIRED)
367 by Suren A. Chilingaryan
Further improvements of Python scripting and web-interface API for register manipulations by Vasiliy Chernov
67
    find_package(PythonLibs ${PYTHON_VERSION_STRING} EXACT REQUIRED)
68
353 by Suren A. Chilingaryan
Merge Python scripting support from Vasiliy Chernov
69
    find_package(SWIG REQUIRED)
359 by Suren A. Chilingaryan
Altenrative way to detect location where python modules should be installed
70
    if (NOT PYTHON_VERSION_STRING VERSION_EQUAL PYTHONLIBS_VERSION_STRING)
71
	message (FATAL_ERROR "Version mismatch between python interpreter and libraries")
72
    endif (NOT PYTHON_VERSION_STRING VERSION_EQUAL PYTHONLIBS_VERSION_STRING)
73
388 by Suren A. Chilingaryan
Use GNUInstallDirs
74
#    execute_process (COMMAND ${PYTHON_EXECUTABLE} -c "from sysconfig import get_path; print get_path('platlib')" OUTPUT_VARIABLE PCILIB_PYTHON_SITEDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
359 by Suren A. Chilingaryan
Altenrative way to detect location where python modules should be installed
75
    
388 by Suren A. Chilingaryan
Use GNUInstallDirs
76
    if (NOT DEFINED PCILIB_PYTHON_SITEDIR)
370 by Suren A. Chilingaryan
RPM generation
77
	execute_process (COMMAND ${PYTHON_EXECUTABLE} -c "import site; print (site.PREFIXES[-1])" OUTPUT_VARIABLE PYTHON_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
78
	file (TO_CMAKE_PATH "${PYTHON_PREFIX}" PYTHON_PREFIX)
389 by Suren A. Chilingaryan
Better detection of Python site-dir
79
80
#	execute_process (COMMAND ${PYTHON_EXECUTABLE} -c "import site; print (site.getsitepackages()[0])" OUTPUT_VARIABLE PYTHON_SITE_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
81
#	file (TO_CMAKE_PATH "${PYTHON_SITE_DIR}" PYTHON_SITE_DIR)
82
#	string (REGEX REPLACE "^${PYTHON_PREFIX}/" "${CMAKE_INSTALL_PREFIX}/" PYTHON_SITE_DIR "${PYTHON_SITE_DIR}")
83
84
	execute_process (COMMAND ${PYTHON_EXECUTABLE} -c "import site; list = [dir for dir in site.getsitepackages() if dir.startswith('${CMAKE_INSTALL_PREFIX}')]; liblist = [dir for dir in list if dir.startswith('${CMAKE_INSTALL_PREFIX}/lib')]; print liblist[0] if liblist else list[0] if list else site.getsitepackages()[0]" OUTPUT_VARIABLE PYTHON_SITE_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
85
	message(${PYTHON_SITE_DIR})
370 by Suren A. Chilingaryan
RPM generation
86
	file (TO_CMAKE_PATH "${PYTHON_SITE_DIR}" PYTHON_SITE_DIR)
359 by Suren A. Chilingaryan
Altenrative way to detect location where python modules should be installed
87
388 by Suren A. Chilingaryan
Use GNUInstallDirs
88
	set(PCILIB_PYTHON_SITEDIR ${PYTHON_SITE_DIR} CACHE PATH "path to install python module")
89
    endif (NOT DEFINED PCILIB_PYTHON_SITEDIR)
359 by Suren A. Chilingaryan
Altenrative way to detect location where python modules should be installed
90
353 by Suren A. Chilingaryan
Merge Python scripting support from Vasiliy Chernov
91
    set(HAVE_PYTHON TRUE)
92
endif (NOT DISABLE_PYTHON)
126 by Suren A. Chilingaryan
multithread preprocessing of ipecamera frames and code reorganization
93
372 by Suren A. Chilingaryan
Integrate last part of Python code from Vasiliy Chernov
94
if (NOT HAVE_PYTHON)
95
    set(DISABLE_SERVERS TRUE)
96
endif (NOT HAVE_PYTHON)
97
303 by Suren A. Chilingaryan
Initial integration of XML support
98
check_include_files(stdatomic.h HAVE_STDATOMIC_H)
99
307 by Suren A. Chilingaryan
Finalyze XML support and provide initial support for views (only descriptions so far)
100
find_path(UTHASH_INCLUDE_DIRS uthash.h PATH_SUFFIXES uthash)
101
if (UTHASH_INCLUDE_DIRS)
102
    message ("uthash is found at ${UTHASH_INCLUDE_DIRS}")
103
else (UTHASH_INCLUDE_DIRS)
104
    message (FATAL_ERROR "uthash is not found...")
105
endif (UTHASH_INCLUDE_DIRS)
106
303 by Suren A. Chilingaryan
Initial integration of XML support
107
pkg_check_modules(LIBXML2 libxml-2.0 REQUIRED)
108
126 by Suren A. Chilingaryan
multithread preprocessing of ipecamera frames and code reorganization
109
#Check in sibling directory
152 by Suren A. Chilingaryan
build scripts: allow to build the library without pcitool
110
if (NOT DISABLE_PCITOOL)
111
    pkg_check_modules(FASTWRITER fastwriter REQUIRED)
112
endif (NOT DISABLE_PCITOOL)
126 by Suren A. Chilingaryan
multithread preprocessing of ipecamera frames and code reorganization
113
241 by Suren A. Chilingaryan
Further adjustments to get ready for independent event plugins
114
306 by Suren A. Chilingaryan
Reorder statements in CMakeLists.txt properly
115
add_subdirectory(dma)
116
add_subdirectory(protocols)
307 by Suren A. Chilingaryan
Finalyze XML support and provide initial support for views (only descriptions so far)
117
add_subdirectory(views)
306 by Suren A. Chilingaryan
Reorder statements in CMakeLists.txt properly
118
add_subdirectory(pcilib)
119
add_subdirectory(pcitool)
120
add_subdirectory(apps)
121
add_subdirectory(xml)
122
353 by Suren A. Chilingaryan
Merge Python scripting support from Vasiliy Chernov
123
if (HAVE_PYTHON)
124
    add_subdirectory(pywrap)
125
endif (HAVE_PYTHON)
346.1.16 by Vasilii Chernov
1. Add cmake BUILD_PYTHON_MODULES option.
126
374 by Suren A. Chilingaryan
Handle build.h in releases
127
set_target_properties(pcilib PROPERTIES VERSION ${PCILIB_VERSION} SOVERSION ${PCILIB_ABI_VERSION})
370 by Suren A. Chilingaryan
RPM generation
128
add_custom_target(docs
129
    COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/docs/Doxyfile 
130
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs
131
    COMMENT "Generating API documentation with Doxygen" VERBATIM
132
)
133
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "docs/html")
134
241 by Suren A. Chilingaryan
Further adjustments to get ready for independent event plugins
135
install(FILES 
261 by Suren A. Chilingaryan
Add doxygen configuration
136
    ${CMAKE_CURRENT_BINARY_DIR}/misc/pcitool.pc
388 by Suren A. Chilingaryan
Use GNUInstallDirs
137
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
241 by Suren A. Chilingaryan
Further adjustments to get ready for independent event plugins
138
)
253 by Suren A. Chilingaryan
Include version information in all API descriptions
139
372 by Suren A. Chilingaryan
Integrate last part of Python code from Vasiliy Chernov
140
if (NOT DISABLE_SERVERS)
346.1.39 by Vasilii Chernov
Add python servers instalation step. Add systemd config files generation for python servers.
141
   #install Python servers
142
   file(GLOB DEPLOY_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/pyserver/*")
143
   foreach(ITEM ${DEPLOY_FILES_AND_DIRS})
372 by Suren A. Chilingaryan
Integrate last part of Python code from Vasiliy Chernov
144
	if( IS_DIRECTORY "${ITEM}" )
145
	    list(APPEND DIRS_TO_DEPLOY "${ITEM}")
146
        else()
147
    	    list(APPEND FILES_TO_DEPLOY "${ITEM}")
148
        endif()
149
    endforeach()
150
    install(FILES ${FILES_TO_DEPLOY} DESTINATION ${PCILIB_SERVER_DIR})
151
    install(DIRECTORY ${DIRS_TO_DEPLOY} DESTINATION ${PCILIB_SERVER_DIR})
152
endif (NOT DISABLE_SERVERS)
346.1.39 by Vasilii Chernov
Add python servers instalation step. Add systemd config files generation for python servers.
153
374 by Suren A. Chilingaryan
Handle build.h in releases
154
155
156
set(TARNAME "pcitool")
157
set(PACKAGE_VERSION ${PCILIB_VERSION})
158
set(PACKAGE_NAME "${TARNAME}")
159
set(PACKAGE_TARNAME "${TARNAME}")
160
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
161
set(PACKAGE_BUGREPORT "http://ufo.kit.edu/ufo/newticket")
162
163
set(CPACK_SOURCE_GENERATOR "TBZ2")
164
set(CPACK_PACKAGE_CONTACT "Suren A. Chilingaryan <csa@suren.me>")
165
if (${RELEASE} GREATER 0)
166
    set(CPACK_PACKAGE_VERSION "${PACKAGE_VERSION}.${RELEASE}")
167
else (${RELEASE} GREATER 0)
168
    set(CPACK_PACKAGE_VERSION "${PACKAGE_VERSION}")
169
endif (${RELEASE} GREATER 0)
399 by Suren A. Chilingaryan
Fix building of driver if pcilib is built out-of-source
170
#set(CPACK_SOURCE_IGNORE_FILES "([^d]|d[^r])[^/]*/Makefile;${CPACK_SOURCE_IGNORE_FILES}")
171
set(CPACK_SOURCE_IGNORE_FILES "/build/;/.bzr/;CMakeFiles;_CPack_Packages;cmake_install.cmake;CPack.*.cmake;CMakeCache.txt;install_manifest.txt;common.mk;pcilib/config.h$;.pc$;Makefile$;__pycache__;.pyc$;.tar.bz2$;~$;${CPACK_SOURCE_IGNORE_FILES}")
374 by Suren A. Chilingaryan
Handle build.h in releases
172
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}")
173
include(CPack)
174
175
# In releases, we just keep the pre-generated build.h 
396 by Suren A. Chilingaryan
Fix build if the source was exported from bazaar as zip archive (i.e. .bzr directory is missing and build.h is not present)
176
if(EXISTS ${CMAKE_SOURCE_DIR}/.bzr/ OR NOT EXISTS ${CMAKE_SOURCE_DIR}/pcilib/build.h)
374 by Suren A. Chilingaryan
Handle build.h in releases
177
    add_custom_target(build
178
	COMMAND ${CMAKE_COMMAND} -DPCILIB_SOURCE_DIR=${CMAKE_SOURCE_DIR} -DPCILIB_BINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/build.cmake
179
	WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
180
    )
181
    add_dependencies(pcilib build)
405 by Suren A. Chilingaryan
Fix cmake configuration while building without pcitool
182
    if (NOT DISABLE_PCITOOL)
183
       add_dependencies(pci build)
184
    endif (NOT DISABLE_PCITOOL)
374 by Suren A. Chilingaryan
Handle build.h in releases
185
186
	# We need to generate build.h for source releases
382 by Suren A. Chilingaryan
Fix dist_clean target
187
    add_custom_target(dist_clean make clean -C driver
188
	COMMAND ${CMAKE_MAKE_PROGRAM} clean 
189
	WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
190
    )
374 by Suren A. Chilingaryan
Handle build.h in releases
191
    add_custom_target(dist_prepare DEPENDS dist_clean
192
	COMMAND ${CMAKE_COMMAND} -DPCILIB_SOURCE_DIR=${CMAKE_SOURCE_DIR} -DPCILIB_BINARY_DIR=${CMAKE_SOURCE_DIR} -DPCILIB_RELEASE=${CPACK_PACKAGE_VERSION} -P ${CMAKE_SOURCE_DIR}/cmake/build.cmake
193
	WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
194
    )
195
    add_custom_target(dist DEPENDS dist_prepare COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
196
197
    set_source_files_properties(${CMAKE_BINARY_DIR}/pcilib/build.h PROPERTIES GENERATED TRUE)
198
    set_source_files_properties(${CMAKE_SOURCE_DIR}/pcilib/build.h PROPERTIES GENERATED TRUE)
396 by Suren A. Chilingaryan
Fix build if the source was exported from bazaar as zip archive (i.e. .bzr directory is missing and build.h is not present)
199
endif(EXISTS ${CMAKE_SOURCE_DIR}/.bzr/ OR NOT EXISTS ${CMAKE_SOURCE_DIR}/pcilib/build.h)
374 by Suren A. Chilingaryan
Handle build.h in releases
200
201
if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
202
    file(COPY ${CMAKE_SOURCE_DIR}/xml DESTINATION ${CMAKE_BINARY_DIR})
203
    file(COPY ${CMAKE_SOURCE_DIR}/pyserver DESTINATION ${CMAKE_BINARY_DIR})
204
    file(COPY ${CMAKE_SOURCE_DIR}/pci
205
	 DESTINATION ${CMAKE_BINARY_DIR}
206
	 FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
207
    )
208
    file(COPY ${CMAKE_SOURCE_DIR}/run
209
	 DESTINATION ${CMAKE_BINARY_DIR}
210
	 FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
211
    )
212
endif(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
213
399 by Suren A. Chilingaryan
Fix building of driver if pcilib is built out-of-source
214
configure_file(${CMAKE_SOURCE_DIR}/driver/Makefile.in ${CMAKE_SOURCE_DIR}/driver/Makefile)
215
configure_file(${CMAKE_SOURCE_DIR}/pcitool.spec.in ${CMAKE_BINARY_DIR}/pcitool.spec)
216
configure_file(${CMAKE_SOURCE_DIR}/misc/dkms.conf.in ${CMAKE_BINARY_DIR}/misc/dkms.conf)
217
configure_file(${CMAKE_SOURCE_DIR}/misc/pcitool.pc.in ${CMAKE_BINARY_DIR}/misc/pcitool.pc)
218
configure_file(${CMAKE_SOURCE_DIR}/pcilib/config.h.in ${CMAKE_BINARY_DIR}/pcilib/config.h)
219
configure_file(${CMAKE_SOURCE_DIR}/pcilib/version.h.in ${CMAKE_BINARY_DIR}/pcilib/version.h)
220
configure_file(${CMAKE_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_BINARY_DIR}/docs/Doxyfile)
374 by Suren A. Chilingaryan
Handle build.h in releases
221
if (NOT DISABLE_SERVERS)
399 by Suren A. Chilingaryan
Fix building of driver if pcilib is built out-of-source
222
    configure_file(${CMAKE_SOURCE_DIR}/misc/pcilib_api.service.in ${CMAKE_BINARY_DIR}/misc/pcilib_api.service)
223
    configure_file(${CMAKE_SOURCE_DIR}/misc/pcilib_html.service.in ${CMAKE_BINARY_DIR}/misc/pcilib_html.service)
224
    configure_file(${CMAKE_SOURCE_DIR}/misc/pcilib.sysconfig.in ${CMAKE_BINARY_DIR}/misc/pcilib.sysconfig)
374 by Suren A. Chilingaryan
Handle build.h in releases
225
endif (NOT DISABLE_SERVERS)
226
377 by Suren A. Chilingaryan
Clean-up python files during the clean and do not delete driver Makefile while packaging
227
PYTHON_CLEAN_LIST("${CMAKE_BINARY_DIR}/xml" XML_PY_FILES)
228
PYTHON_CLEAN_LIST("${CMAKE_BINARY_DIR}/pyserver" SERVER_PY_FILES)
229
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${XML_PY_FILES};${SERVER_PY_FILES}")
374 by Suren A. Chilingaryan
Handle build.h in releases
230
253 by Suren A. Chilingaryan
Include version information in all API descriptions
231
message("-- Configured pcitool ${PCILIB_VERSION_MAJOR}.${PCILIB_VERSION_MINOR}.${PCILIB_VERSION_MICRO} with public ABI ${PCILIB_ABI_VERSION}")