mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-03-28 15:57:03 -05:00
Compare commits
2286 Commits
v1.33.2
...
feature/we
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
810955b1be | ||
|
|
96a5a5d34c | ||
|
|
928e0f227a | ||
|
|
93fc6f2de1 | ||
|
|
cdc260b45c | ||
|
|
0e41813cfc | ||
|
|
a7e94e31c9 | ||
|
|
2903a97941 | ||
|
|
753e1ceff6 | ||
|
|
06f4d12f10 | ||
|
|
684c2e66fb | ||
|
|
4a311ed69f | ||
|
|
220b5f9772 | ||
|
|
42fd5b0fef | ||
|
|
c28492e51d | ||
|
|
d8ff84672c | ||
|
|
2af967d788 | ||
|
|
8cb23e8200 | ||
|
|
9a058efc79 | ||
|
|
06c8cb51e3 | ||
|
|
01e8ae1b5c | ||
|
|
b052cb001c | ||
|
|
d004eb3048 | ||
|
|
dccd74667e | ||
|
|
6b6470850f | ||
|
|
f09b1aae23 | ||
|
|
68487bc903 | ||
|
|
ebd78e1526 | ||
|
|
6d0dfcfe2e | ||
|
|
5b01d23ed7 | ||
|
|
d9eb01b526 | ||
|
|
9e165ac4a1 | ||
|
|
25ab371a81 | ||
|
|
d62abaed8d | ||
|
|
1fb7a318ed | ||
|
|
e29ae631fc | ||
|
|
3cc0b9294e | ||
|
|
e80f7fa14f | ||
|
|
9261fd7190 | ||
|
|
58c714b350 | ||
|
|
5cd3f5c255 | ||
|
|
0d443d7d00 | ||
|
|
38fecca489 | ||
|
|
f655ea59a8 | ||
|
|
aa7daa5c54 | ||
|
|
f4b2be9334 | ||
|
|
edbd8a811e | ||
|
|
ea9b197d36 | ||
|
|
a0a049a920 | ||
|
|
550fe8e4aa | ||
|
|
2064aea3b6 | ||
|
|
3411bc4577 | ||
|
|
6eedb469e9 | ||
|
|
684373b88b | ||
|
|
08aa03bab6 | ||
|
|
62bc953d53 | ||
|
|
5263f81487 | ||
|
|
8272ebf68f | ||
|
|
90d8e03f2c | ||
|
|
0d34edc7f6 | ||
|
|
63fd61e245 | ||
|
|
58fe8a22a9 | ||
|
|
03dd20c263 | ||
|
|
712a125be7 | ||
|
|
49e14e6e7c | ||
|
|
e8a6e102c3 | ||
|
|
b2cc09852d | ||
|
|
60627b8325 | ||
|
|
8fc2d6b225 | ||
|
|
051cdfa305 | ||
|
|
bfa807ca8b | ||
|
|
598914a67a | ||
|
|
3274649b77 | ||
|
|
5756105347 | ||
|
|
ed583d8bd1 | ||
|
|
731cf10207 | ||
|
|
cb898ce8cf | ||
|
|
892334e31a | ||
|
|
a16e16853f | ||
|
|
5cec83b3ef | ||
|
|
a628784c6d | ||
|
|
fd8b70fb12 | ||
|
|
3dad5a43a1 | ||
|
|
89dea86b3b | ||
|
|
42da24e31d | ||
|
|
5b9b5d4f1f | ||
|
|
5332a26294 | ||
|
|
54d9f8ec5c | ||
|
|
73a17308cc | ||
|
|
b835c48a0c | ||
|
|
40b604c6e4 | ||
|
|
1fd3580f97 | ||
|
|
e28f3b75a4 | ||
|
|
53153ca3e0 | ||
|
|
a496b14a0f | ||
|
|
da6e7240d6 | ||
|
|
89981c6994 | ||
|
|
fe22a43e09 | ||
|
|
3e1a797ea7 | ||
|
|
b23ce7ba18 | ||
|
|
6165f891ca | ||
|
|
7df4b1157c | ||
|
|
64cbd5fc8d | ||
|
|
ba7e789a80 | ||
|
|
d6d70ca076 | ||
|
|
88c37bb7d9 | ||
|
|
59b4f4efce | ||
|
|
ed1f120b0b | ||
|
|
bf461abfec | ||
|
|
d42665db88 | ||
|
|
33c4dc3347 | ||
|
|
6d976fb785 | ||
|
|
39b43cec2d | ||
|
|
691b56b4ac | ||
|
|
bf1f613052 | ||
|
|
721ed9f2a2 | ||
|
|
f760b1ba83 | ||
|
|
1dba144fca | ||
|
|
ebc1b531ff | ||
|
|
5ecf122686 | ||
|
|
56ed18882c | ||
|
|
86c555d053 | ||
|
|
49ec30899e | ||
|
|
d4a2b617bd | ||
|
|
8e7bd4b98a | ||
|
|
ea359285e0 | ||
|
|
d4bfa5d284 | ||
|
|
4433006842 | ||
|
|
646ebcdd00 | ||
|
|
8b53b36b20 | ||
|
|
64db392699 | ||
|
|
bff78704cc | ||
|
|
40651e8dfd | ||
|
|
e5d9d9ec9e | ||
|
|
4e628826c3 | ||
|
|
018bedb2bd | ||
|
|
33e315709a | ||
|
|
8b14a4775b | ||
|
|
fa8fdb0170 | ||
|
|
f856e16917 | ||
|
|
3b5271ab77 | ||
|
|
428fbddbbb | ||
|
|
5774837a6e | ||
|
|
17c2dfcbd0 | ||
|
|
a1711ccfa6 | ||
|
|
261610dcf1 | ||
|
|
92cfdf1145 | ||
|
|
155465b8c6 | ||
|
|
6f49bbdd41 | ||
|
|
3badaa5cba | ||
|
|
a66747a0d0 | ||
|
|
c376759be0 | ||
|
|
1c17f3ee43 | ||
|
|
5f549cc8aa | ||
|
|
f97be02087 | ||
|
|
2d82776e62 | ||
|
|
fdee0ac3e3 | ||
|
|
d775b80a44 | ||
|
|
2047a41498 | ||
|
|
f88890a052 | ||
|
|
5500faa57e | ||
|
|
89004574d3 | ||
|
|
c11c05a399 | ||
|
|
baa3329e7f | ||
|
|
e696d384c2 | ||
|
|
932c281223 | ||
|
|
858fe0384e | ||
|
|
e904cd749f | ||
|
|
6b16f39be4 | ||
|
|
021c7e5fdb | ||
|
|
c161a5c71b | ||
|
|
76ccdbccea | ||
|
|
553ee89787 | ||
|
|
cb6247b16e | ||
|
|
cfac7ff0ba | ||
|
|
49bbe7dc77 | ||
|
|
07b6fa0e2e | ||
|
|
67396f2009 | ||
|
|
a20ff87cc9 | ||
|
|
e02e57a729 | ||
|
|
225dc53795 | ||
|
|
e7404376db | ||
|
|
d6aec341fe | ||
|
|
3a3c2fb204 | ||
|
|
e9b5cdbccf | ||
|
|
3f30e63d95 | ||
|
|
f9c6866c7b | ||
|
|
388dccfd9f | ||
|
|
1676342e28 | ||
|
|
62732de227 | ||
|
|
63e777c84c | ||
|
|
ab95cdf3e5 | ||
|
|
827b5b01dd | ||
|
|
bfa9788099 | ||
|
|
de25ce7fbb | ||
|
|
21e61bfce6 | ||
|
|
82e168c438 | ||
|
|
48583a2b6e | ||
|
|
0db0982fa7 | ||
|
|
6a28ce9e4b | ||
|
|
1db79f6117 | ||
|
|
f234103320 | ||
|
|
45c382a19a | ||
|
|
fb7ef61d06 | ||
|
|
2586645d02 | ||
|
|
e23cb5509d | ||
|
|
5cbd53ae7a | ||
|
|
a4ee590875 | ||
|
|
495608ed7c | ||
|
|
4d10d9a195 | ||
|
|
4914a34dd9 | ||
|
|
ab0fb3131d | ||
|
|
7922d3b3cb | ||
|
|
6427f53b5a | ||
|
|
994df0a3a4 | ||
|
|
e6eee55810 | ||
|
|
855e4c4913 | ||
|
|
c2e07bf7b2 | ||
|
|
77b9e3eac8 | ||
|
|
790487eea6 | ||
|
|
eb83354179 | ||
|
|
9ba8754f97 | ||
|
|
84346119b3 | ||
|
|
2b3abd06db | ||
|
|
8267aad79e | ||
|
|
3f9ce561b9 | ||
|
|
347fc3ed9f | ||
|
|
0488c996e9 | ||
|
|
37bfd97d93 | ||
|
|
c8652b0576 | ||
|
|
1208d2eb5e | ||
|
|
ab34fed0c5 | ||
|
|
0906e5f9cf | ||
|
|
47b1c603b3 | ||
|
|
4bda321e7a | ||
|
|
691ff11fbc | ||
|
|
83650c908d | ||
|
|
afa297bb53 | ||
|
|
00986d0ea8 | ||
|
|
633914316a | ||
|
|
205bb81a0a | ||
|
|
60a69e3a54 | ||
|
|
5c629494da | ||
|
|
95f010395c | ||
|
|
d575d0f724 | ||
|
|
bdbdb46005 | ||
|
|
efc28a3177 | ||
|
|
5d50653495 | ||
|
|
24c55beb9c | ||
|
|
04547ad6af | ||
|
|
d2951d06b2 | ||
|
|
926910bf6e | ||
|
|
6652750044 | ||
|
|
ab3853eb9d | ||
|
|
4f4af83699 | ||
|
|
df3200f936 | ||
|
|
7374a06faa | ||
|
|
22b13f5ba6 | ||
|
|
031301e1bb | ||
|
|
3ad508c6fc | ||
|
|
c3421aef8c | ||
|
|
f2e8d402dd | ||
|
|
ab54acb176 | ||
|
|
7585e191d0 | ||
|
|
a4f6795a44 | ||
|
|
3529bce009 | ||
|
|
bc3afbb271 | ||
|
|
a0d0621725 | ||
|
|
c2d70dbd50 | ||
|
|
e2fdd91956 | ||
|
|
2a84534ced | ||
|
|
94b53592d9 | ||
|
|
09006588fc | ||
|
|
9d5cdaeb33 | ||
|
|
d4df465633 | ||
|
|
da0c1674a6 | ||
|
|
18aa11117a | ||
|
|
ed32439645 | ||
|
|
5c890e710e | ||
|
|
d15b7862b8 | ||
|
|
0e5136196a | ||
|
|
46fdbd5bc0 | ||
|
|
da755ec75b | ||
|
|
d610f787b9 | ||
|
|
1ab1f7ada0 | ||
|
|
56cb1f2747 | ||
|
|
413c6b5116 | ||
|
|
f4753a5bd8 | ||
|
|
980438008c | ||
|
|
8f57dd86af | ||
|
|
a2ce89af32 | ||
|
|
67008288e2 | ||
|
|
4caa0ce570 | ||
|
|
4e2dcef7d7 | ||
|
|
f47a248768 | ||
|
|
862462c5bb | ||
|
|
375471160f | ||
|
|
4000e7c886 | ||
|
|
48095671c3 | ||
|
|
c96b47f345 | ||
|
|
b250172bb5 | ||
|
|
257b248f34 | ||
|
|
a8fe63ee93 | ||
|
|
d359a21a66 | ||
|
|
e5cdf22753 | ||
|
|
c33d53b728 | ||
|
|
e5829a316b | ||
|
|
569bf474bd | ||
|
|
06ecd5d571 | ||
|
|
9ae233a41c | ||
|
|
989f7f7678 | ||
|
|
a75947e611 | ||
|
|
1d4233514f | ||
|
|
fa780e9706 | ||
|
|
cba93e87eb | ||
|
|
f3a2fe5b0d | ||
|
|
ebee8ff0a6 | ||
|
|
34971162cb | ||
|
|
58eec483c9 | ||
|
|
c57f071f0c | ||
|
|
b30e2bcfa4 | ||
|
|
b56c3c5a46 | ||
|
|
120c4202b4 | ||
|
|
1f257290ab | ||
|
|
4d585d17de | ||
|
|
2c7da65242 | ||
|
|
95ff52b025 | ||
|
|
b1e2185966 | ||
|
|
5d77402211 | ||
|
|
f762cc2906 | ||
|
|
7ca2e558c9 | ||
|
|
e388d0c5e8 | ||
|
|
05f8d9302d | ||
|
|
8f277f00a4 | ||
|
|
59f9da59e2 | ||
|
|
8d4415fe15 | ||
|
|
fd54b2b803 | ||
|
|
ba6953fda4 | ||
|
|
c0f667ce20 | ||
|
|
c93c15563a | ||
|
|
d0340c13dc | ||
|
|
c6caa1d067 | ||
|
|
2f0efa1197 | ||
|
|
a76eae2c11 | ||
|
|
b82c1f051c | ||
|
|
1b6a150624 | ||
|
|
265360229f | ||
|
|
98e9729267 | ||
|
|
cfe16ee2c5 | ||
|
|
c9f856b219 | ||
|
|
3c167c3306 | ||
|
|
fedbce6f9e | ||
|
|
28be4cea97 | ||
|
|
05fb2bfd23 | ||
|
|
3905335c53 | ||
|
|
4dc3f9e033 | ||
|
|
07a6a9b7d4 | ||
|
|
fac7dff77f | ||
|
|
60c7ced335 | ||
|
|
8f981e7707 | ||
|
|
725cc10a92 | ||
|
|
d3896ccfda | ||
|
|
de3e532a5c | ||
|
|
98369600c3 | ||
|
|
d9aaef29d2 | ||
|
|
48f4410a2a | ||
|
|
ca0b232ada | ||
|
|
75efe39298 | ||
|
|
84342f7a7b | ||
|
|
67efea6444 | ||
|
|
f08b182bf2 | ||
|
|
3c83a62aef | ||
|
|
821db4d2a1 | ||
|
|
3c661842a2 | ||
|
|
920578003e | ||
|
|
22aadcc1ae | ||
|
|
efc65479c6 | ||
|
|
dcbba9cbfc | ||
|
|
6169078c04 | ||
|
|
955f48f532 | ||
|
|
d7a830ca95 | ||
|
|
96b27645d6 | ||
|
|
8b6346ae41 | ||
|
|
c1619820c7 | ||
|
|
88ccb0e075 | ||
|
|
12564dd78f | ||
|
|
b0c4db7a64 | ||
|
|
310ca6c6dc | ||
|
|
32e3a4e74f | ||
|
|
be66e3fe79 | ||
|
|
d794734f1d | ||
|
|
8661b6551d | ||
|
|
a0326c4371 | ||
|
|
b039bc14c6 | ||
|
|
d08853df8c | ||
|
|
d8dd287cdf | ||
|
|
d62b64c27a | ||
|
|
52952652de | ||
|
|
790c19a1cd | ||
|
|
9659381378 | ||
|
|
4598fc098d | ||
|
|
2f6fde1e61 | ||
|
|
16dc199431 | ||
|
|
715e970d99 | ||
|
|
53535ab9be | ||
|
|
24f9df90b8 | ||
|
|
4cfdbb8095 | ||
|
|
fe4cb8575f | ||
|
|
06ac7eb85f | ||
|
|
0e14ff5a3d | ||
|
|
c65015fcc7 | ||
|
|
c8caf6124e | ||
|
|
76bb0e420d | ||
|
|
d2c1b2a31b | ||
|
|
e30f073809 | ||
|
|
e1079d751a | ||
|
|
a9d45d837f | ||
|
|
bcbe5eb105 | ||
|
|
6ab1f8e4e2 | ||
|
|
90f26d53d3 | ||
|
|
281921d1de | ||
|
|
9135153dc9 | ||
|
|
c70b505b3a | ||
|
|
cde9dc37e5 | ||
|
|
ab1e5eb359 | ||
|
|
aec9f7a145 | ||
|
|
bf08ed563a | ||
|
|
ff70518882 | ||
|
|
72364db768 | ||
|
|
92fa72eac7 | ||
|
|
9e2c1de0f5 | ||
|
|
57ac73b9d4 | ||
|
|
2757c577e4 | ||
|
|
704af30421 | ||
|
|
1e8a005d0e | ||
|
|
8a04d2f477 | ||
|
|
a7c37bfb93 | ||
|
|
d1801ea438 | ||
|
|
f6f856cd56 | ||
|
|
8515cd43fa | ||
|
|
8a4cdbb371 | ||
|
|
7fef133505 | ||
|
|
5f206a33e2 | ||
|
|
228385ceaa | ||
|
|
bd9e9a7dcf | ||
|
|
abffb8c138 | ||
|
|
e353802e9f | ||
|
|
130055af22 | ||
|
|
db573840b0 | ||
|
|
e0fccacc32 | ||
|
|
18890f47b6 | ||
|
|
204cc1ccb3 | ||
|
|
a063eb96c6 | ||
|
|
145c8ff804 | ||
|
|
f0d2f94aef | ||
|
|
0c12cb683a | ||
|
|
56b5d026df | ||
|
|
40ccbd0d86 | ||
|
|
c1a14cb4d4 | ||
|
|
df2448e121 | ||
|
|
ca323c392b | ||
|
|
395dd37d33 | ||
|
|
e91689a715 | ||
|
|
861988f8dc | ||
|
|
f26f1298cf | ||
|
|
66efcf91d3 | ||
|
|
0178ba014a | ||
|
|
254bd88e6b | ||
|
|
3808b78487 | ||
|
|
a80c35aa94 | ||
|
|
d0f51d0462 | ||
|
|
013fa85c1c | ||
|
|
fcda856198 | ||
|
|
e385487a6b | ||
|
|
f8fa029ee3 | ||
|
|
d1a0f8ec97 | ||
|
|
d02e147dc3 | ||
|
|
5c481d4247 | ||
|
|
f4cbdde8f6 | ||
|
|
0ac09fc57b | ||
|
|
99c28c93b4 | ||
|
|
0e800723f5 | ||
|
|
fc2ed47676 | ||
|
|
5c2309bcf7 | ||
|
|
ba71a300ec | ||
|
|
393451eed5 | ||
|
|
b0b20bcb9b | ||
|
|
8e8c553da4 | ||
|
|
c83173098c | ||
|
|
16c52f4008 | ||
|
|
d207d98a82 | ||
|
|
5a1f3d40a7 | ||
|
|
a667a1b6a9 | ||
|
|
cfe3c5b6df | ||
|
|
b49e2eeac4 | ||
|
|
d012ad08f8 | ||
|
|
b83f3d6cbf | ||
|
|
a8be74ebb7 | ||
|
|
b5bf9f1486 | ||
|
|
b3d07b4573 | ||
|
|
b602fcc485 | ||
|
|
0908d040fa | ||
|
|
530bd6dac4 | ||
|
|
441dcea705 | ||
|
|
c5e0951def | ||
|
|
4bea8f4c65 | ||
|
|
7f5ae41d8a | ||
|
|
35a357f1a8 | ||
|
|
8b384ef1f9 | ||
|
|
7588a84e86 | ||
|
|
d8f8e61a11 | ||
|
|
3c9aa97f6c | ||
|
|
6c28adbd24 | ||
|
|
cf5b9da45e | ||
|
|
01f24d2f2f | ||
|
|
592eea1bfd | ||
|
|
16a4a67886 | ||
|
|
dd3b6a47d2 | ||
|
|
fa8102f93d | ||
|
|
ef3678bfaf | ||
|
|
599b339e5d | ||
|
|
682aae1497 | ||
|
|
4ade751caf | ||
|
|
9f24b35b1f | ||
|
|
769087d139 | ||
|
|
3b1f32d68d | ||
|
|
4fc1f0491e | ||
|
|
89b94ebbf9 | ||
|
|
5666baf2bc | ||
|
|
9d05f487e6 | ||
|
|
8b72ea81c0 | ||
|
|
23085372a1 | ||
|
|
1761033cee | ||
|
|
48af5eb10a | ||
|
|
d2233af8a0 | ||
|
|
a411d489c1 | ||
|
|
3b48f537f1 | ||
|
|
7755e95db0 | ||
|
|
ac66f80a0d | ||
|
|
13111e2940 | ||
|
|
d0af46b175 | ||
|
|
18e6a5d6d2 | ||
|
|
1f1d127822 | ||
|
|
8a0639ced2 | ||
|
|
762eacb7c8 | ||
|
|
0ebe4150ae | ||
|
|
e8f799d010 | ||
|
|
926cddd69f | ||
|
|
ec2a01dfae | ||
|
|
f921742dcc | ||
|
|
ce0c97e6d5 | ||
|
|
1c54e7e38b | ||
|
|
9928439f4f | ||
|
|
3ed7834945 | ||
|
|
5853cb5ad5 | ||
|
|
1b476e235b | ||
|
|
ef8f5c67bd | ||
|
|
0664937c1e | ||
|
|
aada2c1fe6 | ||
|
|
870bce2bf8 | ||
|
|
908d879a1e | ||
|
|
5147d8ab63 | ||
|
|
8a1531fc71 | ||
|
|
09918041f8 | ||
|
|
165d00dad3 | ||
|
|
fa99069951 | ||
|
|
babd9584a6 | ||
|
|
20df023137 | ||
|
|
fbde2942de | ||
|
|
d920718b44 | ||
|
|
4ca429e389 | ||
|
|
49c56e28b4 | ||
|
|
3ec4f086ec | ||
|
|
3cb5dd226c | ||
|
|
6a1aa2c13e | ||
|
|
4b73e1a184 | ||
|
|
5fa9aaa6a6 | ||
|
|
63711f652f | ||
|
|
d07b4417d7 | ||
|
|
95ae5a26ed | ||
|
|
d8ad23630a | ||
|
|
c03d9301e2 | ||
|
|
6ec6851a8a | ||
|
|
a7d3a916cc | ||
|
|
e1d1c4acca | ||
|
|
bd17e0edc1 | ||
|
|
6e88d08c17 | ||
|
|
278babe7f2 | ||
|
|
b23f33ab6c | ||
|
|
50b25882cd | ||
|
|
28bfceab6c | ||
|
|
6febe9982b | ||
|
|
b5a3a8b4c2 | ||
|
|
25c8f4b588 | ||
|
|
09b2e20a3d | ||
|
|
e9d95c78f6 | ||
|
|
ad2a36676c | ||
|
|
43da36a957 | ||
|
|
71e9f7b239 | ||
|
|
b566d31f28 | ||
|
|
c4d167f8d4 | ||
|
|
50f1fe2b2d | ||
|
|
75e73ddcd9 | ||
|
|
3616c3ad7b | ||
|
|
23d673f920 | ||
|
|
8c9f3fa569 | ||
|
|
80003a4843 | ||
|
|
12785c00bd | ||
|
|
8f94b46149 | ||
|
|
73a59fe5c1 | ||
|
|
5028b354cc | ||
|
|
3e98d0a0f8 | ||
|
|
902c8dcd8d | ||
|
|
66e407549e | ||
|
|
0870ab4d3c | ||
|
|
6be0eeff72 | ||
|
|
9246d040ad | ||
|
|
549866bfd9 | ||
|
|
d81f0668a1 | ||
|
|
6b4fef806c | ||
|
|
4e5b2675a0 | ||
|
|
f3d9f224b7 | ||
|
|
ae8a12fa27 | ||
|
|
de7d549fc6 | ||
|
|
d925c8216d | ||
|
|
e6f46747b6 | ||
|
|
c30830a8ff | ||
|
|
45b08b6010 | ||
|
|
c88fc43032 | ||
|
|
08a08c2b3a | ||
|
|
411e971ba7 | ||
|
|
dbc5819bc4 | ||
|
|
93a71120d4 | ||
|
|
d683c04519 | ||
|
|
a403980976 | ||
|
|
5c3dfa08b2 | ||
|
|
fd2d50508b | ||
|
|
14ee688629 | ||
|
|
9e4557d90d | ||
|
|
d9810982ad | ||
|
|
282d950423 | ||
|
|
cd5b16cce5 | ||
|
|
cc1ac95af6 | ||
|
|
b14fa24836 | ||
|
|
59c6d3090b | ||
|
|
1e809214b2 | ||
|
|
56ec07e316 | ||
|
|
ce66f3a98a | ||
|
|
5d180bdbfb | ||
|
|
d922dbe04c | ||
|
|
1fc6ec28c2 | ||
|
|
ec6ff1d7d5 | ||
|
|
ad87f005fe | ||
|
|
df1e97af0a | ||
|
|
82ceb2e11f | ||
|
|
9698232f69 | ||
|
|
b1867aac92 | ||
|
|
09bc5b92f6 | ||
|
|
725462b222 | ||
|
|
a9faba5cec | ||
|
|
5a318da8ca | ||
|
|
5bc8366749 | ||
|
|
6200036014 | ||
|
|
38b891bd62 | ||
|
|
a22c606e42 | ||
|
|
dc0473e48d | ||
|
|
71f5373ea8 | ||
|
|
bd4ce72800 | ||
|
|
d39d33de32 | ||
|
|
7c07f70afd | ||
|
|
de67d5942b | ||
|
|
f358069cc1 | ||
|
|
cf87294a8c | ||
|
|
40b48f6460 | ||
|
|
31322bcc76 | ||
|
|
abe13d9ff9 | ||
|
|
064b21a264 | ||
|
|
5be6297bac | ||
|
|
dda32ef0f9 | ||
|
|
9cff9043ee | ||
|
|
d429424f67 | ||
|
|
750f91dbbc | ||
|
|
c0ee243d64 | ||
|
|
e05825b9f4 | ||
|
|
018c61890c | ||
|
|
263c5f6830 | ||
|
|
a27b10f69a | ||
|
|
3cf7622707 | ||
|
|
327195573e | ||
|
|
baebfe96ba | ||
|
|
5b06702dee | ||
|
|
95465e2fc3 | ||
|
|
388f5354a1 | ||
|
|
c3cd4edbf9 | ||
|
|
b9c36cfd2f | ||
|
|
b3deeb29b3 | ||
|
|
136cabedb4 | ||
|
|
9fc9eb1425 | ||
|
|
71a39ff2fd | ||
|
|
3d01b78ba0 | ||
|
|
452e7d7c5f | ||
|
|
1a8e09d549 | ||
|
|
ea072296cf | ||
|
|
56d1e2670e | ||
|
|
bc953592f0 | ||
|
|
b2f188fa4b | ||
|
|
7575f85bdf | ||
|
|
685a2e3cf2 | ||
|
|
2db85ced59 | ||
|
|
693a0f2516 | ||
|
|
b81328ac1a | ||
|
|
2440acda07 | ||
|
|
29354f0bcb | ||
|
|
a9eb7b2d25 | ||
|
|
05a06fe7a3 | ||
|
|
f73866b86e | ||
|
|
1e18abc598 | ||
|
|
a2c4aefced | ||
|
|
bb6ea5f1e5 | ||
|
|
0e855e10db | ||
|
|
1594c712a8 | ||
|
|
7b6d5d2686 | ||
|
|
44f12587f3 | ||
|
|
fd8bdbdc90 | ||
|
|
9557041c3a | ||
|
|
1804caba02 | ||
|
|
c1f0d60f49 | ||
|
|
83d92dde35 | ||
|
|
ac98e4e0b5 | ||
|
|
5c99974202 | ||
|
|
280dea23d0 | ||
|
|
6fcc3e8cb3 | ||
|
|
ec9461741c | ||
|
|
896e05331c | ||
|
|
4c930b190e | ||
|
|
6ab3353a15 | ||
|
|
a31760eecb | ||
|
|
4c89a79dc3 | ||
|
|
2c3d8d4c0b | ||
|
|
e71e026da0 | ||
|
|
f239b0c6d7 | ||
|
|
8a7f232198 | ||
|
|
a3c71b3955 | ||
|
|
46b13b6606 | ||
|
|
a40c420b70 | ||
|
|
8470334d6d | ||
|
|
f42ae97f14 | ||
|
|
c7b2f26bd5 | ||
|
|
ec424ac16e | ||
|
|
72501edc9a | ||
|
|
9554889964 | ||
|
|
7ff1e72093 | ||
|
|
3d3674d405 | ||
|
|
d08152a824 | ||
|
|
12087b51cb | ||
|
|
66ec1de625 | ||
|
|
7f09d61eb8 | ||
|
|
f5c24cee67 | ||
|
|
2abedbe4ad | ||
|
|
80eb72c5f9 | ||
|
|
88da6c10e0 | ||
|
|
49771766e7 | ||
|
|
9b20092428 | ||
|
|
e3551b3045 | ||
|
|
68d7e99a80 | ||
|
|
a8d61ed534 | ||
|
|
a67788ac52 | ||
|
|
bc644e324a | ||
|
|
8782be593d | ||
|
|
2998cc0fd7 | ||
|
|
e85216d9a6 | ||
|
|
e22923a980 | ||
|
|
be6a90675b | ||
|
|
94527345b9 | ||
|
|
c1545b57c9 | ||
|
|
8f3d07ea69 | ||
|
|
68804a357d | ||
|
|
78a449d6d3 | ||
|
|
366c631e26 | ||
|
|
da8be3ec3c | ||
|
|
820b833bbc | ||
|
|
574c039cc8 | ||
|
|
e0180b718f | ||
|
|
ca82fafac5 | ||
|
|
a9ce71c481 | ||
|
|
2e200a2ab8 | ||
|
|
0e720a1e02 | ||
|
|
601b13cf42 | ||
|
|
f6860015eb | ||
|
|
99a9752ee9 | ||
|
|
518ada6dae | ||
|
|
3c1c9c13d8 | ||
|
|
baa4e82b92 | ||
|
|
116f5a57eb | ||
|
|
4c8c383378 | ||
|
|
e5e867db22 | ||
|
|
2b72d08e39 | ||
|
|
32adb99f3d | ||
|
|
799175c94e | ||
|
|
e79116499e | ||
|
|
e1a91d179a | ||
|
|
e0910cd2f4 | ||
|
|
295c751b60 | ||
|
|
851f7b4b8c | ||
|
|
9b3a157b41 | ||
|
|
8f2638be30 | ||
|
|
0634b41092 | ||
|
|
2ce5acb8d3 | ||
|
|
48980a1e0c | ||
|
|
b68d0704e7 | ||
|
|
af7eaae399 | ||
|
|
a3eb057215 | ||
|
|
59695dcad6 | ||
|
|
aa6e461340 | ||
|
|
737d71ee13 | ||
|
|
2b7fe26bf1 | ||
|
|
8593bf5f55 | ||
|
|
7bfc3f44c9 | ||
|
|
b9f79833b6 | ||
|
|
9bed8f792a | ||
|
|
e18d583a00 | ||
|
|
244f7b55ee | ||
|
|
ee6d72562b | ||
|
|
90c2667028 | ||
|
|
9c6926a1fb | ||
|
|
22c9d77909 | ||
|
|
55b3b3a188 | ||
|
|
c93e5ba183 | ||
|
|
5df8ec78aa | ||
|
|
cc6590d780 | ||
|
|
9ce18d1a42 | ||
|
|
9ff8d42143 | ||
|
|
1ff838daa7 | ||
|
|
17ab429a8c | ||
|
|
5df50ef380 | ||
|
|
8da007af6c | ||
|
|
f053b94f68 | ||
|
|
d02ea09529 | ||
|
|
79333593bf | ||
|
|
c635bca43d | ||
|
|
de62a4c71e | ||
|
|
24732b304b | ||
|
|
5744ad588f | ||
|
|
5ea021d57a | ||
|
|
38c5868029 | ||
|
|
4725bf7271 | ||
|
|
de9efe6c4d | ||
|
|
88ce3a2490 | ||
|
|
2c47e1a135 | ||
|
|
7454221b3b | ||
|
|
fcc4709ed9 | ||
|
|
aeb77559a7 | ||
|
|
9acaf33410 | ||
|
|
e13b679650 | ||
|
|
4146047cdb | ||
|
|
18e02fbf5c | ||
|
|
b94519362c | ||
|
|
1e59a82c59 | ||
|
|
d570ab04b8 | ||
|
|
830be0b0d3 | ||
|
|
1570f379df | ||
|
|
e7714df79f | ||
|
|
bdc108d021 | ||
|
|
a89fb542b0 | ||
|
|
26de4c11e1 | ||
|
|
01d0f03fdd | ||
|
|
58d0d09eae | ||
|
|
e7a2729d36 | ||
|
|
5782236379 | ||
|
|
88de5f6be4 | ||
|
|
4520637aed | ||
|
|
aa8235c279 | ||
|
|
2432462ff3 | ||
|
|
8c59684c14 | ||
|
|
82c318f91d | ||
|
|
3c16adf169 | ||
|
|
2ab54baa2c | ||
|
|
da2aa85a8a | ||
|
|
e58ce527c6 | ||
|
|
d1840a2184 | ||
|
|
fa62a675dc | ||
|
|
1aa52c634f | ||
|
|
cfc364e4f1 | ||
|
|
f2b6af8bdc | ||
|
|
c71411a527 | ||
|
|
42256a5c2f | ||
|
|
f589d898ac | ||
|
|
af70234519 | ||
|
|
df58afe1a1 | ||
|
|
6c8d87520c | ||
|
|
9d0ea9f6c0 | ||
|
|
053f7655c3 | ||
|
|
288f8ee42f | ||
|
|
2a8dd0873b | ||
|
|
bd8b3f8a29 | ||
|
|
57c89b4481 | ||
|
|
a4ced46628 | ||
|
|
0d2ea2f8c0 | ||
|
|
4245cd2ad9 | ||
|
|
6f42c4b3b3 | ||
|
|
4c20ceb94e | ||
|
|
df3b85765d | ||
|
|
2b352c6d7a | ||
|
|
92832d7e14 | ||
|
|
10957dbbb9 | ||
|
|
88eecf6624 | ||
|
|
755a53f821 | ||
|
|
ea4d71b26c | ||
|
|
a4c0d38c53 | ||
|
|
58228e0af4 | ||
|
|
1d69d8fb6a | ||
|
|
3445d09390 | ||
|
|
78b3d3d001 | ||
|
|
d8f0120698 | ||
|
|
3e25bceb0c | ||
|
|
1ca40481bb | ||
|
|
fe1309fb3d | ||
|
|
12d59ce3e4 | ||
|
|
224fa83c65 | ||
|
|
f591ac8780 | ||
|
|
11e70511e6 | ||
|
|
c1e4121d1e | ||
|
|
03884ddd05 | ||
|
|
ac67e985af | ||
|
|
9d12cd64d3 | ||
|
|
702b5f2888 | ||
|
|
a5eef3f34d | ||
|
|
1bc9277e3c | ||
|
|
b33cb07dc0 | ||
|
|
ce74915c14 | ||
|
|
f341413248 | ||
|
|
ed3e2f65f8 | ||
|
|
6e5878b5d6 | ||
|
|
39242097dd | ||
|
|
0aec3fffe1 | ||
|
|
38ef00548a | ||
|
|
c78c8072e9 | ||
|
|
7c98411abe | ||
|
|
e22516662f | ||
|
|
24c1f48522 | ||
|
|
69b07d40e4 | ||
|
|
b96692b1ba | ||
|
|
53afb7cba0 | ||
|
|
8e0953af1e | ||
|
|
724f9aa524 | ||
|
|
7067ffafe7 | ||
|
|
145c88db31 | ||
|
|
56615d6c06 | ||
|
|
d26bcc1abe | ||
|
|
04f817c042 | ||
|
|
b58f97c1f1 | ||
|
|
96dc386694 | ||
|
|
c6c70daa5e | ||
|
|
de16375903 | ||
|
|
c6548d5ad1 | ||
|
|
bd8c4e807c | ||
|
|
553549302c | ||
|
|
c69a7012c5 | ||
|
|
7acc5fc02e | ||
|
|
39bc165f36 | ||
|
|
707a92281b | ||
|
|
823013a3d9 | ||
|
|
7089561b21 | ||
|
|
0f0bff1685 | ||
|
|
b6387c3f64 | ||
|
|
ff0bcfb7da | ||
|
|
f729d36214 | ||
|
|
d5a07b6a5b | ||
|
|
bda0b3ce18 | ||
|
|
14d95a7e46 | ||
|
|
2ef2cdd874 | ||
|
|
57c2d84122 | ||
|
|
d263962a06 | ||
|
|
e32c5784af | ||
|
|
1496a6e755 | ||
|
|
6dab1063a1 | ||
|
|
ff286f3e05 | ||
|
|
6f112c2d16 | ||
|
|
8f222dab99 | ||
|
|
828951ffe9 | ||
|
|
616f34e210 | ||
|
|
fa3ed7e618 | ||
|
|
a207969dec | ||
|
|
7fde40b04e | ||
|
|
1bce588cdd | ||
|
|
5a095cc993 | ||
|
|
431eab47a2 | ||
|
|
e9e3d25315 | ||
|
|
e2735e283e | ||
|
|
3e9cb57dd6 | ||
|
|
5c4cf7379f | ||
|
|
8cd961596e | ||
|
|
d2344418d6 | ||
|
|
33aa2248d2 | ||
|
|
feb5b209ed | ||
|
|
34722404f4 | ||
|
|
b78a234fe1 | ||
|
|
f19478374f | ||
|
|
51a01c860b | ||
|
|
eedd044716 | ||
|
|
0a327f4ad3 | ||
|
|
eec6a5da0a | ||
|
|
fc87bc0cf1 | ||
|
|
1f213408a1 | ||
|
|
bac6fd803f | ||
|
|
5a74d7e3e2 | ||
|
|
e289380c39 | ||
|
|
8081dff6b6 | ||
|
|
7dcf09118b | ||
|
|
4b9a3d121d | ||
|
|
cd24cba240 | ||
|
|
d33fad9d23 | ||
|
|
b02aa51e09 | ||
|
|
36eeee5f9c | ||
|
|
4883ed0e5a | ||
|
|
78ad0d2592 | ||
|
|
f6def74b29 | ||
|
|
be44676b01 | ||
|
|
60c1c22a73 | ||
|
|
02cadc264e | ||
|
|
a0ca5b8072 | ||
|
|
31fdb73b0e | ||
|
|
d2caa1859d | ||
|
|
f6c25b30ae | ||
|
|
379d826f18 | ||
|
|
96afccc46c | ||
|
|
c0a222644b | ||
|
|
653173945f | ||
|
|
7d09cc6d25 | ||
|
|
a4360dfe76 | ||
|
|
9887117e7a | ||
|
|
9be7eafa39 | ||
|
|
774eb18a42 | ||
|
|
4e582d02f5 | ||
|
|
38d11dacb7 | ||
|
|
e17490ee04 | ||
|
|
f3a9ca6d6f | ||
|
|
2653740a36 | ||
|
|
335042ec08 | ||
|
|
f6944b15f3 | ||
|
|
d7960dccb4 | ||
|
|
c974c4257d | ||
|
|
40d74dd633 | ||
|
|
602c85b57d | ||
|
|
f96fa596b3 | ||
|
|
8c13d0096e | ||
|
|
7879f8b6a4 | ||
|
|
4c0e8bc1d6 | ||
|
|
6644df3958 | ||
|
|
2b5551d719 | ||
|
|
137063dd21 | ||
|
|
ca403869ab | ||
|
|
daf676b277 | ||
|
|
66bbdbe6ec | ||
|
|
d3c2516f5f | ||
|
|
c39ae84922 | ||
|
|
a83843fdab | ||
|
|
2d48da1c4a | ||
|
|
af0c15f69d | ||
|
|
7898df9c2c | ||
|
|
48abdeaf6b | ||
|
|
99a4979b65 | ||
|
|
d8beff4f6b | ||
|
|
ccaf1e33c0 | ||
|
|
3f119b957e | ||
|
|
abf97212fe | ||
|
|
b81c3d2f75 | ||
|
|
5651c4d95c | ||
|
|
c83a5cc1b7 | ||
|
|
0499807597 | ||
|
|
f846afd8a9 | ||
|
|
b822c82d18 | ||
|
|
e4de551008 | ||
|
|
5333d0180f | ||
|
|
658d4c4d72 | ||
|
|
efa50a8c39 | ||
|
|
677dc6192d | ||
|
|
1ed56c1b1d | ||
|
|
983be04722 | ||
|
|
1bd9c918f6 | ||
|
|
0ba16485bb | ||
|
|
1d9934830b | ||
|
|
806d6148eb | ||
|
|
e484587778 | ||
|
|
1e4b5104b7 | ||
|
|
676d2e2ef5 | ||
|
|
6122d44bd9 | ||
|
|
eb9f0cdf0c | ||
|
|
01f4595aab | ||
|
|
bf10d333cd | ||
|
|
267ef37cb6 | ||
|
|
879e4c9d58 | ||
|
|
67340e1526 | ||
|
|
6ec8f9efe5 | ||
|
|
c2b0560d91 | ||
|
|
388071557e | ||
|
|
f6e3ede178 | ||
|
|
a907550567 | ||
|
|
c75a15dc3b | ||
|
|
83904aa1f1 | ||
|
|
7d527fd2a6 | ||
|
|
007e04bf37 | ||
|
|
caff49504e | ||
|
|
aad38beaf5 | ||
|
|
bdad733331 | ||
|
|
bc26ade57e | ||
|
|
ee52ff3b11 | ||
|
|
40b95f02e4 | ||
|
|
8777a85630 | ||
|
|
870aeb34fc | ||
|
|
b03be212b3 | ||
|
|
c8f7dbf85e | ||
|
|
9e826b4c8b | ||
|
|
05d528b39a | ||
|
|
6828c7c077 | ||
|
|
54f3bc0262 | ||
|
|
e232a2b33d | ||
|
|
73a3b217a4 | ||
|
|
19f925c60b | ||
|
|
5fb488236b | ||
|
|
c84786f9ee | ||
|
|
c1925ddf8d | ||
|
|
cf194e332c | ||
|
|
d8877e7d8b | ||
|
|
8b2184f8e3 | ||
|
|
a42e4c5299 | ||
|
|
419787e17c | ||
|
|
2d6da52a86 | ||
|
|
b46deb3fa0 | ||
|
|
b70120a248 | ||
|
|
3a6a4011d0 | ||
|
|
999c4d07b7 | ||
|
|
44b182c6ae | ||
|
|
de7bec547a | ||
|
|
5542c0bc00 | ||
|
|
83e0ce0042 | ||
|
|
4685dea075 | ||
|
|
599f63bc67 | ||
|
|
199f2aea77 | ||
|
|
bff9b8b4b1 | ||
|
|
a83610bc06 | ||
|
|
b3d208e6e6 | ||
|
|
e8b391c0f6 | ||
|
|
02b5df03ab | ||
|
|
e1580e51cf | ||
|
|
3a7578879f | ||
|
|
ea3d4b41a9 | ||
|
|
e0c2a39ce7 | ||
|
|
1fa27b7f09 | ||
|
|
f980f1dae2 | ||
|
|
b81ad53449 | ||
|
|
a9727171e2 | ||
|
|
a1634fb337 | ||
|
|
94a2f9460e | ||
|
|
18cd39270a | ||
|
|
72c2bca363 | ||
|
|
4c153dc76d | ||
|
|
e63606f6bb | ||
|
|
ed6da7fe14 | ||
|
|
a588c96440 | ||
|
|
4c284b224e | ||
|
|
96afa650d1 | ||
|
|
f17d0d3ae1 | ||
|
|
930d2b4280 | ||
|
|
f67b78bd91 | ||
|
|
540e8ed602 | ||
|
|
99cb51e813 | ||
|
|
db000c4b12 | ||
|
|
0cd557a686 | ||
|
|
6142bf859b | ||
|
|
b6498b5c2d | ||
|
|
c15030e96e | ||
|
|
cd2acd73b4 | ||
|
|
cfe06ea1b6 | ||
|
|
ca5c3e0e94 | ||
|
|
6252fd399a | ||
|
|
de571e2c2a | ||
|
|
0cbd052b91 | ||
|
|
aa3ec3ece8 | ||
|
|
6b11028b72 | ||
|
|
269c3e7398 | ||
|
|
08335041f5 | ||
|
|
d75b9cf942 | ||
|
|
b55c40523f | ||
|
|
99a2dee7a2 | ||
|
|
c94265c77b | ||
|
|
7ddfba1b4c | ||
|
|
9ecdd28eea | ||
|
|
d8b36242f6 | ||
|
|
3f470aabe9 | ||
|
|
1e8dd54b3e | ||
|
|
0a6681ccb7 | ||
|
|
0140e24822 | ||
|
|
9fb38922ea | ||
|
|
7752354598 | ||
|
|
497670c4c3 | ||
|
|
84954cd2f1 | ||
|
|
8b6eab401e | ||
|
|
71c11a5923 | ||
|
|
f345edb252 | ||
|
|
be40fd9563 | ||
|
|
5ee2ebfb4f | ||
|
|
cfa6b706a8 | ||
|
|
42f2a62d62 | ||
|
|
41b6ef930a | ||
|
|
948cbe0a9c | ||
|
|
18669f3230 | ||
|
|
4e9f944204 | ||
|
|
fe18cbaa41 | ||
|
|
ed3712e1b9 | ||
|
|
20dc4f31f0 | ||
|
|
19f9296a40 | ||
|
|
06c019387c | ||
|
|
645b43e9cc | ||
|
|
ed37a3711f | ||
|
|
a3460de9dc | ||
|
|
5084009d62 | ||
|
|
e5c003d726 | ||
|
|
327a02b87d | ||
|
|
e9bf1a9f7a | ||
|
|
0c6fa768ea | ||
|
|
483468a6c7 | ||
|
|
8039ae1b90 | ||
|
|
466b372d41 | ||
|
|
3f6b5203ca | ||
|
|
8d1352ddff | ||
|
|
e6ab2c3b7e | ||
|
|
e603c75bd3 | ||
|
|
4f28f97141 | ||
|
|
d0b32e5224 | ||
|
|
2062a23347 | ||
|
|
8c9236a066 | ||
|
|
2f981ef91e | ||
|
|
6725c170ea | ||
|
|
c8cf6e7c08 | ||
|
|
e0b4acee12 | ||
|
|
803ebe34ed | ||
|
|
e981eff1e6 | ||
|
|
aee7a09b6c | ||
|
|
e74e4e92a0 | ||
|
|
6dba15defd | ||
|
|
fee7a16692 | ||
|
|
141030344b | ||
|
|
4fa9586206 | ||
|
|
fbbc430b7c | ||
|
|
bfc68c4d28 | ||
|
|
53fc018ada | ||
|
|
d45dd45720 | ||
|
|
19a9786bbf | ||
|
|
b8caf41423 | ||
|
|
0b3866a56a | ||
|
|
53a7577416 | ||
|
|
f5515417d6 | ||
|
|
24e7c2f3db | ||
|
|
6e6c5bbc67 | ||
|
|
f4403ff480 | ||
|
|
098da20761 | ||
|
|
ef2373e8c0 | ||
|
|
b2c8ed17d5 | ||
|
|
bb594a459f | ||
|
|
7340a30650 | ||
|
|
403104dda1 | ||
|
|
8334fbb236 | ||
|
|
0a0323ce5d | ||
|
|
726d36ba3d | ||
|
|
8bb1521963 | ||
|
|
9457c1f2b9 | ||
|
|
2b24330f9f | ||
|
|
9329170e59 | ||
|
|
98f3de828a | ||
|
|
3f38f42259 | ||
|
|
058a8cdc15 | ||
|
|
d0c1213ea0 | ||
|
|
30967bac6d | ||
|
|
09c9bcb046 | ||
|
|
93f1f5d076 | ||
|
|
93e5d62782 | ||
|
|
4d7021ece1 | ||
|
|
f976988c75 | ||
|
|
1eee31fdbb | ||
|
|
048c483903 | ||
|
|
b646ece14b | ||
|
|
35e8acd69d | ||
|
|
de4135d1ad | ||
|
|
a44959ce1b | ||
|
|
f4bad0053a | ||
|
|
26af5987a5 | ||
|
|
9cf3250751 | ||
|
|
acc77205bb | ||
|
|
a6b4f62d75 | ||
|
|
69c5d553b5 | ||
|
|
637cdd7084 | ||
|
|
8978e193db | ||
|
|
242b100aa3 | ||
|
|
3a888d48df | ||
|
|
721de39dbb | ||
|
|
07e29f2030 | ||
|
|
c117d9b3e5 | ||
|
|
16eae89151 | ||
|
|
95cb6d8ee6 | ||
|
|
af27c09204 | ||
|
|
5e3532267c | ||
|
|
7c0331df65 | ||
|
|
04ab87cd8e | ||
|
|
91f5e84250 | ||
|
|
b1edd95ebc | ||
|
|
758738da5c | ||
|
|
41c8be275b | ||
|
|
117eb1e2a7 | ||
|
|
3129d6e8fd | ||
|
|
2ba7db184b | ||
|
|
2cb0df4080 | ||
|
|
3adc2c44e6 | ||
|
|
6d3ff64894 | ||
|
|
cf84ad6196 | ||
|
|
6259190ad9 | ||
|
|
181be1a58e | ||
|
|
771e191f28 | ||
|
|
d4d6893eb3 | ||
|
|
9e75562662 | ||
|
|
2b3168163b | ||
|
|
252c06eb12 | ||
|
|
2a51d8169a | ||
|
|
7405c4b411 | ||
|
|
309ae7b619 | ||
|
|
64ef56a0df | ||
|
|
fbfe7b0d25 | ||
|
|
8c7e1a3b2d | ||
|
|
bf249cdafe | ||
|
|
59ba6f50cc | ||
|
|
8d6e7c7d44 | ||
|
|
52934ae166 | ||
|
|
56c4f2aa47 | ||
|
|
a1d8cbd7ba | ||
|
|
63a219a32b | ||
|
|
14fb256a6a | ||
|
|
95df7a23c3 | ||
|
|
bb17690cf5 | ||
|
|
a943b02e43 | ||
|
|
199f78347f | ||
|
|
d3d9a42d57 | ||
|
|
1fa45a8c84 | ||
|
|
0b6316ea23 | ||
|
|
466a843263 | ||
|
|
b6ade8b101 | ||
|
|
ff66b97e90 | ||
|
|
c604ec8fb9 | ||
|
|
7564651dd5 | ||
|
|
cad17ddefd | ||
|
|
25d2f209e5 | ||
|
|
8d660c3ffe | ||
|
|
209055d0b0 | ||
|
|
599b55965a | ||
|
|
69a9af5322 | ||
|
|
0303cd0ad0 | ||
|
|
8eb7e9fb05 | ||
|
|
6a1de5fc4e | ||
|
|
a4af55cb66 | ||
|
|
1e17422f5e | ||
|
|
8abaafab79 | ||
|
|
71e1465524 | ||
|
|
3d2ea3753b | ||
|
|
88530eff8b | ||
|
|
df3decf71b | ||
|
|
565ee4cb2d | ||
|
|
40fc325ba9 | ||
|
|
6aca16102d | ||
|
|
cb11b57ab1 | ||
|
|
d504937d50 | ||
|
|
6bfdb7ca4e | ||
|
|
e1637824c6 | ||
|
|
e36f2f2bcb | ||
|
|
1a54e08f11 | ||
|
|
ecc86ee429 | ||
|
|
185a593bc2 | ||
|
|
4a916ebb89 | ||
|
|
1c305ca762 | ||
|
|
17fff56fa0 | ||
|
|
ec1b1c2b7d | ||
|
|
7bae22f56f | ||
|
|
21e5eeef16 | ||
|
|
bf5eea80f6 | ||
|
|
9f9a6d9827 | ||
|
|
ae622e6d75 | ||
|
|
68fbff631f | ||
|
|
6cdce75095 | ||
|
|
f699e76c56 | ||
|
|
a729329cd4 | ||
|
|
d5020ce9bb | ||
|
|
126868c251 | ||
|
|
b206e9fc95 | ||
|
|
4b6ff68464 | ||
|
|
b23a0febb5 | ||
|
|
05ad547341 | ||
|
|
f10af882a7 | ||
|
|
98f32ebcad | ||
|
|
e2c302836f | ||
|
|
f1d9642cf6 | ||
|
|
5c58e5b545 | ||
|
|
803cb335e1 | ||
|
|
ae4dde8255 | ||
|
|
cb34f68b1b | ||
|
|
96ef983cfb | ||
|
|
d8c3d67dfe | ||
|
|
5de5153663 | ||
|
|
1e747b6831 | ||
|
|
fbe9d16073 | ||
|
|
d02c0073a0 | ||
|
|
1090b9879c | ||
|
|
5a6af976cd | ||
|
|
55e39a5d30 | ||
|
|
c9b1ddfb59 | ||
|
|
f7dd696ffc | ||
|
|
70f210ac5d | ||
|
|
cad1c11f8b | ||
|
|
f7fa305e82 | ||
|
|
f96c51e854 | ||
|
|
c19705d3e5 | ||
|
|
1190511994 | ||
|
|
69ee7ef63c | ||
|
|
fc95e5a9a8 | ||
|
|
6ecc495d43 | ||
|
|
6e861001cf | ||
|
|
c56af08c7e | ||
|
|
e68abefe48 | ||
|
|
fd0635cb82 | ||
|
|
baa3cfb354 | ||
|
|
aea9bab853 | ||
|
|
48de609f53 | ||
|
|
71f4f87288 | ||
|
|
48b202c56b | ||
|
|
d975019a7b | ||
|
|
6009b5013b | ||
|
|
24979d7fbd | ||
|
|
b4bf42e377 | ||
|
|
f94819351a | ||
|
|
8da69c11d9 | ||
|
|
635a825095 | ||
|
|
bbffdbf56f | ||
|
|
1c30533d19 | ||
|
|
dcd80fe6ad | ||
|
|
525ab8d945 | ||
|
|
d8fb3f526a | ||
|
|
a55df1d111 | ||
|
|
2cf32ba38d | ||
|
|
c82907153e | ||
|
|
165403da67 | ||
|
|
0e4d94946e | ||
|
|
9f9c5abf35 | ||
|
|
6a3b10111f | ||
|
|
0a55f4bf83 | ||
|
|
493d66d991 | ||
|
|
268b495a29 | ||
|
|
180f4926f8 | ||
|
|
c853349b78 | ||
|
|
ee555e0da9 | ||
|
|
3dec4cc698 | ||
|
|
d7b2b94cec | ||
|
|
c9e88586aa | ||
|
|
1d641504b1 | ||
|
|
655e068b9b | ||
|
|
67a9f314cc | ||
|
|
ff2b58e8a3 | ||
|
|
a1482cb40e | ||
|
|
89111059f9 | ||
|
|
0ae823716a | ||
|
|
dab3f722e8 | ||
|
|
0dc1af0747 | ||
|
|
021206e052 | ||
|
|
cb09cf3734 | ||
|
|
f0525d6463 | ||
|
|
e22424ffa4 | ||
|
|
6e666c64e8 | ||
|
|
5f5f6ac539 | ||
|
|
3024c79f4f | ||
|
|
ba96d86dc2 | ||
|
|
40ec7195d1 | ||
|
|
f10dfa0c20 | ||
|
|
6a5473f6fe | ||
|
|
f79de6fbe8 | ||
|
|
ec4ee3132b | ||
|
|
1298f2b688 | ||
|
|
534a2f1d28 | ||
|
|
c8e95cf3c3 | ||
|
|
c4918a963c | ||
|
|
bf6f738d2e | ||
|
|
1605904eb1 | ||
|
|
138517f116 | ||
|
|
d4a4cb2e80 | ||
|
|
9a9dc328e3 | ||
|
|
50eea0a4f1 | ||
|
|
528a8b5b46 | ||
|
|
0db0bc53fa | ||
|
|
0297c267e9 | ||
|
|
5af85f24f6 | ||
|
|
5110a7578e | ||
|
|
5af28670f0 | ||
|
|
efa2b781dd | ||
|
|
979f151181 | ||
|
|
6f125f18c3 | ||
|
|
edba7051f0 | ||
|
|
fa1ae8d746 | ||
|
|
a476617432 | ||
|
|
ffac13bfef | ||
|
|
f877bf21ba | ||
|
|
4bc4882b1f | ||
|
|
084c17dc26 | ||
|
|
26c39d6822 | ||
|
|
aefc173227 | ||
|
|
bf44a1cce6 | ||
|
|
a76c6c653d | ||
|
|
f11205bba7 | ||
|
|
72d9c5019c | ||
|
|
58d66e3e97 | ||
|
|
43c88a2fab | ||
|
|
9ce64ec6e1 | ||
|
|
c749d6a7dc | ||
|
|
f3e6d35c98 | ||
|
|
0be539b8a5 | ||
|
|
0454a369e5 | ||
|
|
010025cbfa | ||
|
|
61cae0a9f8 | ||
|
|
9e83d9e68c | ||
|
|
248acd5e26 | ||
|
|
42c1f5601a | ||
|
|
9c1a673047 | ||
|
|
99b90f90ac | ||
|
|
6ead8d8b49 | ||
|
|
9b12232e9f | ||
|
|
c1ed1baaad | ||
|
|
ab34312089 | ||
|
|
a25d92fbb7 | ||
|
|
6005af1595 | ||
|
|
9a4329807a | ||
|
|
8e01da4c12 | ||
|
|
eb8ea520c7 | ||
|
|
512fcd361b | ||
|
|
aad6f6bcbe | ||
|
|
0af21505d7 | ||
|
|
2ae69e8e72 | ||
|
|
9274fac8e1 | ||
|
|
e2f82c60e6 | ||
|
|
bfddf24204 | ||
|
|
382599dcf6 | ||
|
|
5f2c07f2d8 | ||
|
|
914024c0b5 | ||
|
|
c5d3387962 | ||
|
|
7cc99c6fc9 | ||
|
|
a29b502a33 | ||
|
|
20cb74364f | ||
|
|
1c5a50c8d8 | ||
|
|
470523cc86 | ||
|
|
f6bc3d4650 | ||
|
|
41b1228d31 | ||
|
|
2cb4462274 | ||
|
|
810cd40ccd | ||
|
|
f931beb49a | ||
|
|
1c3dfc9b2f | ||
|
|
a1d4545e29 | ||
|
|
8865db2007 | ||
|
|
d2056d9409 | ||
|
|
74e74ddc38 | ||
|
|
5fcb737559 | ||
|
|
9303025427 | ||
|
|
680985fc13 | ||
|
|
5a360eb614 | ||
|
|
4a74bd78fd | ||
|
|
0f53656952 | ||
|
|
9ca40d3651 | ||
|
|
ab12503f62 | ||
|
|
b446d7fd4a | ||
|
|
fd46d85762 | ||
|
|
fa421afb00 | ||
|
|
a79d3e28ca | ||
|
|
fbb4f65735 | ||
|
|
00c62c90f6 | ||
|
|
384aa6e6a9 | ||
|
|
1c755249ec | ||
|
|
2c303b5bf2 | ||
|
|
415e3b4a93 | ||
|
|
8d9b056c8c | ||
|
|
a527a7f0b0 | ||
|
|
d78d955d11 | ||
|
|
9375a60cd9 | ||
|
|
bb99b9a0ef | ||
|
|
313e59d7f9 | ||
|
|
e34e0e62f2 | ||
|
|
212f75f1cb | ||
|
|
a07c79efcb | ||
|
|
89090b25e3 | ||
|
|
721164e562 | ||
|
|
b8ba980a20 | ||
|
|
79ded38434 | ||
|
|
f52db884a9 | ||
|
|
ee4bb33b0a | ||
|
|
caf8fa8e25 | ||
|
|
c46dea4c9e | ||
|
|
002b7b4f87 | ||
|
|
0a6a8c671f | ||
|
|
36014b706d | ||
|
|
df5e01d4eb | ||
|
|
c6f1525f55 | ||
|
|
5511259f2d | ||
|
|
f2ea7ca5d1 | ||
|
|
6184bbeae2 | ||
|
|
21506578f5 | ||
|
|
f39f395393 | ||
|
|
ed0a94659e | ||
|
|
7f75706584 | ||
|
|
3f316e42f2 | ||
|
|
4a331c0331 | ||
|
|
6a28de100c | ||
|
|
992f18b94b | ||
|
|
040a606b39 | ||
|
|
13e079d1b8 | ||
|
|
d9a7f40eb4 | ||
|
|
8d123da847 | ||
|
|
093310a9e5 | ||
|
|
21b315b97e | ||
|
|
c70cc3a6f1 | ||
|
|
1e71d8afc0 | ||
|
|
cb6b74b269 | ||
|
|
a1e399aa1a | ||
|
|
e1dfdd9400 | ||
|
|
6ab2e81f1c | ||
|
|
cf09029847 | ||
|
|
d02e170dac | ||
|
|
2b715bb0de | ||
|
|
2dcaf2c77b | ||
|
|
1b9f4f33de | ||
|
|
3c73f88a52 | ||
|
|
8acdc19be4 | ||
|
|
22252d9044 | ||
|
|
5948a74ad1 | ||
|
|
e46d9d7650 | ||
|
|
813276c907 | ||
|
|
7032473ecf | ||
|
|
807f1fb561 | ||
|
|
296f80ffe5 | ||
|
|
d45e0d1cac | ||
|
|
4b8f9984d5 | ||
|
|
7623610704 | ||
|
|
a7fe384a31 | ||
|
|
485ce887ea | ||
|
|
2a0bb79513 | ||
|
|
21ae88702f | ||
|
|
0ff1bb392c | ||
|
|
01af2f364c | ||
|
|
a639dddd19 | ||
|
|
71ec6c5061 | ||
|
|
8c4c4f5e8b | ||
|
|
2c2d3b2de3 | ||
|
|
caae5c9711 | ||
|
|
72822d03aa | ||
|
|
9de3dd89c5 | ||
|
|
bcb69b9855 | ||
|
|
6d2761f141 | ||
|
|
05c25b6aff | ||
|
|
9be9eb90f6 | ||
|
|
71f2f3a5fc | ||
|
|
862b1d407c | ||
|
|
5da0da48c8 | ||
|
|
3f1a51e350 | ||
|
|
d167e43252 | ||
|
|
fe9eecd031 | ||
|
|
ded8cff415 | ||
|
|
3497716a00 | ||
|
|
c78b4a3343 | ||
|
|
17359be58a | ||
|
|
382a62343d | ||
|
|
7e0f60615b | ||
|
|
e1a49b38a7 | ||
|
|
4333b8c351 | ||
|
|
6464377a89 | ||
|
|
4fcf732814 | ||
|
|
0d4f3e5735 | ||
|
|
1f2e453e20 | ||
|
|
5236c7b468 | ||
|
|
1738e8883f | ||
|
|
cc4563afb0 | ||
|
|
4b3bf2f358 | ||
|
|
80084f5c5a | ||
|
|
6d14b3f6bd | ||
|
|
592f613a61 | ||
|
|
3739bcc40c | ||
|
|
101c7a36fb | ||
|
|
21be959cba | ||
|
|
b3a0ebe7b6 | ||
|
|
96a588bd86 | ||
|
|
866b956680 | ||
|
|
d88252c6fd | ||
|
|
414e7d36a0 | ||
|
|
e0b4931a54 | ||
|
|
a587c5ff74 | ||
|
|
0b2eca3066 | ||
|
|
fa28052958 | ||
|
|
54f5bd1d80 | ||
|
|
4b3bbb4a97 | ||
|
|
187d90e8f2 | ||
|
|
2f60f61c15 | ||
|
|
057543da15 | ||
|
|
3c060cc57a | ||
|
|
928b4c6c4c | ||
|
|
871a0d535c | ||
|
|
87db9def32 | ||
|
|
04763eaeea | ||
|
|
b6c08a1a11 | ||
|
|
811c995047 | ||
|
|
7011df2ced | ||
|
|
a24692b4be | ||
|
|
0e7a32470b | ||
|
|
212d2f9db4 | ||
|
|
0263d3538e | ||
|
|
63c6028522 | ||
|
|
075ece2da7 | ||
|
|
e9fb02285e | ||
|
|
5dfd8c89a3 | ||
|
|
e9f7908afb | ||
|
|
fafce72c01 | ||
|
|
c3d15157ad | ||
|
|
e0712f73c2 | ||
|
|
3dd5b2365a | ||
|
|
b523f55984 | ||
|
|
79b8b77b25 | ||
|
|
c6065808a7 | ||
|
|
d69ae39b6f | ||
|
|
35739d6d0d | ||
|
|
e726fce360 | ||
|
|
0a038fecff | ||
|
|
0184bf9a7d | ||
|
|
60663babc8 | ||
|
|
a7115d4300 | ||
|
|
29558c9910 | ||
|
|
7c1d643f97 | ||
|
|
b2fc80f970 | ||
|
|
efee128c1c | ||
|
|
c3ddd68866 | ||
|
|
3cde4472c8 | ||
|
|
4c38fe261d | ||
|
|
33f7191c0d | ||
|
|
cda9ad3b30 | ||
|
|
1a7bd49361 | ||
|
|
cf2e189049 | ||
|
|
d5f5ba941a | ||
|
|
9a973be7ba | ||
|
|
d8e1284946 | ||
|
|
ce26fe1db7 | ||
|
|
a8ad045248 | ||
|
|
d097f6ada0 | ||
|
|
1b26db40f7 | ||
|
|
602b946fc9 | ||
|
|
48fc1a7a1e | ||
|
|
416889f49d | ||
|
|
5ca3222e5b | ||
|
|
d49d82e982 | ||
|
|
a4d5679219 | ||
|
|
bead103f3d | ||
|
|
e50b6733c4 | ||
|
|
75e5dbaaa4 | ||
|
|
965113c2b4 | ||
|
|
3bddaf509d | ||
|
|
c1c51e0baf | ||
|
|
09b6c2ab5b | ||
|
|
13fd956039 | ||
|
|
b6f0ee90af | ||
|
|
90e11e1c5d | ||
|
|
fc40e8ba70 | ||
|
|
7652b4a5b8 | ||
|
|
fb249767f1 | ||
|
|
d7ed311bcf | ||
|
|
8422965d0b | ||
|
|
7975edade4 | ||
|
|
1e18935513 | ||
|
|
c311b5315f | ||
|
|
26a73e0fba | ||
|
|
07c259c9c1 | ||
|
|
9e1c2d5a2c | ||
|
|
d7fb1b737f | ||
|
|
84c9c69fa3 | ||
|
|
12ca4e29cf | ||
|
|
27b1a5dc98 | ||
|
|
de36cc8445 | ||
|
|
03d344c0a2 | ||
|
|
39f01538c7 | ||
|
|
28c57cf666 | ||
|
|
59d120537d | ||
|
|
66d18e9475 | ||
|
|
1f5e4ceb0c | ||
|
|
0cbc65a52f | ||
|
|
2b0367cca6 | ||
|
|
1f01f480e0 | ||
|
|
7a167962d6 | ||
|
|
dae028d25d | ||
|
|
88e2fa04e7 | ||
|
|
bb0a8047ea | ||
|
|
b652565b57 | ||
|
|
9aaf6f3105 | ||
|
|
c26eccfe28 | ||
|
|
9fd547112d | ||
|
|
14bfc8af72 | ||
|
|
20f3458e37 | ||
|
|
6326e2d141 | ||
|
|
23ca3c1d2d | ||
|
|
0656ab4b88 | ||
|
|
90bb5d187c | ||
|
|
75a62e2bde | ||
|
|
7cd36b80eb | ||
|
|
dd607621d7 | ||
|
|
2595febf14 | ||
|
|
dc058c4cf3 | ||
|
|
25824e1821 | ||
|
|
381c2d52ee | ||
|
|
4020ac9843 | ||
|
|
b3b7a19df4 | ||
|
|
313e3e748f | ||
|
|
09b9f26e6f | ||
|
|
01b9cc64d6 | ||
|
|
97bf1dc850 | ||
|
|
f94794fe3e | ||
|
|
68e528dd3a | ||
|
|
06ab1d34aa | ||
|
|
2f2717e9aa | ||
|
|
88d24c2a03 | ||
|
|
ec2a2a6fbb | ||
|
|
60b81e714b | ||
|
|
2cd8b13c1d | ||
|
|
4afedb5131 | ||
|
|
71880ad2ad | ||
|
|
a30cce4cbc | ||
|
|
08b4f60ead | ||
|
|
11498bd09b | ||
|
|
7384c88ad6 | ||
|
|
6f22d70d59 | ||
|
|
adc279d681 | ||
|
|
f90dc5d619 | ||
|
|
6fd594c1f4 | ||
|
|
b94a4288bf | ||
|
|
cbf415256b | ||
|
|
4b1884944d | ||
|
|
5ff752c9af | ||
|
|
0e331a7cd1 | ||
|
|
10970d170c | ||
|
|
ac1a28311c | ||
|
|
01d1938fea | ||
|
|
802694ec68 | ||
|
|
2aef5e4eef | ||
|
|
9a0a4d47dc | ||
|
|
96b7366d53 | ||
|
|
90ac96298a | ||
|
|
a6e5040e8f | ||
|
|
19e5aafc85 | ||
|
|
77301fd018 | ||
|
|
ed56b3dd12 | ||
|
|
91f6aae9ef | ||
|
|
b642c493d7 | ||
|
|
a950796306 | ||
|
|
8672a2cfe0 | ||
|
|
301e8c5a96 | ||
|
|
699a91c46b | ||
|
|
e43016735d | ||
|
|
d9cecbbb5f | ||
|
|
6e186e7d6a | ||
|
|
af3680649c | ||
|
|
82f1d08dd7 | ||
|
|
b1b54a5fe7 | ||
|
|
ced3af3935 | ||
|
|
e5c782ebe9 | ||
|
|
7d42742684 | ||
|
|
41820311cc | ||
|
|
e132adad5d | ||
|
|
2132e5adbf | ||
|
|
e2d55446fe | ||
|
|
1dfce6a5c2 | ||
|
|
a84db9821c | ||
|
|
ec080ad69f | ||
|
|
75cc9e4d84 | ||
|
|
d241a3ed5f | ||
|
|
682aab8b23 | ||
|
|
474862b4af | ||
|
|
dd02ec7a8e | ||
|
|
1eadb77722 | ||
|
|
95f71bcb10 | ||
|
|
e1a4707569 | ||
|
|
5a10613dd2 | ||
|
|
c6a569ed88 | ||
|
|
de24453fb9 | ||
|
|
d7c5c84110 | ||
|
|
95166ccfb8 | ||
|
|
c56667b0dd | ||
|
|
f754560bca | ||
|
|
b54bb6cd56 | ||
|
|
b03b159907 | ||
|
|
bb7e6c9775 | ||
|
|
4bc724791d | ||
|
|
ba7c10f4b1 | ||
|
|
c1561c7b6a | ||
|
|
91a0be2d78 | ||
|
|
1f27530241 | ||
|
|
e236872af3 | ||
|
|
3d301c4202 | ||
|
|
a5aaa60d29 | ||
|
|
d4a2de3b23 | ||
|
|
e85746ddba | ||
|
|
a002eb1bc1 | ||
|
|
7d4486f407 | ||
|
|
a9915579a0 | ||
|
|
65dfd4da0f | ||
|
|
b93fd523aa | ||
|
|
24621e6612 | ||
|
|
1b383bdcf1 | ||
|
|
f47b357b23 | ||
|
|
f9b778ecb8 | ||
|
|
f36d9831bb | ||
|
|
b60a262b58 | ||
|
|
beef0fff33 | ||
|
|
24f535474a | ||
|
|
2e3f523f32 | ||
|
|
c5f5973a9d | ||
|
|
5d59b8599d | ||
|
|
3bfb0096e6 | ||
|
|
ca5763650b | ||
|
|
bf7beab0ab | ||
|
|
9b594d81bd | ||
|
|
6a26c6002b | ||
|
|
4fa64500af | ||
|
|
085737af15 | ||
|
|
3e347fb6d4 | ||
|
|
80cb126200 | ||
|
|
f49715c7a0 | ||
|
|
deee76e455 | ||
|
|
33885b863a | ||
|
|
3ce9dbb278 | ||
|
|
bee4b906fb | ||
|
|
b3b79b3ee8 | ||
|
|
bd085dd495 | ||
|
|
bf518b3590 | ||
|
|
32a8fcb84d | ||
|
|
4fd65403c0 | ||
|
|
ecf871a6f1 | ||
|
|
531c049bb0 | ||
|
|
99716eff1e | ||
|
|
74205d5438 | ||
|
|
0136877978 | ||
|
|
fb7d40ddbe | ||
|
|
c761054805 | ||
|
|
55e24b5e23 | ||
|
|
9cff5b8af4 | ||
|
|
41b2523005 | ||
|
|
2ef256ee74 | ||
|
|
e954d49c29 | ||
|
|
041bf47ff4 | ||
|
|
53ced98529 | ||
|
|
cb475c471d | ||
|
|
bf82690c80 | ||
|
|
72a3a1acab | ||
|
|
18e2b0eaa2 | ||
|
|
b80a6152b3 | ||
|
|
ffe3dae7b2 | ||
|
|
d7845ec690 | ||
|
|
8531a67519 | ||
|
|
af59b9d2ca | ||
|
|
08bb69c048 | ||
|
|
6fb32d20b3 | ||
|
|
ea09bfe8ea | ||
|
|
c0dde570e4 | ||
|
|
6fd3fa77ed | ||
|
|
ff20f81cfd | ||
|
|
de8465a8f4 | ||
|
|
4540e1b561 | ||
|
|
789d469477 | ||
|
|
4797512207 | ||
|
|
348fe27a3c | ||
|
|
c217b1b100 | ||
|
|
0e757e5fb1 | ||
|
|
72d5707d33 | ||
|
|
a491b85737 | ||
|
|
d9d85cbfcc | ||
|
|
283fe46230 | ||
|
|
2c00aa5def | ||
|
|
984438e98d | ||
|
|
cf34c4bd95 | ||
|
|
bab1d2e27e | ||
|
|
d1b6a21e86 | ||
|
|
3049590b68 | ||
|
|
8a289d2e4f | ||
|
|
7a81fa7ac5 | ||
|
|
fbf59b6f0b | ||
|
|
0ab200f77f | ||
|
|
a91e40d731 | ||
|
|
e553fbc86c | ||
|
|
b4a810c374 | ||
|
|
0e97914d94 | ||
|
|
a5c250c811 | ||
|
|
08c2f3fc15 | ||
|
|
63f66662ce | ||
|
|
89eee104ab | ||
|
|
92b1234ddb | ||
|
|
0b0bf90e0b | ||
|
|
974c4ba040 | ||
|
|
4e2c1d20b4 | ||
|
|
e5b83d0ddf | ||
|
|
bdaf1e4151 | ||
|
|
751eff0edf | ||
|
|
666dc7dccb | ||
|
|
a172e89620 | ||
|
|
ecb9537c4e | ||
|
|
bba4cf9578 | ||
|
|
bfdb9b4019 | ||
|
|
bad37d0940 | ||
|
|
62f5640678 | ||
|
|
71c1bcde0d | ||
|
|
e9b492a287 | ||
|
|
9b9b1aa6cc | ||
|
|
2cb673fd81 | ||
|
|
d5eb6b5bbc | ||
|
|
1e48277566 | ||
|
|
ec748f4a64 | ||
|
|
22f1713739 | ||
|
|
f0e135530a | ||
|
|
125d6a3e2a | ||
|
|
d078f9d847 | ||
|
|
6b6a6ae5f0 | ||
|
|
1d6676f059 | ||
|
|
1e91505e6e | ||
|
|
9e2f228d9a | ||
|
|
7a1d163450 | ||
|
|
22e717d778 | ||
|
|
2546c042dc | ||
|
|
b54f46de30 | ||
|
|
94bc279bd8 | ||
|
|
2f7c2e79d2 | ||
|
|
2ed5381f5a | ||
|
|
964d98dd7b | ||
|
|
0571dae9b7 | ||
|
|
563bf78f03 | ||
|
|
cf480d95db | ||
|
|
44331506b2 | ||
|
|
f6953fd829 | ||
|
|
663b99ed64 | ||
|
|
0ef3be1851 | ||
|
|
0453a23b12 | ||
|
|
7a14e3dac4 | ||
|
|
275774a10a | ||
|
|
a6277533e8 | ||
|
|
1426424899 | ||
|
|
85fa1b2122 | ||
|
|
c28522b7ef | ||
|
|
d90a04990b | ||
|
|
027ff793ed | ||
|
|
c69d3bc7f4 | ||
|
|
ca17054a1e | ||
|
|
6a9e07729f | ||
|
|
ceeda6de3b | ||
|
|
17ab059b12 | ||
|
|
dedd99f30c | ||
|
|
add94c5926 | ||
|
|
a239edc759 | ||
|
|
ff569417fc | ||
|
|
240bb299f0 | ||
|
|
e2dd12416c | ||
|
|
2a726c7136 | ||
|
|
62aea46c61 | ||
|
|
09bffb6745 | ||
|
|
3c91cb09e3 | ||
|
|
881a379fb4 | ||
|
|
90a67af887 | ||
|
|
d727100304 | ||
|
|
543fcf5447 | ||
|
|
e9b140b75c | ||
|
|
92a9843ef7 | ||
|
|
12528d6e6e | ||
|
|
8fae55487a | ||
|
|
973af4650c | ||
|
|
5f192d5dc7 | ||
|
|
ec39546fed | ||
|
|
ea0cafa229 | ||
|
|
978fa17932 | ||
|
|
6602e800ac | ||
|
|
fdf9209605 | ||
|
|
8a3739ee1c | ||
|
|
89f360d1a7 | ||
|
|
d7ddf991a9 | ||
|
|
19c02be673 | ||
|
|
adbcc48de7 | ||
|
|
a5eb031401 | ||
|
|
10351c5bdc | ||
|
|
5bc60d4b63 | ||
|
|
32a659a477 | ||
|
|
40c4dbc20e | ||
|
|
f2b4e49ff3 | ||
|
|
39dd67af78 | ||
|
|
337ec6bca6 | ||
|
|
2994e69c08 | ||
|
|
49987b8793 | ||
|
|
0f5e125992 | ||
|
|
57857559f5 | ||
|
|
4eba620bee | ||
|
|
964a2e990e | ||
|
|
761bc941a8 | ||
|
|
aa5a3ed080 | ||
|
|
6fbbf899b0 | ||
|
|
1df0eea6c6 | ||
|
|
ef99e9d6f8 | ||
|
|
a685d2e97d | ||
|
|
df04acc1b9 | ||
|
|
f510faa1da | ||
|
|
3ad2c74519 | ||
|
|
0e58204501 | ||
|
|
f847807df5 | ||
|
|
81982aa821 | ||
|
|
08fc393451 | ||
|
|
a7033b68f7 | ||
|
|
3794aa425d | ||
|
|
a1ea8dfd84 | ||
|
|
79e1df1af2 | ||
|
|
fd61e757f0 | ||
|
|
7ec245925a | ||
|
|
f913cd742f | ||
|
|
cc7a0db35c | ||
|
|
6f11873d7e | ||
|
|
4b1b52caf0 | ||
|
|
e9ebfe36b0 | ||
|
|
43149498cf | ||
|
|
43070a1f5b | ||
|
|
f135bd86ac | ||
|
|
0bd8c5d115 | ||
|
|
9de10df90d | ||
|
|
46ed6e2487 | ||
|
|
d81d409051 | ||
|
|
5f75c8684f | ||
|
|
5d08499d20 | ||
|
|
4115184952 | ||
|
|
e6a14977b9 | ||
|
|
a449f7a5e3 | ||
|
|
51302cfd88 | ||
|
|
696612385a | ||
|
|
edf047dde8 | ||
|
|
166cd6c426 | ||
|
|
51010096bb | ||
|
|
4e5a7ba483 | ||
|
|
92803c1536 | ||
|
|
cc593fb6c4 | ||
|
|
aeabc0c436 | ||
|
|
32ad8ddb53 | ||
|
|
f084bc4147 | ||
|
|
cb1dcc2c9f | ||
|
|
8030de7af2 | ||
|
|
dd5ddbcc0f | ||
|
|
f587710d1c | ||
|
|
99142525b6 | ||
|
|
2d9ef1142d | ||
|
|
547169ea78 | ||
|
|
8d08ab20ec | ||
|
|
966a780432 | ||
|
|
99abc4e78a | ||
|
|
ce1d581c3f | ||
|
|
b31ae6e690 | ||
|
|
e984fde966 | ||
|
|
5d0b474a7e | ||
|
|
d09f2c4f26 | ||
|
|
dd20a16d3a | ||
|
|
7d22b71e86 | ||
|
|
567ccbfc3a | ||
|
|
ca40775678 | ||
|
|
4916e5542a | ||
|
|
ac8ec2b622 | ||
|
|
9b9f7e2a1d | ||
|
|
28ea91e6c3 | ||
|
|
0d58307e82 | ||
|
|
c8ca84ede9 | ||
|
|
ed2939c39e | ||
|
|
d36bd253e8 | ||
|
|
4615dce0a9 | ||
|
|
7ce8aa3638 | ||
|
|
9236b92dc1 | ||
|
|
05ffcab911 | ||
|
|
61b9c0970b | ||
|
|
3b3701135f | ||
|
|
f5987fde5a | ||
|
|
e56b34f174 | ||
|
|
0fb43ccc2b | ||
|
|
48db4df028 | ||
|
|
86a0693081 | ||
|
|
6295c1d0c3 | ||
|
|
35d29c8e30 | ||
|
|
ca78c4c2fc | ||
|
|
f276409cde | ||
|
|
682f7bee72 | ||
|
|
43bec6a636 | ||
|
|
6eb9c750a7 | ||
|
|
31c93c8c5c | ||
|
|
5aa1046541 | ||
|
|
0f4504476a | ||
|
|
3897245a7e | ||
|
|
373db3de95 | ||
|
|
a1437658af | ||
|
|
f4ec69021d | ||
|
|
6012f20fb3 | ||
|
|
95da957f73 | ||
|
|
642722bdb1 | ||
|
|
cbc31f3c18 | ||
|
|
f2309ba079 | ||
|
|
246ed15d6d | ||
|
|
88756c83c7 | ||
|
|
cf320266df | ||
|
|
47e7e80afe | ||
|
|
0d880babfb | ||
|
|
28ba34f1bf | ||
|
|
e786cb8180 | ||
|
|
458584d778 | ||
|
|
2c711ea206 | ||
|
|
7b25be51a5 | ||
|
|
45b05a4846 | ||
|
|
6972736abf | ||
|
|
3798654f92 | ||
|
|
fdf01dfb50 | ||
|
|
876f091244 | ||
|
|
2988561f01 | ||
|
|
fbfc319ac1 | ||
|
|
9b1417f32d | ||
|
|
c727762940 | ||
|
|
e3565d5bcb | ||
|
|
a3f550c585 | ||
|
|
c610d804b1 | ||
|
|
3d592dbc79 | ||
|
|
0186f2f456 | ||
|
|
d817a813b0 | ||
|
|
1d219ba511 | ||
|
|
285afb6d4b | ||
|
|
ca3708df71 | ||
|
|
c2aafb14c2 | ||
|
|
d4d1acb555 | ||
|
|
d1a59f8c1b | ||
|
|
2fd17f97b6 | ||
|
|
45a3bdffe0 | ||
|
|
f050c69ccd | ||
|
|
c31a2551f1 | ||
|
|
90e93492a7 | ||
|
|
54266bf63b | ||
|
|
ba12f7aec9 | ||
|
|
deafb6fe08 | ||
|
|
091be1440a | ||
|
|
030aee17f5 | ||
|
|
bbbf836374 | ||
|
|
f1b91ef360 | ||
|
|
f6c59b456f | ||
|
|
8f3f941600 | ||
|
|
e561f49e80 | ||
|
|
2ff884fd11 | ||
|
|
296af748ee | ||
|
|
0cb10fcc34 | ||
|
|
4a67ea0b29 | ||
|
|
8e94acc98f | ||
|
|
39cda3764b | ||
|
|
97f5175c84 | ||
|
|
78f8e5055e | ||
|
|
735d896260 | ||
|
|
cb7a6596ba | ||
|
|
fdaa56fd86 | ||
|
|
667b940feb | ||
|
|
bb3de7d510 | ||
|
|
7bdde15796 | ||
|
|
c412ba66d8 | ||
|
|
dd62bee264 | ||
|
|
f886eac7b5 | ||
|
|
623079ca40 | ||
|
|
ce9bd796d6 | ||
|
|
d5f323a2cd | ||
|
|
40592a93ac | ||
|
|
dc1a5a860c | ||
|
|
f7b431902d | ||
|
|
686d47a59e | ||
|
|
eaa4688182 | ||
|
|
72645aa800 | ||
|
|
7044fc8004 | ||
|
|
9e8c780d66 | ||
|
|
e1795d687f | ||
|
|
607f7cba8d | ||
|
|
2572e23928 | ||
|
|
60921031bd | ||
|
|
77550d902c | ||
|
|
41935781fb | ||
|
|
47362559ef | ||
|
|
032ef0722d | ||
|
|
6e32f03a6b | ||
|
|
5731dcf135 |
166
.clang-tidy
166
.clang-tidy
@@ -1,69 +1,97 @@
|
||||
# Generated from CLion Inspection settings
|
||||
---
|
||||
Checks: '-*,
|
||||
mpi-*,
|
||||
bugprone-*,
|
||||
-bugprone-signal-handler,
|
||||
-bugprone-narrowing-conversions,
|
||||
-bugprone-redundant-branch-condition,
|
||||
-bugprone-exception-escape,
|
||||
-bugprone-shared-ptr-array-mismatch,
|
||||
-bugprone-implicit-widening-of-multiplication-result,
|
||||
-bugprone-signed-char-misuse,
|
||||
-bugprone-unhandled-exception-at-new,
|
||||
-bugprone-infinite-loop,
|
||||
-bugprone-easily-swappable-parameters,
|
||||
cert-err52-cpp,
|
||||
cert-err60-cpp,
|
||||
cert-err34-c,
|
||||
cert-str34-c,
|
||||
cert-dcl21-cpp,
|
||||
cert-msc50-cpp,
|
||||
cert-msc51-cpp,
|
||||
cert-dcl58-cpp,
|
||||
cert-flp30-c,
|
||||
cppcoreguidelines-avoid-const-or-ref-data-members,
|
||||
cppcoreguidelines-pro-type-member-init,
|
||||
cppcoreguidelines-slicing,
|
||||
cppcoreguidelines-interfaces-global-init,
|
||||
cppcoreguidelines-pro-type-static-cast-downcast,
|
||||
cppcoreguidelines-narrowing-conversions,
|
||||
google-default-arguments,
|
||||
google-runtime-operator,
|
||||
google-explicit-constructor,
|
||||
hicpp-multiway-paths-covered,
|
||||
hicpp-exception-baseclass,
|
||||
misc-*,
|
||||
-misc-definitions-in-headers,
|
||||
-misc-unused-parameters,
|
||||
-misc-unused-alias-decls,
|
||||
-misc-use-anonymous-namespace,
|
||||
-misc-misleading-identifier,
|
||||
-misc-confusable-identifiers,
|
||||
-misc-misleading-bidirectional,
|
||||
-misc-static-assert,
|
||||
-misc-no-recursion,
|
||||
-misc-const-correctness,
|
||||
modernize-*,
|
||||
-modernize-use-trailing-return-type,
|
||||
openmp-use-default-none,
|
||||
performance-*,
|
||||
-performance-no-int-to-ptr,
|
||||
portability-*,
|
||||
-portability-restrict-system-includes,
|
||||
readability-*,
|
||||
-readability-redundant-preprocessor,
|
||||
-readability-named-parameter,
|
||||
-readability-function-size,
|
||||
-readability-use-anyofallof,
|
||||
-readability-identifier-length,
|
||||
-readability-magic-numbers,
|
||||
-readability-braces-around-statements,
|
||||
-readability-suspicious-call-argument,
|
||||
-readability-isolate-declaration,
|
||||
-readability-else-after-return,
|
||||
-readability-redundant-access-specifiers,
|
||||
-readability-function-cognitive-complexity,
|
||||
-readability-identifier-naming,
|
||||
*-include-cleaner,
|
||||
-readability-qualified-auto'
|
||||
# All rules should have a comment associated
|
||||
# Directives that do not have any effect (e.g. disabling a rule that is not enabled) can be done to add an explanation comment.
|
||||
# Or at least an empty comment # to show they were put here explicitely,
|
||||
# and not as part of the historical CLion-generated rules
|
||||
# Note: `- -X` means disable X
|
||||
# CLI usage: go to the build directory and run: `run-clang-tidy -allow-no-checks -source-filter ".*/lib/.*" -fix -j`
|
||||
|
||||
Checks:
|
||||
- -*
|
||||
- mpi-*
|
||||
- bugprone-*
|
||||
- -bugprone-signal-handler
|
||||
- -bugprone-narrowing-conversions
|
||||
- -bugprone-redundant-branch-condition
|
||||
- -bugprone-exception-escape
|
||||
- -bugprone-shared-ptr-array-mismatch
|
||||
- -bugprone-implicit-widening-of-multiplication-result
|
||||
- -bugprone-signed-char-misuse
|
||||
- -bugprone-unhandled-exception-at-new
|
||||
- -bugprone-infinite-loop
|
||||
- -bugprone-easily-swappable-parameters
|
||||
- -bugprone-float-loop-counter #
|
||||
- -bugprone-unchecked-string-to-number-conversion # Unfortunately no alternative
|
||||
- -bugprone-branch-clone # Mostly warns about one-line duplicates
|
||||
- cert-err52-cpp
|
||||
- cert-err60-cpp
|
||||
- cert-str34-c
|
||||
- cert-dcl21-cpp
|
||||
- cert-msc50-cpp
|
||||
- cert-msc51-cpp
|
||||
- cert-dcl58-cpp
|
||||
- cppcoreguidelines-avoid-const-or-ref-data-members
|
||||
- cppcoreguidelines-pro-type-member-init # We want to use default member initializers
|
||||
- cppcoreguidelines-slicing
|
||||
- cppcoreguidelines-interfaces-global-init
|
||||
- -cppcoreguidelines-pro-type-static-cast-downcast # dynamic_cast has a runtime overhead
|
||||
- -cppcoreguidelines-narrowing-conversions #
|
||||
- google-runtime-operator
|
||||
- google-explicit-constructor
|
||||
- -google-default-arguments # Provider and ViewProvider read() is a good example of why this is useful
|
||||
- hicpp-multiway-paths-covered
|
||||
- hicpp-exception-baseclass
|
||||
- misc-*
|
||||
- -misc-definitions-in-headers
|
||||
- -misc-unused-parameters
|
||||
- -misc-unused-alias-decls
|
||||
- -misc-use-anonymous-namespace
|
||||
- -misc-misleading-identifier
|
||||
- -misc-confusable-identifiers
|
||||
- -misc-misleading-bidirectional
|
||||
- -misc-static-assert
|
||||
- -misc-no-recursion
|
||||
- -misc-const-correctness
|
||||
- -misc-use-internal-linkage # False positives if header where function is defined is not included
|
||||
- -misc-include-cleaner # Allow indirect includes
|
||||
- -misc-non-private-member-variables-in-classes #
|
||||
- modernize-*
|
||||
- -modernize-use-trailing-return-type
|
||||
- -modernize-use-std-print # We want to use fmt::print instead
|
||||
- -modernize-use-integer-sign-comparison # Too much occurrences to change
|
||||
- openmp-use-default-none
|
||||
- performance-*
|
||||
- -performance-no-int-to-ptr
|
||||
- portability-*
|
||||
- -portability-restrict-system-includes
|
||||
- readability-*
|
||||
- -readability-redundant-preprocessor
|
||||
- -readability-named-parameter
|
||||
- -readability-function-size
|
||||
- -readability-use-anyofallof
|
||||
- -readability-identifier-length
|
||||
- -readability-magic-numbers
|
||||
- -readability-braces-around-statements
|
||||
- -readability-suspicious-call-argument
|
||||
- -readability-isolate-declaration
|
||||
- -readability-else-after-return
|
||||
- -readability-redundant-access-specifiers
|
||||
- -readability-function-cognitive-complexity
|
||||
- -readability-identifier-naming
|
||||
- -readability-qualified-auto
|
||||
- -readability-use-std-min-max # Less readable imo
|
||||
- -readability-math-missing-parentheses # Basic math
|
||||
- -readability-implicit-bool-conversion # Not much of a problem ?
|
||||
- -readability-convert-member-functions-to-static #
|
||||
- -readability-use-concise-preprocessor-directives # We do not use #ifdef
|
||||
- -readability-uppercase-literal-suffix # Not important enough
|
||||
- -readability-redundant-string-cstr # Sometimes used to stop at first null byte
|
||||
- -readability-static-accessed-through-instance #
|
||||
- -readability-ambiguous-smartptr-reset-call # Fix is hard to read
|
||||
|
||||
# Will fix later
|
||||
- -modernize-avoid-c-arrays
|
||||
- -readability-make-member-function-const # idk + lots of occurences
|
||||
- -readability-misleading-indentation # We need to handle cases with #if defined()
|
||||
- -bugprone-unchecked-optional-access
|
||||
- -performance-unnecessary-value-param # idk
|
||||
- -readability-avoid-nested-conditional-operator
|
||||
|
||||
1
.gdbinit
1
.gdbinit
@@ -7,6 +7,7 @@ skip -rfu ^ImGui::
|
||||
|
||||
# Trigger breakpoint when execution reaches triggerSafeShutdown()
|
||||
break triggerSafeShutdown
|
||||
break __glibcxx_assert_fail
|
||||
|
||||
# Print backtrace after execution jumped to an invalid address
|
||||
define fixbt
|
||||
|
||||
4
.github/FUNDING.yml
vendored
4
.github/FUNDING.yml
vendored
@@ -1,5 +1,5 @@
|
||||
# Sponsor links
|
||||
|
||||
patreon: werwolv
|
||||
custom: https://werwolv.net/donate
|
||||
github: WerWolv
|
||||
ko_fi: WerWolv
|
||||
custom: "https://werwolv.net/donate"
|
||||
|
||||
5
.github/codecov.yml
vendored
Normal file
5
.github/codecov.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
comment: false
|
||||
ignore:
|
||||
- "lib/third_party" # Third party libraries should be ignored
|
||||
- "lib/external" # Our own libraries should be checked in their own repositories
|
||||
- "tests" # https://about.codecov.io/blog/should-i-include-test-files-in-code-coverage-calculations/
|
||||
7
.github/scripts/delete-artifact.sh
vendored
Executable file
7
.github/scripts/delete-artifact.sh
vendored
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
set -xe
|
||||
ARTIFACT_NAME="$1"
|
||||
|
||||
ARTIFACT_ID=$(gh api repos/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID/artifacts --jq ".artifacts[] | select(.name==\"$ARTIFACT_NAME\") | .id")
|
||||
gh api -X DELETE repos/$GITHUB_REPOSITORY/actions/artifacts/$ARTIFACT_ID
|
||||
echo "Deleted artifact $ARTIFACT_NAME with ID $ARTIFACT_ID"
|
||||
22
.github/workflows/analysis.yml
vendored
22
.github/workflows/analysis.yml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
jobs:
|
||||
codeql:
|
||||
name: 🐛 CodeQL
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
@@ -49,16 +49,18 @@ jobs:
|
||||
set -x
|
||||
mkdir -p build
|
||||
cd build
|
||||
CC=gcc-12 CXX=g++-12 cmake \
|
||||
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
||||
-DCMAKE_INSTALL_PREFIX="$PWD/install" \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_C_FLAGS="-fuse-ld=lld" \
|
||||
-DCMAKE_CXX_FLAGS="-fuse-ld=lld" \
|
||||
-DIMHEX_PATTERNS_PULL_MASTER=ON \
|
||||
CC=gcc-14 CXX=g++-14 cmake \
|
||||
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
||||
-DCMAKE_INSTALL_PREFIX="$PWD/install" \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_C_FLAGS="-fuse-ld=lld" \
|
||||
-DCMAKE_CXX_FLAGS="-fuse-ld=lld" \
|
||||
-DIMHEX_PATTERNS_PULL_MASTER=ON \
|
||||
-DIMHEX_EXCLUDE_PLUGINS="script_loader" \
|
||||
-G Ninja \
|
||||
..
|
||||
make -j 4 install
|
||||
ninja install
|
||||
|
||||
- name: 🗯️ Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
1044
.github/workflows/build.yml
vendored
1044
.github/workflows/build.yml
vendored
File diff suppressed because it is too large
Load Diff
77
.github/workflows/build_web.yml
vendored
77
.github/workflows/build_web.yml
vendored
@@ -1,77 +0,0 @@
|
||||
name: Build for the web
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["*"]
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
BUILD_TYPE: Release
|
||||
|
||||
permissions:
|
||||
pages: write
|
||||
id-token: write
|
||||
actions: write
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
runs-on: ubuntu-22.04
|
||||
name: 🌍 WebAssembly
|
||||
steps:
|
||||
- name: 🧰 Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: 📁 Restore docker /cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: cache
|
||||
key: web-cmakecache-${{ hashFiles('**/CMakeLists.txt') }}
|
||||
|
||||
- name: 🐳 Inject /cache into docker
|
||||
uses: reproducible-containers/buildkit-cache-dance@v2
|
||||
with:
|
||||
cache-source: cache
|
||||
cache-target: /cache
|
||||
|
||||
- name: 🛠️ Build using docker
|
||||
run: |
|
||||
docker buildx build . -f dist/web/Dockerfile --progress=plain --build-arg 'JOBS=4' --output out --target raw
|
||||
|
||||
- name: 🔨 Fix permissions
|
||||
run: |
|
||||
chmod -c -R +rX "out/"
|
||||
|
||||
- name: ⬆️ Upload artifacts
|
||||
uses: actions/upload-pages-artifact@v2
|
||||
with:
|
||||
path: out/
|
||||
|
||||
# See https://github.com/actions/cache/issues/342#issuecomment-1711054115
|
||||
- name: 🗑️ Delete old cache
|
||||
continue-on-error: true
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
gh extension install actions/gh-actions-cache
|
||||
gh actions-cache delete "build-web-cache" --confirm
|
||||
|
||||
|
||||
deploy:
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
|
||||
name: 📃 Deploy to GitHub Pages
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.ref == 'refs/heads/master' && github.event.repository.fork == false }}
|
||||
needs: build
|
||||
|
||||
steps:
|
||||
- name: 🌍 Deploy
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v2
|
||||
47
.github/workflows/dl-cache.yml
vendored
Normal file
47
.github/workflows/dl-cache.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
# https://gist.github.com/iTrooz/d5bacca32c0974edc6c1ac3ad3ee82f3
|
||||
# See https://github.com/cli/cli/issues/9125
|
||||
# Extract archive with `tar -xf cache.tzst --transform 's@\.\./@#@g' -P` to avoid ../ errors
|
||||
name: Download cache key
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
cache_key:
|
||||
description: 'Cache key'
|
||||
required: true
|
||||
type: string
|
||||
jobs:
|
||||
cache-download:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Query cache version
|
||||
id: version
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
VERSION=$(gh api repos/$GITHUB_REPOSITORY/actions/caches \
|
||||
--jq "
|
||||
.actions_caches[]
|
||||
| select(.ref == \"refs/heads/$GITHUB_REF_NAME\")
|
||||
| select(.key == \"${{ github.event.inputs.cache_key }}\")
|
||||
| .version
|
||||
")
|
||||
echo "version=$VERSION" | tee $GITHUB_OUTPUT
|
||||
|
||||
- name: Restore cache
|
||||
uses: iTrooz/cache/restore@restore_with_version
|
||||
with:
|
||||
# Path won't be actually used, we will match by 'version'.
|
||||
path: .
|
||||
key: ${{ github.event.inputs.cache_key }}
|
||||
version: ${{ steps.version.outputs.version }}
|
||||
|
||||
- name: Upload cached folder as artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: cache-artifact
|
||||
path: |
|
||||
/home/runner/work/**/*.tzst
|
||||
144
.github/workflows/nightly_release.yml
vendored
Normal file
144
.github/workflows/nightly_release.yml
vendored
Normal file
@@ -0,0 +1,144 @@
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
name: Nightly Release
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
nightly-release:
|
||||
runs-on: ubuntu-24.04
|
||||
name: 🌃 Update Nightly Release
|
||||
steps:
|
||||
- name: 🧰 Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ImHex
|
||||
fetch-depth: 0
|
||||
fetch-tags: true
|
||||
|
||||
- name: 🌃 Check for new commits
|
||||
id: check_commits
|
||||
run: |
|
||||
cd ImHex
|
||||
git config --global --add safe.directory $(pwd)
|
||||
if [ -z "$(git log nightly..HEAD --oneline)" ]; then
|
||||
echo "No new commits since last nightly. Exiting."
|
||||
echo "::set-output name=should_run::false"
|
||||
else
|
||||
echo "::set-output name=should_run::true"
|
||||
fi
|
||||
|
||||
- name: 📜 Set version variable
|
||||
if: ${{ steps.check_commits.outputs.should_run == 'true' }}
|
||||
run: |
|
||||
project_version=`cat ImHex/VERSION`
|
||||
echo "IMHEX_VERSION=$project_version" >> $GITHUB_ENV
|
||||
|
||||
# TODO: Replace by Github CLI when github.com/cli/cli/pull/12435 is closed
|
||||
- name: ⬇️ Download artifacts from latest workflow
|
||||
uses: dawidd6/action-download-artifact@v6
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
workflow: build.yml
|
||||
branch: master
|
||||
workflow_conclusion: success
|
||||
skip_unpack: true
|
||||
|
||||
- name: 🗜️ Unzip files when needed
|
||||
if: ${{ steps.check_commits.outputs.should_run == 'true' }}
|
||||
run: |
|
||||
set -x
|
||||
for zipfile in ./*.zip
|
||||
do
|
||||
if [ `zipinfo -1 "$zipfile" | wc -l` -eq 1 ];
|
||||
then
|
||||
echo "unzipping $zipfile"
|
||||
unzip "$zipfile"
|
||||
rm "$zipfile"
|
||||
else
|
||||
echo "keeping $zipfile zipped"
|
||||
fi
|
||||
done
|
||||
|
||||
- name: 🟩 Rename artifacts when needed
|
||||
if: ${{ steps.check_commits.outputs.should_run == 'true' }}
|
||||
run: |
|
||||
mv "Windows Portable x86_64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-x86_64.zip
|
||||
mv "Windows Portable arm64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-arm64.zip
|
||||
mv "Windows Portable NoGPU x86_64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-NoGPU-x86_64.zip
|
||||
mv "ImHex Web.zip" imhex-${{ env.IMHEX_VERSION }}-Web.zip
|
||||
rm artifact.tar || true
|
||||
|
||||
- name: 📖 Generate Release Notes
|
||||
if: ${{ steps.check_commits.outputs.should_run == 'true' }}
|
||||
id: release_notes
|
||||
continue-on-error: true
|
||||
run: |
|
||||
cd ImHex
|
||||
echo "## Nightly ${GITHUB_SHA::7} Changelog" > changelog.md
|
||||
git fetch --tags --recurse-submodules=no
|
||||
git log nightly..origin/master --oneline --no-merges --pretty=format:'* %s' >> changelog.md
|
||||
|
||||
- name: 📦 Update Pre-Release
|
||||
if: ${{ steps.check_commits.outputs.should_run == 'true' }}
|
||||
run: |
|
||||
set -e
|
||||
|
||||
cd ImHex
|
||||
|
||||
# Move nightly tag to latest commit
|
||||
git tag -f nightly origin/master
|
||||
git push origin nightly --force
|
||||
|
||||
# Auth for GitHub CLI
|
||||
echo "${{ github.token }}" | gh auth login --with-token
|
||||
|
||||
# Delete existing assets
|
||||
for asset in $(gh release view nightly --json assets --jq '.assets[].name'); do
|
||||
gh release delete-asset nightly "$asset" --yes
|
||||
done
|
||||
|
||||
# Update release notes
|
||||
gh release edit nightly --notes-file changelog.md
|
||||
|
||||
# Upload new assets
|
||||
gh release upload nightly ../*.* --clobber
|
||||
|
||||
- name: ⬆️ Publish x86_64 Snap package
|
||||
if: ${{ steps.check_commits.outputs.should_run == 'true' }}
|
||||
continue-on-error: true
|
||||
uses: snapcore/action-publish@v1
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }}
|
||||
with:
|
||||
snap: imhex-${{ env.IMHEX_VERSION }}-x86_64.snap
|
||||
release: edge
|
||||
|
||||
- name: ⬆️ Publish arm64 Snap package
|
||||
if: ${{ steps.check_commits.outputs.should_run == 'true' }}
|
||||
continue-on-error: true
|
||||
uses: snapcore/action-publish@v1
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }}
|
||||
with:
|
||||
snap: imhex-${{ env.IMHEX_VERSION }}-arm64.snap
|
||||
release: edge
|
||||
|
||||
website_update:
|
||||
name: 🌍 Update ImHex Landing Website
|
||||
needs: nightly-release
|
||||
runs-on: ubuntu-24.04
|
||||
env:
|
||||
WEBSITE_DISPATCH_TOKEN: ${{ secrets.WEBSITE_DISPATCH_TOKEN }}
|
||||
steps:
|
||||
- name: ✉️ Dispatch Landing page update
|
||||
if: ${{ env.WEBSITE_DISPATCH_TOKEN != '' }}
|
||||
uses: peter-evans/repository-dispatch@v4
|
||||
with:
|
||||
token: ${{ secrets.WEBSITE_DISPATCH_TOKEN }}
|
||||
repository: WerWolv/ImHexWebsite
|
||||
event-type: update_page
|
||||
139
.github/workflows/release.yml
vendored
139
.github/workflows/release.yml
vendored
@@ -7,10 +7,16 @@ on:
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
commit_hash:
|
||||
type: string
|
||||
description: 'The commit hash to build (defaults to the latest commit on the default branch)'
|
||||
required: false
|
||||
default: ''
|
||||
|
||||
jobs:
|
||||
release-update-repos:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-24.04
|
||||
name: Release Update Repos
|
||||
|
||||
steps:
|
||||
@@ -25,7 +31,7 @@ jobs:
|
||||
project_version=`cat ImHex/VERSION`
|
||||
tag_version="${{github.event.release.tag_name}}"
|
||||
tag_version="${tag_version:1}"
|
||||
if [ "$project_version" != "$tag_version" ]; then
|
||||
if [ "$project_version" != "$tag_version" ] && [ ! -z "$tag_version" ]; then
|
||||
echo "::warning::$project_version and $tag_version are not the same ! Refusing to populate release"
|
||||
exit 1
|
||||
fi
|
||||
@@ -41,6 +47,7 @@ jobs:
|
||||
tag: ImHex-v${{ env.IMHEX_VERSION }}
|
||||
repo: PatternLanguage
|
||||
token: ${{ secrets.RELEASE_TOKEN }}
|
||||
skipIfReleaseExists: true
|
||||
|
||||
- name: 🎫 Create ImHex-Patterns release
|
||||
uses: ncipollo/release-action@v1
|
||||
@@ -51,6 +58,7 @@ jobs:
|
||||
tag: ImHex-v${{ env.IMHEX_VERSION }}
|
||||
repo: ImHex-Patterns
|
||||
token: ${{ secrets.RELEASE_TOKEN }}
|
||||
skipIfReleaseExists: true
|
||||
|
||||
- name: 🎫 Create imhex-download-sdk release
|
||||
uses: ncipollo/release-action@v1
|
||||
@@ -61,11 +69,13 @@ jobs:
|
||||
tag: v${{ env.IMHEX_VERSION }}
|
||||
repo: imhex-download-sdk
|
||||
token: ${{ secrets.RELEASE_TOKEN }}
|
||||
skipIfReleaseExists: true
|
||||
|
||||
release-upload-artifacts:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-24.04
|
||||
name: Release Upload Artifacts
|
||||
|
||||
outputs:
|
||||
IMHEX_VERSION: ${{ steps.verify_version.outputs.IMHEX_VERSION }}
|
||||
steps:
|
||||
- name: 🧰 Checkout
|
||||
uses: actions/checkout@v4
|
||||
@@ -74,29 +84,32 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: 📜 Verify version and set version variable
|
||||
id: verify_version
|
||||
run: |
|
||||
set -x
|
||||
project_version=`cat ImHex/VERSION`
|
||||
tag_version="${{github.event.release.tag_name}}"
|
||||
tag_version="${tag_version:1}"
|
||||
if [ "$project_version" != "$tag_version" ]; then
|
||||
if [ "$project_version" != "$tag_version" ] && [ ! -z "$tag_version" ]; then
|
||||
echo "::warning::$project_version and $tag_version are not the same ! Refusing to populate release"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "IMHEX_VERSION=$project_version" >> $GITHUB_ENV
|
||||
echo "IMHEX_VERSION=$project_version" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: 🗜️ Create tarball from sources with dependencies
|
||||
run: tar --exclude-vcs -czvf Full.Sources.tar.gz ImHex
|
||||
|
||||
- name: ⬇️ Download artifacts from latest workflow
|
||||
uses: dawidd6/action-download-artifact@v2
|
||||
uses: dawidd6/action-download-artifact@v6
|
||||
with:
|
||||
github_token: ${{secrets.GITHUB_TOKEN}}
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
workflow: build.yml
|
||||
branch: ${{ github.event.release.target_commitish }}
|
||||
workflow_conclusion: success
|
||||
skip_unpack: true
|
||||
commit: ${{ github.event.inputs.commit_hash }}
|
||||
|
||||
- name: 🗜️ Unzip files when needed
|
||||
run: |
|
||||
@@ -115,22 +128,87 @@ jobs:
|
||||
|
||||
- name: 🟩 Rename artifacts when needed
|
||||
run: |
|
||||
mv "Windows Portable x86_64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-x86_64.zip
|
||||
mv "Windows Portable NoGPU x86_64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-NoGPU-x86_64.zip
|
||||
mv "Windows Portable x86_64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-x86_64.zip || true
|
||||
mv "Windows Portable arm64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-arm64.zip || true
|
||||
mv "Windows Portable NoGPU x86_64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-NoGPU-x86_64.zip || true
|
||||
mv "ImHex Web.zip" imhex-${{ env.IMHEX_VERSION }}-Web.zip || true
|
||||
rm artifact.tar || true
|
||||
|
||||
- name: ⬆️ Upload Unsigned x86_64 Windows Installer
|
||||
uses: actions/upload-artifact@v4
|
||||
id: upload-installer-x86_64
|
||||
with:
|
||||
if-no-files-found: error
|
||||
name: Windows Installer x86_64
|
||||
path: |
|
||||
imhex-*-x86_64.msi
|
||||
|
||||
- name: ⬆️ Upload Unsigned ARM64 Windows Installer
|
||||
if: false
|
||||
uses: actions/upload-artifact@v4
|
||||
id: upload-installer-arm64
|
||||
with:
|
||||
if-no-files-found: error
|
||||
name: Windows Installer ARM64
|
||||
path: |
|
||||
imhex-*-arm64.msi
|
||||
|
||||
- name: 🗑️ Delete unsigned installers
|
||||
run: |
|
||||
rm imhex-*-x86_64.msi
|
||||
|
||||
- name: 🗝️ Sign x86_64 Installer
|
||||
uses: signpath/github-action-submit-signing-request@v1
|
||||
with:
|
||||
api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
|
||||
organization-id: 'f605a0e8-86cd-411c-bb6f-e05025afcc33'
|
||||
project-slug: 'ImHex'
|
||||
signing-policy-slug: 'release-signing'
|
||||
github-artifact-id: '${{ steps.upload-installer-x86_64.outputs.artifact-id }}'
|
||||
wait-for-completion: true
|
||||
output-artifact-directory: '.'
|
||||
|
||||
- name: 🗝️ Sign ARM64 Installer
|
||||
if: false
|
||||
uses: signpath/github-action-submit-signing-request@v1
|
||||
with:
|
||||
api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
|
||||
organization-id: 'f605a0e8-86cd-411c-bb6f-e05025afcc33'
|
||||
project-slug: 'ImHex'
|
||||
signing-policy-slug: 'release-signing'
|
||||
github-artifact-id: '${{ steps.upload-installer-arm64.outputs.artifact-id }}'
|
||||
wait-for-completion: true
|
||||
output-artifact-directory: '.'
|
||||
|
||||
- name: ⬆️ Upload everything to release
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@4634c16e79c963813287e889244c50009e7f0981
|
||||
with:
|
||||
files: '*'
|
||||
|
||||
release-update-aur:
|
||||
name: Release update AUR package
|
||||
needs: release-upload-artifacts
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: 🧰 Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ImHex
|
||||
|
||||
- name: ⬇️ Download artifacts
|
||||
run: |
|
||||
tagname=${GITHUB_REF#refs/tags/}
|
||||
version=${tagname#v}
|
||||
wget https://github.com/WerWolv/ImHex/releases/download/${tagname}/imhex-${version}-ArchLinux-x86_64.pkg.tar.zst
|
||||
|
||||
- name: ✒️ Prepare PKGBUILD
|
||||
run: |
|
||||
set -x
|
||||
cp ImHex/dist/Arch/PKGBUILD .
|
||||
|
||||
hash=`md5sum imhex-${{ env.IMHEX_VERSION }}-ArchLinux-x86_64.pkg.tar.zst | cut -d ' ' -f 1`
|
||||
hash=`md5sum imhex-${{ needs.release-upload-artifacts.outputs.IMHEX_VERSION }}-ArchLinux-x86_64.pkg.tar.zst | cut -d ' ' -f 1`
|
||||
|
||||
sed -i 's/%version%/${{ env.IMHEX_VERSION }}/g' PKGBUILD
|
||||
sed -i 's/%version%/${{ needs.release-upload-artifacts.outputs.IMHEX_VERSION }}/g' PKGBUILD
|
||||
sed -i "s/(SKIP)/($hash)/g" PKGBUILD
|
||||
|
||||
- name: ⬆️ Publish AUR package
|
||||
@@ -144,10 +222,10 @@ jobs:
|
||||
pkgname: imhex-bin
|
||||
pkgbuild: ./PKGBUILD
|
||||
commit_username: iTrooz
|
||||
commit_email: itrooz@protonmail.com
|
||||
commit_email: hey@itrooz.fr
|
||||
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
|
||||
commit_message: Bump to version ${{ env.IMHEX_VERSION }}
|
||||
ssh_keyscan_types: rsa,dsa,ecdsa,ed25519
|
||||
commit_message: Bump to version ${{ needs.release-upload-artifacts.outputs.IMHEX_VERSION }}
|
||||
ssh_keyscan_types: rsa,ecdsa,ed25519
|
||||
|
||||
release-update-winget:
|
||||
name: Release update winget package
|
||||
@@ -158,6 +236,7 @@ jobs:
|
||||
shell: pwsh
|
||||
run: |
|
||||
iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe
|
||||
|
||||
- name: ⬆️ Update winget manifest
|
||||
shell: pwsh
|
||||
env:
|
||||
@@ -171,3 +250,33 @@ jobs:
|
||||
if ($version -notmatch "-") {
|
||||
.\wingetcreate.exe submit .\manifests\w\WerWolv\ImHex\${version}\ --token $env:WINGET_GITHUB_TOKEN
|
||||
}
|
||||
|
||||
release-update-snapstore:
|
||||
name: Release update snapstore package
|
||||
needs: release-upload-artifacts
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: ⬇️ Download artifacts
|
||||
run: |
|
||||
tagname=${GITHUB_REF#refs/tags/}
|
||||
version=${tagname#v}
|
||||
wget https://github.com/WerWolv/ImHex/releases/download/${tagname}/imhex-${version}-x86_64.snap
|
||||
wget https://github.com/WerWolv/ImHex/releases/download/${tagname}/imhex-${version}-arm64.snap
|
||||
|
||||
- name: ⬆️ Publish x86_64 Snap package
|
||||
continue-on-error: true
|
||||
uses: snapcore/action-publish@v1
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }}
|
||||
with:
|
||||
snap: imhex-${{ needs.release-upload-artifacts.outputs.IMHEX_VERSION }}-x86_64.snap
|
||||
release: stable
|
||||
|
||||
- name: ⬆️ Publish arm64 Snap package
|
||||
continue-on-error: true
|
||||
uses: snapcore/action-publish@v1
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }}
|
||||
with:
|
||||
snap: imhex-${{ needs.release-upload-artifacts.outputs.IMHEX_VERSION }}-arm64.snap
|
||||
release: stable
|
||||
31
.github/workflows/stale_issues.yml
vendored
Normal file
31
.github/workflows/stale_issues.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
name: Close inactive issues
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 1 * * 0"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
close-issues:
|
||||
if: false # Disabled for now until I actually have time to take care of all these issues
|
||||
runs-on: ubuntu-24.04
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v5
|
||||
with:
|
||||
operations-per-run: '200'
|
||||
ascending: true
|
||||
days-before-issue-stale: 334
|
||||
days-before-issue-close: 30
|
||||
stale-issue-label: "stale"
|
||||
stale-issue-message: |
|
||||
This issue is marked stale as it has been open for 11 months without activity.
|
||||
Please try the latest ImHex version. (Avaiable here: https://imhex.download/ for release and https://imhex.download/#nightly for development version)
|
||||
If the issue persists on the latest version, please make a comment on this issue again
|
||||
|
||||
Without response, this issue will be closed in one month.
|
||||
close-issue-message: ""
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
65
.github/workflows/tests.yml
vendored
65
.github/workflows/tests.yml
vendored
@@ -2,15 +2,21 @@ name: "Unit Tests"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
branches:
|
||||
- 'master'
|
||||
- 'releases/**'
|
||||
- 'tests/**'
|
||||
- 'feature/**'
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
branches:
|
||||
- 'master'
|
||||
- 'releases/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
name: 🧪 Unit Tests
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
@@ -29,14 +35,6 @@ jobs:
|
||||
restore-keys: ${{ runner.os }}-tests-build
|
||||
max-size: 50M
|
||||
|
||||
|
||||
- name: 📜 Restore CMakeCache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
build/CMakeCache.txt
|
||||
key: ${{ runner.os }}-tests-build-${{ hashFiles('**/CMakeLists.txt') }}
|
||||
|
||||
- name: ⬇️ Install dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
@@ -47,21 +45,50 @@ jobs:
|
||||
set -x
|
||||
mkdir -p build
|
||||
cd build
|
||||
CC=gcc-12 CXX=g++-12 cmake \
|
||||
-DCMAKE_BUILD_TYPE=Debug \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_C_FLAGS="-fuse-ld=lld -fsanitize=address,leak,undefined -fno-sanitize-recover=all" \
|
||||
-DCMAKE_CXX_FLAGS="-fuse-ld=lld -fsanitize=address,leak,undefined -fno-sanitize-recover=all" \
|
||||
-DIMHEX_OFFLINE_BUILD=ON \
|
||||
CC=gcc-14 CXX=g++-14 cmake \
|
||||
-DCMAKE_BUILD_TYPE=Debug \
|
||||
-DIMHEX_ENABLE_UNIT_TESTS=ON \
|
||||
-DIMHEX_ENABLE_PLUGIN_TESTS=ON \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_C_FLAGS="-fuse-ld=lld -fsanitize=address,leak,undefined -fno-sanitize-recover=all --coverage" \
|
||||
-DCMAKE_CXX_FLAGS="-fuse-ld=lld -fsanitize=address,leak,undefined -fno-sanitize-recover=all --coverage" \
|
||||
-DIMHEX_OFFLINE_BUILD=ON \
|
||||
-G Ninja \
|
||||
..
|
||||
make -j4 unit_tests
|
||||
ninja unit_tests
|
||||
ninja imhex_all
|
||||
|
||||
- name: 🧪 Perform plcli Integration Tests
|
||||
run: |
|
||||
cd lib/external/pattern_language
|
||||
python tests/integration/integration.py ../../../build/imhex --pl
|
||||
|
||||
- name: 🧪 Perform Unit Tests
|
||||
run: |
|
||||
cd build
|
||||
ctest --output-on-failure
|
||||
|
||||
# Generate report from all gcov .gcda files
|
||||
#- name: 🧪 Generate coverage report
|
||||
# run: |
|
||||
# sudo apt install python3-pip python3-venv
|
||||
# python3 -m venv venv
|
||||
# . venv/bin/activate
|
||||
# pip3 install gcovr
|
||||
# cd build
|
||||
# gcovr --gcov-executable /usr/bin/gcov-14 --exclude '.*/yara_rules/' --exclude '.*/third_party/' --exclude '.*/external/' --root .. --xml coverage_report.xml --verbose --gcov-ignore-errors all
|
||||
#
|
||||
#- name: Upload coverage reports to Codecov
|
||||
# env:
|
||||
# CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
# if: ${{ env.CODECOV_TOKEN }}
|
||||
# uses: codecov/codecov-action@v4
|
||||
# with:
|
||||
# fail_ci_if_error: true
|
||||
# token: ${{ secrets.CODECOV_TOKEN }}
|
||||
# file: build/coverage_report.xml
|
||||
|
||||
langs:
|
||||
name: 🧪 Langs
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
27
.gitignore
vendored
27
.gitignore
vendored
@@ -1,13 +1,24 @@
|
||||
.vscode/
|
||||
.idea/
|
||||
/.vscode/
|
||||
/.idea/
|
||||
/.kdev4/
|
||||
/.vs/
|
||||
.venv/
|
||||
|
||||
cmake-build-*/
|
||||
build*/
|
||||
local/
|
||||
venv/
|
||||
/cmake-build-*/
|
||||
/build*/
|
||||
/local/
|
||||
/venv/
|
||||
/.cache/
|
||||
/install/
|
||||
/out/
|
||||
|
||||
/dist/ImHex.run.xml
|
||||
|
||||
*.mgc
|
||||
*.kdev4
|
||||
imgui.ini
|
||||
.DS_Store
|
||||
./CMakeUserPresets.json
|
||||
Brewfile.lock.json
|
||||
CMakeUserPresets.json
|
||||
Brewfile.lock.json
|
||||
|
||||
vcpkg.json
|
||||
|
||||
23
.gitmodules
vendored
23
.gitmodules
vendored
@@ -18,10 +18,14 @@
|
||||
path = lib/third_party/capstone
|
||||
url = https://github.com/capstone-engine/capstone
|
||||
ignore = dirty
|
||||
[submodule "lib/third_party/jthread/jthread"]
|
||||
path = lib/third_party/jthread/jthread
|
||||
url = https://github.com/josuttis/jthread
|
||||
ignore = dirty
|
||||
[submodule "lib/third_party/edlib"]
|
||||
path = lib/third_party/edlib
|
||||
url = https://github.com/Martinsos/edlib
|
||||
ignore = dirty
|
||||
[submodule "lib/third_party/lunasvg"]
|
||||
path = lib/third_party/lunasvg
|
||||
url = https://github.com/sammycage/lunasvg
|
||||
ignore = dirty
|
||||
|
||||
[submodule "lib/external/libromfs"]
|
||||
path = lib/external/libromfs
|
||||
@@ -35,7 +39,10 @@
|
||||
|
||||
[submodule "lib/third_party/HashLibPlus"]
|
||||
path = lib/third_party/HashLibPlus
|
||||
url = https://github.com/WerWolv/HashLibPlus
|
||||
[submodule "lib/third_party/edlib"]
|
||||
path = lib/third_party/edlib
|
||||
url = https://github.com/Martinsos/edlib
|
||||
url = https://github.com/WerWolv/HashLibPlus
|
||||
[submodule "lib/external/disassembler"]
|
||||
path = lib/external/disassembler
|
||||
url = https://github.com/WerWolv/Disassembler
|
||||
[submodule "lib/third_party/md4c"]
|
||||
path = lib/third_party/md4c
|
||||
url = https://github.com/mity/md4c
|
||||
@@ -1,42 +1,68 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
cmake_minimum_required(VERSION 3.25)
|
||||
|
||||
# Options
|
||||
option(IMHEX_PLUGINS_IN_SHARE "Put the plugins in share/imhex/plugins instead of lib[..]/imhex/plugins (Linux only)" OFF)
|
||||
## General
|
||||
option(IMHEX_STRIP_RELEASE "Strip the release builds" ON )
|
||||
option(IMHEX_OFFLINE_BUILD "Enable offline build" OFF)
|
||||
option(IMHEX_IGNORE_BAD_CLONE "Disable the bad clone prevention checks" OFF)
|
||||
option(IMHEX_PATTERNS_PULL_MASTER "Download latest files from master branch of the ImHex-Patterns repo" OFF)
|
||||
option(IMHEX_IGNORE_BAD_COMPILER "Allow compiling with an unsupported compiler" OFF)
|
||||
option(IMHEX_USE_GTK_FILE_PICKER "Use GTK file picker instead of xdg-desktop-portals (Linux only)" OFF)
|
||||
option(IMHEX_DISABLE_STACKTRACE "Disables support for printing stack traces" OFF)
|
||||
option(IMHEX_BUNDLE_DOTNET "Bundle .NET runtime" ON )
|
||||
option(IMHEX_ENABLE_LTO "Enables Link Time Optimizations if possible" OFF)
|
||||
option(IMHEX_USE_DEFAULT_BUILD_SETTINGS "Use default build settings" OFF)
|
||||
option(IMHEX_STRICT_WARNINGS "Enable most available warnings and treat them as errors" ON )
|
||||
option(IMHEX_STATIC_LINK_PLUGINS "Statically link all plugins into the main executable" OFF)
|
||||
option(IMHEX_GENERATE_PACKAGE "Specify if a native package should be built. (Windows and MacOS only)" OFF)
|
||||
option(IMHEX_BUILD_HARDENING "Enable hardening flags for build" ON )
|
||||
option(IMHEX_GENERATE_PACKAGE "Specify if a cpack package should be built. (Windows only)" OFF)
|
||||
option(IMHEX_MACOS_CREATE_BUNDLE "Creates a macOS .app bundle when building (macOS only)" ON )
|
||||
option(IMHEX_ENABLE_UNITY_BUILD "Enables building ImHex as a unity build." OFF)
|
||||
option(IMHEX_ENABLE_PRECOMPILED_HEADERS "Enable precompiled headers" OFF)
|
||||
option(IMHEX_ENABLE_CXX_MODULES "Enable C++20 Module compilation. Testing only!" OFF)
|
||||
option(IMHEX_ENABLE_CPPCHECK "Enable cppcheck static analysis" OFF)
|
||||
option(IMHEX_BUNDLE_PLUGIN_SDK "Enable bundling of Plugin SDK into install package" ON )
|
||||
## Testing
|
||||
option(IMHEX_ENABLE_UNIT_TESTS "Enable building unit tests" ON )
|
||||
option(IMHEX_ENABLE_IMGUI_TEST_ENGINE "Enable the ImGui Test Engine" OFF)
|
||||
option(IMHEX_ENABLE_STD_ASSERTS "Enable debug asserts in the C++ std library. (Breaks Plugin ABI!)" OFF)
|
||||
## Debug info
|
||||
option(IMHEX_COMPRESS_DEBUG_INFO "Compress debug information" ON )
|
||||
option(IMHEX_GENERATE_PDBS "Enable generating PDB files in non-debug builds (Windows only)" OFF)
|
||||
option(IMHEX_REPLACE_DWARF_WITH_PDB "Remove DWARF information from binaries when generating PDBS (Windows only)" OFF)
|
||||
option(IMHEX_ENABLE_STD_ASSERTS "Enable debug asserts in the C++ std library. (Breaks Plugin ABI!)" OFF)
|
||||
option(IMHEX_STRICT_WARNINGS "Enable most available warnings and treat them as errors" ON )
|
||||
option(IMHEX_DISABLE_STACKTRACE "Disables support for printing stack traces" OFF)
|
||||
## Plugins
|
||||
option(IMHEX_STATIC_LINK_PLUGINS "Statically link all plugins into the main executable" OFF)
|
||||
option(IMHEX_ENABLE_PLUGIN_TESTS "Enable building plugin tests" ON )
|
||||
option(IMHEX_INCLUDE_PLUGINS "Semicolon-separated list of plugins to include in the build (empty = build all)" "" )
|
||||
option(IMHEX_EXCLUDE_PLUGINS "Semicolon-separated list of plugins to exclude from the build" "" )
|
||||
|
||||
set(IMHEX_BASE_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(CMAKE_MODULE_PATH "${IMHEX_BASE_FOLDER}/cmake/modules")
|
||||
|
||||
# Optional IDE support
|
||||
include("${IMHEX_BASE_FOLDER}/cmake/ide_helpers.cmake")
|
||||
|
||||
# Basic compiler and cmake configurations
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
set(CMAKE_CXX_SCAN_FOR_MODULES ${IMHEX_ENABLE_CXX_MODULES})
|
||||
set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON)
|
||||
set(IMHEX_BASE_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(CMAKE_MODULE_PATH "${IMHEX_BASE_FOLDER}/cmake/modules")
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
include("${IMHEX_BASE_FOLDER}/cmake/build_helpers.cmake")
|
||||
|
||||
# Setup project
|
||||
loadVersion(IMHEX_VERSION)
|
||||
loadVersion(IMHEX_VERSION IMHEX_VERSION_PLAIN)
|
||||
setVariableInParent(IMHEX_VERSION ${IMHEX_VERSION})
|
||||
|
||||
configureCMake()
|
||||
project(imhex
|
||||
project(ImHex
|
||||
LANGUAGES C CXX
|
||||
VERSION ${IMHEX_VERSION}
|
||||
VERSION ${IMHEX_VERSION_PLAIN}
|
||||
DESCRIPTION "The ImHex Hex Editor"
|
||||
HOMEPAGE_URL "https://imhex.werwolv.net"
|
||||
)
|
||||
configureProject()
|
||||
|
||||
# Add ImHex sources
|
||||
add_custom_target(imhex_all ALL)
|
||||
|
||||
# Make sure project is configured correctly
|
||||
setDefaultBuiltTypeIfUnset()
|
||||
@@ -54,17 +80,27 @@ configurePackingResources()
|
||||
setUninstallTarget()
|
||||
addBundledLibraries()
|
||||
|
||||
# Add ImHex sources
|
||||
add_custom_target(imhex_all ALL)
|
||||
|
||||
add_subdirectory(lib/libimhex)
|
||||
add_subdirectory(main)
|
||||
addPluginDirectories()
|
||||
add_subdirectory(lib/trace)
|
||||
|
||||
# Add unit tests
|
||||
enable_testing()
|
||||
add_subdirectory(tests EXCLUDE_FROM_ALL)
|
||||
if (IMHEX_ENABLE_UNIT_TESTS)
|
||||
if (NOT TARGET unit_tests)
|
||||
enable_testing()
|
||||
add_custom_target(unit_tests)
|
||||
add_subdirectory(tests EXCLUDE_FROM_ALL)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Configure more resources that will be added to the install package
|
||||
if (IMHEX_BUNDLE_PLUGIN_SDK)
|
||||
generateSDKDirectory()
|
||||
endif()
|
||||
|
||||
# Handle package generation
|
||||
createPackage()
|
||||
generatePDBs()
|
||||
generateSDKDirectory()
|
||||
|
||||
# Accommodate IDEs with FOLDER support
|
||||
tweakTargetsForIDESupport()
|
||||
|
||||
@@ -28,7 +28,47 @@
|
||||
"displayName": "x86_64 Build",
|
||||
"description": "x86_64 build",
|
||||
"inherits": [ "base" ]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "xcode",
|
||||
"inherits": [ "base" ],
|
||||
|
||||
"displayName": "Xcode",
|
||||
"description": "Xcode with external compiler override",
|
||||
"generator": "Xcode",
|
||||
|
||||
"cacheVariables": {
|
||||
"CMAKE_C_COMPILER": "clang",
|
||||
|
||||
"CMAKE_CXX_COMPILER": "clang++",
|
||||
"CMAKE_CXX_FLAGS": "-fexperimental-library -Wno-shorten-64-to-32 -Wno-deprecated-declarations",
|
||||
|
||||
"IMHEX_IDE_HELPERS_OVERRIDE_XCODE_COMPILER": "ON"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "vs2022",
|
||||
"displayName": "Visual Studio 2022",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}",
|
||||
"cacheVariables": {
|
||||
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
|
||||
"VCPKG_MANIFEST_DIR": "${sourceDir}/dist"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "vs2022-x86",
|
||||
"displayName": "Visual Studio 2022 x86",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}",
|
||||
"cacheVariables": {
|
||||
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
|
||||
"VCPKG_MANIFEST_DIR": "${sourceDir}/dist"
|
||||
},
|
||||
"environment": {
|
||||
"VSCMD_ARG_TGT_ARCH": "x86"
|
||||
}
|
||||
}
|
||||
],
|
||||
"buildPresets": [
|
||||
{
|
||||
|
||||
@@ -10,9 +10,7 @@ This document is a guide for developers who want to contribute to ImHex in any w
|
||||
|
||||
If you'd like to add new features, the best way to start is by joining our Discord and telling us about your idea. We can then discuss the best way to implement it and how it should be integrated into ImHex or if it should be done in a separate plugin.
|
||||
|
||||
There are standalone plugin templates that use ImHex as a submodule. You can find them here:
|
||||
- https://github.com/WerWolv/ImHex-Cpp-Plugin-Template
|
||||
- https://github.com/WerWolv/ImHex-Rust-Plugin-Template
|
||||
There are standalone plugin templates that use ImHex as a submodule. You can find them located in the README's [Plugin Development](README.md#plugin-development) section.
|
||||
|
||||
### Adding a new language
|
||||
|
||||
@@ -32,18 +30,18 @@ ImHex is written in C++ and usually uses the latest compiler and standard librar
|
||||
### Structure
|
||||
|
||||
- `main`: Contains the main application code
|
||||
- Important to understand here is that the main ImHex application is basically just an empty shell.
|
||||
- Important to understand here is that the main ImHex application is basically just an empty shell.
|
||||
- All it does is create a Window and a OpenGL context using GLFW, load all available plugins, properly configure ImGui and render it to the screen.
|
||||
- Everything else is done inside of plugins. ImHex comes with a few plugins by default, most notably the `builtin` plugin which contains the majority of the application code.
|
||||
- In most cases, this code doesn't need to be modified. Most features should be self-contained inside a plugin.
|
||||
- `lib`
|
||||
- `libimhex`: Contains all helper utilities as well as various APIs for plugins to interact with ImHex.
|
||||
- The library's main purpose is for Dependency Inversion. The ImHex main application as well as libimhex do not know about the existence of plugins at build time. Plugins and the main application instead link against libimhex and use it as a common API to interact with each other.
|
||||
- Since libimhex is a doesn't know about the existence of plugins, it cannot depend on any of them. This includes localizations and things that get registered by plugins after launch.
|
||||
- Since libimhex itself doesn't know about the existence of plugins, it cannot depend on any of them. This includes localizations and things that get registered by plugins after launch.
|
||||
- Even if the builtin plugin is technically always available, it is still a plugin and should be treated that way.
|
||||
- All important APIs can be found in the `hex/api` include directory and are documented in the respective header file.
|
||||
- `external`: All libraries that need custom patches or aren't typically available in package managers go into here.
|
||||
- If you'd like to add new features to the Pattern language, please make a PR to https://github.com/WerWolv/PatternLanguage instead. ImHex usually depends on the latest commit of the master branch of this repo.
|
||||
- If you'd like to add new features to the Pattern language, please make a PR to https://github.com/WerWolv/PatternLanguage instead. ImHex usually depends on the latest commit of the master branch of this repo.
|
||||
- `plugins`
|
||||
- `builtin`: The builtin plugin. Contains the majority of the application code.
|
||||
- It's the heart of ImHex's functionality. It contains most of the default views, providers, etc. so if you want to add new functionality to ImHex, this is the place to start.
|
||||
|
||||
@@ -32,6 +32,13 @@ To install the Flatpak, make sure you have the Flathub repository added to your
|
||||
|
||||
```bash
|
||||
flatpak install flathub net.werwolv.ImHex
|
||||
# or install the file directly
|
||||
flatpak install ./imhex-*.flatpak
|
||||
```
|
||||
|
||||
#### Snap
|
||||
```bash
|
||||
snap install ./imhex-*.snap
|
||||
```
|
||||
|
||||
#### Ubuntu DEB Package
|
||||
|
||||
8
PRIVACY.md
Normal file
8
PRIVACY.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# Privacy Policy
|
||||
|
||||
ImHex collects **anonymous** user statistics based on the user's preferences which are set on first launch and can be opted in or out at any moment through the settings interface.
|
||||
These statistics contain basic system information such as: ImHex Version, System Architecture, OS, OS Version or Linux Distro version of the GPU in use. This information is linked to a randomly generated ID which cannot be used to identify a specific user.
|
||||
|
||||
Additionally, we allow uploading of anonymized crash log files in case of an error. These are never uploaded automatically but only after explicit consent by the user. This decision is not saved so logs can be uploaded on a per-error basis.
|
||||
|
||||
Information collected may be analyzed by members of our development team and will never be shared with third parties outside of the team. We may occasionally share general usage statistics publically in a summarized manner (For example a graph stating 70% of users are using a specific OS). We will never share information about individual users, even if they are anonymous.
|
||||
123
README.md
123
README.md
@@ -1,14 +1,16 @@
|
||||
<a href="https://imhex.werwolv.net">
|
||||
<h1 align="center">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="./resources/projects/logo_text_light.svg">
|
||||
<img height="100px" src="./resources/projects/logo_text_dark.svg">
|
||||
<img height="300px" style="margin: 0; padding: 0" src="./resources/dist/common/logo/ImHexLogoSVGBG.svg">
|
||||
</picture>
|
||||
</h1>
|
||||
</a>
|
||||
|
||||
<p align="center">A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.</p>
|
||||
|
||||
<p align="center">
|
||||
A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.
|
||||
<br>
|
||||
<a href="https://itinerarium.github.io/phoneme-synthesis/?w=/'ˈɪmhɛks/"><strong>/ˈɪmhɛks/</strong></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a title="'Build' workflow Status" href="https://github.com/WerWolv/ImHex/actions?query=workflow%3ABuild"><img alt="'Build' workflow Status" src="https://img.shields.io/github/actions/workflow/status/WerWolv/ImHex/build.yml?longCache=true&style=for-the-badge&label=Build&logoColor=fff&logo=GitHub%20Actions&branch=master"></a>
|
||||
<a title="Discord Server" href="https://discord.gg/X63jZ36xBY"><img alt="Discord Server" src="https://img.shields.io/discord/789833418631675954?label=Discord&logo=Discord&logoColor=fff&style=for-the-badge"></a>
|
||||
@@ -27,17 +29,26 @@
|
||||
|
||||
## Supporting
|
||||
|
||||
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
|
||||
If you like my work, please consider supporting me on GitHub Sponsors, Ko-Fi or PayPal. Thanks a lot!
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/sponsors/WerWolv"><img src="https://werwolv.net/assets/github_banner.png" alt="GitHub donate button" /></a>
|
||||
<a href="https://www.patreon.com/werwolv"><img src="https://c5.patreon.com/external/logo/become_a_patron_button.png" alt="Patreon donate button" /></a>
|
||||
<a href="https://ko-fi.com/WerWolv"><img src="https://werwolv.net/assets/kofi_banner.png" alt="Ko-Fi donate button" /></a>
|
||||
<a href="https://werwolv.net/donate"><img src="https://werwolv.net/assets/paypal_banner.png" alt="PayPal donate button" /></a>
|
||||
</p>
|
||||
|
||||
### Notable Sponsors
|
||||
| | |
|
||||
|:---------------------------------------------------------------------------------------------------:|-----------------------------------------------------------------------------------|
|
||||
| [](https://www.jetbrains.com) | JetBrains, providing us with free All Products Pack licenses for development |
|
||||
| [](https://signpath.io/) | SignPath, providing us with free Code Signing Certificates for our Windows builds |
|
||||
| [](https://aws.amazon.com) | Amazon, providing us with free AWS Cloud Credits for our CI |
|
||||
|
||||
Would you like to appear here as well? Contact us at [imhex@werwolv.net](mailto:imhex@werwolv.net)!
|
||||
|
||||
## Screenshots
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
<details>
|
||||
<summary><strong>More Screenshots</strong></summary>
|
||||
@@ -105,11 +116,12 @@ If you like my work, please consider supporting me on GitHub Sponsors, Patreon o
|
||||
- Base64 files
|
||||
- IPS and IPS32 patches
|
||||
- Markdown reports
|
||||
- Binary arrays for various programming languages
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>Data Inspector</strong></summary>
|
||||
|
||||
- Interpreting data as many different types with endianess, decimal, hexadecimal and octal support and bit inversion
|
||||
- Interpreting data as many different types with endianness, decimal, hexadecimal and octal support and bit inversion
|
||||
- Unsigned and signed integers (8, 16, 24, 32, 48, 64 bit)
|
||||
- Floats (16, 32, 64 bit)
|
||||
- Signed and Unsigned LEB128
|
||||
@@ -138,8 +150,13 @@ If you like my work, please consider supporting me on GitHub Sponsors, Patreon o
|
||||
- GDB Server
|
||||
- Access the RAM of a running process or embedded devices through GDB
|
||||
- Intel Hex and Motorola SREC data
|
||||
- Base64 encoded data
|
||||
- UDP Packets
|
||||
- Support for displaying raw data received over UDP
|
||||
- Process Memory
|
||||
- Inspect the entire address space of a running process
|
||||
- Remote Files over SSH with SFTP
|
||||
- Support for loading files from remote servers using SSH and SFTP
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>Data searching</strong></summary>
|
||||
@@ -158,7 +175,7 @@ If you like my work, please consider supporting me on GitHub Sponsors, Patreon o
|
||||
- Numeric Value search
|
||||
- Search for signed/unsigned integers and floats
|
||||
- Search for ranges of values
|
||||
- Option to specify size and endianess
|
||||
- Option to specify size and endianness
|
||||
- Option to ignore unaligned values
|
||||
</details>
|
||||
<details>
|
||||
@@ -210,6 +227,7 @@ If you like my work, please consider supporting me on GitHub Sponsors, Patreon o
|
||||
- WebAssembly
|
||||
- MOS65XX
|
||||
- Berkeley Packet Filter
|
||||
- Support for writing custom disassemblers for your own architectures
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>Bookmarks</strong></summary>
|
||||
@@ -259,6 +277,7 @@ If you like my work, please consider supporting me on GitHub Sponsors, Patreon o
|
||||
- Division by invariant multiplication calculator
|
||||
- TCP Client/Server
|
||||
- Euclidean algorithm calculator
|
||||
- HTTP Requests
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>Built-in Content updater</strong></summary>
|
||||
@@ -312,22 +331,28 @@ To use ImHex, the following minimal system requirements need to be met.
|
||||
> ImHex requires a GPU with OpenGL 3.0 support in general.
|
||||
> There are releases available (with the `-NoGPU` suffix) that are software rendered and don't require a GPU, however these can be a lot slower than the GPU accelerated versions.
|
||||
>
|
||||
> If possible at all, make ImHex use the dedicated GPU on your system instead of the integrated one (especially Intel HD GPUs are known to cause issues).
|
||||
> If possible at all, make ImHex use the dedicated GPU on your system instead of the integrated one.
|
||||
> ImHex will usually run fine with integrated GPUs as well but certain Intel HD GPU drivers on Windows are known to cause graphical artifacts.
|
||||
|
||||
- **OS**:
|
||||
- **Windows**: Windows 7 or higher (Windows 10/11 recommended)
|
||||
- **macOS**: macOS 11 (Big Sur) or higher,
|
||||
- **Linux**: "Modern" Linux. The following distributions have official releases available. Other distros are supported through the AppImage and Flatpak releases.
|
||||
- Ubuntu 22.04/23.04
|
||||
- Fedora 36/37
|
||||
- RHEL/AlmaLinux 9
|
||||
- **macOS**: macOS 15 (Sequoia) or higher,
|
||||
- Lower versions should still work too, but you'll need to compile ImHex yourself. The release binaries will NOT work due to GitHub not having any macOS 15 or lower CI runners available.
|
||||
- The macOS build is not signed and will require you to manually allow them in the Security & Privacy settings.
|
||||
- **Linux**: "Modern" Linux. The following distributions have official releases available. Other distros are supported through the AppImage, Flatpak and Snap releases.
|
||||
- Ubuntu and Debian
|
||||
- Fedora
|
||||
- RHEL/AlmaLinux
|
||||
- Arch Linux
|
||||
- **CPU**: x86_64 (64 Bit)
|
||||
- Basically any other distro will work as well when compiling ImHex from sources.
|
||||
- **FreeBSD**: Tested on FreeBSD 14.3
|
||||
- Other versions will most likely work too but are untested
|
||||
- **CPU**: Officially supported are x86, AMD64 and ARM64, though any Little Endian CPU should work.
|
||||
- **GPU**: OpenGL 3.0 or higher
|
||||
- Intel HD drivers are really buggy and often cause graphic artifacts
|
||||
- Integrated Intel HD iGPUs are supported, however certain drivers are known to cause various graphical artifacts, especially on Windows. Use at your own risk.
|
||||
- In case you don't have a GPU available, there are software rendered releases available for Windows and macOS
|
||||
- **RAM**: 256MB, more may be required for more complicated analysis
|
||||
- **Storage**: 100MB
|
||||
- **RAM**: ~50MiB, more is required for more complex analysis
|
||||
- **Storage**: ~100MiB
|
||||
|
||||
## Installing
|
||||
|
||||
@@ -336,8 +361,10 @@ Information on how to install ImHex can be found in the [Install](/INSTALL.md) g
|
||||
## Compiling
|
||||
|
||||
To compile ImHex on any platform, GCC (or Clang) is required with a version that supports C++23 or higher.
|
||||
On macOS, Clang is also required to compile some ObjC code.
|
||||
All releases are being built using latest available GCC.
|
||||
Windows and Linux releases are being built using latest available GCC.
|
||||
MacOS releases are being built using latest available LLVM Clang.
|
||||
|
||||
Important to note is, the MSVC and AppleClang compilers are both **NOT** supported since they're both generally severely outdated and lack features GCC and LLVM Clang have.
|
||||
|
||||
> [!NOTE]
|
||||
> Many dependencies are bundled into the repository using submodules so make sure to clone it using the `--recurse-submodules` option.
|
||||
@@ -348,9 +375,20 @@ For more information, check out the [Compiling](/dist/compiling) guide.
|
||||
## Contributing
|
||||
See [Contributing](/CONTRIBUTING.md)
|
||||
|
||||
## Plugin development
|
||||
|
||||
## Plugin development
|
||||
To develop plugins for ImHex, use the following template project to get started. You then have access to the entirety of libimhex as well as the ImHex API and the Content Registry to interact with ImHex or to add new content.
|
||||
To build a plugin, you will need to use our SDK
|
||||
|
||||
### Getting the SDK locally
|
||||
You can build the SDK by compiling ImHex like this:
|
||||
- `cmake -G Ninja -DIMHEX_BUNDLE_PLUGIN_SDK=ON -B build`
|
||||
- `cd build`
|
||||
- `DESTDIR=install ninja install`
|
||||
The SDK will then be available at `install/usr/local/share/imhex/sdk`. You will need to set the variable `IMHEX_SDK_PATH` to that (absolute) path.
|
||||
|
||||
### Getting the SDK in a Github Actions CI
|
||||
You can use [this action](https://github.com/WerWolv/imhex-download-sdk) to automatically download the SDK to your Github Runner
|
||||
- [ImHex Plugin Template](https://github.com/WerWolv/ImHex-Plugin-Template)
|
||||
|
||||
|
||||
@@ -358,24 +396,30 @@ To develop plugins for ImHex, use the following template project to get started.
|
||||
|
||||
### Contributors
|
||||
|
||||
- [Mary](https://github.com/marysaka) for her immense help porting ImHex to MacOS and help during development
|
||||
- [AxCut](https://github.com/paxcut) for a gigantic amount of contributions to the Pattern Text Editor and tons of other parts of ImHex
|
||||
- [iTrooz](https://github.com/iTrooz) for getting ImHex onto the Web as well as hundreds of contributions in every part of the project
|
||||
- [jumanji144](https://github.com/jumanji144) for huge contributions to the Pattern Language and ImHex's infrastructure
|
||||
- [Mary](https://github.com/marysaka) for her immense help porting ImHex to macOS and help during development
|
||||
- [Roblabla](https://github.com/Roblabla) for adding MSI Installer support to ImHex
|
||||
- [jam1garner](https://github.com/jam1garner) and [raytwo](https://github.com/raytwo) for their help with adding Rust support to plugins
|
||||
- [Mailaender](https://github.com/Mailaender) for getting ImHex onto Flathub
|
||||
- [iTrooz](https://github.com/iTrooz) for many improvements and new features to Imhex
|
||||
- Everybody else who has reported issues on Discord or GitHub that I had great conversations with :)
|
||||
|
||||
### Dependencies
|
||||
|
||||
- Thanks a lot to ocornut for their amazing [Dear ImGui](https://github.com/ocornut/imgui) which is used for building the entire interface
|
||||
- Thanks to ocornut as well for their hex editor view used as base for this project.
|
||||
- Thanks to BalazsJako for their incredible [ImGuiColorTextEdit](https://github.com/BalazsJako/ImGuiColorTextEdit) used for the pattern language syntax highlighting
|
||||
- Thanks to nlohmann for their [json](https://github.com/nlohmann/json) library used for project files
|
||||
- Thanks to aquynh for [capstone](https://github.com/aquynh/capstone) which is the base of the disassembly window
|
||||
- Thanks to epezent for [ImPlot](https://github.com/epezent/implot) used to plot data in various places
|
||||
- Thanks to Nelarius for [ImNodes](https://github.com/Nelarius/imnodes) used as base for the data processor
|
||||
- Thanks to BalazsJako for [ImGuiColorTextEdit](https://github.com/BalazsJako/ImGuiColorTextEdit) used for the pattern language syntax highlighting
|
||||
- Thanks to nlohmann for their [json](https://github.com/nlohmann/json) library used for configuration files
|
||||
- Thanks to vitaut for their [libfmt](https://github.com/fmtlib/fmt) library which makes formatting and logging so much better
|
||||
- Thanks to btzy for [nativefiledialog-extended](https://github.com/btzy/nativefiledialog-extended) and their great support, used for handling file dialogs on all platforms
|
||||
- Thanks to danyspin97 for [xdgpp](https://sr.ht/~danyspin97/xdgpp) used to handle folder paths on Linux
|
||||
- Thanks to aquynh for [capstone](https://github.com/aquynh/capstone) which is the base of the disassembly window
|
||||
- Thanks to rxi for [microtar](https://github.com/rxi/microtar) used for extracting downloaded store assets
|
||||
- Thanks to btzy for [nativefiledialog-extended](https://github.com/btzy/nativefiledialog-extended)
|
||||
- Thanks to danyspin97 for [xdgpp](https://sr.ht/~danyspin97/xdgpp)
|
||||
- Thanks to VirusTotal for [Yara](https://github.com/VirusTotal/yara) used by the Yara plugin
|
||||
- Thanks to Martinsos for [edlib](https://github.com/Martinsos/edlib) used for sequence searching in the diffing view
|
||||
- Thanks to ron4fun for [HashLibPlus](https://github.com/ron4fun/HashLibPlus) which implements every hashing algorithm under the sun
|
||||
- Thanks to mackron for [miniaudio](https://github.com/mackron/miniaudio) used to play audio files
|
||||
- Thanks to all other groups and organizations whose libraries are used in ImHex
|
||||
|
||||
### License
|
||||
@@ -386,3 +430,18 @@ Notable exceptions to this are the following parts which are under the LGPLv2.1
|
||||
- **/plugins/ui**: The UI plugin library that contains some common UI elements that can be used by other plugins
|
||||
|
||||
The reason for this is to allow for proprietary plugins to be developed for ImHex.
|
||||
|
||||
### Code Signing Policy
|
||||
|
||||
Free code signing provided by [SignPath.io](https://about.signpath.io/),
|
||||
certificate by [SignPath Foundation](https://signpath.org/).
|
||||
|
||||
This program will not transfer any information to other networked systems
|
||||
unless specifically requested by the user or the person installing or
|
||||
operating it.
|
||||
|
||||
#### People with direct push access
|
||||
- [WerWolv](https://github.com/WerWolv)
|
||||
- [iTrooz](https://github.com/iTrooz)
|
||||
- [jumanji144](https://github.com/jumanji144)
|
||||
- [AxCut](https://github.com/paxcut)
|
||||
|
||||
0
changelog.md
Normal file
0
changelog.md
Normal file
File diff suppressed because it is too large
Load Diff
149
cmake/ide_helpers.cmake
Normal file
149
cmake/ide_helpers.cmake
Normal file
@@ -0,0 +1,149 @@
|
||||
|
||||
option(IMHEX_IDE_HELPERS_OVERRIDE_XCODE_COMPILER "Enable choice of compiler for Xcode builds, despite CMake's best efforts" OFF)
|
||||
option(IMHEX_IDE_HELPERS_INTRUSIVE_IDE_TWEAKS "Enable intrusive CMake tweaks to better support IDEs with folder support" OFF)
|
||||
|
||||
# The CMake infrastructure silently ignores the CMAKE_<>_COMPILER settings when
|
||||
# using the `Xcode` generator.
|
||||
#
|
||||
# A particularly nasty (and potentially only) way of getting around this is to
|
||||
# temporarily lie about the generator being used, while CMake determines and
|
||||
# locks in the compiler to use.
|
||||
#
|
||||
# Needless to say, this is hacky and fragile. Use at your own risk!
|
||||
if (IMHEX_IDE_HELPERS_OVERRIDE_XCODE_COMPILER AND CMAKE_GENERATOR STREQUAL "Xcode")
|
||||
set(CMAKE_GENERATOR "Unknown")
|
||||
enable_language(C CXX)
|
||||
|
||||
set(CMAKE_GENERATOR "Xcode")
|
||||
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CC "${CMAKE_C_COMPILER}")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CXX "${CMAKE_CXX_COMPILER}")
|
||||
|
||||
if (CLANG)
|
||||
set(CMAKE_XCODE_ATTRIBUTE_LD "${CMAKE_C_COMPILER}")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS "${CMAKE_CXX_COMPILER}")
|
||||
endif()
|
||||
|
||||
# By default Xcode passes a `-index-store-path=<...>` parameter to the compiler
|
||||
# during builds to build code completion indexes. This is not supported by
|
||||
# anything other than AppleClang
|
||||
set(CMAKE_XCODE_ATTRIBUTE_COMPILER_INDEX_STORE_ENABLE "NO")
|
||||
endif()
|
||||
|
||||
# Generate a launch/build scheme for all targets
|
||||
set(CMAKE_XCODE_GENERATE_SCHEME YES)
|
||||
|
||||
# Utility function that helps avoid messing with non-standard targets
|
||||
macro(returnIfTargetIsNonTweakable target)
|
||||
get_target_property(targetIsAliased ${target} ALIASED_TARGET)
|
||||
get_target_property(targetIsImported ${target} IMPORTED)
|
||||
|
||||
if (targetIsAliased OR targetIsImported)
|
||||
return()
|
||||
endif()
|
||||
|
||||
get_target_property(targetType ${target} TYPE)
|
||||
if (targetType MATCHES "INTERFACE_LIBRARY|UNKNOWN_LIBRARY")
|
||||
return()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# Targets usually don't specify their private headers, nor group their source files
|
||||
# which results in very spotty coverage by IDEs with folders support
|
||||
#
|
||||
# Unfortunately, CMake does not have a `target_source_group` like construct yet, therefore
|
||||
# we have to play by the limitations of `source_group`.
|
||||
#
|
||||
# A particularly problematic part is that the function must be called within the directoryies
|
||||
# scope for the grouping to take effect.
|
||||
#
|
||||
# See: https://discourse.cmake.org/t/topic/7388
|
||||
function(tweakTargetForIDESupport target)
|
||||
returnIfTargetIsNonTweakable(${target})
|
||||
|
||||
# Don't assume directory structure of third parties
|
||||
get_target_property(targetSourceDir ${target} SOURCE_DIR)
|
||||
if (targetSourceDir MATCHES "third_party")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Add headers to target
|
||||
get_target_property(targetSourceDir ${target} SOURCE_DIR)
|
||||
if (targetSourceDir)
|
||||
file(GLOB_RECURSE targetPrivateHeaders CONFIGURE_DEPENDS "${targetSourceDir}/include/*.hpp")
|
||||
|
||||
target_sources(${target} PRIVATE "${targetPrivateHeaders}")
|
||||
endif()
|
||||
|
||||
# Organize target sources into directory tree
|
||||
get_target_property(sources ${target} SOURCES)
|
||||
foreach(file IN LISTS sources)
|
||||
get_filename_component(path "${file}" ABSOLUTE)
|
||||
|
||||
if (NOT path MATCHES "^${targetSourceDir}")
|
||||
continue()
|
||||
endif()
|
||||
|
||||
source_group(TREE "${targetSourceDir}" PREFIX "Source Tree" FILES "${file}")
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
if (IMHEX_IDE_HELPERS_INTRUSIVE_IDE_TWEAKS)
|
||||
# See tweakTargetForIDESupport for rationale
|
||||
|
||||
function(add_library target)
|
||||
_add_library(${target} ${ARGN})
|
||||
|
||||
tweakTargetForIDESupport(${target})
|
||||
endfunction()
|
||||
|
||||
function(add_executable target)
|
||||
_add_executable(${target} ${ARGN})
|
||||
|
||||
tweakTargetForIDESupport(${target})
|
||||
endfunction()
|
||||
endif()
|
||||
|
||||
# Adjust target's FOLDER property, which is an IDE only preference
|
||||
function(_tweakTarget target path)
|
||||
get_target_property(targetType ${target} TYPE)
|
||||
|
||||
if (TARGET generator-${target})
|
||||
set_target_properties(generator-${target} PROPERTIES FOLDER "romfs/${target}")
|
||||
endif()
|
||||
if (TARGET romfs_file_packer-${target})
|
||||
set_target_properties(romfs_file_packer-${target} PROPERTIES FOLDER "romfs/${target}")
|
||||
endif()
|
||||
if (TARGET libromfs-${target})
|
||||
set_target_properties(libromfs-${target} PROPERTIES FOLDER "romfs/${target}")
|
||||
endif()
|
||||
|
||||
if (${targetType} MATCHES "EXECUTABLE|LIBRARY")
|
||||
set_target_properties(${target} PROPERTIES FOLDER "${path}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
macro(_tweakTargetsRecursive dir)
|
||||
get_property(subdirectories DIRECTORY ${dir} PROPERTY SUBDIRECTORIES)
|
||||
foreach(subdir IN LISTS subdirectories)
|
||||
_tweakTargetsRecursive("${subdir}")
|
||||
endforeach()
|
||||
|
||||
if(${dir} STREQUAL ${CMAKE_SOURCE_DIR})
|
||||
return()
|
||||
endif()
|
||||
|
||||
get_property(targets DIRECTORY "${dir}" PROPERTY BUILDSYSTEM_TARGETS)
|
||||
file(RELATIVE_PATH rdir ${CMAKE_SOURCE_DIR} "${dir}/..")
|
||||
|
||||
foreach(target ${targets})
|
||||
_tweakTarget(${target} "${rdir}")
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
# Tweak all targets this CMake build is aware about
|
||||
function(tweakTargetsForIDESupport)
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
_tweakTargetsRecursive("${CMAKE_SOURCE_DIR}")
|
||||
endfunction()
|
||||
@@ -11,6 +11,14 @@ if (UNIX)
|
||||
set(CORECLR_SUBARCH "arm64")
|
||||
endif()
|
||||
endif()
|
||||
if (APPLE)
|
||||
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
|
||||
set(CORECLR_ARCH "osx-arm64")
|
||||
set(CORECLR_SUBARCH "arm64")
|
||||
else()
|
||||
set(CORECLR_ARCH "osx-x64")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (NOT DOTNET_EXECUTABLE)
|
||||
set(DOTNET_EXECUTABLE dotnet)
|
||||
@@ -81,4 +89,5 @@ if (CoreClrEmbed_INCLUDE_DIR AND CoreClrEmbed_LIBRARY)
|
||||
set(CoreClrEmbed_LIBRARIES "${CoreClrEmbed_LIBRARY}" CACHE STRING "CoreClrEmbed libraries" FORCE)
|
||||
set(CoreClrEmbed_SHARED_LIBRARIES "${CoreClrEmbed_SHARED_LIBRARY}" CACHE STRING "CoreClrEmbed shared libraries" FORCE)
|
||||
set(CoreClrEmbed_INCLUDE_DIRS "${CoreClrEmbed_INCLUDE_DIR}" CACHE STRING "CoreClrEmbed include directories" FORCE)
|
||||
set(CoreClrEmbed_VERSION "${CORECLR_RUNTIME_VERSION_FULL}" CACHE STRING "CoreClrEmbed version" FORCE)
|
||||
endif()
|
||||
60
cmake/modules/FindLZ4.cmake
Normal file
60
cmake/modules/FindLZ4.cmake
Normal file
@@ -0,0 +1,60 @@
|
||||
find_path(LZ4_INCLUDE_DIR
|
||||
NAMES lz4.h
|
||||
HINTS "${LZ4_INCLUDEDIR}" "${LZ4_HINTS}/include"
|
||||
PATHS
|
||||
/usr/local/include
|
||||
/usr/include
|
||||
)
|
||||
|
||||
find_library(LZ4_LIBRARY
|
||||
NAMES lz4 liblz4
|
||||
HINTS "${LZ4_LIBDIR}" "${LZ4_HINTS}/lib"
|
||||
PATHS
|
||||
/usr/local/lib
|
||||
/usr/lib
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args( LZ4 DEFAULT_MSG LZ4_LIBRARY LZ4_INCLUDE_DIR )
|
||||
|
||||
if( LZ4_FOUND )
|
||||
include( CheckIncludeFile )
|
||||
include( CMakePushCheckState )
|
||||
|
||||
set( LZ4_INCLUDE_DIRS ${LZ4_INCLUDE_DIR} )
|
||||
set( LZ4_LIBRARIES ${LZ4_LIBRARY} )
|
||||
|
||||
cmake_push_check_state()
|
||||
set( CMAKE_REQUIRED_INCLUDES ${LZ4_INCLUDE_DIRS} )
|
||||
check_include_file( lz4frame.h HAVE_LZ4FRAME_H )
|
||||
cmake_pop_check_state()
|
||||
|
||||
if (WIN32)
|
||||
set ( LZ4_DLL_DIR "${LZ4_HINTS}/bin"
|
||||
CACHE PATH "Path to LZ4 DLL"
|
||||
)
|
||||
file( GLOB _lz4_dll RELATIVE "${LZ4_DLL_DIR}"
|
||||
"${LZ4_DLL_DIR}/lz4*.dll"
|
||||
)
|
||||
set ( LZ4_DLL ${_lz4_dll}
|
||||
# We're storing filenames only. Should we use STRING instead?
|
||||
CACHE FILEPATH "LZ4 DLL file name"
|
||||
)
|
||||
file( GLOB _lz4_pdb RELATIVE "${LZ4_DLL_DIR}"
|
||||
"${LZ4_DLL_DIR}/lz4*.pdb"
|
||||
)
|
||||
set ( LZ4_PDB ${_lz4_pdb}
|
||||
CACHE FILEPATH "LZ4 PDB file name"
|
||||
)
|
||||
mark_as_advanced( LZ4_DLL_DIR LZ4_DLL LZ4_PDB )
|
||||
endif()
|
||||
else()
|
||||
set( LZ4_INCLUDE_DIRS )
|
||||
set( LZ4_LIBRARIES )
|
||||
endif()
|
||||
|
||||
mark_as_advanced( LZ4_LIBRARIES LZ4_INCLUDE_DIRS )
|
||||
|
||||
add_library( LZ4::lz4 INTERFACE IMPORTED )
|
||||
set_property( TARGET LZ4::lz4 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${LZ4_INCLUDE_DIRS} )
|
||||
set_property( TARGET LZ4::lz4 PROPERTY INTERFACE_LINK_LIBRARIES ${LZ4_LIBRARIES} )
|
||||
@@ -2,11 +2,7 @@ find_path(LIBMAGIC_INCLUDE_DIR magic.h)
|
||||
|
||||
find_library(LIBMAGIC_LIBRARY NAMES magic)
|
||||
|
||||
if (LIBMAGIC_INCLUDE_DIR AND LIBMAGIC_LIBRARY)
|
||||
set(LIBMAGIC_FOUND TRUE)
|
||||
endif (LIBMAGIC_INCLUDE_DIR AND LIBMAGIC_LIBRARY)
|
||||
|
||||
find_package_handle_standard_args("libmagic" DEFAULT_MSG
|
||||
find_package_handle_standard_args(Magic DEFAULT_MSG
|
||||
LIBMAGIC_LIBRARY
|
||||
LIBMAGIC_INCLUDE_DIR
|
||||
)
|
||||
@@ -14,5 +10,5 @@ find_package_handle_standard_args("libmagic" DEFAULT_MSG
|
||||
mark_as_advanced(
|
||||
LIBMAGIC_INCLUDE_DIR
|
||||
LIBMAGIC_LIBRARY
|
||||
LIBMAGIC_FOUND
|
||||
)
|
||||
Magic_FOUND
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
find_file(libyara.a YARA_LIBRARIES)
|
||||
find_library(YARA_LIBRARIES NAMES yara)
|
||||
find_file(yara.h YARA_INCLUDE_DIRS)
|
||||
|
||||
mark_as_advanced(YARA_LIBRARIES YARA_INCLUDE_DIRS)
|
||||
@@ -38,4 +38,8 @@ if (ZSTD_FOUND)
|
||||
message(STATUS "Found Zstd: ${ZSTD_LIBRARY}")
|
||||
endif()
|
||||
|
||||
mark_as_advanced(ZSTD_INCLUDE_DIR ZSTD_LIBRARY)
|
||||
mark_as_advanced(ZSTD_INCLUDE_DIR ZSTD_LIBRARY)
|
||||
|
||||
add_library(ZSTD::zstd INTERFACE IMPORTED)
|
||||
set_property(TARGET ZSTD::zstd PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ZSTD_INCLUDE_DIR})
|
||||
set_property(TARGET ZSTD::zstd PROPERTY INTERFACE_LINK_LIBRARIES ${ZSTD_LIBRARY})
|
||||
15
cmake/modules/Findlibssh2.cmake
Normal file
15
cmake/modules/Findlibssh2.cmake
Normal file
@@ -0,0 +1,15 @@
|
||||
find_path(LIBSSH2_INCLUDE_DIR libssh2.h)
|
||||
|
||||
find_library(LIBSSH2_LIBRARY NAMES ssh2 libssh2)
|
||||
|
||||
if(LIBSSH2_INCLUDE_DIR)
|
||||
file(STRINGS "${LIBSSH2_INCLUDE_DIR}/libssh2.h" libssh2_version_str REGEX "^#define[\t ]+LIBSSH2_VERSION[\t ]+\"(.*)\"")
|
||||
string(REGEX REPLACE "^.*\"([^\"]+)\"" "\\1" LIBSSH2_VERSION "${libssh2_version_str}")
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(LibSSH2
|
||||
REQUIRED_VARS LIBSSH2_LIBRARY LIBSSH2_INCLUDE_DIR
|
||||
VERSION_VAR LIBSSH2_VERSION)
|
||||
|
||||
mark_as_advanced(LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY)
|
||||
@@ -26,8 +26,9 @@ SET(MBEDTLS_FIND_QUIETLY TRUE)
|
||||
FIND_LIBRARY(MBEDTLS_LIBRARY NAMES mbedtls libmbedtls libmbedx509)
|
||||
FIND_LIBRARY(MBEDX509_LIBRARY NAMES mbedx509 libmbedx509)
|
||||
FIND_LIBRARY(MBEDCRYPTO_LIBRARY NAMES mbedcrypto libmbedcrypto)
|
||||
FIND_LIBRARY(TFPSACRYPTO_LIBRARY NAMES libtfpsacrypto tfpsacrypto)
|
||||
|
||||
IF(MBEDTLS_INCLUDE_DIR AND MBEDTLS_LIBRARY AND MBEDX509_LIBRARY AND MBEDCRYPTO_LIBRARY)
|
||||
IF(MBEDTLS_INCLUDE_DIR AND MBEDTLS_LIBRARY AND MBEDX509_LIBRARY AND (MBEDCRYPTO_LIBRARY OR TFPSACRYPTO_LIBRARY))
|
||||
SET(MBEDTLS_FOUND TRUE)
|
||||
ENDIF()
|
||||
|
||||
@@ -37,10 +38,25 @@ IF(MBEDTLS_FOUND)
|
||||
GET_FILENAME_COMPONENT(MBEDTLS_LIBRARY_FILE ${MBEDTLS_LIBRARY} NAME_WE)
|
||||
GET_FILENAME_COMPONENT(MBEDX509_LIBRARY_FILE ${MBEDX509_LIBRARY} NAME_WE)
|
||||
GET_FILENAME_COMPONENT(MBEDCRYPTO_LIBRARY_FILE ${MBEDCRYPTO_LIBRARY} NAME_WE)
|
||||
GET_FILENAME_COMPONENT(TFPSACRYPTO_LIBRARY_FILE ${TFPSACRYPTO_LIBRARY} NAME_WE)
|
||||
STRING(REGEX REPLACE "^lib" "" MBEDTLS_LIBRARY_FILE ${MBEDTLS_LIBRARY_FILE})
|
||||
STRING(REGEX REPLACE "^lib" "" MBEDX509_LIBRARY_FILE ${MBEDX509_LIBRARY_FILE})
|
||||
STRING(REGEX REPLACE "^lib" "" MBEDCRYPTO_LIBRARY_FILE ${MBEDCRYPTO_LIBRARY_FILE})
|
||||
SET(MBEDTLS_LIBRARIES "-L${MBEDTLS_LIBRARY_DIR} -l${MBEDTLS_LIBRARY_FILE} -l${MBEDX509_LIBRARY_FILE} -l${MBEDCRYPTO_LIBRARY_FILE}")
|
||||
STRING(REGEX REPLACE "^lib" "" TFPSACRYPTO_LIBRARY_FILE ${TFPSACRYPTO_LIBRARY_FILE})
|
||||
|
||||
if (TFPSACRYPTO_LIBRARY)
|
||||
SET(MBEDTLS_CRYPTO_LIBRARY_FILE ${TFPSACRYPTO_LIBRARY_FILE})
|
||||
elseif (MBEDCRYPTO_LIBRARY)
|
||||
SET(MBEDTLS_CRYPTO_LIBRARY_FILE ${MBEDCRYPTO_LIBRARY_FILE})
|
||||
else ()
|
||||
MESSAGE(FATAL_ERROR "Could not find mbedTLS Crypto library")
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
SET(MBEDTLS_LIBRARIES ${MBEDTLS_LIBRARY_FILE}.lib ${MBEDX509_LIBRARY_FILE}.lib ${MBEDTLS_CRYPTO_LIBRARY_FILE}.lib)
|
||||
else()
|
||||
SET(MBEDTLS_LIBRARIES "-L${MBEDTLS_LIBRARY_DIR} -l${MBEDTLS_LIBRARY_FILE} -l${MBEDX509_LIBRARY_FILE} -l${MBEDTLS_CRYPTO_LIBRARY_FILE}")
|
||||
endif()
|
||||
|
||||
IF(NOT MBEDTLS_FIND_QUIETLY)
|
||||
MESSAGE(STATUS "Found mbedTLS:")
|
||||
@@ -55,9 +71,9 @@ IF(MBEDTLS_FOUND)
|
||||
MESSAGE(STATUS " Crypto: ${MBEDCRYPTO_LIBRARY}")
|
||||
ENDIF(NOT MBEDTLS_FIND_QUIETLY)
|
||||
ELSE(MBEDTLS_FOUND)
|
||||
IF(MBEDTLS_FIND_REQUIRED)
|
||||
IF(mbedTLS_FIND_REQUIRED)
|
||||
MESSAGE(FATAL_ERROR "Could not find mbedTLS")
|
||||
ENDIF(MBEDTLS_FIND_REQUIRED)
|
||||
ENDIF(mbedTLS_FIND_REQUIRED)
|
||||
ENDIF(MBEDTLS_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
@@ -67,4 +83,4 @@ MARK_AS_ADVANCED(
|
||||
MBEDTLS_LIBRARY
|
||||
MBEDX509_LIBRARY
|
||||
MBEDCRYPTO_LIBRARY
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
macro(add_imhex_plugin)
|
||||
setSDKPaths()
|
||||
# Parse arguments
|
||||
set(options LIBRARY_PLUGIN)
|
||||
set(oneValueArgs NAME IMHEX_VERSION)
|
||||
@@ -28,69 +29,140 @@ macro(add_imhex_plugin)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (IMHEX_PLUGIN_LIBRARY_PLUGIN)
|
||||
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/" DESTINATION "${SDK_PATH}/lib/plugins/${IMHEX_PLUGIN_NAME}")
|
||||
endif()
|
||||
|
||||
# Define new project for plugin
|
||||
project(${IMHEX_PLUGIN_NAME})
|
||||
|
||||
# Create a new shared library for the plugin source code
|
||||
add_library(${IMHEX_PLUGIN_NAME} ${IMHEX_PLUGIN_LIBRARY_TYPE} ${IMHEX_PLUGIN_SOURCES})
|
||||
if (IMHEX_PLUGIN_IMPORTED)
|
||||
add_library(${IMHEX_PLUGIN_NAME} SHARED IMPORTED GLOBAL)
|
||||
|
||||
# Add include directories and link libraries
|
||||
target_include_directories(${IMHEX_PLUGIN_NAME} PUBLIC ${IMHEX_PLUGIN_INCLUDES})
|
||||
target_link_libraries(${IMHEX_PLUGIN_NAME} PRIVATE libimhex ${IMHEX_PLUGIN_LIBRARIES} ${FMT_LIBRARIES} imgui_all_includes libwolv)
|
||||
addIncludesFromLibrary(${IMHEX_PLUGIN_NAME} libpl)
|
||||
if (WIN32)
|
||||
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES
|
||||
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/${IMHEX_PLUGIN_NAME}${IMHEX_PLUGIN_SUFFIX}"
|
||||
IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/../lib${IMHEX_PLUGIN_NAME}.dll.a"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include/include")
|
||||
elseif (APPLE)
|
||||
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES
|
||||
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../../../../MacOS/plugins/${IMHEX_PLUGIN_NAME}${IMHEX_PLUGIN_SUFFIX}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include/include")
|
||||
else()
|
||||
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES
|
||||
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/${IMHEX_PLUGIN_NAME}${IMHEX_PLUGIN_SUFFIX}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include/include")
|
||||
endif()
|
||||
else()
|
||||
# Create a new shared library for the plugin source code
|
||||
add_library(${IMHEX_PLUGIN_NAME} ${IMHEX_PLUGIN_LIBRARY_TYPE} ${IMHEX_PLUGIN_SOURCES})
|
||||
|
||||
# Add IMHEX_PROJECT_NAME and IMHEX_VERSION define
|
||||
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_PROJECT_NAME="${IMHEX_PLUGIN_NAME}")
|
||||
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_VERSION="${IMHEX_VERSION_STRING}")
|
||||
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_PLUGIN_NAME=${IMHEX_PLUGIN_NAME})
|
||||
# Add include directories and link libraries
|
||||
target_include_directories(${IMHEX_PLUGIN_NAME} PUBLIC ${IMHEX_PLUGIN_INCLUDES})
|
||||
target_link_libraries(${IMHEX_PLUGIN_NAME} PUBLIC ${IMHEX_PLUGIN_LIBRARIES})
|
||||
target_link_libraries(${IMHEX_PLUGIN_NAME} PRIVATE libimhex ${FMT_LIBRARIES} imgui_all_includes libwolv)
|
||||
addIncludesFromLibrary(${IMHEX_PLUGIN_NAME} libpl)
|
||||
addIncludesFromLibrary(${IMHEX_PLUGIN_NAME} libpl-gen)
|
||||
|
||||
# Enable required compiler flags
|
||||
enableUnityBuild(${IMHEX_PLUGIN_NAME})
|
||||
setupCompilerFlags(${IMHEX_PLUGIN_NAME})
|
||||
precompileHeaders(${IMHEX_PLUGIN_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
||||
|
||||
# Configure build properties
|
||||
set_target_properties(${IMHEX_PLUGIN_NAME}
|
||||
PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/plugins
|
||||
CXX_STANDARD 23
|
||||
PREFIX ""
|
||||
SUFFIX ${IMHEX_PLUGIN_SUFFIX}
|
||||
)
|
||||
# Add IMHEX_PROJECT_NAME and IMHEX_VERSION define
|
||||
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_PROJECT_NAME="${IMHEX_PLUGIN_NAME}")
|
||||
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_VERSION="${IMHEX_VERSION_STRING}")
|
||||
target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_PLUGIN_NAME=${IMHEX_PLUGIN_NAME})
|
||||
|
||||
# Set rpath of plugin libraries to the plugins folder
|
||||
if (APPLE)
|
||||
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES BUILD_RPATH "@executable_path/../Frameworks;@executable_path/plugins")
|
||||
endif()
|
||||
# Enable required compiler flags
|
||||
enableUnityBuild(${IMHEX_PLUGIN_NAME})
|
||||
setupCompilerFlags(${IMHEX_PLUGIN_NAME})
|
||||
addCppCheck(${IMHEX_PLUGIN_NAME})
|
||||
|
||||
# Setup a romfs for the plugin
|
||||
list(APPEND LIBROMFS_RESOURCE_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/romfs)
|
||||
set(LIBROMFS_PROJECT_NAME ${IMHEX_PLUGIN_NAME})
|
||||
add_subdirectory(${IMHEX_BASE_FOLDER}/lib/external/libromfs ${CMAKE_CURRENT_BINARY_DIR}/libromfs)
|
||||
target_link_libraries(${IMHEX_PLUGIN_NAME} PRIVATE ${LIBROMFS_LIBRARY})
|
||||
# Configure build properties
|
||||
set_target_properties(${IMHEX_PLUGIN_NAME}
|
||||
PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY "${IMHEX_MAIN_OUTPUT_DIRECTORY}/plugins"
|
||||
CXX_STANDARD 23
|
||||
PREFIX ""
|
||||
SUFFIX ${IMHEX_PLUGIN_SUFFIX}
|
||||
)
|
||||
|
||||
foreach(feature ${IMHEX_PLUGIN_FEATURES})
|
||||
string(TOUPPER ${feature} feature)
|
||||
add_definitions(-DIMHEX_PLUGIN_${IMHEX_PLUGIN_NAME}_FEATURE_${feature}=0)
|
||||
endforeach()
|
||||
# Set rpath of plugin libraries to the plugins folder
|
||||
if (WIN32)
|
||||
if (IMHEX_PLUGIN_LIBRARY_PLUGIN)
|
||||
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
||||
endif()
|
||||
elseif (APPLE)
|
||||
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES BUILD_RPATH "@executable_path/../Frameworks;@executable_path/plugins")
|
||||
endif()
|
||||
|
||||
# Add the new plugin to the main dependency list so it gets built by default
|
||||
if (TARGET imhex_all)
|
||||
add_dependencies(imhex_all ${IMHEX_PLUGIN_NAME})
|
||||
endif()
|
||||
# Setup a romfs for the plugin
|
||||
list(APPEND LIBROMFS_RESOURCE_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/romfs)
|
||||
set(LIBROMFS_PROJECT_NAME ${IMHEX_PLUGIN_NAME})
|
||||
add_subdirectory(${IMHEX_BASE_FOLDER}/lib/external/libromfs ${CMAKE_CURRENT_BINARY_DIR}/libromfs)
|
||||
target_link_libraries(${IMHEX_PLUGIN_NAME} PRIVATE ${LIBROMFS_LIBRARY})
|
||||
|
||||
if (IMHEX_EXTERNAL_PLUGIN_BUILD)
|
||||
install(TARGETS ${IMHEX_PLUGIN_NAME} DESTINATION ".")
|
||||
endif()
|
||||
set(FEATURE_DEFINE_CONTENT)
|
||||
|
||||
# Fix rpath
|
||||
if (APPLE)
|
||||
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES INSTALL_RPATH "@executable_path/../Frameworks;@executable_path/plugins")
|
||||
elseif (UNIX)
|
||||
set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES INSTALL_RPATH_USE_ORIGIN ON INSTALL_RPATH "$ORIGIN/")
|
||||
if (IMHEX_PLUGIN_FEATURES)
|
||||
list(LENGTH IMHEX_PLUGIN_FEATURES IMHEX_FEATURE_COUNT)
|
||||
math(EXPR IMHEX_FEATURE_COUNT "${IMHEX_FEATURE_COUNT} - 1" OUTPUT_FORMAT DECIMAL)
|
||||
foreach(index RANGE 0 ${IMHEX_FEATURE_COUNT} 2)
|
||||
list(SUBLIST IMHEX_PLUGIN_FEATURES ${index} 2 IMHEX_PLUGIN_FEATURE)
|
||||
list(GET IMHEX_PLUGIN_FEATURE 0 feature_define)
|
||||
list(GET IMHEX_PLUGIN_FEATURE 1 feature_description)
|
||||
|
||||
string(TOUPPER ${feature_define} feature_define)
|
||||
add_definitions(-DIMHEX_PLUGIN_${IMHEX_PLUGIN_NAME}_FEATURE_${feature_define}=0)
|
||||
set(FEATURE_DEFINE_CONTENT "${FEATURE_DEFINE_CONTENT}{ \"${feature_description}\", IMHEX_FEATURE_ENABLED(${feature_define}) },")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
target_compile_options(${IMHEX_PLUGIN_NAME} PRIVATE -DIMHEX_PLUGIN_FEATURES_CONTENT=${FEATURE_DEFINE_CONTENT})
|
||||
|
||||
# Add the new plugin to the main dependency list so it gets built by default
|
||||
if (TARGET imhex_all)
|
||||
add_dependencies(imhex_all ${IMHEX_PLUGIN_NAME})
|
||||
endif()
|
||||
|
||||
if (IMHEX_EXTERNAL_PLUGIN_BUILD)
|
||||
install(TARGETS ${IMHEX_PLUGIN_NAME} DESTINATION ".")
|
||||
endif()
|
||||
|
||||
# Fix rpath
|
||||
if (APPLE)
|
||||
set_target_properties(
|
||||
${IMHEX_PLUGIN_NAME}
|
||||
PROPERTIES
|
||||
INSTALL_RPATH "@executable_path/../Frameworks;@executable_path/plugins"
|
||||
)
|
||||
elseif (UNIX)
|
||||
set(PLUGIN_RPATH "")
|
||||
list(APPEND PLUGIN_RPATH "$ORIGIN")
|
||||
|
||||
if (IMHEX_PLUGIN_ADD_INSTALL_PREFIX_TO_RPATH)
|
||||
list(APPEND PLUGIN_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
||||
endif()
|
||||
|
||||
set_target_properties(
|
||||
${IMHEX_PLUGIN_NAME}
|
||||
PROPERTIES
|
||||
INSTALL_RPATH_USE_ORIGIN ON
|
||||
INSTALL_RPATH "${PLUGIN_RPATH}"
|
||||
)
|
||||
endif()
|
||||
|
||||
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/tests/CMakeLists.txt AND IMHEX_ENABLE_UNIT_TESTS AND IMHEX_ENABLE_PLUGIN_TESTS)
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests)
|
||||
target_link_libraries(${IMHEX_PLUGIN_NAME} PUBLIC ${IMHEX_PLUGIN_NAME}_tests)
|
||||
target_compile_definitions(${IMHEX_PLUGIN_NAME}_tests PRIVATE IMHEX_PROJECT_NAME="${IMHEX_PLUGIN_NAME}-tests")
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(add_romfs_resource input output)
|
||||
if (NOT EXISTS ${input})
|
||||
message(WARNING "Resource file ${input} does not exist")
|
||||
endif()
|
||||
|
||||
configure_file(${input} ${CMAKE_CURRENT_BINARY_DIR}/romfs/${output} COPYONLY)
|
||||
|
||||
list(APPEND LIBROMFS_RESOURCE_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/romfs)
|
||||
@@ -104,4 +176,4 @@ macro (enable_plugin_feature feature)
|
||||
|
||||
remove_definitions(-DIMHEX_PLUGIN_${IMHEX_PLUGIN_NAME}_FEATURE_${feature}=0)
|
||||
add_definitions(-DIMHEX_PLUGIN_${IMHEX_PLUGIN_NAME}_FEATURE_${feature}=1)
|
||||
endmacro()
|
||||
endmacro()
|
||||
|
||||
@@ -14,12 +14,11 @@ if(CMAKE_GENERATOR)
|
||||
# Being called as include(PostprocessBundle), so define a helper function.
|
||||
set(_POSTPROCESS_BUNDLE_MODULE_LOCATION "${CMAKE_CURRENT_LIST_FILE}")
|
||||
function(postprocess_bundle out_target in_target)
|
||||
add_custom_command(TARGET ${out_target} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -DBUNDLE_PATH="$<TARGET_FILE_DIR:${in_target}>/../.."
|
||||
-DCODE_SIGN_CERTIFICATE_ID="${CODE_SIGN_CERTIFICATE_ID}"
|
||||
-DEXTRA_BUNDLE_LIBRARY_PATHS="${EXTRA_BUNDLE_LIBRARY_PATHS}"
|
||||
-P "${_POSTPROCESS_BUNDLE_MODULE_LOCATION}"
|
||||
)
|
||||
|
||||
install(CODE "set(BUNDLE_PATH ${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME})")
|
||||
install(CODE "set(CODE_SIGN_CERTIFICATE_ID ${CODE_SIGN_CERTIFICATE_ID})")
|
||||
install(CODE "set(EXTRA_BUNDLE_LIBRARY_PATHS ${EXTRA_BUNDLE_LIBRARY_PATHS})")
|
||||
install(SCRIPT ${_POSTPROCESS_BUNDLE_MODULE_LOCATION})
|
||||
endfunction()
|
||||
return()
|
||||
endif()
|
||||
@@ -42,7 +41,7 @@ file(GLOB_RECURSE plugins "${BUNDLE_PATH}/Contents/MacOS/plugins/*.hexplug")
|
||||
# makes it sometimes break on libraries that do weird things with @rpath. Specify
|
||||
# equivalent search directories until https://gitlab.kitware.com/cmake/cmake/issues/16625
|
||||
# is fixed and in our minimum CMake version.
|
||||
set(extra_dirs "/usr/local/lib" "/lib" "/usr/lib" ${EXTRA_BUNDLE_LIBRARY_PATHS} "${BUNDLE_PATH}/Contents/MacOS/plugins")
|
||||
set(extra_dirs "/usr/local/lib" "/lib" "/usr/lib" ${EXTRA_BUNDLE_LIBRARY_PATHS} "${BUNDLE_PATH}/Contents/MacOS/plugins" "${BUNDLE_PATH}/Contents/Frameworks")
|
||||
message(STATUS "Fixing up application bundle: ${extra_dirs}")
|
||||
|
||||
# BundleUtilities is overly verbose, so disable most of its messages
|
||||
|
||||
@@ -29,30 +29,45 @@ add_subdirectory_if_exists(lib/third_party/nlohmann_json)
|
||||
set(NLOHMANN_JSON_LIBRARIES nlohmann_json PARENT_SCOPE)
|
||||
set(NLOHMANN_JSON_LIBRARIES nlohmann_json)
|
||||
|
||||
add_subdirectory_if_exists(lib/third_party/boost)
|
||||
set(BOOST_LIBRARIES boost::regex PARENT_SCOPE)
|
||||
set(BOOST_LIBRARIES boost::regex)
|
||||
|
||||
add_subdirectory(lib/external/libwolv EXCLUDE_FROM_ALL)
|
||||
|
||||
set(LIBPL_ENABLE_CLI OFF CACHE BOOL "" FORCE)
|
||||
add_subdirectory(lib/external/pattern_language EXCLUDE_FROM_ALL)
|
||||
|
||||
find_package(CURL REQUIRED)
|
||||
find_package(mbedTLS 3.4.0 REQUIRED)
|
||||
set(CURL_LIBRARIES ${CURL_LIBRARIES} PARENT_SCOPE)
|
||||
set(MBEDTLS_LIBRARIES ${MBEDTLS_LIBRARIES} PARENT_SCOPE)
|
||||
set(IMHEX_PLUGIN_IMPORTED ON)
|
||||
|
||||
add_subdirectory(lib/libimhex)
|
||||
add_subdirectory(lib/trace)
|
||||
add_subdirectory(lib/fonts)
|
||||
add_subdirectory(lib/ui)
|
||||
|
||||
set(IMHEX_PLUGIN_IMPORTED OFF)
|
||||
|
||||
if (WIN32)
|
||||
set_target_properties(libimhex PROPERTIES
|
||||
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../libimhex.dll"
|
||||
IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/lib/liblibimhex.dll.a"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/libimhex/include")
|
||||
set_target_properties(tracing PROPERTIES
|
||||
IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/lib/libtracing.a"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/trace/include")
|
||||
elseif (APPLE)
|
||||
file(GLOB LIBIMHEX_DYLIB "${CMAKE_CURRENT_SOURCE_DIR}/../../Frameworks/libimhex.*.dylib")
|
||||
set_target_properties(libimhex PROPERTIES
|
||||
IMPORTED_LOCATION "${LIBIMHEX_DYLIB}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/libimhex/include")
|
||||
set_target_properties(tracing PROPERTIES
|
||||
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../libtracing.a"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/trace/include")
|
||||
else()
|
||||
set_target_properties(libimhex PROPERTIES
|
||||
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../libimhex.so"
|
||||
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/libimhex.so"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/libimhex/include")
|
||||
set_target_properties(tracing PROPERTIES
|
||||
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lib/libtracing.a"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/trace/include")
|
||||
endif()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include <hex/plugin.hpp>
|
||||
|
||||
// Browse through the headers in lib/libimhex/include/hex/api/ to see what you can do with the API.
|
||||
// Most important ones are <hex/api/imhex_api.hpp> and <hex/api/content_registry.hpp>
|
||||
// Most important ones are the things under imhex_api and content_registry
|
||||
|
||||
// This is the main entry point of your plugin. The code in the body of this construct will be executed
|
||||
// when ImHex starts up and loads the plugin.
|
||||
|
||||
146
dist/AppImage/AppImageBuilder.yml
vendored
Normal file
146
dist/AppImage/AppImageBuilder.yml
vendored
Normal file
@@ -0,0 +1,146 @@
|
||||
# appimage-builder recipe see https://appimage-builder.readthedocs.io for details
|
||||
version: 1
|
||||
AppDir:
|
||||
path: .AppDir
|
||||
app_info:
|
||||
id: imhex
|
||||
name: ImHex
|
||||
icon: imhex
|
||||
version: "{{VERSION}}"
|
||||
exec: usr/bin/imhex
|
||||
exec_args: $@
|
||||
apt:
|
||||
arch:
|
||||
- all
|
||||
- "{{ARCHITECTURE_PACKAGE}}"
|
||||
allow_unauthenticated: true
|
||||
sources:
|
||||
- sourceline: 'deb [arch=amd64] https://us.archive.ubuntu.com/ubuntu/ noble main restricted universe multiverse'
|
||||
- sourceline: 'deb [arch=arm64] https://ports.ubuntu.com/ubuntu-ports/ noble main restricted universe multiverse'
|
||||
include:
|
||||
- libgdk-pixbuf2.0-0
|
||||
- libgdk-pixbuf2.0-common
|
||||
- shared-mime-info
|
||||
- librsvg2-common
|
||||
- libbz2-1.0
|
||||
- libcap2
|
||||
- libdbus-1-3
|
||||
- libfontconfig1
|
||||
- libgpg-error0
|
||||
- liblzma5
|
||||
- libnss-mdns
|
||||
- libpcre3
|
||||
- libselinux1
|
||||
- libtinfo6
|
||||
- libmd4c-dev
|
||||
- libmd4c-html0-dev
|
||||
files:
|
||||
include:
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libLLVM-13.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libOpenGL.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libX11.so.6"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXau.so.6"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXcomposite.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXcursor.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXdamage.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXdmcp.so.6"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXext.so.6"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXfixes.so.3"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXi.so.6"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXinerama.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXrandr.so.2"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXrender.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libXxf86vm.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libatk-1.0.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libatk-bridge-2.0.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libatspi.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libblkid.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libbrotlicommon.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libbrotlidec.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libbsd.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libcairo-gobject.so.2"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libcairo.so.2"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libcurl-gnutls.so.4"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libdatrie.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libedit.so.2"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libelf.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libepoxy.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libffi.so.8"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libfontconfig.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libfreetype.so.6"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libfribidi.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libgcrypt.so.20"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libgdk-3.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libgdk_pixbuf-2.0.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libgio-2.0.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libglfw.so.3"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libglib-2.0.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libgmodule-2.0.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libgmp.so.10"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libgnutls.so.30"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libgobject-2.0.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libgraphite2.so.3"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libharfbuzz.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libhogweed.so.6"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libicudata.so.70"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libicuuc.so.70"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libidn2.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libjpeg.so.8"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/liblber-2.5.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libldap-2.5.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/liblz4.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libmagic.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libmbedcrypto.so.7"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libmbedtls.so.14"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libmbedx509.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libmd.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libmount.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libnettle.so.8"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libp11-kit.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libpango-1.0.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libpangocairo-1.0.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libpangoft2-1.0.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libpcre2-8.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libpixman-1.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libpng16.so.16"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libsasl2.so.2"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libsensors.so.5"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libstdc++.so.6"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libsystemd.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libtasn1.so.6"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libthai.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libunistring.so.2"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libuuid.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libvulkan.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libwayland-client.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libwayland-cursor.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libwayland-egl.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libxcb-dri2.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libxcb-dri3.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libxcb-present.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libxcb-sync.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libxkbcommon.so.0"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libxml2.so.2"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libxshmfence.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libzstd.so.1"
|
||||
- "/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/libmd4c.so"
|
||||
exclude:
|
||||
- usr/share/man
|
||||
- usr/share/doc/*/README.*
|
||||
- usr/share/doc/*/changelog.*
|
||||
- usr/share/doc/*/NEWS.*
|
||||
- usr/share/doc/*/TODO.*
|
||||
|
||||
runtime:
|
||||
env:
|
||||
APPDIR_LIBRARY_PATH: '$APPDIR/usr/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu:$APPDIR/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu:$APPDIR/usr/lib:$APPDIR/usr/lib/{{ARCHITECTURE_APPIMAGE_BUILDER}}-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders'
|
||||
GTK_EXE_PREFIX: $APPDIR/usr
|
||||
GTK_DATA_PREFIX: $APPDIR
|
||||
XDG_DATA_DIRS: '/usr/local/share:/usr/share:$APPDIR/usr/share:$XDG_DATA_DIRS:$APPDIR/usr/local/share:$APPDIR/usr/local/lib:$APPDIR/usr/local/share'
|
||||
XDG_CONFIG_DIRS: '$XDG_CONFIG_DIRS:$APPDIR/usr/local/share'
|
||||
|
||||
AppImage:
|
||||
arch: "{{ARCHITECTURE_APPIMAGE_BUILDER}}"
|
||||
comp: zstd
|
||||
update-information: gh-releases-zsync|WerWolv|ImHex|latest|imhex-*-{{ARCHITECTURE_FILE_NAME}}.AppImage.zsync
|
||||
file_name: imhex-{{VERSION}}-{{ARCHITECTURE_FILE_NAME}}.AppImage
|
||||
93
dist/AppImage/Dockerfile
vendored
Normal file
93
dist/AppImage/Dockerfile
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
FROM ubuntu:24.04 as build
|
||||
|
||||
# Used to invalidate layer cache but not mount cache
|
||||
# See https://github.com/moby/moby/issues/41715#issuecomment-733976493
|
||||
ARG UNIQUEKEY 1
|
||||
|
||||
COPY dist/get_deps_debian.sh /tmp
|
||||
RUN --mount=type=cache,target=/var/apt/cache <<EOF
|
||||
# Install apt dependencies
|
||||
set -xe
|
||||
|
||||
apt update
|
||||
|
||||
# general deps
|
||||
apt install -y ccache git wget
|
||||
# appimage tools deps
|
||||
apt install -y python3-pip python3-venv python3-setuptools desktop-file-utils libgdk-pixbuf2.0-dev fuse ninja-build
|
||||
apt install -y squashfs-tools zsync
|
||||
|
||||
# imhex deps
|
||||
/tmp/get_deps_debian.sh
|
||||
EOF
|
||||
|
||||
ENV PATH="/cache/bin/:${PATH}"
|
||||
|
||||
# Copy Imhex source
|
||||
COPY . /imhex
|
||||
|
||||
ARG LTO=ON
|
||||
ARG BUILD_TYPE=RelWithDebInfo
|
||||
ARG GIT_COMMIT_HASH
|
||||
ARG GIT_BRANCH
|
||||
ARG ARCHITECTURE_PACKAGE=x86_64
|
||||
ARG ARCHITECTURE_FILE_NAME=amd64
|
||||
ARG ARCHITECTURE_APPIMAGE_BUILDER=x86_64
|
||||
WORKDIR /build
|
||||
|
||||
# Ubuntu sh doesnt support string substitution
|
||||
SHELL ["bash", "-c"]
|
||||
|
||||
RUN <<EOF
|
||||
# Prepare ImHex build
|
||||
set -xe
|
||||
|
||||
CC=gcc-14 CXX=g++-14 cmake -G "Ninja" \
|
||||
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
||||
-DCMAKE_INSTALL_PREFIX="/usr" \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DIMHEX_PATTERNS_PULL_MASTER=ON \
|
||||
-DIMHEX_COMMIT_HASH_LONG="${GIT_COMMIT_HASH}" \
|
||||
-DIMHEX_COMMIT_BRANCH="${GIT_BRANCH}" \
|
||||
-DIMHEX_ENABLE_LTO=${LTO} \
|
||||
-DIMHEX_BUNDLE_PLUGIN_SDK=OFF \
|
||||
`# To prevent using a libdir with an architecture-specific name` \
|
||||
-DCMAKE_INSTALL_LIBDIR="lib" \
|
||||
/imhex
|
||||
EOF
|
||||
|
||||
ENV CCACHE_DIR /cache/ccache
|
||||
RUN --mount=type=cache,target=/cache <<EOF
|
||||
# Build Imhex
|
||||
set -xe
|
||||
|
||||
ccache -zs
|
||||
DESTDIR=AppDir ninja install
|
||||
ccache -s
|
||||
EOF
|
||||
|
||||
RUN <<EOF
|
||||
# Download appimage-builder
|
||||
set -xe
|
||||
|
||||
mkdir -p /cache/bin
|
||||
wget -nc https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage -O /cache/bin/appimagetool || true
|
||||
chmod +x /cache/bin/appimagetool
|
||||
|
||||
python3 -m venv venv
|
||||
. venv/bin/activate
|
||||
pip3 install git+https://github.com/AppImageCrafters/appimage-builder@e995e8e
|
||||
|
||||
# Package ImHex as AppImage
|
||||
export VERSION=$(cat /imhex/VERSION)
|
||||
export ARCHITECTURE_PACKAGE=${ARCHITECTURE_PACKAGE}
|
||||
export ARCHITECTURE_FILE_NAME=${ARCHITECTURE_FILE_NAME}
|
||||
export ARCHITECTURE_APPIMAGE_BUILDER=${ARCHITECTURE_APPIMAGE_BUILDER}
|
||||
appimage-builder --recipe /imhex/dist/AppImage/AppImageBuilder.yml
|
||||
EOF
|
||||
|
||||
FROM scratch
|
||||
|
||||
# Copy build artifact
|
||||
COPY --from=build /build/*.AppImage /build/*.AppImage.zsync ./
|
||||
137
dist/AppImageBuilder.yml
vendored
137
dist/AppImageBuilder.yml
vendored
@@ -1,137 +0,0 @@
|
||||
# appimage-builder recipe see https://appimage-builder.readthedocs.io for details
|
||||
version: 1
|
||||
AppDir:
|
||||
path: .AppDir
|
||||
app_info:
|
||||
id: imhex
|
||||
name: ImHex
|
||||
icon: imhex
|
||||
version: "{{VERSION}}"
|
||||
exec: usr/bin/imhex
|
||||
exec_args: $@
|
||||
apt:
|
||||
arch:
|
||||
- amd64
|
||||
allow_unauthenticated: true
|
||||
sources:
|
||||
- sourceline: deb http://us.archive.ubuntu.com/ubuntu/ jammy main restricted
|
||||
- sourceline: deb http://us.archive.ubuntu.com/ubuntu/ jammy-updates main restricted
|
||||
- sourceline: deb http://us.archive.ubuntu.com/ubuntu/ jammy universe
|
||||
- sourceline: deb http://us.archive.ubuntu.com/ubuntu/ jammy-updates universe
|
||||
- sourceline: deb http://us.archive.ubuntu.com/ubuntu/ jammy multiverse
|
||||
- sourceline: deb http://us.archive.ubuntu.com/ubuntu/ jammy-updates multiverse
|
||||
- sourceline: deb http://us.archive.ubuntu.com/ubuntu/ jammy-backports main restricted
|
||||
universe multiverse
|
||||
- sourceline: deb http://security.ubuntu.com/ubuntu jammy-security main restricted
|
||||
- sourceline: deb http://security.ubuntu.com/ubuntu jammy-security universe
|
||||
- sourceline: deb http://security.ubuntu.com/ubuntu jammy-security multiverse
|
||||
include:
|
||||
- librsvg2-common
|
||||
- libbz2-1.0:amd64
|
||||
- libcap2:amd64
|
||||
- libdbus-1-3:amd64
|
||||
- libgpg-error0:amd64
|
||||
- liblzma5:amd64
|
||||
- libnss-mdns:amd64
|
||||
- libpcre3:amd64
|
||||
- libselinux1:amd64
|
||||
- libtinfo6:amd64
|
||||
files:
|
||||
include:
|
||||
- /lib/x86_64-linux-gnu/libLLVM-13.so.1
|
||||
- /lib/x86_64-linux-gnu/libOpenGL.so.0
|
||||
- /lib/x86_64-linux-gnu/libX11.so.6
|
||||
- /lib/x86_64-linux-gnu/libXau.so.6
|
||||
- /lib/x86_64-linux-gnu/libXcomposite.so.1
|
||||
- /lib/x86_64-linux-gnu/libXcursor.so.1
|
||||
- /lib/x86_64-linux-gnu/libXdamage.so.1
|
||||
- /lib/x86_64-linux-gnu/libXdmcp.so.6
|
||||
- /lib/x86_64-linux-gnu/libXext.so.6
|
||||
- /lib/x86_64-linux-gnu/libXfixes.so.3
|
||||
- /lib/x86_64-linux-gnu/libXi.so.6
|
||||
- /lib/x86_64-linux-gnu/libXinerama.so.1
|
||||
- /lib/x86_64-linux-gnu/libXrandr.so.2
|
||||
- /lib/x86_64-linux-gnu/libXrender.so.1
|
||||
- /lib/x86_64-linux-gnu/libXxf86vm.so.1
|
||||
- /lib/x86_64-linux-gnu/libatk-1.0.so.0
|
||||
- /lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0
|
||||
- /lib/x86_64-linux-gnu/libatspi.so.0
|
||||
- /lib/x86_64-linux-gnu/libblkid.so.1
|
||||
- /lib/x86_64-linux-gnu/libbrotlicommon.so.1
|
||||
- /lib/x86_64-linux-gnu/libbrotlidec.so.1
|
||||
- /lib/x86_64-linux-gnu/libbsd.so.0
|
||||
- /lib/x86_64-linux-gnu/libcairo-gobject.so.2
|
||||
- /lib/x86_64-linux-gnu/libcairo.so.2
|
||||
- /lib/x86_64-linux-gnu/libcurl-gnutls.so.4
|
||||
- /lib/x86_64-linux-gnu/libdatrie.so.1
|
||||
- /lib/x86_64-linux-gnu/libedit.so.2
|
||||
- /lib/x86_64-linux-gnu/libelf.so.1
|
||||
- /lib/x86_64-linux-gnu/libepoxy.so.0
|
||||
- /lib/x86_64-linux-gnu/libffi.so.8
|
||||
- /lib/x86_64-linux-gnu/libfontconfig.so.1
|
||||
- /lib/x86_64-linux-gnu/libfreetype.so.6
|
||||
- /lib/x86_64-linux-gnu/libfribidi.so.0
|
||||
- /lib/x86_64-linux-gnu/libgcrypt.so.20
|
||||
- /lib/x86_64-linux-gnu/libgdk-3.so.0
|
||||
- /lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0
|
||||
- /lib/x86_64-linux-gnu/libgio-2.0.so.0
|
||||
- /lib/x86_64-linux-gnu/libglfw.so.3
|
||||
- /lib/x86_64-linux-gnu/libglib-2.0.so.0
|
||||
- /lib/x86_64-linux-gnu/libgmodule-2.0.so.0
|
||||
- /lib/x86_64-linux-gnu/libgmp.so.10
|
||||
- /lib/x86_64-linux-gnu/libgnutls.so.30
|
||||
- /lib/x86_64-linux-gnu/libgobject-2.0.so.0
|
||||
- /lib/x86_64-linux-gnu/libgraphite2.so.3
|
||||
- /lib/x86_64-linux-gnu/libharfbuzz.so.0
|
||||
- /lib/x86_64-linux-gnu/libhogweed.so.6
|
||||
- /lib/x86_64-linux-gnu/libicudata.so.70
|
||||
- /lib/x86_64-linux-gnu/libicuuc.so.70
|
||||
- /lib/x86_64-linux-gnu/libidn2.so.0
|
||||
- /lib/x86_64-linux-gnu/libjpeg.so.8
|
||||
- /lib/x86_64-linux-gnu/liblber-2.5.so.0
|
||||
- /lib/x86_64-linux-gnu/libldap-2.5.so.0
|
||||
- /lib/x86_64-linux-gnu/liblz4.so.1
|
||||
- /lib/x86_64-linux-gnu/libmagic.so.1
|
||||
- /lib/x86_64-linux-gnu/libmbedcrypto.so.7
|
||||
- /lib/x86_64-linux-gnu/libmbedtls.so.14
|
||||
- /lib/x86_64-linux-gnu/libmbedx509.so.1
|
||||
- /lib/x86_64-linux-gnu/libmd.so.0
|
||||
- /lib/x86_64-linux-gnu/libmount.so.1
|
||||
- /lib/x86_64-linux-gnu/libnettle.so.8
|
||||
- /lib/x86_64-linux-gnu/libp11-kit.so.0
|
||||
- /lib/x86_64-linux-gnu/libpango-1.0.so.0
|
||||
- /lib/x86_64-linux-gnu/libpangocairo-1.0.so.0
|
||||
- /lib/x86_64-linux-gnu/libpangoft2-1.0.so.0
|
||||
- /lib/x86_64-linux-gnu/libpcre2-8.so.0
|
||||
- /lib/x86_64-linux-gnu/libpixman-1.so.0
|
||||
- /lib/x86_64-linux-gnu/libpng16.so.16
|
||||
- /lib/x86_64-linux-gnu/libsasl2.so.2
|
||||
- /lib/x86_64-linux-gnu/libsensors.so.5
|
||||
- /lib/x86_64-linux-gnu/libstdc++.so.6
|
||||
- /lib/x86_64-linux-gnu/libsystemd.so.0
|
||||
- /lib/x86_64-linux-gnu/libtasn1.so.6
|
||||
- /lib/x86_64-linux-gnu/libthai.so.0
|
||||
- /lib/x86_64-linux-gnu/libunistring.so.2
|
||||
- /lib/x86_64-linux-gnu/libuuid.so.1
|
||||
- /lib/x86_64-linux-gnu/libvulkan.so.1
|
||||
- /lib/x86_64-linux-gnu/libwayland-client.so.0
|
||||
- /lib/x86_64-linux-gnu/libwayland-cursor.so.0
|
||||
- /lib/x86_64-linux-gnu/libwayland-egl.so.1
|
||||
- /lib/x86_64-linux-gnu/libxcb-dri2.so.0
|
||||
- /lib/x86_64-linux-gnu/libxcb-dri3.so.0
|
||||
- /lib/x86_64-linux-gnu/libxcb-present.so.0
|
||||
- /lib/x86_64-linux-gnu/libxcb-sync.so.1
|
||||
- /lib/x86_64-linux-gnu/libxkbcommon.so.0
|
||||
- /lib/x86_64-linux-gnu/libxml2.so.2
|
||||
- /lib/x86_64-linux-gnu/libxshmfence.so.1
|
||||
- /lib/x86_64-linux-gnu/libzstd.so.1
|
||||
exclude:
|
||||
- usr/share/man
|
||||
- usr/share/doc/*/README.*
|
||||
- usr/share/doc/*/changelog.*
|
||||
- usr/share/doc/*/NEWS.*
|
||||
- usr/share/doc/*/TODO.*
|
||||
AppImage:
|
||||
arch: x86_64
|
||||
update-information: gh-releases-zsync|WerWolv|ImHex|latest|imhex-*-x86_64.AppImage.zsync
|
||||
file_name: imhex-{{VERSION}}-x86_64.AppImage
|
||||
5
dist/Arch/Dockerfile
vendored
5
dist/Arch/Dockerfile
vendored
@@ -13,10 +13,13 @@ RUN pacman -S --needed --noconfirm \
|
||||
glfw-x11 \
|
||||
file \
|
||||
mbedtls \
|
||||
fontconfig \
|
||||
freetype2 \
|
||||
curl \
|
||||
dbus \
|
||||
xdg-desktop-portal
|
||||
xdg-desktop-portal \
|
||||
libssh2 \
|
||||
md4c
|
||||
|
||||
# Clone ImHex
|
||||
RUN git clone https://github.com/WerWolv/ImHex --recurse-submodules /root/ImHex
|
||||
|
||||
6
dist/Arch/PKGBUILD
vendored
6
dist/Arch/PKGBUILD
vendored
@@ -8,8 +8,8 @@ pkgdesc="A Hex Editor for Reverse Engineers, Programmers and people who value th
|
||||
arch=("x86_64")
|
||||
url="https://github.com/WerWolv/ImHex"
|
||||
license=('GPL2')
|
||||
depends=(glfw mbedtls freetype2 libglvnd dbus gtk3 curl fmt yara nlohmann-json zlib bzip2 xz zstd)
|
||||
makedepends=(git)
|
||||
depends=(glfw mbedtls fontconfig freetype2 libglvnd dbus gtk3 curl fmt yara zlib bzip2 xz zstd libssh2)
|
||||
makedepends=(git nlohmann-json)
|
||||
provides=(imhex)
|
||||
conflicts=(imhex)
|
||||
source=("$url/releases/download/v$pkgver/imhex-$pkgver-ArchLinux-x86_64.pkg.tar.zst")
|
||||
@@ -26,5 +26,5 @@ package() {
|
||||
|
||||
install -d "$pkgdir/usr/share/imhex"
|
||||
cp -r "$srcdir/usr/share/imhex/"{constants,encodings,includes,magic,patterns} "$pkgdir/usr/share/imhex"
|
||||
cp -r "$srcdir/usr/share/"{applications,licenses,pixmaps} "$pkgdir/usr/share"
|
||||
cp -r "$srcdir/usr/share/"{applications,licenses,pixmaps,mime} "$pkgdir/usr/share"
|
||||
}
|
||||
|
||||
2
dist/DEBIAN/control.in
vendored
2
dist/DEBIAN/control.in
vendored
@@ -4,7 +4,7 @@ Section: editors
|
||||
Priority: optional
|
||||
Architecture: amd64
|
||||
License: GNU GPL-2
|
||||
Depends: libglfw3 | libglfw3-wayland, libmagic1, libmbedtls14, libfreetype6, libopengl0, libdbus-1-3, xdg-desktop-portal
|
||||
Depends: libfontconfig1, libglfw3 | libglfw3-wayland, libmagic1, libmbedtls14, libfreetype6, libopengl0, libdbus-1-3, xdg-desktop-portal, libssh2-1, libmd4c0
|
||||
Maintainer: WerWolv <hey@werwolv.net>
|
||||
Description: ImHex Hex Editor
|
||||
A Hex Editor for Reverse Engineers, Programmers and
|
||||
|
||||
20
dist/ImHex-9999.ebuild
vendored
20
dist/ImHex-9999.ebuild
vendored
@@ -20,13 +20,17 @@ DEPEND=""
|
||||
RDEPEND="${DEPEND}
|
||||
media-libs/glfw
|
||||
sys-apps/file
|
||||
dev-libs/mbedtls
|
||||
dev-cpp/nlohmann_json
|
||||
dbus
|
||||
xdg-desktop-portal
|
||||
net-libs/mbedtls
|
||||
sys-apps/dbus
|
||||
sys-apps/xdg-desktop-portal
|
||||
sys-libs/zlib
|
||||
app-arch/bzip2
|
||||
app-arch/lzma
|
||||
app-arch/zstd
|
||||
app-arch/bzip2
|
||||
app-arch/lzma
|
||||
app-arch/zstd
|
||||
app-arch/lz4
|
||||
net-libs/libssh2
|
||||
dev-libs/md4c
|
||||
"
|
||||
BDEPEND="${DEPEND}
|
||||
dev-cpp/nlohmann_json
|
||||
"
|
||||
BDEPEND="${DEPEND}"
|
||||
|
||||
13
dist/ImHex.run.xml
vendored
Normal file
13
dist/ImHex.run.xml
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="ImHex" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$CMakeCurrentBuildDir$" PASS_PARENT_ENVS_2="true" PROJECT_NAME="ImHex" TARGET_NAME="imhex_all" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="ImHex" RUN_TARGET_NAME="main">
|
||||
<envs>
|
||||
<env name="NO_DEBUG_BANNER" value="1" />
|
||||
</envs>
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration default="false" name="CMake Debug" type="CMakeListConfigurationType" factoryName="CMakeListConfigurationFactory">
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
||||
84
dist/appimage/Dockerfile
vendored
84
dist/appimage/Dockerfile
vendored
@@ -1,84 +0,0 @@
|
||||
FROM ubuntu:22.04 as build
|
||||
|
||||
# Used to invalidate layer cache but not mount cache
|
||||
# See https://github.com/moby/moby/issues/41715#issuecomment-733976493
|
||||
ARG UNIQUEKEY 1
|
||||
|
||||
COPY dist/get_deps_debian.sh /tmp
|
||||
RUN --mount=type=cache,target=/var/apt/cache <<EOF
|
||||
# Install apt dependencies
|
||||
set -xe
|
||||
|
||||
apt update
|
||||
|
||||
# general deps
|
||||
apt install -y ccache git wget
|
||||
# appimage tools deps
|
||||
apt install -y python3-pip python3-setuptools desktop-file-utils libgdk-pixbuf2.0-dev fuse ninja-build
|
||||
apt install -y squashfs-tools zsync
|
||||
|
||||
# imhex deps
|
||||
/tmp/get_deps_debian.sh
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/cache <<EOF
|
||||
# Download appimage-builder
|
||||
set -xe
|
||||
|
||||
mkdir -p /cache/bin
|
||||
wget -nc https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O /cache/bin/appimagetool || true
|
||||
chmod +x /cache/bin/appimagetool
|
||||
|
||||
pip3 install git+https://github.com/AppImageCrafters/appimage-builder@f38699e
|
||||
EOF
|
||||
|
||||
ENV PATH="/cache/bin/:${PATH}"
|
||||
|
||||
# Copy Imhex source
|
||||
COPY . /imhex
|
||||
|
||||
ARG LTO=ON
|
||||
ARG BUILD_TYPE=RelWithDebInfo
|
||||
ARG GIT_COMMIT_HASH
|
||||
ARG GIT_BRANCH
|
||||
WORKDIR /build
|
||||
SHELL ["bash", "-c"] # Ubuntu sh doesnt support string substitution
|
||||
RUN <<EOF
|
||||
# Prepare ImHex build
|
||||
set -xe
|
||||
|
||||
CC=gcc-12 CXX=g++-12 cmake -G "Ninja" \
|
||||
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
||||
-DCMAKE_INSTALL_PREFIX="/usr" \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DIMHEX_PATTERNS_PULL_MASTER=ON \
|
||||
-DIMHEX_COMMIT_HASH_LONG="${GIT_COMMIT_HASH}" \
|
||||
-DIMHEX_COMMIT_BRANCH="${GIT_BRANCH}" \
|
||||
-DIMHEX_ENABLE_LTO=${LTO} \
|
||||
-DIMHEX_PLUGINS_IN_SHARE=ON \
|
||||
/imhex
|
||||
EOF
|
||||
|
||||
ENV CCACHE_DIR /cache/ccache
|
||||
RUN --mount=type=cache,target=/cache <<EOF
|
||||
# Build Imhex
|
||||
set -xe
|
||||
|
||||
ccache -zs
|
||||
DESTDIR=AppDir ninja install
|
||||
ccache -s
|
||||
EOF
|
||||
|
||||
RUN <<EOF
|
||||
# Package ImHex as AppImage
|
||||
set -xe
|
||||
|
||||
export VERSION=$(cat /imhex/VERSION)
|
||||
appimage-builder --recipe /imhex/dist/AppImageBuilder.yml
|
||||
EOF
|
||||
|
||||
FROM scratch
|
||||
|
||||
# Copy build artifact
|
||||
COPY --from=build /build/*.AppImage /build/*.AppImage.zsync ./
|
||||
3
dist/cli/imhex.bat
vendored
Normal file
3
dist/cli/imhex.bat
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
@echo off
|
||||
|
||||
start "" "%~dp0..\imhex.exe" %*
|
||||
5
dist/cli/imhex.sh
vendored
Normal file
5
dist/cli/imhex.sh
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
script_path=$(readlink -f "$0")
|
||||
script_dir=$(dirname "${script_path}")
|
||||
"${script_dir}/../imhex" "$@" > /dev/null 2>&1 &
|
||||
13
dist/compiling/docker.md
vendored
13
dist/compiling/docker.md
vendored
@@ -18,11 +18,11 @@ docker buildx build . -f <DOCKERFILE_PATH> --progress plain --build-arg 'JOBS=4'
|
||||
|
||||
where `<DOCKERFILE_PATH>` should be replaced by the wanted Dockerfile base d on the build you want to do:
|
||||
|
||||
| Wanted build | Dockerfile path |
|
||||
|--------------|-----------------------------|
|
||||
| MacOS M1 | dist/macOS/arm64.Dockerfile |
|
||||
| AppImage | dist/appimage/Dockerfile |
|
||||
| Web version | dist/web/Dockerfile |
|
||||
| Wanted build | Dockerfile path | Target |
|
||||
|--------------|-----------------------------|--------|
|
||||
| MacOS M1 | dist/macOS/arm64.Dockerfile | - |
|
||||
| AppImage | dist/appimage/Dockerfile | - |
|
||||
| Web version | dist/web/Dockerfile | raw |
|
||||
|
||||
We'll explain this command in the next section
|
||||
|
||||
@@ -43,6 +43,7 @@ In the command saw earlier:
|
||||
- `.` is the base folder that the Dockerfile will be allowed to see
|
||||
- `-f <path>` is to specify the Dockerfile path
|
||||
- `--progress plain` is to allow you to see the output of instructions
|
||||
- `--build-arg <key>=<value>` is to allow to to specify arguments to the build (like -DKEY=VALUE in CMake)
|
||||
- `--build-arg <key>=<value>` is to allow to specify arguments to the build (like -DKEY=VALUE in CMake)
|
||||
- `--build-context key=<folder>` is to specify folders other than the base folder that the Dockerfile is allowed to see
|
||||
- `--output <path>` is the path to write the output package to. If not specified, Docker will create an image as the output (probably not what you want)
|
||||
- `--target <target>` specifies which docker target to build
|
||||
|
||||
10
dist/compiling/linux.md
vendored
10
dist/compiling/linux.md
vendored
@@ -9,18 +9,12 @@ On Linux, ImHex is built through regular GCC (or optionally Clang).
|
||||
cd ImHex
|
||||
mkdir -p build
|
||||
cd build
|
||||
CC=gcc-12 CXX=g++-12 \
|
||||
CC=gcc-14 CXX=g++-14 \
|
||||
cmake -G "Ninja" \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX="/usr" \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_C_FLAGS="-fuse-ld=lld" \
|
||||
-DCMAKE_CXX_FLAGS="-fuse-ld=lld" \
|
||||
-DCMAKE_OBJC_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_OBJCXX_COMPILER_LAUNCHER=ccache \
|
||||
..
|
||||
make -j 4 install
|
||||
ninja install
|
||||
```
|
||||
|
||||
All paths follow the XDG Base Directories standard, and can thus be modified
|
||||
|
||||
8
dist/compiling/macos.md
vendored
8
dist/compiling/macos.md
vendored
@@ -3,7 +3,7 @@
|
||||
On macOS, ImHex is built through regular GCC and LLVM clang.
|
||||
|
||||
1. Clone the repo using `git clone https://github.com/WerWolv/ImHex --recurse-submodules`
|
||||
2. Install all the dependencies using `brew bundle --no-lock --file dist/Brewfile`
|
||||
2. Install all the dependencies using `brew bundle --file dist/macOS/Brewfile`
|
||||
3. Build ImHex itself using the following commands:
|
||||
```sh
|
||||
cd ImHex
|
||||
@@ -15,8 +15,10 @@ OBJC=$(brew --prefix llvm)/bin/clang \
|
||||
OBJCXX=$(brew --prefix llvm)/bin/clang++ \
|
||||
cmake -G "Ninja" \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=./install \
|
||||
-DCMAKE_INSTALL_PREFIX="./install" \
|
||||
-DIMHEX_GENERATE_PACKAGE=ON \
|
||||
..
|
||||
ninja install
|
||||
```
|
||||
```
|
||||
|
||||
If your MacOS installation doesn't have graphic acceleration, you can check the [MacOS NoGPU guide](./macos_nogpu.md)
|
||||
10
dist/compiling/macos_nogpu.md
vendored
Normal file
10
dist/compiling/macos_nogpu.md
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
### Compiling and running ImHex on macOS without a GPU
|
||||
|
||||
In order to run ImHex on a macOS installation without a GPU, you need a custom build of GLFW. You can build it this way:
|
||||
|
||||
Note: only tested on macOS x86
|
||||
|
||||
1. `git clone --depth 1 https://github.com/glfw/glfw`
|
||||
2. `git apply {IMHEX_DIR}/dist/macOS/0001-glfw-SW.patch` (file is [here](../macOS/0001-glfw-SW.patch) in the ImHex repository. [Source](https://github.com/glfw/glfw/issues/2080).)
|
||||
3. `cmake -G "Ninja" -DBUILD_SHARED_LIBS=ON ..`
|
||||
4. `ninja install`, or `ninja` and figure out how to make ImHex detect the shared library
|
||||
2
dist/compiling/windows.md
vendored
2
dist/compiling/windows.md
vendored
@@ -14,7 +14,7 @@ mkdir build
|
||||
cd build
|
||||
cmake -G "Ninja" \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX="$PWD/install" \
|
||||
-DCMAKE_INSTALL_PREFIX="./install" \
|
||||
-DIMHEX_USE_DEFAULT_BUILD_SETTINGS=ON \
|
||||
..
|
||||
ninja install
|
||||
|
||||
20
dist/cppcheck.supp
vendored
Normal file
20
dist/cppcheck.supp
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
missingIncludeSystem
|
||||
constParameter
|
||||
unusedFunction
|
||||
preprocessorErrorDirective
|
||||
checkersReport
|
||||
noExplicitConstructor
|
||||
unmatchedSuppression
|
||||
useInitializationList
|
||||
useStlAlgorithm
|
||||
knownConditionTrueFalse
|
||||
internalAstError
|
||||
unsignedPositive
|
||||
variableScope
|
||||
unusedPrivateFunction
|
||||
constParameterCallback
|
||||
|
||||
*:*/lib/third_party/*
|
||||
*:*/external/pattern_language/external/*
|
||||
*:*/external/disassembler/external/*
|
||||
*:*/lib/libimhex/source/ui/imgui_imhex_extensions.cpp
|
||||
54
dist/flake.nix
vendored
Normal file
54
dist/flake.nix
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
description = "ImHex";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs }:
|
||||
let
|
||||
supportedSystems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin" ];
|
||||
forAllSystems = f: nixpkgs.lib.genAttrs supportedSystems (system: f system);
|
||||
in {
|
||||
devShells = forAllSystems (system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
in
|
||||
{
|
||||
default = pkgs.mkShell {
|
||||
buildInputs = [
|
||||
pkgs.cmake
|
||||
pkgs.clang
|
||||
pkgs.lld
|
||||
|
||||
pkgs.nghttp3
|
||||
pkgs.pkg-config
|
||||
pkgs.glfw
|
||||
pkgs.fontconfig
|
||||
pkgs.file
|
||||
pkgs.mbedtls
|
||||
pkgs.freetype
|
||||
pkgs.dbus
|
||||
pkgs.gtk3
|
||||
pkgs.curl
|
||||
pkgs.fmt
|
||||
pkgs.yara
|
||||
pkgs.nlohmann_json
|
||||
pkgs.ninja
|
||||
pkgs.zlib
|
||||
pkgs.bzip2
|
||||
pkgs.xz
|
||||
pkgs.zstd
|
||||
pkgs.lz4
|
||||
pkgs.libssh2
|
||||
pkgs.md4c
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
export CC=${pkgs.clang}/bin/clang
|
||||
export CXX=${pkgs.clang}/bin/clang++
|
||||
'';
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
||||
139
dist/flatpak/net.werwolv.ImHex.yaml
vendored
Normal file
139
dist/flatpak/net.werwolv.ImHex.yaml
vendored
Normal file
@@ -0,0 +1,139 @@
|
||||
app-id: net.werwolv.ImHex
|
||||
runtime: org.freedesktop.Platform
|
||||
runtime-version: '24.08'
|
||||
sdk: org.freedesktop.Sdk
|
||||
command: imhex
|
||||
rename-desktop-file: imhex.desktop
|
||||
|
||||
finish-args:
|
||||
- --share=ipc
|
||||
- --share=network
|
||||
- --socket=wayland
|
||||
- --socket=fallback-x11
|
||||
- --filesystem=host
|
||||
- --device=dri
|
||||
|
||||
modules:
|
||||
- name: glfw
|
||||
buildsystem: cmake-ninja
|
||||
builddir: true
|
||||
config-opts:
|
||||
- -DBUILD_SHARED_LIBS=ON
|
||||
- -DGLFW_BUILD_EXAMPLES=OFF
|
||||
- -DGLFW_BUILD_TESTS=OFF
|
||||
- -DGLFW_BUILD_DOCS=OFF
|
||||
sources:
|
||||
- type: archive
|
||||
url: https://github.com/glfw/glfw/releases/download/3.4/glfw-3.4.zip
|
||||
sha256: b5ec004b2712fd08e8861dc271428f048775200a2df719ccf575143ba749a3e9
|
||||
cleanup:
|
||||
- /include
|
||||
- /lib/pkgconfig
|
||||
- /lib/pkgconfig
|
||||
- /lib64/pkgconfig
|
||||
- /lib/cmake
|
||||
- /lib64/cmake
|
||||
|
||||
- name: mbedtls
|
||||
buildsystem: cmake-ninja
|
||||
config-opts:
|
||||
- -DCMAKE_C_FLAGS=-fPIC
|
||||
- -DENABLE_TESTING=OFF
|
||||
- -DENABLE_PROGRAMS=OFF
|
||||
sources:
|
||||
- type: archive
|
||||
url: https://github.com/ARMmbed/mbedtls/archive/refs/tags/v3.4.0.tar.gz
|
||||
sha256: 1b899f355022e8d02c4d313196a0a16af86c5a692456fa99d302915b8cf0320a
|
||||
cleanup:
|
||||
- /include
|
||||
- /lib/pkgconfig
|
||||
- /lib64/pkgconfig
|
||||
- /lib/cmake
|
||||
- /lib64/cmake
|
||||
|
||||
- name: fmt
|
||||
buildsystem: cmake-ninja
|
||||
config-opts:
|
||||
- -DBUILD_SHARED_LIBS=ON
|
||||
- -DFMT_TEST=OFF
|
||||
sources:
|
||||
- type: archive
|
||||
url: https://github.com/fmtlib/fmt/releases/download/10.0.0/fmt-10.0.0.zip
|
||||
sha256: 4943cb165f3f587f26da834d3056ee8733c397e024145ca7d2a8a96bb71ac281
|
||||
cleanup:
|
||||
- /include
|
||||
- /lib/pkgconfig
|
||||
- /lib64/pkgconfig
|
||||
- /lib/cmake
|
||||
- /lib64/cmake
|
||||
|
||||
- name: yara
|
||||
buildsystem: autotools
|
||||
sources:
|
||||
- type: git
|
||||
url: https://github.com/VirusTotal/yara.git
|
||||
tag: v4.3.1
|
||||
commit: a6f6ce1d6d74a03c396660db25765f2a794d9e30
|
||||
cleanup:
|
||||
- /include
|
||||
- /lib/pkgconfig
|
||||
- /lib64/pkgconfig
|
||||
- /lib/cmake
|
||||
- /lib64/cmake
|
||||
|
||||
- name: libssh2
|
||||
buildsystem: cmake-ninja
|
||||
config-opts:
|
||||
- -DBUILD_SHARED_LIBS=ON
|
||||
- -DENABLE_ZLIB_COMPRESSION=OFF
|
||||
- -DENABLE_MANUAL=OFF
|
||||
- -DENABLE_EXAMPLES=OFF
|
||||
- -DENABLE_TESTING=OFF
|
||||
sources:
|
||||
- type: git
|
||||
url: https://github.com/libssh2/libssh2.git
|
||||
tag: libssh2-1.11.1
|
||||
cleanup:
|
||||
- /include
|
||||
- /lib/pkgconfig
|
||||
- /lib64/pkgconfig
|
||||
- /lib/cmake
|
||||
- /lib64/cmake
|
||||
|
||||
- name: md4c
|
||||
buildsystem: cmake-ninja
|
||||
config-opts:
|
||||
- -DBUILD_SHARED_LIBS=ON
|
||||
- -DMD4C_BUILD_TESTS=OFF
|
||||
- -DMD4C_BUILD_EXAMPLES=OFF
|
||||
- -DMD4C_BUILD_DOCS=OFF
|
||||
sources:
|
||||
- type: git
|
||||
url: https://github.com/mity/md4c.git
|
||||
tag: release-0.5.2
|
||||
|
||||
- name: imhex
|
||||
buildsystem: cmake-ninja
|
||||
builddir: true
|
||||
config-opts:
|
||||
- -DUSE_SYSTEM_CURL=ON
|
||||
- -DUSE_SYSTEM_FMT=ON
|
||||
- -DUSE_SYSTEM_YARA=ON
|
||||
- -DIMHEX_OFFLINE_BUILD=ON
|
||||
- -DIMHEX_BUNDLE_PLUGIN_SDK=OFF
|
||||
- -DCMAKE_INSTALL_LIBDIR=lib
|
||||
- -DCMAKE_INSTALL_RPATH='$ORIGIN/../lib:$ORIGIN/../lib64'
|
||||
sources:
|
||||
- type: dir
|
||||
path: ../..
|
||||
- type: git
|
||||
url: https://github.com/WerWolv/ImHex-Patterns.git
|
||||
tag: master
|
||||
dest: ImHex-Patterns
|
||||
x-checker-data:
|
||||
type: git
|
||||
tag-pattern: ^ImHex-v([\d.]+)$
|
||||
post-install:
|
||||
- mkdir -p ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps
|
||||
- cp ${FLATPAK_DEST}/share/pixmaps/imhex.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/${FLATPAK_ID}.svg
|
||||
- desktop-file-edit --set-key="Icon" --set-value="${FLATPAK_ID}" "${FLATPAK_DEST}/share/applications/imhex.desktop"
|
||||
69
dist/fonts/move_private_use_area.py
vendored
Normal file
69
dist/fonts/move_private_use_area.py
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
from fontTools.ttLib import TTFont
|
||||
from fontTools.ttLib.tables._c_m_a_p import CmapSubtable
|
||||
import argparse
|
||||
|
||||
# Default PUAs
|
||||
SOURCE_PUA_START = 0xEA00
|
||||
SOURCE_PUA_END = 0x100F2
|
||||
TARGET_PUA_START = 0xF0000
|
||||
|
||||
def move_pua_glyphs(input_font_path, output_font_path):
|
||||
font = TTFont(input_font_path)
|
||||
|
||||
cmap_table = font['cmap']
|
||||
glyph_set = font.getGlyphSet()
|
||||
|
||||
# Track moved glyphs
|
||||
moved = 0
|
||||
new_mapping = {}
|
||||
|
||||
# Collect original mappings in the PUA
|
||||
for cmap in cmap_table.tables:
|
||||
if cmap.isUnicode():
|
||||
for codepoint, glyph_name in cmap.cmap.items():
|
||||
if SOURCE_PUA_START <= codepoint <= SOURCE_PUA_END:
|
||||
offset = codepoint - SOURCE_PUA_START
|
||||
new_codepoint = TARGET_PUA_START + offset
|
||||
new_mapping[new_codepoint] = glyph_name
|
||||
moved += 1
|
||||
|
||||
if moved == 0:
|
||||
print("No glyphs found in the source Private Use Area.")
|
||||
return
|
||||
|
||||
# Remove old PUA entries from existing cmap subtables
|
||||
for cmap in cmap_table.tables:
|
||||
if cmap.isUnicode():
|
||||
cmap.cmap = {
|
||||
cp: gn for cp, gn in cmap.cmap.items()
|
||||
if not (SOURCE_PUA_START <= cp <= SOURCE_PUA_END)
|
||||
}
|
||||
|
||||
# Create or update a format 12 cmap subtable
|
||||
found_format12 = False
|
||||
for cmap in cmap_table.tables:
|
||||
if cmap.format == 12 and cmap.platformID == 3 and cmap.platEncID in (10, 1):
|
||||
cmap.cmap.update(new_mapping)
|
||||
found_format12 = True
|
||||
break
|
||||
|
||||
if not found_format12:
|
||||
# Create a new format 12 subtable
|
||||
cmap12 = CmapSubtable.newSubtable(12)
|
||||
cmap12.platformID = 3
|
||||
cmap12.platEncID = 10 # UCS-4
|
||||
cmap12.language = 0
|
||||
cmap12.cmap = new_mapping
|
||||
cmap_table.tables.append(cmap12)
|
||||
|
||||
print(f"Moved {moved} glyphs from U+{SOURCE_PUA_START:X}–U+{SOURCE_PUA_END:X} to U+{TARGET_PUA_START:X}+")
|
||||
font.save(output_font_path)
|
||||
print(f"Saved modified font to {output_font_path}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Move PUA glyphs in a TTF file to another Unicode range.")
|
||||
parser.add_argument("input", help="Input TTF file path")
|
||||
parser.add_argument("output", help="Output TTF file path")
|
||||
|
||||
args = parser.parse_args()
|
||||
move_pua_glyphs(args.input, args.output)
|
||||
60
dist/fonts/ttf_to_header_file.py
vendored
Normal file
60
dist/fonts/ttf_to_header_file.py
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
import argparse
|
||||
from fontTools.ttLib import TTFont
|
||||
import os
|
||||
|
||||
def unicode_to_utf8_escape(codepoint):
|
||||
return ''.join([f'\\x{b:02x}' for b in chr(codepoint).encode('utf-8')])
|
||||
|
||||
def format_macro_name(prefix, glyph_name):
|
||||
# Convert names like 'repo-forked' -> 'ICON_VS_REPO_FORKED'
|
||||
return "ICON_" + prefix + "_" + glyph_name.upper().replace('-', '_')
|
||||
|
||||
def generate_font_header(font_path, output_path, font_macro_name, font_file_macro):
|
||||
font = TTFont(font_path)
|
||||
|
||||
# Use cmap to get Unicode to glyph mapping
|
||||
codepoint_to_names = {}
|
||||
for table in font["cmap"].tables:
|
||||
if table.isUnicode():
|
||||
for codepoint, glyph_name in table.cmap.items():
|
||||
codepoint_to_names.setdefault(codepoint, []).append(glyph_name)
|
||||
|
||||
if not codepoint_to_names:
|
||||
print("No Unicode-mapped glyphs found in the font.")
|
||||
return
|
||||
|
||||
# Remove any glyph that is lower than 0xFF
|
||||
codepoint_to_names = {cp: names for cp, names in codepoint_to_names.items() if cp >= 0xFF}
|
||||
|
||||
min_cp = min(codepoint_to_names)
|
||||
max_cp = max(codepoint_to_names)
|
||||
|
||||
with open(output_path, "w", encoding="utf-8") as out:
|
||||
out.write("#pragma once\n\n")
|
||||
out.write(f'#define FONT_ICON_FILE_NAME_{font_macro_name} "{font_file_macro}"\n\n')
|
||||
out.write(f"#define ICON_MIN_{font_macro_name} 0x{min_cp:04x}\n")
|
||||
out.write(f"#define ICON_MAX_16_{font_macro_name} 0x{max_cp:04x}\n")
|
||||
out.write(f"#define ICON_MAX_{font_macro_name} 0x{max_cp:04x}\n")
|
||||
|
||||
written = set()
|
||||
for codepoint in sorted(codepoint_to_names):
|
||||
utf8 = unicode_to_utf8_escape(codepoint)
|
||||
comment = f"// U+{codepoint:04X}"
|
||||
glyph_names = sorted(set(codepoint_to_names[codepoint]))
|
||||
for i, glyph_name in enumerate(glyph_names):
|
||||
macro = format_macro_name(font_macro_name, glyph_name)
|
||||
if macro in written:
|
||||
continue
|
||||
out.write(f"#define {macro} \"{utf8}\"\t{comment}\n")
|
||||
written.add(macro)
|
||||
|
||||
print(f"Header generated at {output_path}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Generate C header file from TTF glyphs.")
|
||||
parser.add_argument("font", help="Input .ttf font file")
|
||||
parser.add_argument("output", help="Output .h file")
|
||||
parser.add_argument("macro_name", help="Macro prefix")
|
||||
args = parser.parse_args()
|
||||
|
||||
generate_font_header(args.font, args.output, args.macro_name, os.path.basename(args.font))
|
||||
54
dist/gen_release_notes.py
vendored
Normal file
54
dist/gen_release_notes.py
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
def get_commits(branch: str, start_tag: str, end_tag: str) -> list[str]:
|
||||
try:
|
||||
commits_raw = subprocess.check_output([ "git", "--no-pager", "log", branch, "--no-color", "--pretty=oneline", "--abbrev-commit", f"{start_tag}..{end_tag}"], stderr=subprocess.DEVNULL).decode("UTF-8").split("\n")
|
||||
except:
|
||||
return []
|
||||
|
||||
commits = []
|
||||
for line in commits_raw:
|
||||
commits.append(line[9:])
|
||||
|
||||
return commits
|
||||
|
||||
def main(args: list) -> int:
|
||||
if len(args) != 2:
|
||||
print(f"Usage: {args[0]} prev_minor")
|
||||
return 1
|
||||
|
||||
last_minor_version = f"v1.{args[1]}"
|
||||
|
||||
master_commits = get_commits("master", f"{last_minor_version}.0", "master")
|
||||
|
||||
for i in range(1, 100):
|
||||
branch_commits = get_commits(f"releases/{last_minor_version}.X", f"{last_minor_version}.0", f"{last_minor_version}.{i}")
|
||||
|
||||
if len(branch_commits) == 0:
|
||||
break
|
||||
|
||||
master_commits = [commit for commit in master_commits if commit not in branch_commits]
|
||||
|
||||
sorted_commits = {}
|
||||
for commit in master_commits:
|
||||
if commit == "":
|
||||
continue
|
||||
|
||||
try:
|
||||
category, commit_name = commit.split(":", 1)
|
||||
|
||||
if category not in sorted_commits:
|
||||
sorted_commits[category] = []
|
||||
sorted_commits[category].append(commit_name)
|
||||
except:
|
||||
print(f"Failed to parse commit: {commit}")
|
||||
|
||||
for category in sorted_commits:
|
||||
print(f"## {category}\n")
|
||||
for commit in sorted_commits[category]:
|
||||
print(f"- {commit}")
|
||||
print(f"\n")
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit(main(sys.argv))
|
||||
6
dist/get_deps_archlinux.sh
vendored
6
dist/get_deps_archlinux.sh
vendored
@@ -5,6 +5,7 @@ pacman -S $@ --needed \
|
||||
gcc \
|
||||
lld \
|
||||
glfw \
|
||||
fontconfig \
|
||||
file \
|
||||
mbedtls \
|
||||
freetype2 \
|
||||
@@ -18,4 +19,7 @@ pacman -S $@ --needed \
|
||||
zlib \
|
||||
bzip2 \
|
||||
xz \
|
||||
zstd
|
||||
zstd \
|
||||
lz4 \
|
||||
libssh2 \
|
||||
md4c
|
||||
|
||||
11
dist/get_deps_debian.sh
vendored
11
dist/get_deps_debian.sh
vendored
@@ -8,8 +8,8 @@ fi
|
||||
|
||||
apt install -y \
|
||||
build-essential \
|
||||
gcc-12 \
|
||||
g++-12 \
|
||||
gcc-14 \
|
||||
g++-14 \
|
||||
lld \
|
||||
${PKGCONF:-} \
|
||||
cmake \
|
||||
@@ -18,6 +18,7 @@ apt install -y \
|
||||
libglm-dev \
|
||||
libmagic-dev \
|
||||
libmbedtls-dev \
|
||||
libfontconfig-dev \
|
||||
libfreetype-dev \
|
||||
libdbus-1-dev \
|
||||
libcurl4-gnutls-dev \
|
||||
@@ -26,4 +27,8 @@ apt install -y \
|
||||
zlib1g-dev \
|
||||
libbz2-dev \
|
||||
liblzma-dev \
|
||||
libzstd-dev
|
||||
libzstd-dev \
|
||||
liblz4-dev \
|
||||
libssh2-1-dev \
|
||||
libmd4c-dev \
|
||||
libmd4c-html0-dev
|
||||
|
||||
5
dist/get_deps_fedora.sh
vendored
5
dist/get_deps_fedora.sh
vendored
@@ -4,6 +4,7 @@ dnf install -y \
|
||||
cmake \
|
||||
dbus-devel \
|
||||
file-devel \
|
||||
fontconfig-devel \
|
||||
freetype-devel \
|
||||
libcurl-devel \
|
||||
gcc-c++ \
|
||||
@@ -16,4 +17,6 @@ dnf install -y \
|
||||
libzstd-devel \
|
||||
zlib-devel \
|
||||
bzip2-devel \
|
||||
xz-devel
|
||||
xz-devel \
|
||||
lz4-devel \
|
||||
libssh2-devel
|
||||
|
||||
37
dist/get_deps_msys2.sh
vendored
37
dist/get_deps_msys2.sh
vendored
@@ -1,20 +1,23 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
pacman -S --needed --noconfirm pactoys
|
||||
pacman -S --needed --noconfirm pactoys unzip git
|
||||
pacboy -S --needed --noconfirm \
|
||||
gcc:p \
|
||||
lld:p \
|
||||
cmake:p \
|
||||
ccache:p \
|
||||
glfw:p \
|
||||
file:p \
|
||||
curl-winssl:p \
|
||||
mbedtls:p \
|
||||
freetype:p \
|
||||
dlfcn:p \
|
||||
ninja:p \
|
||||
capstone:p \
|
||||
zlib:p \
|
||||
bzip2:p \
|
||||
xz:p \
|
||||
zstd:p
|
||||
gcc:p \
|
||||
lld:p \
|
||||
cmake:p \
|
||||
ccache:p \
|
||||
glfw:p \
|
||||
file:p \
|
||||
curl-winssl:p \
|
||||
mbedtls:p \
|
||||
freetype:p \
|
||||
dlfcn:p \
|
||||
ninja:p \
|
||||
capstone:p \
|
||||
zlib:p \
|
||||
bzip2:p \
|
||||
xz:p \
|
||||
zstd:p \
|
||||
lz4:p \
|
||||
libssh2-wincng:p \
|
||||
md4c:p
|
||||
|
||||
23
dist/get_deps_tumbleweed.sh
vendored
Executable file
23
dist/get_deps_tumbleweed.sh
vendored
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
zypper install \
|
||||
cmake \
|
||||
ninja \
|
||||
gcc14 \
|
||||
gcc14-c++ \
|
||||
fontconfig-devel \
|
||||
freetype2-devel \
|
||||
libcurl-devel \
|
||||
dbus-1-devel \
|
||||
file-devel \
|
||||
Mesa-libGL-devel \
|
||||
libglfw-devel \
|
||||
mbedtls-devel \
|
||||
gtk3-devel \
|
||||
libzstd-devel \
|
||||
zlib-devel \
|
||||
bzip3-devel \
|
||||
xz-devel \
|
||||
lz4-dev \
|
||||
libssh2-devel \
|
||||
md4c-devel
|
||||
8
dist/imhex.desktop
vendored
8
dist/imhex.desktop
vendored
@@ -1,4 +1,5 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=ImHex
|
||||
Comment=ImHex Hex Editor
|
||||
GenericName=Hex Editor
|
||||
@@ -8,3 +9,10 @@ Type=Application
|
||||
StartupNotify=true
|
||||
Categories=Development;IDE;
|
||||
StartupWMClass=imhex
|
||||
Keywords=static-analysis;reverse-engineering;disassembler;disassembly;hacking;forensics;hex-editor;cybersecurity;security;binary-analysis;
|
||||
MimeType=application/vnd.imhex.proj;
|
||||
Actions=NewFile;
|
||||
|
||||
[Desktop Action NewFile]
|
||||
Exec=imhex --new
|
||||
Name=Create New File
|
||||
8
dist/imhex.mime.xml
vendored
Normal file
8
dist/imhex.mime.xml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
<mime-type type="application/vnd.imhex.proj">
|
||||
<comment>ImHex Project</comment>
|
||||
<glob pattern="*.hexproj"/>
|
||||
</mime-type>
|
||||
</mime-info>
|
||||
239
dist/langtool.py
vendored
Normal file → Executable file
239
dist/langtool.py
vendored
Normal file → Executable file
@@ -1,104 +1,203 @@
|
||||
#!/usr/bin/env python3
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import argparse
|
||||
import json
|
||||
|
||||
# This fixes a CJK full-width character input issue
|
||||
# which makes left halves of deleted characters displayed on screen
|
||||
# pylint: disable=unused-import
|
||||
import re
|
||||
import readline
|
||||
|
||||
DEFAULT_LANG = "en_US"
|
||||
DEFAULT_LANG_PATH = "plugins/*/romfs/lang/"
|
||||
INVALID_TRANSLATION = ""
|
||||
|
||||
|
||||
def handle_missing_key(command, lang_data, key, value):
|
||||
if command == "check":
|
||||
print(f"Error: Translation {lang_data['code']} is missing translation for key '{key}'")
|
||||
exit(2)
|
||||
elif command == "translate" or command == "create":
|
||||
print(f"Key \033[1m'{key}': '{value}'\033[0m is missing in translation '{lang_data['code']}'")
|
||||
new_value = input("Enter translation: ")
|
||||
lang_data["translations"][key] = new_value
|
||||
elif command == "update":
|
||||
lang_data["translations"][key] = INVALID_TRANSLATION
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 3:
|
||||
print(f"Usage: {Path(sys.argv[0]).name} <check|translate|update|create> <lang folder path> <language>")
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="langtool",
|
||||
description="ImHex translate tool",
|
||||
)
|
||||
parser.add_argument(
|
||||
"command",
|
||||
choices=[
|
||||
"check",
|
||||
"translate",
|
||||
"update",
|
||||
"create",
|
||||
"retranslate",
|
||||
"untranslate",
|
||||
"fmtzh",
|
||||
],
|
||||
)
|
||||
parser.add_argument(
|
||||
"-c", "--langdir", default=DEFAULT_LANG_PATH, help="Language folder glob"
|
||||
)
|
||||
parser.add_argument("-l", "--lang", default="", help="Language to translate")
|
||||
parser.add_argument(
|
||||
"-r", "--reflang", default="", help="Language for reference when translating"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-k", "--keys", help="Keys to re-translate (only in re/untranslate mode)"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
command = args.command
|
||||
lang = args.lang
|
||||
|
||||
print(f"Running in {command} mode")
|
||||
lang_files_glob = f"{lang}.json" if lang != "" else "*.json"
|
||||
|
||||
lang_folders = set(Path(".").glob(args.langdir))
|
||||
if len(lang_folders) == 0:
|
||||
print(f"Error: {args.langdir} matches nothing")
|
||||
return 1
|
||||
|
||||
command = sys.argv[1]
|
||||
if command not in ["check", "translate", "update", "create"]:
|
||||
print(f"Unknown command: {command}")
|
||||
return 1
|
||||
for lang_folder in lang_folders:
|
||||
if not lang_folder.is_dir():
|
||||
print(f"Error: {lang_folder} is not a folder")
|
||||
return 1
|
||||
|
||||
print(f"Using langtool in {command} mode")
|
||||
default_lang_data = {}
|
||||
default_lang_path = lang_folder / Path(DEFAULT_LANG + ".json")
|
||||
if not default_lang_path.exists():
|
||||
print(
|
||||
f"Error: Default language file {default_lang_path} does not exist in {lang_folder}"
|
||||
)
|
||||
return 1
|
||||
with default_lang_path.open("r", encoding="utf-8") as file:
|
||||
default_lang_data = json.load(file)
|
||||
|
||||
lang_folder_path = Path(sys.argv[2])
|
||||
if not lang_folder_path.exists():
|
||||
print(f"Error: {lang_folder_path} does not exist")
|
||||
return 1
|
||||
|
||||
if not lang_folder_path.is_dir():
|
||||
print(f"Error: {lang_folder_path} is not a folder")
|
||||
return 1
|
||||
|
||||
lang = sys.argv[3] if len(sys.argv) > 3 else ""
|
||||
|
||||
print(f"Processing language files in {lang_folder_path}...")
|
||||
|
||||
default_lang_file_path = lang_folder_path / Path(DEFAULT_LANG + ".json")
|
||||
if not default_lang_file_path.exists():
|
||||
print(f"Error: Default language file {default_lang_file_path} does not exist")
|
||||
return 1
|
||||
|
||||
print(f"Using file '{default_lang_file_path.name}' as template language file")
|
||||
|
||||
with default_lang_file_path.open("r", encoding="utf-8") as default_lang_file:
|
||||
default_lang_data = json.load(default_lang_file)
|
||||
reference_lang_data = None
|
||||
reference_lang_path = lang_folder / Path(args.reflang + ".json")
|
||||
if reference_lang_path.exists():
|
||||
with reference_lang_path.open("r", encoding="utf-8") as file:
|
||||
reference_lang_data = json.load(file)
|
||||
|
||||
if command == "create" and lang != "":
|
||||
lang_file_path = lang_folder_path / Path(lang + ".json")
|
||||
lang_file_path = lang_folder / Path(lang + ".json")
|
||||
if lang_file_path.exists():
|
||||
print(f"Error: Language file {lang_file_path} already exists")
|
||||
return 1
|
||||
continue
|
||||
|
||||
print(f"Creating new language file '{lang_file_path.name}'")
|
||||
exist_lang_data = None
|
||||
for lang_folder1 in lang_folders:
|
||||
lang_file_path1 = lang_folder1 / Path(lang + ".json")
|
||||
if lang_file_path1.exists():
|
||||
with lang_file_path1.open("r", encoding="utf-8") as file:
|
||||
exist_lang_data = json.load(file)
|
||||
break
|
||||
|
||||
print(f"Creating new language file '{lang_file_path}'")
|
||||
|
||||
with lang_file_path.open("w", encoding="utf-8") as new_lang_file:
|
||||
new_lang_data = {
|
||||
"code": lang,
|
||||
"language": input("Enter language: "),
|
||||
"country": input("Enter country: "),
|
||||
"translations": {}
|
||||
|
||||
}
|
||||
json.dump(new_lang_data, new_lang_file, indent=4, ensure_ascii=False)
|
||||
|
||||
for additional_lang_file_path in lang_folder_path.glob("*.json"):
|
||||
if not lang == "" and not additional_lang_file_path.stem == lang:
|
||||
lang_files = set(lang_folder.glob(lang_files_glob))
|
||||
if len(lang_files) == 0:
|
||||
print(f"Warn: Language file for '{lang}' does not exist in '{lang_folder}'")
|
||||
for lang_file_path in lang_files:
|
||||
if (
|
||||
lang_file_path.stem == f"{DEFAULT_LANG}.json"
|
||||
or lang_file_path.stem == f"{args.reflang}.json"
|
||||
):
|
||||
continue
|
||||
|
||||
if additional_lang_file_path.name.startswith(DEFAULT_LANG):
|
||||
continue
|
||||
print(f"\nProcessing '{lang_file_path}'")
|
||||
if not (command == "update" or command == "create"):
|
||||
print("\n----------------------------\n")
|
||||
|
||||
print(f"\nProcessing file '{additional_lang_file_path.name}'\n----------------------------\n")
|
||||
with lang_file_path.open("r+", encoding="utf-8") as target_lang_file:
|
||||
lang_data = json.load(target_lang_file)
|
||||
|
||||
with additional_lang_file_path.open("r+", encoding="utf-8") as additional_lang_file:
|
||||
additional_lang_data = json.load(additional_lang_file)
|
||||
|
||||
for key, value in default_lang_data["translations"].items():
|
||||
if key not in additional_lang_data["translations"] or additional_lang_data["translations"][key] == INVALID_TRANSLATION:
|
||||
handle_missing_key(command, additional_lang_data, key, value)
|
||||
for key, value in default_lang_data.items():
|
||||
has_translation = (
|
||||
key in lang_data
|
||||
and lang_data[key] != INVALID_TRANSLATION
|
||||
)
|
||||
if (
|
||||
has_translation
|
||||
and not (
|
||||
(command == "retranslate" or command == "untranslate")
|
||||
and re.compile(args.keys).fullmatch(key)
|
||||
)
|
||||
and not command == "fmtzh"
|
||||
):
|
||||
continue
|
||||
if command == "check":
|
||||
print(
|
||||
f"Error: Translation {lang_file_path} is missing translation for key '{key}'"
|
||||
)
|
||||
elif (
|
||||
command == "translate"
|
||||
or command == "retranslate"
|
||||
or command == "untranslate"
|
||||
):
|
||||
if command == "untranslate" and not has_translation:
|
||||
continue
|
||||
reference_tranlsation = (
|
||||
" '%s'" % reference_lang_data[key]
|
||||
if (
|
||||
reference_lang_data
|
||||
and key in reference_lang_data
|
||||
)
|
||||
else ""
|
||||
)
|
||||
print(
|
||||
f"\033[1m'{key}' '{value}'{reference_tranlsation}\033[0m => ",
|
||||
end="",
|
||||
)
|
||||
if has_translation:
|
||||
translation = lang_data[key]
|
||||
print(f" <= \033[1m'{translation}'\033[0m")
|
||||
print() # for a new line
|
||||
if command == "untranslate":
|
||||
lang_data[key] = INVALID_TRANSLATION
|
||||
continue
|
||||
try:
|
||||
new_value = input("=> ")
|
||||
lang_data[key] = new_value
|
||||
except KeyboardInterrupt:
|
||||
break
|
||||
elif command == "update" or command == "create":
|
||||
lang_data[key] = INVALID_TRANSLATION
|
||||
elif command == "fmtzh":
|
||||
if has_translation:
|
||||
lang_data[key] = fmtzh(
|
||||
lang_data[key]
|
||||
)
|
||||
|
||||
keys_to_remove = []
|
||||
for key, value in additional_lang_data["translations"].items():
|
||||
if key not in default_lang_data["translations"]:
|
||||
for key, value in lang_data.items():
|
||||
if key not in default_lang_data:
|
||||
keys_to_remove.append(key)
|
||||
|
||||
for key in keys_to_remove:
|
||||
additional_lang_data["translations"].pop(key)
|
||||
print(f"Removed unused key '{key}' from translation '{additional_lang_data['code']}'")
|
||||
lang_data.pop(key)
|
||||
print(
|
||||
f"Removed unused key '{key}' from translation '{lang_file_path}'"
|
||||
)
|
||||
|
||||
additional_lang_file.seek(0)
|
||||
additional_lang_file.truncate()
|
||||
json.dump(additional_lang_data, additional_lang_file, indent=4, sort_keys=True, ensure_ascii=False)
|
||||
target_lang_file.seek(0)
|
||||
target_lang_file.truncate()
|
||||
json.dump(
|
||||
lang_data,
|
||||
target_lang_file,
|
||||
indent=4,
|
||||
sort_keys=True,
|
||||
ensure_ascii=False,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
def fmtzh(text: str) -> str:
|
||||
text = re.sub(r"(\.{3}|\.{6})", "……", text)
|
||||
text = text.replace("!", "!")
|
||||
text = re.sub(r"([^\.\na-zA-Z\d])\.$", "\1。", text, flags=re.M)
|
||||
text = text.replace("?", "?")
|
||||
return text
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit(main())
|
||||
|
||||
2
dist/macOS/0001-glfw-SW.patch
vendored
2
dist/macOS/0001-glfw-SW.patch
vendored
@@ -1,5 +1,5 @@
|
||||
From 9c8665af4c2e2ce66555c15c05c72027bfdf0cb6 Mon Sep 17 00:00:00 2001
|
||||
From: iTrooz <itrooz@protonmail.com>
|
||||
From: iTrooz <hey@itrooz.fr>
|
||||
Date: Mon, 29 Aug 2022 17:29:38 +0200
|
||||
Subject: [PATCH] Use software rendering on MacOS
|
||||
|
||||
|
||||
5
dist/Brewfile → dist/macOS/Brewfile
vendored
5
dist/Brewfile → dist/macOS/Brewfile
vendored
@@ -6,11 +6,12 @@ brew "freetype2"
|
||||
brew "libmagic"
|
||||
brew "pkg-config"
|
||||
brew "curl"
|
||||
brew "gcc@12"
|
||||
brew "llvm"
|
||||
brew "glfw"
|
||||
brew "ninja"
|
||||
brew "zlib"
|
||||
brew "xz"
|
||||
brew "bzip2"
|
||||
brew "zstd"
|
||||
brew "zstd"
|
||||
brew "libssh2"
|
||||
brew "md4c"
|
||||
50
dist/macOS/arm64.Dockerfile
vendored
50
dist/macOS/arm64.Dockerfile
vendored
@@ -1,18 +1,29 @@
|
||||
# This base image is also known as "crosscompile". See arm64.crosscompile.Dockerfile
|
||||
FROM ghcr.io/itrooz/macos-crosscompile:clang17-nosdk as build
|
||||
FROM ghcr.io/werwolv/macos-crosscompile:6d89b20ac5ebedb6f680f94637591c94cb36f40b as build
|
||||
|
||||
ENV MACOSX_DEPLOYMENT_TARGET 12.1
|
||||
ENV MACOSX_DEPLOYMENT_TARGET 11.0
|
||||
|
||||
# -- DOWNLOADING STUFF
|
||||
|
||||
# Update vcpkg
|
||||
RUN <<EOF
|
||||
cp /vcpkg/triplets/community/arm-osx-mytriplet.cmake /tmp/arm-osx-mytriplet.cmake
|
||||
git -C /vcpkg clean -ffdx
|
||||
git -C /vcpkg checkout origin/master
|
||||
git -C /vcpkg reset --hard
|
||||
git -C /vcpkg pull
|
||||
/vcpkg/bootstrap-vcpkg.sh
|
||||
cp /tmp/arm-osx-mytriplet.cmake /vcpkg/triplets/community/arm-osx-mytriplet.cmake
|
||||
EOF
|
||||
|
||||
## Install make
|
||||
RUN --mount=type=cache,target=/var/lib/apt/lists/ apt update && apt install -y make
|
||||
RUN --mount=type=cache,target=/var/lib/apt/lists/ apt update && apt install -y make cmake
|
||||
|
||||
## fix environment
|
||||
### add install_name_tool for cmake command that won't have the right env set (see PostprocessBundle.cmake function postprocess_bundle())
|
||||
RUN cp /osxcross/build/cctools-port/cctools/misc/install_name_tool /usr/bin/install_name_tool
|
||||
### a cmake thing wants 'otool' and not '' apparently
|
||||
RUN cp /osxcross/target/bin/aarch64-apple-darwin23-otool /usr/bin/otool
|
||||
RUN cp /osxcross/target/bin/aarch64-apple-darwin24-otool /usr/bin/otool
|
||||
|
||||
## Clone glfw
|
||||
RUN <<EOF
|
||||
@@ -25,19 +36,19 @@ EOF
|
||||
RUN --mount=type=cache,target=/cache <<EOF
|
||||
## Download SDK is missing (it may have been removed from the image)
|
||||
set -xe
|
||||
if [ ! -d /osxcross/target/SDK/MacOSX14.0.sdk ]; then
|
||||
wget https://github.com/joseluisq/macosx-sdks/releases/download/14.0/MacOSX14.0.sdk.tar.xz -O /cache/MacOSX14.0.sdk.tar.xz -nc || true
|
||||
if [ ! -d /osxcross/target/SDK/MacOSX15.0.sdk ]; then
|
||||
wget https://github.com/joseluisq/macosx-sdks/releases/download/15.0/MacOSX15.0.sdk.tar.xz -O /cache/MacOSX15.0.sdk.tar.xz -nc || true
|
||||
mkdir -p /osxcross/target/SDK
|
||||
tar -C /osxcross/target/SDK -xf /cache/MacOSX14.0.sdk.tar.xz
|
||||
tar -C /osxcross/target/SDK -xf /cache/MacOSX15.0.sdk.tar.xz
|
||||
fi
|
||||
EOF
|
||||
|
||||
|
||||
## Download libmagic
|
||||
### Clone libmagic
|
||||
RUN git clone https://github.com/file/file /mnt/file
|
||||
RUN git clone --depth 1 --branch FILE5_46 https://github.com/file/file /mnt/file
|
||||
### Download libmagic dependencies
|
||||
RUN --mount=type=cache,target=/var/lib/apt/lists/ apt install -y libtool autoconf
|
||||
RUN --mount=type=cache,target=/var/lib/apt/lists/ apt update && apt install -y libtool autoconf
|
||||
|
||||
# -- DOWNLOADING + BUILDING STUFF
|
||||
|
||||
@@ -56,6 +67,8 @@ vcpkg install --triplet=arm-osx-mytriplet zlib
|
||||
vcpkg install --triplet=arm-osx-mytriplet bzip2
|
||||
vcpkg install --triplet=arm-osx-mytriplet liblzma
|
||||
vcpkg install --triplet=arm-osx-mytriplet zstd
|
||||
vcpkg install --triplet=arm-osx-mytriplet openssl
|
||||
vcpkg install --triplet=arm-osx-mytriplet libssh2
|
||||
EOF
|
||||
|
||||
## Install glfw3 dep
|
||||
@@ -88,7 +101,7 @@ RUN --mount=type=cache,target=/cache <<EOF
|
||||
make -j $JOBS install
|
||||
|
||||
# Now, we cross-compile it and install it in the libraries folder
|
||||
CC=/osxcross/target/bin/aarch64-apple-darwin23-clang CXX=/osxcross/target/bin/aarch64-apple-darwin23-clang++ ./configure --prefix /vcpkg/installed/arm-osx-mytriplet --host $OSXCROSS_HOST
|
||||
CC=/osxcross/target/bin/aarch64-apple-darwin24-clang CXX=/osxcross/target/bin/aarch64-apple-darwin24-clang++ ./configure --prefix /vcpkg/installed/arm-osx-mytriplet --host $OSXCROSS_HOST
|
||||
make -j $JOBS
|
||||
make install
|
||||
|
||||
@@ -118,7 +131,8 @@ if [ "$CUSTOM_GLFW" ]; then
|
||||
cd /mnt/glfw
|
||||
mkdir build
|
||||
cd build
|
||||
CC=o64-gcc CXX=o64-g++ cmake -G "Ninja" \
|
||||
CC=o64-clang CXX=o64-clang++ cmake -G "Ninja" \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
|
||||
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
@@ -126,7 +140,7 @@ if [ "$CUSTOM_GLFW" ]; then
|
||||
-DCMAKE_OBJC_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_OBJCXX_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_INSTALL_PREFIX=/vcpkg/installed/arm-osx-mytriplet \
|
||||
-DVCPKG_TARGET_TRIPLET=arm-osx-mytriplet -DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=/osxcross/target/toolchain.cmake -DCMAKE_OSX_SYSROOT=/osxcross/target/SDK/MacOSX14.0.sdk -DCMAKE_OSX_DEPLOYMENT_TARGET=12.1 \
|
||||
-DVCPKG_TARGET_TRIPLET=arm-osx-mytriplet -DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=/osxcross/target/toolchain.cmake -DCMAKE_OSX_SYSROOT=/osxcross/target/SDK/MacOSX14.0.sdk -DCMAKE_OSX_DEPLOYMENT_TARGET=13.3 \
|
||||
..
|
||||
ninja -j $JOBS install
|
||||
|
||||
@@ -137,25 +151,25 @@ EOF
|
||||
# Build ImHex
|
||||
## Copy ImHex
|
||||
COPY --from=imhex / /mnt/ImHex
|
||||
## Patch ImHex with hacks
|
||||
# COPY toolchain.cmake.2 /osxcross/target/toolchain.cmake
|
||||
# Configure ImHex build
|
||||
## Configure ImHex build
|
||||
RUN --mount=type=cache,target=/cache --mount=type=cache,target=/mnt/ImHex/build/_deps \
|
||||
cd /mnt/ImHex && \
|
||||
# compilers
|
||||
CC=o64-clang CXX=o64-clang++ OBJC=/osxcross/target/bin/aarch64-apple-darwin23-clang OBJCXX=/osxcross/target/bin/aarch64-apple-darwin23-clang++ \
|
||||
CC=o64-clang CXX=o64-clang++ OBJC=/osxcross/target/bin/aarch64-apple-darwin24-clang OBJCXX=/osxcross/target/bin/aarch64-apple-darwin24-clang++ \
|
||||
cmake -G "Ninja" \
|
||||
`# ccache flags` \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_OBJC_COMPILER_LAUNCHER=ccache -DCMAKE_OBJCXX_COMPILER_LAUNCHER=ccache \
|
||||
`# MacOS cross-compiling flags` \
|
||||
-DVCPKG_TARGET_TRIPLET=arm-osx-mytriplet -DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=/osxcross/target/toolchain.cmake -DCMAKE_OSX_SYSROOT=/osxcross/target/SDK/MacOSX14.0.sdk -DCMAKE_OSX_DEPLOYMENT_TARGET=12.1 \
|
||||
-DVCPKG_TARGET_TRIPLET=arm-osx-mytriplet -DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=/osxcross/target/toolchain.cmake -DCMAKE_OSX_SYSROOT=/osxcross/target/SDK/MacOSX14.0.sdk -DCMAKE_OSX_DEPLOYMENT_TARGET=13.3 \
|
||||
`# Override compilers for code generators` \
|
||||
-DNATIVE_CMAKE_C_COMPILER=/usr/bin/clang -DNATIVE_CMAKE_CXX_COMPILER=/usr/bin/clang++ \
|
||||
`# Normal ImHex flags` \
|
||||
-DIMHEX_GENERATE_PACKAGE=ON -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
||||
`# other flags` \
|
||||
-DIMHEX_STRICT_WARNINGS=OFF \
|
||||
-DIMHEX_PATTERNS_PULL_MASTER=ON \
|
||||
-DCMAKE_INSTALL_PREFIX=/mnt/ImHex/build/install \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
|
||||
-B build
|
||||
## Build ImHex
|
||||
RUN --mount=type=cache,target=/cache --mount=type=cache,target=/mnt/ImHex/build/_deps <<EOF
|
||||
@@ -170,4 +184,4 @@ EOF
|
||||
|
||||
|
||||
FROM scratch
|
||||
COPY --from=build /mnt/ImHex/build/install/imhex.app ImHex.app
|
||||
COPY --from=build /mnt/ImHex/build/install/ImHex.app ImHex.app
|
||||
|
||||
19
dist/macOS/arm64.crosscompile.Dockerfile
vendored
19
dist/macOS/arm64.crosscompile.Dockerfile
vendored
@@ -1,12 +1,12 @@
|
||||
# This image is is provided for reference, but a (probably more up to date) image should be available at https://github.com/iTrooz/macos-crosscompile
|
||||
# This image is provided for reference, but a (probably more up to date) image should be available at https://github.com/iTrooz/macos-crosscompile
|
||||
FROM ubuntu:22.04
|
||||
|
||||
ENV PATH $PATH:/osxcross/target/bin
|
||||
ENV LD_LIBRARY_PATH /osxcross/target/lib
|
||||
ENV OSXCROSS_SDK /osxcross/target/SDK/MacOSX14.0.sdk
|
||||
ENV OSXCROSS_TARGET darwin23
|
||||
ENV OSXCROSS_TARGET darwin24
|
||||
ENV OSXCROSS_TARGET_DIR /osxcross/target
|
||||
ENV OSXCROSS_HOST aarch64-apple-darwin23
|
||||
ENV OSXCROSS_HOST aarch64-apple-darwin24
|
||||
|
||||
# -- DOWNLOADING STUFF
|
||||
|
||||
@@ -68,19 +68,6 @@ RUN --mount=type=cache,target=/cache <<EOF
|
||||
|
||||
ccache -s
|
||||
EOF
|
||||
# Not needed, because we don't use gcc for cross-compiling anymore
|
||||
# ## Install dependencies for gcc-13
|
||||
# RUN apt install -y gcc g++ zlib1g-dev libmpc-dev libmpfr-dev libgmp-dev
|
||||
# ## Build cross-compiler gcc-13
|
||||
# RUN --mount=type=cache,target=/cache <<EOF
|
||||
# set -xe
|
||||
# ccache -zs
|
||||
|
||||
# cd /osxcross
|
||||
# UNATTENDED=1 CC=/usr/lib/ccache/gcc CXX=/usr/lib/ccache/g++ GCC_VERSION=13.2.0 ./build_gcc.sh
|
||||
|
||||
# ccache -s
|
||||
# EOF
|
||||
|
||||
ARG DELETE_SDK=1
|
||||
RUN <<EOF
|
||||
|
||||
11
dist/macOS/osx_10_15/x64-osx.cmake
vendored
Normal file
11
dist/macOS/osx_10_15/x64-osx.cmake
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
set(VCPKG_TARGET_ARCHITECTURE x64)
|
||||
set(VCPKG_BUILD_TYPE release)
|
||||
set(VCPKG_CRT_LINKAGE dynamic)
|
||||
set(VCPKG_LIBRARY_LINKAGE static)
|
||||
|
||||
set(VCPKG_CMAKE_SYSTEM_NAME Darwin)
|
||||
set(VCPKG_OSX_ARCHITECTURES x86_64)
|
||||
set(VCPKG_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "" FORCE)
|
||||
set(VCPKG_C_FLAGS "-mmacosx-version-min=10.15")
|
||||
set(VCPKG_CXX_FLAGS "-mmacosx-version-min=10.15")
|
||||
set(ENV{MACOSX_DEPLOYMENT_TARGET} "10.15")
|
||||
4
dist/msys2/PKGBUILD
vendored
4
dist/msys2/PKGBUILD
vendored
@@ -20,7 +20,9 @@ makedepends=("${MINGW_PACKAGE_PREFIX}-gcc"
|
||||
"${MINGW_PACKAGE_PREFIX}-zlib"
|
||||
"${MINGW_PACKAGE_PREFIX}-bzip2"
|
||||
"${MINGW_PACKAGE_PREFIX}-xz"
|
||||
"${MINGW_PACKAGE_PREFIX}-zstd")
|
||||
"${MINGW_PACKAGE_PREFIX}-zstd"
|
||||
"${MINGW_PACKAGE_PREFIX}-libssh2-wincng"
|
||||
"${MINGW_PACKAGE_PREFIX}-md4c")
|
||||
|
||||
source=()
|
||||
sha256sums=()
|
||||
|
||||
71
dist/net.werwolv.ImHex.metainfo.xml
vendored
Normal file
71
dist/net.werwolv.ImHex.metainfo.xml
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop">
|
||||
<id>net.werwolv.ImHex</id>
|
||||
<name>ImHex</name>
|
||||
<summary>Modern REing Hex Editor</summary>
|
||||
<description>
|
||||
<p>
|
||||
ImHex is a modern Hex Editor for Reverse Engineers, Developers, Malware Analysists and Hackers who value
|
||||
their retinas when working at 3 AM once again.
|
||||
</p>
|
||||
<p>
|
||||
Features:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Featureful hex view</li>
|
||||
<li>Custom C++-like pattern language for parsing and highlighting a file's content</li>
|
||||
<li>Data importing and exporting</li>
|
||||
<li>Data inspector allowing interpretation of data as many different types</li>
|
||||
<li>Huge file support with fast and efficient loading</li>
|
||||
<li>Strings search</li>
|
||||
<li>File hashing support</li>
|
||||
<li>Disassembler supporting many different architectures: ARM, x86, PowerPC, MIPS, and more</li>
|
||||
<li>Bookmarks</li>
|
||||
<li>Data analyzer</li>
|
||||
<li>
|
||||
Helpful tools such as an Itanium and MSVC demangler, ASCII table, Regex
|
||||
replacer, mathematical expression evaluator (calculator), hexadecimal
|
||||
color picker and many more
|
||||
</li>
|
||||
<li>Doesn't burn out your retinas when used in late-night sessions</li>
|
||||
</ul>
|
||||
</description>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-2.0-only</project_license>
|
||||
<developer id="net.werwolv">
|
||||
<name>WerWolv</name>
|
||||
</developer>
|
||||
<url type="homepage">https://imhex.werwolv.net</url>
|
||||
<url type="bugtracker">https://github.com/WerWolv/ImHex/issues</url>
|
||||
<url type="help">https://docs.werwolv.net/imhex</url>
|
||||
<url type="donation">https://github.com/sponsors/WerWolv</url>
|
||||
<url type="contact">https://imhex.werwolv.net/discord</url>
|
||||
<url type="vcs-browser">https://github.com/WerWolv/ImHex</url>
|
||||
<url type="contribute">https://github.com/WerWolv/ImHex/blob/master/CONTRIBUTING.md</url>
|
||||
<launchable type="desktop-id">imhex.desktop</launchable>
|
||||
<screenshots>
|
||||
<screenshot type="default" width="1920" height="1017">
|
||||
<image type="source">https://raw.githubusercontent.com/flathub/net.werwolv.ImHex/master/screenshots/screenshot1.png</image>
|
||||
<caption>Using a pattern to parse and highlight different sections of an ELF executable file</caption>
|
||||
</screenshot>
|
||||
<screenshot type="default" width="1920" height="1017">
|
||||
<image type="source">https://raw.githubusercontent.com/flathub/net.werwolv.ImHex/master/screenshots/screenshot2.png</image>
|
||||
<caption>Managing bookmarks, diffing two files and decrypting a region of data using the data preprocessor</caption>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<content_rating type="oars-1.1"/>
|
||||
<branding>
|
||||
<color type="primary" scheme_preference="light">#babec9</color>
|
||||
<color type="primary" scheme_preference="dark">#0f0f0f</color>
|
||||
</branding>
|
||||
<releases>
|
||||
<release version="1.0.0" date="2025-01-01">
|
||||
<description></description>
|
||||
</release>
|
||||
</releases>
|
||||
<update_contact>hey@werwolv.net</update_contact>
|
||||
<recommends>
|
||||
<control>keyboard</control>
|
||||
<control>pointing</control>
|
||||
</recommends>
|
||||
</component>
|
||||
22
dist/net.werwolv.ImHex.yaml
vendored
22
dist/net.werwolv.ImHex.yaml
vendored
@@ -1,22 +0,0 @@
|
||||
app-id: net.werwolv.ImHex
|
||||
runtime: org.freedesktop.Platform
|
||||
runtime-version: '20.08'
|
||||
default-branch: stable
|
||||
sdk: org.freedesktop.Sdk
|
||||
command: imhex
|
||||
|
||||
finish-args:
|
||||
- --share=ipc
|
||||
- --socket=x11
|
||||
- --filesystem=host
|
||||
- --device=all
|
||||
|
||||
modules:
|
||||
- name: imhex
|
||||
buildsystem: cmake
|
||||
config-opts:
|
||||
- -DCMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
|
||||
sources:
|
||||
- type: git
|
||||
url: https://github.com/WerWolv/ImHex.git
|
||||
34
dist/net.werwolv.imhex.metainfo.xml
vendored
34
dist/net.werwolv.imhex.metainfo.xml
vendored
@@ -1,34 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>imhex</id>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-2.0</project_license>
|
||||
<name>ImHex</name>
|
||||
<developer_name>WerWolv</developer_name>
|
||||
<update_contact>hey@werwolv.net</update_contact>
|
||||
<summary>A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM</summary>
|
||||
<description>
|
||||
<p>ImHex is a feature-rich Hex Editor aimed towards Reverse Engineers working with foreign data formats, malware, executables and raw memory.
|
||||
Besides all the features a common Hex Editor has, ImHex also features a custom scripting language used to declare and dissect data structures, support for running YARA rules, a node-based graphical data pre-processor and support for various data sources such as files, raw disks or GDB Servers.</p>
|
||||
</description>
|
||||
<launchable type="desktop-id">imhex.desktop</launchable>
|
||||
<url type="homepage">https://imhex.werwolv.net</url>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://user-images.githubusercontent.com/10835354/139717326-8044769d-527b-4d88-8adf-2d4ecafdca1f.png</image>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://user-images.githubusercontent.com/10835354/139717323-1f8c9d52-f7eb-4f43-9f11-097ac728ed6c.png</image>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
|
||||
<provides>
|
||||
<id>imhex.desktop</id>
|
||||
</provides>
|
||||
|
||||
<categories>
|
||||
<category>Development</category>
|
||||
</categories>
|
||||
|
||||
|
||||
</component>
|
||||
114
dist/rpm/imhex.spec
vendored
114
dist/rpm/imhex.spec
vendored
@@ -1,10 +1,12 @@
|
||||
%define source_date_epoch_from_changelog 0
|
||||
|
||||
Name: imhex
|
||||
Version: 1.26.2
|
||||
Version: VERSION
|
||||
Release: 0%{?dist}
|
||||
Summary: A hex editor for reverse engineers and programmers
|
||||
|
||||
License: GPL-2.0-only AND Zlib AND MIT AND Apache-2.0
|
||||
# imhex is gplv2. capstone is custom. nativefiledialog is Zlib.
|
||||
# imhex is gplv2. capstone is custom.
|
||||
# see license dir for full breakdown
|
||||
URL: https://imhex.werwolv.net/
|
||||
# We need the archive with deps bundled
|
||||
@@ -22,32 +24,41 @@ BuildRequires: libglvnd-devel
|
||||
BuildRequires: glfw-devel
|
||||
BuildRequires: json-devel
|
||||
BuildRequires: libcurl-devel
|
||||
BuildRequires: llvm-devel
|
||||
BuildRequires: mbedtls-devel
|
||||
BuildRequires: yara-devel
|
||||
BuildRequires: nativefiledialog-extended-devel
|
||||
BuildRequires: dotnet-sdk-8.0
|
||||
BuildRequires: libarchive-devel
|
||||
BuildRequires: libzstd-devel
|
||||
BuildRequires: zlib-devel
|
||||
BuildRequires: bzip2-devel
|
||||
BuildRequires: xz-devel
|
||||
%if 0%{?rhel}
|
||||
BuildRequires: gcc-toolset-12
|
||||
BuildRequires: llvm-devel
|
||||
BuildRequires: mbedtls-devel
|
||||
BuildRequires: yara-devel
|
||||
BuildRequires: nativefiledialog-extended-devel
|
||||
BuildRequires: lz4-devel
|
||||
BuildRequires: libssh2-devel
|
||||
%if 0%{?rhel} == 9
|
||||
BuildRequires: gcc-toolset-14
|
||||
%endif
|
||||
%if 0%{?fedora} || 0%{?rhel} > 9
|
||||
BuildRequires: capstone-devel
|
||||
%endif
|
||||
BuildRequires: lunasvg-devel
|
||||
|
||||
|
||||
Provides: bundled(gnulib)
|
||||
Provides: bundled(capstone) = 5.0-rc2
|
||||
Provides: bundled(imgui)
|
||||
%if 0%{?rhel} == 10
|
||||
Provides: bundled(capstone) = 5.0.1
|
||||
%endif
|
||||
Provides: bundled(imgui) = 1.90.8
|
||||
Provides: bundled(libromfs)
|
||||
Provides: bundled(microtar)
|
||||
Provides: bundled(libpl) = %{version}
|
||||
Provides: bundled(xdgpp)
|
||||
# working on packaging this, bundling for now as to now delay updates
|
||||
Provides: bundled(miniaudio) = 0.11.11
|
||||
|
||||
# ftbfs on these arches. armv7hl might compile when capstone 5.x
|
||||
# is released upstream and we can build against it
|
||||
# [7:02 PM] WerWolv: We're not supporting 32 bit anyways soooo
|
||||
# [11:38 AM] WerWolv: Officially supported are x86_64 and aarch64
|
||||
ExclusiveArch: x86_64 %{arm64} ppc64le
|
||||
|
||||
ExclusiveArch: x86_64 %{arm64}
|
||||
|
||||
%description
|
||||
ImHex is a Hex Editor, a tool to display, decode and analyze binary data to
|
||||
@@ -61,14 +72,31 @@ displayed, a disassembler, diffing support, bookmarks and much much more. At the
|
||||
same time ImHex is completely free and open source under the GPLv2 language.
|
||||
|
||||
|
||||
%package devel
|
||||
Summary: Development files for %{name}
|
||||
License: GPL-2.0-only
|
||||
%description devel
|
||||
%{summary}
|
||||
|
||||
|
||||
%prep
|
||||
%autosetup -n ImHex
|
||||
%autosetup -n ImHex -p1
|
||||
# remove bundled libs we aren't using
|
||||
rm -rf lib/third_party/{fmt,nlohmann_json,yara}
|
||||
rm -rf lib/third_party/{curl,fmt,llvm,nlohmann_json,yara}
|
||||
%if 0%{?fedora} || 0%{?rhel} > 9
|
||||
rm -rf lib/third_party/capstone
|
||||
%endif
|
||||
|
||||
# rhel 9 doesn't support all of the new appstream metainfo tags
|
||||
%if 0%{?rhel} && 0%{?rhel} < 10
|
||||
sed -i -e '/url type="vcs-browser"/d' \
|
||||
-e '/url type="contribute"/d' \
|
||||
dist/net.werwolv.ImHex.metainfo.xml
|
||||
%endif
|
||||
|
||||
%build
|
||||
%if 0%{?rhel}
|
||||
. /opt/rh/gcc-toolset-12/enable
|
||||
%if 0%{?rhel} == 9
|
||||
. /opt/rh/gcc-toolset-14/enable
|
||||
%set_build_flags
|
||||
CXXFLAGS+=" -std=gnu++2b"
|
||||
%endif
|
||||
@@ -78,23 +106,27 @@ CXXFLAGS+=" -std=gnu++2b"
|
||||
-D IMHEX_OFFLINE_BUILD=ON \
|
||||
-D USE_SYSTEM_NLOHMANN_JSON=ON \
|
||||
-D USE_SYSTEM_FMT=ON \
|
||||
-D USE_SYSTEM_CURL=ON \
|
||||
-D USE_SYSTEM_LLVM=ON \
|
||||
-D USE_SYSTEM_MD4C=OFF \
|
||||
%if 0%{?fedora} || 0%{?rhel} > 9
|
||||
-D USE_SYSTEM_CAPSTONE=ON \
|
||||
%endif
|
||||
-D USE_SYSTEM_LUNASVG=ON \
|
||||
-D USE_SYSTEM_YARA=ON \
|
||||
-D USE_SYSTEM_NFD=ON \
|
||||
-D IMHEX_USE_GTK_FILE_PICKER=ON \
|
||||
-D IMHEX_BUNDLE_DOTNET=OFF \
|
||||
# when capstone >= 5.x is released we should be able to build against \
|
||||
# system libs of it \
|
||||
# -D USE_SYSTEM_CAPSTONE=ON
|
||||
-D IMHEX_ENABLE_UNIT_TESTS=ON \
|
||||
%if 0%{?rhel}
|
||||
-D IMHEX_BUILD_HARDENING=OFF
|
||||
%endif
|
||||
# disable built-in build hardening because it is already
|
||||
# done in rhel buildroots. adding the flags again from
|
||||
# upstream generates build errors
|
||||
|
||||
%cmake_build
|
||||
|
||||
|
||||
%check
|
||||
%if 0%{?rhel}
|
||||
. /opt/rh/gcc-toolset-12/enable
|
||||
%set_build_flags
|
||||
CXXFLAGS+=" -std=gnu++2b"
|
||||
%endif
|
||||
# build binaries required for tests
|
||||
%cmake_build --target unit_tests
|
||||
%ctest --exclude-regex '(Helpers/StoreAPI|Helpers/TipsAPI|Helpers/ContentAPI)'
|
||||
@@ -106,15 +138,15 @@ CXXFLAGS+=" -std=gnu++2b"
|
||||
desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop
|
||||
|
||||
# this is a symlink for the old appdata name that we don't need
|
||||
rm -f %{buildroot}%{_metainfodir}/net.werwolv.%{name}.appdata.xml
|
||||
rm -f %{buildroot}%{_metainfodir}/net.werwolv.ImHex.appdata.xml
|
||||
|
||||
# AppData
|
||||
appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/net.werwolv.%{name}.metainfo.xml
|
||||
appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/net.werwolv.ImHex.metainfo.xml
|
||||
|
||||
# install licenses
|
||||
cp -a lib/third_party/nativefiledialog/LICENSE %{buildroot}%{_datadir}/licenses/%{name}/nativefiledialog-LICENSE
|
||||
cp -a lib/third_party/capstone/LICENSE.TXT %{buildroot}%{_datadir}/licenses/%{name}/capstone-LICENSE
|
||||
cp -a lib/third_party/capstone/suite/regress/LICENSE %{buildroot}%{_datadir}/licenses/%{name}/capstone-regress-LICENSE
|
||||
%if 0%{?rhel} == 9
|
||||
cp -a lib/third_party/capstone/LICENSES/LICENSE.TXT %{buildroot}%{_datadir}/licenses/%{name}/capstone-LICENSE
|
||||
%endif
|
||||
cp -a lib/third_party/microtar/LICENSE %{buildroot}%{_datadir}/licenses/%{name}/microtar-LICENSE
|
||||
cp -a lib/third_party/xdgpp/LICENSE %{buildroot}%{_datadir}/licenses/%{name}/xdgpp-LICENSE
|
||||
|
||||
@@ -123,12 +155,16 @@ cp -a lib/third_party/xdgpp/LICENSE %{buildroot
|
||||
%license %{_datadir}/licenses/%{name}/
|
||||
%doc README.md
|
||||
%{_bindir}/imhex
|
||||
%{_bindir}/imhex-updater
|
||||
%{_datadir}/pixmaps/%{name}.png
|
||||
%{_datadir}/imhex/imhex
|
||||
%{_datadir}/pixmaps/%{name}.*
|
||||
%{_datadir}/applications/%{name}.desktop
|
||||
%{_libdir}/libimhex.so*
|
||||
%{_libdir}/libimhex.so.*
|
||||
%{_libdir}/%{name}/
|
||||
%{_metainfodir}/net.werwolv.%{name}.metainfo.xml
|
||||
%{_metainfodir}/net.werwolv.ImHex.metainfo.xml
|
||||
%exclude %{_bindir}/imhex-updater
|
||||
%{_datadir}/mime/packages/%{name}.xml
|
||||
|
||||
|
||||
%changelog
|
||||
%files devel
|
||||
%{_libdir}/libimhex.so
|
||||
%{_datadir}/%{name}/sdk/
|
||||
|
||||
92
dist/snap/snapcraft.yaml
vendored
Normal file
92
dist/snap/snapcraft.yaml
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
name: imhex
|
||||
title: ImHex
|
||||
base: core24
|
||||
version: ${IMHEX_VERSION_STRING}
|
||||
summary: Hex editor for reverse engineering
|
||||
description: ImHex is a hex editor for reverse engineering, reverse engineering, and analyzing binary files. It provides a powerful and flexible interface for working with binary data, including features like pattern matching, scripting, and a customizable user interface.
|
||||
grade: stable
|
||||
confinement: classic
|
||||
contact: https://github.com/WerWolv/ImHex/discussions
|
||||
issues: https://github.com/WerWolv/ImHex/issues
|
||||
source-code: https://github.com/WerWolv/ImHex
|
||||
website: https://imhex.werwolv.net
|
||||
donation: https://github.com/sponsors/WerWolv
|
||||
license: GPL-2.0-only
|
||||
icon: resources/icon.svg
|
||||
adopt-info: imhex
|
||||
|
||||
platforms:
|
||||
amd64:
|
||||
arm64:
|
||||
|
||||
apps:
|
||||
imhex:
|
||||
command: usr/local/bin/imhex
|
||||
desktop: usr/local/share/applications/imhex.desktop
|
||||
environment:
|
||||
LD_LIBRARY_PATH: '$SNAP/usr/local/lib:$SNAP/usr/local/lib/imhex:$SNAP/usr/lib/x86_64-linux-gnu:$SNAP/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH'
|
||||
XDG_DATA_DIRS: '$XDG_DATA_DIRS:$SNAP/usr/local/share:$SNAP/usr/local/lib:$SNAP/usr/local/share'
|
||||
XDG_CONFIG_DIRS: '$XDG_CONFIG_DIRS:$SNAP/usr/local/share'
|
||||
XDG_DATA_HOME: '$XDG_DATA_HOME:$SNAP_DATA'
|
||||
|
||||
parts:
|
||||
imhex:
|
||||
plugin: cmake
|
||||
source: .
|
||||
build-environment:
|
||||
- CC: /usr/bin/gcc-14
|
||||
- CXX: /usr/bin/g++-14
|
||||
cmake-parameters:
|
||||
- -DCMAKE_BUILD_TYPE=Release
|
||||
- -DCMAKE_C_COMPILER_LAUNCHER=${CCACHE}
|
||||
- -DCMAKE_CXX_COMPILER_LAUNCHER=${CCACHE}
|
||||
- -DIMHEX_PATTERNS_PULL_MASTER=ON
|
||||
- -DIMHEX_BUNDLE_PLUGIN_SDK=OFF
|
||||
cmake-generator: Ninja
|
||||
build-packages:
|
||||
- cmake
|
||||
- ninja-build
|
||||
- gcc-14
|
||||
- g++-14
|
||||
- git
|
||||
- pkg-config
|
||||
- libglfw3-dev
|
||||
- libmagic-dev
|
||||
- libmbedtls-dev
|
||||
- libfontconfig-dev
|
||||
- libfreetype-dev
|
||||
- libdbus-1-dev
|
||||
- libcurl4-gnutls-dev
|
||||
- libgtk-3-dev
|
||||
- zlib1g-dev
|
||||
- libbz2-dev
|
||||
- liblzma-dev
|
||||
- libzstd-dev
|
||||
- liblz4-dev
|
||||
- libssh2-1-dev
|
||||
- libmd4c-dev
|
||||
- libmd4c-html0-dev
|
||||
stage-packages:
|
||||
- libglfw3
|
||||
- libmagic1
|
||||
- libmbedtls14
|
||||
- libfontconfig1
|
||||
- libfreetype6
|
||||
- libdbus-1-3
|
||||
- libcurl4-gnutls-dev
|
||||
- libgtk-3-0
|
||||
- zlib1g
|
||||
- libbz2-1.0
|
||||
- liblzma5
|
||||
- libzstd1
|
||||
- liblz4-1
|
||||
- libssh2-1
|
||||
prime:
|
||||
- -usr/include/*
|
||||
- -usr/local/include/*
|
||||
- -usr/lib/**/*.a
|
||||
- -usr/local/lib/**/*.a
|
||||
- -usr/lib/**/*.la
|
||||
- -usr/local/lib/**/*.la
|
||||
- -usr/share/doc/*
|
||||
- -usr/share/man/*
|
||||
18
dist/vcpkg.json
vendored
Normal file
18
dist/vcpkg.json
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "vcpkg",
|
||||
"version": "1.0.0",
|
||||
"builtin-baseline": "7e21420f775f72ae938bdeb5e6068f722088f06a",
|
||||
"dependencies": [
|
||||
"libmagic",
|
||||
"freetype",
|
||||
"mbedtls",
|
||||
"zlib",
|
||||
"bzip2",
|
||||
"liblzma",
|
||||
"zstd",
|
||||
"glfw3",
|
||||
"curl",
|
||||
"libssh2",
|
||||
"md4c"
|
||||
]
|
||||
}
|
||||
34
dist/web/Dockerfile
vendored
34
dist/web/Dockerfile
vendored
@@ -1,23 +1,24 @@
|
||||
FROM emscripten/emsdk:3.1.51 as build
|
||||
FROM emscripten/emsdk:4.0.21 AS build
|
||||
|
||||
# Used to invalidate layer cache but not mount cache
|
||||
# See https://github.com/moby/moby/issues/41715#issuecomment-733976493
|
||||
ARG UNIQUEKEY 1
|
||||
ARG UNIQUEKEY=1
|
||||
|
||||
RUN apt update
|
||||
RUN apt install -y git ccache autoconf automake libtool cmake pkg-config
|
||||
RUN apt install -y git ccache autoconf automake libtool pkg-config ninja-build
|
||||
|
||||
RUN <<EOF
|
||||
# Install vcpkg
|
||||
# Note: we are a patch on the libmagic port
|
||||
set -xe
|
||||
|
||||
git clone https://github.com/microsoft/vcpkg /vcpkg
|
||||
git clone --depth 1 https://github.com/microsoft/vcpkg /vcpkg
|
||||
/vcpkg/bootstrap-vcpkg.sh
|
||||
sed -i 's/vcpkg_install_make(${EXTRA_ARGS})/vcpkg_install_make(${EXTRA_ARGS} SUBPATH src)/g' /vcpkg/ports/libmagic/portfile.cmake
|
||||
EOF
|
||||
|
||||
# Patch vcpkg build instructions to add -pthread
|
||||
# Patch vcpkg build instructions to add -pthread flag
|
||||
# Even dependencies must be built with -pthread to be able to use USE_PTHREADS=1
|
||||
RUN <<EOF
|
||||
set -xe
|
||||
|
||||
@@ -27,7 +28,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
||||
' >> /emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake
|
||||
EOF
|
||||
|
||||
ENV VCPKG_DEFAULT_BINARY_CACHE /cache/vcpkg
|
||||
ENV VCPKG_DEFAULT_BINARY_CACHE=/cache/vcpkg
|
||||
RUN --mount=type=cache,target=/cache <<EOF
|
||||
# Install dependencies with vcpkg
|
||||
set -xe
|
||||
@@ -45,29 +46,34 @@ EOF
|
||||
|
||||
# Build ImHex
|
||||
ARG JOBS=4
|
||||
ENV CCACHE_DIR /cache/ccache
|
||||
ENV CCACHE_DIR=/cache/ccache
|
||||
|
||||
RUN mkdir /build
|
||||
WORKDIR /build
|
||||
ARG BUILD_TYPE=Release
|
||||
RUN --mount=type=cache,target=/cache \
|
||||
--mount=type=bind,source=.,target=/imhex <<EOF
|
||||
|
||||
set -xe
|
||||
ccache -zs
|
||||
|
||||
cmake /imhex \
|
||||
/vcpkg/downloads/tools/cmake-*/cmake-*/bin/cmake /imhex \
|
||||
-G "Ninja" \
|
||||
-DIMHEX_OFFLINE_BUILD=ON \
|
||||
-DIMHEX_STATIC_LINK_PLUGINS=ON \
|
||||
-DIMHEX_EXCLUDE_PLUGINS="script_loader" \
|
||||
-DIMHEX_EXCLUDE_PLUGINS="script_loader;remote" \
|
||||
-DIMHEX_COMPRESS_DEBUG_INFO=OFF \
|
||||
-DNATIVE_CMAKE_C_COMPILER=gcc \
|
||||
-DNATIVE_CMAKE_CXX_COMPILER=g++ \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake \
|
||||
-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release
|
||||
-DLIBROMFS_COMPRESS_RESOURCES=OFF \
|
||||
-DIMHEX_ENABLE_PLUGIN_TESTS=OFF \
|
||||
-DCMAKE_BUILD_TYPE=${BUILD_TYPE}
|
||||
|
||||
make -j $JOBS
|
||||
ninja -j $JOBS
|
||||
|
||||
cp /imhex/dist/web/source/* /build
|
||||
ccache -s
|
||||
@@ -77,13 +83,12 @@ EOF
|
||||
# See https://stackoverflow.com/questions/41701849/cannot-modify-accept-encoding-with-fetch https://github.com/AnthumChris/fetch-progress-indicators/issues/13
|
||||
RUN du -b /build/imhex.wasm | cut -f1 > imhex.wasm.size
|
||||
|
||||
FROM scratch as raw
|
||||
FROM scratch AS raw
|
||||
COPY --from=build [ \
|
||||
# ImHex \
|
||||
"/build/imhex.wasm", \
|
||||
"/build/imhex.wasm.size", \
|
||||
"/build/imhex.js", \
|
||||
"/build/imhex.worker.js", \
|
||||
\
|
||||
# Static files \
|
||||
"/build/index.html", \
|
||||
@@ -91,7 +96,7 @@ COPY --from=build [ \
|
||||
"/build/wasm-config.js", \
|
||||
"/build/enable-threads.js", \
|
||||
"/build/favicon.ico", \
|
||||
"/build/icon.png", \
|
||||
"/build/icon.svg", \
|
||||
"/build/manifest.json", \
|
||||
"/build/robots.txt", \
|
||||
"/build/sitemap.xml", \
|
||||
@@ -102,3 +107,4 @@ COPY --from=build [ \
|
||||
|
||||
FROM nginx
|
||||
COPY --from=raw . /usr/share/nginx/html
|
||||
RUN chmod -R 755 /usr/share/nginx/html
|
||||
|
||||
9
dist/web/Host.Dockerfile
vendored
Normal file
9
dist/web/Host.Dockerfile
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /imhex
|
||||
|
||||
COPY ./out/ .
|
||||
|
||||
EXPOSE 9090
|
||||
|
||||
CMD [ "python", "/imhex/start_imhex_web.py" ]
|
||||
1
dist/web/compose.yml
vendored
1
dist/web/compose.yml
vendored
@@ -1,5 +1,4 @@
|
||||
# docker compose -f dist/web/compose.yml up --build
|
||||
version: '3'
|
||||
services:
|
||||
imhex_web:
|
||||
image: imhex_web:latest
|
||||
|
||||
BIN
dist/web/source/favicon.ico
vendored
BIN
dist/web/source/favicon.ico
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 162 KiB |
BIN
dist/web/source/icon.png
vendored
BIN
dist/web/source/icon.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 157 KiB |
11
dist/web/source/icon.svg
vendored
Normal file
11
dist/web/source/icon.svg
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" version="1">
|
||||
<rect style="opacity:0.2" width="55" height="10" x="5" y="-60" rx="1.41" transform="rotate(90)"/>
|
||||
<rect style="fill:#2b50a1" width="55" height="10" x="4" y="-60" rx="1.41" transform="rotate(90)"/>
|
||||
<rect style="fill:#2b50a1" width="55" height="10" x="4" y="-14" rx="1.41" transform="rotate(90)"/>
|
||||
<rect style="fill:#2b50a1" width="55" height="10" x="4" y="-33" rx="1.41" transform="rotate(90)"/>
|
||||
<path style="opacity:0.2" d="M 5.3808594,5 C 4.6158118,5 4,5.6158118 4,6.3808594 V 13.619141 C 4,14.384188 4.6158118,15 5.3808594,15 H 31.619141 C 32.384188,15 33,14.384188 33,13.619141 V 6.3808594 C 33,5.6158118 32.384188,5 31.619141,5 Z M 40.400391,5 C 39.624791,5 39,5.6247906 39,6.4003906 V 13.599609 C 39,14.375209 39.624791,15 40.400391,15 H 58.599609 C 59.375209,15 60,14.375209 60,13.599609 V 6.4003906 C 60,5.6247906 59.375209,5 58.599609,5 Z M 5.3808594,50 C 4.6158118,50 4,50.615812 4,51.380859 v 7.238282 C 4,59.384188 4.6158118,60 5.3808594,60 H 31.619141 C 32.384188,60 33,59.384188 33,58.619141 V 51.380859 C 33,50.615812 32.384188,50 31.619141,50 Z"/>
|
||||
<rect style="fill:#3a6be0" width="29" height="10" x="4" y="4" rx="1.381"/>
|
||||
<rect style="fill:#3a6be0" width="21" height="10" x="39" y="4" rx="1.4"/>
|
||||
<rect style="fill:#3a6be0" width="29" height="10" x="4" y="49" rx="1.381"/>
|
||||
<path style="fill:#ffffff;opacity:0.1" d="M 5.3808594 4 C 4.6158118 4 4 4.6158118 4 5.3808594 L 4 6.3808594 C 4 5.6158118 4.6158118 5 5.3808594 5 L 31.619141 5 C 32.384188 5 33 5.6158118 33 6.3808594 L 33 5.3808594 C 33 4.6158118 32.384188 4 31.619141 4 L 5.3808594 4 z M 40.400391 4 C 39.624791 4 39 4.6247906 39 5.4003906 L 39 6.4003906 C 39 5.6247906 39.624791 5 40.400391 5 L 58.599609 5 C 59.375209 5 60 5.6247906 60 6.4003906 L 60 5.4003906 C 60 4.6247906 59.375209 4 58.599609 4 L 40.400391 4 z M 5.3808594 49 C 4.6158118 49 4 49.615812 4 50.380859 L 4 51.380859 C 4 50.615812 4.6158118 50 5.3808594 50 L 31.619141 50 C 32.384188 50 33 50.615812 33 51.380859 L 33 50.380859 C 33 49.615812 32.384188 49 31.619141 49 L 5.3808594 49 z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
16
dist/web/source/index.html
vendored
16
dist/web/source/index.html
vendored
@@ -11,21 +11,21 @@
|
||||
<meta name="title" content="ImHex">
|
||||
<meta name="description" content="Free and extremely powerful Online Hex Editor for your Web Browser. ImHex is a free and open source Hex Editor for Reverse Engineers and Developers and Data Analysts.">
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||
<link rel="apple-touch-icon" href="icon.png">
|
||||
<link rel="apple-touch-icon" href="icon.svg">
|
||||
|
||||
<!-- Open Graph / Facebook -->
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://imhex.werwolv.net/">
|
||||
<meta property="og:url" content="https://web.imhex.werwolv.net/">
|
||||
<meta property="og:title" content="ImHex Web - Online Hex Editor">
|
||||
<meta property="og:image" content="https://imhex.werwolv.net/assets/splash_wasm.png">
|
||||
<meta property="og:image" content="splash_wasm.png">
|
||||
|
||||
<!-- Twitter -->
|
||||
<meta property="twitter:card" content="summary_large_image">
|
||||
<meta property="twitter:url" content="https://imhex.werwolv.net/">
|
||||
<meta property="twitter:url" content="https://web.imhex.werwolv.net/">
|
||||
<meta property="twitter:title" content="ImHex Web - Online Hex Editor">
|
||||
<meta property="twitter:description"
|
||||
content="A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.">
|
||||
<meta property="twitter:image" content="https://imhex.werwolv.net/assets/splash_wasm.png">
|
||||
<meta property="twitter:image" content="splash_wasm.png">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="style.css">
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
"email": "hey@werwolv.net",
|
||||
"founder": "WerWolv",
|
||||
"slogan": "A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.",
|
||||
"url": "https://imhex.werwolv.net",
|
||||
"logo": "https://imhex.werwolv.net/assets/logos/logo.png"
|
||||
"url": "https://web.imhex.werwolv.net",
|
||||
"logo": "https://web.imhex.werwolv.net/icon.svg"
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<div id="loading" class="centered">
|
||||
<img src="https://raw.githubusercontent.com/WerWolv/ImHex/master/plugins/builtin/romfs/assets/dark/banner.png" id="logo" alt="ImHex Logo">
|
||||
<img src="https://raw.githubusercontent.com/WerWolv/ImHex/master/plugins/builtin/romfs/assets/dark/banner.svg" id="logo" alt="ImHex Logo">
|
||||
<h1>A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.</h1>
|
||||
<h2>Available both natively and on the web</h2>
|
||||
<h5>ImHex runs directly in your web browser with the help of Emscripten and WebAssembly.</h5>
|
||||
|
||||
4
dist/web/source/manifest.json
vendored
4
dist/web/source/manifest.json
vendored
@@ -10,8 +10,8 @@
|
||||
],
|
||||
"icons": [
|
||||
{
|
||||
"src": "icon.png",
|
||||
"type": "image/png",
|
||||
"src": "icon.svg",
|
||||
"type": "image/svg",
|
||||
"sizes": "640x640"
|
||||
}
|
||||
],
|
||||
|
||||
5
dist/web/source/sitemap.xml
vendored
5
dist/web/source/sitemap.xml
vendored
@@ -57,6 +57,11 @@
|
||||
<loc>https://web.imhex.werwolv.net?lang=it-IT</loc>
|
||||
<lastmod>2024-01-02T11:44:00+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<title>Русский</title>
|
||||
<loc>https://web.imhex.werwolv.net?lang=ru-RU</loc>
|
||||
<lastmod>2024-01-02T11:44:00+00:00</lastmod>
|
||||
</url>
|
||||
|
||||
|
||||
</urlset>
|
||||
BIN
dist/web/source/splash_wasm.png
vendored
Normal file
BIN
dist/web/source/splash_wasm.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 478 KiB |
13
dist/web/source/style.css
vendored
13
dist/web/source/style.css
vendored
@@ -137,7 +137,7 @@ a:hover {
|
||||
|
||||
|
||||
:root {
|
||||
--progress: 25%;
|
||||
--progress: 0%;
|
||||
}
|
||||
|
||||
.progress-bar-container {
|
||||
@@ -174,4 +174,15 @@ a:hover {
|
||||
.progress-moved .progress-bar {
|
||||
width: var(--progress);
|
||||
background-color: #3864cb;
|
||||
}
|
||||
|
||||
#logo {
|
||||
height: 25%;
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.canvas-fixed {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
182
dist/web/source/wasm-config.js
vendored
182
dist/web/source/wasm-config.js
vendored
@@ -9,8 +9,9 @@ fetch("imhex.wasm.size").then(async (resp) => {
|
||||
// inspired from: https://github.com/WordPress/wordpress-playground/pull/46 (but had to be modified)
|
||||
function monkeyPatch(progressFun) {
|
||||
const _instantiateStreaming = WebAssembly.instantiateStreaming;
|
||||
WebAssembly.instantiateStreaming = (response, ...args) => {
|
||||
WebAssembly.instantiateStreaming = async (responsePromise, ...args) => {
|
||||
// Do not collect wasm content length here see above
|
||||
let response = await responsePromise
|
||||
const file = response.url.substring(
|
||||
new URL(response.url).origin.length + 1
|
||||
);
|
||||
@@ -58,8 +59,14 @@ monkeyPatch((file, done) => {
|
||||
const mibTotal = (wasmSize / 1024**2).toFixed(1);
|
||||
|
||||
let root = document.querySelector(':root');
|
||||
root.style.setProperty("--progress", `${percent}%`)
|
||||
document.getElementById("progress-bar-content").innerHTML = `${percent}% [${mibNow} MiB / ${mibTotal} MiB]`;
|
||||
if (root != null) {
|
||||
root.style.setProperty("--progress", `${percent}%`)
|
||||
let progressBar = document.getElementById("progress-bar-content");
|
||||
|
||||
if (progressBar != null) {
|
||||
progressBar.innerHTML = `${percent}% [${mibNow} MiB / ${mibTotal} MiB]`;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function glfwSetCursorCustom(wnd, shape) {
|
||||
@@ -99,11 +106,85 @@ var notWorkingTimer = setTimeout(() => {
|
||||
}, 5000);
|
||||
|
||||
var Module = {
|
||||
preRun: [],
|
||||
postRun: [],
|
||||
preRun: () => {
|
||||
ENV.IMHEX_SKIP_SPLASH_SCREEN = "1";
|
||||
},
|
||||
postRun: function() {
|
||||
// Patch the emscripten GLFW module to send mouse and touch events in the right order
|
||||
// For ImGui interactions to correctly work with touch input, MousePos events need
|
||||
// to be processed first and then MouseButton events in the next frame. By default,
|
||||
// GLFW does the exact opposite, which causes buttons to require two taps to register
|
||||
// and windows get "stuck" to the cursor when dragged or resized
|
||||
GLFW.onMousemove = event => {
|
||||
if (event.type === "touchmove") {
|
||||
event.preventDefault();
|
||||
let primaryChanged = false;
|
||||
for (let i of event.changedTouches) {
|
||||
if (GLFW.primaryTouchId === i.identifier) {
|
||||
Browser.setMouseCoords(i.pageX, i.pageY);
|
||||
primaryChanged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!primaryChanged) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
Browser.calculateMouseEvent(event);
|
||||
}
|
||||
};
|
||||
|
||||
GLFW.onMouseButtonChanged = (event, status) => {
|
||||
if (!GLFW.active) return;
|
||||
if (event.target != Module["canvas"]) return;
|
||||
const isTouchType = event.type === "touchstart" || event.type === "touchend" || event.type === "touchcancel";
|
||||
let eventButton = 0;
|
||||
if (isTouchType) {
|
||||
event.preventDefault();
|
||||
let primaryChanged = false;
|
||||
if (GLFW.primaryTouchId === null && event.type === "touchstart" && event.targetTouches.length > 0) {
|
||||
const chosenTouch = event.targetTouches[0];
|
||||
GLFW.primaryTouchId = chosenTouch.identifier;
|
||||
Browser.setMouseCoords(chosenTouch.pageX, chosenTouch.pageY);
|
||||
primaryChanged = true;
|
||||
} else if (event.type === "touchend" || event.type === "touchcancel") {
|
||||
for (let i of event.changedTouches) {
|
||||
if (GLFW.primaryTouchId === i.identifier) {
|
||||
GLFW.primaryTouchId = null;
|
||||
primaryChanged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!primaryChanged) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
Browser.calculateMouseEvent(event);
|
||||
eventButton = GLFW.DOMToGLFWMouseButton(event);
|
||||
}
|
||||
if (status == 1) {
|
||||
GLFW.active.buttons |= (1 << eventButton);
|
||||
try {
|
||||
event.target.setPointerCapture(event.pointerId);
|
||||
} catch (e) {}
|
||||
} else {
|
||||
GLFW.active.buttons &= ~(1 << eventButton);
|
||||
}
|
||||
|
||||
if (GLFW.active.cursorPosFunc) {
|
||||
getWasmTableEntry(GLFW.active.cursorPosFunc)(GLFW.active.id, Browser.mouseX, Browser.mouseY);
|
||||
}
|
||||
if (GLFW.active.mouseButtonFunc) {
|
||||
getWasmTableEntry(GLFW.active.mouseButtonFunc)(GLFW.active.id, eventButton, status, GLFW.getModBits(GLFW.active));
|
||||
}
|
||||
};
|
||||
},
|
||||
onRuntimeInitialized: function() {
|
||||
// Triggered when the wasm module is loaded and ready to use.
|
||||
document.getElementById("loading").style.display = "none"
|
||||
let loading = document.getElementById("loading");
|
||||
if (loading != null)
|
||||
document.getElementById("loading").style.display = "none"
|
||||
document.getElementById("canvas").style.display = "initial"
|
||||
|
||||
clearTimeout(notWorkingTimer);
|
||||
@@ -111,24 +192,67 @@ var Module = {
|
||||
print: (function() { })(),
|
||||
printErr: function(text) { },
|
||||
canvas: (function() {
|
||||
let canvas = document.getElementById('canvas');
|
||||
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
|
||||
// application robust, you may want to override this behavior before shipping!
|
||||
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
|
||||
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
|
||||
const canvas = document.getElementById('canvas');
|
||||
canvas.addEventListener("webglcontextlost", function(e) {
|
||||
alert('WebGL context lost, please reload the page');
|
||||
e.preventDefault();
|
||||
}, false);
|
||||
|
||||
return canvas;
|
||||
js_resizeCanvas()
|
||||
|
||||
// Turn long touches into right-clicks
|
||||
let timer = null;
|
||||
canvas.addEventListener('touchstart', event => {
|
||||
timer = setTimeout(() => {
|
||||
let eventArgs = {
|
||||
bubbles: true,
|
||||
cancelable: true,
|
||||
view: window,
|
||||
screenX: event.touches[0].screenX,
|
||||
screenY: event.touches[0].screenY,
|
||||
clientX: event.touches[0].clientX,
|
||||
clientY: event.touches[0].clientY,
|
||||
button: 2,
|
||||
buttons: 2,
|
||||
relatedTarget: event.target,
|
||||
region: event.region
|
||||
}
|
||||
|
||||
canvas.dispatchEvent(new MouseEvent('mousedown', eventArgs));
|
||||
canvas.dispatchEvent(new MouseEvent('mouseup', eventArgs));
|
||||
}, 400);
|
||||
});
|
||||
|
||||
canvas.addEventListener('touchend', event => {
|
||||
if (timer) {
|
||||
clearTimeout(timer);
|
||||
timer = null;
|
||||
}
|
||||
});
|
||||
|
||||
if (typeof WebGL2RenderingContext !== 'undefined') {
|
||||
let gl = canvas.getContext('webgl2', { stencil: true });
|
||||
if (!gl) {
|
||||
console.error('WebGL 2 not available, falling back to WebGL');
|
||||
gl = canvas.getContext('webgl', { stencil: true });
|
||||
}
|
||||
if (!gl) {
|
||||
alert('WebGL not available with stencil buffer');
|
||||
}
|
||||
return canvas;
|
||||
} else {
|
||||
alert('WebGL 2 not supported by this browser');
|
||||
}
|
||||
})(),
|
||||
setStatus: function(text) { },
|
||||
totalDependencies: 0,
|
||||
monitorRunDependencies: function(left) {
|
||||
},
|
||||
instantiateWasm: function(imports, successCallback) {
|
||||
instantiateWasm: async function(imports, successCallback) {
|
||||
imports.env.glfwSetCursor = glfwSetCursorCustom
|
||||
imports.env.glfwCreateStandardCursor = glfwCreateStandardCursorCustom
|
||||
instantiateAsync(wasmBinary, wasmBinaryFile, imports, (result) => {
|
||||
successCallback(result.instance, result.module)
|
||||
});
|
||||
let result = await instantiateAsync(null, findWasmBinary(), imports);
|
||||
successCallback(result.instance, result.module)
|
||||
},
|
||||
arguments: []
|
||||
};
|
||||
@@ -139,19 +263,27 @@ const urlParams = new URLSearchParams(queryString);
|
||||
if (urlParams.has("lang")) {
|
||||
Module["arguments"].push("--language");
|
||||
Module["arguments"].push(urlParams.get("lang"));
|
||||
} else if (urlParams.has("save-editor")) {
|
||||
Module["arguments"].push("--save-editor");
|
||||
Module["arguments"].push("gist");
|
||||
Module["arguments"].push(urlParams.get("save-editor"));
|
||||
}
|
||||
|
||||
window.addEventListener('resize', js_resizeCanvas, false);
|
||||
function js_resizeCanvas() {
|
||||
let canvas = document.getElementById('canvas');
|
||||
canvas.width = Math.min(document.documentElement.clientWidth, window.innerWidth || 0);
|
||||
canvas.height = Math.min(document.documentElement.clientHeight, window.innerHeight || 0);
|
||||
|
||||
canvas.classList.add("canvas_full_screen")
|
||||
canvas.top = canvas.parentElement.clientTop;
|
||||
canvas.left = canvas.parentElement.clientLeft;
|
||||
|
||||
if (GLFW.active && GLFW.active.windowPosFunc) {
|
||||
getWasmTableEntry(GLFW.active.windowPosFunc)(GLFW.active.id, GLFW.active.x, GLFW.active.y);
|
||||
canvas.style.width = "100%";
|
||||
canvas.style.height = "100%";
|
||||
}
|
||||
let resizeObserver = new ResizeObserver(js_resizeCanvas);
|
||||
resizeObserver.observe(document.getElementById("canvas"))
|
||||
|
||||
// Prevent some default browser shortcuts from preventing ImHex ones to work
|
||||
document.addEventListener('keydown', e => {
|
||||
if (e.ctrlKey) {
|
||||
if (e.which == 83) e.preventDefault();
|
||||
}
|
||||
|
||||
GLFW.onWindowSizeChanged();
|
||||
}
|
||||
})
|
||||
1
lib/external/disassembler
vendored
Submodule
1
lib/external/disassembler
vendored
Submodule
Submodule lib/external/disassembler added at c66e624157
2
lib/external/libromfs
vendored
2
lib/external/libromfs
vendored
Submodule lib/external/libromfs updated: 61f7e412dd...fa444f2995
2
lib/external/libwolv
vendored
2
lib/external/libwolv
vendored
Submodule lib/external/libwolv updated: 2ddf596306...f12237315f
2
lib/external/pattern_language
vendored
2
lib/external/pattern_language
vendored
Submodule lib/external/pattern_language updated: 2dae41613b...3aeccbb84e
@@ -2,7 +2,6 @@ cmake_minimum_required(VERSION 3.16)
|
||||
project(libimhex)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
set(CMAKE_SHARED_LIBRARY_PREFIX "")
|
||||
|
||||
set(LIBIMHEX_SOURCES
|
||||
source/api/imhex_api.cpp
|
||||
@@ -37,8 +36,18 @@ set(LIBIMHEX_SOURCES
|
||||
source/helpers/logger.cpp
|
||||
source/helpers/tar.cpp
|
||||
source/helpers/debugging.cpp
|
||||
source/helpers/default_paths.cpp
|
||||
source/helpers/imgui_hooks.cpp
|
||||
source/helpers/semantic_version.cpp
|
||||
source/helpers/keys.cpp
|
||||
source/helpers/udp_server.cpp
|
||||
source/helpers/scaling.cpp
|
||||
source/helpers/binary_pattern.cpp
|
||||
|
||||
source/test/tests.cpp
|
||||
|
||||
source/providers/provider.cpp
|
||||
source/providers/cached_provider.cpp
|
||||
source/providers/memory_provider.cpp
|
||||
source/providers/undo/stack.cpp
|
||||
|
||||
@@ -46,21 +55,19 @@ set(LIBIMHEX_SOURCES
|
||||
source/ui/view.cpp
|
||||
source/ui/popup.cpp
|
||||
source/ui/toast.cpp
|
||||
source/ui/banner.cpp
|
||||
|
||||
source/mcp/client.cpp
|
||||
source/mcp/server.cpp
|
||||
|
||||
source/subcommands/subcommands.cpp
|
||||
)
|
||||
|
||||
if (APPLE)
|
||||
set(OSX_11_0_SDK_PATH /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk)
|
||||
if (NOT CMAKE_OSX_SYSROOT)
|
||||
if (IS_DIRECTORY ${OSX_11_0_SDK_PATH})
|
||||
set(CMAKE_OSX_SYSROOT ${OSX_11_0_SDK_PATH})
|
||||
else ()
|
||||
message(WARNING "CMAKE_OSX_SYSROOT not set and macOS 10.9 SDK not found! Using default one.")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
set(LIBIMHEX_SOURCES ${LIBIMHEX_SOURCES} source/helpers/utils_macos.m)
|
||||
set(LIBIMHEX_SOURCES ${LIBIMHEX_SOURCES}
|
||||
source/helpers/utils_macos.m
|
||||
source/helpers/macos_menu.m
|
||||
)
|
||||
endif ()
|
||||
|
||||
if (IMHEX_EXTERNAL_PLUGIN_BUILD)
|
||||
@@ -73,41 +80,21 @@ else()
|
||||
add_library(libimhex SHARED ${LIBIMHEX_SOURCES})
|
||||
endif()
|
||||
|
||||
if (IMHEX_ENABLE_CXX_MODULES)
|
||||
target_sources(libimhex
|
||||
PUBLIC
|
||||
FILE_SET cxx_modules TYPE CXX_MODULES
|
||||
FILES
|
||||
include/hex.cppm
|
||||
)
|
||||
endif()
|
||||
|
||||
set(LIBIMHEX_LIBRARY_TYPE PUBLIC)
|
||||
target_compile_definitions(libimhex PRIVATE IMHEX_PROJECT_NAME="${PROJECT_NAME}")
|
||||
endif()
|
||||
|
||||
enableUnityBuild(libimhex)
|
||||
setupCompilerFlags(libimhex)
|
||||
addCppCheck(libimhex)
|
||||
|
||||
include(GenerateExportHeader)
|
||||
generate_export_header(libimhex)
|
||||
|
||||
target_include_directories(libimhex ${LIBIMHEX_LIBRARY_TYPE} include ${XDGPP_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIR} ${MAGIC_INCLUDE_DIRS} ${LLVM_INCLUDE_DIRS} ${FMT_INCLUDE_DIRS} ${LIBBACKTRACE_INCLUDE_DIRS})
|
||||
target_link_directories(libimhex ${LIBIMHEX_LIBRARY_TYPE} ${MBEDTLS_LIBRARY_DIR} ${MAGIC_LIBRARY_DIRS})
|
||||
|
||||
if (NOT EMSCRIPTEN)
|
||||
# curl is only used in non-emscripten builds
|
||||
target_link_libraries(libimhex ${LIBIMHEX_LIBRARY_TYPE} ${CURL_LIBRARIES})
|
||||
endif()
|
||||
|
||||
|
||||
if (NOT IMHEX_EXTERNAL_PLUGIN_BUILD)
|
||||
if (WIN32)
|
||||
set_target_properties(libimhex PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
||||
target_link_options(libimhex PRIVATE -Wl,--export-all-symbols)
|
||||
elseif (APPLE)
|
||||
find_library(FOUNDATION NAMES Foundation)
|
||||
target_link_libraries(libimhex PUBLIC ${FOUNDATION})
|
||||
endif ()
|
||||
|
||||
target_link_libraries(libimhex PRIVATE microtar libwolv ${NFD_LIBRARIES} magic dl ${JTHREAD_LIBRARIES})
|
||||
target_link_libraries(libimhex PUBLIC libpl ${IMGUI_LIBRARIES})
|
||||
endif()
|
||||
|
||||
target_link_libraries(libimhex ${LIBIMHEX_LIBRARY_TYPE} ${NLOHMANN_JSON_LIBRARIES} imgui_all_includes ${MBEDTLS_LIBRARIES} ${FMT_LIBRARIES})
|
||||
|
||||
set_property(TARGET libimhex PROPERTY INTERPROCEDURAL_OPTIMIZATION FALSE)
|
||||
|
||||
if (DEFINED IMHEX_COMMIT_HASH_LONG AND DEFINED IMHEX_COMMIT_BRANCH)
|
||||
set(GIT_COMMIT_HASH_LONG "${IMHEX_COMMIT_HASH_LONG}")
|
||||
@@ -142,4 +129,60 @@ endif ()
|
||||
|
||||
addDefineToSource(source/api/imhex_api.cpp "IMHEX_VERSION=\"${IMHEX_VERSION_STRING}\"")
|
||||
|
||||
add_dependencies(imhex_all libimhex)
|
||||
string(TIMESTAMP IMHEX_BUILD_DATE UTC)
|
||||
addDefineToSource(source/api/imhex_api.cpp "IMHEX_BUILD_DATE=\"${IMHEX_BUILD_DATE}\"")
|
||||
|
||||
enableUnityBuild(libimhex)
|
||||
setupCompilerFlags(libimhex)
|
||||
|
||||
include(GenerateExportHeader)
|
||||
generate_export_header(libimhex)
|
||||
|
||||
target_include_directories(libimhex ${LIBIMHEX_LIBRARY_TYPE} include ${XDGPP_INCLUDE_DIRS} ${LLVM_INCLUDE_DIRS} ${FMT_INCLUDE_DIRS})
|
||||
|
||||
if (NOT IMHEX_EXTERNAL_PLUGIN_BUILD)
|
||||
if (WIN32)
|
||||
set_target_properties(libimhex PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
||||
if (NOT MSVC)
|
||||
target_link_options(libimhex PRIVATE -Wl,--export-all-symbols)
|
||||
endif()
|
||||
target_link_libraries(libimhex PRIVATE Netapi32.lib)
|
||||
target_compile_definitions(libimhex PRIVATE EXPORT_SYMBOLS=1)
|
||||
elseif (APPLE)
|
||||
find_library(FOUNDATION NAMES Foundation)
|
||||
find_library(USERNOTIFICATIONS NAMES UserNotifications)
|
||||
target_link_libraries(libimhex PUBLIC ${FOUNDATION} ${USERNOTIFICATIONS})
|
||||
endif ()
|
||||
|
||||
target_link_libraries(libimhex PRIVATE libpl microtar ${NFD_LIBRARIES} magic)
|
||||
target_link_libraries(libimhex PUBLIC libwolv libpl_includes libpl-gen ${IMGUI_LIBRARIES} ${JTHREAD_LIBRARIES})
|
||||
|
||||
if (IMHEX_ENABLE_IMGUI_TEST_ENGINE)
|
||||
target_link_libraries(libimhex PUBLIC imgui_test_engine)
|
||||
endif()
|
||||
|
||||
if (NOT WIN32)
|
||||
target_link_libraries(libimhex PRIVATE dl)
|
||||
endif()
|
||||
|
||||
if (NOT EMSCRIPTEN)
|
||||
# curl is only used in non-emscripten builds
|
||||
target_link_libraries(libimhex ${LIBIMHEX_LIBRARY_TYPE} CURL::libcurl)
|
||||
endif()
|
||||
|
||||
target_include_directories(libimhex ${LIBIMHEX_LIBRARY_TYPE} ${MBEDTLS_INCLUDE_DIR} ${LIBBACKTRACE_INCLUDE_DIRS} ${MAGIC_INCLUDE_DIRS})
|
||||
target_link_libraries(libimhex ${LIBIMHEX_LIBRARY_TYPE} ${MBEDTLS_LIBRARIES})
|
||||
target_link_directories(libimhex ${LIBIMHEX_LIBRARY_TYPE} ${MBEDTLS_LIBRARY_DIR} ${MAGIC_LIBRARY_DIRS})
|
||||
|
||||
precompileHeaders(libimhex "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
||||
endif()
|
||||
|
||||
target_link_libraries(libimhex ${LIBIMHEX_LIBRARY_TYPE} ${NLOHMANN_JSON_LIBRARIES} imgui_all_includes ${FMT_LIBRARIES} ${LUNASVG_LIBRARIES} ${BOOST_LIBRARIES} tracing)
|
||||
|
||||
set_property(TARGET libimhex PROPERTY INTERPROCEDURAL_OPTIMIZATION FALSE)
|
||||
|
||||
add_dependencies(imhex_all libimhex)
|
||||
|
||||
install(FILES "$<TARGET_FILE:libimhex>" DESTINATION "${CMAKE_INSTALL_LIBDIR}" PERMISSIONS ${LIBRARY_PERMISSIONS})
|
||||
set_target_properties(libimhex PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
set_target_properties(libimhex PROPERTIES PREFIX "")
|
||||
58
lib/libimhex/include/hex.cppm
Normal file
58
lib/libimhex/include/hex.cppm
Normal file
@@ -0,0 +1,58 @@
|
||||
module;
|
||||
|
||||
#include <cmath>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
#include <exception>
|
||||
#include <algorithm>
|
||||
#include <locale>
|
||||
#include <array>
|
||||
#include <filesystem>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <list>
|
||||
#include <atomic>
|
||||
#include <ranges>
|
||||
#include <fstream>
|
||||
#include <thread>
|
||||
#include <future>
|
||||
|
||||
#include <fmt/format.h>
|
||||
#include <nlohmann/json.hpp>
|
||||
#include <wolv/io/file.hpp>
|
||||
|
||||
#include <imgui.h>
|
||||
#include <imgui_internal.h>
|
||||
#include <hex/ui/imgui_imhex_extensions.h>
|
||||
|
||||
#include <hex/helpers/auto_reset.hpp>
|
||||
#include <hex/api/event_manager.hpp>
|
||||
#include <hex/providers/provider.hpp>
|
||||
#include <hex/providers/provider_data.hpp>
|
||||
#include <hex/data_processor/node.hpp>
|
||||
#include <hex/data_processor/link.hpp>
|
||||
#include <hex/data_processor/attribute.hpp>
|
||||
#include <pl/pattern_language.hpp>
|
||||
|
||||
export module hex;
|
||||
|
||||
#define HEX_MODULE_EXPORT
|
||||
|
||||
#include <hex/api/imhex_api/bookmarks.hpp>
|
||||
#include <hex/api/imhex_api/hex_editor.hpp>
|
||||
#include <hex/api/imhex_api/fonts.hpp>
|
||||
#include <hex/api/imhex_api/messaging.hpp>
|
||||
#include <hex/api/imhex_api/provider.hpp>
|
||||
#include <hex/api/imhex_api/system.hpp>
|
||||
|
||||
#include <hex/api/task_manager.hpp>
|
||||
#include <hex/api/achievement_manager.hpp>
|
||||
#include <hex/api/layout_manager.hpp>
|
||||
#include <hex/api/localization_manager.hpp>
|
||||
#include <hex/api/plugin_manager.hpp>
|
||||
#include <hex/api/shortcut_manager.hpp>
|
||||
#include <hex/api/theme_manager.hpp>
|
||||
#include <hex/api/tutorial_manager.hpp>
|
||||
#include <hex/api/workspace_manager.hpp>
|
||||
@@ -1,4 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <hex/helpers/types.hpp>
|
||||
#include <hex/helpers/intrinsics.hpp>
|
||||
|
||||
#if defined(HEX_MODULE_EXPORT)
|
||||
#define EXPORT_MODULE export
|
||||
#else
|
||||
#define EXPORT_MODULE
|
||||
#endif
|
||||
@@ -14,8 +14,9 @@
|
||||
#include <imgui.h>
|
||||
#include <hex/ui/imgui_imhex_extensions.h>
|
||||
#include <hex/api/localization_manager.hpp>
|
||||
#include <hex/helpers/auto_reset.hpp>
|
||||
|
||||
namespace hex {
|
||||
EXPORT_MODULE namespace hex {
|
||||
|
||||
class AchievementManager;
|
||||
|
||||
@@ -144,62 +145,17 @@ namespace hex {
|
||||
* @brief Returns the icon of the achievement
|
||||
* @return Icon of the achievement
|
||||
*/
|
||||
[[nodiscard]] const ImGuiExt::Texture &getIcon() const {
|
||||
if (m_iconData.empty())
|
||||
return m_icon;
|
||||
|
||||
if (m_icon.isValid())
|
||||
return m_icon;
|
||||
|
||||
m_icon = ImGuiExt::Texture(m_iconData.data(), m_iconData.size(), ImGuiExt::Texture::Filter::Linear);
|
||||
|
||||
return m_icon;
|
||||
[[nodiscard]] const char* getIcon() const {
|
||||
return m_icon.c_str();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the icon of the achievement
|
||||
* @param data Icon data
|
||||
* @param icon Icon glyph
|
||||
* @return Reference to the achievement
|
||||
*/
|
||||
Achievement& setIcon(std::span<const std::byte> data) {
|
||||
m_iconData.reserve(data.size());
|
||||
for (auto &byte : data)
|
||||
m_iconData.emplace_back(static_cast<u8>(byte));
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the icon of the achievement
|
||||
* @param data Icon data
|
||||
* @return Reference to the achievement
|
||||
*/
|
||||
Achievement& setIcon(std::span<const u8> data) {
|
||||
m_iconData.assign(data.begin(), data.end());
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the icon of the achievement
|
||||
* @param data Icon data
|
||||
* @return Reference to the achievement
|
||||
*/
|
||||
Achievement& setIcon(std::vector<u8> data) {
|
||||
m_iconData = std::move(data);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the icon of the achievement
|
||||
* @param data Icon data
|
||||
* @return Reference to the achievement
|
||||
*/
|
||||
Achievement& setIcon(const std::vector<std::byte> &data) {
|
||||
m_iconData.reserve(data.size());
|
||||
for (auto &byte : data)
|
||||
m_iconData.emplace_back(static_cast<u8>(byte));
|
||||
Achievement& setIcon(std::string icon) {
|
||||
m_icon = std::move(icon);
|
||||
|
||||
return *this;
|
||||
}
|
||||
@@ -283,8 +239,7 @@ namespace hex {
|
||||
|
||||
std::function<void(Achievement &)> m_clickCallback;
|
||||
|
||||
std::vector<u8> m_iconData;
|
||||
mutable ImGuiExt::Texture m_icon;
|
||||
std::string m_icon;
|
||||
|
||||
u32 m_progress = 0;
|
||||
u32 m_maxProgress = 1;
|
||||
@@ -295,6 +250,7 @@ namespace hex {
|
||||
};
|
||||
|
||||
class AchievementManager {
|
||||
static bool s_initialized;
|
||||
public:
|
||||
AchievementManager() = delete;
|
||||
|
||||
@@ -309,11 +265,15 @@ namespace hex {
|
||||
}
|
||||
|
||||
[[nodiscard]] bool isUnlockable() const {
|
||||
return std::all_of(this->parents.begin(), this->parents.end(), [](auto &parent) { return parent->achievement->isUnlocked(); });
|
||||
return std::ranges::all_of(this->parents, [](const auto &parent) {
|
||||
return parent->achievement->isUnlocked();
|
||||
});
|
||||
}
|
||||
|
||||
[[nodiscard]] bool isVisible() const {
|
||||
return std::all_of(this->visibilityParents.begin(), this->visibilityParents.end(), [](auto &parent) { return parent->achievement->isUnlocked(); });
|
||||
return std::ranges::all_of(this->visibilityParents, [](const auto &parent) {
|
||||
return parent->achievement->isUnlocked();
|
||||
});
|
||||
}
|
||||
|
||||
[[nodiscard]] bool isUnlocked() const {
|
||||
@@ -360,7 +320,7 @@ namespace hex {
|
||||
* @brief Returns all registered achievements
|
||||
* @return All achievements
|
||||
*/
|
||||
static const std::unordered_map<std::string, std::unordered_map<std::string, std::unique_ptr<Achievement>>>& getAchievements();
|
||||
static const std::unordered_map<UnlocalizedString, std::unordered_map<UnlocalizedString, std::unique_ptr<Achievement>>>& getAchievements();
|
||||
|
||||
/**
|
||||
* @brief Returns all achievement start nodes
|
||||
@@ -368,14 +328,14 @@ namespace hex {
|
||||
* @param rebuild Whether to rebuild the list of start nodes
|
||||
* @return All achievement start nodes
|
||||
*/
|
||||
static const std::unordered_map<std::string, std::vector<AchievementNode*>>& getAchievementStartNodes(bool rebuild = true);
|
||||
static const std::unordered_map<UnlocalizedString, std::vector<AchievementNode*>>& getAchievementStartNodes(bool rebuild = true);
|
||||
|
||||
/**
|
||||
* @brief Returns all achievement nodes
|
||||
* @param rebuild Whether to rebuild the list of nodes
|
||||
* @return All achievement nodes
|
||||
*/
|
||||
static const std::unordered_map<std::string, std::list<AchievementNode>>& getAchievementNodes(bool rebuild = true);
|
||||
static const std::unordered_map<UnlocalizedString, std::list<AchievementNode>>& getAchievementNodes(bool rebuild = true);
|
||||
|
||||
/**
|
||||
* @brief Loads the progress of all achievements from the achievements save file
|
||||
@@ -404,4 +364,4 @@ namespace hex {
|
||||
static Achievement& addAchievementImpl(std::unique_ptr<Achievement> &&newAchievement);
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
|
||||
#include <hex.hpp>
|
||||
|
||||
#include <functional>
|
||||
#include <hex/api/localization_manager.hpp>
|
||||
|
||||
EXPORT_MODULE namespace hex {
|
||||
|
||||
/* Background Service Registry. Allows adding new background services */
|
||||
namespace ContentRegistry::BackgroundServices {
|
||||
|
||||
namespace impl {
|
||||
using Callback = std::function<void()>;
|
||||
|
||||
void stopServices();
|
||||
}
|
||||
|
||||
void registerService(const UnlocalizedString &unlocalizedName, const impl::Callback &callback);
|
||||
}
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user