support full-width/composite characters and true color palette in terminal (#1386)
[far2l.git] / CMakeLists.txt
blobc3e3eb7e95c3c2aad437fde4078cdbe41fc1c31c
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 # just to force reconfigure if packaging/version changed
16 configure_file(${CMAKE_SOURCE_DIR}/packaging/version ${CMAKE_BINARY_DIR}/packaging/version @ONLY)
18 # reconfigure in case .git directory changed to update version correctly
19 IF(EXISTS ${CMAKE_SOURCE_DIR}/.git)
20         set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/.git)
21 endif()
23 file(READ "${CMAKE_SOURCE_DIR}/packaging/version" VERSION)
24 string(REGEX REPLACE "[\r\n\t ]$" "" VERSION "${VERSION}")
25 string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
26 string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
27 string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.(.*)" "\\1" VERSION_PATCH "${VERSION}")
29 if("${VERSION_MAJOR}" STREQUAL "" OR "${VERSION_MAJOR}" STREQUAL "${VERSION}"
30  OR "${VERSION_MINOR}" STREQUAL "" OR "${VERSION_MINOR}" STREQUAL "${VERSION}"
31  OR "${VERSION_PATCH}" STREQUAL "" OR "${VERSION_PATCH}" STREQUAL "${VERSION}")
32         message(FATAL_ERROR "${ColorRed}packaging/version is corrupted, please write actual X.Y.Z version into it.${ColorNormal}")
33 endif()
35 find_package(Git)
37 if(GIT_FOUND)
38         execute_process(COMMAND "${GIT_EXECUTABLE}" describe --tag
39                         WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
40                         OUTPUT_VARIABLE GIT_TAG
41                         OUTPUT_STRIP_TRAILING_WHITESPACE)
42 endif()
44 if(NOT "${GIT_TAG}" STREQUAL "v_${VERSION}")
45         if(GIT_FOUND)
46                 execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
47                                 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
48                                 OUTPUT_VARIABLE GIT_HASH
49                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
50         endif()
51         if(NOT "${GIT_HASH}" STREQUAL "")
52                 message(STATUS "git hash: ${GIT_HASH}")
53                 set(VERSION_PATCH "${VERSION_PATCH}-${GIT_HASH}")
54         else()
55                 message(WARNING "git information unavailable, assuming its a build from v_${VERSION}")
56         endif()
57 endif()
59 set(VERSION_PATCH "${VERSION_PATCH}-beta")
61 set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
63 set(CMAKE_CXX_STANDARD_REQUIRED ON)
64 set(CMAKE_CXX_STANDARD 11)
65 set(CMAKE_CXX_EXTENSIONS OFF)
67 if(NOT CMAKE_BUILD_TYPE)
68    set(CMAKE_BUILD_TYPE "Release")
69 endif()
71 message(STATUS "Build Type: ${CMAKE_BUILD_TYPE} Version: ${VERSION}")
73 if(NOT DEFINED CMAKE_INSTALL_PREFIX)
74    if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
75       set(CMAKE_INSTALL_PREFIX "/usr/local")
76    elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
77       set(CMAKE_INSTALL_PREFIX "/usr/local")
78    else()
79       set(CMAKE_INSTALL_PREFIX "/usr")
80    endif()
81 endif()
83 ##############################
85 if (NOT DEFINED USEWX)
86         set(USEWX "YES")
87 endif()
89 # EACP disabled by default for now as FAR's GetCodePageInfo rejects all multibyte charsets due to BUGBUG.
90 # Uncomment EACP-stuff here when that will be fixed. See https://github.com/elfmz/far2l/issues/1179
91 #if (NOT DEFINED EACP)
92 #       set(EACP "YES")
93 #endif()
95 if (NOT DEFINED LEGACY)
96         # TODO: default it to NO  somewhere in 2022, after all obsolete settings
97         # registry-upgrade-to-ini stuff will be safe to remove
98         set(LEGACY "YES")
99 elseif(FARFTP)
100         set(LEGACY "YES")
101         message(STATUS "Force-enable LEGACY due to enabled FARFTP")
102 endif()
104 #if (NOT EACP)
105 #       message(STATUS "${ColorRed}Building without East Asian codepages support due to EACP=${EACP}${ColorNormal}")
106 #endif()
108 if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
109     set(M4_NAME gm4)
110 else()
111     set(M4_NAME m4)
112 endif()
114 find_program(M4_PROG NAMES ${M4_NAME})
116 if(NOT M4_PROG)
117     message(FATAL_ERROR "${ColorRed}${M4_NAME} not found - please install it${ColorNormal}")
118 endif ()
119 set(M4 ${M4_PROG} -P "-DARCH=${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR}" "-DMAJOR=${VERSION_MAJOR}" "-DMINOR=${VERSION_MINOR}" "-DPATCH=${VERSION_PATCH}")
121 # set(RM rm) actually not needed: use $(CMAKE_COMMAND) -E remove
122 find_program (GAWK NAMES gawk)
123 if(NOT GAWK)
124   message(FATAL_ERROR "${ColorRed}gawk not found - please install it${ColorNormal}")
125 endif ()
127 if(${CMAKE_VERSION} VERSION_LESS "3.1.0")
128     message("Please consider to switch to newer CMake")
129         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
130 endif()
132 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
133 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c99 -fPIC -Wno-unused-function -D_FILE_OFFSET_BITS=64") #  -fsanitize=address
134 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O2")
135 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O2")
136 set(TOOLS_DIR ${CMAKE_BINARY_DIR}/tools)
138 if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
139         set(APP_DIR ${CMAKE_BINARY_DIR}/install)
140         set(INSTALL_DIR ${APP_DIR}/${APP_NAME}.app/Contents/MacOS)
141         set(EXECUTABLE_NAME ${APP_NAME})
143 else()
144         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
145         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
146         set(INSTALL_DIR ${CMAKE_BINARY_DIR}/install)
147         set(EXECUTABLE_NAME far2l)
149         if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
150                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--gc-sections")
151                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--gc-sections")
152         endif()
153 endif()
155 if (CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
156   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
157   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=600")
158   message(STATUS "Running under cygwin, wow!")
159 endif()
161 set(CMAKE_CXX_VISIBILITY_PRESET hidden)
162 set(CMAKE_C_VISIBILITY_PRESET hidden)
164 if (LEGACY)
165         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWINPORT_REGISTRY")
166         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPORT_REGISTRY")
167         message(STATUS "Enabling registry support due to enabled LEGACY")
168 else()
169         message(STATUS "LEGACY is not enabled, your old registry settings will be forgotten, if any")
170 endif()
172 if(CMAKE_VERSION VERSION_GREATER "3.3")
173   cmake_policy(SET CMP0063 NEW)
174   cmake_policy(SET CMP0057 NEW)
175 endif()
177 include_directories(utils/include)
179 add_subdirectory (farlng)
180 add_subdirectory (WinPort)
181 add_subdirectory (utils)
182 add_subdirectory (far2l)
183 add_dependencies (far2l farlng)
185 set_target_properties(farlng
186   PROPERTIES
187     RUNTIME_OUTPUT_DIRECTORY "${TOOLS_DIR}"
190 if (NOT ${USEWX})
191         message(STATUS "Building without GUI/wxWidgets backend due to USEWX=${USEWX}")
192 else()
193         message(STATUS "Building with GUI/wxWidgets backend")
194         add_subdirectory(WinPort/src/Backend/WX)
195 endif()
197 if (NOT DEFINED TTYX)
198         find_package(X11)
199         if(X11_FOUND)
200                 message(STATUS "Building with TTY X11 extensions due to X11 found")
201                 add_subdirectory(WinPort/src/Backend/TTY/TTYX)
202         else()
203                 message(STATUS "Building without TTY X11 extensions due to X11 not found")
204         endif()
205 elseif (TTYX)
206         message(STATUS "Building with TTY X11 extensions due to TTYX=${TTYX}")
207         add_subdirectory(WinPort/src/Backend/TTY/TTYX)
208 else()
209         message(STATUS "Building without TTY X11 extensions due to TTYX=${TTYX}")
210 endif()
213 ##############################
214 # plugins directives
216 if (NOT DEFINED ALIGN OR ALIGN)
217         message(STATUS "ALIGN plugin enabled")
218         add_subdirectory (align)
219 else()
220         message(STATUS "${ColorRed}ALIGN plugin disabled due to ALIGN=${ALIGN}${ColorNormal}")
221         install(CODE "
222                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/align/plug/align.far-plug-wide)
223                 " COMPONENT system)
224 endif()
226 if (NOT DEFINED AUTOWRAP OR AUTOWRAP)
227         message(STATUS "AUTOWRAP plugin enabled")
228         add_subdirectory (autowrap)
229 else()
230         message(STATUS "${ColorRed}AUTOWRAP plugin disabled due to AUTOWRAP=${AUTOWRAP}${ColorNormal}")
231         install(CODE "
232                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/autowrap/plug/autowrap.far-plug-wide)
233                 " COMPONENT system)
234 endif()
236 if (NOT DEFINED CALC OR CALC)
237         message(STATUS "CALC plugin enabled")
238         add_subdirectory (calc)
239 else()
240         message(STATUS "${ColorRed}CALC plugin disabled due to CALC=${CALC}${ColorNormal}")
241         install(CODE "
242                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/calc/plug/calc.far-plug-wide)
243                 " COMPONENT system)
244 endif()
246 if (NOT DEFINED COLORER OR COLORER)
247         message(STATUS "COLORER plugin enabled")
248         add_subdirectory (colorer)
249 else()
250         message(STATUS "${ColorRed}COLORER plugin disabled due to COLORER=${COLORER}${ColorNormal}")
251         install(CODE "
252                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/colorer/plug/colorer.far-plug-wide)
253                 " COMPONENT system)
254 endif()
256 if (NOT DEFINED COMPARE OR COMPARE)
257         message(STATUS "COMPARE plugin enabled")
258         add_subdirectory (compare)
259 else()
260         message(STATUS "${ColorRed}COMPARE plugin disabled due to COMPARE=${COMPARE}${ColorNormal}")
261         install(CODE "
262                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/compare/plug/compare.far-plug-wide)
263                 " COMPONENT system)
264 endif()
266 if (NOT DEFINED DRAWLINE OR DRAWLINE)
267         message(STATUS "DRAWLINE plugin enabled")
268         add_subdirectory (drawline)
269 else()
270         message(STATUS "${ColorRed}DRAWLINE plugin disabled due to DRAWLINE=${DRAWLINE}${ColorNormal}")
271         install(CODE "
272                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/drawline/plug/drawline.far-plug-wide)
273                 " COMPONENT system)
274 endif()
276 if (NOT DEFINED EDITCASE OR EDITCASE)
277         message(STATUS "EDITCASE plugin enabled")
278         add_subdirectory (editcase)
279 else()
280         message(STATUS "${ColorRed}EDITCASE plugin disabled due to EDITCASE=${EDITCASE}${ColorNormal}")
281         install(CODE "
282                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editcase/plug/editcase.far-plug-wide)
283                 " COMPONENT system)
284 endif()
286 if (NOT DEFINED EDITORCOMP OR EDITORCOMP)
287         message(STATUS "EDITORCOMP plugin enabled")
288         add_subdirectory (editorcomp)
289 else()
290         message(STATUS "${ColorRed}EDITORCOMP plugin disabled due to EDITORCOMP=${EDITORCOMP}${ColorNormal}")
291         install(CODE "
292                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/editorcomp/plug/editorcomp.far-plug-wide)
293                 " COMPONENT system)
294 endif()
296 if (DEFINED FARFTP AND FARFTP)
297         message(STATUS "FARFTP plugin enabled (obsolete)")
298         add_subdirectory (FARStdlib)
299         add_subdirectory (farftp)
300 else()
301         install(CODE "
302                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/farftp/plug/farftp.far-plug-mb)
303                 " COMPONENT system)
304 endif()
306 if (NOT DEFINED FILECASE OR FILECASE)
307         message(STATUS "FILECASE plugin enabled")
308         add_subdirectory (filecase)
309 else()
310         message(STATUS "${ColorRed}FILECASE plugin disabled due to FILECASE=${FILECASE}${ColorNormal}")
311         install(CODE "
312                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/filecase/plug/filecase.far-plug-wide)
313                 " COMPONENT system)
314 endif()
316 if (NOT DEFINED INCSRCH OR INCSRCH)
317         message(STATUS "INCSRCH plugin enabled")
318         add_subdirectory (incsrch)
319 else()
320         message(STATUS "${ColorRed}Building without <INCSRCH> plugin due to INCSRCH=${INCSRCH}${ColorNormal}")
321         install(CODE "
322                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/incsrch/plug/incsrch.far-plug-wide)
323                 " COMPONENT system)
324 endif()
326 if (NOT DEFINED INSIDE OR INSIDE)
327         message(STATUS "INSIDE plugin enabled")
328         add_subdirectory (inside)
329 else()
330         message(STATUS "${ColorRed}INSIDE plugin disabled due to INSIDE=${INSIDE}${ColorNormal}")
331         install(CODE "
332                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/inside/plug/inside.far-plug-mb)
333                 " COMPONENT system)
334 endif()
336 if (NOT DEFINED MULTIARC OR MULTIARC)
337         message(STATUS "MULTIARC plugin enabled")
338         # workaround for brew's/macports' libarchive
339         if(IS_DIRECTORY "/usr/local/opt/libarchive/include")
340                 set(LibArchive_INCLUDE_DIR "/usr/local/opt/libarchive/include")
341                 set(LibArchive_LIBRARY "/usr/local/opt/libarchive/lib/libarchive.dylib")
342         elseif(EXISTS "/opt/local/lib/libarchive.dylib")
343                 set(LibArchive_LIBRARY "/opt/local/lib/libarchive.dylib")
344         endif()
346         find_package(LibArchive)
347         if(NOT LibArchive_FOUND)
348                 message(WARNING "${ColorRed}libarchive not found, multiarc will have weaker archives support. Its recommended to install libarchive-dev and reconfigure far2l.${ColorNormal}")
349         endif()
351         find_package(PCRE)
352         if(NOT PCRE_FOUND)
353                 message(WARNING "${ColorRed}libpcre not found, multiarc will have no custom archives support. Install libpcre and reconfigure far2l if you need that functionality.${ColorNormal}")
354         endif()
356         add_subdirectory (multiarc)
357 else()
358         message(STATUS "${ColorRed}MULTIARC plugin disabled due to MULTIARC=${MULTIARC}${ColorNormal}")
359         install(CODE "
360                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/multiarc/plug/multiarc.far-plug-mb)
361                 " COMPONENT system)
362 endif()
364 if (NOT DEFINED NETROCKS OR NETROCKS)
365         message(STATUS "NETROCKS plugin enabled")
366         if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
367                 # workaround for brew/macports vs system openssl conflicts
368                 if(IS_DIRECTORY "/usr/local/opt/openssl@1.1/include" AND IS_DIRECTORY "/usr/local/opt/openssl@1.1/lib")
369                         set(OPENSSL_LIBRARIES "/usr/local/opt/openssl@1.1/lib/libcrypto.dylib;/usr/local/opt/openssl@1.1/lib/libssl.dylib")
370                         set(OPENSSL_INCLUDE_DIRS "/usr/local/opt/openssl@1.1/include")
371                 elseif(EXISTS "/opt/local/lib/libssl.dylib" AND IS_DIRECTORY "/opt/local/include/openssl")
372                         set(OPENSSL_LIBRARIES "/opt/local//lib/libcrypto.dylib;/opt/local/lib/libssl.dylib")
373                         set(OPENSSL_INCLUDE_DIRS "/opt/local/include")
374                 endif()
375         endif()
377         find_package(OpenSSL)
378         if(OPENSSL_FOUND)
379                 message(STATUS "OpenSSL found -> enjoy FTPS support in NetRocks")
380         else()
381                 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}")
382         endif(OPENSSL_FOUND)
384         find_package(LibSSH 0.5.0)
385         if(LIBSSH_FOUND)
386                 message(STATUS "libssh found -> enjoy SFTP support in NetRocks")
387         else()
388                 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}")
389         endif(LIBSSH_FOUND)
391         find_package(Libsmbclient)
392         if(LIBSMBCLIENT_FOUND)
393                 message(STATUS "libsmbclient found -> enjoy SMB support in NetRocks")
394         else()
395                 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}")
396         endif(LIBSMBCLIENT_FOUND)
398         find_package(LibNfs)
399         if(LIBNFS_FOUND)
400                 message(STATUS "libnfs found -> enjoy NFS support in NetRocks")
401         else()
402                 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}")
403         endif(LIBNFS_FOUND)
405         find_package(LibNEON)
406         if(LIBNEON_FOUND)
407                 message(STATUS "libneon found -> enjoy WebDav support in NetRocks")
408         else()
409                 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}")
410         endif(LIBNEON_FOUND)
412         add_subdirectory (NetRocks)
413 else()
414         message(STATUS "${ColorRed}NETROCKS plugin disabled due to NETROCKS=${NETROCKS}${ColorNormal}")
415         install(CODE "
416                 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/NetRocks/plug/NetRocks.far-plug-wide)
417                 " COMPONENT system)
418 endif()
420 if (DEFINED PYTHON AND PYTHON)
421         find_package(PythonLibs 3.0)
423         if(PYTHONLIBS_FOUND)
424                 find_program (PYTHON3 NAMES python3)
425                 if(PYTHON3)
426                         message(STATUS "PYTHON plugin enabled")
427                         add_subdirectory (python)
428                 else()
429                         message(WARNING "${ColorRed}PYTHON plugin disabled due to missing python3 ${ColorNormal}")
430                 endif ()
431         else()
432                 message(WARNING "${ColorRed}PYTHON plugin disabled due to Python libraries not found${ColorNormal}")
433         endif()
435         install(CODE "
436                 execute_process(COMMAND echo Python: preparing virtual environment)
437                 " COMPONENT system)
438         install(CODE "
439                 execute_process(COMMAND ${PYTHON3} -m venv --system-site-packages ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python)
440                 " COMPONENT system)
441         install(CODE "
442                 execute_process(COMMAND echo Python: installing packages)
443                 " COMPONENT system)
444         install(CODE "
445                 execute_process(COMMAND ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python/bin/python -m pip install cffi debugpy)
446                 " COMPONENT system)
448         # Copy this explicitly cuz generic copier command excludes 'far2l'
449         install(DIRECTORY "${INSTALL_DIR}/Plugins/python/plug/far2l"
450                 DESTINATION "share/far2l/Plugins/python/plug/" USE_SOURCE_PERMISSIONS
451                 COMPONENT base FILES_MATCHING
452                 PATTERN "*")
454 else()
455         message(STATUS "${ColorRed}PYTHON plugin disabled, use -DPYTHON=yes if you need it${ColorNormal}")
456         install(CODE "
457                 execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/python/plug/python.far-plug-wide)
458                 " COMPONENT system)
459 endif()
461 if (NOT DEFINED SIMPLEINDENT OR SIMPLEINDENT)
462         message(STATUS "SIMPLEINDENT plugin enabled")
463         add_subdirectory (SimpleIndent)
464 else()
465         message(STATUS "${ColorRed}SIMPLEINDENT plugin disabled due to SIMPLEINDENT=${SIMPLEINDENT}${ColorNormal}")
466         install(CODE "
467                 execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/SimpleIndent/plug/SimpleIndent.far-plug-wide)
468                 " COMPONENT system)
469 endif()
471 if (NOT DEFINED TMPPANEL OR TMPPANEL)
472         message(STATUS "TMPPANEL plugin enabled")
473         add_subdirectory (tmppanel)
474 else()
475         message(STATUS "${ColorRed}TMPPANEL plugin disabled due to TMPPANEL=${TMPPANEL}${ColorNormal}")
476         install(CODE "
477                 execute_process(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/tmppanel/plug/tmppanel.far-plug-wide)
478                 " COMPONENT system)
479 endif()
481 ##############################
482 # common install directives
484 add_subdirectory (packaging)
486 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
487         set(FIXUP_SCRIPT packaging/osx/FixupBundle.cmake)
488         configure_file(${FIXUP_SCRIPT} ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} @ONLY)
489         install(DIRECTORY ${APP_DIR}/${APP_NAME}.app DESTINATION . USE_SOURCE_PERMISSIONS COMPONENT app EXCLUDE_FROM_ALL)
490         install(SCRIPT ${PROJECT_BINARY_DIR}/${FIXUP_SCRIPT} COMPONENT app EXCLUDE_FROM_ALL)
491 endif()
493 install(PROGRAMS "${INSTALL_DIR}/${EXECUTABLE_NAME}" DESTINATION "bin" RENAME far2l COMPONENT base)
495 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "lib/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
496         PATTERN "colorer/base" EXCLUDE
497         PATTERN "far2l_gui.so"
498         PATTERN "far2l_ttyx.broker"
499         PATTERN "plug/*.far-plug-*"
500         PATTERN "plug/*.broker")
502 install(DIRECTORY "${INSTALL_DIR}/" DESTINATION "share/far2l" USE_SOURCE_PERMISSIONS COMPONENT base FILES_MATCHING
503         PATTERN "${EXECUTABLE_NAME}" EXCLUDE
504         PATTERN "far2l_*" EXCLUDE
505         PATTERN "*.far-plug-*" EXCLUDE
506         PATTERN "*.broker" EXCLUDE
507         PATTERN "python/plug/python" EXCLUDE
508         PATTERN "*")
510 # setup some symlinks and remove deprecated stuff from previous installation
511 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l_askpass)
512 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin/far2l ${PROJECT_BINARY_DIR}/far2l_sudoapp)
513 install(FILES "${PROJECT_BINARY_DIR}/far2l_askpass" DESTINATION "lib/far2l" COMPONENT system)
514 install(FILES "${PROJECT_BINARY_DIR}/far2l_sudoapp" DESTINATION "lib/far2l" COMPONENT system)
515 install(CODE "
516         execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f \"\${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/objinfo/plug/objinfo.far-plug-mb\")
517         " COMPONENT system)