fixed iterm2 cursor shape esc sequences
[far2l.git] / CMakeLists.txt
blob3e5923fce6206b326e477a233a8ad4d13a52c4fb
1 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
3 cmake_minimum_required (VERSION 3.0.2)
5 project (far2l)
7 set(APP_NAME "far2l")
8 set(APP_IDENTIFIER "com.far2l")
9 set(CPACK_PACKAGE_NAME "far2l")
11 string(ASCII 27 Esc)
12 set(ColorNormal "${Esc}[m")
13 set(ColorRed "${Esc}[1;31m")
15 include(GNUInstallDirs)
17 # just to force reconfigure if packaging/version changed
18 configure_file(${CMAKE_SOURCE_DIR}/packaging/version ${CMAKE_BINARY_DIR}/packaging/version @ONLY)
20 # reconfigure in case .git directory changed to update version correctly
21 IF(EXISTS ${CMAKE_SOURCE_DIR}/.git)
22     set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/.git)
23 endif()
25 file(READ "${CMAKE_SOURCE_DIR}/packaging/version" VERSION)
26 string(REGEX REPLACE "[\r\n\t ]$" "" VERSION "${VERSION}")
27 string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
28 string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
29 string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.(.*)" "\\1" VERSION_PATCH "${VERSION}")
31 if("${VERSION_MAJOR}" STREQUAL "" OR "${VERSION_MAJOR}" STREQUAL "${VERSION}"
32     OR "${VERSION_MINOR}" STREQUAL "" OR "${VERSION_MINOR}" STREQUAL "${VERSION}"
33     OR "${VERSION_PATCH}" STREQUAL "" OR "${VERSION_PATCH}" STREQUAL "${VERSION}")
34         message(FATAL_ERROR "${ColorRed}packaging/version is corrupted, please write actual X.Y.Z version into it.${ColorNormal}")
35 endif()
37 find_package(Git)
39 if(GIT_FOUND)
40     execute_process(COMMAND "${GIT_EXECUTABLE}" describe --tag
41         WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
42         OUTPUT_VARIABLE GIT_TAG
43         OUTPUT_STRIP_TRAILING_WHITESPACE
44         ERROR_QUIET)
45 endif()
47 if(NOT "${GIT_TAG}" STREQUAL "v_${VERSION}")
48     if(GIT_FOUND)
49         if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
50             execute_process(COMMAND "${GIT_EXECUTABLE}" show --no-patch --format=%ci HEAD
51                 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
52                 OUTPUT_VARIABLE GIT_DATE
53                 OUTPUT_STRIP_TRAILING_WHITESPACE)
54             string(SUBSTRING ${GIT_DATE} 0 10 GIT_DATE)
55             execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
56                 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
57                 OUTPUT_VARIABLE GIT_HASH
58                 OUTPUT_STRIP_TRAILING_WHITESPACE)
59         endif()
60     endif()
61     if(NOT "${GIT_DATE}" STREQUAL "")
62         message(STATUS "git date: ${GIT_DATE}")
63         set(VERSION_PATCH "${VERSION_PATCH}-${GIT_DATE}")
64     endif()
65     if(NOT "${GIT_HASH}" STREQUAL "")
66         message(STATUS "git hash: ${GIT_HASH}")
67         set(VERSION_PATCH "${VERSION_PATCH}-${GIT_HASH}")
68     else()
69         message(WARNING "git information unavailable, assuming its a build from v_${VERSION}")
70     endif()
71 endif()
73 set(VERSION_PATCH "${VERSION_PATCH}-beta")
75 set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
77 set(CMAKE_CXX_STANDARD_REQUIRED ON)
78 set(CMAKE_CXX_STANDARD 11)
79 set(CMAKE_CXX_EXTENSIONS OFF)
81 if(NOT CMAKE_BUILD_TYPE)
82    set(CMAKE_BUILD_TYPE "Release")
83 endif()
85 message(STATUS "Build Type: ${CMAKE_BUILD_TYPE} Version: ${VERSION}")
87 if(NOT DEFINED CMAKE_INSTALL_PREFIX)
88    if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
89       set(CMAKE_INSTALL_PREFIX "/usr/local")
90    elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
91       set(CMAKE_INSTALL_PREFIX "/usr/local")
92    else()
93       set(CMAKE_INSTALL_PREFIX "/usr")
94    endif()
95 endif()
97 ##############################
99 if (NOT DEFINED TESTING)
100     set(TESTING "NO")
101 endif()
103 if (NOT DEFINED USEWX)
104     set(USEWX "YES")
105 endif()
107 if (NOT DEFINED UNRAR)
108     set(UNRAR "bundled")
109 endif()
111 # EACP disabled by default for now as FAR's GetCodePageInfo rejects all multibyte charsets due to BUGBUG.
112 # Uncomment EACP-stuff here when that will be fixed. See https://github.com/elfmz/far2l/issues/1179
113 #if (NOT DEFINED EACP)
114 #   set(EACP "YES")
115 #endif()
117 if (NOT DEFINED LEGACY)
118     # TODO: default it to NO  somewhere in 2022, after all obsolete settings
119     # registry-upgrade-to-ini stuff will be safe to remove
120     set(LEGACY "YES")
121 elseif(FARFTP)
122     set(LEGACY "YES")
123     message(STATUS "Force-enable LEGACY due to enabled FARFTP")
124 endif()
126 #if (NOT EACP)
127 #   message(STATUS "${ColorRed}Building without East Asian codepages support due to EACP=${EACP}${ColorNormal}")
128 #endif()
130 # set(RM rm) actually not needed: use $(CMAKE_COMMAND) -E remove
132 if(MUSL)
133     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__MUSL__")
134     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__MUSL__")
135 endif()
137 if(TAR_LIMITED_ARGS)
138     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__TAR_LIMITED_ARGS__")
139     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__TAR_LIMITED_ARGS__")
140 endif()
142 if(${CMAKE_VERSION} VERSION_LESS "3.1.0")
143     message("Please consider to switch to newer CMake")
144     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
145 endif()
147 if("${ICU_MODE}" STREQUAL "runtime")
148     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRUNTIME_ICU")
149     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DRUNTIME_ICU")
150 endif()
152 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
153 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c99 -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
154 set(CMAKE_CXX_FLAGS_RELEASE "-O2")
155 set(CMAKE_C_FLAGS_RELEASE "-O2")
157 if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
158     set(APP_DIR ${CMAKE_BINARY_DIR}/install)
159     set(INSTALL_DIR ${APP_DIR}/${APP_NAME}.app/Contents/MacOS)
160     set(EXECUTABLE_NAME ${APP_NAME})
162 else()
163     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
164     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
165     set(INSTALL_DIR ${CMAKE_BINARY_DIR}/install)
166     set(EXECUTABLE_NAME far2l)
168     if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
169         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--gc-sections")
170         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--gc-sections")
171     endif()
172 endif()
174 if (CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
175     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
176     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
177     message(STATUS "Running under cygwin, wow!")
178 endif()
180 if (CMAKE_SYSTEM_NAME MATCHES "Haiku")
181     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_DEFAULT_SOURCE -Wno-attributes")
182 endif()
184 set(CMAKE_CXX_VISIBILITY_PRESET hidden)
185 set(CMAKE_C_VISIBILITY_PRESET hidden)
187 if (LEGACY)
188     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINPORT_REGISTRY")
189     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPORT_REGISTRY")
190     message(STATUS "Enabling registry support due to enabled LEGACY")
191 else()
192     message(STATUS "LEGACY is not enabled, your old registry settings will be forgotten, if any")
193 endif()
195 if(CMAKE_VERSION VERSION_GREATER "3.3")
196     cmake_policy(SET CMP0063 NEW)
197     cmake_policy(SET CMP0057 NEW)
198 endif()
200 include_directories(utils/include)
202 add_subdirectory (WinPort)
203 add_subdirectory (utils)
204 add_subdirectory (far2l)
206 if (NOT ${USEWX})
207     message(STATUS "Building without GUI/wxWidgets backend due to USEWX=${USEWX}")
208 else()
209     message(STATUS "Building with GUI/wxWidgets backend")
210     if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
211         if (DEFINED wxWidgets_CONFIG_EXECUTABLE)
212             message(STATUS "Using pre-defined wx config: ${wxWidgets_CONFIG_EXECUTABLE}")
214         elseif(EXISTS "/usr/local/bin/wxgtk3u-3.2-config")
215             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.2-config")
216             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.2")
217             message(STATUS "Using known location of wx-config 3.2")
219         elseif(EXISTS "/usr/local/bin/wxgtk3u-3.1-config")
220             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.1-config")
221             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.1")
222             message(STATUS "Using known location of wx-config 3.1")
224         elseif (EXISTS "/usr/local/bin/wxgtk3u-3.0-config")
225             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.0-config")
226             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.0")
227             message(STATUS "Using known location of wx-config 3.0")
229         else()
230             message(STATUS "No wxgtk3u-3.*-config in expected locations")
231         endif()
233     elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
234         if (EXISTS "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wx-config")
235             # MacPorts
236             set(wxWidgets_CONFIG_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wx-config")
237             set(wxWidgets_wxrc_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wxrc")
238             message(STATUS "Using known location of wx-config 3.2")
240         elseif (EXISTS "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wx-config")
241             # MacPorts
242             set(wxWidgets_CONFIG_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wx-config")
243             set(wxWidgets_wxrc_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wxrc")
244             message(STATUS "Using known location of wx-config 3.1")
246         else()
247             message(STATUS "No wx-config in expected locations")
248         endif()
249     endif()
251     add_subdirectory(WinPort/src/Backend/WX)
252 endif()
254 if (NOT DEFINED TTYX)
255     find_package(X11)
256     if(X11_FOUND)
257         message(STATUS "Building with TTY X11 extensions due to X11 found")
258         add_subdirectory(WinPort/src/Backend/TTY/TTYX)
259     else()
260         message(STATUS "Building without TTY X11 extensions due to X11 not found")
261     endif()
262 elseif (TTYX)
263     message(STATUS "Building with TTY X11 extensions due to TTYX=${TTYX}")
264     add_subdirectory(WinPort/src/Backend/TTY/TTYX)
265 else()
266     message(STATUS "Building without TTY X11 extensions due to TTYX=${TTYX}")
267 endif()
270 ##############################
271 # plugins directives
273 if (NOT DEFINED ALIGN OR ALIGN)
274     message(STATUS "ALIGN plugin enabled")
275     add_subdirectory (align)
276 else()
277     message(STATUS "${ColorRed}ALIGN plugin disabled due to ALIGN=${ALIGN}${ColorNormal}")
278     install(CODE "
279         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/align/plug/align.far-plug-wide)
280         " COMPONENT system)
281 endif()
283 if (NOT DEFINED AUTOWRAP OR AUTOWRAP)
284     message(STATUS "AUTOWRAP plugin enabled")
285     add_subdirectory (autowrap)
286 else()
287     message(STATUS "${ColorRed}AUTOWRAP plugin disabled due to AUTOWRAP=${AUTOWRAP}${ColorNormal}")
288     install(CODE "
289         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/autowrap/plug/autowrap.far-plug-wide)
290         " COMPONENT system)
291 endif()
293 if (NOT DEFINED CALC OR CALC)
294     message(STATUS "CALC plugin enabled")
295     add_subdirectory (calc)
296 else()
297     message(STATUS "${ColorRed}CALC plugin disabled due to CALC=${CALC}${ColorNormal}")
298     install(CODE "
299         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/calc/plug/calc.far-plug-wide)
300         " COMPONENT system)
301 endif()
303 if (NOT DEFINED COLORER OR COLORER)
304     message(STATUS "COLORER plugin enabled")
305     add_subdirectory (colorer)
306 else()
307     message(STATUS "${ColorRed}COLORER plugin disabled due to COLORER=${COLORER}${ColorNormal}")
308     install(CODE "
309         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/colorer/plug/colorer.far-plug-wide)
310         " COMPONENT system)
311 endif()
313 if (NOT DEFINED COMPARE OR COMPARE)
314     message(STATUS "COMPARE plugin enabled")
315     add_subdirectory (compare)
316 else()
317     message(STATUS "${ColorRed}COMPARE plugin disabled due to COMPARE=${COMPARE}${ColorNormal}")
318     install(CODE "
319         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/compare/plug/compare.far-plug-wide)
320         " COMPONENT system)
321 endif()
323 if (NOT DEFINED DRAWLINE OR DRAWLINE)
324     message(STATUS "DRAWLINE plugin enabled")
325     add_subdirectory (drawline)
326 else()
327     message(STATUS "${ColorRed}DRAWLINE plugin disabled due to DRAWLINE=${DRAWLINE}${ColorNormal}")
328     install(CODE "
329         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/drawline/plug/drawline.far-plug-wide)
330         " COMPONENT system)
331 endif()
333 if (NOT DEFINED EDITCASE OR EDITCASE)
334     message(STATUS "EDITCASE plugin enabled")
335     add_subdirectory (editcase)
336 else()
337     message(STATUS "${ColorRed}EDITCASE plugin disabled due to EDITCASE=${EDITCASE}${ColorNormal}")
338     install(CODE "
339         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editcase/plug/editcase.far-plug-wide)
340         " COMPONENT system)
341 endif()
343 if (NOT DEFINED EDITORCOMP OR EDITORCOMP)
344     message(STATUS "EDITORCOMP plugin enabled")
345     add_subdirectory (editorcomp)
346 else()
347     message(STATUS "${ColorRed}EDITORCOMP plugin disabled due to EDITORCOMP=${EDITORCOMP}${ColorNormal}")
348     install(CODE "
349         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editorcomp/plug/editorcomp.far-plug-wide)
350         " COMPONENT system)
351 endif()
353 if (DEFINED FARFTP AND FARFTP)
354     message(STATUS "FARFTP plugin enabled (obsolete)")
355     add_subdirectory (FARStdlib)
356     add_subdirectory (farftp)
357 else()
358     install(CODE "
359         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/farftp/plug/farftp.far-plug-mb)
360         " COMPONENT system)
361 endif()
363 if (NOT DEFINED FILECASE OR FILECASE)
364     message(STATUS "FILECASE plugin enabled")
365     add_subdirectory (filecase)
366 else()
367     message(STATUS "${ColorRed}FILECASE plugin disabled due to FILECASE=${FILECASE}${ColorNormal}")
368     install(CODE "
369         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/filecase/plug/filecase.far-plug-wide)
370         " COMPONENT system)
371 endif()
373 if (NOT DEFINED INCSRCH OR INCSRCH)
374     message(STATUS "INCSRCH plugin enabled")
375     add_subdirectory (incsrch)
376 else()
377     message(STATUS "${ColorRed}Building without <INCSRCH> plugin due to INCSRCH=${INCSRCH}${ColorNormal}")
378     install(CODE "
379         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/incsrch/plug/incsrch.far-plug-wide)
380         " COMPONENT system)
381 endif()
383 if (NOT DEFINED INSIDE OR INSIDE)
384     message(STATUS "INSIDE plugin enabled")
385     add_subdirectory (inside)
386 else()
387     message(STATUS "${ColorRed}INSIDE plugin disabled due to INSIDE=${INSIDE}${ColorNormal}")
388     install(CODE "
389         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/inside/plug/inside.far-plug-mb)
390         " COMPONENT system)
391 endif()
393 if (NOT DEFINED MULTIARC OR MULTIARC)
394     message(STATUS "MULTIARC plugin enabled")
396     find_package(PkgConfig REQUIRED)
397     pkg_search_module(LibArchive QUIET libarchive)
398     if(NOT LibArchive_FOUND)
399         # workaround for MacOS brew's/macports' libarchive
400         if(IS_DIRECTORY "/usr/local/opt/libarchive/include")
401             set(LibArchive_INCLUDE_DIR "/usr/local/opt/libarchive/include")
402             set(LibArchive_LIBRARY "/usr/local/opt/libarchive/lib/libarchive.dylib")
403         elseif(EXISTS "/opt/local/lib/libarchive.dylib")
404             set(LibArchive_LIBRARY "/opt/local/lib/libarchive.dylib")
405         endif()
406         find_package(LibArchive)
407         if(NOT LibArchive_FOUND)
408             message(WARNING "${ColorRed}libarchive not found, multiarc will have weaker archives support. Its recommended to install libarchive-dev and reconfigure far2l.${ColorNormal}")
409         endif()
410     endif()
412     add_subdirectory (multiarc)
413 else()
414     message(STATUS "${ColorRed}MULTIARC plugin disabled due to MULTIARC=${MULTIARC}${ColorNormal}")
415     install(CODE "
416         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/multiarc/plug/multiarc.far-plug-mb)
417         " COMPONENT system)
418 endif()
420 if (NOT DEFINED NETROCKS OR NETROCKS)
421     message(STATUS "NETROCKS plugin enabled")
422     find_package(OpenSSL)
423     if(OPENSSL_FOUND)
424         message(STATUS "OpenSSL found -> enjoy FTPS support in NetRocks")
425     else()
426         message(WARNING "${ColorRed}OpenSSL not found, NetRocks will not have FTPS protocol support. Install libssl-dev if you want FTPS protocol available in NetRocks.${ColorNormal}")
427     endif(OPENSSL_FOUND)
429     find_package(LibSSH 0.5.0)
430     if(LIBSSH_FOUND)
431         message(STATUS "libssh found -> enjoy SFTP support in NetRocks")
432     else()
433         message(WARNING "${ColorRed}libssh not found, NetRocks will not have SFTP protocol support. Install libssh-dev if you want SFTP protocol available in NetRocks.${ColorNormal}")
434     endif(LIBSSH_FOUND)
436     find_package(Libsmbclient)
437     if(LIBSMBCLIENT_FOUND)
438         message(STATUS "libsmbclient found -> enjoy SMB support in NetRocks")
439     else()
440         message(WARNING "${ColorRed}libsmbclient not found, NetRocks will not have SMB protocol support. Install libsmbclient-dev if you want SMB protocol available in NetRocks.${ColorNormal}")
441     endif(LIBSMBCLIENT_FOUND)
443     find_package(LibNfs)
444     if(LIBNFS_FOUND)
445         message(STATUS "libnfs found -> enjoy NFS support in NetRocks")
446     else()
447         message(WARNING "${ColorRed}libnfs not found, NetRocks will not have NFS protocol support. Install libnfs-dev if you want NFS protocol available in NetRocks.${ColorNormal}")
448     endif(LIBNFS_FOUND)
450     find_package(LibNEON)
451     if(LIBNEON_FOUND)
452         message(STATUS "libneon found -> enjoy WebDav support in NetRocks")
453     else()
454         message(WARNING "${ColorRed}libneon not found, NetRocks will not have WebDav protocol support. Install libneon*-dev if you want WebDav protocol available in NetRocks.${ColorNormal}")
455     endif(LIBNEON_FOUND)
457     add_subdirectory (NetRocks)
458 else()
459     message(STATUS "${ColorRed}NETROCKS plugin disabled due to NETROCKS=${NETROCKS}${ColorNormal}")
460     install(CODE "
461         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/NetRocks/plug/NetRocks.far-plug-wide)
462         " COMPONENT system)
463 endif()
465 if (DEFINED PYTHON AND PYTHON)
466     message(STATUS "PYTHON plugin with interpreter from virtualenv enabled")
467     add_subdirectory (python)
468     # Copy this explicitly cuz generic copier command excludes 'far2l'
469     install(DIRECTORY "${INSTALL_DIR}/Plugins/python/plug/far2l"
470         DESTINATION "lib/far2l/Plugins/python/plug/" USE_SOURCE_PERMISSIONS
471         COMPONENT base FILES_MATCHING
472         PATTERN "*")
473     install(DIRECTORY "${INSTALL_DIR}/Plugins/python/plug/plugins"
474         DESTINATION "lib/far2l/Plugins/python/plug/" USE_SOURCE_PERMISSIONS
475         COMPONENT base FILES_MATCHING
476         PATTERN "*")
477 else()
478     message(STATUS "${ColorRed}PYTHON plugin disabled, use -DPYTHON=yes if you need it${ColorNormal}")
479     install(CODE "
480         execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python.far-plug-wide)
481         " COMPONENT system)
482 endif()
484 if (NOT DEFINED SIMPLEINDENT OR SIMPLEINDENT)
485     message(STATUS "SIMPLEINDENT plugin enabled")
486     add_subdirectory (SimpleIndent)
487 else()
488     message(STATUS "${ColorRed}SIMPLEINDENT plugin disabled due to SIMPLEINDENT=${SIMPLEINDENT}${ColorNormal}")
489     install(CODE "
490         execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/SimpleIndent/plug/SimpleIndent.far-plug-wide)
491         " COMPONENT system)
492 endif()
494 if (NOT DEFINED TMPPANEL OR TMPPANEL)
495     message(STATUS "TMPPANEL plugin enabled")
496     add_subdirectory (tmppanel)
497 else()
498     message(STATUS "${ColorRed}TMPPANEL plugin disabled due to TMPPANEL=${TMPPANEL}${ColorNormal}")
499     install(CODE "
500         execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/tmppanel/plug/tmppanel.far-plug-wide)
501         " COMPONENT system)
502 endif()
504 ##############################
505 # common install directives
507 add_subdirectory (packaging)
509 add_subdirectory(man)
510 add_subdirectory(bash-completion)
512 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
513     set(FIXUP_SCRIPT packaging/osx/FixupBundle.cmake)
514     configure_file(${FIXUP_SCRIPT}.in ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} @ONLY)
515     install(DIRECTORY ${APP_DIR}/${APP_NAME}.app DESTINATION . USE_SOURCE_PERMISSIONS COMPONENT app EXCLUDE_FROM_ALL)
516     install(SCRIPT ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} COMPONENT app EXCLUDE_FROM_ALL)
517 endif()
519 install(PROGRAMS "${INSTALL_DIR}/${EXECUTABLE_NAME}" DESTINATION "bin" RENAME far2l COMPONENT base)
521 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "lib/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
522     PATTERN "colorer/base" EXCLUDE
523     PATTERN "far2l_gui.so"
524     PATTERN "far2l_ttyx.broker"
525     PATTERN "plug/*.far-plug-*"
526     PATTERN "plug/*.broker"
529 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "share/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
530     PATTERN "${EXECUTABLE_NAME}" EXCLUDE
531     PATTERN "far2ledit" EXCLUDE
532     PATTERN "far2l_*" EXCLUDE
533     PATTERN "*.far-plug-*" EXCLUDE
534     PATTERN "*.broker" EXCLUDE
535     PATTERN "python/plug/python" EXCLUDE
536     PATTERN "*"
539 # setup some symlinks and remove deprecated stuff from previous installation
540 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l/far2l_askpass)
541 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l/far2l_sudoapp)
542 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink far2l ${PROJECT_BINARY_DIR}/far2l/far2ledit)
543 install(FILES "${PROJECT_BINARY_DIR}/far2l/far2l_askpass" DESTINATION "lib/far2l" COMPONENT system)
544 install(FILES "${PROJECT_BINARY_DIR}/far2l/far2l_sudoapp" DESTINATION "lib/far2l" COMPONENT system)
545 install(FILES "${PROJECT_BINARY_DIR}/far2l/far2ledit" DESTINATION "bin" COMPONENT base)
546 install(CODE "
547     execute_process(COMMAND ${CMAKE_COMMAND} -E remove -f \"\${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/objinfo/plug/objinfo.far-plug-mb\")
548     " COMPONENT system)