From c263ce8cc6e4166a15ccea0059e324468a1f7230 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 25 Nov 2024 17:23:35 +0100 Subject: [PATCH 01/15] Crashpad: Fix missing include Amends 58af141dfc0915b1281c23f2dcf4e004273f0e61 Change-Id: Ibb9e1b37246633282c7f8c74bfc93fb7f1a31263 Reviewed-by: Tim Jenssen --- src/app/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index 73b6a003514..1767cbade16 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -48,8 +48,9 @@ #ifdef ENABLE_CRASHPAD #define NOMINMAX -#include "client/crashpad_client.h" #include "client/crash_report_database.h" +#include "client/crashpad_client.h" +#include "client/crashpad_info.h" #include "client/settings.h" #endif From 1075f4f8c40a66279c60edb7659ee02bde53ce1f Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 21 Nov 2024 15:11:53 +0100 Subject: [PATCH 02/15] Doc: Describe creating kits for building on Docker devices - Use the same topic as for remote Linux devices, with variables. - Update information and screenshots of adding compilers. Change-Id: I0b1695ec649e9780b68e57cff989b96ada92f0da Reviewed-by: hjk Reviewed-by: Marcus Tillmanns --- .../images/creator-compilers-custom.png | Bin 10140 -> 0 bytes ...reator-preferences-compilers-clang-cl.webp | Bin 2306 -> 2492 bytes ...qtcreator-preferences-compilers-clang.webp | Bin 5182 -> 3298 bytes ...tcreator-preferences-compilers-custom.webp | Bin 0 -> 5114 bytes .../qtcreator-preferences-compilers-qcc.webp | Bin 3520 -> 3460 bytes .../qtcreator-preferences-compilers.webp | Bin 21908 -> 19100 bytes .../src/cmake/creator-projects-cmake.qdoc | 13 +++- doc/qtcreator/src/docker/creator-docker.qdoc | 19 ++++++ ...tor-how-to-build-on-remote-devices.qdocinc | 60 ++++++++++++++++++ doc/qtcreator/src/linux-mobile/linuxdev.qdoc | 57 ++--------------- .../creator-projects-compilers.qdoc | 34 +++++++--- .../creator-projects-qt-versions.qdoc | 3 + 12 files changed, 123 insertions(+), 63 deletions(-) delete mode 100644 doc/qtcreator/images/creator-compilers-custom.png create mode 100644 doc/qtcreator/images/qtcreator-preferences-compilers-custom.webp create mode 100644 doc/qtcreator/src/linux-mobile/creator-how-to-build-on-remote-devices.qdocinc diff --git a/doc/qtcreator/images/creator-compilers-custom.png b/doc/qtcreator/images/creator-compilers-custom.png deleted file mode 100644 index d090b832593b2e01c9406a7d0a089feaaccbb331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10140 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 V-qDvjuOb;h7P|VmtaD0e0sw-cI2!-} diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers-clang-cl.webp b/doc/qtcreator/images/qtcreator-preferences-compilers-clang-cl.webp index c02517d1b212bcbea678d7b48ddd27170c930d4a..f77fd47e0fc5d3f09a09d33c003ba90c49dea948 100644 GIT binary patch literal 2492 zcmWIYbaUIn$-ofq>J$(bVBxcZlYv2h-ytoA_3YcX@`{~c*}V&~u8 z{8385bJ7!!&NcI5x3tY}V?UAqA@ZD!Teii^wCvr&>r_0u=FYnN*!p{<|BI7K;`Pk` z!?)F>olKjt{qkph1Q2ty%Kv}Woy8X%bC3n@&tP`oxEAj*k5z_Q)dbl%MzC_gKaL-*bKb%id>d zZ@UT`qV$VhStq;Uvw3gj>ND&O$8gH&|{C;x2 zQ;J~FllA}Z_FatOzs75?XHX=Yb+4=b`XZJUXT{akl8w}g3qCf*hP;*Tn6T@=MDMwR z?aO?&#~byVx|Xhvo*&m|FY@;KI=Kzp6Ao;hd0=60du;n#kD${AYhT=n%_|D{^Z$I0 z+|q5ixAV4#-`3>;{44EbF@~)jPqDp(4m_zQmMBVdeQce5h zdYZ>&d&w%Hzt(|Ef6RTc@3D#3qQ9(cTxDuu4Z2ShGdpK8a`ACI`Rnpssd>*uqrcygZ$s)D5jLARM)9dfb%-`af-SGD$!_pnCML%^fOFw!cWVB*eC)XSP zDKk7-Z<_c?@f^%u?052IFIRGlzw^ph|1Ya;4%0E6%~N^kho~%8`^Vs8xJE!?FS?Oa_bKLh7PSNk|?{sU-jG1ExBDF z96ay5&xPmL?PG3pPc|}+ysqH!S?-la#)La97|E4%d9b@$HrQf!urkE-WWa zY9ma1zXkj%alWQsvf*3qOR-9gY>RifHfv-uUnNyv+9bWnc2Dfq>^Cae=jxucOnfi2 z*TS*SN9Cvp`y83pD`)JVm}!)7ywQCAd|mX&oShN2V?_g- zS+e;TS2s<)iNZ79Phu@%nUvHud3M^#ye3!EZkvMaY4s1nSQfN+zGkzLMmG{jM=iu)6jYMeq|X8Q>m4eM!lcpzs+7gW%1v(&Qk7uu^vtT z(mOuYES$Zt-f3Gx_7=;zT{HcEKXBgjw9kdfaOrV3$-`4^7{7-uyj)Wlwa2j1A%5P6 zt0^D9313{ve16U|wl4`Xwtg&3j%D ztDDT8jUL7NXbKJKmRK3^Q3%rYom zeNsoxj-h;}p75_X?^>^X{aU&A*4kz3*5}t}`n7M5pU_>M`>9bfJ@kCXF9KVrB_WVe%l%%iLKAg>+|Dp7{u?}>!kT|pTg5u_tHwvg+}Z?6s!7Py=sPGlId^tRd0N3 zElyXkU9B*3zNFyByZ43e3)?+;#^yCCyLv)iY%JuQEGNA$x;*jk_U!Z8Tferd?vlK` ziNWp7#=xu1UVI6R@e0z30*l$=7Vtli%@qqv^M1_6K2uMbqwJgGtAD?k)?Z$|vtG-1eAS{wH|+w?w8@$@I`+Kkf7r-$ zfxE41nOouNL#J{w|IC{_-DmnlwuSG+#T)Kc&b@a{_r+q4FWYM!_nCN`D_{S>*cEzJ z?Xzr#ibICzW46^P{%_vveQFB4`Yz&Aru_4r*Mxq&d2xEGhFRUM@VB!9l*H;nSLDr{ zInnO#j-ZYRwV68){PXy~+9~|UA@ThC#&VT^+W*PCWKUmG@w@Xy!ShY$dt;8vsokqv z@V-~2PsR4(?7Ql(>;wOI{_?+4KdXTH*x!;_DHEsYH!txTxvsd z(r;}{Omg2Q{Mu5h!b0lz#`bPm*=m`Y$8OpuUbQ-WXEM|OpgZ9b({|2y@`Gce@^O=8 z|E1HD)AyhJe^v8?rD0IPi6=VWV~)9e_nXlcc;Jk?XXiVKs|K6*TM6Dx6hFFIUi517 z9X78sTSOR(8?PHAiW(f&_|5pW#pc0t)@j-yA^b(zrcTe2s*QXK8r9OWXEc_|c=X!z z1cn-2GxO^cGI;fS{`nc|F*|0gOH?ax*9>^kv*2)P>}$gniELjaMXZ{;UL{tFv>(`1 z-jg+B>@N2D7ce5~!ded>gbDFK)S&5B{EgCL2wO`&i?9ue_DABhwl$u=UGG&bG4MXT;=jw^=brL006y!_I{*Lx literal 2306 zcmWIYbaVT~!N3si>J$(bVBzzYgMmSRx05D=J-g*371tn_t45#y`PYZ~aipca`8AhE zK>4Ow?%6l#x6j%4h#zw2*j8&Ub8=g#cJ|!r_u+RGQw+}7tCp0vtEd0_{Gg!bN(=|H zQ?u7nhZ#r`MqE8BiGe`^?ya{XDHA7mF#_~pi8%*b_#RT_j7lT&;E9| z^Xlqv-=EigY!vMJa=KrB-=6!68D{S5;-7zX_xt5sOSrnO-)E0`%ydA|!er%H-{1Dn z9`i2#ymQ)ayZu(n@5fs>swyop*z)VHkZNiDHQp-M{jxkgMbX=P{g}BbiYoSeth!z) zY5!ZUex*z5Dxaw?7`q4WG&{Ih-yuNmO;rEu9Xs^A!y9>nE?iN4y z{$Jmw&$A;F%r;D3az;w{V!cO>wB@8Hyw~@hWDm)Yi@$59Z5(^_kNPwF|BsJ0Ow{pM zmSxzrNkP)^f1qY0=kh0)-+o`wHOKkC7TfEd-VOgn%}=MkiLPtwe%{A@aM}^gO3tMo z@1&h}Xnp=7lG%NJ_i2Ceo!+V+`_JSm`hDKQIaBln?f79WP*{1vFoX=@S=A1i!&G(qovd@zb2;F>fSzP!=M(DFSQJYGQ z%Q*%0y7wNq99&khXZN3%*&k+bu4A~ucj?~A({bF1*39Sf|F|y;zO|XbKee)=YuDl@ zI_~m}&-6rhi#t`!VsJlbmArKQ^Mk)NmR$clLu>o}lgV42=!qs3+ug3^zi|58hP&sl z9shHFe#+UOlhqdZ2(r5hEwxmx_C3OI`;%>3(2|OsMmfEQ?*7`c%wt>NjI|FXE;VUM z@?CQ)UUlS-#GM{3-n3kv9IvT4*WCUe3puGU>E)Codi5F(_LcHFjLAIB?4FYZ-Uqu? zb3}>hTHCW<*jh}<+Du^Vzp9CwpKsHjpU1XZFSG2W@2yi+}zwKb;~yop9n5Q3W!|~{&yKa+ zoC)ROV%Z#yQ#cLMxO^&NGtP;y_g#prWG~!(^thJCq$j2yZ`cUW;9oN#w4N<&!p~W< z`%`B#t<$t#mmz$^>4bFz_lJ`5J3kz@{FQsaGTDps-DC!Lu0`56nfAV7wzd4wUYa?z zan9vm@~@-6-`o4;8UOd=FYoL9dVJ~B=C5nL+f|S|oQGb73`H$1)`_`x5nG%$0d~h}U%apjr zIXxyfUMRB$GO1^1sq#JG=v^-3c}3PLi0|W? z2cJ)+FQky4hTxcM*i$Gn89-QHB;?WjU(somwawmu{u6RG5SL9 zRi>HywK~`CKaqCiWP@%=Ncc=0_oo5c+56R>^xa^JeI1}Wck9KaW}!kk;@7^(E%4jA zB1rw1+rnkJSwTz83Ma1(Tof{yPj;o?cCS}GZ#RD}Q)G8FDwX?eUvI?p%s*?zl;asK z6Qi`A8cI2OFST(~&R99+cm~VcDW4?fF4!9+_q+Ex*9$?3!)zVXkAiq2A>@OzmTeop?9_Dd3^-s9uR;#Cgc zs-JB0ZeDwg#oV-X9Y^ZV$*&xom)Z!uv@GX2-uT3>ZHH9mS?iB48gfcGFQD*O z%;~J7mX%V$c_;qxhTmaXt>|%RMtPTWq6N_Wzh{IwN+k#xxesbxwWLq*X3wI%r2s z3CWr9*>9>B>&^@Y-l?BFEEZ?Is@9Eq$rNZSrKRcru)0A)t80ngJlFS(m#Q@TC;t1J zjTC?L*Va3#JvDr0Z}`9Sr~jGyf8o=OTzTHE^|)Zmziy@!8e`c^scp)K7Z%OhEW2{< z!Lv8|*jCSJ^u5`aGxhR*!`l-VHms?&i#crAvM>3}U%4&pl1br4J%UH;PhPn5e&O5q zGE%kD8)c7%`ps`!$^|+757RTh;N;3AbQ=df8~Uh;0M)Ohqs0|WD2p}Q+g27cr2;mcEI5jGvPOE z2N|NT9%y`N%>HezbB0a(l{uan?0a7sOKknibJ?z6PRXG5*@E~JQqMgeTbf*0EO$H5 z#zmp_8N&oir^l8HHcHHKcjL&=W&g`{nqiwjQaIbbk1`h`d?H@NO@DhL=;!Oo*w-6m zUurG)&fTW`QKsE*>y19Em7+1mrnjOeE~u8v0W%g?%iS*7AT!e{eODJKMCXMcVq^dS Dvw2Cv diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers-clang.webp b/doc/qtcreator/images/qtcreator-preferences-compilers-clang.webp index 68e3252355e73f1940b1d48ec50b621382a67119..94745a8309aac6bda4d43b4a1a3c8a637d40e81b 100644 GIT binary patch literal 3298 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 literal 5182 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%0D&sO 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 E0It`#D*ylh diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers-custom.webp b/doc/qtcreator/images/qtcreator-preferences-compilers-custom.webp new file mode 100644 index 0000000000000000000000000000000000000000..fc1c2b437c1118d5f698cdd243bcc6c6c96190d7 GIT binary patch literal 5114 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 CG`raV literal 3520 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 diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers.webp b/doc/qtcreator/images/qtcreator-preferences-compilers.webp index 3a31ea611c1454f9362be1bf1dccd57798b4c015..25052e42ee41c46848608241cb82c9c8fd4be939 100644 GIT binary patch literal 19100 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 Dxg38{ literal 21908 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 \uicontrol Devices > \uicontrol Devices, and + then select \uicontrol Add to add a \1. + + \li Go to \uicontrol {Preferences} > \uicontrol CMake > + \uicontrol Tools, and then select \uicontrol Add. + + \li In \uicontrol Path, select \uicontrol Remote in the dropdown + menu in \uicontrol Browse (\uicontrol Choose on \macos) to + add the path to the CMake executable on the \1. + + \li Go to \uicontrol {Preferences} > \uicontrol Kits > + \uicontrol {Qt Versions}, and then press \key Shift and click the + \uicontrol Add button to add the Qt version on the \1. + + \li Go to \uicontrol {Preferences} > \uicontrol Kits > + \uicontrol Compilers, and then select the compiler + type in \uicontrol Add. + + \li In \uicontrol {C compiler path}, select \uicontrol Remote in the + dropdown menu in \uicontrol Browse (\uicontrol Choose on \macos) to + add the path to the compiler on the \1. + + \li Go to \uicontrol {Preferences} > \uicontrol Kits + to add a kit for building on the device. + + \li Select the device, CMake tool, Qt version, and compiler that you + added above. + + \li In \uicontrol {Run device type} and \uicontrol {Build device}, select + \uicontrol {\1}. + + \li To specify build settings: + + \list 1 + + \li Open a project for an application you want to develop for the + device. + + \li Select \uicontrol Projects > \uicontrol {Build & Run} to activate + the kit that you specified above. + + \endlist + + \li Select \uicontrol Run to specify run settings. Usually, you can use + the default settings. + + When you run the project, \QC deploys the application as specified by + the deploy steps. + + \endlist +//! [build on remote devices] diff --git a/doc/qtcreator/src/linux-mobile/linuxdev.qdoc b/doc/qtcreator/src/linux-mobile/linuxdev.qdoc index 311b68a48b8..d92e9a82441 100644 --- a/doc/qtcreator/src/linux-mobile/linuxdev.qdoc +++ b/doc/qtcreator/src/linux-mobile/linuxdev.qdoc @@ -75,16 +75,18 @@ \li Select \uicontrol Add to add the Qt version for embedded Linux. - \li Go to \preferences > \uicontrol Kits > \uicontrol Compilers. + \li Go to \uicontrol {Preferences} > \uicontrol Kits > + \uicontrol Compilers. \li Select \uicontrol Add to add the compiler for building the applications. - \li Go to \preferences > \uicontrol Devices > \uicontrol Devices. + \li Go to \uicontrol {Preferences} > \uicontrol Devices > + \uicontrol Devices. \li Select \uicontrol Add to add a remote Linux device. - \li Go to \preferences > \uicontrol Kits. + \li Go to \uicontrol {Preferences} > \uicontrol Kits. \li Select \uicontrol Add to add a kit for building for the device. @@ -150,56 +152,9 @@ In addition to building applications \e {for} a generic Linux device, you can use the toolchain on the device to build the applications \e {on} the device. - To build applications on a remote Linux device: - - \list 1 - - \li Go to \preferences > \uicontrol Devices > \uicontrol Devices, and - then select \uicontrol Add to add a remote Linux device. - - \li Go to \preferences > \uicontrol CMake > \uicontrol {CMake Tools}, and - then select \uicontrol Add to add the path to the CMake executable - on the remote Linux device. - - \li Go to \preferences > \uicontrol Kits > \uicontrol {Qt Versions}, - and then select \uicontrol Add to add the Qt version on the remote - Linux device - - \li Go to \preferences > \uicontrol Kits > \uicontrol Compilers, and - then select \uicontrol Add to add the the compiler on the remote - Linux device. - - \li Go to \preferences > \uicontrol Kits, and then select \uicontrol Add - to add a kit for building for the device. - - \li Select the device, CMake tool, Qt version, and compiler that you - added above. - - \li In \uicontrol {Run device type} and \uicontrol {Build device}, select - \uicontrol {Remote Linux Device}. - - \li To specify build settings: - - \list 1 - - \li Open a project for an application you want to develop for the - device. - - \li Select \uicontrol Projects > \uicontrol {Build & Run} to activate - the kit that you specified above. - - \endlist - - \li Select \uicontrol Run to specify run settings. Usually, you can use - the default settings. - - When you run the project, \QC deploys the application as specified by - the deploy steps. - - \endlist + \include creator-how-to-build-on-remote-devices.qdocinc {build on remote devices} {remote Linux device} \sa {Add CMake tools}, {Remote Linux}{How To: Develop for remote Linux}, {Manage Kits}{How To: Manage Kits}, {Developing for Remote Linux Devices}, {Remote Linux Deploy Configuration}, {Remote Linux Run Settings} */ - diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc index f5d96cf5f2f..a7f459aec30 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc @@ -217,10 +217,16 @@ \li In \uicontrol {C compiler path}, enter the path to the directory where the C compiler is located. - \li In \uicontrol {C++ compiler path}, enter the path - to the directory where the C++ compiler is located. Select - \uicontrol {Derive from C compiler} to derive the C++ compiler - name from the C compiler name. + Select \uicontrol Remote in the dropdown menu in \uicontrol Browse + (\uicontrol Choose on \macos) to add the path to the compiler on a + remote Linux device or in Docker. + + \li In \uicontrol {C++ compiler path}, select + \uicontrol {Provide manually} to enter the path + to the directory where the C++ compiler is located. + + Select \uicontrol Remote to add the path to the compiler on a + remote Linux device or in Docker. \li In \uicontrol Initialization, select the \c {vcvarsall.bat} file for setting up the command @@ -274,20 +280,30 @@ \uicontrol Custom option. Specify the paths to the directories where the compiler and make tool are located and set preferences for the compiler. - \image creator-compilers-custom.png + \image qtcreator-preferences-compilers-custom.webp {Compilers in Kit Preferences} To add other compilers: \list 1 \li Select \preferences > \uicontrol Kits > - \uicontrol Compilers > \uicontrol Add > \uicontrol Custom > - \uicontrol C or \uicontrol C++. + \uicontrol Compilers > \uicontrol Add > \uicontrol Custom. \li In \uicontrol Name, enter a name for the compiler. - \li In \uicontrol {Compiler path}, enter the path to the directory - where the compiler is located. + \li In \uicontrol {C compiler path}, enter the path to the + directory where the C compiler is located. + + Select \uicontrol Remote in the dropdown menu in \uicontrol Browse + (\uicontrol Choose on \macos) to add the path to the compiler on a + remote Linux device or in Docker. + + \li In \uicontrol {C++ compiler path}, select + \uicontrol {Provide manually} to enter the path + to the directory where the C++ compiler is located. + + Select \uicontrol Remote to add the path to the compiler on a + remote Linux device or in Docker. \li In \uicontrol {Make path}, enter the path to the directory where the make tool is located. diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc index a535c12b304..1e01dbad8aa 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc @@ -71,6 +71,9 @@ \li Select \preferences > \uicontrol Kits > \uicontrol {Qt Versions} > \uicontrol Add. + To add a Qt version on a remote Linux device or in Docker, + press \key Shift and click \uicontrol Add. + \li Select the qmake executable for the Qt version to add. \li Select the Qt version to view and edit it. From 791445159a6b7d1ec66dd0de425b64035b8075e6 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 18 Nov 2024 10:59:53 +0100 Subject: [PATCH 03/15] Update change log for 15.0.0 Change-Id: I851be3a1aba511c7417bcabf136f82897d3be252 Reviewed-by: Leena Miettinen --- dist/changelog/changes-15.0.0.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/dist/changelog/changes-15.0.0.md b/dist/changelog/changes-15.0.0.md index 558ef3cc63f..6ee3af39094 100644 --- a/dist/changelog/changes-15.0.0.md +++ b/dist/changelog/changes-15.0.0.md @@ -21,18 +21,18 @@ General ([Blog Post](https://www.qt.io/blog/review-new-themes-for-qt-creator)) * Added `Tools > Scripting > New Script` for creating Lua based Qt Creator scripts - ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-create-lua-scripts.html)) + ([Documentation](https://doc.qt.io/qtcreator/creator-how-to-create-lua-scripts.html)) * Plugins * Added `DocumentationUrl` and new mandatory fields `Id` and `VendorId` to the plugin meta data * Changed the plugin descriptions to Markdown in `Help > About Plugins > Details` and `Extensions` mode * Extended the API available to Lua plugins - ([Documentation](https://doc-snapshots.qt.io/qtcreator-extending/lua-extensions.html)) + ([Documentation](https://doc.qt.io/qtcreator-extending/lua-extensions.html)) * Prebuilt binaries * Added opt-in crash reporting to `Edit > Preferences > Environment > System` - ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-turn-on-crash-reports.html)) + ([Documentation](https://doc.qt.io/qtcreator/creator-how-to-turn-on-crash-reports.html)) Editing ------- @@ -157,6 +157,7 @@ Projects ([QTCREATORBUG-31141](https://bugreports.qt.io/browse/QTCREATORBUG-31141)) * Fixed a focus issue when renaming files ([QTCREATORBUG-30926](https://bugreports.qt.io/browse/QTCREATORBUG-30926)) +* Fixed that the `default` session could be renamed and deleted ### CMake @@ -183,6 +184,10 @@ Projects * Added the option of opening `CMakeCache.txt` to open the project ([QTCREATORBUG-24439](https://bugreports.qt.io/browse/QTCREATORBUG-24439), [QTCREATORBUG-30507](https://bugreports.qt.io/browse/QTCREATORBUG-30507)) +* Made `conanfile.py` and `vcpkg.json` visible in the project tree when used + ([QTCREATORBUG-32041](https://bugreports.qt.io/browse/QTCREATORBUG-32041), + [Conan Package Manager](https://doc.qt.io/qtcreator/creator-project-conan.html), + [vcpkg Package Manager](https://doc.qt.io/qtcreator/creator-vcpkg.html)) * Fixed the option `Build Only the Application to Be Run` for the `Build before deploying` preferences ([QTCREATORBUG-31416](https://bugreports.qt.io/browse/QTCREATORBUG-31416)) @@ -245,6 +250,12 @@ Analyzer * Added column sorting to the list of issues * Added a `Reload` button +Terminal +-------- + +* Fixed the flushing of output after a process terminates + ([QTCREATORBUG-30733](https://bugreports.qt.io/browse/QTCREATORBUG-30733)) + Version Control Systems ----------------------- @@ -256,8 +267,10 @@ Version Control Systems * Added actions for blame at the revision, blame of the parent, the file from the revision, and the log for the line to the tooltip for `Instant Blame` - ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-vcs-git.html#using-instant-blame)) + ([Documentation](https://doc.qt.io/qtcreator/creator-vcs-git.html#using-instant-blame)) * Added visual indications that files are modified to the `Projects` view + (when you select + `Preferences > Version Control > General > Show VCS file status`) ([QTCREATORBUG-8857](https://bugreports.qt.io/browse/QTCREATORBUG-8857)) * Added the option to include all local branches in the log * Gerrit @@ -269,6 +282,9 @@ Test Integration * Added test duration information for test frameworks that support it ([QTCREATORBUG-31242](https://bugreports.qt.io/browse/QTCREATORBUG-31242)) +* Added support for running auto tests on Android for Qt 6.8.1 and later +* Fixed the execution of tests with multiple test classes + ([QTCREATORBUG-31935](https://bugreports.qt.io/browse/QTCREATORBUG-31935)) Extension Manager ----------------- @@ -317,7 +333,7 @@ Platforms ### VxWorks * Added support for VxWorks 24.03 - ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-create-vxworks-kits.html)) + ([Documentation](https://doc.qt.io/qtcreator/creator-how-to-create-vxworks-kits.html)) Credits for these changes go to: -------------------------------- From 06772004a24b0e7550761cbe87c6e07e40e9fc42 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 26 Nov 2024 08:48:50 +0100 Subject: [PATCH 04/15] Debugger: Allow gdb inferior calls for symbol address finding Amends a9e8b106a45489ba0, otherwise Qt version discovery breaks. Change-Id: I2b682935e4e5783328fc43840681b988306c6cc5 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 5 ++++- share/qtcreator/debugger/gdbbridge.py | 10 +++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index d4241160db6..e7e25a482fe 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -966,7 +966,10 @@ class DumperBase(): children = [('error', error)] self.putSpecialValue("notcallable", children=children) else: - self.putItem(result) + if result is None: + self.putSpecialValue("notcallable") + else: + self.putItem(result) def call(self, rettype, value, func, *args): return self.callHelper(rettype, value, func, args) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index e1a6ae64d63..fec4ee84b3d 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -737,11 +737,11 @@ class Dumper(DumperBase): return None if val is None else self.fromNativeValue(val) def nativeParseAndEvaluate(self, exp): + # FIXME: This breaks symbol discovery + if not self.allowInferiorCalls: + return None #self.warn('EVALUATE "%s"' % exp) try: - if not self.allowInferiorCalls: - return None - val = gdb.parse_and_eval(exp) return val except RuntimeError as error: @@ -1041,6 +1041,10 @@ class Dumper(DumperBase): except: return 0 + def symbolAddress(self, symbolName): + res = self.findSymbol(symbolName) + return res + def handleNewObjectFile(self, objfile): name = objfile.filename if self.isWindowsTarget(): From 66e465420ff179e30dc46378818a5ffae35a6f81 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 26 Nov 2024 10:36:21 +0100 Subject: [PATCH 05/15] Doc: Add info about automatic crash reporting - Sentry sets a file size limit for crash reports - Users are not notified about sending reports or whether it succeeds or fails - Describe the location of the reports - Add a note encouraging users to still report crashes in JIRA Fixes: QTCREATORBUG-32061 Change-Id: I1a5ca5f24463cbad846d55f279f4bd02ec1d61ad Reviewed-by: Eike Ziller --- .../creator-how-to-turn-on-crash-reports.qdoc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc index c35e71e4a0e..2c83a8f0be2 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc @@ -24,6 +24,20 @@ \li Select \uicontrol {Enable crash reporting}. \endlist + Crash reports are sent automatically if they don't exceed the file size + limit that Sentry sets for accepting them. You are not notified about + sending the reports or whether it succeeded or failed. + + \section1 Clear local crash reports + + \QC stores crash reports on the computer in the following directories: + + \list + \li On Windows: \c {%APPDATA%\QtProject\qtcreator\crashpad_reports} + \li On Linux and \macos: + \c {$HOME/.config/QtProject/qtcreator/crashpad_reports} + \endlist + To free up disk space that crash reports reserve on the computer, select \uicontrol {Clear Local Crash Reports}. You can see the size of the crash reports next to the button. @@ -31,5 +45,8 @@ Select \uicontrol ? to view more information about Crashpad and the security policy. + \note The best way to report a crash is to create a bug report and attach a + \e .dmp file or paste the corresponding stack trace to the report. + \sa {Contact Qt} */ From 2b7b8ef5a9d52d4e64594efff998a42399a29466 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 26 Nov 2024 09:08:36 +0100 Subject: [PATCH 06/15] Terminal: Fix "flicker" while searching Previously the search results would be removed every time the terminal updates before the new hits were resolved. This patch fixed that by keeping the old hits until the new hits are found. To not keep old hits around when the terminal is cleared a signal is introduced that the SearchableTerminal can connect to and clear its Hits immediately. Fixes: QTCREATORBUG-32066 Change-Id: If0bcf133098f06df53b52aae9b1036f0bc58870d Reviewed-by: Cristian Adam --- .../solutions/terminal/terminalsurface.cpp | 1 + src/libs/solutions/terminal/terminalsurface.h | 1 + src/libs/solutions/terminal/terminalview.cpp | 1 + src/libs/solutions/terminal/terminalview.h | 3 +++ .../terminal/searchableterminal.cpp | 23 +++++++++++++------ .../coreplugin/terminal/searchableterminal.h | 1 + 6 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/libs/solutions/terminal/terminalsurface.cpp b/src/libs/solutions/terminal/terminalsurface.cpp index 0c6d88f62ec..40dc2809c0d 100644 --- a/src/libs/solutions/terminal/terminalsurface.cpp +++ b/src/libs/solutions/terminal/terminalsurface.cpp @@ -120,6 +120,7 @@ struct TerminalSurfacePrivate }; m_vtermScreenCallbacks.sb_clear = [](void *user) { auto p = static_cast(user); + emit p->q->cleared(); return p->sb_clear(); }; m_vtermScreenCallbacks.bell = [](void *user) { diff --git a/src/libs/solutions/terminal/terminalsurface.h b/src/libs/solutions/terminal/terminalsurface.h index a8cc12fa4b0..6700156da9b 100644 --- a/src/libs/solutions/terminal/terminalsurface.h +++ b/src/libs/solutions/terminal/terminalsurface.h @@ -111,6 +111,7 @@ signals: void cursorChanged(Cursor oldCursor, Cursor newCursor); void altscreenChanged(bool altScreen); void unscroll(); + void cleared(); private: std::unique_ptr d; diff --git a/src/libs/solutions/terminal/terminalview.cpp b/src/libs/solutions/terminal/terminalview.cpp index 7ed75159a54..1010e546d97 100644 --- a/src/libs/solutions/terminal/terminalview.cpp +++ b/src/libs/solutions/terminal/terminalview.cpp @@ -176,6 +176,7 @@ TerminalSurface *TerminalView::surface() const void TerminalView::setupSurface() { d->m_surface = std::make_unique(QSize{80, 60}); + connect(d->m_surface.get(), &TerminalSurface::cleared, this, &TerminalView::cleared); if (d->m_surfaceIntegration) d->m_surface->setSurfaceIntegration(d->m_surfaceIntegration); diff --git a/src/libs/solutions/terminal/terminalview.h b/src/libs/solutions/terminal/terminalview.h index 6e0c55d06f8..fcc5994a75e 100644 --- a/src/libs/solutions/terminal/terminalview.h +++ b/src/libs/solutions/terminal/terminalview.h @@ -224,6 +224,9 @@ protected: private: void scheduleViewportUpdate(); +signals: + void cleared(); + private: std::unique_ptr d; }; diff --git a/src/plugins/coreplugin/terminal/searchableterminal.cpp b/src/plugins/coreplugin/terminal/searchableterminal.cpp index 5022be6b19c..66626523464 100644 --- a/src/plugins/coreplugin/terminal/searchableterminal.cpp +++ b/src/plugins/coreplugin/terminal/searchableterminal.cpp @@ -47,6 +47,18 @@ void TerminalSearch::setSearchString(const QString &searchString, FindFlags find } } +void TerminalSearch::clearAndSearchAgain() +{ + if (!m_hits.isEmpty()) { + m_hits.clear(); + m_currentHit = -1; + emit hitsChanged(); + emit currentHitChanged(); + } + + m_debounceTimer.start(); +} + void TerminalSearch::nextHit() { if (m_hits.isEmpty()) @@ -67,13 +79,6 @@ void TerminalSearch::previousHit() void TerminalSearch::updateHits() { - if (!m_hits.isEmpty()) { - m_hits.clear(); - m_currentHit = -1; - emit hitsChanged(); - emit currentHitChanged(); - } - m_debounceTimer.start(); } @@ -282,6 +287,10 @@ SearchableTerminal::SearchableTerminal(QWidget *parent) m_aggregate->add(this); surfaceChanged(); + + connect(this, &TerminalSolution::TerminalView::cleared, this, [this] { + m_search->clearAndSearchAgain(); + }); } SearchableTerminal::~SearchableTerminal() = default; diff --git a/src/plugins/coreplugin/terminal/searchableterminal.h b/src/plugins/coreplugin/terminal/searchableterminal.h index d1747fd99b2..958dac3bac0 100644 --- a/src/plugins/coreplugin/terminal/searchableterminal.h +++ b/src/plugins/coreplugin/terminal/searchableterminal.h @@ -25,6 +25,7 @@ public: void setCurrentSelection(std::optional selection); void setSearchString(const QString &searchString, Utils::FindFlags findFlags); + void clearAndSearchAgain(); void nextHit(); void previousHit(); From 79ead5339738ef41eb4dee1d47c6060b5291a0fb Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 26 Nov 2024 11:55:12 +0100 Subject: [PATCH 07/15] Autotools: Re-add Makefile.* as patterns for x-makefile Re-add the globs that went missing in the transition to Tika, so the Autotools project manager plugin can still open Makefile.am files. Change-Id: Ibd43eccf694efa276a1fff8bb0b77e6f68fc609b Reviewed-by: Christian Kandeler --- .../AutotoolsProjectManager.json.in | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/plugins/autotoolsprojectmanager/AutotoolsProjectManager.json.in b/src/plugins/autotoolsprojectmanager/AutotoolsProjectManager.json.in index 6ec7e5ab042..ee13229fa3a 100644 --- a/src/plugins/autotoolsprojectmanager/AutotoolsProjectManager.json.in +++ b/src/plugins/autotoolsprojectmanager/AutotoolsProjectManager.json.in @@ -24,5 +24,29 @@ ], "Url" : "https://www.qt.io", "DocumentationUrl" : "https://doc.qt.io/qtcreator/creator-projects-autotools.html", - ${IDE_PLUGIN_DEPENDENCIES} + ${IDE_PLUGIN_DEPENDENCIES}, + + "Mimetypes" : [ + "", + "", + " ", + " Makefile build file", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "" + ] } From 9a2c52d57bc2e8d22b7f2fed5678abc9d43f0bf6 Mon Sep 17 00:00:00 2001 From: Lukasz Papierkowski Date: Mon, 25 Nov 2024 17:28:54 +0100 Subject: [PATCH 08/15] Fix: DidOpen msg sometimes not sent after client restart by settings Change-Id: I8410e29fc66202dc1aca17f223bdb6ffb7e73ec8 Reviewed-by: Marcus Tillmanns --- .../languageclient/lualanguageclient/lualanguageclient.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp b/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp index 27e684b6fc9..83e9ff4abe2 100644 --- a/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp +++ b/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp @@ -490,7 +490,6 @@ public: m_initializationOptions = options.as(); emit optionsChanged(); - LanguageClientManager::applySettings(); m_isUpdatingAsyncOptions = false; }); From 01cc0e74991fd32c20847f8c02d4fc673d6bb115 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 26 Nov 2024 16:35:21 +0100 Subject: [PATCH 09/15] Autotools: Make the BuildSystem per BuildConfiguration The per-target variant is intended for project managers without build configurations. Fixes: QTCREATORBUG-32064 Change-Id: I908627dbe11a68ee7ac4cca3a10f956630008f08 Reviewed-by: hjk --- .../autotoolsprojectmanager/CMakeLists.txt | 1 - .../autotoolsbuildconfiguration.cpp | 171 +++++++++++++++- .../autotoolsbuildsystem.cpp | 187 ------------------ .../autotoolsbuildsystem.h | 12 -- .../autotoolsprojectmanager.qbs | 2 - .../autotoolsprojectplugin.cpp | 2 - 6 files changed, 170 insertions(+), 205 deletions(-) delete mode 100644 src/plugins/autotoolsprojectmanager/autotoolsbuildsystem.cpp delete mode 100644 src/plugins/autotoolsprojectmanager/autotoolsbuildsystem.h diff --git a/src/plugins/autotoolsprojectmanager/CMakeLists.txt b/src/plugins/autotoolsprojectmanager/CMakeLists.txt index f78daac7e07..09ec0b2646b 100644 --- a/src/plugins/autotoolsprojectmanager/CMakeLists.txt +++ b/src/plugins/autotoolsprojectmanager/CMakeLists.txt @@ -5,7 +5,6 @@ add_qtc_plugin(AutotoolsProjectManager autogenstep.cpp autogenstep.h autoreconfstep.cpp autoreconfstep.h autotoolsbuildconfiguration.cpp autotoolsbuildconfiguration.h - autotoolsbuildsystem.cpp autotoolsbuildsystem.h autotoolsprojectconstants.h autotoolsprojectmanagertr.h autotoolsprojectplugin.cpp diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp index 142794f9cee..dcce460621e 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp @@ -5,29 +5,191 @@ #include "autotoolsprojectconstants.h" #include "autotoolsprojectmanagertr.h" +#include "makefileparser.h" #include #include #include +#include #include #include #include +#include #include +#include + +#include + +#include #include using namespace ProjectExplorer; +using namespace Tasking; using namespace Utils; namespace AutotoolsProjectManager::Internal { -// AutotoolsBuildConfiguration +// AutotoolsBuildSystem +class AutotoolsBuildSystem final : public BuildSystem +{ +public: + explicit AutotoolsBuildSystem(BuildConfiguration *bc); +private: + void triggerParsing() final; + QString name() const final { return QLatin1String("autotools"); } + + /** + * Is invoked when the makefile parsing by m_makefileParserThread has + * been finished. Adds all sources and files into the project tree and + * takes care listen to file changes for Makefile.am and configure.ac + * files. + */ + void makefileParsingFinished(const MakefileParserOutputData &outputData); + + /// Return value for AutotoolsProject::files() + QStringList m_files; + + /// Responsible for parsing the makefiles asynchronously in a thread + Tasking::TaskTreeRunner m_parserRunner; + + std::unique_ptr m_cppCodeModelUpdater; +}; + +AutotoolsBuildSystem::AutotoolsBuildSystem(BuildConfiguration *bc) + : BuildSystem(bc) + , m_cppCodeModelUpdater(ProjectUpdaterFactory::createCppProjectUpdater()) +{ + connect(project(), &Project::projectFileIsDirty, this, [this] { requestParse(); }); +} + +static void parseMakefileImpl(QPromise &promise, const QString &makefile) +{ + const auto result = parseMakefile(makefile, QFuture(promise.future())); + if (result) + promise.addResult(*result); + else + promise.future().cancel(); +} + +void AutotoolsBuildSystem::triggerParsing() +{ + const Storage> storage; + + const auto onSetup = [this, storage](Async &async) { + *storage = guardParsingRun(); + async.setConcurrentCallData(parseMakefileImpl, projectFilePath().path()); + }; + const auto onDone = [this, storage](const Async &async) { + (*storage)->markAsSuccess(); + makefileParsingFinished(async.result()); + }; + + const Group recipe { + storage, + AsyncTask(onSetup, onDone, CallDoneIf::Success) + }; + m_parserRunner.start(recipe); +} + +static QStringList filterIncludes(const QString &absSrc, const QString &absBuild, + const QStringList &in) +{ + QStringList result; + for (const QString &i : in) { + QString out = i; + out.replace(QLatin1String("$(top_srcdir)"), absSrc); + out.replace(QLatin1String("$(abs_top_srcdir)"), absSrc); + + out.replace(QLatin1String("$(top_builddir)"), absBuild); + out.replace(QLatin1String("$(abs_top_builddir)"), absBuild); + + result << out; + } + return result; +} + +void AutotoolsBuildSystem::makefileParsingFinished(const MakefileParserOutputData &outputData) +{ + m_files.clear(); + + QSet filesToWatch; + + // Apply sources to m_files, which are returned at AutotoolsBuildSystem::files() + const QFileInfo fileInfo = projectFilePath().toFileInfo(); + const QDir dir = fileInfo.absoluteDir(); + const QStringList files = outputData.m_sources; + for (const QString& file : files) + m_files.append(dir.absoluteFilePath(file)); + + // Watch for changes of Makefile.am files. If a Makefile.am file + // has been changed, the project tree must be reparsed. + const QStringList makefiles = outputData.m_makefiles; + for (const QString &makefile : makefiles) { + const QString absMakefile = dir.absoluteFilePath(makefile); + + m_files.append(absMakefile); + + filesToWatch.insert(FilePath::fromString(absMakefile)); + } + + // Add configure.ac file to project and watch for changes. + const QLatin1String configureAc(QLatin1String("configure.ac")); + const QFile configureAcFile(fileInfo.absolutePath() + QLatin1Char('/') + configureAc); + if (configureAcFile.exists()) { + const QString absConfigureAc = dir.absoluteFilePath(configureAc); + m_files.append(absConfigureAc); + + filesToWatch.insert(FilePath::fromString(absConfigureAc)); + } + + auto newRoot = std::make_unique(project()->projectDirectory()); + for (const QString &f : std::as_const(m_files)) { + const FilePath path = FilePath::fromString(f); + newRoot->addNestedNode(std::make_unique(path, + FileNode::fileTypeForFileName(path))); + } + setRootProjectNode(std::move(newRoot)); + project()->setExtraProjectFiles(filesToWatch); + + QtSupport::CppKitInfo kitInfo(kit()); + QTC_ASSERT(kitInfo.isValid(), return ); + + RawProjectPart rpp; + rpp.setDisplayName(project()->displayName()); + rpp.setProjectFileLocation(projectFilePath()); + rpp.setQtVersion(kitInfo.projectPartQtVersion); + const QStringList cflags = outputData.m_cflags; + QStringList cxxflags = outputData.m_cxxflags; + if (cxxflags.isEmpty()) + cxxflags = cflags; + + const FilePath includeFileBaseDir = projectDirectory(); + rpp.setFlagsForC({kitInfo.cToolchain, cflags, includeFileBaseDir}); + rpp.setFlagsForCxx({kitInfo.cxxToolchain, cxxflags, includeFileBaseDir}); + + const QString absSrc = project()->projectDirectory().path(); + BuildConfiguration *bc = target()->activeBuildConfiguration(); + + const QString absBuild = bc ? bc->buildDirectory().path() : QString(); + + rpp.setIncludePaths(filterIncludes(absSrc, absBuild, outputData.m_includePaths)); + rpp.setMacros(outputData.m_macros); + rpp.setFiles(m_files); + + m_cppCodeModelUpdater->update({project(), kitInfo, activeParseEnvironment(), {rpp}}); + + emitBuildSystemUpdated(); +} + +// AutotoolsBuildConfiguration class AutotoolsBuildConfiguration final : public BuildConfiguration { public: AutotoolsBuildConfiguration(Target *target, Id id) : BuildConfiguration(target, id) + , m_buildSystem(new AutotoolsBuildSystem(this)) { // / is used so the un-changed check in setBuildDirectory() works correctly. // The leading / is to avoid the relative the path expansion in BuildConfiguration::buildDirectory. @@ -48,6 +210,13 @@ public: // ### Build Steps Clean ### appendInitialCleanStep(Constants::MAKE_STEP_ID); // make clean } + + ~AutotoolsBuildConfiguration() override { delete m_buildSystem; } + +private: + BuildSystem *buildSystem() const override { return m_buildSystem; } + + AutotoolsBuildSystem * const m_buildSystem; }; class AutotoolsBuildConfigurationFactory final : public BuildConfigurationFactory diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildsystem.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildsystem.cpp deleted file mode 100644 index 0c79660e377..00000000000 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildsystem.cpp +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (C) 2016 Openismus GmbH. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include "autotoolsbuildsystem.h" - -#include "makefileparser.h" - -#include -#include -#include -#include - -#include - -#include - -#include -#include - -using namespace ProjectExplorer; -using namespace Tasking; -using namespace Utils; - -namespace AutotoolsProjectManager::Internal { - -class AutotoolsBuildSystem final : public BuildSystem -{ -public: - explicit AutotoolsBuildSystem(Target *target); - ~AutotoolsBuildSystem() final; - -private: - void triggerParsing() final; - QString name() const final { return QLatin1String("autotools"); } - - /** - * Is invoked when the makefile parsing by m_makefileParserThread has - * been finished. Adds all sources and files into the project tree and - * takes care listen to file changes for Makefile.am and configure.ac - * files. - */ - void makefileParsingFinished(const MakefileParserOutputData &outputData); - - /// Return value for AutotoolsProject::files() - QStringList m_files; - - /// Responsible for parsing the makefiles asynchronously in a thread - Tasking::TaskTreeRunner m_parserRunner; - - std::unique_ptr m_cppCodeModelUpdater; -}; - -AutotoolsBuildSystem::AutotoolsBuildSystem(Target *target) - : BuildSystem(target) - , m_cppCodeModelUpdater(ProjectUpdaterFactory::createCppProjectUpdater()) -{ - connect(target, &Target::activeBuildConfigurationChanged, this, [this] { requestParse(); }); - connect(target->project(), &Project::projectFileIsDirty, this, [this] { requestParse(); }); -} - -AutotoolsBuildSystem::~AutotoolsBuildSystem() = default; - -static void parseMakefileImpl(QPromise &promise, const QString &makefile) -{ - const auto result = parseMakefile(makefile, QFuture(promise.future())); - if (result) - promise.addResult(*result); - else - promise.future().cancel(); -} - -void AutotoolsBuildSystem::triggerParsing() -{ - const Storage> storage; - - const auto onSetup = [this, storage](Async &async) { - *storage = guardParsingRun(); - async.setConcurrentCallData(parseMakefileImpl, projectFilePath().path()); - }; - const auto onDone = [this, storage](const Async &async) { - (*storage)->markAsSuccess(); - makefileParsingFinished(async.result()); - }; - - const Group recipe { - storage, - AsyncTask(onSetup, onDone, CallDoneIf::Success) - }; - m_parserRunner.start(recipe); -} - -static QStringList filterIncludes(const QString &absSrc, const QString &absBuild, - const QStringList &in) -{ - QStringList result; - for (const QString &i : in) { - QString out = i; - out.replace(QLatin1String("$(top_srcdir)"), absSrc); - out.replace(QLatin1String("$(abs_top_srcdir)"), absSrc); - - out.replace(QLatin1String("$(top_builddir)"), absBuild); - out.replace(QLatin1String("$(abs_top_builddir)"), absBuild); - - result << out; - } - return result; -} - -void AutotoolsBuildSystem::makefileParsingFinished(const MakefileParserOutputData &outputData) -{ - m_files.clear(); - - QSet filesToWatch; - - // Apply sources to m_files, which are returned at AutotoolsBuildSystem::files() - const QFileInfo fileInfo = projectFilePath().toFileInfo(); - const QDir dir = fileInfo.absoluteDir(); - const QStringList files = outputData.m_sources; - for (const QString& file : files) - m_files.append(dir.absoluteFilePath(file)); - - // Watch for changes of Makefile.am files. If a Makefile.am file - // has been changed, the project tree must be reparsed. - const QStringList makefiles = outputData.m_makefiles; - for (const QString &makefile : makefiles) { - const QString absMakefile = dir.absoluteFilePath(makefile); - - m_files.append(absMakefile); - - filesToWatch.insert(FilePath::fromString(absMakefile)); - } - - // Add configure.ac file to project and watch for changes. - const QLatin1String configureAc(QLatin1String("configure.ac")); - const QFile configureAcFile(fileInfo.absolutePath() + QLatin1Char('/') + configureAc); - if (configureAcFile.exists()) { - const QString absConfigureAc = dir.absoluteFilePath(configureAc); - m_files.append(absConfigureAc); - - filesToWatch.insert(FilePath::fromString(absConfigureAc)); - } - - auto newRoot = std::make_unique(project()->projectDirectory()); - for (const QString &f : std::as_const(m_files)) { - const FilePath path = FilePath::fromString(f); - newRoot->addNestedNode(std::make_unique(path, - FileNode::fileTypeForFileName(path))); - } - setRootProjectNode(std::move(newRoot)); - project()->setExtraProjectFiles(filesToWatch); - - QtSupport::CppKitInfo kitInfo(kit()); - QTC_ASSERT(kitInfo.isValid(), return ); - - RawProjectPart rpp; - rpp.setDisplayName(project()->displayName()); - rpp.setProjectFileLocation(projectFilePath()); - rpp.setQtVersion(kitInfo.projectPartQtVersion); - const QStringList cflags = outputData.m_cflags; - QStringList cxxflags = outputData.m_cxxflags; - if (cxxflags.isEmpty()) - cxxflags = cflags; - - const FilePath includeFileBaseDir = projectDirectory(); - rpp.setFlagsForC({kitInfo.cToolchain, cflags, includeFileBaseDir}); - rpp.setFlagsForCxx({kitInfo.cxxToolchain, cxxflags, includeFileBaseDir}); - - const QString absSrc = project()->projectDirectory().path(); - BuildConfiguration *bc = target()->activeBuildConfiguration(); - - const QString absBuild = bc ? bc->buildDirectory().path() : QString(); - - rpp.setIncludePaths(filterIncludes(absSrc, absBuild, outputData.m_includePaths)); - rpp.setMacros(outputData.m_macros); - rpp.setFiles(m_files); - - m_cppCodeModelUpdater->update({project(), kitInfo, activeParseEnvironment(), {rpp}}); - - emitBuildSystemUpdated(); -} - -BuildSystem *createAutotoolsBuildSystem(Target *target) -{ - return new AutotoolsBuildSystem(target); -} - -} // AutotoolsProjectManager::Internal diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildsystem.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildsystem.h deleted file mode 100644 index 25cd6e829e3..00000000000 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildsystem.h +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (C) 2016 Openismus GmbH. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include - -namespace AutotoolsProjectManager::Internal { - -ProjectExplorer::BuildSystem *createAutotoolsBuildSystem(ProjectExplorer::Target *target); - -} // AutotoolsProjectManager::Internal diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.qbs b/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.qbs index cefd8722c21..ae276372430 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.qbs +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectmanager.qbs @@ -17,8 +17,6 @@ QtcPlugin { "autoreconfstep.h", "autotoolsbuildconfiguration.cpp", "autotoolsbuildconfiguration.h", - "autotoolsbuildsystem.cpp", - "autotoolsbuildsystem.h", "autotoolsprojectconstants.h", "autotoolsprojectmanagertr.h", "autotoolsprojectplugin.cpp", diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp b/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp index 212f0cdb666..8bf0ecfe171 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp @@ -4,7 +4,6 @@ #include "autogenstep.h" #include "autoreconfstep.h" #include "autotoolsbuildconfiguration.h" -#include "autotoolsbuildsystem.h" #include "autotoolsprojectconstants.h" #include "configurestep.h" #include "makestep.h" @@ -41,7 +40,6 @@ public: setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); setDisplayName(projectDirectory().fileName()); setHasMakeInstallEquivalent(true); - setBuildSystemCreator(&createAutotoolsBuildSystem); } }; From 767b41f80fde96189234ade6f5efa26c620187da Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 22 Nov 2024 13:36:40 +0100 Subject: [PATCH 10/15] Tooltips: Fix widget tool tip positioning on macOS There is a weird behavior of Qt on macOS, that widget tooltips are moved up by 20 pixels when calling show(). This is pretty annoying, because the tooltip gets under the mouse pointer and interrupts user interaction. This only happens if all of - the widget has multiple subwidgets - the layout has size constraint QLayout::SetFixedSize - adjustSize is called are true. Remove the explicit adjustSize, that doesn't seem to make any difference, except for avoiding the issue with show(). Task-number: QTBUG-131479 Change-Id: I2285bf77b0980940b48ac22f931a45b6a73ad06e Reviewed-by: Christian Stenger Reviewed-by: David Schulz --- src/libs/utils/tooltip/tips.cpp | 4 +++- src/plugins/debugger/debuggertooltipmanager.cpp | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/tooltip/tips.cpp b/src/libs/utils/tooltip/tips.cpp index 180b8f960f2..5f0a1ed42d5 100644 --- a/src/libs/utils/tooltip/tips.cpp +++ b/src/libs/utils/tooltip/tips.cpp @@ -5,6 +5,7 @@ #include "tooltip.h" #include "../qtcassert.h" +#include "../hostosinfo.h" #include #include @@ -249,7 +250,8 @@ void WidgetTip::configure(const QPoint &pos) move(pos); m_layout->addWidget(m_widget); m_layout->setSizeConstraint(QLayout::SetFixedSize); - adjustSize(); + if (!HostOsInfo::isMacHost()) // work around QTBUG-131479 + adjustSize(); } void WidgetTip::pinToolTipWidget(QWidget *parent) diff --git a/src/plugins/debugger/debuggertooltipmanager.cpp b/src/plugins/debugger/debuggertooltipmanager.cpp index bdea5b9f1e6..479b5d11d44 100644 --- a/src/plugins/debugger/debuggertooltipmanager.cpp +++ b/src/plugins/debugger/debuggertooltipmanager.cpp @@ -463,6 +463,7 @@ DebuggerToolTipWidget::DebuggerToolTipWidget(DebuggerEngine *engine, auto mainLayout = new QVBoxLayout(this); mainLayout->setSizeConstraint(QLayout::SetFixedSize); mainLayout->setContentsMargins(0, 0, 0, 0); + mainLayout->setSpacing(0); mainLayout->addWidget(toolBar); mainLayout->addWidget(treeView); From c980a97db68b578bbe42397a37f60177fae4ab78 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 26 Nov 2024 15:52:23 +0100 Subject: [PATCH 11/15] Doc: Do not instruct users to make .dmp files public ...as they might contain private information. Task-number: QTCREATORBUG-32061 Change-Id: I8ba3e4f26755d16f13b04f9d91504126a86c26d9 Reviewed-by: Eike Ziller --- .../src/howto/creator-only/creator-how-to-contact-qt.qdoc | 3 ++- .../creator-only/creator-how-to-turn-on-crash-reports.qdoc | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-contact-qt.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-contact-qt.qdoc index 2ca57713777..cc5ed247c5f 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-to-contact-qt.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-contact-qt.qdoc @@ -45,5 +45,6 @@ {#qt-creator} channel on Libera.Chat IRC, go to \uicontrol Help > \uicontrol Contact. - \sa {Paste and fetch code snippets}, {Technical Support} + \sa {Paste and fetch code snippets}, {Technical Support}, + {Turn on crash reports} */ diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc index 2c83a8f0be2..b2331043d4b 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc @@ -45,8 +45,8 @@ Select \uicontrol ? to view more information about Crashpad and the security policy. - \note The best way to report a crash is to create a bug report and attach a - \e .dmp file or paste the corresponding stack trace to the report. + \note The best way to report a crash is to create a bug report where you + paste the corresponding stack trace. \sa {Contact Qt} */ From b1bf4594bae61fbb94f191f3328dd4e65bf6ec46 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 27 Nov 2024 07:09:46 +0100 Subject: [PATCH 12/15] Debugger: Fix Run in Terminal and output retrieval for RL/Boot2Qt/QNX Amends 265491e408c. Replacing the DebuggerServerRunner by a simple Process lost the SimpleTargetRunner's ability to run in terminal and to display output. Re-add this. Fixes: QTCREATORBUG-32072 Fixes: QTCREATORBUG-32074 Change-Id: I6439eeacbb2561f08b93cba140836919afe56efb Reviewed-by: Christian Stenger --- src/plugins/debugger/debuggerruncontrol.cpp | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index 04d282015d6..c864626a848 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -54,6 +54,7 @@ #include #include +#include #include using namespace Core; @@ -104,6 +105,9 @@ public: // DebugServer Process debuggerServerProc; + QTextCodec *debuggerServerCodec = QTextCodec::codecForName("utf8"); + QTextCodec::ConverterState outputCodecState; // FIXME: Handle on Process side. + QTextCodec::ConverterState errorCodecState; ProcessHandle serverAttachPid; bool serverUseMulti = true; bool serverEssential = true; @@ -1136,8 +1140,29 @@ void DebuggerRunTool::startDebugServerIfNeededAndContinueStartup() } } + if (auto terminalAspect = runControl()->aspectData()) { + const bool useTerminal = terminalAspect->useTerminal; + d->debuggerServerProc.setTerminalMode(useTerminal ? TerminalMode::Run : TerminalMode::Off); + } + d->debuggerServerProc.setCommand(cmd); + connect(&d->debuggerServerProc, &Process::readyReadStandardOutput, + this, [this] { + const QByteArray data = d->debuggerServerProc.readAllRawStandardOutput(); + const QString msg = d->debuggerServerCodec->toUnicode( + data.constData(), data.length(), &d->outputCodecState); + runControl()->postMessage(msg, StdOutFormat, false); + }); + + connect(&d->debuggerServerProc, &Process::readyReadStandardError, + this, [this] { + const QByteArray data = d->debuggerServerProc.readAllRawStandardError(); + const QString msg = d->debuggerServerCodec->toUnicode( + data.constData(), data.length(), &d->errorCodecState); + runControl()->postMessage(msg, StdErrFormat, false); + }); + connect(&d->debuggerServerProc, &Process::started, this, [this] { continueAfterDebugServerStart(); }); From 3ac6a5956df4f4a47ac241cb33d617c76ac507e2 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 26 Nov 2024 17:11:07 +0100 Subject: [PATCH 13/15] StringUtils: Don't issue warning on '*' port Amends d91d4028536ea496cf0b9b09945b730ead6158d0 Change-Id: I750d09b770bd71ae97705e02b3dc25566af7bb66 Reviewed-by: hjk Reviewed-by: Marcus Tillmanns --- src/libs/utils/stringutils.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libs/utils/stringutils.cpp b/src/libs/utils/stringutils.cpp index 04617064cab..e70a7fbb592 100644 --- a/src/libs/utils/stringutils.cpp +++ b/src/libs/utils/stringutils.cpp @@ -228,6 +228,9 @@ QTCREATOR_UTILS_EXPORT int parseUsedPortFromNetstatOutput(const QByteArray &line return -1; } + if (columnToParse.size() > 0 && columnToParse.back() == '*') + return -1; // Valid case, no warning. See QNX udp case. + const int port = trailingNumber(columnToParse, base); if (port == -1) { qWarning("%s: Unexpected string '%s' is not a port. Tried to read from '%s'", From 083db7c5cfe92a8396144fb717238ff6f2261f99 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 27 Nov 2024 06:27:01 +0100 Subject: [PATCH 14/15] ProjectExplorer: Assert a build config when retrieving install step Some safety net for the future, triggered by the referenced task which was already properly fixed by 01cc0e7499. Task-number: QTCREATORBUG-32064 Change-Id: If1d79a2ad6fa7dc208952528ed674523d1aaceb8 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/buildsystem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/projectexplorer/buildsystem.cpp b/src/plugins/projectexplorer/buildsystem.cpp index 52c5b73f024..55c74a4bc90 100644 --- a/src/plugins/projectexplorer/buildsystem.cpp +++ b/src/plugins/projectexplorer/buildsystem.cpp @@ -242,6 +242,7 @@ ExtraCompiler *BuildSystem::extraCompilerForTarget(const Utils::FilePath &target MakeInstallCommand BuildSystem::makeInstallCommand(const FilePath &installRoot) const { QTC_ASSERT(target()->project()->hasMakeInstallEquivalent(), return {}); + QTC_ASSERT(buildConfiguration(), return {}); BuildStepList *buildSteps = buildConfiguration()->buildSteps(); QTC_ASSERT(buildSteps, return {}); From 2aba646a5ce1f4b87614eb73d624d293f11b17cd Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 21 Nov 2024 06:30:58 +0100 Subject: [PATCH 15/15] qmlls client: append builtin quickfixes to qmlls quickfixes Fixes: QTCREATORBUG-31977 Change-Id: I6bb59a1606c87203a1c8f4e0cd410560b4ecc835 Reviewed-by: Eike Ziller --- .../languageclient/languageclientquickfix.cpp | 28 ++++++++----- .../languageclient/languageclientquickfix.h | 2 + src/plugins/qmljseditor/qmllsclient.cpp | 40 +++++++++++++++++++ 3 files changed, 59 insertions(+), 11 deletions(-) diff --git a/src/plugins/languageclient/languageclientquickfix.cpp b/src/plugins/languageclient/languageclientquickfix.cpp index 1f882608771..e14c66d138a 100644 --- a/src/plugins/languageclient/languageclientquickfix.cpp +++ b/src/plugins/languageclient/languageclientquickfix.cpp @@ -87,6 +87,22 @@ void LanguageClientQuickFixAssistProcessor::cancel() } } +QuickFixOperations LanguageClientQuickFixAssistProcessor::resultToOperations(const LanguageServerProtocol::CodeActionResult &result) +{ + auto list = std::get_if>>(&result); + if (!list) + return {}; + + QuickFixOperations ops; + for (const std::variant &item : *list) { + if (auto action = std::get_if(&item)) + ops << new CodeActionQuickFixOperation(*action, m_client); + else if (auto command = std::get_if(&item)) + ops << new CommandQuickFixOperation(*command, m_client); + } + return ops; +} + void LanguageClientQuickFixAssistProcessor::handleCodeActionResponse(const CodeActionRequest::Response &response) { m_currentRequest.reset(); @@ -101,17 +117,7 @@ void LanguageClientQuickFixAssistProcessor::handleCodeActionResponse(const CodeA GenericProposal *LanguageClientQuickFixAssistProcessor::handleCodeActionResult(const CodeActionResult &result) { - if (auto list = std::get_if>>(&result)) { - QuickFixOperations ops; - for (const std::variant &item : *list) { - if (auto action = std::get_if(&item)) - ops << new CodeActionQuickFixOperation(*action, m_client); - else if (auto command = std::get_if(&item)) - ops << new CommandQuickFixOperation(*command, m_client); - } - return GenericProposal::createProposal(interface(), ops); - } - return nullptr; + return GenericProposal::createProposal(interface(), resultToOperations(result)); } LanguageClientQuickFixProvider::LanguageClientQuickFixProvider(Client *client) diff --git a/src/plugins/languageclient/languageclientquickfix.h b/src/plugins/languageclient/languageclientquickfix.h index d83a236170b..5fe85034b1a 100644 --- a/src/plugins/languageclient/languageclientquickfix.h +++ b/src/plugins/languageclient/languageclientquickfix.h @@ -67,6 +67,8 @@ public: void cancel() override; protected: + TextEditor::QuickFixOperations resultToOperations( + const LanguageServerProtocol::CodeActionResult &result); void setOnlyKinds(const QList &only); Client *client() { return m_client; } diff --git a/src/plugins/qmljseditor/qmllsclient.cpp b/src/plugins/qmljseditor/qmllsclient.cpp index 6bb253f2932..1fdc30a124a 100644 --- a/src/plugins/qmljseditor/qmllsclient.cpp +++ b/src/plugins/qmljseditor/qmllsclient.cpp @@ -6,12 +6,16 @@ #include "qmljseditorconstants.h" #include "qmljseditortr.h" #include "qmljseditorsettings.h" +#include "qmljsquickfix.h" #include #include +#include #include +#include +#include #include #include #include @@ -107,6 +111,41 @@ void QmllsClient::updateQmllsSemanticHighlightingCapability() } } +class QmllsQuickFixAssistProcessor : public LanguageClientQuickFixAssistProcessor +{ +public: + using LanguageClientQuickFixAssistProcessor::LanguageClientQuickFixAssistProcessor; +private: + TextEditor::GenericProposal *perform() override + { + // Step 1: Collect qmlls code actions asynchronously + LanguageClientQuickFixAssistProcessor::perform(); + + // Step 2: Collect built-in quickfixes synchronously + m_builtinOps = findQmlJSQuickFixes(interface()); + + return nullptr; + } + + TextEditor::GenericProposal *handleCodeActionResult(const LanguageServerProtocol::CodeActionResult &result) override + { + return TextEditor::GenericProposal::createProposal( + interface(), resultToOperations(result) + m_builtinOps); + } + + QuickFixOperations m_builtinOps; +}; + +class QmllsQuickFixAssistProvider : public LanguageClientQuickFixProvider +{ +public: + using LanguageClientQuickFixProvider::LanguageClientQuickFixProvider; + TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override + { + return new QmllsQuickFixAssistProcessor(client()); + } +}; + QmllsClient::QmllsClient(StdIOClientInterface *interface) : Client(interface) { @@ -178,6 +217,7 @@ QmllsClient::QmllsClient(StdIOClientInterface *interface) } return std::nullopt; }); + setQuickFixAssistProvider(new QmllsQuickFixAssistProvider(this)); } QmllsClient::~QmllsClient()