CMakeLists.txt 87 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750
  1. #[[
  2. Author: Dave Register
  3. DEB config from: antonm - Anton Martchukov <anton@martchukov.com>
  4. Update: sethdart (Jean-Eudes Onfray) with parts from balp (Anders Arnholm)
  5. #]]
  6. #[[
  7. Copyright (C) 2010 by David S. Register
  8. This program is free software; you can redistribute it and/or modify
  9. it under the terms of the GNU General Public License as published by
  10. the Free Software Foundation; either version 2 of the License, or
  11. (at your option) any later version.
  12. This program is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. GNU General Public License for more details.
  16. You should have received a copy of the GNU General Public License
  17. along with this program; if not, write to the
  18. Free Software Foundation, Inc.,
  19. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  20. #]]
  21. #[[
  22. TODO:
  23. - Profiling opt
  24. USE_GLU_TESS
  25. USE_GLU_DLL
  26. #]]
  27. cmake_minimum_required(VERSION 3.15.0)
  28. cmake_policy(SET CMP0043 NEW)
  29. cmake_policy(SET CMP0025 NEW)
  30. if (POLICY CMP0057)
  31. cmake_policy(SET CMP0057 NEW)
  32. endif ()
  33. if (POLICY CMP0077)
  34. cmake_policy(SET CMP0077 NEW)
  35. endif ()
  36. # Prefer libGL.so to libOpenGL.so, see CMP0072
  37. set(OpenGL_GL_PREFERENCE "LEGACY")
  38. if ("${OCPN_TARGET_TUPLE}" MATCHES "Android")
  39. message(STATUS "Building for wxQt-Android")
  40. set(CMAKE_TOOLCHAIN_FILE buildandroid/build_android.cmake)
  41. set(QT_ANDROID "ON")
  42. if ("${OCPN_TARGET_TUPLE}" MATCHES "Android-arm64")
  43. add_definitions("-DANDROID_ARM64")
  44. else ()
  45. add_definitions("-DANDROID_ARMHF")
  46. endif ()
  47. endif ()
  48. if (APPLE)
  49. set(PACKAGE_NAME OpenCPN)
  50. string(REPLACE ";" "," CMAKE_OSX_ARCHITECTURES_COMMA_SEP "${CMAKE_OSX_ARCHITECTURES}")
  51. elseif (QT_ANDROID)
  52. set(PACKAGE_NAME gorp)
  53. else ()
  54. set(PACKAGE_NAME opencpn)
  55. endif ()
  56. project(OpenCPN)
  57. if (NOT DEFINED OCPN_VERBOSE OR OCPN_VERBOSE)
  58. set(CMAKE_VERBOSE_MAKEFILE ON)
  59. endif ()
  60. message(STATUS "cmake version: ${CMAKE_VERSION}")
  61. # Locations where cmake looks for cmake modules.
  62. set(
  63. CMAKE_MODULE_PATH
  64. ${CMAKE_SOURCE_DIR}/build ${CMAKE_SOURCE_DIR}/ ${CMAKE_SOURCE_DIR}/cmake
  65. )
  66. include(FindPkgConfig)
  67. include(CMakeDependentOption)
  68. include(CheckSymbolExists)
  69. #
  70. # Options
  71. #
  72. macro (BUNDLE_DOCS_OPT onoff)
  73. option(OCPN_BUNDLE_DOCS "Include documentation in package" ${onoff})
  74. endmacro ()
  75. macro (BUNDLE_TCDATA_OPT onoff)
  76. option(OCPN_BUNDLE_TCDATA "Include tide/current harmonics data in package"
  77. ${onoff}
  78. )
  79. endmacro ()
  80. macro (BUNDLE_GSHHS_OPT onoff)
  81. option(OCPN_BUNDLE_GSHHS "Bundle minimal GSHHS data files" ${onoff})
  82. endmacro ()
  83. # If on Windows or Apple, build the monolithic package, to override use a non-
  84. # sense values from the commandline (due to cmake inability to distinguish
  85. # between not set and set to FALSE): cmake -DOCPN_BUNDLE_DOCS=BLAH
  86. # -DOCPN_BUNDLE_TCDATA=BLAH
  87. # Bundle tcdata and gshhs by default also on linux, to keep the defaults close
  88. # to the official Debian package.
  89. bundle_gshhs_opt("ON")
  90. bundle_tcdata_opt("ON")
  91. if (APPLE OR WIN32)
  92. bundle_docs_opt("ON")
  93. else ()
  94. bundle_docs_opt("OFF")
  95. endif ()
  96. option(OCPN_VERBOSE "Make verbose builds" ON)
  97. option(OCPN_PEDANTIC "Enable more compiler warnings" OFF)
  98. set(OCPN_PACKAGE_RELEASE
  99. "1" CACHE STRING "Package release number"
  100. )
  101. option(OCPN_USE_GL "Enable OpenGL support" ON)
  102. option(OCPN_USE_GLES_SHIM "Enable GLESv1 Shim library" OFF)
  103. option(OCPN_USE_UDEV_PORTS "Use udev to enumerate serial ports" ON)
  104. option(OCPN_USE_SYSFS_PORTS "Use sysfs to enumerate serial ports" OFF)
  105. option(OCPN_ENABLE_MDNS_DEBUG "Enable mDNS debug output" OFF)
  106. set(OCPN_TARGET_TUPLE "" CACHE STRING
  107. "List of target;version;arch like flatpak;20.08;aarch64 [\"\"]"
  108. )
  109. if (MSVC OR MINGW)
  110. option(OCPN_USE_CRASHREPORT "Enable crash reporting" ON)
  111. else ()
  112. set(OCPN_USE_CRASHREPORT FALSE)
  113. endif ()
  114. if (WIN32 OR APPLE OR QT_ANDROID)
  115. set(PA_DEFAULT "OFF")
  116. else ()
  117. set(PA_DEFAULT "ON")
  118. endif ()
  119. option(OCPN_ENABLE_PORTAUDIO "Use portaudio(3) to play sounds if available"
  120. ${PA_DEFAULT}
  121. )
  122. cmake_dependent_option(
  123. OCPN_ENABLE_SNDFILE "Use libsndfile for portaudio if available." ON
  124. "OCPN_ENABLE_PORTAUDIO" ON
  125. )
  126. option(OCPN_USE_GARMINHOST "Enable Garmin Host Mode support" ON)
  127. if (QT_ANDROID)
  128. set(OCPN_BUILD_TEST OFF)
  129. else ()
  130. option(OCPN_BUILD_TEST "Enable test subproject build" ON)
  131. endif ()
  132. execute_process(
  133. COMMAND "ip" "address" "show" "vcan0"
  134. WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  135. OUTPUT_VARIABLE _VCAN_STDOUT
  136. RESULT_VARIABLE _VCAN_RESULT
  137. OUTPUT_STRIP_TRAILING_WHITESPACE
  138. )
  139. if ("${_VCAN_RESULT}" EQUAL 0)
  140. set(ENABLE_VCAN_TESTS ON)
  141. message(STATUS "tests using vcan0 are available.")
  142. else ()
  143. set(ENABLE_VCAN_TESTS OFF)
  144. message(STATUS "tests using vcan0 are NOT available: \"${_VCAN_STDERR}\"")
  145. endif ()
  146. set(OCPN_WXWIDGETS_FORCE_VERSION
  147. CACHE STRING "Force usage of a specific wxWidgets version."
  148. )
  149. set(OCPN_WXWIDGETS_OPTIONS CACHE STRING
  150. "Additional flags to wxWidgets_CONFIG_OPTIONS"
  151. )
  152. if (WIN32 AND NOT UNIX)
  153. option(OCPN_BUNDLE_WXDLLS "Bundle the prebuilt WX DLLs" ON)
  154. option(OCPN_BUNDLE_VCDLLS "Bundle the VC redistributable libraries" ON)
  155. option(BUNDLE_LIBARCHIVEDLLS
  156. "Bundle the prebuilt LibArchive and LibLZMA DLLs" ON
  157. )
  158. endif ()
  159. option(OCPN_ENABLE_CLANG_TIDY "Add clang-tidy automatically to builds" OFF)
  160. set(ENABLE_SANITIZER "none" CACHE STRING "Add clang sanitizer to the build")
  161. option(OCPN_ENABLE_CPPCHECK "Add cppcheck automatically to builds" OFF)
  162. if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  163. set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
  164. "Choose type of build: None Debug Release RelWithDebInfo MinSizeRel."
  165. FORCE
  166. )
  167. # Set the possible values of build type for cmake-gui
  168. set_property(
  169. CACHE CMAKE_BUILD_TYPE
  170. PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo"
  171. )
  172. endif ()
  173. if (APPLE)
  174. option(OCPN_USE_LIBCPP "Use libc++ instead of libstdc++ on macOS" ON)
  175. option(
  176. OCPN_USE_DEPS_BUNDLE
  177. "Use prebuilt dependency bundle instead of searching for libraries on macOS"
  178. OFF
  179. )
  180. if (NOT OCPN_DEPS_BUNDLE_PATH)
  181. set(OCPN_DEPS_BUNDLE_PATH "/usr/local")
  182. endif ()
  183. endif ()
  184. option(OCPN_USE_EXTERN_CURL "Use external libcurl" OFF)
  185. if (NOT CMAKE_INSTALL_PREFIX)
  186. set(CMAKE_INSTALL_PREFIX ${TENTATIVE_PREFIX})
  187. endif ()
  188. if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
  189. set(BUNDLED_LIBS_DEFAULT "ON")
  190. else ()
  191. set(BUNDLED_LIBS_DEFAULT "OFF")
  192. endif ()
  193. set(OCPN_USE_BUNDLED_LIBS ${BUNDLED_LIBS_DEFAULT} CACHE STRING
  194. "Use bundled libraries instead of system's [ON, OFF or comma-sep list]"
  195. )
  196. set(OCPN_RELEASE "" CACHE STRING
  197. "Hardcoded value for build number when using OCPN_CI_BUILD"
  198. )
  199. option(OCPN_USE_NEWSERIAL "Use new serial communication implementation" ON)
  200. option(OCPN_USE_CURL "Use Curl libraries" ON)
  201. option(OCPN_USE_SVG "Use SVG graphics via wxSVG or wxBitmapBundle" ON)
  202. option(OCPN_USE_WEBVIEW "Use wxWidget's webview addon if available" ON)
  203. option(OCPN_USE_LZMA "Use LZMA for chart compression" ON)
  204. option(OCPN_CI_BUILD "Use CI build versioning rules" OFF)
  205. option(OCPN_USE_SYSTEM_LIBARCHIVE
  206. "Use the libarchive version provided by the system on MacOS" ON
  207. )
  208. add_definitions(-D__OCPN_USE_GLEW__)
  209. if (WIN32)
  210. set(cmd_snd_default OFF)
  211. else ()
  212. set(cmd_snd_default ON)
  213. endif ()
  214. option(OCPN_ENABLE_SYSTEM_CMD_SOUND
  215. "Use aplay(1), afplay(1) etc. to play sounds if available"
  216. ${cmd_snd_default}
  217. )
  218. set(OCPN_SOUND_CMD "" CACHE STRING
  219. "Hardcoded value for CLI command used in SystemCmdSound backend"
  220. )
  221. if (UNIX AND NOT APPLE AND NOT QT_ANDROID)
  222. set(LINUX "1")
  223. endif ()
  224. if (QT_ANDROID)
  225. set(OCPN_NEW_SERIAL OFF)
  226. set(OCPN_USE_NEWSERIAL OFF)
  227. set(OCPN_USE_CURL ON)
  228. set(OCPN_USE_LZMA OFF)
  229. endif ()
  230. # Check if a given library should use the bundled source
  231. macro (USE_BUNDLED_LIB _result library)
  232. if ("${OCPN_USE_BUNDLED_LIBS}" STREQUAL "")
  233. set(OCPN_USE_BUNDLED_LIBS "ON")
  234. endif ()
  235. if (${OCPN_USE_BUNDLED_LIBS} STREQUAL "OFF")
  236. set(${_result} "OFF")
  237. elseif (${OCPN_USE_BUNDLED_LIBS} STREQUAL "ON")
  238. set(${_result} "ON")
  239. elseif (",${OCPN_USE_BUNDLED_LIBS}," MATCHES ",${library},")
  240. set(${_result} "ON")
  241. else ()
  242. set(${_result} "OFF")
  243. endif ()
  244. endmacro ()
  245. #
  246. # Language, compiler and static checkers setup
  247. #
  248. include(GetArch)
  249. getarch()
  250. message(STATUS "*** Host Build Architecture is ${ARCH}")
  251. set(CMAKE_CXX_STANDARD 17)
  252. message(STATUS "Setting C++17 standard via cmake standard mechanism")
  253. set(CMAKE_CXX_VISIBILITY_PRESET=hidden)
  254. if (NOT MSVC)
  255. set(OBJ_VISIBILITY "-fvisibility=hidden")
  256. endif ()
  257. if (OCPN_ENABLE_CLANG_TIDY)
  258. find_program(
  259. CLANG_TIDY_EXE
  260. NAMES "clang-tidy"
  261. PATHS /usr/local/opt/llvm/bin
  262. )
  263. if (CLANG_TIDY_EXE)
  264. message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}")
  265. # For more, see http://clang.llvm.org/extra/clang-tidy/
  266. # set(CLANG_TIDY_CHECKS "-*,modernize-*")
  267. set(CLANG_TIDY_CHECKS "-*,performance-*")
  268. set(CMAKE_CXX_CLANG_TIDY
  269. "${CLANG_TIDY_EXE};-checks=${CLANG_TIDY_CHECKS};-header-filter='${CMAKE_SOURCE_DIR}/*'"
  270. CACHE STRING "" FORCE
  271. )
  272. else ()
  273. message(AUTHOR_WARNING "clang-tidy not found!")
  274. set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) # delete it
  275. endif ()
  276. endif ()
  277. # Add support for address etc sanitizers, part 1/2 (other half after
  278. # ADD_EXECUTABLE)
  279. set_property(
  280. CACHE ENABLE_SANITIZER
  281. PROPERTY STRINGS none address memory thread undefined
  282. )
  283. if (NOT "${ENABLE_SANITIZER}" MATCHES "none")
  284. add_compile_options(-fsanitize=${ENABLE_SANITIZER})
  285. endif ()
  286. if (OCPN_ENABLE_CPPCHECK)
  287. find_program(CPPCHECK_EXECUTABLE NAMES "cppcheck")
  288. set(CMAKE_CXX_CPPCHECK ${CPPCHECK_EXECUTABLE})
  289. endif ()
  290. # ADD_COMPILE_OPTIONS( "-Wall" "-ansi" "-pedantic" "-Wno-variadic-macros" )
  291. # TODO: Should we use -fno-stack-protector IF NOT DEBUGGING CFLAGS="-O2
  292. # -march=native"
  293. if (NOT WIN32 AND NOT APPLE)
  294. add_compile_options("-Wall")
  295. if (NOT OCPN_PEDANTIC)
  296. add_compile_options(
  297. "-Wno-unused" "-fexceptions" "-rdynamic" "-fno-strict-aliasing"
  298. "-Wno-deprecated-declarations"
  299. )
  300. endif ()
  301. if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang|GNU")
  302. if (CMAKE_BUILD_TYPE MATCHES "Debug")
  303. string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0")
  304. add_compile_options("-O0")
  305. endif ()
  306. endif ()
  307. add_definitions(" -DPREFIX=\\\"${CMAKE_INSTALL_PREFIX}\\\"")
  308. # profiling with gprof ADD_COMPILE_OPTIONS( -pg )
  309. # SET(CMAKE_EXE_LINKER_FLAGS -pg)
  310. # profiling with gcov ADD_COMPILE_OPTIONS( "-fprofile-arcs -ftest- # coverage" )
  311. endif ()
  312. if (APPLE)
  313. add_compile_options("-Wall")
  314. if (NOT OCPN_PEDANTIC)
  315. add_compile_options(
  316. "-Wno-unused"
  317. "-fexceptions"
  318. "-Wno-overloaded-virtual"
  319. "-fno-strict-aliasing"
  320. "-Wno-deprecated"
  321. "-Wno-deprecated-declarations"
  322. "-Wno-unknown-pragmas"
  323. "-Wno-unknown-warning-option"
  324. "-D_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_"
  325. )
  326. endif ()
  327. endif ()
  328. if (APPLE)
  329. set(CMAKE_C_FLAGS "-O2 -arch ${ARCH}")
  330. set(CMAKE_C_FLAGS_DEBUG "-g -O0 -arch ${ARCH}")
  331. set(CMAKE_C_FLAGS_MINSIZEREL "-O2 -arch ${ARCH}")
  332. set(CMAKE_C_FLAGS_RELEASE "-O3 -arch ${ARCH}")
  333. set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -O3 -arch ${ARCH}")
  334. if (OCPN_USE_LIBCPP)
  335. set(OCPN_LIBCPP "-stdlib=libc++")
  336. endif ()
  337. set(CMAKE_CXX_FLAGS "-O2 ${OCPN_LIBCPP} -arch ${ARCH}")
  338. set(CMAKE_CXX_FLAGS_DEBUG "-g -gdwarf-2 -O0 ${OCPN_LIBCPP} -arch ${ARCH}")
  339. set(CMAKE_CXX_FLAGS_MINSIZEREL "-O2 ${OCPN_LIBCPP} -arch ${ARCH}")
  340. set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${OCPN_LIBCPP} -arch ${ARCH}")
  341. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
  342. "-g -gdwarf-2 -O3 ${OCPN_LIBCPP} -arch ${ARCH}"
  343. )
  344. set(CMAKE_EXE_LINKER_FLAGS
  345. "-O2 ${OCPN_LIBCPP} -arch ${ARCH} ${CMAKE_EXE_LINKER_FLAGS} -framework CoreGraphics"
  346. )
  347. set(CMAKE_SHARED_LINKER_FLAGS "-O2 ${OCPN_LIBCPP} -arch ${ARCH}")
  348. set(CMAKE_MODULE_LINKER_FLAGS "-O2 ${OCPN_LIBCPP} -arch ${ARCH}")
  349. endif ()
  350. if (MSVC)
  351. add_definitions(-D__MSVC__)
  352. add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE)
  353. add_definitions(-DPSAPI_VERSION=1)
  354. add_definitions(-D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS=1)
  355. # https://developercommunity.visualstudio.com
  356. # /t/error-c2872-byte-ambiguous-symbol/93889 https://shorturl.at/hmJSZ
  357. add_definitions(-D_HAS_STD_BYTE=0)
  358. endif ()
  359. if (MSVC)
  360. set(CMAKE_C_FLAGS_DEBUG "/MP /MDd /Ob0 /Od /D_DEBUG /Zi /RTC1")
  361. set(CMAKE_C_FLAGS_MINSIZEREL "/MP /MD /O1 /Ob1 /D NDEBUG")
  362. set(CMAKE_C_FLAGS_RELEASE "/MP /MD /O2 /Ob2 /D NDEBUG /Zi /wd4068")
  363. set(CMAKE_C_FLAGS_RELWITHDEBINFO "/MP /MD /O2 /Ob1 /D NDEBUG /Zi /wd4068")
  364. set(CMAKE_CXX_FLAGS_DEBUG "/MP /MDd /Ob0 /Od /D_DEBUG /Zi /RTC1 /EHa")
  365. set(CMAKE_CXX_FLAGS_MINSIZEREL "/MP /MD /O1 /Ob1 /D NDEBUG /EHa")
  366. set(CMAKE_CXX_FLAGS_RELEASE "/MP /MD /O2 /Ob2 /D NDEBUG /Zi /EHa /wd4068")
  367. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
  368. "/MP /MD /O2 /Ob1 /D NDEBUG /Zi /EHa /wd4068"
  369. )
  370. set(CMAKE_EXE_LINKER_FLAGS "/DEBUG /Release ${CMAKE_EXE_LINKER_FLAGS}")
  371. endif ()
  372. if (QT_ANDROID)
  373. set(CMAKE_BUILD_TYPE Debug)
  374. add_definitions(-D__WXQT__)
  375. add_definitions(-D__OCPN__ANDROID__)
  376. add_definitions(-DANDROID)
  377. add_definitions(-DNOASSERT)
  378. set(CMAKE_CXX_FLAGS "-pthread -fPIC -g")
  379. set(CMAKE_C_FLAGS "-pthread -fPIC -g")
  380. add_compile_options(
  381. "-Wno-inconsistent-missing-override"
  382. "-Wno-potentially-evaluated-expression" "-Wno-overloaded-virtual"
  383. "-Wno-unused-command-line-argument" "-Wno-unknown-pragmas"
  384. )
  385. if (CMAKE_BUILD_TYPE MATCHES "Debug")
  386. add_compile_options("-O0")
  387. endif ()
  388. set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-soname,libgorp.so -Wl,--build-id")
  389. endif ()
  390. message(STATUS "Final compiler options:")
  391. message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
  392. message(STATUS "CMAKE_CXX_FLAGS_DEBUG: ${CMAKE_CXX_FLAGS_DEBUG}")
  393. message(STATUS "CMAKE_CXX_FLAGS_MINSIZEREL: ${CMAKE_CXX_FLAGS_MINSIZEREL}")
  394. message(STATUS "CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}")
  395. message(
  396. STATUS "CMAKE_CXX_FLAGS_RELWITHDEBINFO: ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}"
  397. )
  398. # Per default, use CMAKE_INSTALL_LIBDIR=lib on Debian (and derivatives) to avoid
  399. # multilib plugin paths. After all, we do not install any "real" libraries.
  400. if (EXISTS /etc/debian_version AND NOT DEFINED CMAKE_INSTALL_LIBDIR)
  401. set(CMAKE_INSTALL_LIBDIR "lib")
  402. endif ()
  403. include(GNUInstallDirs)
  404. set(PREFIX_DATA ${CMAKE_INSTALL_DATADIR})
  405. set(PREFIX_PKGDATA ${CMAKE_INSTALL_DATADIR}/${PACKAGE_NAME})
  406. set(PREFIX_LIB "${CMAKE_INSTALL_FULL_LIBDIR}")
  407. #
  408. # Version handling
  409. #
  410. include(${CMAKE_SOURCE_DIR}/VERSION.cmake)
  411. string(TIMESTAMP VERSION_DATE "%Y-%m-%d")
  412. string(TIMESTAMP UNIX_TIMESTAMP "%s")
  413. if (OCPN_CI_BUILD)
  414. include(Utils)
  415. commit_id(COMMIT)
  416. build_num(BUILD_NUMBER)
  417. if (NOT "${OCPN_RELEASE}" STREQUAL "")
  418. set(BUILD_NUMBER ${OCPN_RELEASE})
  419. endif ()
  420. set(VERSION_TAIL "+${COMMIT}")
  421. if (NOT "${BUILD_NUMBER}" STREQUAL "")
  422. set(VERSION_TAIL "-${BUILD_NUMBER}${VERSION_TAIL}")
  423. endif ()
  424. endif ()
  425. set(PACKAGE_VERSION
  426. "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_TAIL}"
  427. )
  428. message(STATUS "Building version ${PACKAGE_VERSION}")
  429. # Detect the Apple Version of the build machine
  430. if (APPLE)
  431. exec_program(uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION)
  432. string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION})
  433. message(STATUS "*** Building on DARWIN_VERSION=${DARWIN_VERSION}")
  434. if (DARWIN_VERSION GREATER 11)
  435. set(APPLE_MODERN 1 INTERNAL)
  436. endif ()
  437. endif ()
  438. message(STATUS "*** Staging to build ${PACKAGE_NAME} ${PACKAGE_VERSION} ***")
  439. #
  440. # Bundled data: docs, tcdata
  441. #
  442. if (OCPN_BUNDLE_DOCS)
  443. message(STATUS "*** Package will include documentation ***")
  444. else (OCPN_BUNDLE_DOCS)
  445. message(STATUS "*** Package will NOT include documentation ***")
  446. endif (OCPN_BUNDLE_DOCS)
  447. #
  448. # Linux: set up GTK (wxWidgets prerequisite).
  449. #
  450. if (LINUX)
  451. include(OcpnFindGtk)
  452. endif ()
  453. # set a build flag for arm architecture, to catch any rPI runtime changes
  454. # required
  455. if (ARCH MATCHES "arm*" AND (NOT QT_ANDROID))
  456. add_definitions(-DocpnARM)
  457. if (ARCH STREQUAL "armhf")
  458. add_definitions(-DocpnARMHF)
  459. endif ()
  460. endif ()
  461. if (DEFINED _wx_selected_config)
  462. if (_wx_selected_config MATCHES "androideabi-qt")
  463. # MESSAGE (STATUS "Qt_Base: " ${Qt_Base}) MESSAGE (STATUS "wxQt_Base/Build:
  464. # " ${wxQt_Base} "/" ${wxQt_Build}) ADD_DEFINITIONS(-DocpnUSE_GLES)
  465. # ADD_DEFINITIONS(-DocpnUSE_GL)
  466. # SET(OPENGLES_FOUND "YES") SET(OPENGL_FOUND "YES")
  467. # ADD_DEFINITIONS(-DUSE_GLU_TESS) SET(USE_GLES2 ON ) MESSAGE (STATUS "Using
  468. # GLESv2 for Android") ADD_DEFINITIONS(-DUSE_ANDROID_GLES2)
  469. # ADD_DEFINITIONS(-DUSE_GLSL)
  470. include_directories(${CMAKE_SOURCE_DIR}/libs/glshim/include/GLES)
  471. endif ()
  472. endif ()
  473. if (APPLE)
  474. # Bundle all of wxWidgets as a courtesy for plugins, see #2153
  475. set(wxWidgets_FIND_COMPONENTS
  476. net xml html adv aui core base media propgrid qa ribbon richtext webview
  477. stc xrc
  478. )
  479. elseif (_wx_selected_config MATCHES "qt-armv7")
  480. set(wxWidgets_FIND_COMPONENTS base core xml html adv aui)
  481. elseif (OCPN_USE_WEBVIEW)
  482. set(wxWidgets_FIND_COMPONENTS net xml html adv aui core base webview)
  483. else ()
  484. set(wxWidgets_FIND_COMPONENTS net xml html adv aui core base)
  485. endif ()
  486. if (OPENGLES_FOUND)
  487. set(wxWidgets_FIND_COMPONENTS ${wxWidgets_FIND_COMPONENTS} gl)
  488. endif ()
  489. if ((NOT OPENGLES_FOUND) AND (NOT QT_ANDROID))
  490. if (OCPN_USE_GL)
  491. find_package(OpenGL)
  492. else (OCPN_USE_GL)
  493. message(STATUS "OpenGL disabled by option USE_GL...")
  494. endif (OCPN_USE_GL)
  495. if (OPENGL_FOUND)
  496. set(wxWidgets_FIND_COMPONENTS gl ${wxWidgets_FIND_COMPONENTS})
  497. include_directories(${OPENGL_INCLUDE_DIR})
  498. message(STATUS "Found OpenGL....")
  499. message(STATUS " GL Lib: " ${OPENGL_LIBRARIES})
  500. message(STATUS " GL Include: " ${OPENGL_INCLUDE_DIR})
  501. add_definitions(-DocpnUSE_GL)
  502. add_definitions(-DocpnUSE_GLSL)
  503. # We need to remove GLU from the OPENGL_LIBRARIES list
  504. foreach (_currentLibFile ${OPENGL_LIBRARIES})
  505. # MESSAGE (STATUS " Lib File: " ${_currentLibFile})
  506. set(UCNAME ${_currentLibFile})
  507. string(TOUPPER ${UCNAME} UCNAME)
  508. if (NOT ${UCNAME} MATCHES "(.*)GLU(.*)")
  509. set(REVISED_OPENGL_LIBRARIES ${_currentLibFile}
  510. ${REVISED_OPENGL_LIBRARIES}
  511. )
  512. endif ()
  513. endforeach ()
  514. set(OPENGL_LIBRARIES ${REVISED_OPENGL_LIBRARIES})
  515. message(STATUS " Revised GL Lib: " ${OPENGL_LIBRARIES})
  516. else ()
  517. message(STATUS "OpenGL not found...")
  518. endif ()
  519. endif ()
  520. # configure GLEW
  521. if (OPENGL_FOUND AND CMAKE_HOST_WIN32)
  522. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/cache/buildwin/include/glew)
  523. link_libraries(${CMAKE_SOURCE_DIR}/cache/buildwin/glew32.lib)
  524. elseif (OPENGL_FOUND AND NOT APPLE)
  525. find_package(GLEW REQUIRED)
  526. include_directories(${GLEW_INCLUDE_DIRS})
  527. link_libraries(${GLEW_LIBRARIES})
  528. endif ()
  529. if (NOT QT_ANDROID)
  530. # Find wxWidgets here, and the setting get inherited by all plugins. These
  531. # options can be used to set the linux widgets build type
  532. set(wxWidgets_USE_DEBUG OFF)
  533. set(wxWidgets_USE_UNICODE ON)
  534. set(wxWidgets_USE_UNIVERSAL OFF)
  535. set(wxWidgets_USE_STATIC OFF)
  536. if (OCPN_WXWIDGETS_FORCE_VERSION)
  537. set(wxWidgets_CONFIG_OPTIONS --version=${OCPN_WXWIDGETS_FORCE_VERSION})
  538. endif ()
  539. if (MSVC)
  540. # Exclude wxexpat.lib, since we use our own version. Other things are
  541. # excluded as well, but we don't need them
  542. set(wxWidgets_EXCLUDE_COMMON_LIBRARIES TRUE)
  543. endif ()
  544. if (GTK3_FOUND)
  545. set(wxWidgets_CONFIG_OPTIONS ${wxWidgets_CONFIG_OPTIONS} --toolkit=gtk3)
  546. endif ()
  547. # find_package(wxWidgets COMPONENTS ${wxWidgets_FIND_COMPONENTS} REQUIRED )
  548. if (APPLE AND OCPN_USE_DEPS_BUNDLE)
  549. set(wxWidgets_CONFIG_EXECUTABLE
  550. "${OCPN_DEPS_BUNDLE_PATH}/lib/wx/config/osx_cocoa-unicode-3.2"
  551. )
  552. set(wxWidgets_CONFIG_OPTIONS "--prefix=${OCPN_DEPS_BUNDLE_PATH}")
  553. endif ()
  554. find_package(wxWidgets COMPONENTS ${wxWidgets_FIND_COMPONENTS})
  555. if (wxWidgets_FOUND AND OCPN_USE_WEBVIEW)
  556. message(STATUS "Found wxWidgets webview add-on")
  557. add_definitions(-DwxUSE_WEBVIEW=1 -DHAVE_WEBVIEW)
  558. else ()
  559. add_definitions(-DwxUSE_WEBVIEW=0)
  560. list(REMOVE_ITEM wxWidgets_FIND_COMPONENTS webview)
  561. message(STATUS "Could not find wxWidgets webview add-on")
  562. find_package(wxWidgets COMPONENTS ${wxWidgets_FIND_COMPONENTS})
  563. endif ()
  564. if (NOT wxWidgets_FOUND)
  565. message(FATAL_ERROR "Cannot find wxWidgets, giving up.")
  566. endif ()
  567. if (MSYS)
  568. # Convert msys to windows paths, and handle the missing /usr
  569. string(REGEX REPLACE "/usr/local" ";C:/MinGW/msys/1.0/local"
  570. wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}"
  571. )
  572. endif ()
  573. include(${wxWidgets_USE_FILE})
  574. message(STATUS "Found wxWidgets...")
  575. message(STATUS " wxWidgets Include: ${wxWidgets_INCLUDE_DIRS}")
  576. message(STATUS " wxWidgets Libraries: ${wxWidgets_LIBRARIES}")
  577. # We need to remove GLU from the wxWidgets_LIBRARIES list It only appears to
  578. # get on the list for MSW...
  579. foreach (_currentLibFile ${wxWidgets_LIBRARIES})
  580. set(UCNAME ${_currentLibFile})
  581. string(TOUPPER ${UCNAME} UCNAME)
  582. if (NOT ${UCNAME} MATCHES "(.*)GLU(.*)")
  583. set(REVISED_wxWidgets_LIBRARIES
  584. ${REVISED_wxWidgets_LIBRARIES} ${_currentLibFile}
  585. )
  586. endif ()
  587. endforeach ()
  588. set(wxWidgets_LIBRARIES ${REVISED_wxWidgets_LIBRARIES})
  589. message(STATUS " Revised wxWidgets Libraries: ${wxWidgets_LIBRARIES}")
  590. endif (NOT QT_ANDROID)
  591. # Handle #1500: Force NDEBUG on gtk3 for wxwidgets < 3.2 (all builds)
  592. if (GTK3_FOUND)
  593. set(_VERSPROG
  594. [=[
  595. #include <stdio.h>
  596. #include <wx/version.h>
  597. int main(int argc, char**argv) {
  598. printf("%d\\n", wxMAJOR_VERSION * 10 + wxMINOR_VERSION);
  599. }
  600. ]=]
  601. )
  602. set(TRY_COMPILE
  603. "echo '${_VERSPROG}' > wx-32.c; cc $(${wxWidgets_CONFIG_EXECUTABLE} --cflags) wx-32.c; ./a.out"
  604. )
  605. execute_process(
  606. COMMAND "/bin/sh" "-c" "${TRY_COMPILE}"
  607. WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  608. OUTPUT_VARIABLE _WX_VERSION
  609. ERROR_VARIABLE _WX_ERRORS
  610. OUTPUT_STRIP_TRAILING_WHITESPACE
  611. )
  612. if (NOT "${_WX_ERRORS}" STREQUAL "" OR "${_WX_VERSION}" STREQUAL "")
  613. message(FATAL_ERROR "Cannot run wxWidgets version test (!)")
  614. elseif ("${_WX_VERSION}" LESS 32)
  615. add_definitions("-DNDEBUG")
  616. message(STATUS "Forcing -NDEBUG on gtk3 build (#1500).")
  617. endif ()
  618. endif ()
  619. # Make sure that the variable "wxWidgets_VERSION_STRING" is set, even on older
  620. # CMake versions Seems safe to set to "3.0", since OCPN does not support earlier
  621. # wxWidgets versions
  622. if (wxWidgets_VERSION_STRING)
  623. message(STATUS "Found wxWidgets_VERSION_STRING: ${wxWidgets_VERSION_STRING}")
  624. else ()
  625. message(
  626. STATUS "Forcing wxWidgets_VERSION_STRING: ${wxWidgets_VERSION_STRING}"
  627. )
  628. set(wxWidgets_VERSION_STRING "3.0")
  629. endif ()
  630. # Enable gestures on all platforms except MacOS There are no touch capable MacOS
  631. # machines
  632. if ((wxWidgets_VERSION_STRING VERSION_GREATER "3.1.0") AND (NOT APPLE))
  633. add_definitions("-DHAVE_WX_GESTURE_EVENTS")
  634. endif ()
  635. message(STATUS "")
  636. message(STATUS "*** Staging to build ${PACKAGE_NAME} ***")
  637. message(STATUS "*** Build type: ${CMAKE_BUILD_TYPE}")
  638. message(STATUS "*** Will install to ${CMAKE_INSTALL_PREFIX} ***")
  639. set(GUI_S57_DIR ${CMAKE_SOURCE_DIR}/gui/src/s57)
  640. set(GUI_HDR_DIR ${CMAKE_SOURCE_DIR}/gui/include/gui)
  641. set(GUI_HDRS
  642. ${GUI_HDR_DIR}/AboutFrame.h
  643. ${GUI_HDR_DIR}/AboutFrameImpl.h
  644. ${GUI_HDR_DIR}/about.h
  645. ${GUI_HDR_DIR}/ais.h
  646. ${GUI_HDR_DIR}/ais_info_gui.h
  647. ${GUI_HDR_DIR}/AISTargetAlertDialog.h
  648. ${GUI_HDR_DIR}/AISTargetListDialog.h
  649. ${GUI_HDR_DIR}/AISTargetQueryDialog.h
  650. ${GUI_HDR_DIR}/CanvasConfig.h
  651. ${GUI_HDR_DIR}/canvasMenu.h
  652. ${GUI_HDR_DIR}/CanvasOptions.h
  653. ${GUI_HDR_DIR}/catalog_mgr.h
  654. ${GUI_HDR_DIR}/cat_settings.h
  655. ${GUI_HDR_DIR}/chartbase.h
  656. ${GUI_HDR_DIR}/chart_ctx_factory.h
  657. ${GUI_HDR_DIR}/chartdb.h
  658. ${GUI_HDR_DIR}/chartdbs.h
  659. ${GUI_HDR_DIR}/chartimg.h
  660. ${GUI_HDR_DIR}/chcanv.h
  661. ${GUI_HDR_DIR}/ChInfoWin.h
  662. ${GUI_HDR_DIR}/color_handler.h
  663. ${GUI_HDR_DIR}/compass.h
  664. ${GUI_HDR_DIR}/concanv.h
  665. ${GUI_HDR_DIR}/ConfigMgr.h
  666. ${GUI_HDR_DIR}/connection_edit.h
  667. ${GUI_HDR_DIR}/connections_dialog.h
  668. ${GUI_HDR_DIR}/conn_params_panel.h
  669. ${GUI_HDR_DIR}/DetailSlider.h
  670. ${GUI_HDR_DIR}/displays.h
  671. ${GUI_HDR_DIR}/download_mgr.h
  672. ${GUI_HDR_DIR}/dychart.h
  673. ${GUI_HDR_DIR}/emboss_data.h
  674. ${GUI_HDR_DIR}/FlexHash.h
  675. ${GUI_HDR_DIR}/FontDesc.h
  676. ${GUI_HDR_DIR}/FontMgr.h
  677. ${GUI_HDR_DIR}/GoToPositionDialog.h
  678. ${GUI_HDR_DIR}/gshhs.h
  679. ${GUI_HDR_DIR}/gui_lib.h
  680. ${GUI_HDR_DIR}/IDX_entry.h
  681. ${GUI_HDR_DIR}/iENCToolbar.h
  682. ${GUI_HDR_DIR}/kml.h
  683. ${GUI_HDR_DIR}/Layer.h
  684. ${GUI_HDR_DIR}/LinkPropDlg.h
  685. ${GUI_HDR_DIR}/load_errors_dlg.h
  686. ${GUI_HDR_DIR}/MarkInfo.h
  687. ${GUI_HDR_DIR}/mbtiles.h
  688. ${GUI_HDR_DIR}/MUIBar.h
  689. ${GUI_HDR_DIR}/n0183_ctx_factory.h
  690. ${GUI_HDR_DIR}/navutil.h
  691. ${GUI_HDR_DIR}/NMEALogWindow.h
  692. ${GUI_HDR_DIR}/ocpCursor.h
  693. ${GUI_HDR_DIR}/ocpndc.h
  694. ${GUI_HDR_DIR}/ocpn_app.h
  695. ${GUI_HDR_DIR}/ocpn_frame.h
  696. ${GUI_HDR_DIR}/OCPNListCtrl.h
  697. ${GUI_HDR_DIR}/ocpn_pixel.h
  698. ${GUI_HDR_DIR}/OCPNPlatform.h
  699. ${GUI_HDR_DIR}/ocpn_print.h
  700. ${GUI_HDR_DIR}/OCPN_AUIManager.h
  701. ${GUI_HDR_DIR}/OCPNRegion.h
  702. ${GUI_HDR_DIR}/options.h
  703. ${GUI_HDR_DIR}/piano.h
  704. ${GUI_HDR_DIR}/peer_client_dlg.h
  705. ${GUI_HDR_DIR}/pluginmanager.h
  706. ${GUI_HDR_DIR}/printtable.h
  707. ${GUI_HDR_DIR}/priority_gui.h
  708. ${GUI_HDR_DIR}/Quilt.h
  709. ${GUI_HDR_DIR}/rest_server_gui.h
  710. ${GUI_HDR_DIR}/RolloverWin.h
  711. ${GUI_HDR_DIR}/route_ctx_factory.h
  712. ${GUI_HDR_DIR}/route_gui.h
  713. ${GUI_HDR_DIR}/routemanagerdialog.h
  714. ${GUI_HDR_DIR}/routeman_gui.h
  715. ${GUI_HDR_DIR}/route_point_gui.h
  716. ${GUI_HDR_DIR}/routeprintout.h
  717. ${GUI_HDR_DIR}/RoutePropDlg.h
  718. ${GUI_HDR_DIR}/RoutePropDlgImpl.h
  719. ${GUI_HDR_DIR}/S57Light.h
  720. ${GUI_HDR_DIR}/S57ObjectDesc.h
  721. ${GUI_HDR_DIR}/S57QueryDialog.h
  722. ${GUI_HDR_DIR}/S57Sector.h
  723. ${GUI_HDR_DIR}/safe_mode_gui.h
  724. ${GUI_HDR_DIR}/SendToGpsDlg.h
  725. ${GUI_HDR_DIR}/SendToPeerDlg.h
  726. ${GUI_HDR_DIR}/Station_Data.h
  727. ${GUI_HDR_DIR}/styles.h
  728. ${GUI_HDR_DIR}/svg_utils.h
  729. ${GUI_HDR_DIR}/TCDataFactory.h
  730. ${GUI_HDR_DIR}/TCDataSource.h
  731. ${GUI_HDR_DIR}/TCDS_Ascii_Harmonic.h
  732. ${GUI_HDR_DIR}/TCDS_Binary_Harmonic.h
  733. ${GUI_HDR_DIR}/TC_Error_Code.h
  734. ${GUI_HDR_DIR}/tcmgr.h
  735. ${GUI_HDR_DIR}/TCWin.h
  736. ${GUI_HDR_DIR}/thumbwin.h
  737. ${GUI_HDR_DIR}/tide_time.h
  738. ${GUI_HDR_DIR}/timers.h
  739. ${GUI_HDR_DIR}/time_textbox.h
  740. ${GUI_HDR_DIR}/toolbar.h
  741. ${GUI_HDR_DIR}/track_gui.h
  742. ${GUI_HDR_DIR}/trackprintout.h
  743. ${GUI_HDR_DIR}/TrackPropDlg.h
  744. ${GUI_HDR_DIR}/TTYScroll.h
  745. ${GUI_HDR_DIR}/TTYWindow.h
  746. ${GUI_HDR_DIR}/undo.h
  747. ${GUI_HDR_DIR}/update_mgr.h
  748. ${GUI_HDR_DIR}/usb_devices.h
  749. ${GUI_HDR_DIR}/viewport.h
  750. ${GUI_HDR_DIR}/waypointman_gui.h
  751. ${GUI_HDR_DIR}/WindowDestroyListener.h
  752. ${GUI_HDR_DIR}/WindowDestroyListener.h
  753. )
  754. list(APPEND GUI_HDRS
  755. ${GUI_S57_DIR}/include/ogr_s57.h
  756. ${GUI_S57_DIR}/include/S57ClassRegistrar.h
  757. ${GUI_S57_DIR}/include/s57.h
  758. ${GUI_S57_DIR}/include/s57RegistrarMgr.h
  759. )
  760. set(GUI_SRC_DIR ${CMAKE_SOURCE_DIR}/gui/src)
  761. set(GUI_SRC
  762. ${GUI_SRC_DIR}/about.cpp
  763. ${GUI_SRC_DIR}/AboutFrame.cpp
  764. ${GUI_SRC_DIR}/AboutFrameImpl.cpp
  765. ${GUI_SRC_DIR}/ais.cpp
  766. ${GUI_SRC_DIR}/ais_info_gui.cpp
  767. ${GUI_SRC_DIR}/AISTargetAlertDialog.cpp
  768. ${GUI_SRC_DIR}/AISTargetListDialog.cpp
  769. ${GUI_SRC_DIR}/AISTargetQueryDialog.cpp
  770. ${GUI_SRC_DIR}/CanvasConfig.cpp
  771. ${GUI_SRC_DIR}/canvasMenu.cpp
  772. ${GUI_SRC_DIR}/CanvasOptions.cpp
  773. ${GUI_SRC_DIR}/catalog_mgr.cpp
  774. ${GUI_SRC_DIR}/cat_settings.cpp
  775. ${GUI_SRC_DIR}/chartdb.cpp
  776. ${GUI_SRC_DIR}/chartdbs.cpp
  777. ${GUI_SRC_DIR}/chartimg.cpp
  778. ${GUI_SRC_DIR}/chcanv.cpp
  779. ${GUI_SRC_DIR}/ChInfoWin.cpp
  780. ${GUI_SRC_DIR}/cm93.cpp
  781. ${GUI_SRC_DIR}/color_handler.cpp
  782. ${GUI_SRC_DIR}/compass.cpp
  783. ${GUI_SRC_DIR}/concanv.cpp
  784. ${GUI_SRC_DIR}/ConfigMgr.cpp
  785. ${GUI_SRC_DIR}/connection_edit.cpp
  786. ${GUI_SRC_DIR}/connections_dialog.cpp
  787. ${GUI_SRC_DIR}/conn_params_panel.cpp
  788. ${GUI_SRC_DIR}/DetailSlider.cpp
  789. ${GUI_SRC_DIR}/displays.cpp
  790. ${GUI_SRC_DIR}/download_mgr.cpp
  791. ${GUI_SRC_DIR}/FlexHash.cpp
  792. ${GUI_SRC_DIR}/FontDesc.cpp
  793. ${GUI_SRC_DIR}/FontMgr.cpp
  794. ${GUI_SRC_DIR}/GoToPositionDialog.cpp
  795. ${GUI_SRC_DIR}/gshhs.cpp
  796. ${GUI_SRC_DIR}/gui_lib.cpp
  797. ${GUI_SRC_DIR}/IDX_entry.cpp
  798. ${GUI_SRC_DIR}/iENCToolbar.cpp
  799. ${GUI_SRC_DIR}/kml.cpp
  800. ${GUI_SRC_DIR}/Layer.cpp
  801. ${GUI_SRC_DIR}/LinkPropDlg.cpp
  802. ${GUI_SRC_DIR}/load_errors_dlg.cpp
  803. ${GUI_SRC_DIR}/MarkInfo.cpp
  804. ${GUI_SRC_DIR}/mbtiles/mbtiles.cpp
  805. ${GUI_SRC_DIR}/mbtiles/WorkerThread.hpp
  806. ${GUI_SRC_DIR}/mbtiles/TileQueue.hpp
  807. ${GUI_SRC_DIR}/mbtiles/TileDescriptor.hpp
  808. ${GUI_SRC_DIR}/mbtiles/TileCache.hpp
  809. ${GUI_SRC_DIR}/MUIBar.cpp
  810. ${GUI_SRC_DIR}/navutil.cpp
  811. ${GUI_SRC_DIR}/NMEALogWindow.cpp
  812. ${GUI_SRC_DIR}/ocpCursor.cpp
  813. ${GUI_SRC_DIR}/ocpn_app.cpp
  814. ${GUI_SRC_DIR}/OCPN_AUIManager.cpp
  815. ${GUI_SRC_DIR}/ocpndc.cpp
  816. ${GUI_SRC_DIR}/ocpn_frame.cpp
  817. ${GUI_SRC_DIR}/OCPNListCtrl.cpp
  818. ${GUI_SRC_DIR}/ocpn_pixel.cpp
  819. ${GUI_SRC_DIR}/OCPNPlatform.cpp
  820. ${GUI_SRC_DIR}/ocpn_print.cpp
  821. ${GUI_SRC_DIR}/OCPNRegion.cpp
  822. ${GUI_SRC_DIR}/options.cpp
  823. ${GUI_SRC_DIR}/Osenc.cpp
  824. ${GUI_SRC_DIR}/peer_client_dlg.cpp
  825. ${GUI_SRC_DIR}/piano.cpp
  826. ${GUI_SRC_DIR}/pluginmanager.cpp
  827. ${GUI_SRC_DIR}/printtable.cpp
  828. ${GUI_SRC_DIR}/priority_gui.cpp
  829. ${GUI_SRC_DIR}/Quilt.cpp
  830. ${GUI_SRC_DIR}/rest_server_gui.cpp
  831. ${GUI_SRC_DIR}/RolloverWin.cpp
  832. ${GUI_SRC_DIR}/route_gui.cpp
  833. ${GUI_SRC_DIR}/routemanagerdialog.cpp
  834. ${GUI_SRC_DIR}/routeman_gui.cpp
  835. ${GUI_SRC_DIR}/route_point_gui.cpp
  836. ${GUI_SRC_DIR}/routeprintout.cpp
  837. ${GUI_SRC_DIR}/RoutePropDlg.cpp
  838. ${GUI_SRC_DIR}/RoutePropDlgImpl.cpp
  839. ${GUI_SRC_DIR}/s57chart.cpp
  840. ${GUI_SRC_DIR}/S57QueryDialog.cpp
  841. ${GUI_SRC_DIR}/safe_mode_gui.cpp
  842. ${GUI_SRC_DIR}/SencManager.cpp
  843. ${GUI_SRC_DIR}/SendToGpsDlg.cpp
  844. ${GUI_SRC_DIR}/SendToPeerDlg.cpp
  845. ${GUI_SRC_DIR}/Station_Data.cpp
  846. ${GUI_SRC_DIR}/styles.cpp
  847. ${GUI_SRC_DIR}/svg_utils.cpp
  848. ${GUI_SRC_DIR}/TCDataFactory.cpp
  849. ${GUI_SRC_DIR}/TCDataSource.cpp
  850. ${GUI_SRC_DIR}/TCDS_Ascii_Harmonic.cpp
  851. ${GUI_SRC_DIR}/TCDS_Binary_Harmonic.cpp
  852. ${GUI_SRC_DIR}/tcmgr.cpp
  853. ${GUI_SRC_DIR}/TCWin.cpp
  854. ${GUI_SRC_DIR}/thumbwin.cpp
  855. ${GUI_SRC_DIR}/toolbar.cpp
  856. ${GUI_SRC_DIR}/track_gui.cpp
  857. ${GUI_SRC_DIR}/trackprintout.cpp
  858. ${GUI_SRC_DIR}/TrackPropDlg.cpp
  859. ${GUI_SRC_DIR}/TTYScroll.cpp
  860. ${GUI_SRC_DIR}/TTYWindow.cpp
  861. ${GUI_SRC_DIR}/undo.cpp
  862. ${GUI_SRC_DIR}/update_mgr.cpp
  863. ${GUI_SRC_DIR}/viewport.cpp
  864. ${GUI_SRC_DIR}/waypointman_gui.cpp
  865. )
  866. list(APPEND GUI_SRC
  867. ${GUI_S57_DIR}/src/ogrs57datasource.cpp
  868. ${GUI_S57_DIR}/src/ogrs57layer.cpp
  869. ${GUI_S57_DIR}/src/s57classregistrar.cpp
  870. ${GUI_S57_DIR}/src/s57featuredefns.cpp
  871. ${GUI_S57_DIR}/src/s57obj.cpp
  872. ${GUI_S57_DIR}/src/s57reader.cpp
  873. ${GUI_S57_DIR}/src/s57RegistrarMgr.cpp
  874. )
  875. if (OCPN_USE_GL)
  876. list(APPEND GUI_HDRS${GUI_HDR_DIR}/shaders.h)
  877. list(APPEND GUI_SRC ${GUI_SRC_DIR}/shaders.cpp)
  878. endif()
  879. if (OCPN_USE_GARMINHOST)
  880. message(STATUS "GarminHost is enabled.")
  881. set(USE_GARMINHOST 1) # -> config.h
  882. list(APPEND MODEL_SRC ${MODEL_SRC_DIR}/garmin_wrapper.cpp)
  883. endif ()
  884. if (LINUX)
  885. list(APPEND GUI_SRC ${GUI_SRC_DIR}/linux_devices.cpp
  886. ${GUI_SRC_DIR}/udev_rule_mgr.cpp
  887. )
  888. list(APPEND GUI_HDRS ${GUI_HDR_DIR}/linux_devices.h
  889. ${GUI_HDR_DIR}/udev_rule_mgr.h
  890. )
  891. endif ()
  892. if (LINUX AND OCPN_USE_CRASHREPORT)
  893. list(APPEND GUI_HDRS ${GUI_HDR_DIR}/crashprint.h)
  894. list(APPEND GUI_SRC ${GUI_SRC_DIR}/crashprint.cpp)
  895. endif ()
  896. if (QT_ANDROID)
  897. list(APPEND GUI_HDRS android/androidUTIL.h)
  898. list(APPEND GUI_SRC ${CMAKE_SOURCE_DIR}/android/androidUTIL.cpp)
  899. endif ()
  900. set(SRCS ${GUI_SRC})
  901. set(HDRS ${GUI_HDRS})
  902. if (APPLE)
  903. add_executable(${PACKAGE_NAME} MACOSX_BUNDLE ${HDRS} ${SRCS})
  904. elseif (WIN32)
  905. add_executable(${PACKAGE_NAME} WIN32 ${HDRS} ${SRCS})
  906. elseif (QT_ANDROID)
  907. set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
  908. add_library(${PACKAGE_NAME} SHARED ${HDRS} ${SRCS})
  909. else ()
  910. add_executable(${PACKAGE_NAME} ${HDRS} ${SRCS})
  911. endif ()
  912. if (QT_ANDROID)
  913. include(libs/AndroidLibs.cmake)
  914. endif ()
  915. add_library(_opencpn INTERFACE) # plugin link target.
  916. target_link_libraries(_opencpn INTERFACE ${PACKAGE_NAME})
  917. target_include_directories(
  918. _opencpn BEFORE
  919. INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/model/include
  920. ${CMAKE_CURRENT_SOURCE_DIR}/include
  921. ${CMAKE_CURRENT_SOURCE_DIR}/resources
  922. ${CMAKE_CURRENT_SOURCE_DIR}/gui/src/mbtiles
  923. )
  924. if (MSVC)
  925. target_include_directories(_opencpn INTERFACE ${CMAKE_SOURCE_DIR}/buildwin)
  926. elseif (APPLE)
  927. target_include_directories(
  928. _opencpn INTERFACE ${CMAKE_SOURCE_DIR}/buildosx/include
  929. )
  930. elseif (QT_ANDROID)
  931. target_include_directories(_opencpn INTERFACE ${CMAKE_SOURCE_DIR}/android)
  932. endif ()
  933. add_library(ocpn::opencpn ALIAS _opencpn)
  934. set_target_properties(
  935. ${PACKAGE_NAME}
  936. PROPERTIES ENABLE_EXPORTS 1
  937. OUTPUT_NAME ${PACKAGE_NAME}
  938. ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  939. )
  940. target_include_directories(
  941. ${PACKAGE_NAME} BEFORE
  942. PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/gui/include/gui
  943. ${CMAKE_CURRENT_SOURCE_DIR}/include
  944. ${CMAKE_CURRENT_SOURCE_DIR}/resources
  945. ${CMAKE_CURRENT_SOURCE_DIR}/gui/src/mbtiles
  946. ${CMAKE_CURRENT_SOURCE_DIR}/gui/src/s57/include
  947. )
  948. if (QT_ANDROID)
  949. target_include_directories(
  950. ${PACKAGE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android
  951. )
  952. endif ()
  953. if (MSVC AND NOT OCPN_CI_BUILD)
  954. message(STATUS "PACKAGE_NAME = ${PACKAGE_NAME}")
  955. set_property(
  956. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  957. PROPERTY VS_STARTUP_PROJECT ${PACKAGE_NAME}
  958. )
  959. set_target_properties(
  960. ${PACKAGE_NAME}
  961. PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY
  962. "$<TARGET_FILE_DIR:${PACKAGE_NAME}>"
  963. VS_DEBUGGER_COMMAND_ARGUMENTS "-p"
  964. )
  965. endif ()
  966. if (APPLE)
  967. target_include_directories(
  968. ${PACKAGE_NAME} PRIVATE /usr/X11/include /usr/X11/include/GL
  969. )
  970. if (OCPN_USE_DEPS_BUNDLE)
  971. target_include_directories(
  972. ${PACKAGE_NAME} PRIVATE "${OCPN_DEPS_BUNDLE_PATH}/include"
  973. )
  974. set_target_properties(${PACKAGE_NAME} PROPERTIES
  975. BUILD_RPATH "${OCPN_DEPS_BUNDLE_PATH}/lib"
  976. INSTALL_RPATH "${OCPN_DEPS_BUNDLE_PATH}/lib"
  977. )
  978. endif ()
  979. endif ()
  980. find_package(Gettext REQUIRED)
  981. add_subdirectory(libs/ssl_sha1)
  982. target_link_libraries(${PACKAGE_NAME} PRIVATE ssl::sha1)
  983. if (LINUX)
  984. find_package(LIBUDEV)
  985. if (LIBUDEV_FOUND)
  986. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::libudev)
  987. set(HAVE_LIBUDEV 1)
  988. endif ()
  989. endif ()
  990. if (OCPN_USE_SYSFS_PORTS)
  991. set(USE_SYSFS_PORTS 1)
  992. endif ()
  993. find_package(LIBUSB)
  994. if (LIBUSB_FOUND)
  995. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::libusb)
  996. set(HAVE_LIBUSB_10 1)
  997. endif ()
  998. if (wxWidgets_VERSION_STRING VERSION_LESS "3.1.6")
  999. find_package(PANGO)
  1000. if (PANGO_FOUND)
  1001. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::pango)
  1002. set(HAVE_PANGO 1)
  1003. endif ()
  1004. endif ()
  1005. # Some of these "find_path" macros generate "false-positives" under Windows,
  1006. # especially if mingw is installed For OpenCPN, these include files and related
  1007. # methods are really only valid in complete linux/unix environments So, pending
  1008. # further information, we disable these tests for non-UNIX-like builds.
  1009. if (UNIX)
  1010. find_path(HAVE_UNISTD_H NAMES unistd.h)
  1011. find_path(HAVE_LIBGEN_H NAMES libgen.h)
  1012. find_path(HAVE_DIRENT_H NAMES dirent.h)
  1013. find_path( HAVE_LINUX_SERIAL_H PATH_SUFFIXES linux NAMES serial.h)
  1014. find_path( HAVE_SYS_STAT_H PATH_SUFFIXES sys NAMES stat.h)
  1015. find_path( HAVE_SYS_IOCTL_H PATH_SUFFIXES sys NAMES ioctl.h)
  1016. find_path(HAVE_FCNTL_H NAMES fcntl.h)
  1017. if (NOT HAVE_FCNTL_H)
  1018. find_path( HAVE_SYS_FCNTL_H PATH_SUFFIXES sys NAMES fcntl.h)
  1019. endif ()
  1020. find_path( HAVE_SYS_TYPES_H PATH_SUFFIXES sys NAMES types.h)
  1021. check_symbol_exists(readlink unistd.h HAVE_READLINK)
  1022. endif ()
  1023. #
  1024. # Linux: set up GTK
  1025. #
  1026. if (LINUX)
  1027. include(OcpnFindGtk)
  1028. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::gtk)
  1029. endif ()
  1030. # Search for opengles, short of running a program to test the speed of
  1031. # acceleration, I simply use gles on "native linux" arm systems
  1032. if (DEFINED _wx_selected_config)
  1033. message(STATUS "selected config ${_wx_selected_config}")
  1034. if (_wx_selected_config MATCHES "androideabi-qt")
  1035. # message(STATUS "Building for wxQt-Android")
  1036. # message(STATUS "Qt_Base: " # ${Qt_Base})
  1037. # message(STATUS "wxQt_Base/Build: ${wxQt_Base}/${wxQt_Build}")
  1038. # set(QT_ANDROID "ON")
  1039. endif ()
  1040. endif ()
  1041. if ((_wx_selected_config MATCHES "qt-armv7"))
  1042. set(wxWidgets_FIND_COMPONENTS base core xml html adv aui)
  1043. else ()
  1044. set(wxWidgets_FIND_COMPONENTS net xml html adv aui core base webview)
  1045. endif ()
  1046. if (ARCH MATCHES "arm*" AND (NOT QT_ANDROID) AND OCPN_USE_GLES_SHIM)
  1047. find_path(OPENGLESv1_INCLUDE_DIR GLES/gl.h)
  1048. if (OPENGLESv1_INCLUDE_DIR)
  1049. message(STATUS "Found OpenGLESv1")
  1050. add_definitions(-DocpnUSE_GL) # ocpnUSE_GLES is in config.h
  1051. # set(OPENGLES_FOUND "YES") set(OPENGL_FOUND "YES")
  1052. set(OPENGL_LIBRARIES "GL_static" "EGL" "X11" "drm")
  1053. endif ()
  1054. endif ()
  1055. if (OPENGLES_FOUND)
  1056. list(APPEND wxwidgets_FIND_COMPONENTS gl)
  1057. endif ()
  1058. if ((NOT OPENGLES_FOUND) AND (NOT QT_ANDROID))
  1059. if (OCPN_USE_GL)
  1060. find_package(OpenGL)
  1061. else ()
  1062. message(STATUS "OpenGL disabled by option USE_GL...")
  1063. endif ()
  1064. if (OPENGL_FOUND)
  1065. list(APPEND wxwidgets_FIND_COMPONENTS gl)
  1066. target_include_directories(${PACKAGE_NAME} PRIVATE ${OPENGL_INCLUDE_DIR})
  1067. message(STATUS "Found OpenGL....")
  1068. if (OCPN_VERBOSE)
  1069. message(STATUS " GL Lib: " ${OPENGL_gl_LIBRARIES})
  1070. message(STATUS " GL Include: " ${OPENGL_INCLUDE_DIR})
  1071. endif ()
  1072. set(wxWidgets_USE_LIBS gl ${wxWidgets_USE_LIBS})
  1073. add_definitions(-DocpnUSE_GL)
  1074. target_link_libraries(${PACKAGE_NAME} PRIVATE ${OPENGL_gl_LIBRARIES})
  1075. target_include_directories(${PACKAGE_NAME} PRIVATE ${OPENGL_INCLUDE_DIR})
  1076. else ()
  1077. message(STATUS "OpenGL not found...")
  1078. endif ()
  1079. endif ()
  1080. if (MSVC)
  1081. target_include_directories(
  1082. ${PACKAGE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/buildwin
  1083. )
  1084. elseif (APPLE)
  1085. target_include_directories(
  1086. ${PACKAGE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/buildosx/include
  1087. )
  1088. elseif (QT_ANDROID)
  1089. target_include_directories(
  1090. ${PACKAGE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android
  1091. )
  1092. endif ()
  1093. if (OCPN_USE_CRASHREPORT)
  1094. message(STATUS "Crash reporting enabled")
  1095. if (MSVC)
  1096. message(STATUS "Using Windows CrashRpt")
  1097. target_include_directories(
  1098. ${PACKAGE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/buildwin/crashrpt
  1099. )
  1100. target_link_libraries(
  1101. ${PACKAGE_NAME}
  1102. PRIVATE ${CMAKE_SOURCE_DIR}/buildwin/crashrpt/CrashRpt1403.lib
  1103. )
  1104. set(CMAKE_EXE_LINKER_FLAGS "/DEBUG /Release ${CMAKE_EXE_LINKER_FLAGS}")
  1105. elseif (LINUX AND CMAKE_BUILD_TYPE MATCHES "Rel*")
  1106. message(STATUS "Using Linux crash reporting")
  1107. endif ()
  1108. endif ()
  1109. add_subdirectory("libs/sqlite")
  1110. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::sqlite)
  1111. add_subdirectory("libs/SQLiteCpp")
  1112. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::sqlite_cpp)
  1113. if (UNIX)
  1114. if (NOT QT_ANDROID) # this should be detected by the grib plugin
  1115. find_package(BZip2 REQUIRED)
  1116. target_include_directories(${PACKAGE_NAME} PRIVATE ${BZIP2_INCLUDE_DIR})
  1117. target_link_libraries(${PACKAGE_NAME} PRIVATE ${BZIP2_LIBRARIES})
  1118. find_package(ZLIB REQUIRED)
  1119. target_include_directories(${PACKAGE_NAME} PRIVATE ${ZLIB_INCLUDE_DIR})
  1120. target_link_libraries(${PACKAGE_NAME} PRIVATE ${ZLIB_LIBRARY})
  1121. find_package(X11)
  1122. if (X11_FOUND AND NOT APPLE)
  1123. target_link_libraries(${PACKAGE_NAME} PRIVATE ${X11_LIBRARIES} ${X11_Xrandr_LIB})
  1124. set(OCPN_HAVE_X11 ON) # => config.h
  1125. endif ()
  1126. if (NOT APPLE)
  1127. # TinyXML from Homebrew is not good enough for our GpxDocument needs We
  1128. # should probably replace it with pugixml completely anyway...
  1129. find_package(TinyXML)
  1130. endif ()
  1131. if (APPLE)
  1132. if (wxWidgets_VERSION_STRING VERSION_LESS "3.1.6")
  1133. # Only needed if we build with wxSVG implementation of SVG support
  1134. message(STATUS "Building with wxSVG support")
  1135. find_package(Freetype REQUIRED)
  1136. target_link_libraries(${PACKAGE_NAME} PRIVATE Freetype::Freetype)
  1137. find_package(Fontconfig REQUIRED)
  1138. target_link_libraries(${PACKAGE_NAME} PRIVATE Fontconfig::Fontconfig)
  1139. find_package(PNG REQUIRED)
  1140. target_link_libraries(${PACKAGE_NAME} PRIVATE PNG::PNG)
  1141. find_package(Pixman REQUIRED)
  1142. target_link_libraries(${PACKAGE_NAME} PRIVATE Pixman::Pixman)
  1143. endif ()
  1144. find_package(ZSTD REQUIRED)
  1145. target_link_libraries(${PACKAGE_NAME} PRIVATE zstd::zstd)
  1146. endif ()
  1147. endif ()
  1148. endif ()
  1149. # check for lzma support for reading compressed charts
  1150. if (CMAKE_HOST_WIN32)
  1151. list(APPEND CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cache/buildwin")
  1152. list(APPEND CMAKE_PREFIX_PATH
  1153. "${CMAKE_CURRENT_SOURCE_DIR}/cache/buildwin/include"
  1154. )
  1155. endif ()
  1156. if (OCPN_USE_CURL)
  1157. if (CMAKE_HOST_WIN32)
  1158. install(
  1159. FILES "${CMAKE_SOURCE_DIR}/cache/buildwin/curl-ca-bundle.crt"
  1160. "${CMAKE_SOURCE_DIR}/cache/buildwin/libeay32.dll"
  1161. "${CMAKE_SOURCE_DIR}/cache/buildwin/ssleay32.dll" DESTINATION "."
  1162. )
  1163. if (MSVC)
  1164. set(CURL_LIBRARIES "${CMAKE_SOURCE_DIR}/buildwin/libcurl.lib")
  1165. install(FILES "cache/buildwin/libcurl.dll" DESTINATION ".")
  1166. install(FILES "cache/buildwin/zlib1.dll" DESTINATION ".")
  1167. endif ()
  1168. else ()
  1169. set(OCPN_USE_EXTERN_CURL ON)
  1170. endif ()
  1171. if (NOT QT_ANDROID)
  1172. if (OCPN_USE_EXTERN_CURL)
  1173. find_package(CURL REQUIRED)
  1174. message(STATUS "ocpn: using external curl libraries...")
  1175. message(STATUS " curl includes: " ${CURL_INCLUDE_DIRS})
  1176. message(STATUS " curl libraries: " ${CURL_LIBRARIES})
  1177. target_include_directories(${PACKAGE_NAME} PRIVATE ${CURL_INCLUDE_DIRS})
  1178. else ()
  1179. include("Curl")
  1180. message(STATUS "Using bundled curl library...")
  1181. endif ()
  1182. pkg_search_module(SYS_WXCURL libwxcurl wxcurl)
  1183. use_bundled_lib(USE_BUNDLED_WXCURL wxcurl)
  1184. if (SYS_WXCURL_FOUND AND NOT USE_BUNDLED_WXCURL)
  1185. message(STATUS "Building with system wxcurl")
  1186. target_include_directories(
  1187. ${PACKAGE_NAME} PRIVATE ${CURL_INCLUDE_DIRS} ${SYS_WXCURL_INCLUDE_DIR}
  1188. )
  1189. target_link_libraries(${PACKAGE_NAME} PRIVATE ${SYS_WXCURL_LIBRARIES})
  1190. else ()
  1191. message(STATUS "Building with bundled wxcurl")
  1192. include("Curl")
  1193. add_subdirectory("libs/wxcurl")
  1194. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::wxcurl)
  1195. endif ()
  1196. target_link_libraries(${PACKAGE_NAME} PRIVATE ${CURL_LIBRARIES})
  1197. if (WIN32 AND OCPN_USE_EXTERN_CURL)
  1198. find_library(
  1199. CURL_LIBRARY_DLL
  1200. NAMES curl curllib libcurl_imp curllib_static libcurl
  1201. PATH_SUFFIXES dll
  1202. )
  1203. install(FILES ${CURL_LIBRARY_DLL} DESTINATION ".")
  1204. endif ()
  1205. else ()
  1206. target_include_directories(
  1207. ${PACKAGE_NAME}
  1208. PRIVATE ${CMAKE_SOURCE_DIR}/buildandroid/libcurl/${ARCH}/include
  1209. )
  1210. target_link_libraries(
  1211. ${PACKAGE_NAME}
  1212. PRIVATE ${CMAKE_SOURCE_DIR}/buildandroid/libcurl/${ARCH}/lib/libcurl.a
  1213. )
  1214. endif ()
  1215. endif ()
  1216. if (QT_ANDROID)
  1217. target_include_directories(
  1218. ${PACKAGE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/buildandroid/libexpat/include
  1219. )
  1220. endif ()
  1221. if (OCPN_USE_SVG)
  1222. message(STATUS "SVG support enabled...")
  1223. if (wxWidgets_VERSION_STRING VERSION_GREATER_EQUAL "3.1.6")
  1224. message(STATUS "wxWidgets 3.1.6+ detected, using wxBitmapBundle for SVG")
  1225. add_definitions(-DocpnUSE_SVG) # Goes into config.h, leave as global
  1226. add_definitions(-DocpnUSE_wxBitmapBundle)
  1227. else ()
  1228. message(STATUS "wxWidgets older than 3.1.6 detected, using wxSVG")
  1229. if (NOT QT_ANDROID)
  1230. include(OcpnFindCairo)
  1231. include(OcpnFindExpat)
  1232. if (CMAKE_HOST_WIN32)
  1233. # On Windows, we have our own expat and cairo
  1234. file(GLOB gtkdll_files
  1235. "${CMAKE_CURRENT_SOURCE_DIR}/cache/buildwin/gtk/*.dll"
  1236. )
  1237. install(FILES ${gtkdll_files} DESTINATION ".")
  1238. file(GLOB expatdll_files
  1239. "${CMAKE_CURRENT_SOURCE_DIR}/cache/buildwin/expat-2.2.5/*.dll"
  1240. )
  1241. install(FILES ${expatdll_files} DESTINATION ".")
  1242. message(
  1243. STATUS "GTK and Expat DLLs bundled into the installer package..."
  1244. )
  1245. else ()
  1246. # Include(OcpnFindFmpeg) -- FFMPEG is not enabled currently.
  1247. # target_link_libraries(${PACKAGE_NAME} ocpn::ffmpeg)
  1248. include(FindEXIF)
  1249. target_link_libraries(
  1250. ${PACKAGE_NAME} PRIVATE ${EXIF_LIBRARIES} ${GTK_LIBRARIES}
  1251. )
  1252. target_include_directories(${PACKAGE_NAME} PRIVATE ${EXIF_INCLUDE_DIRS})
  1253. endif ()
  1254. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::cairo ocpn::expat)
  1255. add_definitions(-DocpnUSE_SVG) # Goes into config.h, leave as global
  1256. pkg_search_module(WXSVG libwxsvg wxsvg)
  1257. use_bundled_lib(USE_BUNDLED_WXSVG wxsvg)
  1258. if (WXSVG_FOUND AND NOT USE_BUNDLED_WXSVG)
  1259. message(STATUS "Building with system wxsvg includes")
  1260. add_library(WXSVG INTERFACE)
  1261. add_library(ocpn::wxsvg ALIAS WXSVG)
  1262. target_include_directories(WXSVG INTERFACE ${WXSVG_INCLUDE_DIR})
  1263. target_link_libraries(WXSVG INTERFACE ${WXSVG_LIBRARIES})
  1264. else ()
  1265. add_subdirectory("libs/wxsvg")
  1266. endif ()
  1267. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::wxsvg)
  1268. else ()
  1269. add_definitions(-DocpnUSE_SVG)
  1270. include_directories(${CMAKE_SOURCE_DIR}/libs/wxsvg/include/wxSVG)
  1271. include_directories(${CMAKE_SOURCE_DIR}/libs/wxsvg/include/wxSVGXML)
  1272. include_directories(${CMAKE_SOURCE_DIR}/libs/wxsvg/include)
  1273. include_directories(${CMAKE_SOURCE_DIR}/libs/wxsvg/src)
  1274. endif ()
  1275. endif ()
  1276. endif ()
  1277. if (OCPN_USE_NEWSERIAL)
  1278. add_subdirectory("libs/serial")
  1279. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::serial)
  1280. message(STATUS "Using new serial library...")
  1281. endif ()
  1282. # Search for opengles, short of running a program to test the speed of
  1283. # acceleration, I simply use gles on "native linux" arm systems
  1284. if (ARCH MATCHES "arm*" AND (NOT QT_ANDROID) AND OCPN_USE_GLES_SHIM)
  1285. find_path(OPENGLESv1_INCLUDE_DIR GLES/gl.h)
  1286. if (OPENGLESv1_INCLUDE_DIR)
  1287. message(STATUS "Found OpenGLESv1")
  1288. add_definitions(-DocpnUSE_GLES)
  1289. add_definitions(-DocpnUSE_GL)
  1290. # set(OPENGLES_FOUND "YES") set(OPENGL_FOUND "YES")
  1291. # SET(wxWidgets_FIND_COMPONENTS ${wxWidgets_FIND_COMPONENTS} gl )
  1292. add_subdirectory(libs/glshim)
  1293. set(OPENGL_LIBRARIES "GL_static" "EGL" "X11" "drm")
  1294. endif ()
  1295. endif ()
  1296. if (OPENGL_FOUND)
  1297. target_sources(
  1298. ${PACKAGE_NAME}
  1299. PRIVATE ${GUI_HDR_DIR}/glChartCanvas.h
  1300. ${GUI_HDR_DIR}/glTextureDescriptor.h
  1301. ${GUI_HDR_DIR}/glTexCache.h
  1302. ${GUI_HDR_DIR}/glTextureManager.h
  1303. ${GUI_SRC_DIR}/glTextureDescriptor.cpp
  1304. ${GUI_SRC_DIR}/glTexCache.cpp
  1305. ${GUI_SRC_DIR}/glChartCanvas.cpp
  1306. ${GUI_SRC_DIR}/glTextureManager.cpp
  1307. )
  1308. endif ()
  1309. # Building for QT_ANDROID involves a cross-building environment, So the include
  1310. # directories, flags, etc must be stated explicitly without trying to locate
  1311. # them on the host build system.
  1312. if (QT_ANDROID)
  1313. add_definitions(-DocpnUSE_GLES)
  1314. add_definitions(-DocpnUSE_GL)
  1315. endif ()
  1316. message(STATUS " Adding local GLU")
  1317. add_subdirectory(libs/glu)
  1318. set(OPENGL_LIBRARIES "GLU_static" ${OPENGL_LIBRARIES})
  1319. if (OCPN_VERBOSE)
  1320. message(STATUS " Revised GL Lib (with local): " ${OPENGL_LIBRARIES})
  1321. endif ()
  1322. find_package(OcpnLibarchive)
  1323. if (NOT TARGET ocpn::libarchive)
  1324. message(FATAL_ERROR "No libarchive!!!")
  1325. endif ()
  1326. target_link_libraries(${PACKAGE_NAME} PUBLIC ocpn::libarchive)
  1327. if (APPLE AND OCPN_USE_SYSTEM_LIBARCHIVE)
  1328. # If we use system libarchive, we do not bundle the dylib and need to comment
  1329. # it out from the pkg project file
  1330. set(LIBARCHIVE_COMMENT_START "<!--")
  1331. set(LIBARCHIVE_COMMENT_END "-->")
  1332. endif ()
  1333. # Add android and windows extra, bundled GL headers
  1334. target_link_libraries(${PACKAGE_NAME} PUBLIC ocpn::gl-headers)
  1335. # Ensure we have ghc::filesystem if std::filesystem is missing.
  1336. add_subdirectory(libs/std_filesystem)
  1337. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::filesystem)
  1338. message(STATUS " Adding local LIBTESS2")
  1339. add_subdirectory(libs/libtess2)
  1340. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::tess2)
  1341. add_subdirectory(libs/tinyxml)
  1342. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::tinyxml)
  1343. if (MSVC)
  1344. install(FILES "cache/buildwin/libssl-3.dll" DESTINATION ".")
  1345. install(FILES "cache/buildwin/libcrypto-3.dll" DESTINATION ".")
  1346. endif ()
  1347. message(STATUS "S57 ENC support: enabled")
  1348. if (OCPN_USE_GARMINHOST)
  1349. add_subdirectory("libs/garmin")
  1350. target_link_libraries(${PACKAGE_NAME} PUBLIC ocpn::garminhost)
  1351. message(STATUS "Garmin Host Mode support: enabled")
  1352. else ()
  1353. message(STATUS "Garmin Host Mode support: disabled")
  1354. endif ()
  1355. # Compile texcompression support library
  1356. if (OPENGL_FOUND)
  1357. add_subdirectory("libs/texcmp")
  1358. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::texcmp)
  1359. add_subdirectory("libs/mipmap")
  1360. target_link_libraries(${PACKAGE_NAME} PRIVATE ocpn::mipmap)
  1361. endif ()
  1362. pkg_search_module(LZ4 liblz4 lz4)
  1363. use_bundled_lib(USE_BUNDLED_LZ4 lz4)
  1364. if (LZ4_FOUND AND NOT USE_BUNDLED_LZ4)
  1365. message(STATUS "Building with system lz4")
  1366. include_directories(${LZ4_INCLUDE_DIR})
  1367. if (OCPN_USE_GL)
  1368. target_link_directories(TEXCMP PRIVATE ${LZ4_LIBRARY_DIRS})
  1369. endif ()
  1370. target_link_libraries(${PACKAGE_NAME} PRIVATE ${LZ4_LIBRARIES})
  1371. else ()
  1372. message(STATUS "Building with bundled lz4")
  1373. add_subdirectory("libs/lz4")
  1374. target_link_libraries(${PACKAGE_NAME} PRIVATE LZ4)
  1375. endif ()
  1376. # Finalize config.h setup and deploy it.
  1377. include(TargetSetup)
  1378. if ("${wxWidgets_LIBRARIES}" MATCHES "gtk3u")
  1379. if (${PKG_TARGET_VERSION} VERSION_LESS 22.04)
  1380. if (NOT ${PKG_TARGET} MATCHES "-gtk3")
  1381. string(REPLACE ubuntu ubuntu-gtk3 PKG_TARGET ${PKG_TARGET})
  1382. endif ()
  1383. endif ()
  1384. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__WXGTK3__")
  1385. endif ()
  1386. configure_file(
  1387. ${CMAKE_SOURCE_DIR}/cmake/in-files/config.h.in
  1388. ${CMAKE_BINARY_DIR}/include/config.h
  1389. )
  1390. include_directories(BEFORE "${CMAKE_BINARY_DIR}/include")
  1391. if (NOT APPLE AND NOT QT_ANDROID)
  1392. target_link_libraries(${PACKAGE_NAME} PRIVATE ${wxWidgets_LIBRARIES})
  1393. endif ()
  1394. if (CMAKE_HOST_WIN32)
  1395. target_link_libraries(
  1396. ${PACKAGE_NAME} PRIVATE setupapi.lib "GLU_static" psapi.lib
  1397. iphlpapi.lib # glu32.lib
  1398. )
  1399. # use gdi plus only on MSVC, it is not a free library
  1400. if (MSVC)
  1401. target_link_libraries(${PACKAGE_NAME} PRIVATE gdiplus.lib)
  1402. target_link_libraries(${PACKAGE_NAME} PRIVATE Shcore.lib)
  1403. endif ()
  1404. endif ()
  1405. if (UNIX)
  1406. target_link_libraries(
  1407. ${PACKAGE_NAME} PRIVATE ${OPENGL_LIBRARIES} ${GETTEXT_LIBRARY} SQLITE_CPP
  1408. )
  1409. if (NOT APPLE AND NOT QT_ANDROID AND NOT WIN32 AND NOT X11_FOUND)
  1410. message(STATUS "Did not find x11 libraries")
  1411. message(
  1412. STATUS "support for transparent toolbar in opengl mode not detected"
  1413. )
  1414. endif ()
  1415. endif ()
  1416. # If we build for windows systems, we also include the resource file containing
  1417. # the manifest, icon and other resources
  1418. if (MSVC)
  1419. target_sources(${PACKAGE_NAME} PRIVATE ${CMAKE_BINARY_DIR}/opencpn.rc)
  1420. endif ()
  1421. if (OCPN_BUNDLE_GSHHS)
  1422. set(gshhs data/gshhs/poly-c-1.dat data/gshhs/wdb_borders_c.b
  1423. data/gshhs/wdb_rivers_c.b
  1424. )
  1425. endif ()
  1426. # Various data files
  1427. set(uiData
  1428. resources/bitmaps/styles.xml
  1429. resources/bitmaps/toolicons_journeyman.png
  1430. resources/bitmaps/toolicons_journeyman_flat.png
  1431. resources/bitmaps/toolicons_traditional.png
  1432. resources/bitmaps/iconRMinus.png
  1433. resources/bitmaps/iconRPlus.png
  1434. resources/bitmaps/iconMinimum.png
  1435. resources/bitmaps/iconStandard.png
  1436. resources/bitmaps/iconUserStd.png
  1437. resources/bitmaps/iconAll.png
  1438. resources/bitmaps/DragHandle.svg
  1439. resources/bitmaps/eye.svg
  1440. resources/bitmaps/eyex.svg
  1441. resources/bitmaps/eyeGray.svg
  1442. resources/bitmaps/iENC_All.svg
  1443. resources/bitmaps/iENC_Minimum.svg
  1444. resources/bitmaps/iENC_Standard.svg
  1445. resources/bitmaps/iENC_UserStd.svg
  1446. resources/bitmaps/iENC_RPlus.svg
  1447. resources/bitmaps/iENC_RMinus.svg
  1448. resources/bitmaps/package-x-generic.png
  1449. resources/bitmaps/plus.svg
  1450. )
  1451. set(s57data
  1452. data/s57data/attdecode.csv
  1453. data/s57data/S52RAZDS.RLE
  1454. data/s57data/s57attributes.csv
  1455. data/s57data/s57expectedinput.csv
  1456. data/s57data/s57objectclasses.csv
  1457. data/s57data/rastersymbols-dark.png
  1458. data/s57data/rastersymbols-day.png
  1459. data/s57data/rastersymbols-dusk.png
  1460. data/s57data/chartsymbols.xml
  1461. )
  1462. if (OCPN_BUNDLE_TCDATA)
  1463. set(tcData
  1464. data/tcdata/HARMONICS_NO_US data/tcdata/HARMONICS_NO_US.IDX
  1465. data/tcdata/harmonics-dwf-20210110-free.tcd data/tcdata/README.harmonics
  1466. )
  1467. endif ()
  1468. # Mac has trouble finding libgobject-2.0.dylib We look for it explicitely
  1469. if (xAPPLE)
  1470. # Assume pkg-config is available.
  1471. pkg_search_module(GOBJECT REQUIRED gobject-2.0)
  1472. # MESSAGE (STATUS " GOBJECT: " ${GOBJECT_LDFLAGS})
  1473. target_compile_definitions(${PACKAGE_NAME} PRIVATE ${GOBJECT_LDFLAGS})
  1474. target_link_libraries(${PACKAGE_NAME} PUBLIC "iconv")
  1475. endif ()
  1476. if (WIN32)
  1477. target_sources(${PACKAGE_NAME} PRIVATE app.manifest)
  1478. endif ()
  1479. if (APPLE)
  1480. set_source_files_properties(
  1481. ${gshhs} PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport/gshhs
  1482. )
  1483. set_source_files_properties(
  1484. ${uiData} PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport/uidata
  1485. )
  1486. set_source_files_properties(
  1487. ${s57data} PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport/s57data
  1488. )
  1489. if (OCPN_BUNDLE_TCDATA)
  1490. set_source_files_properties(
  1491. ${tcData} PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport/tcdata
  1492. )
  1493. endif (OCPN_BUNDLE_TCDATA)
  1494. set_source_files_properties(
  1495. data/license.html PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport
  1496. )
  1497. set_source_files_properties(
  1498. data/authors.html PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport
  1499. )
  1500. set_source_files_properties(
  1501. data/opencpn.png PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport
  1502. )
  1503. set_source_files_properties(
  1504. data/CoC-909_2013-InlandECDIS_20170308.pdf
  1505. PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport
  1506. )
  1507. set_source_files_properties(
  1508. data/CoC-1973_2018-InlandECDIS_20220912.pdf
  1509. PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport
  1510. )
  1511. set_source_files_properties(
  1512. ${CMAKE_SOURCE_DIR}/data/ocpn-plugins.xml PROPERTIES MACOSX_PACKAGE_LOCATION
  1513. SharedSupport
  1514. )
  1515. install(FILES ${CMAKE_SOURCE_DIR}/data/ocpn-plugins.xml
  1516. DESTINATION ${PREFIX_PKGDATA}
  1517. )
  1518. target_sources(
  1519. ${PACKAGE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/data/ocpn-plugins.xml
  1520. )
  1521. # Known, downloadable plugin icons
  1522. file(GLOB PLUGIN_ICONS ${CMAKE_SOURCE_DIR}/plugins/icons/*)
  1523. foreach (_pluginIcon ${PLUGIN_ICONS})
  1524. set_source_files_properties(
  1525. ${_pluginIcon} PROPERTIES MACOSX_PACKAGE_LOCATION
  1526. SharedSupport/uidata/plugins
  1527. )
  1528. endforeach ()
  1529. install(DIRECTORY plugins/icons/ DESTINATION ${PREFIX_PKGDATA}/uidata/plugins)
  1530. target_sources(${PACKAGE_NAME} PRIVATE ${PLUGIN_ICONS})
  1531. file(GLOB SOUND_FILES ${CMAKE_SOURCE_DIR}/data/sounds/*)
  1532. foreach (_currentSoundFile ${SOUND_FILES})
  1533. set_source_files_properties(
  1534. ${_currentSoundFile} PROPERTIES MACOSX_PACKAGE_LOCATION
  1535. SharedSupport/sounds
  1536. )
  1537. endforeach ()
  1538. file(GLOB CONFIG_FILES ${CMAKE_SOURCE_DIR}/data/configs/*)
  1539. foreach (_currentConfigFile ${CONFIG_FILES})
  1540. set_source_files_properties(
  1541. ${_currentConfigFile} PROPERTIES MACOSX_PACKAGE_LOCATION
  1542. SharedSupport/configs
  1543. )
  1544. endforeach ()
  1545. if (OCPN_USE_SVG)
  1546. # Traditional theme SVG icons
  1547. file(GLOB TRADITIONAL_SVG_FILES
  1548. "${CMAKE_SOURCE_DIR}/data/svg/traditional/*"
  1549. )
  1550. foreach (_currentSvgFile ${TRADITIONAL_SVG_FILES})
  1551. set_source_files_properties(
  1552. ${_currentSvgFile} PROPERTIES MACOSX_PACKAGE_LOCATION
  1553. SharedSupport/uidata/traditional
  1554. )
  1555. endforeach ()
  1556. # Journeyman theme SVG icons
  1557. file(GLOB JOURNEYMAN_SVG_FILES "${CMAKE_SOURCE_DIR}/data/svg/journeyman/*")
  1558. foreach (_currentSvgFile ${JOURNEYMAN_SVG_FILES})
  1559. set_source_files_properties(
  1560. ${_currentSvgFile} PROPERTIES MACOSX_PACKAGE_LOCATION
  1561. SharedSupport/uidata/journeyman
  1562. )
  1563. endforeach ()
  1564. # Journeyman_flat theme SVG icons
  1565. file(GLOB JOURNEYMAN_FLAT_SVG_FILES
  1566. "${CMAKE_SOURCE_DIR}/data/svg/journeyman_flat/*"
  1567. )
  1568. foreach (_currentSvgFile ${JOURNEYMAN_FLAT_SVG_FILES})
  1569. set_source_files_properties(
  1570. ${_currentSvgFile}
  1571. PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport/uidata/journeyman_flat
  1572. )
  1573. endforeach ()
  1574. # MUI_flat theme SVG icons
  1575. file(GLOB MUI_FLAT_SVG_FILES "${CMAKE_SOURCE_DIR}/data/svg/MUI_flat/*")
  1576. foreach (_currentSvgFile ${MUI_FLAT_SVG_FILES})
  1577. set_source_files_properties(
  1578. ${_currentSvgFile}
  1579. PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport/uidata/MUI_flat
  1580. )
  1581. endforeach ()
  1582. # Default SVG Icons
  1583. file(GLOB DEFAULT_ICON_SVG_FILES "${CMAKE_SOURCE_DIR}/data/svg/markicons/*")
  1584. foreach (_currentSvgFile ${DEFAULT_ICON_SVG_FILES})
  1585. set_source_files_properties(
  1586. ${_currentSvgFile}
  1587. PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport/uidata/markicons
  1588. )
  1589. endforeach ()
  1590. endif (OCPN_USE_SVG)
  1591. install(DIRECTORY data/svg/markicons/
  1592. DESTINATION ${PREFIX_PKGDATA}/uidata/markicons
  1593. )
  1594. install(DIRECTORY data/svg/MUI_flat/
  1595. DESTINATION ${PREFIX_PKGDATA}/uidata/MUI_flat
  1596. )
  1597. set_source_files_properties(
  1598. data/doc/help_web.html PROPERTIES MACOSX_PACKAGE_LOCATION SharedSupport/doc
  1599. )
  1600. if (OCPN_BUNDLE_DOCS)
  1601. set_source_files_properties(
  1602. data/doc/help_en_US.html PROPERTIES MACOSX_PACKAGE_LOCATION
  1603. SharedSupport/doc
  1604. )
  1605. file(GLOB_RECURSE WIKI_DOC_FILES "${CMAKE_SOURCE_DIR}/data/doc/*")
  1606. foreach (_currentWikiDocFile ${WIKI_DOC_FILES})
  1607. file(RELATIVE_PATH _docfileRelPath # Output variable
  1608. "${CMAKE_SOURCE_DIR}/data/doc/" # Base directory
  1609. ${_currentWikiDocFile} # Absolute path to the file
  1610. )
  1611. get_filename_component(_docfileLocation ${_docfileRelPath} DIRECTORY)
  1612. set(_location "SharedSupport/doc/${_docfileLocation}")
  1613. set_source_files_properties(
  1614. ${_currentWikiDocFile} PROPERTIES MACOSX_PACKAGE_LOCATION ${_location}
  1615. )
  1616. endforeach ()
  1617. endif ()
  1618. set_source_files_properties(
  1619. buildosx/opencpn.icns
  1620. PROPERTIES MACOSX_PACKAGE_LOCATION Resources
  1621. )
  1622. set_source_files_properties(
  1623. buildosx/MainMenu.xib
  1624. PROPERTIES MACOSX_PACKAGE_LOCATION Resources/English.lproj
  1625. )
  1626. # These variables get substituted into the Info.plist template file at build
  1627. # time
  1628. set(MACOSX_BUNDLE_ICON_FILE opencpn.icns)
  1629. set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${PACKAGE_VERSION}")
  1630. set(MACOSX_BUNDLE_BUNDLE_NAME "OpenCPN")
  1631. set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.opencpn")
  1632. if (OCPN_BUNDLE_DOCS)
  1633. set(DOC_FILES data/doc/help_web.html data/doc/help_en_US.html
  1634. ${WIKI_DOC_FILES}
  1635. )
  1636. else ()
  1637. set(DOC_FILES data/doc/help_web.html)
  1638. endif ()
  1639. target_sources(
  1640. ${PACKAGE_NAME}
  1641. PRIVATE ${gshhs}
  1642. ${uiData}
  1643. ${s57data}
  1644. ${tcData}
  1645. data/license.html
  1646. data/authors.html
  1647. data/opencpn.png
  1648. data/ocpn-plugins.xml
  1649. data/CoC-909_2013-InlandECDIS_20170308s.pdf
  1650. data/CoC-1973_2018-InlandECDIS_20220912.pdf
  1651. ${SOUND_FILES}
  1652. buildosx/opencpn.icns
  1653. buildosx/MainMenu.xib
  1654. ${TRADITIONAL_SVG_FILES}
  1655. ${JOURNEYMAN_SVG_FILES}
  1656. ${JOURNEYMAN_FLAT_SVG_FILES}
  1657. ${DEFAULT_ICON_SVG_FILES}
  1658. ${MUI_FLAT_SVG_FILES}
  1659. ${DOC_FILES}
  1660. ${CONFIG_FILES}
  1661. )
  1662. install(TARGETS ${PACKAGE_NAME} BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR})
  1663. target_link_libraries(${PACKAGE_NAME} PRIVATE ${wxWidgets_LIBRARIES})
  1664. set_target_properties(
  1665. ${PACKAGE_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST
  1666. "${CMAKE_SOURCE_DIR}/buildosx/Info.plist.in"
  1667. )
  1668. endif ()
  1669. if (QT_ANDROID)
  1670. target_link_libraries(${PACKAGE_NAME} PRIVATE ${wxWidgets_LIBRARIES})
  1671. target_link_libraries(${PACKAGE_NAME} PRIVATE GLESv2 EGL z)
  1672. target_link_libraries(${PACKAGE_NAME} PRIVATE ${OPENGL_LIBRARIES})
  1673. target_link_libraries(${PACKAGE_NAME} PRIVATE NMEA0183)
  1674. endif ()
  1675. # Sanitizers, part 2/2
  1676. if (NOT "${ENABLE_SANITIZER}" MATCHES "none")
  1677. target_link_libraries(${PACKAGE_NAME} PRIVATE -fsanitize=${ENABLE_SANITIZER})
  1678. endif ()
  1679. if (LIBLZMA_FOUND)
  1680. target_link_libraries(${PACKAGE_NAME} PRIVATE ${LIBLZMA_LIBRARY})
  1681. endif ()
  1682. # Add targets used elsewhere, notably by model
  1683. if (QT_ANDROID)
  1684. add_subdirectory(libs/android_jvm)
  1685. endif ()
  1686. add_subdirectory(libs/IXWebSocket)
  1687. add_subdirectory(libs/gdal)
  1688. add_subdirectory(libs/gl_headers)
  1689. add_subdirectory(libs/geoprim)
  1690. add_subdirectory(libs/iso8211)
  1691. add_subdirectory(libs/mDNS)
  1692. set(MSVC_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cache/buildwin/include)
  1693. add_subdirectory(libs/mongoose)
  1694. add_subdirectory(libs/N2KParser)
  1695. add_subdirectory(libs/nmea0183)
  1696. add_subdirectory(libs/observable)
  1697. add_subdirectory(libs/picosha2)
  1698. add_subdirectory(libs/pugixml)
  1699. add_subdirectory(libs/rapidjson)
  1700. add_subdirectory(libs/s52plib)
  1701. add_subdirectory(libs/sound)
  1702. add_subdirectory(libs/wxJSON)
  1703. #
  1704. # Install
  1705. #
  1706. install(FILES data/license.txt DESTINATION ${PREFIX_DATA}/${PACKAGE_NAME})
  1707. if (NOT APPLE)
  1708. if (WIN32)
  1709. set(PREFIX_PKGDATA ".")
  1710. endif ()
  1711. if (WIN32)
  1712. install(TARGETS ${PACKAGE_NAME} RUNTIME DESTINATION ".")
  1713. endif ()
  1714. if (LINUX)
  1715. install(TARGETS ${PACKAGE_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
  1716. install(FILES LINUX_DEVICES.md DESTINATION ${PREFIX_DATA}/${PACKAGE_NAME})
  1717. endif ()
  1718. install(
  1719. FILES ${CMAKE_SOURCE_DIR}/data/ocpn-plugins.xml
  1720. DESTINATION ${PREFIX_PKGDATA}
  1721. )
  1722. install(FILES ${uiData} DESTINATION ${PREFIX_PKGDATA}/uidata)
  1723. install(DIRECTORY data/svg/markicons/
  1724. DESTINATION ${PREFIX_PKGDATA}/uidata/markicons
  1725. )
  1726. if (OCPN_USE_SVG)
  1727. # Traditional theme SVG icons
  1728. install(DIRECTORY data/svg/traditional/
  1729. DESTINATION ${PREFIX_PKGDATA}/uidata/traditional
  1730. )
  1731. install(DIRECTORY data/svg/journeyman/
  1732. DESTINATION ${PREFIX_PKGDATA}/uidata/journeyman
  1733. )
  1734. install(DIRECTORY data/svg/journeyman_flat/
  1735. DESTINATION ${PREFIX_PKGDATA}/uidata/journeyman_flat
  1736. )
  1737. install(DIRECTORY data/svg/MUI_flat/
  1738. DESTINATION ${PREFIX_PKGDATA}/uidata/MUI_flat
  1739. )
  1740. endif ()
  1741. install(FILES ${s57data} DESTINATION ${PREFIX_PKGDATA}/s57data)
  1742. if (OCPN_BUNDLE_TCDATA)
  1743. install(FILES ${tcData} DESTINATION ${PREFIX_PKGDATA}/tcdata)
  1744. endif ()
  1745. if (OCPN_BUNDLE_GSHHS)
  1746. install(FILES ${gshhs} DESTINATION ${PREFIX_PKGDATA}/gshhs)
  1747. endif ()
  1748. file(GLOB LICENSES "${CMAKE_SOURCE_DIR}/COPYING.*")
  1749. install(FILES ${LICENSES} LICENSING DESTINATION "${PREFIX_PKGDATA}")
  1750. install(FILES data/CoC-909_2013-InlandECDIS_20170308s.pdf
  1751. data/CoC-1973_2018-InlandECDIS_20220912.pdf
  1752. DESTINATION ${PREFIX_PKGDATA}
  1753. )
  1754. install(FILES data/copyright DESTINATION ${PREFIX_DATA}/doc/${PACKAGE_NAME})
  1755. install(FILES data/license.html DESTINATION ${PREFIX_PKGDATA})
  1756. install(FILES data/authors.html DESTINATION ${PREFIX_PKGDATA})
  1757. install(FILES data/opencpn.png DESTINATION ${PREFIX_PKGDATA})
  1758. if (PACKAGE_FORMAT EQUAL "DEB")
  1759. install(FILES data/changelog.gz
  1760. DESTINATION ${PREFIX_DATA}/doc/${PACKAGE_NAME}
  1761. )
  1762. else ()
  1763. install(FILES data/changelog DESTINATION ${PREFIX_DATA}/doc/${PACKAGE_NAME})
  1764. endif ()
  1765. install(DIRECTORY data/sounds/ DESTINATION ${PREFIX_PKGDATA}/sounds)
  1766. if (OCPN_BUNDLE_DOCS)
  1767. install(DIRECTORY data/doc/ DESTINATION ${PREFIX_PKGDATA}/doc)
  1768. else ()
  1769. install(FILES data/doc/help_web.html DESTINATION ${PREFIX_PKGDATA}/doc)
  1770. endif ()
  1771. if (UNIX)
  1772. install(FILES data/opencpn.png
  1773. DESTINATION ${PREFIX_DATA}/icons/hicolor/48x48/apps
  1774. )
  1775. install(
  1776. FILES resources/bitmaps/opencpn-64.png
  1777. DESTINATION ${PREFIX_DATA}/icons/hicolor/64x64/apps
  1778. RENAME opencpn.png
  1779. )
  1780. install(FILES resources/bitmaps/other_svg_src/opencpn.svg
  1781. DESTINATION ${PREFIX_DATA}/icons/hicolor/scalable/apps
  1782. )
  1783. install(FILES resources/opencpn.desktop
  1784. DESTINATION ${PREFIX_DATA}/applications
  1785. )
  1786. install(
  1787. FILES ${CMAKE_BINARY_DIR}/opencpn.appdata.xml
  1788. DESTINATION ${PREFIX_DATA}/metainfo
  1789. RENAME opencpn.appdata.xml
  1790. )
  1791. install(FILES opencpn.1 opencpn-cmd.1 DESTINATION ${PREFIX_DATA}/man/man1)
  1792. endif ()
  1793. install(CODE "
  1794. if (EXISTS /lib/udev/rules.d)
  1795. execute_process(
  1796. COMMAND sh -c \"test -w /lib/udev/rules.d 2>/dev/null \"
  1797. RESULT_VARIABLE _rv
  1798. )
  1799. if (_rv EQUAL 0)
  1800. execute_process(COMMAND
  1801. sh -c \"cp ${PROJECT_SOURCE_DIR}/buildlinux/98-sglock-ocpn.rules \
  1802. /lib/udev/rules.d/98-sglock-ocpn.rules\"
  1803. )
  1804. execute_process(COMMAND
  1805. sh -c \"chmod 644 \
  1806. ${PROJECT_SOURCE_DIR}/buildlinux/98-sglock-ocpn.rules\"
  1807. )
  1808. message(STATUS \"Installed udev dongle rule\")
  1809. else ()
  1810. message(STATUS \"Skipped installing udev dongle rule\")
  1811. endif ()
  1812. endif ()
  1813. ")
  1814. endif ()
  1815. #
  1816. # Gettext languages setup.
  1817. #
  1818. find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext)
  1819. if (GETTEXT_XGETTEXT_EXECUTABLE)
  1820. add_custom_command(
  1821. OUTPUT ${CMAKE_SOURCE_DIR}/po/${PACKAGE_NAME}.pot.dummy
  1822. COMMAND
  1823. ${GETTEXT_XGETTEXT_EXECUTABLE} --from-code=iso-8859-1 --force-po
  1824. --package-name=${PACKAGE_NAME} --package-version="${PACKAGE_VERSION}"
  1825. --output=${CMAKE_SOURCE_DIR}/po/${PACKAGE_NAME}.pot --keyword=_ --width=80
  1826. --files-from=${CMAKE_SOURCE_DIR}/po/POTFILES.in
  1827. DEPENDS ${CMAKE_SOURCE_DIR}/po/POTFILES.in
  1828. ${CMAKE_SOURCE_DIR}/po/${PACKAGE_NAME}.pot
  1829. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  1830. COMMENT "pot-update [${PACKAGE_NAME}]: Generated pot file."
  1831. )
  1832. add_custom_target(
  1833. pot-update
  1834. COMMENT "pot-update: Done."
  1835. DEPENDS ${CMAKE_SOURCE_DIR}/po/${PACKAGE_NAME}.pot.dummy
  1836. )
  1837. endif ()
  1838. macro (GETTEXT_UPDATE_PO _potFile)
  1839. set(_poFiles ${_potFile})
  1840. get_filename_component(_absPotFile ${_potFile} ABSOLUTE)
  1841. foreach (_currentPoFile ${ARGN})
  1842. get_filename_component(_absFile ${_currentPoFile} ABSOLUTE)
  1843. get_filename_component(_poBasename ${_absFile} NAME_WE)
  1844. add_custom_command(
  1845. OUTPUT ${_absFile}.dummy
  1846. COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --width=80 --strict --quiet
  1847. --update --backup=none --no-location -s ${_absFile} ${_absPotFile}
  1848. DEPENDS ${_absPotFile} ${_absFile}
  1849. COMMENT "po-update [${_poBasename}]: Updated po file."
  1850. )
  1851. set(_poFiles ${_poFiles} ${_absFile}.dummy)
  1852. endforeach (_currentPoFile)
  1853. add_custom_target(
  1854. po-update
  1855. COMMENT "po-update: Done."
  1856. DEPENDS ${_poFiles}
  1857. )
  1858. endmacro ()
  1859. if (GETTEXT_MSGMERGE_EXECUTABLE)
  1860. file(GLOB PACKAGE_PO_FILES ${CMAKE_SOURCE_DIR}/po/*.po)
  1861. gettext_update_po(
  1862. ${CMAKE_SOURCE_DIR}/po/${PACKAGE_NAME}.pot ${PACKAGE_PO_FILES}
  1863. )
  1864. endif ()
  1865. set(_gmoFiles)
  1866. macro (GETTEXT_BUILD_MO _poFile _lang)
  1867. get_filename_component(_absFile ${_poFile} ABSOLUTE)
  1868. get_filename_component(_poBasename ${_absFile} NAME_WE)
  1869. set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_poBasename}.mo)
  1870. add_custom_command(
  1871. OUTPUT ${_gmoFile}
  1872. COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_absFile}
  1873. COMMAND
  1874. ${CMAKE_COMMAND} -E copy ${_gmoFile}
  1875. ${CMAKE_CURRENT_BINARY_DIR}/Resources/opencpn_${_lang}.lproj/opencpn.mo
  1876. DEPENDS ${_absFile}
  1877. COMMENT "i18n [${_poBasename}]: Created mo file."
  1878. )
  1879. if (APPLE)
  1880. install(
  1881. FILES ${_gmoFile}
  1882. DESTINATION
  1883. ${CMAKE_INSTALL_PREFIX}/bin/OpenCPN.app/Contents/Resources/${_lang}.lproj
  1884. RENAME ${PACKAGE_NAME}.mo
  1885. )
  1886. else ()
  1887. install(
  1888. FILES ${_gmoFile}
  1889. DESTINATION ${PREFIX_DATA}/locale/${_lang}/LC_MESSAGES
  1890. RENAME ${PACKAGE_NAME}.mo
  1891. )
  1892. endif ()
  1893. set(_gmoFiles ${_gmoFiles} ${_gmoFile})
  1894. endmacro ()
  1895. if (GETTEXT_MSGFMT_EXECUTABLE)
  1896. gettext_build_mo(po/opencpn_cs_CZ.po cs)
  1897. gettext_build_mo(po/opencpn_da_DK.po da)
  1898. gettext_build_mo(po/opencpn_de_DE.po de)
  1899. gettext_build_mo(po/opencpn_es_ES.po es)
  1900. gettext_build_mo(po/opencpn_fr_FR.po fr)
  1901. gettext_build_mo(po/opencpn_it_IT.po it)
  1902. gettext_build_mo(po/opencpn_nl_NL.po nl)
  1903. gettext_build_mo(po/opencpn_pl_PL.po pl)
  1904. gettext_build_mo(po/opencpn_ru_RU.po ru)
  1905. gettext_build_mo(po/opencpn_sv_SE.po sv)
  1906. gettext_build_mo(po/opencpn_et_EE.po et)
  1907. gettext_build_mo(po/opencpn_pt_PT.po pt_PT)
  1908. gettext_build_mo(po/opencpn_pt_BR.po pt_BR)
  1909. gettext_build_mo(po/opencpn_nb_NO.po nb_NO)
  1910. gettext_build_mo(po/opencpn_tr_TR.po tr_TR)
  1911. gettext_build_mo(po/opencpn_fi_FI.po fi_FI)
  1912. gettext_build_mo(po/opencpn_el_GR.po el_GR)
  1913. gettext_build_mo(po/opencpn_zh_TW.po zh_TW)
  1914. gettext_build_mo(po/opencpn_zh_CN.po zh_CN)
  1915. gettext_build_mo(po/opencpn_hu_HU.po hu_HU)
  1916. gettext_build_mo(po/opencpn_gl_ES.po gl_ES)
  1917. gettext_build_mo(po/opencpn_ca_ES.po ca_ES)
  1918. gettext_build_mo(po/opencpn_ar_SA.po ar_SA)
  1919. gettext_build_mo(po/opencpn_ja_JP.po ja_JP)
  1920. gettext_build_mo(po/opencpn_vi_VN.po vi_VN)
  1921. gettext_build_mo(po/opencpn_he_IL.po he_IL)
  1922. gettext_build_mo(po/opencpn_en_GB.po en_GB)
  1923. add_custom_target( i18n COMMENT "i18n: Done." DEPENDS ${_gmoFiles})
  1924. if (NOT QT_ANDROID)
  1925. add_dependencies(${PACKAGE_NAME} i18n)
  1926. endif ()
  1927. endif ()
  1928. #
  1929. # Install wxstd.mo in Windows
  1930. #
  1931. if (WIN32)
  1932. file(GLOB WXWIDGETS_MO_FILES
  1933. ${CMAKE_SOURCE_DIR}/buildwin/wxWidgets/locale/*.mo
  1934. )
  1935. foreach (_current_wx_mofile ${WXWIDGETS_MO_FILES})
  1936. get_filename_component(_absFile ${_current_wx_mofile} ABSOLUTE)
  1937. get_filename_component(_mlang ${_absFile} NAME_WE)
  1938. install(
  1939. FILES ${_current_wx_mofile}
  1940. DESTINATION ${PREFIX_DATA}/locale/${_mlang}/LC_MESSAGES
  1941. RENAME wxstd.mo
  1942. PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
  1943. )
  1944. endforeach ()
  1945. endif ()
  1946. #
  1947. # Install wxstd.mo in Mac
  1948. #
  1949. if (APPLE)
  1950. file(GLOB WXWIDGETS_MO_FILES
  1951. ${CMAKE_SOURCE_DIR}/buildosx/wxWidgets/locale/*.mo
  1952. )
  1953. foreach (_current_wx_mofile ${WXWIDGETS_MO_FILES})
  1954. get_filename_component(_absFile ${_current_wx_mofile} ABSOLUTE)
  1955. get_filename_component(_mlang ${_absFile} NAME_WE)
  1956. install(
  1957. FILES ${_current_wx_mofile}
  1958. DESTINATION
  1959. ${CMAKE_INSTALL_PREFIX}/bin/OpenCPN.app/Contents/Resources/${_mlang}.lproj
  1960. RENAME wxstd.mo
  1961. )
  1962. endforeach ()
  1963. endif ()
  1964. #
  1965. # On Windows builds, copy the wxWidgets dlls and helpers to the executable
  1966. # directory
  1967. #
  1968. if (WIN32 AND NOT UNIX)
  1969. if (OCPN_BUNDLE_WXDLLS)
  1970. file(GLOB wxdll_files "${wxWidgets_LIB_DIR}/wxmsw32*u_*.dll"
  1971. "${wxWidgets_LIB_DIR}/wxbase32*u_*.dll"
  1972. )
  1973. file(GLOB wxdll_debug_files "${wxWidgets_LIB_DIR}/wxmsw32*ud_*.dll"
  1974. "${wxWidgets_LIB_DIR}/wxbase32*ud_*.dll"
  1975. )
  1976. list(LENGTH wxdll_files wxdll_count)
  1977. if (wxdll_count LESS 5)
  1978. message(FATAL_ERROR "Could not find all the WX DLLs.")
  1979. endif ()
  1980. list(LENGTH wxdll_debug_files wxdllud_count)
  1981. if (wxdllud_count GREATER 0)
  1982. install(
  1983. FILES ${wxdll_debug_files}
  1984. DESTINATION "."
  1985. CONFIGURATIONS Debug
  1986. )
  1987. install(
  1988. FILES ${wxdll_files}
  1989. DESTINATION "."
  1990. CONFIGURATIONS Release|RelWithDebInfo|MinSizeRel
  1991. )
  1992. else ()
  1993. install(FILES ${wxdll_files} DESTINATION ".")
  1994. endif ()
  1995. message(
  1996. STATUS
  1997. "${wxdll_count} wxWidgets DLLs available to be bundled into the installer package..."
  1998. )
  1999. message(
  2000. STATUS
  2001. "${wxdllud_count} wxWidgets debug DLLs available to be bundled into the installer package..."
  2002. )
  2003. if (OCPN_BUNDLE_WXDLLS AND NOT OCPN_CI_BUILD)
  2004. file(GLOB wxpdb_files "${wxWidgets_LIB_DIR}/wxmsw32*u_*.pdb"
  2005. "${wxWidgets_LIB_DIR}/wxbase32*u_*.pdb"
  2006. )
  2007. file(GLOB wxpdb_debug_files "${wxWidgets_LIB_DIR}/wxmsw32*ud_*.pdb"
  2008. "${wxWidgets_LIB_DIR}/wxbase32*ud_*.pdb"
  2009. )
  2010. list(LENGTH wxpdb_files wxpdb_count)
  2011. list(LENGTH wxpdb_debug_files wxpdbud_count)
  2012. install(
  2013. FILES ${wxpdb_debug_files}
  2014. DESTINATION "."
  2015. CONFIGURATIONS Debug
  2016. )
  2017. install(
  2018. FILES ${wxpdb_files}
  2019. DESTINATION "."
  2020. CONFIGURATIONS Release|RelWithDebInfo|MinSizeRel
  2021. )
  2022. message(
  2023. STATUS
  2024. "${wxpdb_count} wxWidgets PDBs available to be bundled into the installer package..."
  2025. )
  2026. message(
  2027. STATUS
  2028. "${wxpdbud_count} wxWidgets debug PDBs available to be bundled into the installer package..."
  2029. )
  2030. endif ()
  2031. endif ()
  2032. if (OCPN_BUNDLE_VCDLLS)
  2033. file(GLOB vcdll_files "${CMAKE_CURRENT_SOURCE_DIR}/cache/buildwin/vc/*.dll")
  2034. install(FILES ${vcdll_files} DESTINATION ".")
  2035. message(
  2036. STATUS "MSVC redistributable DLLs bundled into the installer package..."
  2037. )
  2038. endif ()
  2039. if (BUNDLE_LIBARCHIVEDLLS)
  2040. file(
  2041. GLOB
  2042. libarchivedll_files
  2043. "${CMAKE_CURRENT_SOURCE_DIR}/cache/buildwin/archive.dll"
  2044. "${CMAKE_CURRENT_SOURCE_DIR}/cache/buildwin/liblzma.dll"
  2045. "${CMAKE_CURRENT_SOURCE_DIR}/cache/buildwin/zlib1.dll"
  2046. )
  2047. install(FILES ${libarchivedll_files} DESTINATION ".")
  2048. message(STATUS "LibArchive DLLs bundled into the installer package...")
  2049. endif ()
  2050. endif ()
  2051. if (APPLE)
  2052. if (OCPN_USE_DEPS_BUNDLE)
  2053. message(status "PATH: ${OCPN_DEPS_BUNDLE_PATH}")
  2054. find_library(
  2055. MPG123
  2056. NAMES libmpg3 mpg123
  2057. HINTS "${OCPN_DEPS_BUNDLE_PATH}/lib"
  2058. NO_DEFAULT_PATH REQUIRED
  2059. )
  2060. else ()
  2061. find_library(MPG123 NAMES libmpg3 mpg123 REQUIRED)
  2062. endif ()
  2063. target_link_libraries(${PACKAGE_NAME} PUBLIC ${MPG123})
  2064. message(STATUS "MPG123: ${MPG123}")
  2065. if (OCPN_USE_DEPS_BUNDLE)
  2066. find_library(
  2067. MP3LAME
  2068. NAMES mp3lame lame
  2069. HINTS "${OCPN_DEPS_BUNDLE_PATH}/lib"
  2070. NO_DEFAULT_PATH REQUIRED
  2071. )
  2072. else ()
  2073. find_library(MP3LAME NAMES mp3lame lame REQUIRED)
  2074. endif ()
  2075. target_link_libraries(${PACKAGE_NAME} PUBLIC ${MP3LAME})
  2076. message(STATUS "MP3LAME: ${MP3LAME}")
  2077. endif ()
  2078. if (MSVC AND OCPN_USE_CRASHREPORT)
  2079. install(FILES ${CMAKE_SOURCE_DIR}/cache/buildwin/crashrpt/CrashRpt1403.dll
  2080. DESTINATION ${PREFIX_PKGDATA}
  2081. )
  2082. install(FILES ${CMAKE_SOURCE_DIR}/cache/buildwin/crashrpt/CrashSender1403.exe
  2083. DESTINATION ${PREFIX_PKGDATA}
  2084. )
  2085. install(FILES ${CMAKE_SOURCE_DIR}/cache/buildwin/crashrpt/crashrpt_lang.ini
  2086. DESTINATION ${PREFIX_PKGDATA}
  2087. )
  2088. install(FILES ${CMAKE_SOURCE_DIR}/cache/buildwin/crashrpt/dbghelp.dll
  2089. DESTINATION ${PREFIX_PKGDATA}
  2090. )
  2091. install(FILES ${CMAKE_SOURCE_DIR}/buildwin/crashrpt/PrivacyPolicy.txt
  2092. DESTINATION ${PREFIX_PKGDATA}
  2093. )
  2094. message(STATUS "CrashRpt bundled into the installer package...")
  2095. endif ()
  2096. # Install glew dll
  2097. if (MSVC AND OCPN_USE_GL)
  2098. install(FILES ${CMAKE_SOURCE_DIR}/cache/buildwin/glew32.dll
  2099. DESTINATION ${PREFIX_PKGDATA}
  2100. )
  2101. endif ()
  2102. if (NOT SKIP_PLUGINS)
  2103. add_subdirectory(plugins)
  2104. endif ()
  2105. #
  2106. # Prepare CPACK configuration
  2107. #
  2108. if (WIN32)
  2109. configure_file(
  2110. ${CMAKE_CURRENT_SOURCE_DIR}/NSIS.template.in.in
  2111. ${CMAKE_BINARY_DIR}/NSIS.template.in COPYONLY
  2112. )
  2113. endif ()
  2114. #
  2115. # Build a CPack driven installer package
  2116. #
  2117. # include (InstallRequiredSystemLibraries)
  2118. set(CPACK_BINDIR "${CMAKE_BINARY_DIR}")
  2119. set(CPACK_PACKAGE_NAME "OpenCPN")
  2120. set(CPACK_PACKAGE_VENDOR "opencpn.org")
  2121. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenCPN ${PACKAGE_VERSION}")
  2122. set(CPACK_PACKAGE_VERSION ${PACKAGE_VERSION})
  2123. set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
  2124. set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
  2125. set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}${VERSION_TAIL})
  2126. set(CPACK_INSTALL_CMAKE_PROJECTS
  2127. "${CMAKE_CURRENT_BINARY_DIR};${PACKAGE_NAME};ALL;/"
  2128. )
  2129. set(CPACK_PACKAGE_EXECUTABLES ${PACKAGE_NAME} "OpenCPN")
  2130. if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/README")
  2131. set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
  2132. set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README")
  2133. endif ()
  2134. set(CPACK_SOURCE_GENERATOR "TGZ")
  2135. # The following components are regex's to match anywhere (unless anchored) in
  2136. # absolute path + filename to find files or directories to be excluded from
  2137. # source tarball created by 'make package_source'.
  2138. set(CPACK_SOURCE_IGNORE_FILES
  2139. "\\\\.flatpak-builder*" "\\\\.git*" "${CMAKE_BINARY_DIR}*"
  2140. )
  2141. #
  2142. # Windows NSIS package setup.
  2143. #
  2144. if (WIN32)
  2145. if (NOT SKIP_VERSION_CONFIG)
  2146. configure_file(
  2147. ${CMAKE_SOURCE_DIR}/resources/opencpn.rc.in
  2148. ${CMAKE_BINARY_DIR}/opencpn.rc
  2149. )
  2150. configure_file(
  2151. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_GERMAN.nsh.in"
  2152. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_GERMAN.nsh"
  2153. @ONLY
  2154. )
  2155. configure_file(
  2156. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_FRENCH.nsh.in"
  2157. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_FRENCH.nsh"
  2158. @ONLY
  2159. )
  2160. configure_file(
  2161. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_CZECH.nsh.in"
  2162. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_CZECH.nsh"
  2163. @ONLY
  2164. )
  2165. configure_file(
  2166. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_DANISH.nsh.in"
  2167. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_DANISH.nsh"
  2168. @ONLY
  2169. )
  2170. configure_file(
  2171. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_SPANISH.nsh.in"
  2172. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_SPANISH.nsh"
  2173. @ONLY
  2174. )
  2175. configure_file(
  2176. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_ITALIAN.nsh.in"
  2177. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_ITALIAN.nsh"
  2178. @ONLY
  2179. )
  2180. configure_file(
  2181. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_DUTCH.nsh.in"
  2182. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_DUTCH.nsh"
  2183. @ONLY
  2184. )
  2185. configure_file(
  2186. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_POLISH.nsh.in"
  2187. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_POLISH.nsh"
  2188. @ONLY
  2189. )
  2190. configure_file(
  2191. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_PORTUGUESEBR.nsh.in"
  2192. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_PORTUGUESEBR.nsh"
  2193. @ONLY
  2194. )
  2195. configure_file(
  2196. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_PORTUGUESE.nsh.in"
  2197. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_PORTUGUESE.nsh"
  2198. @ONLY
  2199. )
  2200. configure_file(
  2201. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_RUSSIAN.nsh.in"
  2202. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_RUSSIAN.nsh"
  2203. @ONLY
  2204. )
  2205. configure_file(
  2206. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_SWEDISH.nsh.in"
  2207. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_SWEDISH.nsh"
  2208. @ONLY
  2209. )
  2210. configure_file(
  2211. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_FINNISH.nsh.in"
  2212. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_FINNISH.nsh"
  2213. @ONLY
  2214. )
  2215. configure_file(
  2216. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_NORWEGIAN.nsh.in"
  2217. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_NORWEGIAN.nsh"
  2218. @ONLY
  2219. )
  2220. configure_file(
  2221. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_CHINESETW.nsh.in"
  2222. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_CHINESETW.nsh"
  2223. @ONLY
  2224. )
  2225. configure_file(
  2226. "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_TURKISH.nsh.in"
  2227. "${CMAKE_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_TURKISH.nsh"
  2228. @ONLY
  2229. )
  2230. endif ()
  2231. # There is a bug in NSI that does not handle full unix paths properly. Make
  2232. # sure there is at least one set of four (4) backlasshes.
  2233. set(CPACK_NSIS_INSTALLED_ICON_NAME "opencpn.exe")
  2234. set(CPACK_NSIS_PACKAGE_NAME_LC "opencpn")
  2235. set(CPACK_NSIS_DIR "${CMAKE_SOURCE_DIR}/buildwin/NSIS_Unicode") # Gunther
  2236. set(CPACK_BUILDWIN_DIR "${CMAKE_SOURCE_DIR}/buildwin") # Gunther
  2237. # These lines set the name of the Windows Start Menu shortcut and the icon
  2238. # that goes with it
  2239. set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_NAME} ${PACKAGE_VERSION}")
  2240. set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/resources/bitmaps\\\\opencpn.ico")
  2241. set(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}_${PACKAGE_VERSION}_setup")
  2242. set(CPACK_RESOURCE_FILE_LICENSE
  2243. "${CMAKE_CURRENT_SOURCE_DIR}/data/license.txt"
  2244. )
  2245. else ()
  2246. set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PACKAGE_NAME})
  2247. set(CPACK_STRIP_FILES "bin/opencpn")
  2248. set(CPACK_SOURCE_STRIP_FILES "")
  2249. set(CPACK_PACKAGE_FILE_NAME
  2250. "${PACKAGE_NAME}_${PACKAGE_VERSION}-${OCPN_PACKAGE_RELEASE}_${ARCH}"
  2251. )
  2252. set(CPACK_RESOURCE_FILE_LICENSE
  2253. "${CMAKE_CURRENT_SOURCE_DIR}/data/license.html"
  2254. )
  2255. endif ()
  2256. if (OCPN_BUNDLE_TCDATA)
  2257. message(STATUS "*** Package will include tide and current data ***")
  2258. else ()
  2259. message(STATUS "*** Package will NOT include tide and current data ***")
  2260. endif ()
  2261. #
  2262. # Appstream data (Linux in general, in particular Flatpak).
  2263. #
  2264. configure_file(
  2265. "${CMAKE_SOURCE_DIR}/resources/opencpn.appdata.xml.in"
  2266. "${CMAKE_BINARY_DIR}/opencpn.appdata.xml" @ONLY
  2267. )
  2268. #
  2269. # Debian package setup
  2270. #
  2271. set(PKG_DESCR
  2272. [=[
  2273. OpenCPN is a concise ChartPlotter/Navigator. The application supports:
  2274. GPS/GPSD Position Input, BSB Raster Chart Display, S57 Vector ENChart
  2275. Display, AIS Input Decoding, Waypoint Autopilot Navigation. ]=]
  2276. )
  2277. if (UNIX AND NOT APPLE)
  2278. set(CPACK_STRIP_FILES ON)
  2279. set(CPACK_GENERATOR ${PACKAGE_FORMAT})
  2280. set(CPACK_PACKAGE_CONTACT "David S. Register ")
  2281. # autogenerate additional dependency information
  2282. set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
  2283. set(CPACK_DEBIAN_PACKAGE_RECOMMENDS ${PACKAGE_RECS})
  2284. if ("${ARCH}" STREQUAL "x86_64")
  2285. set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
  2286. else ()
  2287. set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${ARCH})
  2288. endif ()
  2289. set(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}")
  2290. set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
  2291. set(CPACK_DEBIAN_COMPRESSION_TYPE "xz")
  2292. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenSource Chart Plotter/Navigator")
  2293. set(CPACK_PACKAGE_DESCRIPTION ${PKG_DESCR})
  2294. set(CPACK_PACKAGE_RELOCATABLE OFF)
  2295. set(CPACK_SET_DESTDIR ON)
  2296. set(CPACK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
  2297. endif ()
  2298. #
  2299. # Apple application bundle
  2300. #
  2301. if (APPLE)
  2302. if ($ENV{pkg_mod})
  2303. set(APKG_MOD $ENV{pkg_mod})
  2304. else ()
  2305. set(APKG_MOD 11)
  2306. endif ()
  2307. message(STATUS "MacOS PKG_MOD: ${APKG_MOD}")
  2308. # -- Run the BundleUtilities cmake code
  2309. set(CPACK_BUNDLE_PLIST "${CMAKE_SOURCE_DIR}/buildosx/Info.plist.in")
  2310. set(APPS "\${CMAKE_INSTALL_PREFIX}/bin/OpenCPN.app")
  2311. set(DIRS "/usr/local/lib")
  2312. # INSTALL(DIRECTORY DESTINATION "bin/OpenCPN.app/Contents/Plugins")
  2313. install(
  2314. FILES ${CMAKE_CURRENT_BINARY_DIR}/plugins/dashboard_pi/libdashboard_pi.dylib
  2315. DESTINATION "bin/OpenCPN.app/Contents/Plugins"
  2316. )
  2317. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/plugins/grib_pi/libgrib_pi.dylib
  2318. DESTINATION "bin/OpenCPN.app/Contents/Plugins"
  2319. )
  2320. install(
  2321. FILES ${CMAKE_CURRENT_BINARY_DIR}/plugins/chartdldr_pi/libchartdldr_pi.dylib
  2322. DESTINATION "bin/OpenCPN.app/Contents/Plugins"
  2323. )
  2324. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/plugins/wmm_pi/libwmm_pi.dylib
  2325. DESTINATION "bin/OpenCPN.app/Contents/Plugins"
  2326. )
  2327. set(LIBS
  2328. "\${CMAKE_INSTALL_PREFIX}/bin/OpenCPN.app/Contents/Plugins/libdashboard_pi.dylib"
  2329. "\${CMAKE_INSTALL_PREFIX}/bin/OpenCPN.app/Contents/Plugins/libgrib_pi.dylib"
  2330. "\${CMAKE_INSTALL_PREFIX}/bin/OpenCPN.app/Contents/Plugins/libchartdldr_pi.dylib"
  2331. "\${CMAKE_INSTALL_PREFIX}/bin/OpenCPN.app/Contents/Plugins/libwmm_pi.dylib"
  2332. )
  2333. install(
  2334. CODE "
  2335. include(BundleUtilities)
  2336. set(BU_CHMOD_BUNDLE_ITEMS TRUE)
  2337. fixup_bundle(\"${APPS}\" \"${LIBS}\" \"${DIRS}\")
  2338. "
  2339. COMPONENT Runtime
  2340. )
  2341. configure_file(
  2342. ${PROJECT_SOURCE_DIR}/COPYING.gplv2 ${CMAKE_CURRENT_BINARY_DIR}/GPLv2.txt
  2343. COPYONLY
  2344. )
  2345. configure_file(
  2346. ${CMAKE_CURRENT_SOURCE_DIR}/buildosx/distro.plist.in
  2347. ${CMAKE_CURRENT_BINARY_DIR}/distro.plist
  2348. )
  2349. # Build standard MacOS .dmg
  2350. add_custom_command(
  2351. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}_${PACKAGE_VERSION}.dmg
  2352. COMMAND
  2353. create-dmg --volname "OpenCPN Installer"
  2354. --background ${CMAKE_SOURCE_DIR}/buildosx/background.png --window-pos 200
  2355. 120 --window-size 500 300 --icon-size 80 --icon OpenCPN.app 120 150
  2356. --hide-extension OpenCPN.app --app-drop-link 390 145 --no-internet-enable
  2357. ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}_${PACKAGE_VERSION}.dmg
  2358. ${CMAKE_INSTALL_PREFIX}/bin/
  2359. DEPENDS ${CMAKE_INSTALL_PREFIX}/bin/OpenCPN.app
  2360. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  2361. COMMENT "create-dmg [${PACKAGE_NAME}]: Generated dmg file."
  2362. )
  2363. add_custom_target(
  2364. create-dmg
  2365. COMMENT "create-dmg: Done."
  2366. DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}_${PACKAGE_VERSION}.dmg
  2367. )
  2368. execute_process(
  2369. COMMAND sw_vers -productVersion
  2370. OUTPUT_VARIABLE _product_version
  2371. OUTPUT_STRIP_TRAILING_WHITESPACE
  2372. )
  2373. # Only use main version nr
  2374. string(REGEX REPLACE "\\..*" "" OS_VERS ${_product_version})
  2375. message(STATUS "OS_VERS: ${OS_VERS}, _product_version: ${_product_version}")
  2376. # Build standard installer using pkgbuild/productbuild
  2377. string(CONCAT MACOS_PKG "${CMAKE_CURRENT_BINARY_DIR}"
  2378. "/${PACKAGE_NAME}_${PACKAGE_VERSION}-${OS_VERS}.pkg"
  2379. )
  2380. add_custom_target(
  2381. show-bundled-libs COMMAND ls -l
  2382. /tmp/opencpn/bin/OpenCPN.app/Contents/Frameworks
  2383. )
  2384. add_custom_target(pkg-tmp COMMAND cmake -E make_directory pkg_tmp)
  2385. add_custom_target(
  2386. component-pkg
  2387. COMMAND
  2388. pkgbuild --root /tmp/opencpn/bin/OpenCPN.app --identifier org.opencpn
  2389. --install-location /Applications/OpenCPN.app
  2390. --scripts "${CMAKE_SOURCE_DIR}/buildosx/scripts" OpenCPN.app.pkg
  2391. )
  2392. add_dependencies(component-pkg show-bundled-libs pkg-tmp)
  2393. add_custom_target(
  2394. build-macos-pkg
  2395. COMMAND
  2396. productbuild --distribution distro.plist --version
  2397. ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} --identifier
  2398. org.opencpn ${MACOS_PKG}
  2399. )
  2400. add_dependencies(build-macos-pkg component-pkg)
  2401. add_custom_target(remove-tmp-pkg COMMAND cmake -E rm -f OpenCPN.app.pkg)
  2402. add_dependencies(remove-tmp-pkg build-macos-pkg)
  2403. add_custom_target(macos-pkg)
  2404. add_dependencies(macos-pkg remove-tmp-pkg)
  2405. # Select what to do for the "create-pkg" target
  2406. if ("${APKG_MOD}" EQUAL 11)
  2407. add_custom_target(create-pkg)
  2408. add_dependencies(create-pkg macos-pkg)
  2409. else ()
  2410. message(FATAL_ERROR "Illegal value for pkg_mod environ var: ${APKG_MOD}")
  2411. endif ()
  2412. endif ()
  2413. include(CPack)
  2414. if (MSVC)
  2415. add_custom_command(
  2416. TARGET ${PACKAGE_NAME}
  2417. POST_BUILD
  2418. COMMAND
  2419. ${CMAKE_COMMAND} -E copy_if_different
  2420. "$<TARGET_PDB_FILE:${PACKAGE_NAME}>"
  2421. "$<TARGET_PDB_FILE_DIR:${PACKAGE_NAME}>/${PACKAGE_NAME}-${PACKAGE_VERSION}.pdb"
  2422. )
  2423. endif ()
  2424. # uninstall target
  2425. if (NOT TARGET uninstall)
  2426. configure_file(
  2427. "${CMAKE_SOURCE_DIR}/cmake/uninstall.cmake.in"
  2428. "${CMAKE_BINARY_DIR}/uninstall.cmake" IMMEDIATE @ONLY
  2429. )
  2430. add_custom_target(
  2431. uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/uninstall.cmake
  2432. )
  2433. endif ()
  2434. add_subdirectory(model)
  2435. target_link_libraries(${PACKAGE_NAME} PUBLIC ocpn::model-src ocpn::model)
  2436. if (NOT QT_ANDROID)
  2437. add_subdirectory(cli)
  2438. endif ()
  2439. if (NOT QT_ANDROID AND OCPN_USE_GL)
  2440. add_subdirectory(glutil)
  2441. endif ()
  2442. if (OCPN_BUILD_TEST)
  2443. add_subdirectory(libs/gtest)
  2444. add_subdirectory(test)
  2445. add_custom_target(
  2446. run-tests
  2447. COMMAND ctest -C $<CONFIG> -E tests --timeout 10
  2448. WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/test
  2449. )
  2450. add_dependencies(run-tests tests)
  2451. if (UNIX AND NOT DEFINED ENV{FLATPAK_ID})
  2452. add_dependencies(run-tests ipc-srv-tests)
  2453. endif ()
  2454. if (LINUX)
  2455. add_dependencies(run-tests dbus_tests)
  2456. endif ()
  2457. else ()
  2458. add_custom_target(run-tests COMMAND cmake -E echo "No tests available")
  2459. endif ()
  2460. if (QT_ANDROID)
  2461. target_link_libraries(${PACKAGE_NAME} PUBLIC ocpn::java-jvm)
  2462. target_include_directories(
  2463. ${PACKAGE_NAME}
  2464. PRIVATE ${CMAKE_SOURCE_DIR}/buildandroid/libopenssl/${ARCH}/openssl/include
  2465. )
  2466. target_link_libraries(
  2467. ${PACKAGE_NAME}
  2468. PRIVATE
  2469. ${CMAKE_SOURCE_DIR}/buildandroid/libopenssl/${ARCH}/openssl/lib/libssl.a
  2470. ${CMAKE_SOURCE_DIR}/buildandroid/libopenssl/${ARCH}/openssl/lib/libcrypto.a
  2471. )
  2472. add_definitions(-DMG_ENABLE_OPENSSL)
  2473. endif ()