Merge pull request #1563 from akruphi/master
[far2l.git] / CMakeLists.txt
blobd38935807226f44e1d4a269115dc2dbbd8bf74cb
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 endif()
46 if(NOT "${GIT_TAG}" STREQUAL "v_${VERSION}")
47     if(GIT_FOUND)
48         execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
49             WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
50             OUTPUT_VARIABLE GIT_HASH
51             OUTPUT_STRIP_TRAILING_WHITESPACE)
52     endif()
53     if(NOT "${GIT_HASH}" STREQUAL "")
54         message(STATUS "git hash: ${GIT_HASH}")
55         set(VERSION_PATCH "${VERSION_PATCH}-${GIT_HASH}")
56     else()
57         message(WARNING "git information unavailable, assuming its a build from v_${VERSION}")
58     endif()
59 endif()
61 set(VERSION_PATCH "${VERSION_PATCH}-beta")
63 set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
65 set(CMAKE_CXX_STANDARD_REQUIRED ON)
66 set(CMAKE_CXX_STANDARD 11)
67 set(CMAKE_CXX_EXTENSIONS OFF)
69 if(NOT CMAKE_BUILD_TYPE)
70    set(CMAKE_BUILD_TYPE "Release")
71 endif()
73 message(STATUS "Build Type: ${CMAKE_BUILD_TYPE} Version: ${VERSION}")
75 if(NOT DEFINED CMAKE_INSTALL_PREFIX)
76    if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
77       set(CMAKE_INSTALL_PREFIX "/usr/local")
78    elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
79       set(CMAKE_INSTALL_PREFIX "/usr/local")
80    else()
81       set(CMAKE_INSTALL_PREFIX "/usr")
82    endif()
83 endif()
85 ##############################
87 if (NOT DEFINED USEWX)
88     set(USEWX "YES")
89 endif()
91 if (NOT DEFINED UNRAR)
92     set(UNRAR "bundled")
93 endif()
95 # EACP disabled by default for now as FAR's GetCodePageInfo rejects all multibyte charsets due to BUGBUG.
96 # Uncomment EACP-stuff here when that will be fixed. See https://github.com/elfmz/far2l/issues/1179
97 #if (NOT DEFINED EACP)
98 #   set(EACP "YES")
99 #endif()
101 if (NOT DEFINED LEGACY)
102     # TODO: default it to NO  somewhere in 2022, after all obsolete settings
103     # registry-upgrade-to-ini stuff will be safe to remove
104     set(LEGACY "YES")
105 elseif(FARFTP)
106     set(LEGACY "YES")
107     message(STATUS "Force-enable LEGACY due to enabled FARFTP")
108 endif()
110 #if (NOT EACP)
111 #   message(STATUS "${ColorRed}Building without East Asian codepages support due to EACP=${EACP}${ColorNormal}")
112 #endif()
114 if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
115     set(M4_NAME gm4)
116 else()
117     set(M4_NAME m4)
118 endif()
120 find_program(M4_PROG NAMES ${M4_NAME})
122 if(NOT M4_PROG)
123     message(FATAL_ERROR "${ColorRed}${M4_NAME} not found - please install it${ColorNormal}")
124 endif ()
125 set(M4 ${M4_PROG} -P "-DARCH=${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR}" "-DMAJOR=${VERSION_MAJOR}" "-DMINOR=${VERSION_MINOR}" "-DPATCH=${VERSION_PATCH}")
127 # set(RM rm) actually not needed: use $(CMAKE_COMMAND) -E remove
128 find_program (GAWK NAMES gawk)
129 if(NOT GAWK)
130   message(FATAL_ERROR "${ColorRed}gawk not found - please install it${ColorNormal}")
131 endif ()
133 if(MUSL)
134     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__MUSL__")
135     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__MUSL__")
136 endif()
138 if(TAR_LIMITED_ARGS)
139     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__TAR_LIMITED_ARGS__")
140     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__TAR_LIMITED_ARGS__")
141 endif()
143 if(${CMAKE_VERSION} VERSION_LESS "3.1.0")
144     message("Please consider to switch to newer CMake")
145     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
146 endif()
148 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
149 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c99 -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
150 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O2")
151 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O2")
153 if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
154     set(APP_DIR ${CMAKE_BINARY_DIR}/install)
155     set(INSTALL_DIR ${APP_DIR}/${APP_NAME}.app/Contents/MacOS)
156     set(EXECUTABLE_NAME ${APP_NAME})
158 else()
159     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
160     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
161     set(INSTALL_DIR ${CMAKE_BINARY_DIR}/install)
162     set(EXECUTABLE_NAME far2l)
164     if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
165         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--gc-sections")
166         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--gc-sections")
167     endif()
168 endif()
170 if (CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
171     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
172     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
173     message(STATUS "Running under cygwin, wow!")
174 endif()
176 if (CMAKE_SYSTEM_NAME MATCHES "Haiku")
177     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_DEFAULT_SOURCE -Wno-attributes")
178 endif()
180 set(CMAKE_CXX_VISIBILITY_PRESET hidden)
181 set(CMAKE_C_VISIBILITY_PRESET hidden)
183 if (LEGACY)
184     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINPORT_REGISTRY")
185     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPORT_REGISTRY")
186     message(STATUS "Enabling registry support due to enabled LEGACY")
187 else()
188     message(STATUS "LEGACY is not enabled, your old registry settings will be forgotten, if any")
189 endif()
191 if(CMAKE_VERSION VERSION_GREATER "3.3")
192     cmake_policy(SET CMP0063 NEW)
193     cmake_policy(SET CMP0057 NEW)
194 endif()
196 include_directories(utils/include)
198 add_subdirectory (WinPort)
199 add_subdirectory (utils)
200 add_subdirectory (far2l)
202 if (NOT ${USEWX})
203     message(STATUS "Building without GUI/wxWidgets backend due to USEWX=${USEWX}")
204 else()
205     message(STATUS "Building with GUI/wxWidgets backend")
206     if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
207         if (DEFINED wxWidgets_CONFIG_EXECUTABLE)
208             message(STATUS "Using pre-defined wx config: ${wxWidgets_CONFIG_EXECUTABLE}")
210         elseif(EXISTS "/usr/local/bin/wxgtk3u-3.2-config")
211             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.2-config")
212             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.2")
213             message(STATUS "Using known location of wx-config 3.2")
215         elseif(EXISTS "/usr/local/bin/wxgtk3u-3.1-config")
216             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.1-config")
217             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.1")
218             message(STATUS "Using known location of wx-config 3.1")
220         elseif (EXISTS "/usr/local/bin/wxgtk3u-3.0-config")
221             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.0-config")
222             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.0")
223             message(STATUS "Using known location of wx-config 3.0")
225         else()
226             message(STATUS "No wxgtk3u-3.*-config in expected locations")
227         endif()
229     elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
230         if (EXISTS "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wx-config")
231             # MacPorts
232             set(wxWidgets_CONFIG_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wx-config")
233             set(wxWidgets_wxrc_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wxrc")
234             message(STATUS "Using known location of wx-config 3.2")
236         elseif (EXISTS "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wx-config")
237             # MacPorts
238             set(wxWidgets_CONFIG_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wx-config")
239             set(wxWidgets_wxrc_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wxrc")
240             message(STATUS "Using known location of wx-config 3.1")
242         else()
243             message(STATUS "No wx-config in expected locations")
244         endif()
245     endif()
247     add_subdirectory(WinPort/src/Backend/WX)
248 endif()
250 if (NOT DEFINED TTYX)
251     find_package(X11)
252     if(X11_FOUND)
253         message(STATUS "Building with TTY X11 extensions due to X11 found")
254         add_subdirectory(WinPort/src/Backend/TTY/TTYX)
255     else()
256         message(STATUS "Building without TTY X11 extensions due to X11 not found")
257     endif()
258 elseif (TTYX)
259     message(STATUS "Building with TTY X11 extensions due to TTYX=${TTYX}")
260     add_subdirectory(WinPort/src/Backend/TTY/TTYX)
261 else()
262     message(STATUS "Building without TTY X11 extensions due to TTYX=${TTYX}")
263 endif()
266 ##############################
267 # plugins directives
269 if (NOT DEFINED ALIGN OR ALIGN)
270     message(STATUS "ALIGN plugin enabled")
271     add_subdirectory (align)
272 else()
273     message(STATUS "${ColorRed}ALIGN plugin disabled due to ALIGN=${ALIGN}${ColorNormal}")
274     install(CODE "
275         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/align/plug/align.far-plug-wide)
276         " COMPONENT system)
277 endif()
279 if (NOT DEFINED AUTOWRAP OR AUTOWRAP)
280     message(STATUS "AUTOWRAP plugin enabled")
281     add_subdirectory (autowrap)
282 else()
283     message(STATUS "${ColorRed}AUTOWRAP plugin disabled due to AUTOWRAP=${AUTOWRAP}${ColorNormal}")
284     install(CODE "
285         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/autowrap/plug/autowrap.far-plug-wide)
286         " COMPONENT system)
287 endif()
289 if (NOT DEFINED CALC OR CALC)
290     message(STATUS "CALC plugin enabled")
291     add_subdirectory (calc)
292 else()
293     message(STATUS "${ColorRed}CALC plugin disabled due to CALC=${CALC}${ColorNormal}")
294     install(CODE "
295         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/calc/plug/calc.far-plug-wide)
296         " COMPONENT system)
297 endif()
299 if (NOT DEFINED COLORER OR COLORER)
300     message(STATUS "COLORER plugin enabled")
301     add_subdirectory (colorer)
302 else()
303     message(STATUS "${ColorRed}COLORER plugin disabled due to COLORER=${COLORER}${ColorNormal}")
304     install(CODE "
305         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/colorer/plug/colorer.far-plug-wide)
306         " COMPONENT system)
307 endif()
309 if (NOT DEFINED COMPARE OR COMPARE)
310     message(STATUS "COMPARE plugin enabled")
311     add_subdirectory (compare)
312 else()
313     message(STATUS "${ColorRed}COMPARE plugin disabled due to COMPARE=${COMPARE}${ColorNormal}")
314     install(CODE "
315         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/compare/plug/compare.far-plug-wide)
316         " COMPONENT system)
317 endif()
319 if (NOT DEFINED DRAWLINE OR DRAWLINE)
320     message(STATUS "DRAWLINE plugin enabled")
321     add_subdirectory (drawline)
322 else()
323     message(STATUS "${ColorRed}DRAWLINE plugin disabled due to DRAWLINE=${DRAWLINE}${ColorNormal}")
324     install(CODE "
325         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/drawline/plug/drawline.far-plug-wide)
326         " COMPONENT system)
327 endif()
329 if (NOT DEFINED EDITCASE OR EDITCASE)
330     message(STATUS "EDITCASE plugin enabled")
331     add_subdirectory (editcase)
332 else()
333     message(STATUS "${ColorRed}EDITCASE plugin disabled due to EDITCASE=${EDITCASE}${ColorNormal}")
334     install(CODE "
335         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editcase/plug/editcase.far-plug-wide)
336         " COMPONENT system)
337 endif()
339 if (NOT DEFINED EDITORCOMP OR EDITORCOMP)
340     message(STATUS "EDITORCOMP plugin enabled")
341     add_subdirectory (editorcomp)
342 else()
343     message(STATUS "${ColorRed}EDITORCOMP plugin disabled due to EDITORCOMP=${EDITORCOMP}${ColorNormal}")
344     install(CODE "
345         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editorcomp/plug/editorcomp.far-plug-wide)
346         " COMPONENT system)
347 endif()
349 if (DEFINED FARFTP AND FARFTP)
350     message(STATUS "FARFTP plugin enabled (obsolete)")
351     add_subdirectory (FARStdlib)
352     add_subdirectory (farftp)
353 else()
354     install(CODE "
355         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/farftp/plug/farftp.far-plug-mb)
356         " COMPONENT system)
357 endif()
359 if (NOT DEFINED FILECASE OR FILECASE)
360     message(STATUS "FILECASE plugin enabled")
361     add_subdirectory (filecase)
362 else()
363     message(STATUS "${ColorRed}FILECASE plugin disabled due to FILECASE=${FILECASE}${ColorNormal}")
364     install(CODE "
365         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/filecase/plug/filecase.far-plug-wide)
366         " COMPONENT system)
367 endif()
369 if (NOT DEFINED INCSRCH OR INCSRCH)
370     message(STATUS "INCSRCH plugin enabled")
371     add_subdirectory (incsrch)
372 else()
373     message(STATUS "${ColorRed}Building without <INCSRCH> plugin due to INCSRCH=${INCSRCH}${ColorNormal}")
374     install(CODE "
375         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/incsrch/plug/incsrch.far-plug-wide)
376         " COMPONENT system)
377 endif()
379 if (NOT DEFINED INSIDE OR INSIDE)
380     message(STATUS "INSIDE plugin enabled")
381     add_subdirectory (inside)
382 else()
383     message(STATUS "${ColorRed}INSIDE plugin disabled due to INSIDE=${INSIDE}${ColorNormal}")
384     install(CODE "
385         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/inside/plug/inside.far-plug-mb)
386         " COMPONENT system)
387 endif()
389 if (NOT DEFINED MULTIARC OR MULTIARC)
390     message(STATUS "MULTIARC plugin enabled")
391     # workaround for brew's/macports' libarchive
392     if(IS_DIRECTORY "/usr/local/opt/libarchive/include")
393         set(LibArchive_INCLUDE_DIR "/usr/local/opt/libarchive/include")
394         set(LibArchive_LIBRARY "/usr/local/opt/libarchive/lib/libarchive.dylib")
395     elseif(EXISTS "/opt/local/lib/libarchive.dylib")
396         set(LibArchive_LIBRARY "/opt/local/lib/libarchive.dylib")
397     endif()
399     find_package(LibArchive)
400     if(NOT LibArchive_FOUND)
401         message(WARNING "${ColorRed}libarchive not found, multiarc will have weaker archives support. Its recommended to install libarchive-dev and reconfigure far2l.${ColorNormal}")
402     endif()
404     find_package(PCRE)
405     if(NOT PCRE_FOUND)
406         message(WARNING "${ColorRed}libpcre not found, multiarc will have no custom archives support. Install libpcre and reconfigure far2l if you need that functionality.${ColorNormal}")
407     endif()
409     add_subdirectory (multiarc)
410 else()
411     message(STATUS "${ColorRed}MULTIARC plugin disabled due to MULTIARC=${MULTIARC}${ColorNormal}")
412     install(CODE "
413         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/multiarc/plug/multiarc.far-plug-mb)
414         " COMPONENT system)
415 endif()
417 if (NOT DEFINED NETROCKS OR NETROCKS)
418     message(STATUS "NETROCKS plugin enabled")
419     if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
420         # workaround for brew/macports vs system openssl conflicts
421         if(IS_DIRECTORY "/usr/local/opt/openssl@1.1/include" AND IS_DIRECTORY "/usr/local/opt/openssl@1.1/lib")
422             set(OPENSSL_LIBRARIES "/usr/local/opt/openssl@1.1/lib/libcrypto.dylib;/usr/local/opt/openssl@1.1/lib/libssl.dylib")
423             set(OPENSSL_INCLUDE_DIRS "/usr/local/opt/openssl@1.1/include")
424         elseif(EXISTS "/opt/local/lib/libssl.dylib" AND IS_DIRECTORY "/opt/local/include/openssl")
425             set(OPENSSL_LIBRARIES "/opt/local//lib/libcrypto.dylib;/opt/local/lib/libssl.dylib")
426             set(OPENSSL_INCLUDE_DIRS "/opt/local/include")
427         endif()
428     endif()
430     find_package(OpenSSL)
431     if(OPENSSL_FOUND)
432         message(STATUS "OpenSSL found -> enjoy FTPS support in NetRocks")
433     else()
434         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}")
435     endif(OPENSSL_FOUND)
437     find_package(LibSSH 0.5.0)
438     if(LIBSSH_FOUND)
439         message(STATUS "libssh found -> enjoy SFTP support in NetRocks")
440     else()
441         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}")
442     endif(LIBSSH_FOUND)
444     find_package(Libsmbclient)
445     if(LIBSMBCLIENT_FOUND)
446         message(STATUS "libsmbclient found -> enjoy SMB support in NetRocks")
447     else()
448         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}")
449     endif(LIBSMBCLIENT_FOUND)
451     find_package(LibNfs)
452     if(LIBNFS_FOUND)
453         message(STATUS "libnfs found -> enjoy NFS support in NetRocks")
454     else()
455         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}")
456     endif(LIBNFS_FOUND)
458     find_package(LibNEON)
459     if(LIBNEON_FOUND)
460         message(STATUS "libneon found -> enjoy WebDav support in NetRocks")
461     else()
462         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}")
463     endif(LIBNEON_FOUND)
465     add_subdirectory (NetRocks)
466 else()
467     message(STATUS "${ColorRed}NETROCKS plugin disabled due to NETROCKS=${NETROCKS}${ColorNormal}")
468     install(CODE "
469         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/NetRocks/plug/NetRocks.far-plug-wide)
470         " COMPONENT system)
471 endif()
473 if (DEFINED PYTHON AND PYTHON)
474     find_package(PythonLibs 3.0)
476     if(PYTHONLIBS_FOUND)
477         find_program (PYTHON3 NAMES python3)
478         if(PYTHON3)
479             message(STATUS "PYTHON plugin enabled")
480             add_subdirectory (python)
481         else()
482             message(WARNING "${ColorRed}PYTHON plugin disabled due to missing python3 ${ColorNormal}")
483         endif ()
484     else()
485         message(WARNING "${ColorRed}PYTHON plugin disabled due to Python libraries not found${ColorNormal}")
486     endif()
488     install(CODE "
489         execute_process(COMMAND echo Python: preparing virtual environment)
490         " COMPONENT system)
491     install(CODE "
492         execute_process(COMMAND ${PYTHON3} -m venv --system-site-packages ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python)
493         " COMPONENT system)
494     install(CODE "
495         execute_process(COMMAND echo Python: installing packages)
496         " COMPONENT system)
497     install(CODE "
498         execute_process(COMMAND ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python/bin/python -m pip install cffi debugpy)
499         " COMPONENT system)
501     # Copy this explicitly cuz generic copier command excludes 'far2l'
502     install(DIRECTORY "${INSTALL_DIR}/Plugins/python/plug/far2l"
503         DESTINATION "share/far2l/Plugins/python/plug/" USE_SOURCE_PERMISSIONS
504         COMPONENT base FILES_MATCHING
505         PATTERN "*")
507 else()
508     message(STATUS "${ColorRed}PYTHON plugin disabled, use -DPYTHON=yes if you need it${ColorNormal}")
509     install(CODE "
510         execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python.far-plug-wide)
511         " COMPONENT system)
512 endif()
514 if (NOT DEFINED SIMPLEINDENT OR SIMPLEINDENT)
515     message(STATUS "SIMPLEINDENT plugin enabled")
516     add_subdirectory (SimpleIndent)
517 else()
518     message(STATUS "${ColorRed}SIMPLEINDENT plugin disabled due to SIMPLEINDENT=${SIMPLEINDENT}${ColorNormal}")
519     install(CODE "
520         execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/SimpleIndent/plug/SimpleIndent.far-plug-wide)
521         " COMPONENT system)
522 endif()
524 if (NOT DEFINED TMPPANEL OR TMPPANEL)
525     message(STATUS "TMPPANEL plugin enabled")
526     add_subdirectory (tmppanel)
527 else()
528     message(STATUS "${ColorRed}TMPPANEL plugin disabled due to TMPPANEL=${TMPPANEL}${ColorNormal}")
529     install(CODE "
530         execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/tmppanel/plug/tmppanel.far-plug-wide)
531         " COMPONENT system)
532 endif()
534 ##############################
535 # common install directives
537 add_subdirectory (packaging)
539 add_subdirectory(man)
541 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
542     set(FIXUP_SCRIPT packaging/osx/FixupBundle.cmake)
543     configure_file(${FIXUP_SCRIPT} ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} @ONLY)
544     install(DIRECTORY ${APP_DIR}/${APP_NAME}.app DESTINATION . USE_SOURCE_PERMISSIONS COMPONENT app EXCLUDE_FROM_ALL)
545     install(SCRIPT ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} COMPONENT app EXCLUDE_FROM_ALL)
546 endif()
548 install(PROGRAMS "${INSTALL_DIR}/${EXECUTABLE_NAME}" DESTINATION "bin" RENAME far2l COMPONENT base)
550 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "lib/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
551     PATTERN "colorer/base" EXCLUDE
552     PATTERN "far2l_gui.so"
553     PATTERN "far2l_ttyx.broker"
554     PATTERN "plug/*.far-plug-*"
555     PATTERN "plug/*.broker")
557 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "share/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
558     PATTERN "${EXECUTABLE_NAME}" EXCLUDE
559     PATTERN "far2l_*" EXCLUDE
560     PATTERN "*.far-plug-*" EXCLUDE
561     PATTERN "*.broker" EXCLUDE
562     PATTERN "python/plug/python" EXCLUDE
563     PATTERN "*")
565 # setup some symlinks and remove deprecated stuff from previous installation
566 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l_askpass)
567 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l_sudoapp)
568 install(FILES "${PROJECT_BINARY_DIR}/far2l_askpass" DESTINATION "lib/far2l" COMPONENT system)
569 install(FILES "${PROJECT_BINARY_DIR}/far2l_sudoapp" DESTINATION "lib/far2l" COMPONENT system)
570 install(CODE "
571     execute_process(COMMAND ${CMAKE_COMMAND} -E remove -f \"\${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/objinfo/plug/objinfo.far-plug-mb\")
572     " COMPONENT system)