1
0

coconil-cmake-spark-deb-appimage.patch 108 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759
  1. From cc06baf3b21851b8addc0f691a31541ca436d395 Mon Sep 17 00:00:00 2001
  2. From: coconil <[email protected]>
  3. Date: Tue, 31 Jan 2023 22:17:32 +0800
  4. Subject: [PATCH 01/13] add cmake support
  5. ---
  6. CMakeLists.txt | 2 ++
  7. src/qscint/CMakeLists.txt | 6 +++---
  8. 2 files changed, 5 insertions(+), 3 deletions(-)
  9. diff --git a/CMakeLists.txt b/CMakeLists.txt
  10. index f1d6eea..f1c6d25 100644
  11. --- a/CMakeLists.txt
  12. +++ b/CMakeLists.txt
  13. @@ -53,3 +53,5 @@ install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/linux/usr
  14. include(${PROJECT_SOURCE_DIR}/cmake/package_config.cmake)
  15. include(CPack)
  16. +
  17. +target_link_libraries(${PROJECT_NAME} qscint Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent Qt5::Network Qt5::PrintSupport Qt5::XmlPatterns)
  18. \ No newline at end of file
  19. diff --git a/src/qscint/CMakeLists.txt b/src/qscint/CMakeLists.txt
  20. index b114614..f132dc6 100644
  21. --- a/src/qscint/CMakeLists.txt
  22. +++ b/src/qscint/CMakeLists.txt
  23. @@ -1,5 +1,5 @@
  24. -cmake_minimum_required(VERSION 3.16)
  25. -project(qscintilla2_qt5 CXX)
  26. +cmake_minimum_required(VERSION 3.24)
  27. +project(qscint CXX)
  28. set(CMAKE_AUTOMOC ON)
  29. set(CMAKE_AUTOUIC ON)
  30. @@ -28,7 +28,7 @@ ${PROJECT_SOURCE_DIR}/scintilla/boostregex
  31. target_include_directories(${PROJECT_NAME} PUBLIC
  32. ${PROJECT_SOURCE_DIR}/src
  33. -${PROJECT_SOURCE_DIR}/src/Qsci
  34. +${PROJECT_SOURCE_DIR}/src/Qsci
  35. ${PROJECT_SOURCE_DIR}/scintilla/src
  36. ${PROJECT_SOURCE_DIR}/scintilla/include)
  37. --
  38. 2.20.1
  39. From 7466475538da85ba7eb24024e34b5fde8babe5f9 Mon Sep 17 00:00:00 2001
  40. From: zinface <[email protected]>
  41. Date: Wed, 1 Feb 2023 20:04:05 +0800
  42. Subject: [PATCH 02/13] =?UTF-8?q?repo:=20=E5=BC=95=E5=85=A5=20Spark=20?=
  43. =?UTF-8?q?=E6=9E=84=E5=BB=BA=EF=BC=8C=E6=94=AF=E6=8C=81=E6=9E=84=E5=BB=BA?=
  44. =?UTF-8?q?=20deb?=
  45. MIME-Version: 1.0
  46. Content-Type: text/plain; charset=UTF-8
  47. Content-Transfer-Encoding: 8bit
  48. ---
  49. .gitignore | 54 ++++-
  50. CMakeLists.txt | 36 ++-
  51. Makefile | 61 +++++
  52. assets/spark.png | Bin 0 -> 4959 bytes
  53. cmake/DebPackageConfig.cmake | 323 +++++++++++++++++++++++++++
  54. cmake/SparkDesktopMacros.cmake | 35 +++
  55. cmake/SparkInstallMacrosConfig.cmake | 131 +++++++++++
  56. cmake/package-deb.descript | 45 ++++
  57. cmake/spark-desktop.desktop.in | 12 +
  58. 9 files changed, 682 insertions(+), 15 deletions(-)
  59. create mode 100644 Makefile
  60. create mode 100644 assets/spark.png
  61. create mode 100644 cmake/DebPackageConfig.cmake
  62. create mode 100644 cmake/SparkDesktopMacros.cmake
  63. create mode 100644 cmake/SparkInstallMacrosConfig.cmake
  64. create mode 100644 cmake/package-deb.descript
  65. create mode 100644 cmake/spark-desktop.desktop.in
  66. diff --git a/.gitignore b/.gitignore
  67. index 8d723bc..72fb977 100644
  68. --- a/.gitignore
  69. +++ b/.gitignore
  70. @@ -384,15 +384,45 @@ FodyWeavers.xsd
  71. !.vscode/extensions.json
  72. *.code-workspace
  73. -# Local History for Visual Studio Code
  74. -.history/
  75. -
  76. -# Windows Installer files from build outputs
  77. -*.cab
  78. -*.msi
  79. -*.msix
  80. -*.msm
  81. -*.msp
  82. -
  83. -# JetBrains Rider
  84. -*.sln.iml
  85. +# Local History for Visual Studio Code
  86. +.history/
  87. +
  88. +# Windows Installer files from build outputs
  89. +*.cab
  90. +*.msi
  91. +*.msix
  92. +*.msm
  93. +*.msp
  94. +
  95. +# JetBrains Rider
  96. +*.sln.iml
  97. +
  98. +
  99. +
  100. +# Ignore the build directory generated by the vsocde cmake extension
  101. +build/
  102. +# Ignore the build directory generated by the vsocde clangd extension
  103. +.cache
  104. +
  105. +# Created by https://www.toptal.com/developers/gitignore/api/cmake
  106. +# Edit at https://www.toptal.com/developers/gitignore?templates=cmake
  107. +
  108. +### CMake ###
  109. +CMakeLists.txt.user
  110. +CMakeCache.txt
  111. +CMakeFiles
  112. +CMakeScripts
  113. +Testing
  114. +Makefile
  115. +cmake_install.cmake
  116. +install_manifest.txt
  117. +compile_commands.json
  118. +CTestTestfile.cmake
  119. +_deps
  120. +
  121. +### CMake Patch ###
  122. +# External projects
  123. +*-prefix/
  124. +
  125. +# End of https://www.toptal.com/developers/gitignore/api/cmake
  126. +!/Makefile
  127. diff --git a/CMakeLists.txt b/CMakeLists.txt
  128. index f1c6d25..666fbdb 100644
  129. --- a/CMakeLists.txt
  130. +++ b/CMakeLists.txt
  131. @@ -1,5 +1,5 @@
  132. -cmake_minimum_required(VERSION 3.16)
  133. -project(notepad--)
  134. +cmake_minimum_required(VERSION 3.24)
  135. +project(notepad-- VERSION 1.22.0)
  136. set(CMAKE_AUTOMOC ON)
  137. set(CMAKE_AUTOUIC ON)
  138. @@ -54,4 +54,34 @@ install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/linux/usr
  139. include(${PROJECT_SOURCE_DIR}/cmake/package_config.cmake)
  140. include(CPack)
  141. -target_link_libraries(${PROJECT_NAME} qscint Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent Qt5::Network Qt5::PrintSupport Qt5::XmlPatterns)
  142. \ No newline at end of file
  143. +target_link_libraries(${PROJECT_NAME} qscint Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent Qt5::Network Qt5::PrintSupport Qt5::XmlPatterns)
  144. +
  145. +if(CMAKE_HOST_UNIX)
  146. + include(cmake/SparkInstallMacrosConfig.cmake)
  147. + include(cmake/SparkDesktopMacros.cmake)
  148. + # 内容默认应用名称: Name= 应与项目名称相同
  149. + spark_desktop_macros(
  150. + # 应用名称: Name=
  151. + ${PROJECT_NAME}
  152. + # 应用名称: Name[zh_CN]=
  153. + "Notepad--"
  154. + # 应用说明: Comment=
  155. + "Notepad-- 是一个国产跨平台、简单的文本编辑器。"
  156. + # 应用类型: Type=
  157. + "Application"
  158. + # 执行程序: Exec=
  159. + "notepad--"
  160. + # 图标路径: Icon=
  161. + "/usr/share/notepad--/icons/spark.png"
  162. + # 应用分类: Category=
  163. + "Development"
  164. + )
  165. + spark_install_file(/usr/share/applications/ ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.desktop)
  166. + spark_install_file(/usr/share/notepad--/icons/ assets/spark.png)
  167. + spark_install_target(/usr/bin/ ${PROJECT_NAME})
  168. +
  169. + # 注释行(使用方式)
  170. + find_package(DebPackage PATHS ${CMAKE_SOURCE_DIR})
  171. + add_package_descript(cmake/package-deb.descript)
  172. +
  173. +endif(CMAKE_HOST_UNIX)
  174. diff --git a/Makefile b/Makefile
  175. new file mode 100644
  176. index 0000000..43e849f
  177. --- /dev/null
  178. +++ b/Makefile
  179. @@ -0,0 +1,61 @@
  180. +CPUS=$(shell nproc)
  181. +CALENDAR=$(shell date '+%Y%m%d')
  182. +OSID=$(shell lsb_release -si)
  183. +OSRELEASE=$(shell lsb_release -sr)
  184. +SUFFIX=
  185. +ifneq ("$(OSID)", "")
  186. +SUFFIX=_$(OSID)$(OSRELEASE)
  187. +endif
  188. +
  189. +PROJECT_NAME=notepad--
  190. +PACKAGE_NAME=com.hmja.notepad
  191. +
  192. +all:
  193. + mkdir -p build
  194. + cd build && cmake ..
  195. + cd build && make -j$(CPUS)
  196. +
  197. +run: all
  198. + exec $(shell find build/ -maxdepth 1 -type f -executable | grep $(PROJECT_NAME))
  199. +
  200. +debug:
  201. + mkdir -p build
  202. + cd build && cmake -DCMAKE_BUILD_TYPE=Debug ..
  203. + cd build && make -j$(CPUS)
  204. +
  205. +release:
  206. + mkdir -p build
  207. + cd build && cmake -DCMAKE_BUILD_TYPE=Release -DPACKAGE_SUFFIX="$(SUFFIX)" ..
  208. + cd build && make -j$(CPUS)
  209. +
  210. +package: release
  211. + cd build && make package
  212. + tree build/_CPack_Packages/Linux/DEB/$(PROJECT_NAME)-*
  213. + dpkg-deb --contents build/$(PACKAGE_NAME)_*$(CALENDAR)*$(SUFFIX).deb
  214. + # cd build/_CPack_Packages/Linux/DEB/$(PROJECT_NAME)_*$(CALENDAR)*$(SUFFIX).deb && find .
  215. +
  216. +builddeps:
  217. + cd build && make builddeps
  218. +
  219. +cpus:
  220. + @echo "CPU数量: $(CPUS)"
  221. +
  222. +copytosource:package
  223. + cp build/$(PACKAGE_NAME)_*$(CALENDAR)*.deb .
  224. +
  225. +# 进入 qdebug 模式,在 deepin 中默认被禁用,可 env | grep QT 查看,并在 /etc/X11/Xsession.d/00deepin-dde-env 配置中已定义
  226. +# 1. 禁止 qt 的 debug 打印: qt.*.debug=false
  227. +# qt.qpa.input.events
  228. +# qt.qpa.events
  229. +# 2. 禁止 dtk 的 debug 打印: dtk.*.debug=false
  230. +# dtk.dpluginloader
  231. +# 3. 禁止 qtcreator 本身的 debug 打印
  232. +# qtc.autotest.testcodeparser
  233. +# qtc.clangbackend.server
  234. +# ...
  235. +# 4. 关闭其它的太麻烦了,直接只启用本地 debug
  236. +# .debug=true
  237. +enter-qdebug-mode:
  238. + # 进入新的 bash 环境
  239. + @# export QT_LOGGING_RULES=".debug=true; qt.*.debug=false; dtk.*.debug=false; dde.*.debug=false; qtc*=false; " && bash
  240. + export QT_LOGGING_RULES=".debug=true" && bash
  241. diff --git a/assets/spark.png b/assets/spark.png
  242. new file mode 100644
  243. index 0000000000000000000000000000000000000000..544e2c7cff5f70894e27a7a717d4a62120630b7a
  244. GIT binary patch
  245. literal 4959
  246. zcmZ9Qc|26n`^T?!hOvx&4Pz%{EZLPYvTq^E5@pRcGGvX$AW~VT?0YC8CHu}WL)I*j
  247. zCA+d^OJw_v@Avn|@AZ4V?z!iAo%_7*bMCpH^W6J>;>=8R>1nxX0RW)a*F)YU^_YtW
  248. zrY4=^DWIpMj{2UVE)p04)_~)Bx;9qQ2n|Z_wm$&K2wgO?prUJmq(Kl`-&hB<LJMYK
  249. z;H4PWY#<GBp>=G~+P>c2E<R{L`=N^y+QnJmkq6pcKv&<`%=!rf2LLb=^pRSYLEks+
  250. zJuEHVG9I`5p0%~o`xwP(T(A&BWF})#9Om3~bQ_b(#@9SAhwGar%cpFq%$%?GJzQBD
  251. z^t%0dF=*wD8muRw+g(o51m|ccnE8Hz9D~pmFQqMqR8NPt`aZ@95GBoY%)<s5UuG3-
  252. zH8&0V|Ja-Yuky}6rHyUK_RAqC-|kS+r+)ehbx%+Lhha7VgMsr_00aWHDT62$d9(aF
  253. z!U1cV`EuMgw}GD4t)>7|<?qk1QBcY33S(8F5ArwUXi7fPCW(YRo7<tLi0uxDVj0(x
  254. z_<)l*SC*HNybE?BH(Rz$LC4rr3wa955G0X;EJy0xN_ATM3~{@N^o9Ne<uYS1%xvjV
  255. zouES0hFd~~oOYam0PHA>m)F7F$6%61XMsolUg0zXycp@v@GZ1K>rt9xd?C!>%*+W7
  256. z%C&esu?1QvJQKjm(&8q^?oTJ)%8V0?)|OjY&d?Gr6jy6+xCM5i6!*6NB4P1KRCNm^
  257. zm+NR*M%4c-!-n9r0lIJ!D)W+&T9oD)Dem^7SRik@V(WfPQ@fFKyaf2lH?CLvA5uka
  258. za&warZ&7cj6r);vpGc6CZ?~=95<VC}D!vy*f{QjEl&9OWL;iubp?H5yvEdB%@e6NX
  259. z57kp^2wVcQ3u~hI>k;2K+aF*1m@^PTnvH2@U9bunlhI3nmsfK^BZU;4=_*3}V}PoZ
  260. zEP*COH$^QdyIwzO=Shp{b@@LAC7u=@nYJ8)oEoIduWITqMn>MScBnM|V;V8ajW%>c
  261. z2|9_!;}u5SRyWpkQzR8giy<WH+QY*7;#%0KMPjz2J^$`S;Aj2Q$(O|;?s2!}W-s;l
  262. zu^~Jf@3^eIMr&D_;mxvB-21`xyjo8Mh`|)KZ&GW@tY9Ko+xhEH9q-}Ic$pF6Rb{$J
  263. z6WRQGL}`*GY6-rGR-l>|l$Ivq`@U%TZM4}hv^OUI<i-$GP!{(iq3D;wT5100{_<z8
  264. z=1;Ad?c^U8>k_s0z#=s!u~04W3Iv&C;FbL%51jwmUPHQ@0l~qZwrDUlHbTaRh}I7O
  265. zg75zlU9YVkytJ~+#_*>+av3b*ZLbM`=lrm(GyKlhzDKd&-~YS-XuB{i6aEdZrmT8V
  266. z5=&CIeIGmv+apvfRY7`h1Zf4_L_-7KYf+zDaL#{K)Hw61>q|2q>%TNiMk|sXtmY*1
  267. z`E77tq7vBO#3uo(t!jj^QMa-dh_<S@?yNd3zMLp*QM?3}j{(IjCNs>__m=cxM&AL^
  268. zdT&14OSgK$%!-|9_M)?`i4B)w7eegd!IoH)mWyyhiqc1~EPAqoCCYEgl(hFM{^Ftj
  269. z%GS_$^uT<GuMO-c^$e_!ZI<)tqNempDT6iTHz|9|_cjckvM6YmeEHw;h;Vg`YvL(_
  270. z(jqSectWzGVyL@+N;(xwEU<0OHRyt^OcZ<Qbm(M^U%g>6K)$jtUK69tc1oS-cV3H(
  271. zyzVwJW(p>4KWuO@dx-z65M|t#j~xmYkY<&V$cV9IcL@+9-%Akb(9C^=$km21|8lq_
  272. za=b^e+n~SA!s?z86LD4&0RU2Vl|bwCrvOB*uG>-oaP+AaCy?IW;MZ7A&oS_=puC#x
  273. zTSjKS2X}HZv)}oKicKX7<~q>8hy|~*HpzV*Y^DRSBNNv-=<Mz7m2X=<O(`+?bKF-{
  274. z>R$KtX-5a5FE<rK_;&5d64zhwYmB)DihD|kGMY$s$ypA4DYTWSd;03~Stbic2f`sB
  275. zAwh%dMJa#xYuO@4+Y^@mQ7demfUh*~%iSD#4K60n5j(6;z0A87Nb@>!_Wj#!o0njA
  276. z8JkG4+{e@({dOMVP51|1y`CGI?{rMiLdMQTV)8ojeNwqrgP)*5q}hq9`jG=rE*1L0
  277. z=0gY)xu5I$L0nYIwuM<@k7MqNbid7Ko1mz?Wtyzjo`jUhJJU|J`Jq_(fZ+l%ogp5Y
  278. zIDI`mBjycCE3h-oAO06y%KHv_U0fWu7`0F)$u5yL6u~KnhuEC++z(})gQ{w9X}O1^
  279. ziig+EPJfUA4&ecpZ?0Sc06XsoNMjeO3Wcj3%MW32I2nYaNKiwF#jknm8fO-R8aEHO
  280. zS;P_Zcdx7H>7UoVjHFijGh;WVUGy??)C=6c|6BJ?%amgTP(}HCU2Z0Y^Sx|AO%6>B
  281. z7k8KD-1)Kga0b7Xt>)Jmz><_Svi*-IB6_0ky0@X$d%1Z$EAcD*>w~VW$*SRrQOa6E
  282. z)cKJdzv;DO-USxsZnV8sfR>g0;TF*eXKlHEv~kBDQlVHocet}SvAsd<?82yC)LQ;W
  283. z)r39#Wqj$`6kE-tmwVMDs-}*UN680yV|?4qFL>I1E^G1doNa$er}pksd?U1pF|_rB
  284. zSIJIEOQLI~-<DjQJQ8&;nMSY8T27<NNl5c#E}S#wNzCQvhkqlEIn<jTityd}$UF=$
  285. z<XI5Ea=B|>J9cO}P)Oz~yJ4z~jwPCIW7GR>tKG}oJGSkdoz};#7?(Sg>_x?Y_Q?4k
  286. zZ$BO!ta2Sdt}R&N@%WDQoxFGNn8p;VW$7qF|8D7og^|0?JUW*}Y|jx!#LUqPlwg=m
  287. zRt9aEBD1%*_tO_~T=|(R%DbCN?p_VFK+vzERN1}RWAZ6OAYYD(J}CcnVj9+as%G)o
  288. z;NJXAE1<2%q6D=&D&c&^K7J$1uCL+uS>u|xgNGNU%c~o5r72Q`D?M*NaI@;bFQ#CT
  289. zV0IV|1Ll4vb*8mCG70}W_>J!pbL`q(Mk#Luq5Ho-?sljN6JfW)-Tyt?3`DZ%L<hO-
  290. zm1%2QcpEFqC@DA&Y)noZo<L3wmXhWO7T5CLyr%;aQ&VF{Kezq9Z=e-t6lGcYBlO&>
  291. z>1cfFaA%b9aDM4sjzPiuCSI52<vO<;a(uRp40{~Kn6LBMmPVEeHJcOgypIw^HdR}0
  292. zm6LbOEkgM=13_yKJS&9@eZ|7<X9r<lqI?mrld4&}+y)ocsy*K}qL^g986$Oc82=ro
  293. zuC2p`f>j;PmRFq03dvd{@)=@Z9{wG$dz~4@#t3rj;1m%CZ{=~k9~XcBC6v7Nc<RUf
  294. za0fm?Azz;LlJ)Y#jjF*)x4$yVmk#DrhOl)`Kk7jI4dJu{T@8Dun*0WoGkW%6p%IA#
  295. zwzFR1?;{r8naAakq}Ot?>kqV@1WVYQ<43f3{9(XPWS>EN{EO~*-CK*bt;ZS;!OLuY
  296. z87ft)RVyp(Cw{BC?#*W-X}?E8n+mG`{Ikbd@Mf3BkFQ_T3aIyS+g0*qIBMqV83`?o
  297. zX*3SoyLQT=V65w9M3)n><3cpp4wMiSNQ6I0WTSfL@yq6O5RJ^;rpPEzOSf?<#OEal
  298. z#JE8?_%;i?y7A-hXB(+R7p{hi!m)9NPT7A;G|icpHm~w<e;6$!Y4Fb<`kxOQK~ik7
  299. z2qb>S^k`I({`l+|qO9g~*i~G*9imYv^HH~-3PeB-S_xwv+Y2l=g6>lXZk|B1v+dn|
  300. zeA>r~Z}f3>@r<u`RNC~JSzXHVKWuV9PJevXSM)4ETvGjoXTP+@Sm!4fMnM%7F8Iff
  301. zb>Byy3Q<u#`SlY{K^5Dg)A{NK6p<$`7p6%c+oJK*xb-{t=b^TC*q$w1kQI7~<=I#n
  302. zUsrx-EC2+C9;adF_CoSYvo)?|_N_Pw%krKb00Zo)kx)$aOO2R5(5K_Eb(0c#$B5sg
  303. z{0z_oksNnVsOYo_E#b$gov$vI);T=pzwd=%0b+vx5R`k((5OLUU}$(4UhG+Kr*w?}
  304. zJ?oUew851nEwl58vi2;*E5|K?7<%F-)kCDbPq*w+RQGiP>&w80&#K>pvR%5geJnqq
  305. z#YL_Lw5jl$vkg7ZRPvcNku1Nz{`lM2`2I<R--ltN0hN~4vHK*U?_%TU@<IG~k|O@%
  306. znoTwT&;f1hd-Fe&&gpyQWo1oNlp#yTCg)~Y#%qU+b`54q1>+BH-`3Ba?R1ny-~VYe
  307. z9l%0>oH`pOV?m#)LN)yxXMS#M>?$?Ja6PLFE);UCNl#M06nrh>lc`K1PMyM&Ka>tI
  308. zyKVLSSwJ-z2RX<M$Fc<(rS~fTW{%nyS1=}&<eqVbw)PSJ<ep)k90YElR8ezf%^Lc)
  309. zK7m(V2eK4@R)4svw76Xh8k(GJt$8#twX<q^25G1`_B?J<$Kz*ToHDUP1f|Y;lv8Ey
  310. z@>NRh*UcPO%t2{i@X_0uuwJ6@h;-=Qef3g6X8cFUHPoCZIv{}R78rZ%99agCe;SpR
  311. z2&R5q?E=vp9E`14e_L9iWfefrys(&*EXOenhi}(uR8D%;1^v32tF*i$meYY6!3~@Q
  312. zv5OSB5c`O2eYdLw^yThU*z33iu!U)sm(UUi!Yh5@S`weCs{BaFFDP7dWAap2{nG=s
  313. zg+-P;PwqQ+?wHv<WGCsCsCO4rx|Wd_14)@oaLWm2&kft9v8-l^{=qia<93z$CT*z^
  314. z*q2JT%@xykw-Ow2s?^%W_=BG?$=o_stHxWYMy+|vajaCg^4_v!TByq*Mc@g$G@in+
  315. zYNuZb6#9Mik)Vb&y{T`IPuoggq35^!q9Us2#>S{X^xRx~)ampA>1zW`P2@zwfa|>{
  316. z(Zt?9q>hUSNyY-w8WjF3)S{^{Y;7-zeNdEWXCYNlYE#WdCdLmAQQa{ib}eB{46!Vm
  317. zo13!fMtVj@*A05r-xRqe1O+nR=OyKWG>u1mlD&rJ7WUEOHCORSf`H4G9m&D*U>eu{
  318. zLp6o#gU{59h79h}@mqyQxAYnwjZ3|e)+cm~c9C*PmcN-nJ13-pb9}j+aMZB3eWbuU
  319. z(aP`J@@Js(3eo*K%?H@(M#W~b(~+qW`F;+iobQ&M*W>{=WjBNNZqtpbh4N5N(I2dG
  320. z-RX`fI|JPp?}OI)XaR2iVs;j=E!yAobeUouDw>}0b0z1W+MTAGY0eJ{GDB$rxn+Jx
  321. zijgtNgG}Ip-xgzR(6Y<B6j5&7I?EKz2e+k2gn|!#VFBU$FP~`ekpaTJkZ6yKe@hcz
  322. z0&P<dte_M3j=c?L(KKla=JLCh$&q23=Ki1!(x1)bR{e(s(~5Hx!^RaGOirY(Ya+~q
  323. zTax0op$Cq0B+JhX=8V5lAHJ;;{jP&Y^DwLVk?U_UN+40B#x_l|2@WMt@X^?PUm5R`
  324. zka5Zoe%Mb;=NtBYJRMnP9OukRlM*dPy%;#8-SK6r$;j&qkHb)1d#Z^N<KZr2!&#Pj
  325. zIU-G_uQVE_d}&k&{6RLLsXdWz{x!xRnx?axhpuNik+1!(RuG-vy%XmTtmxPBGjh&s
  326. z%2Mr?Ut8IWv!*#|Vmm`90TQDH+;(IJMHnN3{zDQxfmd>w>ce#I{RXF)m?YpDnSx1P
  327. z-qxP|)1Pe80-2Yo{|kjzD-b|ra*a%GbQ-JEf<BbF&h$&RrZ-+pVa7@^kGNqEe<rct
  328. z-kwj~m}xv3un)%C!WKTK+rEbQ$D;L=|3ipou){Jid{G5mhMkg6p^%}xPG=SSMvT+>
  329. zY4Ef^R`Uo`;5%GzqsAjSR8OWeT$^xkT*!`awX@U|_Abd2Kni%MHCjtQr!HimpSd78
  330. zqrPOZv^3?zw<Q83PJS%)jk5~sW5wL%>eIu9Gt!GTOD19I)$#R&XHcKG{N6t4Uzm)%
  331. z_&ik-;lla8ao5f-XCXafQiDpVG*V0{N!aCZPn=1CN`%)rVO5b3-l1<&5Rm>dgqG6&
  332. zi6I?9NDN#D1uh~vl;mU=49d2IlV^tnzNl6O2YpihPema^^jse;K;WdUa}|$oaghqg
  333. z(6Awt@Duo-@b4d^62bJ31eGM@W)0Qd@X!Ndd;7ddj(j^*YY2<F9B0=q{CkRTYlO1D
  334. zGl*<!ByB1D*e5nwTT@}02EOS{{EEVld=V|ut?N{K!<D?M$QX97EGNgVZS|_~peG9q
  335. zL$e2NzJNfu_N=TG$8b>nz}q(w%?j=RPLP@eEF|B$PQ2KtCtcE0TG0n}qx$Q0g;>#Q
  336. zXb4R~mYm3CJ1RdzfK4TCyeNO)4km{6`QK7Rtf74G7sV*O8|HzS0B>>4yF}W2o(lp*
  337. zM{UWrv+Ba@vnVNI88u6!KF%=Wbx&cqT*am6q30wD#F98KVc5!5oJkm|LweHam10~r
  338. zX@~3#%zVK@yDeBv6!qOETx37pSa`UBTxI#cHI-Sl3=?)E1K4yNsZ5YEKwM8qGV1Vn
  339. zk8qYSbHYB+UTkQmS<k~+_u?XWiR}U~EWCgOKyF#9aFf?0NFlo?l9dJq7v*7@BT&B>
  340. t;Jjx^&~6n@&egfT2m_h_UkqA5Co_+SJESY3=}2`iKwrlMS%GlG{15vgE&>1m
  341. literal 0
  342. HcmV?d00001
  343. diff --git a/cmake/DebPackageConfig.cmake b/cmake/DebPackageConfig.cmake
  344. new file mode 100644
  345. index 0000000..cfba051
  346. --- /dev/null
  347. +++ b/cmake/DebPackageConfig.cmake
  348. @@ -0,0 +1,323 @@
  349. +cmake_minimum_required(VERSION 3.0.0)
  350. +
  351. +# function(add_deb_package PACKAGE_NAME PACKAGE_VERSION PACKAGE_MAINTAINER PACKAGE_EMAIL PACKAGE_SHORT_DESCRIPTION PACKAGE_LONG_DESCRIPTION)
  352. +
  353. +# endfunction(add_deb_package PACKAGE_NAME PACKAGE_VERSION PACKAGE_MAINTAINER PACKAGE_EMAIL PACKAGE_SHORT_DESCRIPTION PACKAGE_LONG_DESCRIPTION)
  354. +
  355. +# if(add_deb_package VALUE) set(Package ${VALUE} PARENT_SCOPE) endif(add_deb_package VALUE)
  356. +# if(add_deb_version VALUE) set(Version ${VALUE} PARENT_SCOPE) endif(add_deb_version VALUE)
  357. +# if(add_deb_maintainer VALUE) set(Maintainer ${VALUE} PARENT_SCOPE) endif(add_deb_maintainer VALUE)
  358. +# if(add_deb_email VALUE) set(Email ${VALUE} PARENT_SCOPE) endif(add_deb_email VALUE)
  359. +# if(add_deb_descrition VALUE) set(Descrition ${VALUE} PARENT_SCOPE) endif(add_deb_descrition VALUE)
  360. +# if(add_deb_detail VALUE) set(Detail ${VALUE} PARENT_SCOPE) endif(add_deb_detail VALUE)
  361. +
  362. +
  363. +# set(Package "")
  364. +# set(Version "")
  365. +# set(Architecture "")
  366. +# set(Maintainer "")
  367. +# set(Email "")
  368. +# set(Descrition "")
  369. +
  370. +function(find_str _IN _SEP _OUT)
  371. + string(FIND "${_IN}" "${_SEP}" _TMP)
  372. + set(${_OUT} ${_TMP} PARENT_SCOPE)
  373. +endfunction(find_str _IN _SEP _OUT)
  374. +
  375. +
  376. +function(find_next _IN _OUT)
  377. + find_str("${_IN}" "\n" _TMP)
  378. + set(${_OUT} ${_TMP} PARENT_SCOPE)
  379. +endfunction(find_next _IN _OUT)
  380. +
  381. +function(sub_next _IN _INDEX _OUT __OUT)
  382. + find_next(${_IN} _NEXTINDEX)
  383. + string(SUBSTRING "${_IN}" ${_INDEX} ${_NEXTINDEX} _TMP)
  384. + math(EXPR _NEXTINDEX ${_NEXTINDEX}+1)
  385. + string(SUBSTRING "${_IN}" ${_NEXTINDEX} -1 __TMP)
  386. + set(${_OUT} ${_TMP} PARENT_SCOPE)
  387. + set(${__OUT} ${__TMP} PARENT_SCOPE)
  388. +endfunction(sub_next _IN _INDEX _OUT)
  389. +
  390. +function(trim_str _IN _OUT)
  391. + string(STRIP "${_IN}" _TMP)
  392. + set(${_OUT} ${_TMP} PARENT_SCOPE)
  393. +endfunction(trim_str _IN _OUT)
  394. +
  395. +function(split_str _IN _SEP _OUT)
  396. + string(FIND "${_IN}" "${_SEP}" _TMP_INDEX)
  397. + if(NOT _TMP_INDEX EQUAL -1)
  398. + string(SUBSTRING "${_IN}" 0 ${_TMP_INDEX} _TMP)
  399. + math(EXPR _TMP_INDEX ${_TMP_INDEX}+1)
  400. + string(SUBSTRING "${_IN}" ${_TMP_INDEX} -1 __TMP)
  401. + set(${_OUT} "${_TMP};${__TMP}" PARENT_SCOPE)
  402. + else()
  403. + set(${_OUT} ${_IN} PARENT_SCOPE)
  404. + endif(NOT _TMP_INDEX EQUAL -1)
  405. +endfunction(split_str _IN _SEP _OUT)
  406. +
  407. +function(split_str_p _IN _SEP _OUT __OUT)
  408. + split_str("${_IN}" "${_SEP}" _TMP)
  409. + list(GET _TMP 0 __TMP)
  410. + list(GET _TMP 1 ___TMP)
  411. + set(${_OUT} ${__TMP} PARENT_SCOPE)
  412. + set(${__OUT} ${___TMP} PARENT_SCOPE)
  413. +endfunction(split_str_p _IN _SEP _OUT __OUT)
  414. +
  415. +function(split_str_n _IN _SEP _OUT _N)
  416. + if(_N GREATER 1)
  417. + set(_C ${_N})
  418. + set(_RET "")
  419. + set(_NEXT ${_IN})
  420. + while(NOT _C EQUAL 0)
  421. + split_str("${_NEXT}" "${_SEP}" _TMP)
  422. + list(LENGTH _TMP _TMP_LEN)
  423. + if(_TMP_LEN EQUAL 2)
  424. + list(GET _TMP 0 __TMP)
  425. + list(GET _TMP 1 _NEXT)
  426. + list(APPEND _RET ${__TMP})
  427. + else()
  428. + break()
  429. + endif(_TMP_LEN EQUAL 2)
  430. + math(EXPR _C "${_C}-1")
  431. + endwhile(NOT _C EQUAL 0)
  432. + list(APPEND _RET ${_NEXT})
  433. + set(${_OUT} ${_RET} PARENT_SCOPE)
  434. + else()
  435. + split_str("${_IN}" "${_SEP}" _TMP)
  436. + set(${_OUT} ${_TMP} PARENT_SCOPE)
  437. + endif(_N GREATER 1)
  438. +endfunction(split_str_n _IN _SEP _OUT _N)
  439. +
  440. +
  441. +function(set_package_vars _IN_KEY _IN_VAL)
  442. +
  443. + # trim_str("${_IN_KEY}" _IN_KEY)
  444. +
  445. + find_str("${_IN_KEY}" "Type" _Type)
  446. + if(_Type EQUAL "0")
  447. + string(TOUPPER "${_IN_VAL}" _IN_VAL_UPPER)
  448. + string(TOLOWER "${_IN_VAL}" _IN_VAL_LOWER)
  449. + set(CPACK_GENERATOR "${_IN_VAL_UPPER}" PARENT_SCOPE)
  450. + message("--> 软件包类型: ${_IN_VAL_LOWER}")
  451. + endif(_Type EQUAL "0")
  452. +
  453. + find_str("${_IN_KEY}" "Package" _Package)
  454. + if(_Package EQUAL "0")
  455. + if(_IN_VAL STREQUAL "auto")
  456. + set(CPACK_DEBIAN_PACKAGE_NAME "${PROJECT_NAME}" PARENT_SCOPE)
  457. + else()
  458. + set(CPACK_DEBIAN_PACKAGE_NAME "${_IN_VAL}" PARENT_SCOPE)
  459. + endif(_IN_VAL STREQUAL "auto")
  460. + message("--> 软件包名: ${_IN_VAL}")
  461. + endif(_Package EQUAL "0")
  462. +
  463. + find_str("${_IN_KEY}" "Version" _Version)
  464. + if(_Version EQUAL "0")
  465. + if(_IN_VAL STREQUAL "auto")
  466. + set(CPACK_DEBIAN_PACKAGE_VERSION "${PROJECT_VERSION}" PARENT_SCOPE)
  467. + else()
  468. + set(CPACK_DEBIAN_PACKAGE_VERSION "${_IN_VAL}" PARENT_SCOPE)
  469. + endif(_IN_VAL STREQUAL "auto")
  470. +
  471. + message("--> 软件版本: ${_IN_VAL}")
  472. + endif(_Version EQUAL "0")
  473. +
  474. + find_str("${_IN_KEY}" "CalVer" _CalVer)
  475. + if(_CalVer EQUAL "0")
  476. + set(CalVer "${_IN_VAL}" PARENT_SCOPE)
  477. + message("--> 日历化版本: ${_IN_VAL}")
  478. + endif(_CalVer EQUAL "0")
  479. +
  480. + find_str("${_IN_KEY}" "Architecture" _Architecture)
  481. + if(_Architecture EQUAL "0")
  482. + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${_IN_VAL}" PARENT_SCOPE)
  483. + if(_IN_VAL STREQUAL "auto")
  484. + execute_process(
  485. + COMMAND dpkg --print-architecture
  486. + OUTPUT_VARIABLE _RETV
  487. + OUTPUT_STRIP_TRAILING_WHITESPACE
  488. + )
  489. + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${_RETV}" PARENT_SCOPE)
  490. + endif(_IN_VAL STREQUAL "auto")
  491. + message("--> 软件架构: ${_IN_VAL}")
  492. + endif(_Architecture EQUAL "0")
  493. +
  494. + find_str("${_IN_KEY}" "Priority" _Priority)
  495. + if(_Priority EQUAL "0")
  496. + set(CPACK_DEBIAN_PACKAGE_PRIORITY "${_IN_VAL}" PARENT_SCOPE)
  497. + message("--> 优先级: ${_IN_VAL}")
  498. + endif(_Priority EQUAL "0")
  499. +
  500. + find_str("${_IN_KEY}" "Depends" _Depends)
  501. + if(_Depends EQUAL "0")
  502. + set(CPACK_DEBIAN_PACKAGE_DEPENDS "${_IN_VAL}" PARENT_SCOPE)
  503. + message("--> 软件依赖: ${_IN_VAL}")
  504. + endif(_Depends EQUAL "0")
  505. +
  506. + find_str("${_IN_KEY}" "Maintainer" _Maintainer)
  507. + if(_Maintainer EQUAL "0")
  508. + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${_IN_VAL}" PARENT_SCOPE)
  509. + message("--> 软件维护者: ${_IN_VAL}")
  510. + endif(_Maintainer EQUAL "0")
  511. +
  512. + find_str("${_IN_KEY}" "Homepage" _Homepage)
  513. + if(_Homepage EQUAL "0")
  514. + set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${_IN_VAL}" PARENT_SCOPE)
  515. + message("--> 软件主页: ${_IN_VAL}")
  516. + endif(_Homepage EQUAL "0")
  517. +
  518. + find_str("${_IN_KEY}" "Recommends" _Recommends)
  519. + if(_Recommends EQUAL "0")
  520. + set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "${_IN_VAL}" PARENT_SCOPE)
  521. + message("--> 软件建议: ${_IN_VAL}")
  522. + endif(_Recommends EQUAL "0")
  523. +
  524. +endfunction(set_package_vars _IN_KEY _IN_VAL)
  525. +
  526. +# 定义一个自定义(add_package_descript)函数
  527. +# 用于按特定配置约定自动化构建软件包配置
  528. +function(add_package_descript IN_DES)
  529. + set(PACKAGE_DES_PATH "${IN_DES}")
  530. +
  531. + if(EXISTS ${IN_DES})
  532. +
  533. + elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${IN_DES}")
  534. + set(PACKAGE_DES_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${IN_DES}")
  535. + else()
  536. + message(FATAL_ERROR "!! Not Found Path: ${PACKAGE_DES_PATH}")
  537. + return()
  538. + endif(EXISTS ${IN_DES})
  539. +
  540. + file(READ ${PACKAGE_DES_PATH} DES_CONTENT)
  541. + trim_str("${DES_CONTENT}" DES_CONTENT)
  542. +
  543. + ################## 解析 ##################
  544. +
  545. + sub_next(${DES_CONTENT} NEXT_INDEX DES_LINE DES_CONTENT)
  546. + set(PREV_DES "")
  547. + while(NOT DES_LINE STREQUAL "${PREV_DES}")
  548. + # 检查该描述行是否是 # 注释开头,是的话将跳过该行
  549. + find_str("${DES_LINE}" "#" _COMMENT)
  550. + if(_COMMENT EQUAL "0")
  551. + message("--> !!!!!!! ${DES_LINE}")
  552. + sub_next(${DES_CONTENT} NEXT_INDEX DES_LINE DES_CONTENT)
  553. + continue()
  554. + endif(_COMMENT EQUAL "0")
  555. +
  556. + # 检查该描述行是否是 Descrition 开头,是的话说明描述结尾了
  557. + find_str("${DES_LINE}" "Descrition" _DESCRIPTION)
  558. + if(_DESCRIPTION EQUAL "0")
  559. + break()
  560. + endif(_DESCRIPTION EQUAL "0")
  561. +
  562. + split_str_n("${DES_LINE}" ":" _TMP 1)
  563. + list(LENGTH _TMP _TMP_LEN)
  564. +
  565. + if(_TMP_LEN EQUAL 2)
  566. + split_str_p("${DES_LINE}" ":" _TMP __TMP)
  567. + trim_str("${__TMP}" __TMP)
  568. + string(LENGTH "${__TMP}" __TMP_LENGTH)
  569. + if(NOT __TMP_LENGTH EQUAL "0")
  570. + set_package_vars("${_TMP}" "${__TMP}")
  571. + endif(NOT __TMP_LENGTH EQUAL "0")
  572. + endif(_TMP_LEN EQUAL 2)
  573. +
  574. + # 记录当前行,获取下一行,可能是已经结尾了(将保持重复行)
  575. + set(PREV_DES "${DES_LINE}")
  576. + sub_next(${DES_CONTENT} NEXT_INDEX DES_LINE DES_CONTENT)
  577. + endwhile(NOT DES_LINE STREQUAL "${PREV_DES}")
  578. +
  579. +
  580. + # 再一次检查该描述行是否是 Descrition 开头,是的话将进行分析描述行
  581. + find_str("${DES_LINE}" "Descrition" _DESCRIPTION)
  582. + if(_DESCRIPTION EQUAL "0")
  583. + split_str_p("${DES_LINE}" ":" _TMP __TMP)
  584. + trim_str("${__TMP}" __TMP)
  585. + set(Descrition ${__TMP})
  586. + set(PREV_DES_LINE "")
  587. + while(NOT PREV_DES_LINE STREQUAL DES_LINE)
  588. + if(NOT PREV_DES_LINE STREQUAL "")
  589. + set(Descrition "${Descrition}\n${DES_LINE}")
  590. + endif(NOT PREV_DES_LINE STREQUAL "")
  591. + set(PREV_DES_LINE "${DES_LINE}")
  592. + sub_next(${DES_CONTENT} NEXT_INDEX DES_LINE DES_CONTENT)
  593. + endwhile(NOT PREV_DES_LINE STREQUAL DES_LINE)
  594. + # set(Descrition "${Descrition}")
  595. + message("--> 软件说明: ${Descrition}")
  596. +
  597. + set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${Descrition})
  598. + endif(_DESCRIPTION EQUAL "0")
  599. +
  600. + ##################### deb #####################
  601. + # ARCHITECTURE
  602. + if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64")
  603. + set(ARCHITECTURE "amd64")
  604. + elseif(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "aarch64")
  605. + set(ARCHITECTURE "arm64")
  606. + endif()
  607. +
  608. + #################### Calendar Version ###################
  609. + if("${CalVer}" STREQUAL "true")
  610. + string(TIMESTAMP BUILD_TIME "%Y%m%d")
  611. + set(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_DEBIAN_PACKAGE_VERSION}-${BUILD_TIME}")
  612. + endif("${CalVer}" STREQUAL "true")
  613. +
  614. +
  615. +
  616. + ##################### deb file name #####################
  617. + set(_Package "${CPACK_DEBIAN_PACKAGE_NAME}")
  618. + set(_Version "${CPACK_DEBIAN_PACKAGE_VERSION}")
  619. + set(_Architecture "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
  620. +
  621. + set(_DebFileName
  622. + "${_Package}_${_Version}_${_Architecture}${PACKAGE_SUFFIX}.deb"
  623. + )
  624. + set(CPACK_DEBIAN_FILE_NAME ${_DebFileName})
  625. +
  626. +
  627. + # set(CPACK_DEBIAN_PACKAGE_NAME "${Package}")
  628. + # set(CPACK_DEBIAN_PACKAGE_VERSION "${Version}")
  629. + # set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${Architecture}")
  630. + # set(CPACK_DEBIAN_PACKAGE_DEPENDS "${Depends}")
  631. + # set(CPACK_DEBIAN_PACKAGE_PRIORITY "${Priority}")
  632. + # set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${Maintainer}")
  633. + # set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${Descrition}")
  634. +
  635. + # 设置即将使用的标准脚本
  636. + # set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
  637. + # "${CMAKE_SOURCE_DIR}/config/DEBIAN/preinst"
  638. + # "${CMAKE_SOURCE_DIR}/config/DEBIAN/postinst"
  639. + # "${CMAKE_SOURCE_DIR}/config/DEBIAN/prerm"
  640. + # "${CMAKE_SOURCE_DIR}/config/DEBIAN/postrm"
  641. + # )
  642. +
  643. + # 设置为ON,以便使用 dpkg-shlibdeps 生成更好的包依赖列表。
  644. + # set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
  645. + # set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)
  646. + # set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY "=")
  647. +
  648. + include(CPack)
  649. +
  650. +endfunction(add_package_descript IN_DES)
  651. +
  652. +
  653. +# TODO:
  654. +# CPACK_GENERATOR
  655. +# CPACK_DEBIAN_FILE_NAME - n
  656. +# CPACK_DEBIAN_PACKAGE_NAME - y
  657. +# CPACK_DEBIAN_PACKAGE_VERSION - y
  658. +# CPACK_DEBIAN_PACKAGE_ARCHITECTURE - y(auto)
  659. +# CPACK_DEBIAN_PACKAGE_DEPENDS - y
  660. +# CPACK_DEBIAN_PACKAGE_PRIORITY - y
  661. +# CPACK_DEBIAN_PACKAGE_MAINTAINER - y
  662. +# CPACK_DEBIAN_PACKAGE_DESCRIPTION - y
  663. +
  664. +# ARCHITECTURE
  665. +# if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64")
  666. +# set(ARCHITECTURE "amd64")
  667. +# elseif(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "aarch64")
  668. +# set(ARCHITECTURE "arm64")
  669. +# endif()
  670. +
  671. +# string(TIMESTAMP BUILD_TIME "%Y%m%d")
  672. diff --git a/cmake/SparkDesktopMacros.cmake b/cmake/SparkDesktopMacros.cmake
  673. new file mode 100644
  674. index 0000000..223ac6b
  675. --- /dev/null
  676. +++ b/cmake/SparkDesktopMacros.cmake
  677. @@ -0,0 +1,35 @@
  678. +
  679. +macro(spark_desktop_macros _APP_NAME _APP_NAME_ZH_CN _APP_COMMENT _APP_TYPE _APP_EXECUTE_PATH _APP_EXECUTE_ICON_PATH _APP_CATEGORIES)
  680. + set(APP_NAME ${_APP_NAME})
  681. + set(APP_NAME_ZH_CN ${_APP_NAME_ZH_CN})
  682. + set(APP_COMMENT ${_APP_COMMENT})
  683. + set(APP_TYPE ${_APP_TYPE})
  684. + set(APP_EXECUTE_PATH ${_APP_EXECUTE_PATH})
  685. + set(APP_EXECUTE_ICON_PATH ${_APP_EXECUTE_ICON_PATH})
  686. + set(APP_CATEGORIES ${_APP_CATEGORIES})
  687. + configure_file(cmake/spark-desktop.desktop.in
  688. + ${CMAKE_BINARY_DIR}/${_APP_NAME}.desktop
  689. + )
  690. +endmacro(spark_desktop_macros _APP_NAME _APP_NAME_ZH_CN _APP_COMMENT _APP_TYPE _APP_EXECUTE_PATH _APP_EXECUTE_ICON_PATH _APP_CATEGORIES)
  691. +
  692. +# include(cmake/SparkDesktopMacros.cmake)
  693. +# 内容默认应用名称: Name= 应与项目名称相同
  694. +# spark_desktop_macros(
  695. + # 应用名称: Name=
  696. + # 应用名称: Name[zh_CN]=
  697. + # 应用说明: Comment=
  698. + # 应用类型: Type=
  699. + # 执行程序: Exec=
  700. + # 图标路径: Icon=
  701. + # 应用分类: Category=
  702. +# )
  703. +
  704. +# configure_file(<input> <output>
  705. +# [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS |
  706. +# FILE_PERMISSIONS <permissions>...]
  707. +# [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
  708. +# [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
  709. +
  710. +# install(FILES ${APP_NAME}.desktop
  711. +# DESTINATION /usr/share/applications
  712. +# )
  713. \ No newline at end of file
  714. diff --git a/cmake/SparkInstallMacrosConfig.cmake b/cmake/SparkInstallMacrosConfig.cmake
  715. new file mode 100644
  716. index 0000000..1f8939b
  717. --- /dev/null
  718. +++ b/cmake/SparkInstallMacrosConfig.cmake
  719. @@ -0,0 +1,131 @@
  720. +
  721. +# spark_install_target
  722. +# 基于传入的路径/目标进行安装
  723. +# 可接受的值为: 安装路径 目标A
  724. +# 可接受的值为: 安装路径 目标A 目标B 目标C...
  725. +macro(spark_install_target INSTALL_TARGET_DIR INSTALL_TARGETS)
  726. + install(TARGETS
  727. + ${INSTALL_TARGETS} ${ARGN}
  728. + DESTINATION ${INSTALL_TARGET_DIR})
  729. +endmacro(spark_install_target INSTALL_TARGET_DIR INSTALL_TARGETS)
  730. +
  731. +# spark_install_file
  732. +# 基于传入的路径/文件进行安装
  733. +# 可接受的值为: 安装路径 文件A
  734. +# 可接受的值为: 安装路径 文件A 文件B 文件C...
  735. +macro(spark_install_file INSTALL_FILE_DIR INSTALL_FILE)
  736. + install(FILES
  737. + ${INSTALL_FILE} ${ARGN}
  738. + DESTINATION ${INSTALL_FILE_DIR})
  739. +endmacro(spark_install_file INSTALL_FILE_DIR INSTALL_FILE)
  740. +
  741. +# spark_install_program
  742. +# 基于传入的路径/文件进行安装,并自动为其添加可执行权限
  743. +# 可接受的值为: 安装路径 文件A
  744. +# 可接受的值为: 安装路径 文件A 文件B 文件C...
  745. +macro(spark_install_program INSTALL_PROGRAM_DIR INSTALL_PROGRAM)
  746. + install(PROGRAMS
  747. + ${INSTALL_PROGRAM} ${ARGN}
  748. + DESTINATION ${INSTALL_PROGRAM_DIR})
  749. +endmacro(spark_install_program INSTALL_PROGRAM_DIR INSTALL_PROGRAM)
  750. +
  751. +
  752. +# spark_install_directory
  753. +# 基于传入的路径/目录进行安装
  754. +# 可接受的值为: 安装路径 路径A
  755. +# 可接受的值为: 安装路径 路径A/* 为安装路径A下所有内容
  756. +macro(spark_install_directory INSTALL_DIRECTORY_DIR INSTALL_DIRECOTRY)
  757. + # INSTALL_DIRECOTRY 可能包含 * ?
  758. + # 1. 找到 '*', 截取,列出目录下所有文件,安装
  759. + # 2. 是文件的直接使用 spark_install_file 安装
  760. + # 2. 是目录的直接使用 spark_install_directory 安装
  761. + # message(FATAL_ERROR "${INSTALL_DIRECTORY_DIR}")
  762. + # string(FIND <string> <substring> <output_variable> [REVERSE])
  763. + string(FIND "${INSTALL_DIRECOTRY}" "*" INSTALL_DIRECTORY_FIND_INDEX)
  764. + # message(FATAL_ERROR "${INSTALL_DIRECTORY_FIND_INDEX}: ${INSTALL_DIRECTORY_DIR}")
  765. +
  766. + # file(GLOB <variable>
  767. + # [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
  768. + # [<globbing-expressions>...])
  769. +
  770. + if (NOT INSTALL_DIRECTORY_FIND_INDEX EQUAL -1)
  771. + # string(SUBSTRING <string> <begin> <length> <output_variable>)
  772. + string(SUBSTRING "${INSTALL_DIRECOTRY}" 0 ${INSTALL_DIRECTORY_FIND_INDEX} INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING)
  773. + # message(FATAL_ERROR "directory: ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING}")
  774. +
  775. + # file(GLOB <variable>
  776. + # [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
  777. + # [<globbing-expressions>...])
  778. +
  779. + file(GLOB INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING}/*)
  780. + list(LENGTH INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST_LENGTH)
  781. + foreach(item IN LISTS INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST)
  782. + # message("-> ${item}")
  783. + if(IS_DIRECTORY ${item})
  784. + message("-> ${item} IS_DIRECTORY")
  785. + # spark_install_directory(${INSTALL_DIRECTORY_DIR} ${item})
  786. + install(DIRECTORY
  787. + ${item}
  788. + DESTINATION ${INSTALL_DIRECTORY_DIR}
  789. + USE_SOURCE_PERMISSIONS)
  790. + else()
  791. + message("-> ${item} NOT IS_DIRECTORY")
  792. + spark_install_program(${INSTALL_DIRECTORY_DIR} ${item})
  793. + # spark_install_file(${INSTALL_DIRECTORY_DIR} ${item})
  794. + endif(IS_DIRECTORY ${item})
  795. + endforeach(item IN LISTS INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST)
  796. +
  797. + # message(FATAL_ERROR " directory: ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST}")
  798. + # message(FATAL_ERROR " directory: ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST_LENGTH}")
  799. +
  800. + else()
  801. + message(FATAL_ERROR "install: ${INSTALL_DIRECTORY_DIR}")
  802. +
  803. + install(DIRECTORY
  804. + ${INSTALL_DIRECOTRY} ${ARGN}
  805. + DESTINATION ${INSTALL_DIRECTORY_DIR})
  806. + endif(NOT INSTALL_DIRECTORY_FIND_INDEX EQUAL -1)
  807. +
  808. +endmacro(spark_install_directory INSTALL_DIRECTORY_DIR INSTALL_DIRECOTRY)
  809. +
  810. +
  811. +
  812. +macro(spark_install_changelog CHANGE_LOG_FILE)
  813. + set(SOURCE_CHANGE_LOG_FILE ${CHANGE_LOG_FILE})
  814. + if (EXISTS ${SOURCE_CHANGE_LOG_FILE})
  815. +
  816. + execute_process(COMMAND test -f ${SOURCE_CHANGE_LOG_FILE}
  817. + RESULT_VARIABLE changelog_test
  818. + )
  819. + execute_process(COMMAND which gzip
  820. + RESULT_VARIABLE gzip_test
  821. + )
  822. + if (NOT changelog_test EQUAL 0)
  823. + message(FATAL_ERROR "NOTE: 不是常规文件: ${SOURCE_CHANGE_LOG_FILE}")
  824. + endif(NOT changelog_test EQUAL 0)
  825. +
  826. + if (NOT gzip_test EQUAL 0)
  827. + message(FATAL_ERROR "NOTE: 未安装 gzip, 无法压缩 changelog")
  828. + endif(NOT gzip_test EQUAL 0)
  829. +
  830. + # 压缩与安装日志文件
  831. + add_custom_command(
  832. + OUTPUT "${CMAKE_BINARY_DIR}/changelog.gz"
  833. + COMMAND gzip -cn9 "${SOURCE_CHANGE_LOG_FILE}" > "${CMAKE_BINARY_DIR}/changelog.gz"
  834. + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
  835. + COMMENT "Compressing changelog"
  836. + )
  837. + add_custom_target(changelog ALL DEPENDS "${CMAKE_BINARY_DIR}/changelog.gz")
  838. +
  839. + # include(GNUInstallDirs)
  840. + set(SPARK_INSTALL_CHANGE_LOG_DIR "/usr/share/doc/${PROJECT_NAME}/")
  841. + install(FILES
  842. + ${CMAKE_BINARY_DIR}/changelog.gz
  843. + debian/copyright
  844. +
  845. + DESTINATION ${SPARK_INSTALL_CHANGE_LOG_DIR}
  846. + )
  847. + else()
  848. + message(FATAL_ERROR "未找到: ${SOURCE_CHANGE_LOG_FILE}")
  849. + endif(EXISTS ${SOURCE_CHANGE_LOG_FILE})
  850. +endmacro(spark_install_changelog CHANGE_LOG_FILE)
  851. diff --git a/cmake/package-deb.descript b/cmake/package-deb.descript
  852. new file mode 100644
  853. index 0000000..be0fa83
  854. --- /dev/null
  855. +++ b/cmake/package-deb.descript
  856. @@ -0,0 +1,45 @@
  857. +# 注释行(使用方式)
  858. +# find_package(DebPackage PATHS ${CMAKE_SOURCE_DIR})
  859. +# add_package_descript(cmake/package-deb.descript)
  860. +
  861. +# 打包后的文件名称
  862. +# FileName: 待定
  863. +# 配置 PACKAGE_SUFFIX 变量可添加尾巴名称
  864. +# 如在 Makefile 中硬编码方式
  865. +# OSID=$(shell lsb_release -si)
  866. +# OSRELEASE=$(shell lsb_release -sr)
  867. +# -DPACKAGE_SUFFIX="_$(OSID)$(OSRELEASE)"
  868. +
  869. +# deb 安装包的安装时脚本
  870. +# 1.安装[前|后]执行脚本(preinst,postinst),
  871. +# 2.卸载[前|后]执行脚本(prerm,postrm)
  872. +# ControlExtra: 未定义(暂不支持)
  873. +# 如需指定请修改 DebPackageConfig.cmake 模板(第252行)
  874. +# CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA 变量
  875. +
  876. +# 打包类型,暂支持 deb, 未来支持 tgz(tar.gz)
  877. +Type: deb
  878. +# 软件包名称(自动, 使用 PROJECT_NAME 变量值)
  879. +Package: com.hmja.notepad
  880. +# 软件包版本(自动, 使用 PROJECT_VERSION 变量值)
  881. +Version: auto
  882. +# 日历化尾部版本
  883. +CalVer: true
  884. +# 软件包架构(自动)
  885. +Architecture: auto
  886. +# 软件包属于的系统部分[admin|cli-mono|comm|database|debug|devel|doc|editors|education|electronics|embedded|fonts|games|gnome|gnu-r|gnustep|graphics|hamradio|haskell|httpd|interpreters|introspection|java|javascript|kde|kernel|libdevel|libs|lisp|localization|mail|math|metapackages|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|rust|science|shells|sound|tasks|tex|text|utils|vcs|video|web|x11|xfce|zope]
  887. +Section: editors
  888. +# 软件包优先级[required|important|stantard|optional|extra]
  889. +Priority: optional
  890. +# 软件包依赖
  891. +Depends:
  892. +# 软件包维护者(组织或个人)
  893. +Maintainer: 尹作为 <[email protected]>
  894. +# 软件包主页
  895. +Homepage: https://gitee.com/cxasm/notepad--
  896. +# 软件包建议
  897. +Recommends:
  898. +# 软件包描述信息
  899. +Descrition: Notepad--是一个国产跨平台、简单的文本编辑器。
  900. + Notepad--是一个国产跨平台、简单的文本编辑器,是替换notepad++的一种选择。
  901. + 其内置强大的代码对比功能,让你丢掉付费的beyond compare。
  902. diff --git a/cmake/spark-desktop.desktop.in b/cmake/spark-desktop.desktop.in
  903. new file mode 100644
  904. index 0000000..e7c3b18
  905. --- /dev/null
  906. +++ b/cmake/spark-desktop.desktop.in
  907. @@ -0,0 +1,12 @@
  908. +[Desktop Entry]
  909. +Version=1.0
  910. +Name=@APP_NAME@
  911. +Name[zh_CN]=@APP_NAME_ZH_CN@
  912. +Comment=@APP_COMMENT@
  913. +Type=@APP_TYPE@
  914. +Exec=@APP_EXECUTE_PATH@
  915. +Icon=@APP_EXECUTE_ICON_PATH@
  916. +Categories=@APP_CATEGORIES@
  917. +MimeType=text/plain
  918. +
  919. +# Generated from the DesktopGenerater component of the z-Tools toolkit
  920. \ No newline at end of file
  921. --
  922. 2.20.1
  923. From 684ced155e1c749b06e76449177c95db9392c0fc Mon Sep 17 00:00:00 2001
  924. From: zinface <[email protected]>
  925. Date: Wed, 1 Feb 2023 20:09:49 +0800
  926. Subject: [PATCH 03/13] =?UTF-8?q?repo:=20=E5=BC=95=E5=85=A5=20Spark=20?=
  927. =?UTF-8?q?=E6=9E=84=E5=BB=BA=EF=BC=8C=E6=94=AF=E6=8C=81=E6=9E=84=E5=BB=BA?=
  928. =?UTF-8?q?=20Appimage?=
  929. MIME-Version: 1.0
  930. Content-Type: text/plain; charset=UTF-8
  931. Content-Transfer-Encoding: 8bit
  932. ---
  933. CMakeLists.txt | 8 ++
  934. Makefile | 23 ++++++
  935. cmake/SparkAppimageConfig.cmake | 139 ++++++++++++++++++++++++++++++++
  936. cmake/spark-appimage.desktop.in | 10 +++
  937. 4 files changed, 180 insertions(+)
  938. create mode 100644 cmake/SparkAppimageConfig.cmake
  939. create mode 100644 cmake/spark-appimage.desktop.in
  940. diff --git a/CMakeLists.txt b/CMakeLists.txt
  941. index 666fbdb..a8f27aa 100644
  942. --- a/CMakeLists.txt
  943. +++ b/CMakeLists.txt
  944. @@ -80,6 +80,14 @@ if(CMAKE_HOST_UNIX)
  945. spark_install_file(/usr/share/notepad--/icons/ assets/spark.png)
  946. spark_install_target(/usr/bin/ ${PROJECT_NAME})
  947. +
  948. + # 1. 在顶层构建中导入 Appimage 的构建
  949. + include(cmake/SparkAppimageConfig.cmake) # 导入来自 Spark 构建的 Appimage 构建
  950. + add_appimage_icon(assets/spark.png) # 添加到 Appimage 中的默认的图标
  951. + add_appimage_desktop() # 添加到 Appimage 中的默认desktop(使用来自 Spark 构建的 Desktop 构建中配置的信息(必须要求 spark-desktop))
  952. + add_appimage() # 应用对 Appimage 的构建
  953. +
  954. +
  955. # 注释行(使用方式)
  956. find_package(DebPackage PATHS ${CMAKE_SOURCE_DIR})
  957. add_package_descript(cmake/package-deb.descript)
  958. diff --git a/Makefile b/Makefile
  959. index 43e849f..b71b27f 100644
  960. --- a/Makefile
  961. +++ b/Makefile
  962. @@ -59,3 +59,26 @@ enter-qdebug-mode:
  963. # 进入新的 bash 环境
  964. @# export QT_LOGGING_RULES=".debug=true; qt.*.debug=false; dtk.*.debug=false; dde.*.debug=false; qtc*=false; " && bash
  965. export QT_LOGGING_RULES=".debug=true" && bash
  966. +
  967. +# Appimage 的构建流 --
  968. +# 在 Makefile 进行构建目标构建 Appimage (要求提供工具的绝对路径,然后可依次进行linuxdeployqt, genrate-appimage)
  969. +# 来自于 https://github.com/probonopd/linuxdeployqt 的 linuxdeployqt
  970. +# 来自于 https://github.com/AppImage/AppImageKit 的 appimagetool
  971. +# 来自于 https://gitlink.org.cn/zinface/bundle-linuxdeployqt.git 托管存储的工具
  972. +
  973. +# 或指定你所想存放克隆项目的位置
  974. +BUNDLE_LINUXDEPLOYQT := $(shell pwd)/build/bundle-linuxdeployqt
  975. +
  976. +download-bundle-linuxdeploytools:
  977. + -git clone https://gitlink.org.cn/zinface/bundle-linuxdeployqt.git $(BUNDLE_LINUXDEPLOYQT)
  978. +
  979. +LINUXDEPLOYQT := "$(BUNDLE_LINUXDEPLOYQT)/linuxdeployqt-continuous-x86_64.AppImage"
  980. +APPIMAGETOOL := "$(BUNDLE_LINUXDEPLOYQT)/appimagetool-x86_64.AppImage"
  981. +
  982. +linuxdeploy: release download-bundle-linuxdeploytools
  983. + cd build && cmake .. -DLINUXDEPLOYQT=$(LINUXDEPLOYQT) -DAPPIMAGETOOL=$(APPIMAGETOOL)
  984. + cd build && make linuxdeploy
  985. +
  986. +genrate-appimage:
  987. + cd build && cmake .. -DLINUXDEPLOYQT=$(LINUXDEPLOYQT) -DAPPIMAGETOOL=$(APPIMAGETOOL)
  988. + cd build && make appimage
  989. diff --git a/cmake/SparkAppimageConfig.cmake b/cmake/SparkAppimageConfig.cmake
  990. new file mode 100644
  991. index 0000000..7463a48
  992. --- /dev/null
  993. +++ b/cmake/SparkAppimageConfig.cmake
  994. @@ -0,0 +1,139 @@
  995. +# export PATH=/usr/lib/x86_64-linux-gnu/qt5/bin:$PATH
  996. +# export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
  997. +# export QT_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins:$QT_PLUGIN_PATH
  998. +# export QML2_IMPORT_PATH=/usr/lib/x86_64-linux-gnu/qt5/qml:$QML2_IMPORT_PATH
  999. +
  1000. +# export PATH=/usr/lib/x86_64-linux-gnu/qt5/bin:$PATH
  1001. +# ~/linuxdeployqt-continuous-x86_64.AppImage spark-store-submitter -appimage
  1002. +# cd ..
  1003. +# ~/appimagetool-x86_64.AppImage appimage/
  1004. +
  1005. +# LINUXDEPLOYQT=/home/zinface/linuxdeployqt-continuous-x86_64.AppImage
  1006. +# APPIMAGETOOL=/home/zinface/appimagetool-x86_64.AppImage
  1007. +
  1008. +# if ()
  1009. +set(APPIMAGE_OUTPUT "${CMAKE_BINARY_DIR}/appimage")
  1010. +set(APPIMAGE_ICON "${APPIMAGE_OUTPUT}/default.png")
  1011. +set(APPIMAGE_DESTKOP "${APPIMAGE_OUTPUT}/default.desktop")
  1012. +# set(LINUXDEPLOYQT)
  1013. +# set(APPIMAGETOOL)
  1014. +
  1015. +function(execute_linuxdeploy _PATH)
  1016. + execute_process(COMMAND ${LINUXDEPLOYQT}
  1017. + WORKING_DIRECTORY "${APPIMAGE_OUTPUT}"
  1018. + )
  1019. +endfunction(execute_linuxdeploy _PATH)
  1020. +
  1021. +function(target_linuxdeploy)
  1022. + add_custom_target(linuxdeploy pwd
  1023. + BYPRODUCTS appimage
  1024. + COMMAND cp ../${PROJECT_NAME} .
  1025. + COMMAND "${LINUXDEPLOYQT}" ${PROJECT_NAME} -appimage -unsupported-allow-new-glibc -verbose=3 -no-strip|| true
  1026. + COMMAND cp ../spark-appimage.desktop default.desktop
  1027. + COMMAND cp ../spark-appimage.png default.png
  1028. + WORKING_DIRECTORY "${APPIMAGE_OUTPUT}")
  1029. +endfunction(target_linuxdeploy)
  1030. +
  1031. +function(target_appimage)
  1032. + add_custom_target(copy-desktop-appimage
  1033. + COMMAND cp ../spark-appimage.desktop default.desktop
  1034. + COMMAND cp ../spark-appimage.png default.png
  1035. + WORKING_DIRECTORY "${APPIMAGE_OUTPUT}")
  1036. + add_custom_target(appimage pwd
  1037. + COMMAND ${APPIMAGETOOL} ${APPIMAGE_OUTPUT}
  1038. + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
  1039. + DEPENDS copy-desktop-appimage)
  1040. +endfunction(target_appimage)
  1041. +
  1042. +function(add_appimage)
  1043. + # check linuxdeploy
  1044. + if(NOT DEFINED LINUXDEPLOYQT)
  1045. + message("AppImage> Not Found LINUXDEPLOYQT Variable!")
  1046. + return()
  1047. + endif(NOT DEFINED LINUXDEPLOYQT)
  1048. + if(CMAKE_VERSION VERSION_LESS 3.19 AND NOT EXISTS ${LINUXDEPLOYQT})
  1049. + message("> cmake version is less than 3.19")
  1050. + message(WARNING "!Relative paths are not supported!")
  1051. + else()
  1052. + file(REAL_PATH ${LINUXDEPLOYQT} LINUXDEPLOYQT_REAL_PATH)
  1053. + endif(CMAKE_VERSION VERSION_LESS 3.19 AND NOT EXISTS ${LINUXDEPLOYQT})
  1054. + message("AppImage> Found LINUXDEPLOYQT Variable: ${LINUXDEPLOYQT_REAL_PATH}")
  1055. +
  1056. + # check appimagetool
  1057. + if(NOT DEFINED APPIMAGETOOL)
  1058. + message("AppImage> Not Found APPIMAGETOOL Variable!")
  1059. + return()
  1060. + endif(NOT DEFINED APPIMAGETOOL)
  1061. + if(CMAKE_VERSION VERSION_LESS 3.19 AND NOT EXISTS ${LINUXDEPLOYQT})
  1062. + # execute_process(COMMAND realpath ${APPIMAGETOOL} OUTPUT_VARIABLE APPIMAGETOOL_REAL_PATH)
  1063. + message("> cmake version is less than 3.19")
  1064. + message(WARNING "!Relative paths are not supported!")
  1065. + else()
  1066. + file(REAL_PATH ${APPIMAGETOOL} APPIMAGETOOL_REAL_PATH)
  1067. + endif(CMAKE_VERSION VERSION_LESS 3.19 AND NOT EXISTS ${LINUXDEPLOYQT})
  1068. + message("AppImage> Found APPIMAGETOOL Variable: ${LINUXDEPLOYQT_REAL_PATH}")
  1069. +
  1070. + # do add_custome_target
  1071. + make_directory(${APPIMAGE_OUTPUT})
  1072. + target_linuxdeploy()
  1073. + target_appimage()
  1074. +endfunction(add_appimage)
  1075. +
  1076. +function(add_appimage_desktop)
  1077. + configure_file(cmake/spark-appimage.desktop.in
  1078. + ${CMAKE_BINARY_DIR}/spark-appimage.desktop @ONLY)
  1079. +endfunction(add_appimage_desktop)
  1080. +
  1081. +function(add_appimage_icon _ICON_PATH)
  1082. + if(CMAKE_VERSION VERSION_LESS 3.21)
  1083. + message("> cmake version is less than 3.21")
  1084. + configure_file(${_ICON_PATH} ${CMAKE_BINARY_DIR}/spark-appimage.png COPYONLY)
  1085. + else()
  1086. + file(COPY_FILE ${_ICON_PATH} ${CMAKE_BINARY_DIR}/spark-appimage.png)
  1087. + endif(CMAKE_VERSION VERSION_LESS 3.21)
  1088. +endfunction(add_appimage_icon _ICON_PATH)
  1089. +
  1090. +
  1091. +
  1092. +# 如果glic>=2.27,你就需要加上参数 -unsupported-allow-new-glibc (意思就是不再低版本发行版使用了)
  1093. +# 或 -unsupported-bundle-everything(大概的意思是尝试兼容,实际测试,到其他发行版直接用不了了,有可能是发行版的原因,还是建议用前者,虽然放弃了低版本)
  1094. +
  1095. +# -unsupported-bundle-everything
  1096. + # 捆绑所有依赖库,包括 ld-linux.so 加载器和 glibc。这将允许构建在较新系统上的应用程序在较旧的目标系统上运行,但不建议这样做,因为它会导致捆绑包超出所需的大小(并且可能到其他发行版无法使用)
  1097. +# -unsupported-allow-new-glibc
  1098. + # 允许 linuxdeployqt 在比仍受支持的最旧 Ubuntu LTS 版本更新的发行版上运行。这将导致 AppImage无法在所有仍受支持的发行版上运行,既不推荐也不测试或支持
  1099. +
  1100. +# ./linuxdeployqt-7-x86_64.AppImage 程序目录/程序 -appimage -unsupported-allow-new-glibc
  1101. +# ./linuxdeployqt-7-x86_64.AppImage 程序目录/程序 -appimage -unsupported-bundle-everything
  1102. +
  1103. +
  1104. +
  1105. +
  1106. +# 1. 在顶层构建中导入 Appimage 的构建
  1107. +# include(cmake/SparkAppimageConfig.cmake) # 导入来自 Spark 构建的 Appimage 构建
  1108. +# add_appimage_icon(assets/spark.png) # 添加到 Appimage 中的默认的图标
  1109. +# add_appimage_desktop() # 添加到 Appimage 中的默认desktop(使用来自 Spark 构建的 Desktop 构建中配置的信息(必须要求 spark-desktop))
  1110. +# add_appimage() # 应用对 Appimage 的构建
  1111. +
  1112. +# 2. 在 Makefile 进行构建目标构建 Appimage 的构建流 --
  1113. +# 在 Makefile 进行构建目标构建 Appimage (要求提供工具的绝对路径,然后可依次进行linuxdeployqt, genrate-appimage)
  1114. +# 来自于 https://github.com/probonopd/linuxdeployqt 的 linuxdeployqt
  1115. +# 来自于 https://github.com/AppImage/AppImageKit 的 appimagetool
  1116. +# 来自于 https://gitlink.org.cn/zinface/bundle-linuxdeployqt.git 托管存储的工具
  1117. +
  1118. +# 或指定你所想存放克隆项目的位置
  1119. +# BUNDLE_LINUXDEPLOYQT := $(shell pwd)/build/bundle-linuxdeployqt
  1120. +
  1121. +# download-bundle-linuxdeploytools:
  1122. +# -git clone https://gitlink.org.cn/zinface/bundle-linuxdeployqt.git $(BUNDLE_LINUXDEPLOYQT)
  1123. +
  1124. +# LINUXDEPLOYQT := "$(BUNDLE_LINUXDEPLOYQT)/linuxdeployqt-continuous-x86_64.AppImage"
  1125. +# APPIMAGETOOL := "$(BUNDLE_LINUXDEPLOYQT)/appimagetool-x86_64.AppImage"
  1126. +
  1127. +# linuxdeploy: release download-bundle-linuxdeploytools
  1128. +# cd build && cmake .. -DLINUXDEPLOYQT=$(LINUXDEPLOYQT) -DAPPIMAGETOOL=$(APPIMAGETOOL)
  1129. +# cd build && make linuxdeploy
  1130. +
  1131. +# genrate-appimage:
  1132. +# cd build && cmake .. -DLINUXDEPLOYQT=$(LINUXDEPLOYQT) -DAPPIMAGETOOL=$(APPIMAGETOOL)
  1133. +# cd build && make appimage
  1134. diff --git a/cmake/spark-appimage.desktop.in b/cmake/spark-appimage.desktop.in
  1135. new file mode 100644
  1136. index 0000000..0ca2577
  1137. --- /dev/null
  1138. +++ b/cmake/spark-appimage.desktop.in
  1139. @@ -0,0 +1,10 @@
  1140. +[Desktop Entry]
  1141. +Name=@APP_NAME@
  1142. +Name[zh_CN]=@APP_NAME_ZH_CN@
  1143. +Exec=AppRun %F
  1144. +Icon=default
  1145. +Comment=@APP_COMMENT@
  1146. +Terminal=true
  1147. +Type=Application
  1148. +Categories=@APP_CATEGORIES@
  1149. +MimeType=text/plain
  1150. --
  1151. 2.20.1
  1152. From c241f19bbcec29d7a1ed8fe8e1f0d6e36a957b69 Mon Sep 17 00:00:00 2001
  1153. From: zinface <[email protected]>
  1154. Date: Thu, 2 Feb 2023 13:58:29 +0800
  1155. Subject: [PATCH 04/13] =?UTF-8?q?desktop:=20=E4=B8=BA=20desktop=20?=
  1156. =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E6=9C=AC=E6=96=87=E4=BB=B6=E7=9A=84?=
  1157. =?UTF-8?q?=E7=9B=B8=E5=85=B3=20MimeType?=
  1158. MIME-Version: 1.0
  1159. Content-Type: text/plain; charset=UTF-8
  1160. Content-Transfer-Encoding: 8bit
  1161. ---
  1162. cmake/spark-appimage.desktop.in | 2 +-
  1163. cmake/spark-desktop.desktop.in | 2 +-
  1164. 2 files changed, 2 insertions(+), 2 deletions(-)
  1165. diff --git a/cmake/spark-appimage.desktop.in b/cmake/spark-appimage.desktop.in
  1166. index 0ca2577..70fc6b9 100644
  1167. --- a/cmake/spark-appimage.desktop.in
  1168. +++ b/cmake/spark-appimage.desktop.in
  1169. @@ -7,4 +7,4 @@ Comment=@APP_COMMENT@
  1170. Terminal=true
  1171. Type=Application
  1172. Categories=@APP_CATEGORIES@
  1173. -MimeType=text/plain
  1174. +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-patch;text/x-adasrc;text/x-chdr;text/x-csrc;text/css;application/x-desktop;text/x-patch;text/x-fortran;text/html;text/x-java;text/x-tex;text/x-makefile;text/x-objcsrc;text/x-pascal;application/x-perl;application/x-perl;application/x-php;text/vnd.wap.wml;text/x-python;application/x-ruby;text/sgml;application/xml;model/vrml;image/svg+xml;application/json;
  1175. diff --git a/cmake/spark-desktop.desktop.in b/cmake/spark-desktop.desktop.in
  1176. index e7c3b18..e33c74e 100644
  1177. --- a/cmake/spark-desktop.desktop.in
  1178. +++ b/cmake/spark-desktop.desktop.in
  1179. @@ -7,6 +7,6 @@ Type=@APP_TYPE@
  1180. Exec=@APP_EXECUTE_PATH@
  1181. Icon=@APP_EXECUTE_ICON_PATH@
  1182. Categories=@APP_CATEGORIES@
  1183. -MimeType=text/plain
  1184. +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-patch;text/x-adasrc;text/x-chdr;text/x-csrc;text/css;application/x-desktop;text/x-patch;text/x-fortran;text/html;text/x-java;text/x-tex;text/x-makefile;text/x-objcsrc;text/x-pascal;application/x-perl;application/x-perl;application/x-php;text/vnd.wap.wml;text/x-python;application/x-ruby;text/sgml;application/xml;model/vrml;image/svg+xml;application/json;
  1185. # Generated from the DesktopGenerater component of the z-Tools toolkit
  1186. \ No newline at end of file
  1187. --
  1188. 2.20.1
  1189. From 4a74a60af053dfa4680918ceac8a78974d481d53 Mon Sep 17 00:00:00 2001
  1190. From: zinface <[email protected]>
  1191. Date: Thu, 2 Feb 2023 14:00:54 +0800
  1192. Subject: [PATCH 05/13] =?UTF-8?q?repo:=20=E5=AF=B9=20desktop=20=E6=96=87?=
  1193. =?UTF-8?q?=E4=BB=B6=E6=B7=BB=E5=8A=A0=20%F=20=E5=8F=82=E6=95=B0=EF=BC=8C?=
  1194. =?UTF-8?q?=E4=BB=A5=E4=BF=9D=E8=AF=81=E5=8F=AF=E6=AD=A3=E7=A1=AE=E4=BC=A0?=
  1195. =?UTF-8?q?=E5=85=A5=E5=8F=82=E6=95=B0?=
  1196. MIME-Version: 1.0
  1197. Content-Type: text/plain; charset=UTF-8
  1198. Content-Transfer-Encoding: 8bit
  1199. ---
  1200. CMakeLists.txt | 3 ++-
  1201. 1 file changed, 2 insertions(+), 1 deletion(-)
  1202. diff --git a/CMakeLists.txt b/CMakeLists.txt
  1203. index a8f27aa..63e878c 100644
  1204. --- a/CMakeLists.txt
  1205. +++ b/CMakeLists.txt
  1206. @@ -70,7 +70,8 @@ if(CMAKE_HOST_UNIX)
  1207. # 应用类型: Type=
  1208. "Application"
  1209. # 执行程序: Exec=
  1210. - "notepad--"
  1211. + # 有关此 %F 参数可查看: https://gitee.com/zinface/z-tools/blob/desktop-dev/src/DesktopGenerater/desktopexecparamdialog.cpp
  1212. + "notepad-- %F"
  1213. # 图标路径: Icon=
  1214. "/usr/share/notepad--/icons/spark.png"
  1215. # 应用分类: Category=
  1216. --
  1217. 2.20.1
  1218. From b7f8abc6c6631ea598216c3606d0f61a9b653474 Mon Sep 17 00:00:00 2001
  1219. From: zinface <[email protected]>
  1220. Date: Thu, 2 Feb 2023 14:47:56 +0800
  1221. Subject: [PATCH 06/13] =?UTF-8?q?cmake-version:=20=E5=B0=86=E7=89=88?=
  1222. =?UTF-8?q?=E6=9C=AC=E9=99=8D=E5=88=B0=203.22=20=E4=BB=A5=E9=80=82?=
  1223. =?UTF-8?q?=E7=94=A8=E4=BA=8E=20cmake=20=E6=9E=84=E5=BB=BA?=
  1224. MIME-Version: 1.0
  1225. Content-Type: text/plain; charset=UTF-8
  1226. Content-Transfer-Encoding: 8bit
  1227. ---
  1228. CMakeLists.txt | 2 +-
  1229. src/qscint/CMakeLists.txt | 2 +-
  1230. 2 files changed, 2 insertions(+), 2 deletions(-)
  1231. diff --git a/CMakeLists.txt b/CMakeLists.txt
  1232. index 63e878c..60e9171 100644
  1233. --- a/CMakeLists.txt
  1234. +++ b/CMakeLists.txt
  1235. @@ -1,4 +1,4 @@
  1236. -cmake_minimum_required(VERSION 3.24)
  1237. +cmake_minimum_required(VERSION 3.22)
  1238. project(notepad-- VERSION 1.22.0)
  1239. set(CMAKE_AUTOMOC ON)
  1240. diff --git a/src/qscint/CMakeLists.txt b/src/qscint/CMakeLists.txt
  1241. index f132dc6..77f02f2 100644
  1242. --- a/src/qscint/CMakeLists.txt
  1243. +++ b/src/qscint/CMakeLists.txt
  1244. @@ -1,4 +1,4 @@
  1245. -cmake_minimum_required(VERSION 3.24)
  1246. +cmake_minimum_required(VERSION 3.22)
  1247. project(qscint CXX)
  1248. set(CMAKE_AUTOMOC ON)
  1249. --
  1250. 2.20.1
  1251. From 8661b20c61ad6f70f645e69e89da46e2b945bf7d Mon Sep 17 00:00:00 2001
  1252. From: zinface <[email protected]>
  1253. Date: Sun, 5 Feb 2023 12:55:38 +0800
  1254. Subject: [PATCH 07/13] =?UTF-8?q?repo:=20=E5=BC=95=E5=85=A5=20Spark=20?=
  1255. =?UTF-8?q?=E7=8E=B0=E6=9C=89=E5=AE=8C=E6=95=B4=E6=9E=84=E5=BB=BA=E6=A8=A1?=
  1256. =?UTF-8?q?=E5=9D=97?=
  1257. MIME-Version: 1.0
  1258. Content-Type: text/plain; charset=UTF-8
  1259. Content-Transfer-Encoding: 8bit
  1260. ---
  1261. cmake/SparkEnvConfig.cmake | 8 +
  1262. cmake/SparkFindQt5Config.cmake | 153 ++++++++++++++++++
  1263. cmake/SparkFindQt6Config.cmake | 130 +++++++++++++++
  1264. cmake/SparkMacrosConfig.cmake | 161 +++++++++++++++++++
  1265. cmake/SparkMacrosExtendConfig.cmake | 237 ++++++++++++++++++++++++++++
  1266. 5 files changed, 689 insertions(+)
  1267. create mode 100644 cmake/SparkEnvConfig.cmake
  1268. create mode 100644 cmake/SparkFindQt5Config.cmake
  1269. create mode 100644 cmake/SparkFindQt6Config.cmake
  1270. create mode 100644 cmake/SparkMacrosConfig.cmake
  1271. create mode 100644 cmake/SparkMacrosExtendConfig.cmake
  1272. diff --git a/cmake/SparkEnvConfig.cmake b/cmake/SparkEnvConfig.cmake
  1273. new file mode 100644
  1274. index 0000000..3690f1a
  1275. --- /dev/null
  1276. +++ b/cmake/SparkEnvConfig.cmake
  1277. @@ -0,0 +1,8 @@
  1278. +cmake_minimum_required(VERSION 3.5.1)
  1279. +
  1280. +set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  1281. +# set(CMAKE_INCLUDE_CURRENT_DIR ON)
  1282. +set(CMAKE_AUTOMOC ON)
  1283. +set(CMAKE_AUTOUIC ON)
  1284. +set(CMAKE_AUTORCC ON)
  1285. +# set(CMAKE_BUILD_TYPE "Debug")
  1286. \ No newline at end of file
  1287. diff --git a/cmake/SparkFindQt5Config.cmake b/cmake/SparkFindQt5Config.cmake
  1288. new file mode 100644
  1289. index 0000000..ad2db4c
  1290. --- /dev/null
  1291. +++ b/cmake/SparkFindQt5Config.cmake
  1292. @@ -0,0 +1,153 @@
  1293. +cmake_minimum_required(VERSION 3.5.1)
  1294. +
  1295. +set(SPARK_FIND_QT5 TRUE)
  1296. +
  1297. +find_package(Qt5 COMPONENTS Core Widgets Network REQUIRED)
  1298. +
  1299. +# function(target_link_qt5 NAME)
  1300. +# target_link_libraries(${NAME}
  1301. +# Qt5::Core
  1302. +# Qt5::Widgets
  1303. +# Qt5::Network)
  1304. +# endfunction(target_link_qt5 NAME)
  1305. +
  1306. +# 使用 spark_add_link 生成 target_link_qt5 以替代上面内容
  1307. +spark_add_link(qt5 Qt5::Core Qt5::Widgets Qt5::Network)
  1308. +
  1309. +
  1310. +# spark_add_link_qt5
  1311. +# 自定义宏 spark_add_link_qt5 以扩展 target_link_qt5_<name> 结构
  1312. + # _IN_NAME: 此宏使用嵌套宏 spark_add_link 时追加 <name> 名称
  1313. + # 同等于 spark_add_link(qt_<name> ${ARGN})
  1314. +macro(spark_add_link_qt5 _IN_NAME)
  1315. + spark_add_link(qt5_${_IN_NAME} ${ARGN})
  1316. +endmacro(spark_add_link_qt5 _IN_NAME)
  1317. +
  1318. +# 使用 spark_add_link_qt5 生成 target_link_qt5_<name> 的宏
  1319. +# spark_add_link_qt5(Concurrent Qt5::Concurrent)
  1320. +
  1321. +# 高级自定义
  1322. +# spark_add_links_qt5
  1323. +# 自定义宏 spark_add_links_qt5 以扩展 spark_add_link_qt5 宏配置组
  1324. + # 特点: 任意长度参数
  1325. + # qt5_item: 为进行遍历后的单项,类似于 python3 中的 (for item in items:)
  1326. + # 例如: qt5_item 为 Core:
  1327. + # spark_add_link_qt5(${qt5_item} Qt5::${qt5_item})
  1328. + # 展开为 spark_add_link_qt5(Core Qt5::Core)
  1329. + # 展开为 spark_add_link(qt5_Core Qt5::Core)
  1330. + # 展开为 spark_add_link(qt5_Core Qt5::Core)
  1331. + # 特性: 增加 qt5_Core 转 qt5_core
  1332. + # string(TOLOWER <string> <output_variable>)
  1333. +macro(spark_add_links_qt5)
  1334. + set(qt5_items ${ARGN})
  1335. + foreach(qt5_item IN LISTS qt5_items)
  1336. + find_package(Qt5${qt5_item})
  1337. + spark_add_link_qt5(${qt5_item} Qt5::${qt5_item})
  1338. +
  1339. + string(TOLOWER "${qt5_item}" qt5_lower_item)
  1340. + spark_add_link_qt5(${qt5_lower_item} Qt5::${qt5_item})
  1341. + message("add_target_link_qt5_${qt5_item} or add_target_link_qt5_${qt5_lower_item}")
  1342. + endforeach(qt5_item IN LISTS qt5_items)
  1343. +endmacro(spark_add_links_qt5)
  1344. +
  1345. +
  1346. +# Core 用于其它模块的核心非图形类。
  1347. +# GUI 图形用户界面 GUI 组件基类。包括 OpenGL。
  1348. +# Multimedia 音频 视频 无线电 摄像头功能类。
  1349. +# Multimedia Widgets 用于实现多媒体功能,基于 Widget 的类。
  1350. +# Network 使网络编程更容易和更可移植的类。
  1351. +
  1352. +# QML QML 和 JavaScript 语言类。
  1353. +# Quick 以自定义用户界面 UI 构建高动态应用程序的声明性框架。
  1354. +# Quick Controls 为桌面、嵌入式及移动设备创建高性能用户界面提供轻量 QML 类型。这些类型运用简单样式化体系结构且非常高效。
  1355. +# Quick Dialogs 用于从 Qt Quick 应用程序创建系统对话框,并与之交互的类型。
  1356. +# Quick Layouts 布局是用于在用户界面中排列基于 Qt Quick 2 项的项。
  1357. +# Quick Test 用于 QML 应用程序的单元测试框架,其测试案例被编写成 JavaScript 函数。
  1358. + # 注意: 二进制保证不兼容 Qt Quick Test,但源代码仍兼容。
  1359. +
  1360. +# Qt SQL 集成使用 SQL 数据库的类。
  1361. +# Qt Test 单元测试 Qt 应用程序和库的类。
  1362. + # 注意: 二进制保证不兼容 Qt Test,但源代码仍兼容。
  1363. +# Qt Widgets 以 C++ 小部件扩展 Qt GUI 的类。
  1364. +
  1365. +
  1366. +
  1367. +# 找出所有 Qt5 模板
  1368. +# find /usr/lib/x86_64-linux-gnu/cmake/ -name "*Config.cmake" | sed 's@^.*/Qt5@Qt5@;' | grep ^Qt5
  1369. +
  1370. +# 掐头去尾,洗一次
  1371. +# find /usr/lib/x86_64-linux-gnu/cmake/ -name "*Config.cmake" | sed 's@^.*/Qt5@Qt5@;' | grep ^Qt5 | sed 's@^Qt5@@; [email protected]$@@; /^\s*$/d'
  1372. +
  1373. +# 排序
  1374. +# find /usr/lib/x86_64-linux-gnu/cmake/ -name "*Config.cmake" | sed 's@^.*/Qt5@Qt5@;' | grep ^Qt5 | sed 's@^Qt5@@; [email protected]$@@; /^\s*$/d' | sort | pr -t -3
  1375. +
  1376. +spark_add_links_qt5(
  1377. + # AccessibilitySupport
  1378. + # AttributionsScannerTools
  1379. + Concurrent
  1380. + # Core
  1381. + # DBus
  1382. + # Designer
  1383. + # DesignerComponents
  1384. + # DeviceDiscoverySupport
  1385. + # DocTools
  1386. + # EdidSupport
  1387. + # EglFSDeviceIntegration
  1388. + # EglFsKmsSupport
  1389. + # EglSupport
  1390. + # EventDispatcherSupport
  1391. + # FbSupport
  1392. + # FontDatabaseSupport
  1393. + # GlxSupport
  1394. + Gui
  1395. + # Help
  1396. + # InputSupport
  1397. + # KmsSupport
  1398. + # LinguistTools
  1399. + # LinuxAccessibilitySupport
  1400. + # Network
  1401. + # OpenGL
  1402. + # OpenGLExtensions
  1403. + # PacketProtocol
  1404. + # PlatformCompositorSupport
  1405. + # Positioning
  1406. + # PositioningQuick
  1407. + PrintSupport
  1408. + # Qml
  1409. + # QmlDebug
  1410. + # QmlDevTools
  1411. + # QmlImportScanner
  1412. + # QmlModels
  1413. + # QmlWorkerScript
  1414. + # Quick
  1415. + # QuickCompiler
  1416. + # QuickControls2
  1417. + # QuickParticles
  1418. + # QuickShapes
  1419. + # QuickTemplates2
  1420. + # QuickTest
  1421. + # QuickWidgets
  1422. + # SerialBus
  1423. + # SerialPort
  1424. + # ServiceSupport
  1425. + # Sql
  1426. + # Svg
  1427. + # Test
  1428. + # ThemeSupport
  1429. + # UiPlugin
  1430. + # UiTools
  1431. + # VulkanSupport
  1432. + # WebChannel
  1433. + # WebEngine
  1434. + # WebEngineCore
  1435. + # WebEngineWidgets
  1436. + # WebKit
  1437. + # WebKitWidgets
  1438. + # WebSockets
  1439. + # Widgets
  1440. + # X11Extras
  1441. + # XcbQpa
  1442. + # XkbCommonSupport
  1443. + # Xml
  1444. + XmlPatterns
  1445. +)
  1446. \ No newline at end of file
  1447. diff --git a/cmake/SparkFindQt6Config.cmake b/cmake/SparkFindQt6Config.cmake
  1448. new file mode 100644
  1449. index 0000000..fb2d741
  1450. --- /dev/null
  1451. +++ b/cmake/SparkFindQt6Config.cmake
  1452. @@ -0,0 +1,130 @@
  1453. +cmake_minimum_required(VERSION 3.5.1)
  1454. +
  1455. +set(SPARK_FIND_QT6 TRUE)
  1456. +
  1457. +find_package(Qt6 COMPONENTS Core Widgets Network REQUIRED)
  1458. +
  1459. +# function(target_link_qt6 NAME)
  1460. +# target_link_libraries(${NAME}
  1461. +# Qt6::Core
  1462. +# Qt6::Widgets
  1463. +# Qt6::Network)
  1464. +# endfunction(target_link_qt6 NAME)
  1465. +
  1466. +# 使用 spark_add_link 生成 target_link_qt6 以替代上面内容
  1467. +spark_add_link(qt6 Qt6::Core Qt6::Widgets Qt6::Network)
  1468. +
  1469. +
  1470. +# spark_add_link_qt6
  1471. +# 自定义宏 spark_add_link_qt6 以扩展 target_link_qt6_<name> 结构
  1472. + # _IN_NAME: 此宏使用嵌套宏 spark_add_link 时追加 <name> 名称
  1473. + # 同等于 spark_add_link(qt_<name> ${ARGN})
  1474. +macro(spark_add_link_qt6 _IN_NAME)
  1475. + spark_add_link(qt6_${_IN_NAME} ${ARGN})
  1476. +endmacro(spark_add_link_qt6 _IN_NAME)
  1477. +
  1478. +# 使用 spark_add_link_qt6 生成 target_link_qt6_<name> 的宏
  1479. +# spark_add_link_qt5(Concurrent Qt6::Concurrent)
  1480. +
  1481. +# 高级自定义
  1482. +# spark_add_links_qt6
  1483. +# 自定义宏 spark_add_links_qt6 以扩展 spark_add_link_qt6 宏配置组
  1484. + # 特点: 任意长度参数
  1485. + # qt6_item: 为进行遍历后的单项,类似于 python3 中的 (for item in items:)
  1486. + # 例如: qt6_item 为 Core:
  1487. + # spark_add_link_qt6(${qt6_item} Qt6::${qt6_item})
  1488. + # 展开为 spark_add_link_qt6(Core Qt6::Core)
  1489. + # 展开为 spark_add_link(qt6_Core Qt6::Core)
  1490. + # 展开为 spark_add_link(qt6_Core Qt6::Core)
  1491. + # 特性: 增加 qt6_Core 转 qt6_core
  1492. + # string(TOLOWER <string> <output_variable>)
  1493. +macro(spark_add_links_qt6)
  1494. + set(qt6_items ${ARGN})
  1495. + foreach(qt6_item IN LISTS qt6_items)
  1496. + find_package(Qt6${qt6_item})
  1497. + spark_add_link_qt6(${qt6_item} Qt6::${qt6_item})
  1498. +
  1499. + string(TOLOWER "${qt6_item}" qt6_lower_item)
  1500. + spark_add_link_qt6(${qt6_lower_item} Qt6::${qt6_item})
  1501. + message("add_target_link_qt6_${qt6_item} or add_target_link_qt6_${qt6_lower_item}")
  1502. + endforeach(qt6_item IN LISTS qt6_items)
  1503. +endmacro(spark_add_links_qt6)
  1504. +
  1505. +# 找出所有 Qt6 模板
  1506. +# find /usr/lib/x86_64-linux-gnu/cmake/ -name "*Config.cmake" | sed 's@^.*/Qt6@Qt6@;' | grep ^Qt6
  1507. +
  1508. +# 掐头去尾,洗一次
  1509. +# find /usr/lib/x86_64-linux-gnu/cmake/ -name "*Config.cmake" | sed 's@^.*/Qt5@Qt5@;' | grep ^Qt5 | sed 's@^Qt5@@; [email protected]$@@; /^\s*$/d'
  1510. +
  1511. +# 排序
  1512. +# find /usr/lib/x86_64-linux-gnu/cmake/ -name "*Config.cmake" | sed 's@^.*/Qt5@Qt5@;' | grep ^Qt5 | sed 's@^Qt5@@; [email protected]$@@; /^\s*$/d' | sort | pr -t -3
  1513. +# find /usr/lib/x86_64-linux-gnu/cmake/ -name "*Config.cmake" | sed 's@^.*/Qt6@Qt6@;' | grep ^Qt6 | sed 's@^Qt6@@; [email protected]$@@; /^\s*$/d' | sort | pr -t -3
  1514. +
  1515. +spark_add_links_qt6(
  1516. + # BuildInternals
  1517. + # BuildInternals/StandaloneTests/Qt5CompatTests
  1518. + # BuildInternals/StandaloneTests/QtBaseTests
  1519. + Concurrent
  1520. + # Core
  1521. + Core5Compat
  1522. + # CoreTools
  1523. + # DBus
  1524. + # DBusTools
  1525. + # DeviceDiscoverySupportPrivate
  1526. + # EglFSDeviceIntegrationPrivate
  1527. + # EglFsKmsGbmSupportPrivate
  1528. + # EglFsKmsSupportPrivate
  1529. + # FbSupportPrivate
  1530. + # Gui
  1531. + # GuiTools
  1532. + # HostInfo
  1533. + # InputSupportPrivate
  1534. + # KmsSupportPrivate
  1535. + # Network
  1536. + # OpenGL
  1537. + # OpenGLWidgets
  1538. + PrintSupport
  1539. + # QComposePlatformInputContextPlugin
  1540. + # QCupsPrinterSupportPlugin
  1541. + # QEglFSEmulatorIntegrationPlugin
  1542. + # QEglFSIntegrationPlugin
  1543. + # QEglFSKmsEglDeviceIntegrationPlugin
  1544. + # QEglFSKmsGbmIntegrationPlugin
  1545. + # QEglFSX11IntegrationPlugin
  1546. + # QEvdevKeyboardPlugin
  1547. + # QEvdevMousePlugin
  1548. + # QEvdevTabletPlugin
  1549. + # QEvdevTouchScreenPlugin
  1550. + # QGifPlugin
  1551. + # QGtk3ThemePlugin
  1552. + # QIBaseDriverPlugin
  1553. + # QIbusPlatformInputContextPlugin
  1554. + # QICOPlugin
  1555. + # QJpegPlugin
  1556. + # QLibInputPlugin
  1557. + # QLinuxFbIntegrationPlugin
  1558. + # QMinimalEglIntegrationPlugin
  1559. + # QMinimalIntegrationPlugin
  1560. + # QMYSQLDriverPlugin
  1561. + # QNetworkManagerNetworkInformationPlugin
  1562. + # QODBCDriverPlugin
  1563. + # QOffscreenIntegrationPlugin
  1564. + # QPSQLDriverPlugin
  1565. + # QSQLiteDriverPlugin
  1566. + # QTlsBackendCertOnlyPlugin
  1567. + # QTlsBackendOpenSSLPlugin
  1568. + # QTsLibPlugin
  1569. + # QTuioTouchPlugin
  1570. + # QVkKhrDisplayIntegrationPlugin
  1571. + # QVncIntegrationPlugin
  1572. + # QXcbEglIntegrationPlugin
  1573. + # QXcbGlxIntegrationPlugin
  1574. + # QXcbIntegrationPlugin
  1575. + # QXdgDesktopPortalThemePlugin
  1576. + # Sql
  1577. + # Test
  1578. + # Widgets
  1579. + # WidgetsTools
  1580. + # XcbQpaPrivate
  1581. + # Xml
  1582. +)
  1583. \ No newline at end of file
  1584. diff --git a/cmake/SparkMacrosConfig.cmake b/cmake/SparkMacrosConfig.cmake
  1585. new file mode 100644
  1586. index 0000000..4f68ce1
  1587. --- /dev/null
  1588. +++ b/cmake/SparkMacrosConfig.cmake
  1589. @@ -0,0 +1,161 @@
  1590. +cmake_minimum_required(VERSION 3.5.1)
  1591. +
  1592. +# 定义一些 macro 用于自动生成构建结构
  1593. +
  1594. +# spark_add_library <lib_name> [files]...
  1595. +# 构建一个库,基于指定的源文件
  1596. + # 并根据库名生成 target_link_<lib_name> 函数
  1597. +macro(spark_add_library _lib_name)
  1598. + message("================ ${_lib_name} Library ================")
  1599. + add_library(${_lib_name} ${ARGN})
  1600. +
  1601. + set(SRCS ${ARGN})
  1602. + foreach(item IN LISTS SRCS)
  1603. + message(" -> ${item}")
  1604. + endforeach(item IN LISTS SRCS)
  1605. +
  1606. + function(target_link_${_lib_name} TARGET)
  1607. + message("${_lib_name}")
  1608. + target_link_libraries(${TARGET} ${_lib_name})
  1609. + endfunction(target_link_${_lib_name} TARGET)
  1610. +
  1611. +endmacro(spark_add_library _lib_name)
  1612. +
  1613. +# spark_add_library_path <lib_name> <lib_path>
  1614. +# 构建一个库,基于指定的路径
  1615. + # 并根据库名生成 target_link_<lib_name> 函数
  1616. + # 函数内增加以 <lib_path> 头文件搜索路径
  1617. +macro(spark_add_library_path _lib_name _lib_path)
  1618. +
  1619. + set(${_lib_name}_SOURCE_PATH ${_lib_path})
  1620. + set(${_lib_name}_TYPE)
  1621. + if(${${_lib_name}_SOURCE_PATH} STREQUAL SHARED OR ${${_lib_name}_SOURCE_PATH} STREQUAL STATIC)
  1622. + set(${_lib_name}_SOURCE_PATH ${ARGV2})
  1623. + set(${_lib_name}_TYPE ${_lib_path})
  1624. + message("_lib_path: ${${_lib_name}_SOURCE_PATH}(${ARGV2})[${${_lib_name}_TYPE}]")
  1625. +
  1626. + if(${ARGC} LESS 3)
  1627. + message(FATAL_ERROR "Missing parameter, library path not specified.")
  1628. + endif(${ARGC} LESS 3)
  1629. + endif(${${_lib_name}_SOURCE_PATH} STREQUAL SHARED OR ${${_lib_name}_SOURCE_PATH} STREQUAL STATIC)
  1630. +
  1631. + aux_source_directory(${${_lib_name}_SOURCE_PATH} ${_lib_name}_SOURCES)
  1632. +
  1633. + message("================ spark_add_library_path: ${_lib_name} ================")
  1634. + file(GLOB UI_LIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${${_lib_name}_SOURCE_PATH}/*.ui)
  1635. + add_library(${_lib_name} ${${_lib_name}_TYPE} ${${_lib_name}_SOURCES} ${UI_LIST})
  1636. + message("${_lib_name}_SOURCES: ${${_lib_name}_SOURCES}, ${${_lib_name}_SOURCE_PATH}")
  1637. + foreach(item IN LISTS ${_lib_name}_SOURCES)
  1638. + message(" -> ${item}")
  1639. + endforeach(item IN LISTS ${_lib_name}_SOURCES)
  1640. +
  1641. + function(target_link_${_lib_name} TARGET)
  1642. + # message("target_link_${_lib_name}")
  1643. + message(" -> (include): ${${_lib_name}_SOURCE_PATH}")
  1644. + target_include_directories(${TARGET} PUBLIC "${${_lib_name}_SOURCE_PATH}")
  1645. + target_link_libraries(${TARGET} ${_lib_name})
  1646. + endfunction(target_link_${_lib_name} TARGET)
  1647. +
  1648. + function(target_include_${_lib_name} TARGET)
  1649. + # message("target_link_${_lib_name}")
  1650. + message(" -> (include): ${${_lib_name}_SOURCE_PATH}")
  1651. + target_include_directories(${TARGET} PUBLIC "${${_lib_name}_SOURCE_PATH}")
  1652. + # target_link_libraries(${TARGET} ${_lib_name})
  1653. + endfunction(target_include_${_lib_name} TARGET)
  1654. +
  1655. + # file(GLOB HEADER_LIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${${_lib_name}_SOURCE_PATH}/*.h)
  1656. + target_include_directories(${_lib_name} PUBLIC "${${_lib_name}_SOURCE_PATH}")
  1657. +
  1658. + # 如果想用以下操作手动实现 target_link_include_directories
  1659. + # 请注意对 LIST 类型使用 "" 进行包围
  1660. + # target_link_include_directories 的 PUBLIC 将会填充(追加)目标的 INCLUDE_DIRECTORIES 属性
  1661. + # target_link_include_directories 支持 cmake 生成大表达式,更容易操作,手动将无法实现此类能力
  1662. + # target_link_include_directories 支持相对路径和绝对路径参数
  1663. + # 手动操作将必须使用绝对路径,这是不好的地方
  1664. + # get_target_property(_lib_include_directories ${_lib_name} INCLUDE_DIRECTORIES)
  1665. + # list(APPEND _lib_include_directories "${CMAKE_CURRENT_LIST_DIR}/${${_lib_name}_SOURCE_PATH}")
  1666. + # message("----> ${CMAKE_CURRENT_LIST_DIR}/${${_lib_name}_SOURCE_PATH}")
  1667. + # message("----> ${_lib_include_directories}")
  1668. + # set_target_properties(${_lib_name} PROPERTIES
  1669. + # INCLUDE_DIRECTORIES "${_lib_include_directories}"
  1670. + # INTERFACE_INCLUDE_DIRECTORIES "${_lib_include_directories}"
  1671. + # )
  1672. +
  1673. +endmacro(spark_add_library_path _lib_name _lib_path)
  1674. +
  1675. +# spark_add_executable <exec_name> [files]...
  1676. +# 构建一个可执行文件,基于指定的源文件
  1677. + # Qt编译时源文件包括很多类型,需要指定 *.h/*.cpp/*.qrc/*.qm/... 等
  1678. +macro(spark_add_executable _exec_name)
  1679. +
  1680. + message("================ ${_exec_name} Executable ================")
  1681. + add_executable(${_exec_name} ${ARGN})
  1682. +
  1683. +endmacro(spark_add_executable _exec_name)
  1684. +
  1685. +macro(spark_add_executable_path _exec_name _exec_path)
  1686. + aux_source_directory(${_exec_path} ${_exec_name}_SOURCES)
  1687. +
  1688. + message("================ ${_exec_name} Executable ================")
  1689. + file(GLOB UI_LIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${_exec_path}/*.ui)
  1690. + add_executable(${_exec_name} ${${_exec_name}_SOURCES} ${ARGN} ${UI_LIST})
  1691. + foreach(item IN LISTS ${_exec_name}_SOURCES)
  1692. + message(" -> ${item}")
  1693. + endforeach(item IN LISTS ${_exec_name}_SOURCES)
  1694. +
  1695. + # function(target_link_${_exec_name} TARGET)
  1696. + # message("target_link_${_lib_name}")
  1697. + message(" -> (include): ${_exec_path}")
  1698. + target_include_directories(${_exec_name} PUBLIC "${_exec_path}")
  1699. + # target_link_libraries(${TARGET} ${_lib_name})
  1700. + # endfunction(target_link_${_exec_name} TARGET)
  1701. + # target_link_${_exec_name}(${_exec_name})
  1702. +
  1703. +endmacro(spark_add_executable_path _exec_name _exec_path)
  1704. +
  1705. +# spark_find_library
  1706. +# 搜索一个库,基于指定的库名,调用 pkg-config 搜索库
  1707. + # 并根据库名生成一个 target_link_<prefix> 函数
  1708. +macro(spark_find_library _prefix)
  1709. + find_package(PkgConfig REQUIRED)
  1710. +
  1711. + # libnotify
  1712. + pkg_check_modules(${_prefix} ${ARGN})
  1713. + function(target_link_${_prefix} TARGET)
  1714. + target_include_directories(${TARGET} PUBLIC
  1715. + ${${_prefix}_INCLUDE_DIRS})
  1716. + target_link_libraries(${TARGET}
  1717. + ${${_prefix}_LIBRARIES})
  1718. + endfunction(target_link_${_prefix} TARGET)
  1719. +
  1720. +endmacro(spark_find_library _prefix)
  1721. +
  1722. +
  1723. +# spark_add_executable_paths
  1724. +# 自定义构建宏,基于指定的前缀名称,处理后续参数为子目录
  1725. + # item: 为进行遍历后的单项,类似于 python3 中的 (for item in items:)
  1726. + # file: 为在目录中不以递归(GLOB_RECURSE)方式寻找 qrc 文件,需要将其参与编译才能被 rcc
  1727. + # 并根据 prefix-<item> 生成构建目标,
  1728. +macro(spark_add_executable_paths _prefix_path)
  1729. + set(PATHS ${ARGN})
  1730. + foreach(item IN LISTS PATHS)
  1731. + file(GLOB QRCS "${item}/*.qrc")
  1732. + message(">>> add_executable: " "${_prefix_path}-${item} ${item} + ${QRCS}")
  1733. + spark_add_executable_path(${_prefix_path}-${item} ${item} ${QRCS})
  1734. + target_link_qt5(${_prefix_path}-${item})
  1735. + endforeach(item IN LISTS PATHS)
  1736. +endmacro(spark_add_executable_paths _prefix_path)
  1737. +
  1738. +# spark_add_link
  1739. +# 自定义宏以代替当前使用 fucntion 定义 target_link_<name> 结构
  1740. + # _IN_NAME: 此宏生成 target_link_<name> 的要求参数
  1741. + # ARGN: 此宏剩余的参数列表
  1742. + # 在使用 target_link_<name> 时
  1743. + # _NAME: 用于此 fucntion 中的要求参数: <_NAME>目标将要连接此库
  1744. +macro(spark_add_link _IN_NAME)
  1745. + function(target_link_${_IN_NAME} _NAME)
  1746. + message("LINK ${_NAME} ${ARGN}")
  1747. + target_link_libraries(${_NAME}
  1748. + ${ARGN})
  1749. + endfunction(target_link_${_IN_NAME} _NAME)
  1750. +endmacro(spark_add_link _IN_NAME)
  1751. diff --git a/cmake/SparkMacrosExtendConfig.cmake b/cmake/SparkMacrosExtendConfig.cmake
  1752. new file mode 100644
  1753. index 0000000..bd15f0d
  1754. --- /dev/null
  1755. +++ b/cmake/SparkMacrosExtendConfig.cmake
  1756. @@ -0,0 +1,237 @@
  1757. +
  1758. +# find_plus
  1759. +# 寻找 INVAl 传入的字符串,如果存在 + 字符将写入位置到 OUTVAL
  1760. +function(find_plus INVAL OUTVAL)
  1761. + string(FIND "${INVAL}" "+" plus_index)
  1762. + set(${OUTVAL} ${plus_index} PARENT_SCOPE)
  1763. + # if(plus_index LESS 0)
  1764. + # set(${OUTVAL} -1 PARENT_SCOPE)
  1765. + # else()
  1766. + # set(${OUTVAL} ${plus_index} PARENT_SCOPE)
  1767. + # endif(plus_index LESS 0)
  1768. +endfunction(find_plus INVAL OUTVAL)
  1769. +
  1770. +# find_plus("FF" FFFF)
  1771. +# message("--> FFFF ${FFFF}") # --> FFFF -1
  1772. +# find_plus("F+F" FFFF)
  1773. +# message("--> FFFF ${FFFF}") # --> FFFF 1
  1774. +# find_plus("+F+F" FFFF)
  1775. +# message("--> FFFF ${FFFF}") # --> FFFF 0
  1776. +
  1777. +# set(FFF)
  1778. +# list(APPEND FFFF )
  1779. +# list(APPEND FFFF "F")
  1780. +# list(APPEND FFFF "FA")
  1781. +# message("--> FFFF: ${FFFF}") # --> FFFF: F;FA
  1782. +
  1783. +# set(FFFFS "")
  1784. +# list(APPEND FFFFS ${FFFF})
  1785. +# message("--> FFFFS: ${FFFFS}") # --> FFFFS: F;FA
  1786. +
  1787. +# set(FFFF "+AA+BB+CC+DD")
  1788. +# string(REPLACE "+" ";" FFFFL "${FFFF}")
  1789. +# list(LENGTH FFFFL FFFFLEN)
  1790. +# message("--> FFFFL: ${FFFFL} --> ${FFFFLEN}") # --> FFFFL: F;
  1791. +
  1792. +# plus_list
  1793. +# 将传入的 "+AAA+BBB+CCC" 类型数据变成一个 列表(list)
  1794. +# 适用于不使用 string 进行替换 + 为 ";" 的情况下使用直接变成 list
  1795. +function(plus_list INVAL OUTVAL OUTVALLEN)
  1796. + # set(${OUTVAL} "..." PARENT_SCOPE)
  1797. + # set(${OUTVALLEN} 0 PARENT_SCOPE)
  1798. +
  1799. + set(_tmps "") # 设置为空的
  1800. +
  1801. + # 寻找下一个 + 位置
  1802. + find_plus(${INVAL} RIGHT_PLUS)
  1803. +
  1804. + string(LENGTH "${INVAL}" INVALLEN)
  1805. + message("--> 传入的 INVAL: --> 内容: ${INVAL}")
  1806. + message("--> 传入的 INVAL: --> 长度: ${INVALLEN}")
  1807. + message("--> 传入的 INVAL: --> +位置: ${RIGHT_PLUS}")
  1808. +
  1809. + # 判断是否有右侧 + 号
  1810. + if(RIGHT_PLUS LESS 0)
  1811. + message("--> 传入的 INVAL: --> 无需计算新的+位置")
  1812. + # message("--> 计算新的 + 位置: ${_PLUSINDEX}")
  1813. + list(APPEND _tmps ${INVAL})
  1814. + else()
  1815. + math(EXPR _PLUSINDEX "${RIGHT_PLUS}+1")
  1816. + message("--> 传入的 INVAL: --> 需计算+位置 --> 右移: ${_PLUSINDEX}")
  1817. +
  1818. + string(SUBSTRING "${INVAL}" ${_PLUSINDEX} ${INVALLEN} NewVal)
  1819. + message("--> 传入的 INVAL: --> 需计算+位置 --> 右移: ${_PLUSINDEX} -> 内容: ${NewVal}")
  1820. + # string(REPLACE "+" ";" _tmps "${NewVal}")
  1821. + # list(LENGTH FFFFL FFFFLEN)
  1822. +
  1823. + # message("--> 计算新的 + 位置: ${_PLUSINDEX} --> 后面的 NewVal: ${NewVal}")
  1824. +
  1825. + # find_plus(${NewVal} _NextPlus)
  1826. + # if(_NextPlus LESS 0)
  1827. + # list(APPEND _tmps ${NewVal})
  1828. + # message("--> 追加新的 + 位置: ${_PLUSINDEX} --> 后面的")
  1829. + # else()
  1830. + # message("--> 追加新的 + 位置: ${_PLUSINDEX} --> 后面的")
  1831. + # # 重新
  1832. + # # plus_list(${NewVal} NewValS )
  1833. + # # foreach(item)
  1834. + # # list(APPEND _tmps ${item})
  1835. + # # endforeach(item)
  1836. + # endif(_NextPlus LESS 0)
  1837. + endif(RIGHT_PLUS LESS 0)
  1838. +
  1839. + set(${OUTVAL} ${_tmps} PARENT_SCOPE)
  1840. + list(LENGTH _tmps _tmps_len)
  1841. + set(${OUTVALLEN} ${_tmps_len} PARENT_SCOPE)
  1842. +
  1843. +endfunction(plus_list INVAL OUTVAL OUTVALLEN)
  1844. +
  1845. +# plus_list("+AAA+BBB+CCC+DDD" FFF FFLEN)
  1846. +# message("--------> ${FFF}: -> ${FFLEN}")
  1847. +
  1848. +# spark_add_library_realpaths
  1849. +# 基于传入的项进行构建
  1850. +# 可接受的值为: 路径列表
  1851. +# 可接受的值为: 路径列表+依赖库A+依赖库B
  1852. +macro(spark_add_library_realpaths)
  1853. + message("---> 基于传入的项进行构建 <---")
  1854. + # message("--> src/unclassified/ItemDelegates/NdStyledItemDelegate")
  1855. + # string(FIND <string> <substring> <output_variable> [REVERSE])
  1856. + # string(SUBSTRING <string> <begin> <length> <output_variable>)
  1857. + # math(EXPR value "100 * 0xA" OUTPUT_FORMAT DECIMAL) # value is set to "1000"
  1858. +
  1859. + set(REALPATHS ${ARGN})
  1860. + foreach(REALPATH IN LISTS REALPATHS)
  1861. + message("---> 传入路径: ${REALPATH} <--- ")
  1862. + string(LENGTH "${REALPATH}" REALPATH_LENGTH)
  1863. + message("---> 计算传入路径长度: --> 长度: ${REALPATH_LENGTH}")
  1864. +
  1865. + string(FIND "${REALPATH}" "/" LASTINDEX REVERSE)
  1866. + message("---> 计算传入路径末尾/位置: --> 长度: ${LASTINDEX}")
  1867. + math(EXPR LASTINDEX "${LASTINDEX}+1")
  1868. + message("---> 计算传入路径末尾/右移: --> 长度: ${LASTINDEX}")
  1869. + string(SUBSTRING "${REALPATH}" ${LASTINDEX} ${REALPATH_LENGTH} REALNAME_Dependency)
  1870. +
  1871. + # 找 + 号下标,这是找+号的函数
  1872. + find_plus(${REALPATH} RIGHT_PLUS)
  1873. +
  1874. + # 判断是否有找到 + 号下标,值为 -1 或 正整数
  1875. + if(RIGHT_PLUS LESS 0) # 小于0: 不存在 + 号
  1876. + set(REALNAME "${REALNAME_Dependency}")
  1877. + message("---> 传入路径末尾/右移部分: --> ${REALNAME} <-- 无依赖+")
  1878. +
  1879. + message("---> 构建 ${REALNAME} -> ${REALNAME} ${REALPATH} ")
  1880. +
  1881. + spark_add_library_path(${REALNAME} ${REALPATH})
  1882. +
  1883. + if(SPARK_FIND_QT5)
  1884. + target_link_qt5(${REALNAME})
  1885. + endif(SPARK_FIND_QT5)
  1886. +
  1887. + if(SPARK_FIND_QT6)
  1888. + target_link_qt6(${REALNAME})
  1889. + endif(SPARK_FIND_QT6)
  1890. +
  1891. + else()
  1892. + message("---> 传入路径末尾/右移部分: --> ${REALNAME_Dependency} <-- 依赖+")
  1893. +
  1894. + # 存在+号,将截取从 / 到 + 号之间的内容作为目标名称
  1895. + # 例如 src/unclassified/widgets/DocTypeListView+JsonDeploy
  1896. + # ^(LASTINDEX) ^(RIGHT_PLUS)
  1897. + # 将 RIGHT_PLUS - LASTINDEX 计算出 DocTypeListView 字符长度
  1898. + math(EXPR REALNAME_LENGTH "${RIGHT_PLUS}-${LASTINDEX}")
  1899. +
  1900. + message("---> 计算传入路径末尾/右移部分: --> 位置: ${RIGHT_PLUS}")
  1901. + # message("---> 计算传入路径末尾/右移部分: --> 长度: ${REALNAME_Dependency}")
  1902. +
  1903. + # 目标名称为 DocTypeListView
  1904. + # 依赖为 JsonDeploy
  1905. + # set(REALNAME "")
  1906. + string(SUBSTRING "${REALPATH}" 0 ${RIGHT_PLUS} _REALPATH_DIR)
  1907. + string(SUBSTRING "${REALPATH}" ${LASTINDEX} ${REALNAME_LENGTH} REALNAME)
  1908. +
  1909. + message("---> 计算传入路径末尾/右移部分: --> 库名: ${REALNAME}")
  1910. +
  1911. + string(SUBSTRING "${REALPATH}" ${RIGHT_PLUS} ${REALPATH_LENGTH} Dependency)
  1912. + message("---> 计算传入路径末尾/右移部分: --> 库名: ${REALNAME} --> +部分: ${Dependency}")
  1913. +
  1914. + # plus_list(${Dependency} dependencies dependencies_len)
  1915. + string(REPLACE "+" ";" dependencies "${Dependency}")
  1916. + message("---> 计算传入路径末尾/右移部分: --> 库名: ${REALNAME} --> +部分: ${Dependency} --> 列表: ${dependencies} <-- ")
  1917. +
  1918. +
  1919. + message("---> 构建 ${REALNAME} -> ${REALNAME} ${_REALPATH_DIR}")
  1920. +
  1921. + spark_add_library_path(${REALNAME} ${_REALPATH_DIR})
  1922. + # target_link_qt5(${REALNAME}) # 使用依赖的依赖或许也不错
  1923. +
  1924. + target_include_directories(${REALNAME} PUBLIC ${_REALPATH_DIR})
  1925. + target_link_libraries(${REALNAME} ${dependencies})
  1926. +
  1927. + endif(RIGHT_PLUS LESS 0)
  1928. + endforeach(REALPATH IN LISTS REALPATHS)
  1929. +
  1930. +endmacro(spark_add_library_realpaths)
  1931. +
  1932. +
  1933. +# spark_aux_source_paths
  1934. +# 将指定路径中的文件变成可用的AUX源文件列表
  1935. +macro(spark_aux_source_paths AUX_VAR)
  1936. + set(${AUX_VAR} "")
  1937. + set(${AUX_VAR}_PATHS ${ARGN})
  1938. +
  1939. + foreach(aux_path IN LISTS ${AUX_VAR}_PATHS)
  1940. + # message("aux_path: ${aux_path}")
  1941. + aux_source_directory(${aux_path} ${AUX_VAR})
  1942. + endforeach(aux_path IN LISTS ${AUX_VAR}_PATHS)
  1943. +
  1944. +endmacro(spark_aux_source_paths AUX_VAR)
  1945. +
  1946. +# spark_file_glob
  1947. +#
  1948. +macro(spark_file_glob FGLOB_VAR)
  1949. + set(${FGLOB_VAR} "")
  1950. + set(${FGLOB_VAR}_PATHS ${ARGN})
  1951. +
  1952. + foreach(fglob_path IN LISTS ${FGLOB_VAR}_PATHS)
  1953. +
  1954. + file(GLOB FGLOB_PATH_SRCS ${fglob_path})
  1955. + foreach(fglob_path_src IN LISTS FGLOB_PATH_SRCS)
  1956. + # message(" -> ${item}")
  1957. + list(APPEND ${FGLOB_VAR} ${fglob_path_src})
  1958. + endforeach(fglob_path_src IN LISTS FGLOB_PATH_SRCS)
  1959. +
  1960. + endforeach(fglob_path IN LISTS ${FGLOB_VAR}_PATHS)
  1961. +
  1962. +endmacro(spark_file_glob FGLOB_VAR)
  1963. +
  1964. +
  1965. +# spark_add_source_paths
  1966. +# 将指定路径中的文件变成可用的源文件列表
  1967. +#
  1968. +macro(spark_add_source_paths SOURCE_VAR)
  1969. + set(${SOURCE_VAR} "")
  1970. + set(${SOURCE_VAR}_PATHS ${ARGN})
  1971. +
  1972. + spark_aux_source_paths(${SOURCE_VAR} ${ARGN})
  1973. + foreach(source_path IN LISTS ${SOURCE_VAR}_PATHS)
  1974. + # list(APPEND ${SOURCE_VAR}_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_PATH})
  1975. + # aux_source_directory(${SOURCE_PATH} _SOURCES)
  1976. + # foreach(item IN LISTS _SOURCES)
  1977. + # # message(" -> ${item}")
  1978. + # list(APPEND ${SOURCE_VAR} ${item})
  1979. + # endforeach(item IN LISTS _SOURCES)
  1980. +
  1981. + # file(GLOB HEADER_LIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${SOURCE_PATH}/*.h)
  1982. + # foreach(item IN LISTS HEADER_LIST)
  1983. + # # message(" -> ${item}")
  1984. + # list(APPEND ${SOURCE_VAR} ${item})
  1985. + # endforeach(item IN LISTS HEADER_LIST)
  1986. +
  1987. + file(GLOB UI_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${source_path}/*.ui)
  1988. + foreach(ui_src IN LISTS UI_SRCS)
  1989. + # message(" -> ${item}")
  1990. + list(APPEND ${SOURCE_VAR} ${ui_src})
  1991. + endforeach(ui_src IN LISTS UI_SRCS)
  1992. + endforeach(source_path IN LISTS ${SOURCE_VAR}_PATHS)
  1993. +endmacro(spark_add_source_paths SOURCE_VAR)
  1994. --
  1995. 2.20.1
  1996. From ba6310f45bd803ed6ac60b9851cecc14445cc942 Mon Sep 17 00:00:00 2001
  1997. From: zinface <[email protected]>
  1998. Date: Sun, 5 Feb 2023 13:00:22 +0800
  1999. Subject: [PATCH 08/13] =?UTF-8?q?repo:=20=E5=B0=86=E7=8E=B0=E6=9C=89?=
  2000. =?UTF-8?q?=E6=9E=84=E5=BB=BA=E8=BD=AC=E4=B8=BA=20spark=20=E5=8C=96?=
  2001. MIME-Version: 1.0
  2002. Content-Type: text/plain; charset=UTF-8
  2003. Content-Transfer-Encoding: 8bit
  2004. ---
  2005. CMakeLists.txt | 120 +++++++++++++++++++++++++++----------------------
  2006. 1 file changed, 66 insertions(+), 54 deletions(-)
  2007. diff --git a/CMakeLists.txt b/CMakeLists.txt
  2008. index 60e9171..d990b1d 100644
  2009. --- a/CMakeLists.txt
  2010. +++ b/CMakeLists.txt
  2011. @@ -1,60 +1,72 @@
  2012. cmake_minimum_required(VERSION 3.22)
  2013. +
  2014. project(notepad-- VERSION 1.22.0)
  2015. -set(CMAKE_AUTOMOC ON)
  2016. -set(CMAKE_AUTOUIC ON)
  2017. -set(CMAKE_AUTORCC ON)
  2018. -
  2019. -find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets Concurrent Network PrintSupport XmlPatterns)
  2020. -
  2021. -# TODO: use system provided libraries to build
  2022. -# current status: some header can not be found,for example: Scintilla.h
  2023. -find_library(QSCINTILLA_LIB_PATH qscintilla2_qt5)
  2024. -find_path(QSCINTILLA_INC_PATH qsciscintilla.h PATHS /usr/include/)
  2025. -find_path(SCINTILLA_INC_PATH Scintilla.h PATHS /usr/include/)
  2026. -if((${QSCINTILLA_LIB_PATH} STREQUAL "QSCINTILLA_LIB_PATH-NOTFOUND") OR
  2027. - (${QSCINTILLA_INC_PATH} STREQUAL "QSCINTILLA_INC_PATH-NOTFOUND") OR
  2028. - (${SCINTILLA_INC_PATH} STREQUAL "SCINTILLA_INC_PATH-NOTFOUND") )
  2029. -set(NOTEPAD_USE_SYS_LIB OFF)
  2030. -message("system libraries or header not found,build from local")
  2031. -add_subdirectory(${PROJECT_SOURCE_DIR}/src/qscint)
  2032. -else()
  2033. -set(NOTEPAD_USE_SYS_LIB ON)
  2034. -message("use system libraries")
  2035. -message("QSCINTILLA_LIB_PATH:" ${QSCINTILLA_LIB_PATH})
  2036. -message("QSCINTILLA_INC_PATH:" ${QSCINTILLA_INC_PATH})
  2037. -message("SCINTILLA_INC_PATH:" ${SCINTILLA_INC_PATH})
  2038. -endif()
  2039. -
  2040. -file(GLOB UI_SRC ${PROJECT_SOURCE_DIR}/src/*.ui)
  2041. -set(UI_SRC ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/cceditor/ccnotepad.ui)
  2042. -aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC)
  2043. -aux_source_directory(${PROJECT_SOURCE_DIR}/src/cceditor SRC)
  2044. -
  2045. -add_executable(${PROJECT_NAME} ${SRC} ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/RealCompare.qrc)
  2046. -target_include_directories(${PROJECT_NAME} PRIVATE
  2047. -${PROJECT_SOURCE_DIR}/src
  2048. -${PROJECT_SOURCE_DIR}/src/cceditor
  2049. -)
  2050. -
  2051. -if(NOTEPAD_USE_SYS_LIB)
  2052. -target_include_directories(${PROJECT_NAME} PRIVATE ${QSCINTILLA_INC_PATH} ${SCINTILLA_INC_PATH})
  2053. -endif()
  2054. -
  2055. -target_link_libraries(${PROJECT_NAME} qscintilla2_qt5 Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent Qt5::Network Qt5::PrintSupport Qt5::XmlPatterns)
  2056. -
  2057. -install(
  2058. - TARGETS ${PROJECT_NAME}
  2059. - DESTINATION "bin"
  2060. -)
  2061. -
  2062. -install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/linux/usr
  2063. - DESTINATION "/")
  2064. -
  2065. -include(${PROJECT_SOURCE_DIR}/cmake/package_config.cmake)
  2066. -include(CPack)
  2067. -
  2068. -target_link_libraries(${PROJECT_NAME} qscint Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent Qt5::Network Qt5::PrintSupport Qt5::XmlPatterns)
  2069. +include(cmake/SparkEnvConfig.cmake)
  2070. +include(cmake/SparkMacrosConfig.cmake)
  2071. +include(cmake/SparkFindQt5Config.cmake)
  2072. +# include(cmake/SparkFindQt6Config.cmake)
  2073. +include(cmake/SparkMacrosExtendConfig.cmake)
  2074. +
  2075. +# ----------------- Build QScint ----------------- #
  2076. +if(TRUE)
  2077. + # add_subdirectory(${PROJECT_SOURCE_DIR}/src/qscint)
  2078. + # file(GLOB MOC_HEADER src/qscint/src/Qsci/*.h)
  2079. + spark_file_glob(MOC_HEADER "src/qscint/src/Qsci/*.h")
  2080. +
  2081. + spark_add_source_paths(QSciSources
  2082. + src/qscint/src
  2083. + src/qscint/scintilla/lexers
  2084. + src/qscint/scintilla/lexlib
  2085. + src/qscint/scintilla/src
  2086. + src/qscint/scintilla/boostregex
  2087. +
  2088. + # src/qscint/src/Qsci
  2089. + # FAIL: only *.ui will spark_file_glob(MOC_HEADER ...)
  2090. + )
  2091. + spark_add_library(QSci STATIC ${QSciSources} ${MOC_HEADER})
  2092. + target_compile_definitions(QSci PRIVATE SCINTILLA_QT SCI_LEXER INCLUDE_DEPRECATED_FEATURES)
  2093. + target_include_directories(QSci PRIVATE
  2094. + src/qscint/scintilla/boostregex
  2095. + src/qscint/scintilla/lexlib)
  2096. + target_include_directories(QSci PUBLIC
  2097. + src/qscint/src
  2098. + src/qscint/src/Qsci
  2099. + src/qscint/scintilla/src
  2100. + src/qscint/scintilla/include)
  2101. + target_link_qt5(QSci)
  2102. + target_link_qt5_PrintSupport(QSci)
  2103. + target_link_qt5_Concurrent(QSci)
  2104. +endif(TRUE)
  2105. +
  2106. +
  2107. +# ----------------- Build CCEditor ----------------- #
  2108. +if(TRUE)
  2109. +
  2110. + # 准备构建 CCEditor
  2111. + set(QRC_SOURCES src/RealCompare.qrc)
  2112. + spark_aux_source_paths(CCEditorSources
  2113. + src
  2114. + src/cceditor
  2115. + )
  2116. + spark_add_executable(${PROJECT_NAME} ${CCEditorSources} ${QRC_SOURCES})
  2117. + target_include_directories(${PROJECT_NAME} PRIVATE
  2118. + ${PROJECT_SOURCE_DIR}/src
  2119. + ${PROJECT_SOURCE_DIR}/src/cceditor
  2120. +
  2121. + ${PROJECT_SOURCE_DIR}/src/qscint/src
  2122. + ${PROJECT_SOURCE_DIR}/src/qscint/src/Qsci
  2123. + ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/src
  2124. + ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/include
  2125. + ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/lexlib
  2126. + ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/boostregex
  2127. + )
  2128. + # target_link_libraries(${PROJECT_NAME} QSci)
  2129. + target_link_QSci(${PROJECT_NAME})
  2130. + target_link_qt5_XmlPatterns(${PROJECT_NAME})
  2131. +
  2132. +endif(TRUE)
  2133. +
  2134. if(CMAKE_HOST_UNIX)
  2135. include(cmake/SparkInstallMacrosConfig.cmake)
  2136. --
  2137. 2.20.1
  2138. From 28e63cf37d6e4b41b4a0720ee7a321d484487eb5 Mon Sep 17 00:00:00 2001
  2139. From: zinface <[email protected]>
  2140. Date: Sun, 5 Feb 2023 16:58:53 +0800
  2141. Subject: [PATCH 09/13] =?UTF-8?q?repo:=20=E9=A2=84=E7=95=99=E9=85=8D?=
  2142. =?UTF-8?q?=E7=BD=AE=E4=B8=BA=E6=8F=92=E4=BB=B6=E7=9B=B8=E5=85=B3=E6=94=AF?=
  2143. =?UTF-8?q?=E6=8C=81=E9=83=A8=E5=88=86?=
  2144. MIME-Version: 1.0
  2145. Content-Type: text/plain; charset=UTF-8
  2146. Content-Transfer-Encoding: 8bit
  2147. ---
  2148. CMakeLists.txt | 10 ++++++++++
  2149. 1 file changed, 10 insertions(+)
  2150. diff --git a/CMakeLists.txt b/CMakeLists.txt
  2151. index d990b1d..c18417f 100644
  2152. --- a/CMakeLists.txt
  2153. +++ b/CMakeLists.txt
  2154. @@ -67,6 +67,16 @@ if(TRUE)
  2155. endif(TRUE)
  2156. +# ----------------- CCEditor Plugin Support or Other ----------------- #
  2157. +if(TRUE)
  2158. +
  2159. + # 开启插件支持
  2160. + # target_compile_definitions(${PROJECT_NAME} PUBLIC NO_PLUGIN=0)
  2161. +
  2162. + # 其它有关插件的部分处理...
  2163. +
  2164. +endif(TRUE)
  2165. +
  2166. if(CMAKE_HOST_UNIX)
  2167. include(cmake/SparkInstallMacrosConfig.cmake)
  2168. --
  2169. 2.20.1
  2170. From 481a7f7b39fe4b67bec6a3cab24e59a4e06b39f0 Mon Sep 17 00:00:00 2001
  2171. From: zinface <[email protected]>
  2172. Date: Mon, 6 Feb 2023 01:10:42 +0800
  2173. Subject: [PATCH 10/13] =?UTF-8?q?linux/plugin-support:=20=E6=B7=BB?=
  2174. =?UTF-8?q?=E5=8A=A0=20Notepad--=20=E6=8F=92=E4=BB=B6=E6=9E=84=E5=BB=BA?=
  2175. =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=94=AF=E6=8C=81?=
  2176. MIME-Version: 1.0
  2177. Content-Type: text/plain; charset=UTF-8
  2178. Content-Transfer-Encoding: 8bit
  2179. ---
  2180. CMakeLists.txt | 71 +++++++++++++++++++-
  2181. cmake/NotepadPluginConfig.cmake.in | 96 ++++++++++++++++++++++++++++
  2182. cmake/SparkInstallMacrosConfig.cmake | 3 +-
  2183. 3 files changed, 167 insertions(+), 3 deletions(-)
  2184. create mode 100644 cmake/NotepadPluginConfig.cmake.in
  2185. diff --git a/CMakeLists.txt b/CMakeLists.txt
  2186. index c18417f..28b3007 100644
  2187. --- a/CMakeLists.txt
  2188. +++ b/CMakeLists.txt
  2189. @@ -71,13 +71,14 @@ endif(TRUE)
  2190. if(TRUE)
  2191. # 开启插件支持
  2192. - # target_compile_definitions(${PROJECT_NAME} PUBLIC NO_PLUGIN=0)
  2193. + target_compile_definitions(${PROJECT_NAME} PUBLIC NO_PLUGIN=0)
  2194. # 其它有关插件的部分处理...
  2195. endif(TRUE)
  2196. -
  2197. +# 可能需要变更为 CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" ??
  2198. +# 并使用 Linux.cmake 维护?
  2199. if(CMAKE_HOST_UNIX)
  2200. include(cmake/SparkInstallMacrosConfig.cmake)
  2201. include(cmake/SparkDesktopMacros.cmake)
  2202. @@ -103,6 +104,72 @@ if(CMAKE_HOST_UNIX)
  2203. spark_install_file(/usr/share/notepad--/icons/ assets/spark.png)
  2204. spark_install_target(/usr/bin/ ${PROJECT_NAME})
  2205. + # TODO:如果主线已经将 linux/destkop 的PR合入,即可移除此部分以上部分,而使用以下部分
  2206. + # spark_install_directory(/usr src/linux/usr/*) # 完整的 Linux 资源文件
  2207. +
  2208. + # ------------------ INSTALL PLUGIN CONFIG ------------------ #
  2209. + # ------------------ INSTALL PLUGIN CONFIG ------------------ #
  2210. + # ------------------ INSTALL PLUGIN CONFIG ------------------ #
  2211. + include(CMakePackageConfigHelpers)
  2212. + include(GNUInstallDirs)
  2213. +
  2214. + # 定义插件配置安装位置
  2215. + set(CMAKE_INSTALL_PREFIX "/usr")
  2216. + set(NOTEPAD_PLUGIN NotepadPlugin)
  2217. +
  2218. + # 定义开发插件时的配置目录与 CMake 模块文件名称
  2219. + set(NOTEPAD_PLUGIN_CONFIG ${NOTEPAD_PLUGIN}Config.cmake)
  2220. + set(NOTEPAD_PLUGIN_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/${NOTEPAD_PLUGIN})
  2221. + set(NOTEPAD_PLUGIN_LIBDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${NOTEPAD_PLUGIN})
  2222. +
  2223. + # 定义一些扩展内容,主要是提供给 CMake 模块文件填充
  2224. + set(NOTEPAD_PLUGIN_CORELIB QSci)
  2225. + set(NOTEPAD_PLUGIN_EXTERNAL_INCLUDES
  2226. + ${NOTEPAD_PLUGIN_INCLUDEDIR}/Qsci)
  2227. +
  2228. + # 定义在插件开发的 CMake 模块中,Notepad-- 是否是基于 QT5 实现
  2229. + # 并自动为插件开发层自动开启相关 Qt 依赖组件
  2230. + # 此部分逻辑将自动提供给 add_notepad_plugin 自行处理
  2231. + set(NOTEPAD_BUILD_BY_QT5 TRUE)
  2232. + set(NOTEPAD_BUILD_BY_QT6 FALSE)
  2233. +
  2234. + # 定义在插件开发的 CMake 模块中,Notepad-- 是否将提供 "插件安装目录(位置)"
  2235. + set(NOTEPAD_PLUGIN_EXTERNAL_PLUGIN_INSTALL_DIRECTORY "")
  2236. +
  2237. + # 将 NOTEPAD_PLUGIN_INCLUDEDIR NOTEPAD_PLUGIN_LIBDIR 填充到 cmake 文件
  2238. + configure_package_config_file(cmake/NotepadPluginConfig.cmake.in
  2239. + ${CMAKE_BINARY_DIR}/${NOTEPAD_PLUGIN_CONFIG}
  2240. + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${NOTEPAD_PLUGIN})
  2241. + # 安装 cmake 文件
  2242. + spark_install_file(${CMAKE_INSTALL_LIBDIR}/cmake/${NOTEPAD_PLUGIN}
  2243. + ${CMAKE_BINARY_DIR}/${NOTEPAD_PLUGIN_CONFIG})
  2244. + # 安装头插件接口文件
  2245. + spark_install_file(${NOTEPAD_PLUGIN_INCLUDEDIR}
  2246. + src/include/pluginGl.h)
  2247. + # 安装插件所需要的Qsci文件
  2248. + spark_install_directory(${NOTEPAD_PLUGIN_INCLUDEDIR}
  2249. + src/qscint/src/Qsci)
  2250. +
  2251. + # 导出 QSci 的头文件(从插件实现层面来看,目前是使用*.h 与 pluginGl.h
  2252. + # 但从 Qsci 层面来看,*.h 使用的是 #include <Qsci/*.h> ,所以此部分不被使用)
  2253. + # spark_file_glob(QSci_HEADERS src/qscint/src/Qsci/*.h src/include/pluginGl.h)
  2254. + # set_target_properties(QSci PROPERTIES PUBLIC_HEADER "${QSci_HEADERS}")
  2255. +
  2256. + # 导出 Notepad-- 的接口文件(从逻辑层面来看,目前已经在前面安装了接口文件,所以此部分不被使用)
  2257. + # spark_file_glob(Notepad_HEADERS src/include/pluginGl.h)
  2258. + # set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${QSci_HEADERS}")
  2259. +
  2260. + # 安装项目文件与 QSci 文件
  2261. + install(TARGETS ${PROJECT_NAME} QSci
  2262. + RUNTIME DESTINATION bin
  2263. + LIBRARY DESTINATION ${NOTEPAD_PLUGIN_LIBDIR}
  2264. + ARCHIVE DESTINATION ${NOTEPAD_PLUGIN_LIBDIR}
  2265. + PUBLIC_HEADER DESTINATION ${NOTEPAD_PLUGIN_INCLUDEDIR}
  2266. + )
  2267. + # ------------------ INSTALL PLUGIN CONFIG ------------------ #
  2268. + # ------------------ INSTALL PLUGIN CONFIG ------------------ #
  2269. + # ------------------ INSTALL PLUGIN CONFIG ------------------ #
  2270. +
  2271. # 1. 在顶层构建中导入 Appimage 的构建
  2272. include(cmake/SparkAppimageConfig.cmake) # 导入来自 Spark 构建的 Appimage 构建
  2273. diff --git a/cmake/NotepadPluginConfig.cmake.in b/cmake/NotepadPluginConfig.cmake.in
  2274. new file mode 100644
  2275. index 0000000..58e0bd7
  2276. --- /dev/null
  2277. +++ b/cmake/NotepadPluginConfig.cmake.in
  2278. @@ -0,0 +1,96 @@
  2279. +# NotepadPluginConfig.cmake
  2280. +# 用于 Notepad-- 插件实现的 CMake 模块初级定义
  2281. +
  2282. +# 在 Linux 中,它的布局应该如下:
  2283. +# /usr/lib/x86_64-linux-gnu/cmake/NotepadPlugin/NotepadPluginConfig.cmake
  2284. +
  2285. +# 在 插件开发层中,它的使用如下:
  2286. + # 1. 查找 NotepadPlugin 模块
  2287. + # find_package(NotepadPlugin)
  2288. + # 2. 使用 add_notepad_plugin(<模块名称> <源代码、资源文件> [...])
  2289. + # add_notepad_plugin(<plugin_name> <plugin_srcs> ...)
  2290. +
  2291. +# 一些无关紧要的部分,如果需要实现插件安装操作时,即可进行使用
  2292. +# include(CMakePackageConfigHelpers)
  2293. +# include(GNUInstallDirs)
  2294. +
  2295. +#
  2296. +set(NOTEPAD_PLUGIN @NOTEPAD_PLUGIN@)
  2297. +set(NOTEPAD_PLUGIN_INCLUDEDIR @NOTEPAD_PLUGIN_INCLUDEDIR@)
  2298. +set(NOTEPAD_PLUGIN_LIBDIR @NOTEPAD_PLUGIN_LIBDIR@)
  2299. +set(NOTEPAD_PLUGIN_CORELIB @NOTEPAD_PLUGIN_CORELIB@)
  2300. +
  2301. +# 一些扩展内容,主要是 CMake 模块文件的填充
  2302. +set(NOTEPAD_PLUGIN_EXTERNAL_INCLUDES
  2303. + @NOTEPAD_PLUGIN_EXTERNAL_INCLUDES@)
  2304. +
  2305. +# 由插件开发者进行参考的 "Notepad 提供的插件安装目录(位置)"
  2306. +set(NOTEPAD_PLUGIN_EXTERNAL_PLUGIN_INSTALL_DIRECTORY @NOTEPAD_PLUGIN_EXTERNAL_PLUGIN_DIRECTORY@)
  2307. +
  2308. +set(NOTEPAD_BUILD_BY_QT5 @NOTEPAD_BUILD_BY_QT5@)
  2309. +set(NOTEPAD_BUILD_BY_QT6 @NOTEPAD_BUILD_BY_QT6@)
  2310. +
  2311. +if(NOTEPAD_PLUGIN_BY_QT5)
  2312. + set(CMAKE_AUTOMOC ON)
  2313. + set(CMAKE_AUTOUIC ON)
  2314. + find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
  2315. +endif(NOTEPAD_PLUGIN_BY_QT5)
  2316. +
  2317. +if(NOTEPAD_BUILD_BY_QT6)
  2318. + set(CMAKE_AUTOMOC ON)
  2319. + set(CMAKE_AUTOUIC ON)
  2320. + find_package(Qt6 COMPONENTS Core Widgets REQUIRED)
  2321. +endif(NOTEPAD_BUILD_BY_QT6)
  2322. +
  2323. +
  2324. +
  2325. +add_library(${NOTEPAD_PLUGIN} SHARED IMPORTED)
  2326. +set_target_properties(${${NOTEPAD_PLUGIN}} PROPERTIES
  2327. + IMPORTED_LOCATION
  2328. + ${NOTEPAD_PLUGIN_LIBDIR}/lib${NOTEPAD_PLUGIN_CORELIB}.so
  2329. +
  2330. + INCLUDE_DIRECTORIES
  2331. + "${NOTEPAD_PLUGIN_INCLUDEDIR};${NOTEPAD_PLUGIN_EXTERNAL_INCLUDES}"
  2332. +)
  2333. +
  2334. +# add_notepad_plugin(<PLUGIN_VAR> <PLUGIN_SRC> [...])
  2335. +#
  2336. +macro(add_notepad_plugin PLUGIN_VAR PLUGIN_SRC)
  2337. + # aux_source_directory(${PLUGIN_VAR}_SOURCES ${ARGN})
  2338. + add_library(${PLUGIN_VAR} SHARED ${PLUGIN_SRC} ${ARGN})
  2339. + if(CMAKE_HOST_WIN32)
  2340. + # Win32 已提供宏判断
  2341. + # target_compile_definitions(${PLUGIN_VAR} PUBLIC NDD_EXPORT=export)
  2342. + endif(CMAKE_HOST_WIN32)
  2343. +
  2344. + if(CMAKE_HOST_UNIX)
  2345. + target_compile_definitions(${PLUGIN_VAR} PUBLIC NDD_EXPORT=export)
  2346. + endif(CMAKE_HOST_UNIX)
  2347. + target_include_directories(${PLUGIN_VAR} PUBLIC ${NOTEPAD_PLUGIN_INCLUDEDIR} ${NOTEPAD_PLUGIN_EXTERNAL_INCLUDES})
  2348. + target_link_directories(${PLUGIN_VAR} PUBLIC ${NOTEPAD_PLUGIN_LIBDIR})
  2349. + target_link_libraries(${PLUGIN_VAR} ${NOTEPAD_PLUGIN_CORELIB})
  2350. + if(NOTEPAD_PLUGIN_QT5)
  2351. + target_link_libraries(${PLUGIN_VAR} Qt5::Core Qt5::Widgets)
  2352. + endif(NOTEPAD_PLUGIN_QT5)
  2353. +
  2354. + if(NOTEPAD_PLUGIN_QT5)
  2355. + target_link_libraries(${PLUGIN_VAR} Qt6::Core Qt6::Widgets)
  2356. + endif(NOTEPAD_PLUGIN_QT5)
  2357. +
  2358. +endmacro(add_notepad_plugin PLUGIN_VAR PLUGIN_SRC)
  2359. +
  2360. +# support git plugin
  2361. +macro(add_notepad_plugin_with_git PLUGIN_VAR GIT_REPO_URL GIT_REPO_PLUGIN_PATH)
  2362. + execute_process(COMMAND git clone ${GIT_REPO_URL} ${PLUGIN_VAR}_git
  2363. + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  2364. + ERROR_QUIET)
  2365. + aux_source_directory(${CMAKE_BINARY_DIR}/$${PLUGIN_VAR}_git/${GIT_REPO_PLUGIN_PATH} ${PLUGIN_VAR}_RESOURCES)
  2366. + add_notepad_plugin(${PLUGIN_VAR} ${${PLUGIN_VAR}_RESOURCES})
  2367. +endmacro(add_notepad_plugin_with_git PLUGIN_VAR GIT_REPO_URL GIT_REPO_PLUGIN_PATH)
  2368. +
  2369. +message("- >>>>>>>>>>>>>>>>>> NotepadPlugin: <<<<<<<<<<<<<<<<<<")
  2370. +message(" - ${CMAKE_CURRENT_LIST_FILE}")
  2371. +message(" - ${NOTEPAD_PLUGIN_INCLUDEDIR}")
  2372. +message(" - ${NOTEPAD_PLUGIN_LIBDIR}")
  2373. +message(" - ${NOTEPAD_PLUGIN_CORELIB}")
  2374. +message("- >>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<")
  2375. \ No newline at end of file
  2376. diff --git a/cmake/SparkInstallMacrosConfig.cmake b/cmake/SparkInstallMacrosConfig.cmake
  2377. index 1f8939b..204d16a 100644
  2378. --- a/cmake/SparkInstallMacrosConfig.cmake
  2379. +++ b/cmake/SparkInstallMacrosConfig.cmake
  2380. @@ -79,7 +79,8 @@ macro(spark_install_directory INSTALL_DIRECTORY_DIR INSTALL_DIRECOTRY)
  2381. # message(FATAL_ERROR " directory: ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST_LENGTH}")
  2382. else()
  2383. - message(FATAL_ERROR "install: ${INSTALL_DIRECTORY_DIR}")
  2384. + # ISSUES: You Must check here
  2385. + # message(FATAL_ERROR "install: ${INSTALL_DIRECTORY_DIR}")
  2386. install(DIRECTORY
  2387. ${INSTALL_DIRECOTRY} ${ARGN}
  2388. --
  2389. 2.20.1
  2390. From 7e215f5fe65a9962bf29588a0e566d239b734d25 Mon Sep 17 00:00:00 2001
  2391. From: zinface <[email protected]>
  2392. Date: Mon, 6 Feb 2023 01:11:26 +0800
  2393. Subject: [PATCH 11/13] =?UTF-8?q?linux/plugin-doc:=20=E6=B7=BB=E5=8A=A0=20?=
  2394. =?UTF-8?q?Notepad--=20=E6=8F=92=E4=BB=B6=E6=9E=84=E5=BB=BA=E6=8F=8F?=
  2395. =?UTF-8?q?=E8=BF=B0=E6=96=87=E6=A1=A3?=
  2396. MIME-Version: 1.0
  2397. Content-Type: text/plain; charset=UTF-8
  2398. Content-Transfer-Encoding: 8bit
  2399. ---
  2400. cmake/NoteadPlugin-Linux-Development.md | 164 ++++++++++++++++++++++++
  2401. 1 file changed, 164 insertions(+)
  2402. create mode 100644 cmake/NoteadPlugin-Linux-Development.md
  2403. diff --git a/cmake/NoteadPlugin-Linux-Development.md b/cmake/NoteadPlugin-Linux-Development.md
  2404. new file mode 100644
  2405. index 0000000..c642fc7
  2406. --- /dev/null
  2407. +++ b/cmake/NoteadPlugin-Linux-Development.md
  2408. @@ -0,0 +1,164 @@
  2409. +# NotepadPlugin 开发说明
  2410. +
  2411. +> 当前插件实现的提供 Linux 层开发说明
  2412. +
  2413. +- 引用 NotepadPluginConfig.cmake 中的说明
  2414. +
  2415. + ```cmake
  2416. + # NotepadPluginConfig.cmake
  2417. + # 用于 Notepad-- 插件实现的 CMake 模块初级定义
  2418. +
  2419. + # 在 Linux 中,它的布局应该如下:
  2420. + # /usr/lib/x86_64-linux-gnu/cmake/NotepadPlugin/NotepadPluginConfig.cmake
  2421. +
  2422. + # 在 插件开发层中,它的使用如下:
  2423. + # 1. 查找 NotepadPlugin 模块
  2424. + # find_package(NotepadPlugin)
  2425. + # 2. 使用 add_notepad_plugin(<模块名称> <源代码、资源文件> [...])
  2426. + # add_notepad_plugin(<plugin_name> <plugin_srcs> ...)
  2427. + ```
  2428. +
  2429. +- 着手进行实现插件
  2430. +
  2431. + > 将项目中的 src/plugin/helloworld 复制为单个项目,并使用 CMake 进行构建
  2432. +
  2433. + ```cmake
  2434. + cmake_minimum_required(VERSION 3.5.1)
  2435. +
  2436. + project(template LANGUAGES CXX VERSION 0.0.1)
  2437. +
  2438. + # 1. 查找 NotepadPlugin 模块
  2439. + find_package(NotepadPlugin REQUIRED)
  2440. +
  2441. + # 2. 使用 add_notepad_plugin(<模块名称> <源代码、资源文件> [...])
  2442. + add_notepad_plugin(Helloworld
  2443. + helloworld/helloworldexport.cpp
  2444. + helloworld/qttestclass.cpp
  2445. + helloworld/qttestclass.h
  2446. + helloworld/qttestclass.ui
  2447. + )
  2448. +
  2449. + # 以上将会构建出一个名叫 libHelloworld.so 的插件扩展
  2450. + ```
  2451. +
  2452. +- 一些 NotepadPluginConfig.cmake 中的变量声明
  2453. +
  2454. + ```cmake
  2455. +
  2456. + # NOTEPAD_PLUGIN [不重要]CMake 模块名称
  2457. + # NOTEPAD_PLUGIN_CONFIG [不重要]CMake 模块文件名名称
  2458. + # NOTEPAD_PLUGIN_INCLUDEDIR [插件 头文件目录]插件开发者可自行使用
  2459. + # NOTEPAD_PLUGIN_LIBDIR [插件 库存放目录]插件开发者可自行使用
  2460. + # NOTEPAD_PLUGIN_CORELIB [插件 核心库名称]插件开发者可自行使用
  2461. + # NOTEPAD_PLUGIN_EXTERNAL_INCLUDES [插件 扩展的头文件目录]插件开发者可自行使用
  2462. + # NOTEPAD_PLUGIN_EXTERNAL_PLUGIN_INSTALL_DIRECTORY [插件 扩展插件安装目录(位置)]插件开发者可自行使用
  2463. +
  2464. + # NOTEPAD_BUILD_BY_QT5
  2465. + # NOTEPAD_BUILD_BY_QT6
  2466. + [NOTEPAD_BUILD_BY_约定]如果在构建 Notepad-- 时开启了此项,将会向 CMake 构建系统询问相关模块
  2467. +
  2468. + 例如:
  2469. + 询问 Qt5 基本模块: 将会在 find_package(NotepadPlugin REQUIRED) 时自动加入
  2470. + set(CMAKE_AUTOMOC ON)
  2471. + set(CMAKE_AUTOUIC ON)
  2472. + find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
  2473. +
  2474. + 为开发者自动添加 Qt5 模块依赖: 将会在 add_notepad_plugin 时自动加入
  2475. + if(NOTEPAD_PLUGIN_QT5)
  2476. + target_link_libraries(${PLUGIN_VAR} Qt5::Core Qt5::Widgets)
  2477. + endif(NOTEPAD_PLUGIN_QT5)
  2478. +
  2479. + ```
  2480. +
  2481. +- 当前提供插件的 Linux 目录结构
  2482. +
  2483. + ```
  2484. + build/_CPack_Packages/Linux/DEB/notepad---1.22.0-Linux
  2485. + ├── control
  2486. + ├── control.tar.gz
  2487. + ├── data.tar.gz
  2488. + ├── debian-binary
  2489. + ├── md5sums
  2490. + └── usr
  2491. + ├── bin
  2492. + │   └── notepad--
  2493. + ├── include
  2494. + │   └── NotepadPlugin
  2495. + │   ├── pluginGl.h
  2496. + │   └── Qsci
  2497. + │   ├── qsciabstractapis.h
  2498. + │   ├── qsciapis.h
  2499. + │   ├── qscicommand.h
  2500. + │   ├── qscicommandset.h
  2501. + │   ├── qscidocument.h
  2502. + │   ├── qsciglobal.h
  2503. + │   ├── qscilexerasm.h
  2504. + │   ├── qscilexeravs.h
  2505. + │   ├── qscilexerbash.h
  2506. + │   ├── qscilexerbatch.h
  2507. + │   ├── qscilexercmake.h
  2508. + │   ├── qscilexercoffeescript.h
  2509. + │   ├── qscilexercpp.h
  2510. + │   ├── qscilexercsharp.h
  2511. + │   ├── qscilexercss.h
  2512. + │   ├── qscilexercustom.h
  2513. + │   ├── qscilexerd.h
  2514. + │   ├── qscilexerdiff.h
  2515. + │   ├── qscilexeredifact.h
  2516. + │   ├── qscilexerfortran77.h
  2517. + │   ├── qscilexerfortran.h
  2518. + │   ├── qscilexerglobal.h
  2519. + │   ├── qscilexergo.h
  2520. + │   ├── qscilexer.h
  2521. + │   ├── qscilexerhtml.h
  2522. + │   ├── qscilexeridl.h
  2523. + │   ├── qscilexerjava.h
  2524. + │   ├── qscilexerjavascript.h
  2525. + │   ├── qscilexerjson.h
  2526. + │   ├── qscilexerlua.h
  2527. + │   ├── qscilexermakefile.h
  2528. + │   ├── qscilexermarkdown.h
  2529. + │   ├── qscilexermatlab.h
  2530. + │   ├── qscilexernsis.h
  2531. + │   ├── qscilexeroctave.h
  2532. + │   ├── qscilexerpascal.h
  2533. + │   ├── qscilexerperl.h
  2534. + │   ├── qscilexerpo.h
  2535. + │   ├── qscilexerpostscript.h
  2536. + │   ├── qscilexerpov.h
  2537. + │   ├── qscilexerproperties.h
  2538. + │   ├── qscilexerpython.h
  2539. + │   ├── qscilexerruby.h
  2540. + │   ├── qscilexerrust.h
  2541. + │   ├── qscilexerspice.h
  2542. + │   ├── qscilexersql.h
  2543. + │   ├── qscilexertcl.h
  2544. + │   ├── qscilexertex.h
  2545. + │   ├── qscilexertext.h
  2546. + │   ├── qscilexervb.h
  2547. + │   ├── qscilexerverilog.h
  2548. + │   ├── qscilexervhdl.h
  2549. + │   ├── qscilexerxml.h
  2550. + │   ├── qscilexeryaml.h
  2551. + │   ├── qscimacro.h
  2552. + │   ├── qsciprinter.h
  2553. + │   ├── qsciscintillabase.h
  2554. + │   ├── qsciscintilla.h
  2555. + │   ├── qscistyledtext.h
  2556. + │   └── qscistyle.h
  2557. + ├── lib
  2558. + │   ├── cmake
  2559. + │   │   └── NotepadPlugin
  2560. + │   │   └── NotepadPluginConfig.cmake
  2561. + │   └── NotepadPlugin
  2562. + │   └── libQSci.a
  2563. + └── share
  2564. + ├── applications
  2565. + │   └── notepad--.desktop
  2566. + └── notepad--
  2567. + └── icons
  2568. + └── spark.png
  2569. +
  2570. + 13 directories, 71 files
  2571. +
  2572. + ```
  2573. \ No newline at end of file
  2574. --
  2575. 2.20.1
  2576. From 8c582a774e8cb0a3c347de5a574ecfd91f7522d2 Mon Sep 17 00:00:00 2001
  2577. From: zinface <[email protected]>
  2578. Date: Mon, 6 Feb 2023 01:37:46 +0800
  2579. Subject: [PATCH 12/13] =?UTF-8?q?fix-plugin-cmake:=20=E4=BF=AE=E5=A4=8D?=
  2580. =?UTF-8?q?=E6=8F=92=E4=BB=B6=20CMake=20=E9=83=A8=E5=88=86=E5=AE=9A?=
  2581. =?UTF-8?q?=E4=B9=89=E7=9A=84=E9=94=99=E8=AF=AF?=
  2582. MIME-Version: 1.0
  2583. Content-Type: text/plain; charset=UTF-8
  2584. Content-Transfer-Encoding: 8bit
  2585. ---
  2586. cmake/NotepadPluginConfig.cmake.in | 16 +++++++---------
  2587. 1 file changed, 7 insertions(+), 9 deletions(-)
  2588. diff --git a/cmake/NotepadPluginConfig.cmake.in b/cmake/NotepadPluginConfig.cmake.in
  2589. index 58e0bd7..37ad692 100644
  2590. --- a/cmake/NotepadPluginConfig.cmake.in
  2591. +++ b/cmake/NotepadPluginConfig.cmake.in
  2592. @@ -30,11 +30,11 @@ set(NOTEPAD_PLUGIN_EXTERNAL_PLUGIN_INSTALL_DIRECTORY @NOTEPAD_PLUGIN_EXTERNAL_PL
  2593. set(NOTEPAD_BUILD_BY_QT5 @NOTEPAD_BUILD_BY_QT5@)
  2594. set(NOTEPAD_BUILD_BY_QT6 @NOTEPAD_BUILD_BY_QT6@)
  2595. -if(NOTEPAD_PLUGIN_BY_QT5)
  2596. +if(NOTEPAD_BUILD_BY_QT5)
  2597. set(CMAKE_AUTOMOC ON)
  2598. set(CMAKE_AUTOUIC ON)
  2599. find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
  2600. -endif(NOTEPAD_PLUGIN_BY_QT5)
  2601. +endif(NOTEPAD_BUILD_BY_QT5)
  2602. if(NOTEPAD_BUILD_BY_QT6)
  2603. set(CMAKE_AUTOMOC ON)
  2604. @@ -42,8 +42,6 @@ if(NOTEPAD_BUILD_BY_QT6)
  2605. find_package(Qt6 COMPONENTS Core Widgets REQUIRED)
  2606. endif(NOTEPAD_BUILD_BY_QT6)
  2607. -
  2608. -
  2609. add_library(${NOTEPAD_PLUGIN} SHARED IMPORTED)
  2610. set_target_properties(${${NOTEPAD_PLUGIN}} PROPERTIES
  2611. IMPORTED_LOCATION
  2612. @@ -69,13 +67,13 @@ macro(add_notepad_plugin PLUGIN_VAR PLUGIN_SRC)
  2613. target_include_directories(${PLUGIN_VAR} PUBLIC ${NOTEPAD_PLUGIN_INCLUDEDIR} ${NOTEPAD_PLUGIN_EXTERNAL_INCLUDES})
  2614. target_link_directories(${PLUGIN_VAR} PUBLIC ${NOTEPAD_PLUGIN_LIBDIR})
  2615. target_link_libraries(${PLUGIN_VAR} ${NOTEPAD_PLUGIN_CORELIB})
  2616. - if(NOTEPAD_PLUGIN_QT5)
  2617. + if(NOTEPAD_BUILD_BY_QT5)
  2618. target_link_libraries(${PLUGIN_VAR} Qt5::Core Qt5::Widgets)
  2619. - endif(NOTEPAD_PLUGIN_QT5)
  2620. + endif(NOTEPAD_BUILD_BY_QT5)
  2621. - if(NOTEPAD_PLUGIN_QT5)
  2622. + if(NOTEPAD_BUILD_BY_QT6)
  2623. target_link_libraries(${PLUGIN_VAR} Qt6::Core Qt6::Widgets)
  2624. - endif(NOTEPAD_PLUGIN_QT5)
  2625. + endif(NOTEPAD_BUILD_BY_QT6)
  2626. endmacro(add_notepad_plugin PLUGIN_VAR PLUGIN_SRC)
  2627. @@ -84,7 +82,7 @@ macro(add_notepad_plugin_with_git PLUGIN_VAR GIT_REPO_URL GIT_REPO_PLUGIN_PATH)
  2628. execute_process(COMMAND git clone ${GIT_REPO_URL} ${PLUGIN_VAR}_git
  2629. WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  2630. ERROR_QUIET)
  2631. - aux_source_directory(${CMAKE_BINARY_DIR}/$${PLUGIN_VAR}_git/${GIT_REPO_PLUGIN_PATH} ${PLUGIN_VAR}_RESOURCES)
  2632. + aux_source_directory(${CMAKE_BINARY_DIR}/${PLUGIN_VAR}_git/${GIT_REPO_PLUGIN_PATH} ${PLUGIN_VAR}_RESOURCES)
  2633. add_notepad_plugin(${PLUGIN_VAR} ${${PLUGIN_VAR}_RESOURCES})
  2634. endmacro(add_notepad_plugin_with_git PLUGIN_VAR GIT_REPO_URL GIT_REPO_PLUGIN_PATH)
  2635. --
  2636. 2.20.1
  2637. From e9fed613d3f0fe2593f2d163df3d611bf3cd3c2a Mon Sep 17 00:00:00 2001
  2638. From: zinface <[email protected]>
  2639. Date: Mon, 6 Feb 2023 10:31:30 +0800
  2640. Subject: [PATCH 13/13] =?UTF-8?q?repo:=20=E9=87=87=E7=94=A8=E9=A1=B9?=
  2641. =?UTF-8?q?=E7=9B=AE=E4=B8=AD=E5=AE=8C=E6=95=B4=E7=9A=84=20Linux=20?=
  2642. =?UTF-8?q?=E8=B5=84=E6=BA=90=E6=96=87=E4=BB=B6=E5=AE=89=E8=A3=85?=
  2643. MIME-Version: 1.0
  2644. Content-Type: text/plain; charset=UTF-8
  2645. Content-Transfer-Encoding: 8bit
  2646. ---
  2647. CMakeLists.txt | 14 ++++++++------
  2648. 1 file changed, 8 insertions(+), 6 deletions(-)
  2649. diff --git a/CMakeLists.txt b/CMakeLists.txt
  2650. index 28b3007..b8f5fa7 100644
  2651. --- a/CMakeLists.txt
  2652. +++ b/CMakeLists.txt
  2653. @@ -100,12 +100,14 @@ if(CMAKE_HOST_UNIX)
  2654. # 应用分类: Category=
  2655. "Development"
  2656. )
  2657. - spark_install_file(/usr/share/applications/ ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.desktop)
  2658. - spark_install_file(/usr/share/notepad--/icons/ assets/spark.png)
  2659. - spark_install_target(/usr/bin/ ${PROJECT_NAME})
  2660. -
  2661. - # TODO:如果主线已经将 linux/destkop 的PR合入,即可移除此部分以上部分,而使用以下部分
  2662. - # spark_install_directory(/usr src/linux/usr/*) # 完整的 Linux 资源文件
  2663. + # spark_install_file(/usr/share/applications/ ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.desktop)
  2664. + # spark_install_file(/usr/share/notepad--/icons/ assets/spark.png)
  2665. + # spark_install_target(/usr/bin/ ${PROJECT_NAME})
  2666. +
  2667. + # 完成:如果主线已经将 linux/destkop 的PR合入,即可移除此部分以上部分,而使用以下部分
  2668. + # 但 spark_desktop_macros 不能移除,因为它被 Appimage 构建部分依赖
  2669. + # Appimage 构建部分,要求(使用来自 Spark 构建的 Desktop 构建中配置的信息(必须要求 spark-desktop))
  2670. + spark_install_directory(/usr src/linux/usr/*) # 完整的 Linux 资源文件
  2671. # ------------------ INSTALL PLUGIN CONFIG ------------------ #
  2672. # ------------------ INSTALL PLUGIN CONFIG ------------------ #
  2673. --
  2674. 2.20.1