fix whitespaces thanks to Optimum Power
[oscam.git] / CMakeLists.txt
blob994220bbf1c3ae48dd3a7d9329fe129e104df5b0
1 project (OSCam C)
3 #----------------------- minimum version of cmake to use ------------
5 cmake_minimum_required(VERSION 2.8.12)
7 cmake_policy(SET CMP0003 NEW)
8 if(POLICY CMP0042)
9   cmake_policy(SET CMP0042 NEW)
10 endif()
11 if(POLICY CMP0054)
12   cmake_policy(SET CMP0054 NEW)
13 endif()
15 #----------------------- detect system ------------------------------
17 if (CMAKE_CROSSCOMPILING)
18         if (OSCAM_SYSTEM_NAME MATCHES "Tuxbox")
19                 set (OSCamOperatingSystem "Tuxbox")
20         elseif (OSCAM_SYSTEM_NAME MATCHES "TripleDragon")
21                 set (OSCamOperatingSystem "TripleDragon")
22         elseif (OSCAM_SYSTEM_NAME MATCHES "Coolstream")
23                 set (OSCamOperatingSystem "NeutrinoHD")
24         elseif (OSCAM_SYSTEM_NAME MATCHES "CST2")
25                 set (OSCamOperatingSystem "NHD2")
26         elseif (OSCAM_SYSTEM_NAME MATCHES "NSLU2")
27                 set (OSCamOperatingSystem "SlugOS")
28         elseif (OSCAM_SYSTEM_NAME MATCHES "WRT350NV2")
29                 set (OSCamOperatingSystem "OpenWRT")
30                 set (CS_OS_HW "wrt350nv2")
31         elseif (OSCAM_SYSTEM_NAME MATCHES "Dockstar")
32                 set (OSCamOperatingSystem "OpenWRT")
33                 set (CS_OS_HW "dockstar")
34         elseif (OSCAM_SYSTEM_NAME MATCHES "Fonera2")
35                 set (OSCamOperatingSystem "Fonera2")
36         elseif (OSCAM_SYSTEM_NAME MATCHES "DIR-825")
37                 set (OSCamOperatingSystem "DIR-825")
38         elseif (OSCAM_SYSTEM_NAME MATCHES "AZBox")
39                 set (OSCamOperatingSystem "AZBox")
40         elseif (OSCAM_SYSTEM_NAME MATCHES "SU980")
41                 set (OSCamOperatingSystem "SU980")
42         elseif (OSCAM_SYSTEM_NAME MATCHES "MCA")
43                 set (OSCamOperatingSystem "MCA")
44         elseif (OSCAM_SYSTEM_NAME MATCHES "agv2+w")
45                 set (OSCamOperatingSystem "agv2+w")
46         elseif (OSCAM_SYSTEM_NAME MATCHES "WRT54G")
47                 set (OSCamOperatingSystem "WRT54G")
48         elseif (OSCAM_SYSTEM_NAME MATCHES "Amino")
49                 set (OSCamOperatingSystem "Amino")
50         elseif (OSCAM_SYSTEM_NAME MATCHES "QboxHD")
51                 set (OSCamOperatingSystem "QboxHD")
52         elseif (OSCAM_SYSTEM_NAME MATCHES "Padre")
53                 set (OSCamOperatingSystem "Padre")
54         elseif (OSCAM_SYSTEM_NAME MATCHES "FriendlyARM")
55                 set (OSCamOperatingSystem "FriendlyARM")
56         else (OSCAM_SYSTEM_NAME MATCHES "Tuxbox")
57                 message (STATUS "Unknown cross system name: <${CMAKE_SYSTEM_NAME}>")
58                 set (OSCamOperatingSystem "Unknown")
59         endif (OSCAM_SYSTEM_NAME MATCHES "Tuxbox")
60 else (CMAKE_CROSSCOMPILING)
61         if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
62                 set (OSCamOperatingSystem "Linux")
63         elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
64                 set (OSCamOperatingSystem "FreeBSD")
65         elseif (${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
66                 set (OSCamOperatingSystem "OpenBSD")
67         elseif (OSCamOperatingSystem MATCHES "Padre")
68                 add_definitions ("-DPADRE -DSPARC")
69                 set (DEFAULT_CS_CONFDIR "/etc/oscam")
70         elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
71                 set (OSCamOperatingSystem "Mac OS X")
72                 execute_process(COMMAND sw_vers -productVersion COMMAND cut -c 1-4 COMMAND tr -d '\n' OUTPUT_VARIABLE SWVER)
73                 execute_process(COMMAND xcodebuild -version COMMAND grep Xcode COMMAND sed "s/Xcode\ //g" COMMAND tr -d '\n' OUTPUT_VARIABLE XCODEVER)
74                 message (STATUS "mac sdk version is ${SWVER}")
75                 message (STATUS "mac Xcode version is ${XCODEVER}")
76                 add_definitions ("-w")
77                 set (CMAKE_OSX_DEPLOYMENT_TARGET "${SWVER}")
78                 if (SWVER GREATER 10.5)
79                         set (CMAKE_OSX_ARCHITECTURES "x86_64")
80                 endif (SWVER GREATER 10.5)
81                 if (SWVER EQUAL 10.7 AND XCODEVER LESS 4.3)
82                         message (STATUS "Compiling with xcode less then 4.3 on 10.7 If You have time update You're Xcode")
83                 endif (SWVER EQUAL 10.7 AND XCODEVER LESS 4.3)
84                 set (STATIC_LIBUSB True)
85         elseif (${CYGWIN})
86                 set (OSCamOperatingSystem "Windows/Cygwin")
87                 set (CMAKE_SYSTEM_PROCESSOR "i386")
88         else (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
89                 message (STATUS "Unknown system name: <${CMAKE_SYSTEM_NAME}>")
90                 set (OSCamOperatingSystem "Unknown")
91         endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
92 endif (CMAKE_CROSSCOMPILING)
94 #----------------------- some paths ------------------------------
96 set (OPTIONAL_LINK_DIR "" CACHE STRING "Some optional link directories")
97 set (OPTIONAL_INCLUDE_DIR "" CACHE STRING "Some optional include directories")
99 if (OSCamOperatingSystem MATCHES "Windows/Cygwin")
100         include_directories (
101                 ${CMAKE_CURRENT_SOURCE_DIR}/csctapi
102                 ${CMAKE_CURRENT_SOURCE_DIR}/cscrypt
103                 ${CMAKE_CURRENT_SOURCE_DIR}/minilzo
104                 ${CMAKE_CURRENT_SOURCE_DIR}/extapi/cygwin
105                 /usr/include/w32api
106                 ${OPTIONAL_INCLUDE_DIR}
107                 )
108 else (OSCamOperatingSystem MATCHES "Windows/Cygwin")
109         include_directories (
110                 ${CMAKE_CURRENT_SOURCE_DIR}/csctapi
111                 ${CMAKE_CURRENT_SOURCE_DIR}/cscrypt
112                 ${CMAKE_CURRENT_SOURCE_DIR}/minilzo
113                 ${OPTIONAL_INCLUDE_DIR}
114                 )
115 endif (OSCamOperatingSystem MATCHES "Windows/Cygwin")
117 if(OSCamOperatingSystem MATCHES "Windows/Cygwin")
118         link_directories (
119                 /usr/lib
120                 /usr/lib/w32api
121                 /cygdrive/c/WINDOWS/system32/
122                 ${OPTIONAL_LINK_DIR}
123                 )
124 else (OSCamOperatingSystem MATCHES "Windows/Cygwin")
125         link_directories (
126                 ${OPTIONAL_LINK_DIR}
127                 )
128 endif (OSCamOperatingSystem MATCHES "Windows/Cygwin")
130 #----------------------- global options ------------------------------
132 if (OSCamOperatingSystem MATCHES "Linux")
133         set (DEFAULT_CS_CONFDIR "/usr/local/etc")
134 elseif (OSCamOperatingSystem MATCHES "Mac OS X")
135         if (NOT HAVE_PCSC EQUAL 0)
136                 add_definitions ("-DWITH_PCSC=1")
137         endif (NOT HAVE_PCSC EQUAL 0)
138         set (DEFAULT_CS_CONFDIR "/usr/local/etc")
139 elseif (OSCamOperatingSystem MATCHES "Tuxbox")
140         set (DEFAULT_CS_CONFDIR "/var/tuxbox/config")
141 elseif (OSCamOperatingSystem MATCHES "TripleDragon")
142         add_definitions ("-DSTB04SCI=1")
143         set (DEFAULT_CS_CONFDIR "/var/tuxbox/config")
144 elseif (OSCamOperatingSystem MATCHES "NeutrinoHD")
145         add_definitions ("-DWITH_COOLAPI=1")
146         set (USE_COOLAPI "USE_COOLAPI")
147         set (DEFAULT_CS_CONFDIR "/var/tuxbox/config")
148 elseif (OSCamOperatingSystem MATCHES "NHD2")
149         add_definitions ("-DWITH_COOLAPI2=1")
150         set (USE_COOLAPI2 "USE_COOLAPI2")
151         set (DEFAULT_CS_CONFDIR "/var/tuxbox/config")
152 elseif (OSCamOperatingSystem MATCHES "SlugOS")
153         set (DEFAULT_CS_CONFDIR "/var/etc")
154 elseif (OSCamOperatingSystem MATCHES "OpenWRT")
155         if (CS_OS_HW MATCHES "wrt350nv2")
156                 set (DEFAULT_CS_CONFDIR "/etc/oscam")
157         elseif (CS_OS_HW MATCHES "dockstar")
158                 set (DEFAULT_CS_CONFDIR "/usr/oscam")
159         endif (CS_OS_HW MATCHES "wrt350nv2")
160 elseif (OSCamOperatingSystem MATCHES "Fonera2")
161         set (DEFAULT_CS_CONFDIR "/var/etc")
162 elseif (OSCamOperatingSystem MATCHES "DIR-825")
163         set (DEFAULT_CS_CONFDIR "/var/etc")
164 elseif (OSCamOperatingSystem MATCHES "AZBox")
165         add_definitions ("-DWITH_AZBOX=1")
166         set (USE_AZBOX "USE_AZBOX")
167         set (DEFAULT_CS_CONFDIR "/PLUGINS/OpenXCAS/oscamCAS")
168 elseif (OSCamOperatingSystem MATCHES "SU980")
169         set (USE_SU980 "USE_SU980")
170         add_definitions ("-DWITH_SU980=1")
171         set (DEFAULT_CS_CONFDIR "/var/tuxbox/config")
172 elseif (OSCamOperatingSystem MATCHES "MCA")
173         add_definitions ("-DWITH_MCA=1")
174         set (USE_MCA "USE_MCA")
175         set (DEFAULT_CS_CONFDIR "/var/mca/d1")
176 elseif (OSCamOperatingSystem MATCHES "agv2+w")
177         set (DEFAULT_CS_CONFDIR "/etc")
178 elseif (OSCamOperatingSystem MATCHES "WRT54G")
179         set (DEFAULT_CS_CONFDIR "/jffs/etc/config/oscam")
180 elseif (OSCamOperatingSystem MATCHES "Amino")
181         set (DEFAULT_CS_CONFDIR "/var/tuxbox/config")
182 elseif (OSCamOperatingSystem MATCHES "QboxHD")
183         add_definitions ("-DQBOXHD=1")
184         set (DEFAULT_CS_CONFDIR "/var/tuxbox/config")
185 elseif (OSCamOperatingSystem MATCHES "Windows/Cygwin")
186         add_definitions ("-static -DWITH_PCSC=1")
187         set (DEFAULT_CS_CONFDIR ".")
188 elseif (OSCamOperatingSystem MATCHES "FreeBSD")
189         add_definitions ("-I/usr/local/include -L/usr/local/lib")
190         set (DEFAULT_CS_CONFDIR ".")
191 elseif (OSCamOperatingSystem MATCHES "OpenBSD")
192         add_definitions ("-I/usr/local/include -L/usr/local/lib")
193         set (DEFAULT_CS_CONFDIR "/etc/oscam")
194 elseif (OSCamOperatingSystem MATCHES "FriendlyARM")
195         set (DEFAULT_CS_CONFDIR ".")
196 endif (OSCamOperatingSystem MATCHES "Linux")
198 set (CS_CONFDIR ${DEFAULT_CS_CONFDIR} CACHE STRING "Default path for the config files")
199 add_definitions ("-DCS_CONFDIR=\"${CS_CONFDIR}\"")
202 #----------------------- subdirectories ------------------------------
204 include (CheckIncludeFile)
206 check_include_file ("pthread.h" HAVE_PTHREAD)
207 if (HAVE_PTHREAD)
208         message(STATUS "  pthread found. Adding pthread support ")
209         add_definitions ("-DHAVE_PTHREAD_H")
210 elseif (HAVE_PTHREAD)
211         message(STATUS "  no pthread found. No smartreader ")
212 endif (HAVE_PTHREAD)
214 check_include_file ("openssl/aes.h" HAVE_LIBCRYPTO)
215 if (HAVE_LIBCRYPTO)
216         add_definitions ("-DWITH_LIBCRYPTO=1")
217         set (USE_LIBCRYPTO "USE_LIBCRYPTO")
218 else (HAVE_LIBCRYPTO)
219         message (STATUS " LIBCRYTO NOT FOUND OR DISABLED NO SSL SUPPORT POSSIBLE")
220 endif (HAVE_LIBCRYPTO)
222 execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --enabled WITH_SSL OUTPUT_VARIABLE CONFIG_WITH_SSL OUTPUT_STRIP_TRAILING_WHITESPACE)
223 if (CONFIG_WITH_SSL MATCHES "N" AND WITH_SSL EQUAL 1)
224         message ( STATUS " ssl is added by You compiling with ssl included")
225 elseif (CONFIG_WITH_SSL MATCHES "Y" AND WITH_SSL EQUAL 1)
226         message (STATUS " ssl is added by You but it was already enabled by config file")
227 elseif (CONFIG_WITH_SSL MATCHES "N" AND NOT WITH_SSL EQUAL 1)
228         message (STATUS " SSL IS NOT INCLUDED IN THIS COMPILATION")
229 endif (CONFIG_WITH_SSL MATCHES "N" AND WITH_SSL EQUAL 1)
231 if (CONFIG_WITH_SSL MATCHES "Y" AND NOT WITH_SSL EQUAL 0)
232         message(status "  SSL is added by config file ${CONFIG_WITH_SSL} compiling with ssl included")
233         add_definitions ("-DWITH_SSL")
234         set (WITH_SSL "1")
235 elseif (CONFIG_WITH_SSL MATCHES "Y" AND WITH_SSL EQUAL 0)
236         message (status  " The config file has ssl enabled, but You disabled it by you cmake command COMPILING WHITOUT SSL")
237 endif (CONFIG_WITH_SSL MATCHES "Y" AND NOT WITH_SSL EQUAL 0)
239 find_package(OpenSSL)
240 if (OPENSSL_FOUND AND HAVE_LIBCRYPTO)
241         include_directories(${OPENSSL_INCLUDE_DIR})
242         message(STATUS "  openssl found.")
243         if (WITH_SSL EQUAL 1)
244                 set(USE_SSL "USE_SSL")
245         endif (WITH_SSL EQUAL 1)
246 else (OPENSSL_FOUND AND HAVE_LIBCRYPTO)
247         message(STATUS "SSL REQUESTED BUT OPENSSL or LYBCRYPTO NOT FOUND !!")
248         if (WITH_SSL)
249                 message(STATUS " ssl support requested but openssl or libcrypto NOT FOUND  COMPILING WHITOUT SSL !!! ")
250                 set (WITH_SSL "0")
251         endif (WITH_SSL)
252 endif (OPENSSL_FOUND AND HAVE_LIBCRYPTO)
254 if (NOT OSCamOperatingSystem MATCHES "Mac OS X")
255         if (LIBRTDIR)
256                 check_include_file ("${LIBRTDIR}/include/time.h" HAVE_LIBRT_STATIC)
257                 if (HAVE_LIBRT_STATIC)
258                         if (EXISTS ${LIBRTDIR}/lib/librt.a)
259                                 message(STATUS "  static librt found : ${LIBRTDIR}/lib/librt.a (needed by libusb).")
260                                 add_definitions ("-I${LIBRTDIR}/include/")
261                                 add_library(imp_librt STATIC IMPORTED)
262                                 set_property(TARGET imp_librt PROPERTY IMPORTED_LOCATION ${LIBRTDIR}/lib/librt.a)
263                         else (EXISTS ${LIBRTDIR}/lib/librt.a)
264                                 message(STATUS " ${LIBRTDIR}/lib/librt.a not found (needed by libusb). No smartreader support)")
265                                 set (HAVE_LIBRT_STATIC False)
266                         endif (EXISTS ${LIBRTDIR}/lib/librt.a)
267                 else (HAVE_LIBRT_STATIC)
268                         message(STATUS "  no librt found (needed by libusb). No smartreader support")
269                 endif (HAVE_LIBRT_STATIC)
270         else (LIBRTDIR)
271                 check_include_file ("time.h" HAVE_LIBRT)
272                 if (HAVE_LIBRT)
273                         message(STATUS "  librt found (needed by libusb).")
274                 else (HAVE_LIBRT)
275                         message(STATUS "  no librt found (needed by libusb. No smartreader support")
276                 endif (HAVE_LIBRT)
277         endif (LIBRTDIR)
278         if (WITH_STAPI)
279                         if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/stapi/liboscam_stapi.a)
280                                 message(STATUS "  liboscam_stapi.a found")
281                                 add_definitions ("-DWITH_STAPI=1")
282                                 add_library(stapilib STATIC IMPORTED)
283                                 set_property(TARGET stapilib PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/stapi/liboscam_stapi.a)
284                                 set (HAVE_LIBSTAPI True)
285                                 set (USE_STAPI "USE_STAPI")
286                         else (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/stapi/liboscam_stapi.a)
287                                 message(FATAL "  liboscam_stapi.a support requested but not found! ")
288                                 set (HAVE_LIBSTAPI False)
289                         endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/stapi/liboscam_stapi.a)
290         endif (WITH_STAPI)
291         if (WITH_STAPI5)
292                         if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/stapi/liboscam_stapi5.a)
293                                 message(STATUS "  liboscam_stapi5.a found")
294                                 add_definitions ("-DWITH_STAPI5=1")
295                                 add_library(stapi5lib STATIC IMPORTED)
296                                 set_property(TARGET stapi5lib PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/stapi/liboscam_stapi5.a)
297                                 set (HAVE_LIBSTAPI5 True)
298                                 set (USE_STAPI5 "USE_STAPI5")
299                         else (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/stapi/liboscam_stapi5.a)
300                                 message(FATAL "  liboscam_stapi5.a support requested but not found! ")
301                                 set (HAVE_LIBSTAPI5 False)
302                         endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/stapi/liboscam_stapi5.a)
303         endif (WITH_STAPI5)
304 else (NOT OSCamOperatingSystem MATCHES "Mac OS X")
305         set (HAVE_LIBRT True)
306 endif (NOT OSCamOperatingSystem MATCHES "Mac OS X")
309 if( HAVE_LIBRT OR HAVE_LIBRT_STATIC)
310         if (LIBUSBDIR)
311                 check_include_file ("${LIBUSBDIR}/include/libusb-1.0/libusb.h" HAVE_LIBUSB)
312                 if (HAVE_LIBUSB AND HAVE_PTHREAD)
313                         if (EXISTS ${LIBUSBDIR}/lib/libusb-1.0.a)
314                                 if (STATIC_LIBUSB EQUAL 1)
315                                         message(STATUS "  libusb 1.0 found (${LIBUSBDIR}/lib/libusb-1.0.a). Adding smartreader support ")
316                                         add_definitions ("-DWITH_LIBUSB=1")
317                                         add_definitions ("-I${LIBUSBDIR}/include/")
318                                         set (LIBUSB "USE_LIBUSB")
319                                         add_library(imp_libusb STATIC IMPORTED)
320                                         set_property(TARGET imp_libusb PROPERTY IMPORTED_LOCATION ${LIBUSBDIR}/lib/libusb-1.0.a)
321                                 elseif (NOT STATIC_LIBUSB OR STATIC_LIBUSB EQUAL 0)
322                                         set (CMAKE_FIND_ROOT_PATH ${LIBUSBDIR})
323                                         find_library (LIBUSB_LIBRARY NAMES usb-1.0)
324                                         message(STATUS "libusb 1.0 found (${LIBUSB_LIBRARY}). Adding smartreader support ")
325                                         add_definitions ("-DWITH_LIBUSB=1")
326                                         add_definitions ("-I${LIBUSBDIR}/include/")
327                                         set (LIBUSB "USE_LIBUSB")
328                                         add_library(imp_libusb SHARED IMPORTED)
329                                         set_property(TARGET imp_libusb PROPERTY IMPORTED_LOCATION ${LIBUSB_LIBRARY} )
330                                 endif (STATIC_LIBUSB EQUAL 1)
331                         else (EXISTS ${LIBUSBDIR}/lib/libusb-1.0.a)
332                                         message(STATUS "  libusb 1.0 not found (${LIBUSBDIR}/lib/libusb). No smartreader support ")
333                                         set (HAVE_LIBUSB False)
334                                         set (HAVE_LIBRT False)
335                                         set (HAVE_LIBRT_STATIC False)
336                         endif (EXISTS ${LIBUSBDIR}/lib/libusb-1.0.a)
337                 else (HAVE_LIBUSB AND HAVE_PTHREAD)
338                         message(STATUS "  no libusb 1.0 found. No smartreader support")
339                         set (HAVE_LIBUSB False)
340                         set (HAVE_LIBRT False)
341                         set (HAVE_LIBRT_STATIC False)
342                 endif (HAVE_LIBUSB AND HAVE_PTHREAD)
343         else (LIBUSBDIR)
344                 if (NOT HAVE_LIBUSB EQUAL 0)
345                         check_include_file ("libusb-1.0/libusb.h" HAVE_LIBUSB)
346                         check_include_file ("libusb-1.0/libusb.h" PRESENT)
347                 endif(NOT HAVE_LIBUSB EQUAL 0)
348                 if (OSCamOperatingSystem MATCHES "Mac OS X")
349                         if (NOT HAVE_LIBUSB EQUAL 0 AND NOT PRESENT)
350                                 find_file (USBINCL_LOC "libusb-1.0/libusb.h")
351                                 if (EXISTS ${USBINCL_LOC})
352                                         add_definitions ("-I/usr/local/include -L/usr/local/lib -I/usr/include -L/usr/lib")
353                                         set (HAVE_LIBUSB True)
354                                         set (PRESENT True)
355                                         set (USE_LIBUSB "USE_LIBUSB")
356                                         if (NOT STATIC_LIBUSB OR STATIC_LIBUSB EQUAL 0)
357                                                 set (STATICLIBUSB False)
358                                         elseif (STATIC_LIBUSB EQUAL 1)
359                                                 set (STATICLIBUSB True)
360                                         endif (NOT STATIC_LIBUSB OR STATIC_LIBUSB EQUAL 0)
361                                 endif (EXISTS ${USBINCL_LOC})
362                         endif (NOT HAVE_LIBUSB EQUAL 0 AND NOT PRESENT)
363                 endif (OSCamOperatingSystem MATCHES "Mac OS X")
364                 if (NOT STATIC_LIBUSB OR STATIC_LIBUSB EQUAL 0)
365                         if(HAVE_LIBUSB AND HAVE_PTHREAD AND PRESENT)
366                                 message(STATUS " libusb 1.0 found (libusb-1.0.so) Adding smartreader support ")
367                                 add_definitions ("-DWITH_LIBUSB=1")
368                                 set (USE_LIBUSB "USE_LIBUSB")
369                                 set (STATICLIBUSB False)
370                         endif(HAVE_LIBUSB AND HAVE_PTHREAD AND PRESENT)
371                 elseif(STATIC_LIBUSB EQUAL 1)
372                         if (HAVE_LIBUSB AND HAVE_PTHREAD AND PRESENT)
373                                 message(STATUS "  static libusb 1.0 found (libusb-1.0.a). Adding smartreader support ")
374                                 add_definitions ("-DWITH_LIBUSB=1")
375                                 set (USE_LIBUSB "USE_LIBUSB")
376                                 set (STATICLIBUSB True)
377                         else (HAVE_LIBUSB AND HAVE_PTHREAD AND PRESENT)
378                                 message(STATUS "  no libusb 1.0 found. No smartreader support")
379                                 set (HAVE_LIBUSB False)
380                         endif (HAVE_LIBUSB AND HAVE_PTHREAD AND PRESENT)
381                 endif(NOT STATIC_LIBUSB OR STATIC_LIBUSB EQUAL 0)
382         endif (LIBUSBDIR)
383 endif( HAVE_LIBRT OR HAVE_LIBRT_STATIC)
385 check_include_file ("PCSC/wintypes.h" HAVE_PCSC)
386 if (HAVE_PCSC)
387         FIND_PATH (PCSC_PATH PCSC/wintypes.h)
388         if(OPTIONAL_INCLUDE_DIR AND EXISTS ${OPTIONAL_INCLUDE_DIR}/PCSC/wintypes.h)
389                 message(STATUS "  PCSC headers found (${OPTIONAL_INCLUDE_DIR}/PCSC). Adding PCSC support ")
390                 add_definitions ("-DWITH_PCSC=1")
391                 add_definitions ("-I${OPTIONAL_INCLUDE_DIR}/PCSC")
392                 set (USE_PCSC "USE_PCSC")
393         elseif (EXISTS ${PCSC_PATH}/PCSC/wintypes.h AND NOT OPTIONAL_INCLUDE_DIR)
394                 message(STATUS "  PCSC headers found (${PCSC_PATH}/PCSC). Adding PCSC support ")
395                 add_definitions ("-DWITH_PCSC=1")
396                 add_definitions ("-I${PCSC_PATH}/PCSC")
397                 set (USE_PCSC "USE_PCSC")
398         else (OPTIONAL_INCLUDE_DIR AND EXISTS ${OPTIONAL_INCLUDE_DIR}/PCSC/wintypes.h)
399                 if (NOT OSCamOperatingSystem MATCHES "Mac OS X")
400                         set (HAVE_PCSC False)
401                         if(OPTIONAL_INCLUDE_DIR)
402                                 message(STATUS "  PCSC headers not found (not in /usr/include/PCSC or /usr/local/include/PCSC or ${OPTIONAL_INCLUDE_DIR}/PCSC). No PCSC support ")
403                         else(OPTIONAL_INCLUDE_DIR)
404                                 message(STATUS "  PCSC headers not found (not in /usr/include/PCSC or /usr/local/include/PCSC). No PCSC support ")
405                         endif(OPTIONAL_INCLUDE_DIR)
406                 endif (NOT OSCamOperatingSystem MATCHES "Mac OS X")
407         endif(OPTIONAL_INCLUDE_DIR AND EXISTS ${OPTIONAL_INCLUDE_DIR}/PCSC/wintypes.h)
408         if (OSCamOperatingSystem MATCHES "Mac OS X" AND NOT HAVE_PCSC EQUAL 0)
409                 set (USE_PCSC "USE_PCSC")
410                 set (HAVE_PCSC "1")
411         endif (OSCamOperatingSystem MATCHES "Mac OS X" AND NOT HAVE_PCSC EQUAL 0)
412 else (HAVE_PCSC)
413         if (OSCamOperatingSystem MATCHES "Windows/Cygwin")
414                 add_definitions ("-Icygwin")
415                 set (HAVE_PCSC "1")
416                 set (USE_PCSC "USE_PCSC")
417         endif (OSCamOperatingSystem MATCHES "Windows/Cygwin")
418 endif (HAVE_PCSC)
420 execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --enabled MODULE_STREAMRELAY OUTPUT_VARIABLE CONFIG_STREAMRELAY OUTPUT_STRIP_TRAILING_WHITESPACE)
421 if (CONFIG_STREAMRELAY MATCHES "Y" AND NOT MODULE_STREAMRELAY EQUAL 1)
422         if (LIBDVBCSADIR)
423                 check_include_file ("${LIBDVBCSADIR}/include/dvbcsa/dvbcsa.h" FOUND_LIBDVBCSA)
424                 set (LIBADVBCSA_LIBRARY "${LIBDVBCSADIR}/libdvbcsa.a")
425                 set (LIBDVBCSA_LIBRARY "${LIBDVBCSADIR}/libdvbcsa.so")
426         else (LIBDVBCSADIR)
427                 check_include_file ("dvbcsa/dvbcsa.h" FOUND_LIBDVBCSA)
428                 find_library (LIBADVBCSA_LIBRARY NAMES libdvbcsa.a)
429                 find_library (LIBDVBCSA_LIBRARY NAMES dvbcsa)
430         endif (LIBDVBCSADIR)
432         if (HAVE_LIBDVBCSA)
433                 if (STATIC_LIBDVBCSA AND FOUND_LIBDVBCSA AND EXISTS ${LIBADVBCSA_LIBRARY})
434                         message(STATUS "  static libdvbcsa found (libdvbcsa.a).")
435                         add_library(imp_libdvbcsa STATIC IMPORTED)
436                         set_property(TARGET imp_libdvbcsa PROPERTY IMPORTED_LOCATION ${LIBADVBCSA_LIBRARY})
437                         set (dvbcsa_link "imp_libdvbcsa")
438                         set (STATICLIBDVBCSA True)
439                 elseif ((NOT STATIC_LIBDVBCSA OR STATIC_LIBDVBCSA EQUAL 0) AND FOUND_LIBDVBCSA AND EXISTS ${LIBDVBCSA_LIBRARY})
440                         message(STATUS "  libdvbcsa found (libdvbcsa.so).")
441                         add_library(imp_libdvbcsa SHARED IMPORTED)
442                         set_property(TARGET imp_libdvbcsa PROPERTY IMPORTED_LOCATION ${LIBDVBCSA_LIBRARY} )
443                         set(dvbcsa_link dvbcsa)
444                         set (STATICLIBDVBCSA False)
445                 else (STATIC_LIBDVBCSA AND FOUND_LIBDVBCSA AND EXISTS ${LIBADVBCSA_LIBRARY})
446                         message(FATAL_ERROR "  no libdvbcsa found!")
447                 endif (STATIC_LIBDVBCSA AND FOUND_LIBDVBCSA AND EXISTS ${LIBADVBCSA_LIBRARY})
448         else (HAVE_LIBDVBCSA)
449                 message(FATAL_ERROR "  HAVE_LIBDVBCSA disabled!")
450         endif (HAVE_LIBDVBCSA)
451 endif (CONFIG_STREAMRELAY MATCHES "Y" AND NOT MODULE_STREAMRELAY EQUAL 1)
453 # Manage config.h based on command line parameters
454 # Manipulate config file based on given parameters and read unset parameters
456 execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --show-valid OUTPUT_VARIABLE config_vars_string OUTPUT_STRIP_TRAILING_WHITESPACE)
457 string(REGEX MATCHALL "[A-Z0-9_]+" config_vars ${config_vars_string})
459 MACRO(GENERATE_OSCAM_CONFIG fullpath)
460         foreach(option ${config_vars})
461                 if(DEFINED ${option})
462                         if(${option})
463                                 execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --enable ${option})
464                         else(${option})
465                                 execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --disable ${option})
466                         endif(${option})
467                 endif(DEFINED ${option})
468         endforeach(option)
469 ENDMACRO(GENERATE_OSCAM_CONFIG fullpath)
471 GENERATE_OSCAM_CONFIG("${CMAKE_CURRENT_SOURCE_DIR}/config.h")
473 # Build config.mak and related files
474 # FIXME: Create USE_FLAGS and pass them to config.sh using --use-flags
475 execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --objdir ${CMAKE_CURRENT_BINARY_DIR} --use-flags  "${USE_STAPI} ${USE_STAPI5} /
476 ${USE_COOLAPI} ${USE_SU980} ${USE_AZBOX} ${USE_MCA} ${USE_SSL} ${USE_LIBCRYPTO} ${USE_LIBUSB} ${USE_PCSC}" --make-config.mak)
477 # Generate webif/pages.c
478 execute_process (COMMAND make --no-print-directory --quiet -C ${CMAKE_CURRENT_SOURCE_DIR}/webif)
480 #----------------------- subdirectories ------------------------------
482 add_subdirectory (csctapi)
483 add_subdirectory (minilzo)
484 add_subdirectory (cscrypt)
486 #----------------------- file groups ------------------------------
487 execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --enabled MODULE_CAMD33 OUTPUT_VARIABLE CAMD33 OUTPUT_STRIP_TRAILING_WHITESPACE)
488 if (CAMD33 MATCHES "N")
489 set (CAMD_33 "module-camd33*")
490 endif (CAMD33 MATCHES "N")
491 if (OSCamOperatingSystem MATCHES "Mac OS X")
492 file (GLOB csmodules_mac  "module-dvbapi*" "module-lcd*" "${CAMD_33}")
493 file (GLOB csmodules_srcs "module-*.c" "webif/pages.c")
494 list (REMOVE_ITEM csmodules_srcs ${csmodules_mac})
495 file (GLOB csmodules_hdrs "module-*.h" "webif/pages.h")
496 list (REMOVE_ITEM csmodules_hdrs ${csmodules_mac})
497 file (GLOB csreaders_srcs "reader-*.c")
498 file (GLOB csreaders_hdrs "reader-*.h")
499 file (GLOB csoscam_srcs "oscam-*.c")
500 file (GLOB csoscam_hdrs "oscam-*.h")
501 file (GLOB exe_srcs "oscam.c")
502 file (GLOB exe_hdrs "globals.h")
503 file (GLOB all_srcs ${csmodules_srcs} ${csreaders_srcs} ${csoscam_srcs} ${exe_srcs})
504 else (OSCamOperatingSystem MATCHES "Mac OS X")
505 file (GLOB csmodules_srcs "module-*.c" "webif/pages.c")
506 file (GLOB csmodules_hdrs "module-*.h" "webif/pages.h")
507 file (GLOB csreaders_srcs "reader-*.c")
508 file (GLOB csreaders_hdrs "reader-*.h")
509 file (GLOB csoscam_srcs "oscam-*.c" "${CMAKE_CURRENT_BINARY_DIR}/config.c")
510 file (GLOB csoscam_hdrs "oscam-*.h")
511 file (GLOB exe_srcs "oscam.c")
512 file (GLOB exe_hdrs "globals.h")
513 file (GLOB all_srcs ${csmodules_srcs} ${csreaders_srcs} ${csoscam_srcs} ${exe_srcs})
514 endif (OSCamOperatingSystem MATCHES "Mac OS X")
515 #----------------------- modules ------------------------------
517 set (csmodules "csmodules")
518 add_library (${csmodules} STATIC ${csmodules_srcs} ${csmodules_hdrs})
520 #----------------------- readers ------------------------------
522 set (csreaders "csreaders")
523 add_library (${csreaders} STATIC ${csreaders_srcs} ${csreaders_hdrs})
525 #----------------------- other oscam files ------------------------------
527 set (csoscam "csoscam")
528 add_library (${csoscam} STATIC ${csoscam_srcs} ${csoscam_hdrs})
530 #----------------------- the executable ------------------------------
532 set (exe_name "oscam")
533 add_executable (${exe_name} ${exe_srcs} ${exe_hdrs})
534 target_link_libraries (${exe_name} ${csoscam} ${csmodules} ${csreaders} csctapi cscrypt minilzo)
535 if(HAVE_LIBRT AND HAVE_LIBUSB)
536         if (LIBUSBDIR)
537                 set (libusb_link "imp_libusb")
538         else(LIBUSBDIR)
539                 if (STATICLIBUSB)
540                         set (libusb_link "libusb-1.0.a")
541                 else (STATICLIBUSB)
542                         set (libusb_link "usb-1.0")
543                 endif(STATICLIBUSB)
544         endif(LIBUSBDIR)
545         if (NOT OSCamOperatingSystem MATCHES "Mac OS X")
546                 set (rt_link "rt")
547                 endif (NOT OSCamOperatingSystem MATCHES "Mac OS X")
548         if (OSCamOperatingSystem MATCHES "Windows/Cygwin")
549                 set (setupapi_link "setupapi")
550                 set (ole32_link "ole32")
551                 set (shell32_link "shell32")
552         endif (OSCamOperatingSystem MATCHES "Windows/Cygwin")
553 endif(HAVE_LIBRT AND HAVE_LIBUSB)
555 if (HAVE_LIBRT_STATIC AND HAVE_LIBUSB)
556         if (LIBUSBDIR)
557                 set (libusb_link "imp_libusb")
558         else(LIBUSBDIR)
559                 if (STATICLIBUSB)
560                         set (libusb_link "libusb-1.0.a")
561                 else (STATICLIBUSB)
562                         set (libusb_link "usb-1.0")
563                 endif(STATICLIBUSB)
564         endif(LIBUSBDIR)
565         if (NOT OSCamOperatingSystem MATCHES "Mac OS X")
566                 set (rt_link "imp_librt")
567         endif (NOT OSCamOperatingSystem MATCHES "Mac OS X")
568         if (OSCamOperatingSystem MATCHES "Windows/Cygwin")
569                 set (setupapi_link "setupapi")
570                 set (ole32_link "ole32")
571                 set (shell32_link "shell32")
572         endif (OSCamOperatingSystem MATCHES "Windows/Cygwin")
573 endif (HAVE_LIBRT_STATIC AND HAVE_LIBUSB)
575 if (HAVE_PTHREAD)
576         set (pthread_link "pthread")
577 endif (HAVE_PTHREAD)
579 if (WITH_SSL)
580         target_link_libraries (${exe_name} ssl)
581 endif (WITH_SSL)
583 if (HAVE_LIBCRYPTO)
584         target_link_libraries (${exe_name} crypto)
585 endif (HAVE_LIBCRYPTO)
587 # some systems need libm for the nagra cak7 functions to work
588 check_include_file("math.h" HAVE_LIBM)
589 if(HAVE_LIBM)
590         target_link_libraries (${exe_name} m)
591 endif(HAVE_LIBM)
593 if (HAVE_PCSC)
594 if (NOT OSCamOperatingSystem MATCHES "Mac OS X")
595 if (NOT OSCamOperatingSystem MATCHES "Windows/Cygwin")
596         target_link_libraries (${exe_name} pcsclite)
597 endif (NOT OSCamOperatingSystem MATCHES "Windows/Cygwin")
598 endif (NOT OSCamOperatingSystem MATCHES "Mac OS X")
599 endif (HAVE_PCSC)
601 if (HAVE_LIBSTAPI)
602         target_link_libraries(${exe_name} stapilib)
603 endif (HAVE_LIBSTAPI)
605 if (HAVE_LIBSTAPI5)
606         target_link_libraries(${exe_name} stapi5lib)
607 endif (HAVE_LIBSTAPI5)
609 add_dependencies (${exe_name} ${csoscam} ${csreaders} ${csmodules})
611 #----------------------- specific options ------------------------------
613 if (NOT OSCamOperatingSystem MATCHES "(Mac OS X|Windows/Cygwin|FreeBSD|OpenBSD)")
614         target_link_libraries (${exe_name} rt)
615 endif (NOT OSCamOperatingSystem MATCHES "(Mac OS X|Windows/Cygwin|FreeBSD|OpenBSD)")
617 if (OSCamOperatingSystem MATCHES "Linux")
618 elseif (OSCamOperatingSystem MATCHES "Mac OS X")
619         if (NOT HAVE_PCSC EQUAL 0)
620                 FIND_LIBRARY (PCSC_LIBRARY PCSC)
621                 message (STATUS "PCSC Mac OS X found : ${PCSC_LIBRARY}")
622                 add_definitions ("-DWITH_PCSC=1")
623                 target_link_libraries ( ${exe_name} ${PCSC_LIBRARY})
624                 set (HAVE_PCSC True)
625                 FIND_LIBRARY (IOKit_LIBRARY IOKit)
626                 target_link_libraries ( ${exe_name} ${IOKit_LIBRARY})
627                 FIND_LIBRARY (CoreFoundation_LIBRARY CoreFoundation)
628                 target_link_libraries ( ${exe_name} ${CoreFoundation_LIBRARY})
629         else (NOT HAVE_PCSC EQUAL 0)
630                 message (STATUS "PCSC Mac OS X not found no pcsc support")
631         endif (NOT HAVE_PCSC EQUAL 0)
632 elseif (OSCamOperatingSystem MATCHES "Tuxbox")
633         set (dl_link "dl")
634 elseif (OSCamOperatingSystem MATCHES "TripleDragon")
635         set (dl_link "dl")
636 elseif (OSCamOperatingSystem MATCHES "SlugOS")
637 elseif (OSCamOperatingSystem MATCHES "OpenWRT")
638 elseif (OSCamOperatingSystem MATCHES "Fonera2")
639 elseif (OSCamOperatingSystem MATCHES "DIR-825")
640 elseif (OSCamOperatingSystem MATCHES "agv2+w")
641 elseif (OSCamOperatingSystem MATCHES "WRT54G")
642 elseif (OSCamOperatingSystem MATCHES "Amino")
643 elseif (OSCamOperatingSystem MATCHES "QboxHD")
644 elseif (OSCamOperatingSystem MATCHES "Windows/Cygwin")
645         message (STATUS "Windows system PCSC : winscard.dll")
646         target_link_libraries (${exe_name} winscard)
647         target_link_libraries (${exe_name} setupapi )
648         target_link_libraries (${exe_name} ole32)
649         target_link_libraries (${exe_name} shell32)
650 elseif (OSCamOperatingSystem MATCHES "NeutrinoHD")
651         target_link_libraries (${exe_name} rt nxp)
652 elseif (OSCamOperatingSystem MATCHES "NHD2")
653         target_link_libraries (${exe_name} lnxcssUsr lnxscsUsr lnxnotifyqUsr lnxUKAL lnxplatUsr rt)
654 elseif (OSCamOperatingSystem MATCHES "AZBox")
655         add_library(xcas STATIC IMPORTED)
656         set_property(TARGET xcas PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/extapi/openxcas/libOpenXCASAPI.a)
657         set (xcas_link "xcas")
658 elseif (OSCamOperatingSystem MATCHES "SU980")
659         target_link_libraries (${exe_name} rt entropic)
660 endif (OSCamOperatingSystem MATCHES "Linux")
662 target_link_libraries (${exe_name} ${libusb_link} ${rt_link} ${setupapi_link} ${ole32_link} ${shell32_link} ${pthread_link} ${dl_link} ${xcas_link} ${dvbcsa_link})
664 #----------------------- put svnversion in the build ------------------------------
665 # at every target rebuild, we re-build the oscam.c compilation...
667 # add the needed dependency
668 add_dependencies (${exe_name} svnversion)
669 add_dependencies (${csoscam} svnversion-log)
671 # how to re-build the files which printout the version
672 add_custom_target (
673         svnversion
674         ALL
675         touch ${CMAKE_CURRENT_SOURCE_DIR}/oscam.c
677 add_custom_target (
678         svnversion-log
679         ALL
680         touch ${CMAKE_CURRENT_SOURCE_DIR}/oscam-log.c
683 execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --oscam-revision COMMAND tr -d '\n' OUTPUT_VARIABLE CS_SVN_VERSION)
684 add_definitions ("-D'CS_SVN_VERSION=\"${CS_SVN_VERSION}\"'")
686 execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpmachine COMMAND tr -d '\n' OUTPUT_VARIABLE CS_TARGET)
687 add_definitions ("-D'CS_TARGET=\"${CS_TARGET}\"'")
689 execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --enabled WITH_ARM_NEON OUTPUT_VARIABLE CONFIG_WITH_ARM_NEON OUTPUT_STRIP_TRAILING_WHITESPACE)
690 if (CONFIG_WITH_ARM_NEON MATCHES "Y" AND NOT WITH_ARM_NEON EQUAL 0)
691         add_definitions ("-DWITH_ARM_NEON")
692         set (WITH_ARM_NEON "1")
693 elseif (CONFIG_WITH_ARM_NEON MATCHES "Y" AND NOT WITH_ARM_NEON EQUAL 0)
694         message (status  " The config file has WITH_ARM_NEON enabled, but You disabled it by you cmake command COMPILING WHITOUT arm neon optimization")
695 endif (CONFIG_WITH_ARM_NEON MATCHES "Y" AND NOT WITH_ARM_NEON EQUAL 0)
696 #----------------------- global compile and link options ------------------------------
697 #enable sse2 on x86, neon on arm
698 if (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
699     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -msse2 -msse3")
700 elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "(arm)|(ARM)")
701         if (WITH_ARM_NEON EQUAL 1)
702                 message(status "  ARM NEON is enabled, compiling with neon optimization")
703                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon")
704                 set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -mfpu=neon")
705         else (WITH_ARM_NEON EQUAL 1)
706                 message(status "  ARM NEON is disabled, compiling without neon optimization")
707         endif (WITH_ARM_NEON EQUAL 1)
708 endif (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
710 # disable warning about unused but set variables in gcc 4.6+
711 if (CMAKE_COMPILER_IS_GNUCC)
712         execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
713         string(REGEX MATCHALL "[0-9]+" GCC_VERSION_COMPONENTS ${GCC_VERSION})
714         list(GET GCC_VERSION_COMPONENTS 0 GCC_MAJOR)
715         list(GET GCC_VERSION_COMPONENTS 0 GCC_MINOR)
716         add_definitions ("-W -Wall ")
717         set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -pipe -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-schedule-insns")
718         set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
719         set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -ggdb")
720         set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ggdb")
721 endif (CMAKE_COMPILER_IS_GNUCC)
722 # some optimisations
723 if (OSCamOperatingSystem MATCHES "Mac OS X")
724         if (SWVER GREATER 10.6)
725                 if (SWVER EQUAL 10.7 AND XCODEVER LESS 4.3)
726                         add_definitions("-isysroot /Developer/SDKs/MacOSX${SWVER}.sdk")
727                 else (SWVER EQUAL 10.7 AND XCODEVER LESS 4.3)
728                         add_definitions("-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SWVER}.sdk")
729                 endif (SWVER EQUAL 10.7 AND XCODEVER LESS 4.3)
730         elseif(SWVER LESS 10.7)
731                 add_definitions("-isysroot /Developer/SDKs/MacOSX${SWVER}.sdk")
732         endif (SWVER GREATER 10.6)
733 endif (OSCamOperatingSystem MATCHES "Mac OS X")
735 # we don't want the '-rdynamic' in the link command
736 set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
738 # we want to strip if not Debug build
739 if (OSCamOperatingSystem MATCHES "Mac OS X")
740         if (SWVER MATCHES "10.8")
741                 if (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
742                                 set (CMAKE_EXE_LINKER_FLAGS "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SWVER}.sdk")
743                 else (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
744                                 message (STATUS "  building with debug")
745                                 set (CMAKE_EXE_LINKER_FLAGS "-ggdb -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SWVER}.sdk")
746                 endif (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
747         elseif (SWVER MATCHES "10.7")
748                 if (SWVER EQUAL 10.7 AND XCODEVER LESS 4.3)
749                         if (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
750                                 set (CMAKE_EXE_LINKER_FLAGS "-isysroot /Developer/SDKs/MacOSX${SWVER}.sdk")
751                         else (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
752                                 message (STATUS "  building with debug")
753                                 set (CMAKE_EXE_LINKER_FLAGS "-ggdb -isysroot /Developer/SDKs/MacOSX${SWVER}.sdk")
754                         endif (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
755                 else(SWVER EQUAL 10.7 AND XCODEVER LESS 4.3)
756                         if (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
757                                 set (CMAKE_EXE_LINKER_FLAGS "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SWVER}.sdk")
758                         else (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
759                                 message (STATUS "  building with debug")
760                                 set (CMAKE_EXE_LINKER_FLAGS "-ggdb -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SWVER}.sdk")
761                         endif (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
762                 endif(SWVER EQUAL 10.7 AND XCODEVER LESS 4.3)
763         elseif (SWVER MATCHES "10.6")
764                 if (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
765                                 set (CMAKE_EXE_LINKER_FLAGS "-isysroot /Developer/SDKs/MacOSX${SWVER}.sdk")
766                 else (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
767                                 message (STATUS "  building with debug")
768                                 set (CMAKE_EXE_LINKER_FLAGS "-ggdb -isysroot /Developer/SDKs/MacOSX${SWVER}.sdk")
769                 endif (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
770         endif (SWVER MATCHES "10.8")
771 else (OSCamOperatingSystem MATCHES "Mac OS X")
772                 if (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
773                                 set (CMAKE_EXE_LINKER_FLAGS "-s")
774                 else (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
775                                 message (STATUS "  building with debug")
776                                 set (CMAKE_EXE_LINKER_FLAGS "-ggdb")
777                 endif (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
778 endif (OSCamOperatingSystem MATCHES "Mac OS X")
780 if (OSCamOperatingSystem MATCHES "Windows/Cygwin")
781         set (CMAKE_EXE_LINKER_FLAGS "--enable-stdcall-fixup")
782 endif (OSCamOperatingSystem MATCHES "Windows/Cygwin")
784 #----------------------- subdirectory list smargo ------------------------------
786 if( HAVE_LIBRT OR HAVE_LIBRT_STATIC)
787         if (HAVE_LIBUSB)
788                 add_subdirectory (utils)
789         endif (HAVE_LIBUSB)
790 endif( HAVE_LIBRT OR HAVE_LIBRT_STATIC)
792 #--------------------------------------------------------------------------------
794 #----------------------- installation -----------------------------
796 file (GLOB config_files "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/oscam.*")
797 file (GLOB doc_files "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/txt/*.txt")
798 file (GLOB man1_files "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/man/*.1")
799 file (GLOB man5_files "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/man/*.5")
800 file (GLOB example_files "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/example/oscam.ac"
801                                                  "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/example/oscam.cert"
802                                                  "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/example/oscam.conf"
803                                                  "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/example/oscam.guess"
804                                                  "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/example/oscam.ird"
805                                                  "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/example/oscam.server"
806                                                  "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/example/oscam.services"
807                                                  "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/example/oscam.srvid"
808                                                  "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/doc/example/oscam.user")
809 file (GLOB monitor_files "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/monitor/mpcs*.sh"
810                                                  "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/monitor/mpcs*.tar")
812 install (PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${exe_name}${CMAKE_EXECUTABLE_SUFFIX} DESTINATION bin COMPONENT bin)
813 install (FILES ${config_files} DESTINATION etc COMPONENT config)
814 install (FILES ${doc_files} DESTINATION share/doc/oscam COMPONENT doc)
815 install (FILES ${man1_files} DESTINATION share/man/man1 COMPONENT doc)
816 install (FILES ${man5_files} DESTINATION share/man/man5 COMPONENT doc)
817 install (FILES ${example_files} DESTINATION share/doc/oscam/example COMPONENT doc)
818 install (FILES ${monitor_files} DESTINATION share/doc/oscam/monitor COMPONENT doc)
820 #----------------------- we can use CPack to build pacakges --------------------------
822 # get version from source file
823 execute_process (COMMAND grep CS_VERSION ${CMAKE_CURRENT_SOURCE_DIR}/globals.h
824                                  OUTPUT_VARIABLE CS_VERSION)
825 string (REGEX REPLACE ".*\"\(.*\)\".*" "\\1" CS_VERSION ${CS_VERSION})
826 string (REGEX REPLACE "\(.*\)\\..*\\..*" "\\1" CPACK_PACKAGE_VERSION_MAJOR ${CS_VERSION})
827 string (REGEX REPLACE ".*\\.\(.*\)\\..*" "\\1" CPACK_PACKAGE_VERSION_MINOR ${CS_VERSION})
828 string (REGEX REPLACE ".*\\..*\\.\(.*\)" "\\1" CPACK_PACKAGE_VERSION_PATCH ${CS_VERSION})
829 set (CPACK_PACKAGE_VERSION
830          "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
832 # compute my filename
833 set (CPACK_PACKAGE_FILE_NAME
834          "${PROJECT_NAME}-${CPACK_PACKAGE_VERSION}-${CS_TARGET}")
836 # wich archive we want to generate
837 set (CPACK_GENERATOR "TGZ")
839 # what to put in the archive
840 set (CPACK_STRIP_FILES TRUE)
841 set (CPACK_COMPONENTS_ALL bin)# config doc)
843 # ok, we can now use CPack
844 include (CPack)
846 #----------------------- printout resume -----------------------------
848 message (STATUS "")
849 message (STATUS "  operating system: ${OSCamOperatingSystem}")
850 message (STATUS "  target system: ${CS_TARGET}")
851 message (STATUS "  revision: ${CS_SVN_VERSION}")
852 if (HAVE_LIBCRYPTO)
853         message (STATUS "  use system libcrypto functions")
854 else (HAVE_LIBCRYPTO)
855         message (STATUS "  use built-in crypt functions")
856 endif (HAVE_LIBCRYPTO)
857 if (HAVE_PCSC)
858         message (STATUS "  use system pcsc functions")
859 endif (HAVE_PCSC)
860 if (HAVE_PTHREAD)
861         message (STATUS "  use system pthread functions")
862 endif (HAVE_PTHREAD)
863 if (HAVE_LIBUSB)
864         if(STATIC_LIBUSB EQUAL 1)
865                 message (STATUS "  You selected to enable static libusb")
866         endif(STATIC_LIBUSB EQUAL 1)
867         if(STATICLIBUSB AND NOT LIBUSBDIR)
868                 message (STATUS "  use static libusb functions")
869         else(STATICLIBUSB AND NOT LIBUSBDIR)
870                 if (LIBUSBDIR AND STATIC_LIBUSB EQUAL 0)
871                         message(STATUS "  use system libusb from selected LIBUSBDIR functions")
872                 elseif (LIBUSBDIR AND STATIC_LIBUSB EQUAL 1)
873                         message(STATUS "  use static libusb from selected LIBUSBDIR functions")
874                 elseif(LIBUSBDIR)
875                         message(STATUS " use system libusb from selected LIBUSBDIR functions")
876                 elseif(NOT LIBUSBDIR AND NOT STATIC_LIBUSB)
877                         message (STATUS "  use system libusb functions")
878                 endif(LIBUSBDIR AND STATIC_LIBUSB EQUAL 0)
879         endif(STATICLIBUSB AND NOT LIBUSBDIR)
880 endif (HAVE_LIBUSB)
881 if (HAVE_LIBDVBCSA)
882         if(STATIC_LIBDVBCSA EQUAL 1)
883                 message (STATUS "  You selected to enable static libdvbcsa")
884         endif(STATIC_LIBDVBCSA EQUAL 1)
885         if(STATICLIBDVBCSA AND NOT LIBDVBCSADIR)
886                 message (STATUS "  use static libdvbcsa functions")
887         else(STATICLIBDVBCSA AND NOT LIBDVBCSADIR)
888                 if (LIBDVBCSADIR AND STATIC_LIBDVBCSA EQUAL 0)
889                         message(STATUS "  use system libdvbcsa from selected LIBDVBCSADIR functions")
890                 elseif (LIBDVBCSADIR AND STATIC_LIBDVBCSA EQUAL 1)
891                         message(STATUS "  use static libdvbcsa from selected LIBDVBCSADIR functions")
892                 elseif(LIBDVBCSADIR)
893                         message(STATUS " use system libdvbcsa from selected LIBDVBCSADIR functions")
894                 elseif(NOT LIBDVBCSADIR AND NOT STATIC_LIBDVBCSA)
895                         message (STATUS "  use system libdvbcsa functions")
896                 endif(LIBDVBCSADIR AND STATIC_LIBDVBCSA EQUAL 0)
897         endif(STATICLIBDVBCSA AND NOT LIBDVBCSADIR)
898 endif (HAVE_LIBDVBCSA)
900 message (STATUS "")