Merge pull request #2098 from akruphi/fix_editor_attrstr
[far2l.git] / CMakeLists.txt
blobbd3df17b16cf973c5a4b7745ab1676abf7ae33dd
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         if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
49             execute_process(COMMAND "${GIT_EXECUTABLE}" show --no-patch --format=%ci HEAD
50                 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
51                 OUTPUT_VARIABLE GIT_DATE
52                 OUTPUT_STRIP_TRAILING_WHITESPACE)
53             string(SUBSTRING ${GIT_DATE} 0 10 GIT_DATE)
54             execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
55                 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
56                 OUTPUT_VARIABLE GIT_HASH
57                 OUTPUT_STRIP_TRAILING_WHITESPACE)
58         endif()
59     endif()
60     if(NOT "${GIT_DATE}" STREQUAL "")
61         message(STATUS "git date: ${GIT_DATE}")
62         set(VERSION_PATCH "${VERSION_PATCH}-${GIT_DATE}")
63     endif()
64     if(NOT "${GIT_HASH}" STREQUAL "")
65         message(STATUS "git hash: ${GIT_HASH}")
66         set(VERSION_PATCH "${VERSION_PATCH}-${GIT_HASH}")
67     else()
68         message(WARNING "git information unavailable, assuming its a build from v_${VERSION}")
69     endif()
70 endif()
72 set(VERSION_PATCH "${VERSION_PATCH}-beta")
74 set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
76 set(CMAKE_CXX_STANDARD_REQUIRED ON)
77 set(CMAKE_CXX_STANDARD 11)
78 set(CMAKE_CXX_EXTENSIONS OFF)
80 if(NOT CMAKE_BUILD_TYPE)
81    set(CMAKE_BUILD_TYPE "Release")
82 endif()
84 message(STATUS "Build Type: ${CMAKE_BUILD_TYPE} Version: ${VERSION}")
86 if(NOT DEFINED CMAKE_INSTALL_PREFIX)
87    if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
88       set(CMAKE_INSTALL_PREFIX "/usr/local")
89    elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
90       set(CMAKE_INSTALL_PREFIX "/usr/local")
91    else()
92       set(CMAKE_INSTALL_PREFIX "/usr")
93    endif()
94 endif()
96 ##############################
98 if (NOT DEFINED USEWX)
99     set(USEWX "YES")
100 endif()
102 if (NOT DEFINED UNRAR)
103     set(UNRAR "bundled")
104 endif()
106 if (NOT DEFINED USESPDLOG)
107     set(USESPDLOG "NO")
108 endif()
110 # EACP disabled by default for now as FAR's GetCodePageInfo rejects all multibyte charsets due to BUGBUG.
111 # Uncomment EACP-stuff here when that will be fixed. See https://github.com/elfmz/far2l/issues/1179
112 #if (NOT DEFINED EACP)
113 #   set(EACP "YES")
114 #endif()
116 if (NOT DEFINED LEGACY)
117     # TODO: default it to NO  somewhere in 2022, after all obsolete settings
118     # registry-upgrade-to-ini stuff will be safe to remove
119     set(LEGACY "YES")
120 elseif(FARFTP)
121     set(LEGACY "YES")
122     message(STATUS "Force-enable LEGACY due to enabled FARFTP")
123 endif()
125 #if (NOT EACP)
126 #   message(STATUS "${ColorRed}Building without East Asian codepages support due to EACP=${EACP}${ColorNormal}")
127 #endif()
129 # set(RM rm) actually not needed: use $(CMAKE_COMMAND) -E remove
131 if(MUSL)
132     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__MUSL__")
133     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__MUSL__")
134 endif()
136 if(TAR_LIMITED_ARGS)
137     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__TAR_LIMITED_ARGS__")
138     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__TAR_LIMITED_ARGS__")
139 endif()
141 if(${CMAKE_VERSION} VERSION_LESS "3.1.0")
142     message("Please consider to switch to newer CMake")
143     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
144 endif()
146 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
147 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c99 -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
148 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O2")
149 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O2")
151 if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
152     set(APP_DIR ${CMAKE_BINARY_DIR}/install)
153     set(INSTALL_DIR ${APP_DIR}/${APP_NAME}.app/Contents/MacOS)
154     set(EXECUTABLE_NAME ${APP_NAME})
156 else()
157     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
158     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
159     set(INSTALL_DIR ${CMAKE_BINARY_DIR}/install)
160     set(EXECUTABLE_NAME far2l)
162     if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
163         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--gc-sections")
164         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--gc-sections")
165     endif()
166 endif()
168 if (CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
169     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
170     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
171     message(STATUS "Running under cygwin, wow!")
172 endif()
174 if (CMAKE_SYSTEM_NAME MATCHES "Haiku")
175     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_DEFAULT_SOURCE -Wno-attributes")
176 endif()
178 set(CMAKE_CXX_VISIBILITY_PRESET hidden)
179 set(CMAKE_C_VISIBILITY_PRESET hidden)
181 if (LEGACY)
182     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINPORT_REGISTRY")
183     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPORT_REGISTRY")
184     message(STATUS "Enabling registry support due to enabled LEGACY")
185 else()
186     message(STATUS "LEGACY is not enabled, your old registry settings will be forgotten, if any")
187 endif()
189 if(CMAKE_VERSION VERSION_GREATER "3.3")
190     cmake_policy(SET CMP0063 NEW)
191     cmake_policy(SET CMP0057 NEW)
192 endif()
194 include_directories(utils/include)
196 add_subdirectory (WinPort)
197 add_subdirectory (utils)
198 add_subdirectory (far2l)
200 if (NOT ${USEWX})
201     message(STATUS "Building without GUI/wxWidgets backend due to USEWX=${USEWX}")
202 else()
203     message(STATUS "Building with GUI/wxWidgets backend")
204     if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
205         if (DEFINED wxWidgets_CONFIG_EXECUTABLE)
206             message(STATUS "Using pre-defined wx config: ${wxWidgets_CONFIG_EXECUTABLE}")
208         elseif(EXISTS "/usr/local/bin/wxgtk3u-3.2-config")
209             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.2-config")
210             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.2")
211             message(STATUS "Using known location of wx-config 3.2")
213         elseif(EXISTS "/usr/local/bin/wxgtk3u-3.1-config")
214             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.1-config")
215             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.1")
216             message(STATUS "Using known location of wx-config 3.1")
218         elseif (EXISTS "/usr/local/bin/wxgtk3u-3.0-config")
219             set(wxWidgets_CONFIG_EXECUTABLE "/usr/local/bin/wxgtk3u-3.0-config")
220             set(wxWidgets_wxrc_EXECUTABLE "/usr/local/bin/wxrc-gtk3u-3.0")
221             message(STATUS "Using known location of wx-config 3.0")
223         else()
224             message(STATUS "No wxgtk3u-3.*-config in expected locations")
225         endif()
227     elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
228         if (EXISTS "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wx-config")
229             # MacPorts
230             set(wxWidgets_CONFIG_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wx-config")
231             set(wxWidgets_wxrc_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.2/bin/wxrc")
232             message(STATUS "Using known location of wx-config 3.2")
234         elseif (EXISTS "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wx-config")
235             # MacPorts
236             set(wxWidgets_CONFIG_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wx-config")
237             set(wxWidgets_wxrc_EXECUTABLE "/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wxrc")
238             message(STATUS "Using known location of wx-config 3.1")
240         else()
241             message(STATUS "No wx-config in expected locations")
242         endif()
243     endif()
245     add_subdirectory(WinPort/src/Backend/WX)
246 endif()
248 if (NOT DEFINED TTYX)
249     find_package(X11)
250     if(X11_FOUND)
251         message(STATUS "Building with TTY X11 extensions due to X11 found")
252         add_subdirectory(WinPort/src/Backend/TTY/TTYX)
253     else()
254         message(STATUS "Building without TTY X11 extensions due to X11 not found")
255     endif()
256 elseif (TTYX)
257     message(STATUS "Building with TTY X11 extensions due to TTYX=${TTYX}")
258     add_subdirectory(WinPort/src/Backend/TTY/TTYX)
259 else()
260     message(STATUS "Building without TTY X11 extensions due to TTYX=${TTYX}")
261 endif()
264 ##############################
265 # plugins directives
267 if (NOT DEFINED ALIGN OR ALIGN)
268     message(STATUS "ALIGN plugin enabled")
269     add_subdirectory (align)
270 else()
271     message(STATUS "${ColorRed}ALIGN plugin disabled due to ALIGN=${ALIGN}${ColorNormal}")
272     install(CODE "
273         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/align/plug/align.far-plug-wide)
274         " COMPONENT system)
275 endif()
277 if (NOT DEFINED AUTOWRAP OR AUTOWRAP)
278     message(STATUS "AUTOWRAP plugin enabled")
279     add_subdirectory (autowrap)
280 else()
281     message(STATUS "${ColorRed}AUTOWRAP plugin disabled due to AUTOWRAP=${AUTOWRAP}${ColorNormal}")
282     install(CODE "
283         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/autowrap/plug/autowrap.far-plug-wide)
284         " COMPONENT system)
285 endif()
287 if (NOT DEFINED CALC OR CALC)
288     message(STATUS "CALC plugin enabled")
289     add_subdirectory (calc)
290 else()
291     message(STATUS "${ColorRed}CALC plugin disabled due to CALC=${CALC}${ColorNormal}")
292     install(CODE "
293         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/calc/plug/calc.far-plug-wide)
294         " COMPONENT system)
295 endif()
297 if (NOT DEFINED COLORER OR COLORER)
298     message(STATUS "COLORER plugin enabled")
299     add_subdirectory (colorer)
300 else()
301     message(STATUS "${ColorRed}COLORER plugin disabled due to COLORER=${COLORER}${ColorNormal}")
302     install(CODE "
303         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/colorer/plug/colorer.far-plug-wide)
304         " COMPONENT system)
305 endif()
307 if (NOT DEFINED COMPARE OR COMPARE)
308     message(STATUS "COMPARE plugin enabled")
309     add_subdirectory (compare)
310 else()
311     message(STATUS "${ColorRed}COMPARE plugin disabled due to COMPARE=${COMPARE}${ColorNormal}")
312     install(CODE "
313         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/compare/plug/compare.far-plug-wide)
314         " COMPONENT system)
315 endif()
317 if (NOT DEFINED DRAWLINE OR DRAWLINE)
318     message(STATUS "DRAWLINE plugin enabled")
319     add_subdirectory (drawline)
320 else()
321     message(STATUS "${ColorRed}DRAWLINE plugin disabled due to DRAWLINE=${DRAWLINE}${ColorNormal}")
322     install(CODE "
323         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/drawline/plug/drawline.far-plug-wide)
324         " COMPONENT system)
325 endif()
327 if (NOT DEFINED EDITCASE OR EDITCASE)
328     message(STATUS "EDITCASE plugin enabled")
329     add_subdirectory (editcase)
330 else()
331     message(STATUS "${ColorRed}EDITCASE plugin disabled due to EDITCASE=${EDITCASE}${ColorNormal}")
332     install(CODE "
333         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editcase/plug/editcase.far-plug-wide)
334         " COMPONENT system)
335 endif()
337 if (NOT DEFINED EDITORCOMP OR EDITORCOMP)
338     message(STATUS "EDITORCOMP plugin enabled")
339     add_subdirectory (editorcomp)
340 else()
341     message(STATUS "${ColorRed}EDITORCOMP plugin disabled due to EDITORCOMP=${EDITORCOMP}${ColorNormal}")
342     install(CODE "
343         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editorcomp/plug/editorcomp.far-plug-wide)
344         " COMPONENT system)
345 endif()
347 if (DEFINED FARFTP AND FARFTP)
348     message(STATUS "FARFTP plugin enabled (obsolete)")
349     add_subdirectory (FARStdlib)
350     add_subdirectory (farftp)
351 else()
352     install(CODE "
353         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/farftp/plug/farftp.far-plug-mb)
354         " COMPONENT system)
355 endif()
357 if (NOT DEFINED FILECASE OR FILECASE)
358     message(STATUS "FILECASE plugin enabled")
359     add_subdirectory (filecase)
360 else()
361     message(STATUS "${ColorRed}FILECASE plugin disabled due to FILECASE=${FILECASE}${ColorNormal}")
362     install(CODE "
363         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/filecase/plug/filecase.far-plug-wide)
364         " COMPONENT system)
365 endif()
367 if (NOT DEFINED INCSRCH OR INCSRCH)
368     message(STATUS "INCSRCH plugin enabled")
369     add_subdirectory (incsrch)
370 else()
371     message(STATUS "${ColorRed}Building without <INCSRCH> plugin due to INCSRCH=${INCSRCH}${ColorNormal}")
372     install(CODE "
373         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/incsrch/plug/incsrch.far-plug-wide)
374         " COMPONENT system)
375 endif()
377 if (NOT DEFINED INSIDE OR INSIDE)
378     message(STATUS "INSIDE plugin enabled")
379     add_subdirectory (inside)
380 else()
381     message(STATUS "${ColorRed}INSIDE plugin disabled due to INSIDE=${INSIDE}${ColorNormal}")
382     install(CODE "
383         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/inside/plug/inside.far-plug-mb)
384         " COMPONENT system)
385 endif()
387 if (NOT DEFINED MULTIARC OR MULTIARC)
388     message(STATUS "MULTIARC plugin enabled")
389     find_package(PkgConfig REQUIRED)
390     pkg_search_module(LibArchive QUIET libarchive)
391     if(NOT LibArchive_FOUND)
392         message(WARNING "${ColorRed}libarchive not found, multiarc will have weaker archives support. Its recommended to install libarchive-dev and reconfigure far2l.${ColorNormal}")
393     endif()
395     pkg_search_module(PCRE QUIET libpcre)
396     if(NOT PCRE_FOUND)
397         message(WARNING "${ColorRed}libpcre not found, multiarc will have no regexp support in custom archive format descriptions. Install libpcre and reconfigure far2l if you need that functionality.${ColorNormal}")
398     endif()
400     add_subdirectory (multiarc)
401 else()
402     message(STATUS "${ColorRed}MULTIARC plugin disabled due to MULTIARC=${MULTIARC}${ColorNormal}")
403     install(CODE "
404         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/multiarc/plug/multiarc.far-plug-mb)
405         " COMPONENT system)
406 endif()
408 if (NOT DEFINED NETROCKS OR NETROCKS)
409     message(STATUS "NETROCKS plugin enabled")
410     find_package(OpenSSL)
411     if(OPENSSL_FOUND)
412         message(STATUS "OpenSSL found -> enjoy FTPS support in NetRocks")
413     else()
414         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}")
415     endif(OPENSSL_FOUND)
417     find_package(LibSSH 0.5.0)
418     if(LIBSSH_FOUND)
419         message(STATUS "libssh found -> enjoy SFTP support in NetRocks")
420     else()
421         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}")
422     endif(LIBSSH_FOUND)
424     find_package(Libsmbclient)
425     if(LIBSMBCLIENT_FOUND)
426         message(STATUS "libsmbclient found -> enjoy SMB support in NetRocks")
427     else()
428         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}")
429     endif(LIBSMBCLIENT_FOUND)
431     find_package(LibNfs)
432     if(LIBNFS_FOUND)
433         message(STATUS "libnfs found -> enjoy NFS support in NetRocks")
434     else()
435         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}")
436     endif(LIBNFS_FOUND)
438     find_package(LibNEON)
439     if(LIBNEON_FOUND)
440         message(STATUS "libneon found -> enjoy WebDav support in NetRocks")
441     else()
442         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}")
443     endif(LIBNEON_FOUND)
445     add_subdirectory (NetRocks)
446 else()
447     message(STATUS "${ColorRed}NETROCKS plugin disabled due to NETROCKS=${NETROCKS}${ColorNormal}")
448     install(CODE "
449         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/NetRocks/plug/NetRocks.far-plug-wide)
450         " COMPONENT system)
451 endif()
453 if (DEFINED VIRTUAL_PYTHON)
454     message(STATUS "PYTHON plugin with interpreter from virtualenv enabled")
455     add_subdirectory (python)
456     # Copy this explicitly cuz generic copier command excludes 'far2l'
457     install(DIRECTORY "${INSTALL_DIR}/Plugins/python/plug/far2l"
458         DESTINATION "lib/far2l/Plugins/python/plug/" USE_SOURCE_PERMISSIONS
459         COMPONENT base FILES_MATCHING
460         PATTERN "*")
461 else()
462     if (DEFINED PYTHON AND PYTHON)
463         find_package(Python3 COMPONENTS Interpreter Development)
465         if(Python3_FOUND AND Python3_Development_FOUND)
466             message(STATUS "PYTHON plugin enabled")
467             add_subdirectory (python)
468             install(CODE "
469                 execute_process(COMMAND echo Python: preparing virtual environment)
470                 " COMPONENT system)
471             install(CODE "
472                 execute_process(COMMAND ${Python3_EXECUTABLE} -m venv --system-site-packages ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python)
473                 " COMPONENT system)
474             install(CODE "
475                 execute_process(COMMAND echo Python: installing packages)
476                 " COMPONENT system)
477             install(CODE "
478                 execute_process(COMMAND ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python/bin/python -m pip install cffi debugpy)
479                 " COMPONENT system)
481             # Copy this explicitly cuz generic copier command excludes 'far2l'
482             install(DIRECTORY "${INSTALL_DIR}/Plugins/python/plug/far2l"
483                 DESTINATION "lib/far2l/Plugins/python/plug/" USE_SOURCE_PERMISSIONS
484                 COMPONENT base FILES_MATCHING
485                 PATTERN "*")
486         else()
487             message(WARNING "${ColorRed}PYTHON plugin disabled due to missing python3 environment${ColorNormal}")
488         endif ()
490     else()
491         message(STATUS "${ColorRed}PYTHON plugin disabled, use -DPYTHON=yes if you need it${ColorNormal}")
492         install(CODE "
493             execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python.far-plug-wide)
494             " COMPONENT system)
495     endif()
496 endif()
498 if (NOT DEFINED SIMPLEINDENT OR SIMPLEINDENT)
499     message(STATUS "SIMPLEINDENT plugin enabled")
500     add_subdirectory (SimpleIndent)
501 else()
502     message(STATUS "${ColorRed}SIMPLEINDENT plugin disabled due to SIMPLEINDENT=${SIMPLEINDENT}${ColorNormal}")
503     install(CODE "
504         execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/SimpleIndent/plug/SimpleIndent.far-plug-wide)
505         " COMPONENT system)
506 endif()
508 if (NOT DEFINED TMPPANEL OR TMPPANEL)
509     message(STATUS "TMPPANEL plugin enabled")
510     add_subdirectory (tmppanel)
511 else()
512     message(STATUS "${ColorRed}TMPPANEL plugin disabled due to TMPPANEL=${TMPPANEL}${ColorNormal}")
513     install(CODE "
514         execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/tmppanel/plug/tmppanel.far-plug-wide)
515         " COMPONENT system)
516 endif()
518 ##############################
519 # common install directives
521 add_subdirectory (packaging)
523 add_subdirectory(man)
525 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
526     set(FIXUP_SCRIPT packaging/osx/FixupBundle.cmake)
527     configure_file(${FIXUP_SCRIPT}.in ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} @ONLY)
528     install(DIRECTORY ${APP_DIR}/${APP_NAME}.app DESTINATION . USE_SOURCE_PERMISSIONS COMPONENT app EXCLUDE_FROM_ALL)
529     install(SCRIPT ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} COMPONENT app EXCLUDE_FROM_ALL)
530 endif()
532 install(PROGRAMS "${INSTALL_DIR}/${EXECUTABLE_NAME}" DESTINATION "bin" RENAME far2l COMPONENT base)
534 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "lib/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
535     PATTERN "colorer/base" EXCLUDE
536     PATTERN "far2l_gui.so"
537     PATTERN "far2l_ttyx.broker"
538     PATTERN "plug/*.far-plug-*"
539     PATTERN "plug/*.broker"
542 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "share/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
543     PATTERN "${EXECUTABLE_NAME}" EXCLUDE
544     PATTERN "far2ledit" EXCLUDE
545     PATTERN "far2l_*" EXCLUDE
546     PATTERN "*.far-plug-*" EXCLUDE
547     PATTERN "*.broker" EXCLUDE
548     PATTERN "python/plug/python" EXCLUDE
549     PATTERN "*"
552 # setup some symlinks and remove deprecated stuff from previous installation
553 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l/far2l_askpass)
554 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l/far2l_sudoapp)
555 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink far2l ${PROJECT_BINARY_DIR}/far2l/far2ledit)
556 install(FILES "${PROJECT_BINARY_DIR}/far2l/far2l_askpass" DESTINATION "lib/far2l" COMPONENT system)
557 install(FILES "${PROJECT_BINARY_DIR}/far2l/far2l_sudoapp" DESTINATION "lib/far2l" COMPONENT system)
558 install(FILES "${PROJECT_BINARY_DIR}/far2l/far2ledit" DESTINATION "bin" COMPONENT base)
559 install(CODE "
560     execute_process(COMMAND ${CMAKE_COMMAND} -E remove -f \"\${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/objinfo/plug/objinfo.far-plug-mb\")
561     " COMPONENT system)