1{ lib, stdenv, fetchurl, fetchpatch, pkg-config, file, zip, wxGTK32, gtk3
2, contribPlugins ? false, hunspell, gamin, boost, wrapGAppsHook
3}:
4
5stdenv.mkDerivation rec {
6 name = "${pname}-${lib.optionalString contribPlugins "full-"}${version}";
7 version = "20.03";
8 pname = "codeblocks";
9
10 src = fetchurl {
11 url = "mirror://sourceforge/codeblocks/Sources/${version}/codeblocks-${version}.tar.xz";
12 sha256 = "1idaksw1vacmm83krxh5zlb12kad3dkz9ixh70glw1gaibib7vhm";
13 };
14
15 nativeBuildInputs = [ pkg-config file zip wrapGAppsHook ];
16 buildInputs = [ wxGTK32 gtk3 ]
17 ++ lib.optionals contribPlugins [ hunspell gamin boost ];
18 enableParallelBuilding = true;
19 patches = [
20 ./writable-projects.patch
21 ./fix-clipboard-flush.patch
22 # Fix build on non-x86 machines
23 (fetchpatch {
24 name = "remove-int3.patch";
25 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/d76c015c456561d2c7987935a5f4dc6c0932b0c4.patch";
26 sha256 = "sha256-dpH33vGf2aNdYTeLwxglYDNbvwoY2bGSG6YFRyoGw+A=";
27 })
28 (fetchpatch {
29 name = "remove-pragmas.patch";
30 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/966949d5ab7f3cb86e2a2c7ef4e853ee209b5a1a.patch";
31 sha256 = "sha256-XjejjGOvDk3gl1/n9R69XATGLj5n7tOZNyG8vIlwfyg=";
32 })
33 # Fix build with GCC 11
34 (fetchpatch {
35 name = "use-gcc11-openfilelist.patch";
36 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/a5ea6ff7ff301d739d3dc8145db1578f504ee4ca.patch";
37 sha256 = "sha256-kATaLej8kJf4xm0VicHfRetOepX8O9gOhwdna0qylvQ=";
38 })
39 (fetchpatch {
40 name = "use-gcc11-ccmanager.patch";
41 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/04b7c50fb8c6a29b2d84579ee448d2498414d855.patch";
42 sha256 = "sha256-VPy/M6IvNBxUE4hZRbLExFm0DJf4gmertrqrvsXQNz4=";
43 })
44 # Fix build with wxGTK 3.1.5
45 (fetchpatch {
46 name = "use-wxgtk315.patch";
47 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/2345b020b862ec855038dd32a51ebb072647f28d.patch";
48 sha256 = "sha256-RRjwZA37RllnG8cJdBEnASpEd8z0+ru96fjntO42OvU=";
49 })
50 (fetchpatch {
51 name = "fix-taskbar-icons.patch";
52 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/40eb88e3f2b933f19f9933e06c8d0899c54f5e25.patch";
53 hash = "sha256-Gj5gtxX5QNYAeF+QrPS/bBHLLEmflSxUHSLUK3GSs0I=";
54 })
55 (fetchpatch {
56 name = "fix-warnings.patch";
57 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/56ac0396fad7a5b4bbb40bb8c4b5fe1755078aef.patch";
58 excludes = [ "src/src/environmentsettingsdlg.h" ];
59 hash = "sha256-tl4rF9iAf1TzCIbKhVFqcxvr1IiPdwqLYZg0SY5BJ7I=";
60 })
61 (fetchpatch {
62 name = "fix-getstring.patch";
63 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/dbdf5c5ea9e3161233f0588a7616b7e4fedc7870.patch";
64 sha256 = "sha256-DrEMFluN8vs0LERa7ULGshl7HdejpsuvXAMjIr/K1fQ=";
65 })
66 # Fix build with wxGTK 3.1.6
67 (fetchpatch {
68 name = "remove-code-for-old-wx-1.patch";
69 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/8035dfdff321754819f79e3165401aa59bd8c7f7.patch";
70 hash = "sha256-Z8Ap03W/XH5VwKFVudJr7rugb0BgI2dKJgQS4yIWbEM=";
71 })
72 (fetchpatch {
73 name = "remove-code-for-old-wx-2.patch";
74 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/9a9c6a9d5e3e0f6eff5594ecd61a2222f073be9c.patch";
75 hash = "sha256-SwYixvbRuXQ+jA1ijmClWkzqzzr0viVuFOAsihGc5dM=";
76 })
77 (fetchpatch {
78 name = "remove-code-for-old-wx-3.patch";
79 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/c28746f4887f10e6f9f10eeafae0fb22ecdbf9c7.patch";
80 hash = "sha256-1lcIiCnY2nBuUsffXC2rdglOE3ccIbogcgTx4M2Ee2I=";
81 })
82 (fetchpatch {
83 name = "fix-notebookstyles.patch";
84 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/29315df024251850832583f73e67e515dae10830.patch";
85 hash = "sha256-Uc1V0eEbNljnN+1Dqb/35MLSSoLjyuRZMTofgcXRyb8=";
86 })
87 (fetchpatch {
88 name = "fix-regex.patch";
89 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/46720043319758cb0e798eb23520063583c40eaa.patch";
90 hash = "sha256-Aix58T0JJcX/7VZukU/9i/nXh9GJywXC3yXEyUZK0js=";
91 })
92 (fetchpatch {
93 name = "fix-build-with-clang.patch";
94 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/92cb2239662952e3b59b31e03edd653bb8066e64.patch";
95 hash = "sha256-XI7JW9Nuueb7muKpaC2icM/CxhrCJtO48cLHK+BVWXI=";
96 })
97 (fetchpatch {
98 name = "fix-normalize.patch";
99 url = "https://github.com/archlinux/svntogit-community/raw/458eacb60bc0e71e3d333943cebbc41e75ed0956/trunk/sc_wxtypes-normalize.patch";
100 hash = "sha256-7wEwDLwuNUWHUwHjFyq74sHiuEha1VexRLEX42rPZSs=";
101 })
102 # Fix HiDPI
103 (fetchpatch {
104 name = "update-about-dialog.patch";
105 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/a4aacc92640b587ad049cd6aa68c637e536e9ab5.patch";
106 hash = "sha256-2S4sVn+Dq5y9xcxCkzQ+WeR+qWxAOLbQUZEnk060RI0=";
107 })
108 (fetchpatch {
109 name = "add-display-info.patch";
110 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/f2f127cf5cd97c7da6a957a3f7764cb25cc9017e.patch";
111 hash = "sha256-C0dVfC0NIHMXfWNlOwjzoGz5tmG2dlnU/EE92Jjebbs=";
112 })
113 (fetchpatch {
114 name = "fix-hidpi.patch";
115 url = "https://github.com/arnholm/codeblocks_sfmirror/commit/b2e4f1279804e1d11b71bc75eeb37072c3589296.patch";
116 hash = "sha256-/Xp6ww9C3V6I67tTA4MrGpSGo3J0MXzFjzQU7RxY84U=";
117 })
118 ];
119 preConfigure = "substituteInPlace ./configure --replace /usr/bin/file ${file}/bin/file";
120 postConfigure = lib.optionalString stdenv.isLinux "substituteInPlace libtool --replace ldconfig ${stdenv.cc.libc.bin}/bin/ldconfig";
121 configureFlags = [ "--enable-pch=no" ] ++ lib.optionals contribPlugins [
122 ("--with-contrib-plugins" + lib.optionalString stdenv.isDarwin "=all,-FileManager,-NassiShneiderman")
123 "--with-boost-libdir=${boost}/lib"
124 ];
125 postInstall = lib.optionalString stdenv.isDarwin ''
126 ln -s $out/lib/codeblocks/plugins $out/share/codeblocks/plugins
127 '';
128
129 meta = with lib; {
130 maintainers = [ maintainers.linquize ];
131 platforms = platforms.all;
132 description = "The open source, cross platform, free C, C++ and Fortran IDE";
133 longDescription =
134 ''
135 Code::Blocks is a free C, C++ and Fortran IDE built to meet the most demanding needs of its users.
136 It is designed to be very extensible and fully configurable.
137 Finally, an IDE with all the features you need, having a consistent look, feel and operation across platforms.
138 '';
139 homepage = "http://www.codeblocks.org";
140 license = licenses.gpl3;
141 };
142}