forked from RetroShare/RetroShare
-
Notifications
You must be signed in to change notification settings - Fork 0
/
retroshare.pri
861 lines (715 loc) · 31.6 KB
/
retroshare.pri
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
# RetroShare common qmake build script
#
# Copyright (C) 2004-2021 Retroshare Team <[email protected]>
# Copyright (C) 2016-2021 Gioacchino Mazzurco <[email protected]>
# Copyright (C) 2021 Asociación Civil Altermundi <[email protected]>
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with this program. If not, see <https://www.gnu.org/licenses/>.
#
# SPDX-FileCopyrightText: Retroshare Team <[email protected]>
# SPDX-License-Identifier: LGPL-3.0-or-later
################################################################################
## Documented build options (CONFIG) goes here as all the rest depend on them ##
## CONFIG must not be edited in other .pro files, aka if CONFIG need do be #####
## programatically modified depending on platform or from CONFIG itself it #####
## can be done ONLY inside this file (retroshare.pri) ##########################
################################################################################
# To disable RetroShare-gui append the following
# assignation to qmake command line "CONFIG+=no_retroshare_gui"
CONFIG *= retroshare_gui
no_retroshare_gui:CONFIG -= retroshare_gui
# Enable GXS distant syncronization
CONFIG *= gxsdistsync
# To enable cmark append the following
# assignation to qmake command line "CONFIG+=rs_gui_cmark"
CONFIG *= no_rs_gui_cmark
rs_gui_cmark:CONFIG -= no_rs_gui_cmark
# To enable RetroShare plugins append the following
# assignation to qmake command line "CONFIG+=retroshare_plugins"
CONFIG *= no_retroshare_plugins
retroshare_plugins:CONFIG -= no_retroshare_plugins
# To disable RetroShare service append the following assignation to
# qmake command line "CONFIG+=no_retroshare_service"
CONFIG *= retroshare_service
no_retroshare_service:CONFIG -= retroshare_service
# To disable RetroShare FriendServer append the following assignation to
# qmake command line "CONFIG+=no_retroshare_friendserver"
CONFIG *= retroshare_friendserver
no_retroshare_friendserver:CONFIG -= retroshare_friendserver
# To disable SQLCipher support append the following assignation to qmake
# command line "CONFIG+=no_sqlcipher"
CONFIG *= sqlcipher
no_sqlcipher:CONFIG -= sqlcipher
# To enable autologin (this is higly discouraged as it may compromise your node
# security in multiple ways) append the following assignation to qmake command
# line "CONFIG+=rs_autologin"
CONFIG *= no_rs_autologin
rs_autologin:CONFIG -= no_rs_autologin
# To have only hidden node generation append the following assignation
# to qmake command line "CONFIG+=rs_onlyhiddennode"
CONFIG *= no_rs_onlyhiddennode
rs_onlyhiddennode:CONFIG -= no_rs_onlyhiddennode
# To disable GXS (General eXchange System) append the following
# assignation to qmake command line "CONFIG+=no_rs_gxs"
CONFIG *= rs_gxs
no_rs_gxs:CONFIG -= rs_gxs
# To disable GXS distrubuting all available posts independed of the "sync"
# settings append the following assignation to qmake command line
# "CONFIG+=no_rs_gxs_send_all"
CONFIG *= rs_gxs_send_all
no_rs_gxs_send_all:CONFIG -= rs_gxs_send_all
# To enable RS Deprecated Warnings append the following assignation to qmake
# command line "CONFIG+=rs_deprecatedwarning"
CONFIG *= no_rs_deprecatedwarning
rs_deprecatedwarning:CONFIG -= no_rs_deprecatedwarning
# To enable CPP #warning append the following assignation to qmake command
# line "CONFIG+=rs_cppwarning"
CONFIG *= no_rs_cppwarning
rs_cppwarning:CONFIG -= no_rs_cppwarning
# To disable GXS mail append the following assignation to qmake command line
# "CONFIG+=no_rs_gxs_trans"
CONFIG *= rs_gxs_trans
#no_rs_gxs_trans:CONFIG -= rs_gxs_trans ## Disabing not supported ATM
# To enable GXS based async chat append the following assignation to qmake
# command line "CONFIG+=rs_async_chat"
CONFIG *= no_rs_async_chat
rs_async_chat:CONFIG -= no_rs_async_chat
# To disable direct chat which has been deprecated since RetroShare 0.6.5 append
# the following assignation to qmake command line "CONFIG+=no_direct_chat"
CONFIG *= direct_chat
no_direct_chat:CONFIG -= direct_chat
# To enable messemger window which has been deprecated since RetroShare 0.6.6
# append the following assignation to qmake command line "CONFIG+=messenger"
# CONFIG *= messenger
# To disable bitdht append the following assignation to qmake command line
# "CONFIG+=no_bitdht"
CONFIG *= bitdht
no_bitdht:CONFIG -= bitdht
# The DHT stunner is used to determine the NAT type using other RS DHT peers and the STUN (Session Traversal Utilities for NAT) protocol.
# To disable DHT stunner append the following assignation to qmake command line
# "CONFIG+=no_use_dht_stunner"
CONFIG *= use_dht_stunner
no_use_dht_stunner:CONFIG -= use_dht_stunner
# The DHT stunner can be used to figure out our external IP. As this purely relying on random DHT peers that answer our request, it can easily be abused.
# Therefore, it is turned off by default.
# To enable external ip determination (additionally) based on the dht stunner append the following assignation to qmake
# command line "CONFIG+=use_dht_stunner_ext_ip"
CONFIG *= no_use_dht_stunner_ext_ip
use_dht_stunner_ext_ip:CONFIG -= no_use_dht_stunner_ext_ip
# To select your MacOsX version append the following assignation to qmake
# command line "CONFIG+=rs_macos10.11" where 10.11 depends your version
macx:CONFIG *= rs_macos10.11
rs_macos10.8:CONFIG -= rs_macos10.11
rs_macos10.9:CONFIG -= rs_macos10.11
rs_macos10.10:CONFIG -= rs_macos10.11
rs_macos10.12:CONFIG -= rs_macos10.11
rs_macos10.13:CONFIG -= rs_macos10.11
rs_macos10.14:CONFIG -= rs_macos10.11
rs_macos10.15:CONFIG -= rs_macos10.11
rs_macos11.1:CONFIG -= rs_macos10.11
# To enable JSON API append the following assignation to qmake command line
# "CONFIG+=rs_jsonapi"
CONFIG *= no_rs_jsonapi
rs_jsonapi:CONFIG -= no_rs_jsonapi
# To enable forums indexing append the following assignation to qmake command
# line "CONFIG+=rs_deep_forums_index"
CONFIG *= no_rs_deep_forums_index
rs_deep_forums_index:CONFIG -= no_rs_deep_forums_index
# To enable channel indexing append the following assignation to qmake command
# line "CONFIG+=rs_deep_channels_index"
CONFIG *= no_rs_deep_channels_index
rs_deep_channels_index:CONFIG -= no_rs_deep_channels_index
# To enable deep files indexing append the following assignation to qmake
# command line "CONFIG+=rs_deep_files_index"
CONFIG *= no_rs_deep_files_index
rs_deep_files_index:CONFIG -= no_rs_deep_files_index
# To enable Ogg files deep indexing append the following assignation to qmake
# command line "CONFIG+=rs_deep_files_index_ogg"
CONFIG *= no_rs_deep_files_index_ogg
rs_deep_files_index_ogg:CONFIG -= no_rs_deep_files_index_ogg
# To enable FLAC files deep indexing append the following assignation to qmake
# command line "CONFIG+=rs_deep_files_index_flac"
CONFIG *= no_rs_deep_files_index_flac
rs_deep_files_index_flac:CONFIG -= no_rs_deep_files_index_flac
# To enable taglib files deep indexing append the following assignation to qmake
# command line "CONFIG+=rs_deep_files_index_taglib"
CONFIG *= no_rs_deep_files_index_taglib
rs_deep_files_index_taglib:CONFIG -= no_rs_deep_files_index_taglib
# To enable native dialogs append the following assignation to qmake command
# line "CONFIG+=rs_use_native_dialogs"
CONFIG *= no_rs_use_native_dialogs
rs_use_native_dialogs:CONFIG -= no_rs_use_native_dialogs
# To disable broadcast discovery append the following assignation to qmake
# command line "CONFIG+=no_rs_broadcast_discovery"
CONFIG *= rs_broadcast_discovery
no_rs_broadcast_discovery:CONFIG -= rs_broadcast_discovery
# To enable webui append the following assignation to qmake
# command line "CONFIG+=rs_webui"
CONFIG *= no_rs_webui
rs_webui:CONFIG -= no_rs_webui
# To disable retroshare-service option to set webui password from the terminal
# append the following assignation to qmake command line
# "CONFIG+=no_rs_service_webui_terminal_password"
CONFIG *= rs_service_webui_terminal_password
no_rs_service_webui_terminal_password:CONFIG -= rs_service_webui_terminal_password
# To disable retroshare-service terminal login append the following assignation
# to qmake command line "CONFIG+=no_rs_service_terminal_login"
CONFIG *= rs_service_terminal_login
no_rs_service_terminal_login:CONFIG -= rs_service_terminal_login
# To disable Diffie Hellman group check at init append the following assignation
# to qmake command line "CONFIG+=no_rs_dh_init_check"
# this check is not strictly needed and on some platform is very slow.
# On Android it takes at least one minute at startup which is untolerable for
# most phone users
CONFIG+=rs_dh_init_check
no_rs_dh_init_check:CONFIG -= rs_dh_init_check
# To disable I2P sam3 support append the following assignation to qmake command
# line "CONFIG+=no_rs_sam3"
CONFIG *= rs_sam3
no_rs_sam3:CONFIG -= rs_sam3
# To disable I2P sam3 library submodule build append the following assignation
# to qmake command line "CONFIG+=no_rs_sam3_libsam3"
CONFIG *= rs_sam3_libsam3
no_rs_sam3_libsam3:CONFIG -= rs_sam3_libsam3
# Specify host precompiled jsonapi-generator path, appending the following
# assignation to qmake command line
# 'JSONAPI_GENERATOR_EXE=/myBuildDir/jsonapi-generator'. Required for JSON API
# cross-compiling
#JSONAPI_GENERATOR_EXE=/myBuildDir/jsonapi-generator
# Specify RetroShare major version (must be a number) appending the following
# assignation to qmake command line 'RS_MAJOR_VERSION=0'
#RS_MAJOR_VERSION=0
# Specify RetroShare minor version (must be a number) appending the following
# assignation to qmake command line 'RS_MINOR_VERSION=6'
#RS_MINOR_VERSION=6
# Specify RetroShare mini version (must be a number) appending the following
# assignation to qmake command line 'RS_MINI_VERSION=4'
#RS_MINI_VERSION=4
# Specify RetroShare extra version (must be a string) appending the following
# assignation to qmake command line 'RS_EXTRA_VERSION=""'
#RS_EXTRA_VERSION=git
# Specify threading library to use appending the following assignation to qmake
# commandline 'RS_THREAD_LIB=pthread' the name of the multi threading library to
# use (pthread, "") usually depends on platform.
isEmpty(RS_THREAD_LIB):RS_THREAD_LIB = pthread
# Specify UPnP library to use, appending the following assignation to qmake
# command line
# 'RS_UPNP_LIB=none' do not compile UPnP support
# 'RS_UPNP_LIB=miniupnpc' to use miniupnpc
# 'RS_UPNP_LIB="upnp ixml threadutil"' to use libupnp-1.6.x
# 'RS_UPNP_LIB="upnp ixml"' to use libupnp-1.8.x
# Which library is better suited usually depends on the platform.
# See http://miniupnp.free.fr/ and http://pupnp.sourceforge.net/ for more
# information about the libraries. Autodetection is attempted by default.
#RS_UPNP_LIB=
###########################################################################################################################################################
#
# V07_NON_BACKWARD_COMPATIBLE_CHANGE_001:
#
# What: Computes the node id by performing a sha256 hash of the certificate's PGP signature, instead of simply picking up the last 20 bytes of it.
#
# Why: There is no real risk in forging a certificate with the same ID as the authentication is performed over the PGP signature of the certificate
# which hashes the full SSL certificate (i.e. the full serialized CERT_INFO structure). However the possibility to
# create two certificates with the same IDs is a problem, as it can be used to cause disturbance in the software.
#
# Backward compat: connexions impossible with non patched peers older than Nov 2017, probably because the SSL id that is computed is not the same on both side,
# and in particular unpatched peers see a cerficate with ID different (because computed with the old method) than the ID that was
# submitted when making friends.
#
# Note: the advantage of basing the ID on the signature rather than the public key is not very clear, given that the signature is based on a hash
# of the public key (and the rest of the certificate info).
#
# V07_NON_BACKWARD_COMPATIBLE_CHANGE_002:
#
# What: Use RSA+SHA256 instead of RSA+SHA1 for PGP certificate signatures
#
# Why: Sha1 is likely to be prone to primary collisions anytime soon, so it is urgent to turn to a more secure solution.
#
# Backward compat: unpatched peers after Nov 2017 are able to verify signatures since openpgp-sdk already handle it.
#
# V07_NON_BACKWARD_COMPATIBLE_CHANGE_003:
#
# What: Do not hash PGP certificate twice when signing
#
# Why: hasing twice is not per se a security issue, but it makes it harder to change the settings for hashing.
#
# Backward compat: patched peers cannot connect to non patched peers older than Nov 2017.
#
# V07_NON_BACKWARD_COMPATIBLE_CHANGE_004:
#
# What: Do not probe that GXS tunnels accept fast items. Just assume they do.
# Why: Avoids sending probe packets
# BackwardCompat: old RS before Mai 2019 will not be able to distant chat.
#
###########################################################################################################################################################
DEFINES += V07_NON_BACKWARD_COMPATIBLE_CHANGE_001
DEFINES += V07_NON_BACKWARD_COMPATIBLE_CHANGE_002
DEFINES += V07_NON_BACKWARD_COMPATIBLE_CHANGE_003
#CONFIG += rs_v07_changes
rs_v07_changes {
DEFINES += V07_NON_BACKWARD_COMPATIBLE_CHANGE_001
DEFINES += V07_NON_BACKWARD_COMPATIBLE_CHANGE_002
DEFINES += V07_NON_BACKWARD_COMPATIBLE_CHANGE_003
DEFINES += V07_NON_BACKWARD_COMPATIBLE_CHANGE_004
DEFINES += V07_NON_BACKWARD_COMPATIBLE_CHANGE_UNNAMED
}
################################################################################
## RetroShare qmake functions goes here as all the rest may use them. ##########
################################################################################
## Qt versions older the 5 are not supported anymore, check if the user is
## attempting use them and fail accordingly with a proper error message
lessThan(QT_MAJOR_VERSION, 5) {
error(Qt 5.0.0 or newer is needed to build RetroShare)
}
## This function is useful to look for the location of a file in a list of paths
## like the which command on linux, first paramether is the file name,
## second parameter is the name of a variable containing the list of folders
## where to look for. First match is returned.
defineReplace(findFileInPath) {
fileName=$$1
pathList=$$2
for(mDir, $$pathList) {
attempt = $$clean_path($$mDir/$$fileName)
exists($$attempt) {
return($$system_path($$attempt))
}
}
return()
}
## This function return linker option to link statically the libraries contained
## in the variable given as paramether.
## Be carefull static library are very susceptible to order
defineReplace(linkStaticLibs) {
libsVarName = $$1
retSlib =
for(mLib, $$libsVarName) {
attemptPath=$$findFileInPath(lib$${mLib}.a, QMAKE_LIBDIR)
isEmpty(attemptPath):error(lib$${mLib}.a not found in [$${QMAKE_LIBDIR}])
retSlib += -L$$dirname(attemptPath) -l$$mLib
}
return($$retSlib)
}
## This function return pretarget deps for the static libraries contained in
## the variable given as paramether.
defineReplace(pretargetStaticLibs) {
libsVarName = $$1
retPreTarget =
for(mLib, $$libsVarName) {
attemptPath=$$findFileInPath(lib$${mLib}.a, QMAKE_LIBDIR)
isEmpty(attemptPath):error(lib$${mLib}.a not found in [$${QMAKE_LIBDIR}])
retPreTarget += $$attemptPath
}
return($$retPreTarget)
}
## This function return linker option to link dynamically the libraries
## contained in the variable given as paramether.
defineReplace(linkDynamicLibs) {
libsVarName = $$1
retDlib =
for(mLib, $$libsVarName) {
retDlib += -l$$mLib
}
return($$retDlib)
}
## On some environements qmake chose a C++ compiler as C compiler, this breaks
## some sub targets, such as those based on cmake which test for chosen C
## compiler to be a proper C compiler. This function try to deduce the correct C
## compiler also in those cases, and return it. So you can use
## $$fixQmakeCC($$QMAKE_CC) in those cases instead of plain $$QMAKE_CC
defineReplace(fixQmakeCC) {
retVal = $$1
contains(1, .*\+\+$):retVal=$$str_member($$1, 0 ,-3)
contains(1, .*g\+\+$):retVal=$$str_member($$1, 0 ,-3)cc
contains(1, .*g\+\+-[0-9]$):retVal=$$str_member($$1, 0 ,-5)cc$$str_member($$1, -2 ,-1)
contains(1, .*clang\+\+$):retVal=$$str_member($$1, 0 ,-3)
return($$retVal)
}
################################################################################
## Statements and variables that depends on build options (CONFIG) goes here ###
################################################################################
##
## Defining the following variables may be needed depending on platform and
## build options (CONFIG)
##
## PREFIX String variable containing the directory considered as prefix set
## with = operator.
## QMAKE_LIBDIR, INCLUDEPATH Lists variables where qmake will look for includes
## and libraries. Add values using *= operator.
## RS_BIN_DIR, RS_LIB_DIR, RS_INCLUDE_DIR, RS_DATA_DIR, RS_PLUGIN_DIR String
## variables of directories where RetroShare components will be installed, on
## most platforms they are automatically calculated from PREFIX or in other
## ways.
## RS_SQL_LIB String viariable containing the name of the SQL library to use
## ("sqlcipher sqlite3", sqlite3) it is usually precalculated depending on
## CONFIG.
isEmpty(QMAKE_HOST_SPEC):QMAKE_HOST_SPEC=$$[QMAKE_SPEC]
isEmpty(QMAKE_TARGET_SPEC):QMAKE_TARGET_SPEC=$$[QMAKE_XSPEC]
equals(QMAKE_HOST_SPEC, $$QMAKE_TARGET_SPEC) {
CONFIG *= no_rs_cross_compiling
CONFIG -= rs_cross_compiling
} else {
CONFIG *= rs_cross_compiling
CONFIG -= no_rs_cross_compiling
message(Cross-compiling detected QMAKE_HOST_SPEC: $$QMAKE_HOST_SPEC \
QMAKE_TARGET_SPEC: $$QMAKE_TARGET_SPEC)
}
defined(RS_MAJOR_VERSION,var):\
defined(RS_MINOR_VERSION,var):\
defined(RS_MINI_VERSION,var):\
defined(RS_EXTRA_VERSION,var) {
message("RetroShare version\
$${RS_MAJOR_VERSION}.$${RS_MINOR_VERSION}.$${RS_MINI_VERSION}$${RS_EXTRA_VERSION}\
defined in command line")
DEFINES += RS_MAJOR_VERSION=$${RS_MAJOR_VERSION}
DEFINES += RS_MINOR_VERSION=$${RS_MINOR_VERSION}
DEFINES += RS_MINI_VERSION=$${RS_MINI_VERSION}
DEFINES += RS_EXTRA_VERSION=\\\"$${RS_EXTRA_VERSION}\\\"
} else {
RS_GIT_DESCRIBE = $$system(git describe --long --match v*.*.*)
contains(RS_GIT_DESCRIBE, ^v\d+\.\d+\.\d+.*) {
RS_GIT_DESCRIBE_SPLIT = $$split(RS_GIT_DESCRIBE, v)
RS_GIT_DESCRIBE_SPLIT = $$split(RS_GIT_DESCRIBE_SPLIT, .)
RS_MAJOR_VERSION = $$member(RS_GIT_DESCRIBE_SPLIT, 0)
RS_MINOR_VERSION = $$member(RS_GIT_DESCRIBE_SPLIT, 1)
RS_GIT_DESCRIBE_SPLIT = $$member(RS_GIT_DESCRIBE_SPLIT, 2)
RS_GIT_DESCRIBE_SPLIT = $$split(RS_GIT_DESCRIBE_SPLIT, )
# Split string into mini version (leading numbers) and extra version (string after the numbers)
RS_MINI_VERSION =
RS_EXTRA_VERSION =
for(CHAR, RS_GIT_DESCRIBE_SPLIT) {
isEqual(CHAR, 0) | greaterThan(CHAR, 0):lessThan(CHAR, 9) | isEqual(CHAR, 9) {
# Number
isEmpty(RS_EXTRA_VERSION) {
# Add leading numbers to mini version
RS_MINI_VERSION = $${RS_MINI_VERSION}$${CHAR}
} else {
# Add to extra version
RS_EXTRA_VERSION = $${RS_EXTRA_VERSION}$${CHAR}
}
} else {
# Add to extra version
RS_EXTRA_VERSION = $${RS_EXTRA_VERSION}$${CHAR}
}
}
message("RetroShare version\
$${RS_MAJOR_VERSION}.$${RS_MINOR_VERSION}.$${RS_MINI_VERSION}$${RS_EXTRA_VERSION}\
determined via git")
DEFINES += RS_MAJOR_VERSION=$${RS_MAJOR_VERSION}
DEFINES += RS_MINOR_VERSION=$${RS_MINOR_VERSION}
DEFINES += RS_MINI_VERSION=$${RS_MINI_VERSION}
DEFINES += RS_EXTRA_VERSION=\\\"$${RS_EXTRA_VERSION}\\\"
} else {
warning("Determining RetroShare version via git failed plese specify it\
trough qmake command line arguments!")
}
}
gxsdistsync:DEFINES *= RS_USE_GXS_DISTANT_SYNC
wikipoos:DEFINES *= RS_USE_WIKI
rs_gxs:DEFINES *= RS_ENABLE_GXS
rs_gxs_send_all:DEFINES *= RS_GXS_SEND_ALL
rs_service_webui_terminal_password:DEFINES *= RS_SERVICE_TERMINAL_WEBUI_PASSWORD
rs_service_terminal_login:DEFINES *= RS_SERVICE_TERMINAL_LOGIN
sqlcipher {
DEFINES -= NO_SQLCIPHER
RS_SQL_LIB = sqlcipher
}
no_sqlcipher {
DEFINES *= NO_SQLCIPHER
RS_SQL_LIB = sqlite3
}
rs_autologin {
DEFINES *= RS_AUTOLOGIN
RS_AUTOLOGIN_WARNING_MSG = QMAKE: \
You have enabled RetroShare auto-login, this is discouraged. The usage \
of auto-login on some linux distributions may allow someone having \
access to your session to steal the SSL keys of your node location and \
therefore compromise your security
warning("$${RS_AUTOLOGIN_WARNING_MSG}")
}
rs_onlyhiddennode {
DEFINES *= RS_ONLYHIDDENNODE
CONFIG -= bitdht
CONFIG *= no_bitdht
message("QMAKE: You have enabled only hidden node.")
}
rs_sanitize {
QMAKE_CXXFLAGS *= -fsanitize=address -fsanitize=bounds -fsanitize=undefined
}
no_rs_deprecatedwarning {
QMAKE_CXXFLAGS += -Wno-deprecated
QMAKE_CXXFLAGS += -Wno-deprecated-declarations
DEFINES *= RS_NO_WARN_DEPRECATED
warning("QMAKE: You have disabled deprecated warnings.")
}
no_rs_cppwarning {
QMAKE_CXXFLAGS += -Wno-cpp
QMAKE_CXXFLAGS += -Wno-inconsistent-missing-override
DEFINES *= RS_NO_WARN_CPP
warning("QMAKE: You have disabled C preprocessor warnings.")
}
rs_gxs_trans {
DEFINES *= RS_GXS_TRANS
}
bitdht {
DEFINES *= RS_USE_BITDHT
use_dht_stunner {
CONFIG *= useDhtStunner
use_dht_stunner_ext_ip {
DEFINES *= ALLOW_DHT_STUNNER
}
}
}
direct_chat {
warning("QMAKE: You have enabled RetroShare direct chat which is deprecated!")
DEFINES *= RS_DIRECT_CHAT
}
rs_async_chat {
DEFINES *= RS_ASYNC_CHAT
}
rs_chatserver {
DEFINES *= RS_CHATSERVER
}
rs_jsonapi {
rs_cross_compiling:!exists($$JSONAPI_GENERATOR_EXE):error("Inconsistent \
build configuration, cross-compiling JSON API requires JSONAPI_GENERATOR_EXE \
to contain the path to an host executable jsonapi-generator")
DEFINES *= RS_JSONAPI
}
rs_webui {
!rs_jsonapi: error("Cannot enable rs_webui without rs_jsonapi")
DEFINES *= RS_WEBUI
}
rs_deep_forums_index:DEFINES *= RS_DEEP_FORUMS_INDEX
rs_deep_channels_index:DEFINES *= RS_DEEP_CHANNEL_INDEX
rs_deep_files_index:DEFINES *= RS_DEEP_FILES_INDEX
rs_deep_files_index_ogg:DEFINES *= RS_DEEP_FILES_INDEX_OGG
rs_deep_files_index_flac:DEFINES *= RS_DEEP_FILES_INDEX_FLAC
rs_deep_files_index_taglib:DEFINES *= RS_DEEP_FILES_INDEX_TAGLIB
rs_use_native_dialogs:DEFINES *= RS_NATIVEDIALOGS
rs_broadcast_discovery:DEFINES *= RS_BROADCAST_DISCOVERY
no_rs_dh_init_check:DEFINES *= RS_DISABLE_DIFFIE_HELLMAN_INIT_CHECK
rs_sam3: {
DEFINES *= RS_USE_I2P_SAM3
# this allows a downgrade from a SAMv3 build to a BOB build, can be removed in the future
DEFINES *= RS_I2P_SAM3_BOB_COMPAT
}
rs_sam3_libsam3: DEFINES *= RS_USE_I2P_SAM3_LIBSAM3
debug {
rs_mutex_debug:DEFINES *= RS_MUTEX_DEBUG
QMAKE_CXXFLAGS -= -O2 -fomit-frame-pointer
QMAKE_CFLAGS -= -O2 -fomit-frame-pointer
QMAKE_CXXFLAGS *= -O0 -g -fno-omit-frame-pointer
QMAKE_CFLAGS *= -O0 -g -fno-omit-frame-pointer
}
profiling {
QMAKE_CXXFLAGS -= -fomit-frame-pointer
QMAKE_CFLAGS -= -fomit-frame-pointer
QMAKE_CXXFLAGS *= -pg -g -fno-omit-frame-pointer
QMAKE_CFLAGS *= -pg -g -fno-omit-frame-pointer
QMAKE_LFLAGS *= -pg
}
# Enable all warnings
QMAKE_CFLAGS *= -Wall -Wextra
QMAKE_CXXFLAGS *= -Wall -Wextra
# Disable unwanted warnings
QMAKE_CFLAGS *= -Wno-misleading-indentation -Wno-dangling-else
QMAKE_CXXFLAGS *= -Wno-misleading-indentation -Wno-dangling-else
# Treat warnings as error for better removing
#QMAKE_CFLAGS += -Werror
#QMAKE_CXXFLAGS += -Werror
################################################################################
## Last goes platform specific statements common to all RetroShare subprojects #
################################################################################
linux-* {
isEmpty(PREFIX) : PREFIX = "/usr"
isEmpty(RS_BIN_DIR) : RS_BIN_DIR = "$${PREFIX}/bin"
isEmpty(RS_INCLUDE_DIR): RS_INCLUDE_DIR = "$${PREFIX}/include"
isEmpty(RS_LIB_DIR) : RS_LIB_DIR = "$${PREFIX}/lib"
isEmpty(RS_DATA_DIR) : RS_DATA_DIR = "$${PREFIX}/share/retroshare"
isEmpty(RS_PLUGIN_DIR) : RS_PLUGIN_DIR = "$${PREFIX}/lib/retroshare/extensions6"
QMAKE_LIBDIR *= "$$RS_LIB_DIR"
QMAKE_LIBDIR += "$${PREFIX}/lib64"
QMAKE_LIBDIR += "$${PREFIX}/lib/x86_64-linux-gnu"
rs_autologin {
# try libsecret first since it is not limited to gnome keyring and libgnome-keyring is deprecated
LIBSECRET_AVAILABLE = $$system(pkg-config --exists libsecret-1 && echo yes)
isEmpty(LIBSECRET_AVAILABLE) {
message("using libgnome-keyring for auto login")
DEFINES *= HAS_GNOME_KEYRING
PKGCONFIG *= gnome-keyring-1
} else {
message("using libsecret for auto login")
DEFINES *= HAS_LIBSECRET
PKGCONFIG *= libsecret-1
}
}
}
android-* {
isEmpty(NATIVE_LIBS_TOOLCHAIN_PATH) {
NATIVE_LIBS_TOOLCHAIN_PATH = $$(NATIVE_LIBS_TOOLCHAIN_PATH)
}
retroshare_qml_app {
CONFIG -= no_retroshare_android_notify_service
CONFIG *= retroshare_android_notify_service
}
CONFIG *= no_libresapihttpserver
CONFIG -= libresapihttpserver
QT *= androidextras
INCLUDEPATH *= $$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/include
QMAKE_LIBDIR *= "$$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/lib/"
# The android libc, bionic, provides built-in support for pthreads,
# additional linking (-lpthreads) break linking.
# See https://stackoverflow.com/a/31277163
RS_THREAD_LIB =
}
# To export all symbols for the plugins on Windows build we need to build
# libretroshare as shared library. Fix linking error (ld.exe: Error: export
# ordinal too large) due to too many exported symbols.
retroshare_plugins:win32:CONFIG *= libretroshare_shared
win32-g++|win32-clang-g++ {
!isEmpty(EXTERNAL_LIB_DIR) {
message(Use pre-compiled libraries in $${EXTERNAL_LIB_DIR}.)
PREFIX = $$system_path($$EXTERNAL_LIB_DIR)
}
PREFIX_MSYS2 = $$(MINGW_PREFIX)
isEmpty(PREFIX_MSYS2) {
message("MINGW_PREFIX is not set, attempting MSYS2 autodiscovery.")
TEMPTATIVE_MSYS2=$$system_path(C:\\msys32\\mingw32)
exists($$clean_path($${TEMPTATIVE_MSYS2}/include)) {
PREFIX_MSYS2=$${TEMPTATIVE_MSYS2}
}
TEMPTATIVE_MSYS2=$$system_path(C:\\msys64\\mingw32)
exists($$clean_path($${TEMPTATIVE_MSYS2}/include)) {
PREFIX_MSYS2=$${TEMPTATIVE_MSYS2}
}
!isEmpty(PREFIX_MSYS2):message(Found MSYS2: $${PREFIX_MSYS2})
}
isEmpty(PREFIX):!isEmpty(PREFIX_MSYS2) {
PREFIX = $$system_path($${PREFIX_MSYS2})
}
isEmpty(PREFIX) {
error(PREFIX is not set. Set either EXTERNAL_LIB_DIR or PREFIX_MSYS2.)
}
INCLUDEPATH *= $$system_path($${PREFIX}/include)
!isEmpty(PREFIX_MSYS2) : INCLUDEPATH *= $$system_path($${PREFIX_MSYS2}/include)
QMAKE_LIBDIR *= $$system_path($${PREFIX}/lib)
!isEmpty(PREFIX_MSYS2) : QMAKE_LIBDIR *= $$system_path($${PREFIX_MSYS2}/lib)
RS_BIN_DIR = $$system_path($${PREFIX}/bin)
RS_INCLUDE_DIR = $$system_path($${PREFIX}/include)
RS_LIB_DIR = $$system_path($${PREFIX}/lib)
RS_UPNP_LIB = miniupnpc
DEFINES *= NOGDI WIN32 WIN32_LEAN_AND_MEAN WINDOWS_SYS
# This defines the platform to be WinXP or later and is needed for
# getaddrinfo (_WIN32_WINNT_WINXP)
DEFINES *= WINVER=0x0501
message(***retroshare.pri:Win32 PREFIX $$PREFIX INCLUDEPATH $$INCLUDEPATH QMAKE_LIBDIR $$QMAKE_LIBDIR DEFINES $$DEFINES)
}
win32-clang-g++ {
QMAKE_CXXFLAGS += -femulated-tls
}
macx-* {
rs_macos10.8 {
message(***retroshare.pri: Set Target and SDK to MacOS 10.8 )
QMAKE_MACOSX_DEPLOYMENT_TARGET=10.8
QMAKE_MAC_SDK = macosx10.8
}
rs_macos10.9 {
message(***retroshare.pri: Set Target and SDK to MacOS 10.9 )
QMAKE_MACOSX_DEPLOYMENT_TARGET=10.9
QMAKE_MAC_SDK = macosx10.9
}
rs_macos10.10 {
message(***retroshare.pri: Set Target and SDK to MacOS 10.10 )
QMAKE_MACOSX_DEPLOYMENT_TARGET=10.10
QMAKE_MAC_SDK = macosx10.10
}
rs_macos10.11 {
message(***retroshare.pri: Set Target and SDK to MacOS 10.11 )
QMAKE_MACOSX_DEPLOYMENT_TARGET=10.11
QMAKE_MAC_SDK = macosx10.11
}
rs_macos10.12 {
message(***retroshare.pri: Set Target and SDK to MacOS 10.12 )
QMAKE_MACOSX_DEPLOYMENT_TARGET=10.12
QMAKE_MAC_SDK = macosx10.12
QMAKE_CXXFLAGS += -Wno-nullability-completeness
QMAKE_CFLAGS += -Wno-nullability-completeness
}
rs_macos10.13 {
message(***retroshare.pri: Set Target and SDK to MacOS 10.13 )
QMAKE_MACOSX_DEPLOYMENT_TARGET=10.13
QMAKE_MAC_SDK = macosx10.13
QMAKE_CXXFLAGS += -Wno-nullability-completeness
QMAKE_CFLAGS += -Wno-nullability-completeness
}
rs_macos10.14 {
message(***retroshare.pri: Set Target and SDK to MacOS 10.14 )
QMAKE_MACOSX_DEPLOYMENT_TARGET=10.14
QMAKE_MAC_SDK = macosx10.14
QMAKE_CXXFLAGS += -Wno-nullability-completeness
QMAKE_CFLAGS += -Wno-nullability-completeness
}
rs_macos10.15 {
message(***retroshare.pri: Set Target and SDK to MacOS 10.15 )
QMAKE_MACOSX_DEPLOYMENT_TARGET=10.15
QMAKE_MAC_SDK = macosx10.15
QMAKE_CXXFLAGS += -Wno-nullability-completeness
QMAKE_CFLAGS += -Wno-nullability-completeness
}
rs_macos11.1 {
message(***retroshare.pri: Set Target and SDK to MacOS 11.1 )
QMAKE_MACOSX_DEPLOYMENT_TARGET=11.1
QMAKE_MAC_SDK = macosx11.1
QMAKE_CXXFLAGS += -Wno-nullability-completeness
QMAKE_CFLAGS += -Wno-nullability-completeness
}
message(***retroshare.pri:MacOSX)
BIN_DIR += "/Applications/Xcode.app/Contents/Developer/usr/bin"
INCLUDEPATH += "/usr/local/include"
RS_UPNP_LIB = miniupnpc
QT += macextras
INCLUDEPATH += "/usr/local/opt/openssl/include"
QMAKE_LIBDIR += "/usr/local/opt/openssl/lib"
QMAKE_LIBDIR += "/usr/local/opt/sqlcipher/lib"
QMAKE_LIBDIR += "/usr/local/opt/miniupnpc/lib"
}
# If not yet defined attempt UPnP library autodetection should works at least
# for miniupnc libupnp-1.6.x and libupnp-1.8.x
isEmpty(RS_UPNP_LIB) {
__TEMP_UPNP_LIBS = upnp ixml threadutil
for(mLib, __TEMP_UPNP_LIBS) {
attemptPath=$$findFileInPath(lib$${mLib}.a, QMAKE_LIBDIR)
isEmpty(attemptPath):attemptPath=$$findFileInPath(lib$${mLib}.so, QMAKE_LIBDIR)
!isEmpty(attemptPath):RS_UPNP_LIB += $${mLib}
}
isEmpty(RS_UPNP_LIB) {
__TEMP_UPNP_LIBS=$$findFileInPath(libminiupnpc.a, QMAKE_LIBDIR)
!isEmpty(__TEMP_UPNP_LIBS):RS_UPNP_LIB=miniupnpc
__TEMP_UPNP_LIBS=$$findFileInPath(libminiupnpc.so, QMAKE_LIBDIR)
!isEmpty(__TEMP_UPNP_LIBS):RS_UPNP_LIB=miniupnpc
}
isEmpty(RS_UPNP_LIB) {
warning("RS_UPNP_LIB detection failed, UPnP support disabled!")
} else {
message("Autodetected RS_UPNP_LIB=$$RS_UPNP_LIB")
}
}
equals(RS_UPNP_LIB, none):RS_UPNP_LIB=
equals(RS_UPNP_LIB, miniupnpc):DEFINES*=RS_USE_LIBMINIUPNPC
contains(RS_UPNP_LIB, upnp):DEFINES*=RS_USE_LIBUPNP
## Retrocompatibility assignations, get rid of this ASAP
isEmpty(BIN_DIR) : BIN_DIR = $${RS_BIN_DIR}
isEmpty(INC_DIR) : INC_DIR = $${RS_INCLUDE_DIR}
isEmpty(LIBDIR) : LIBDIR = $${QMAKE_LIBDIR}
isEmpty(PLUGIN_DIR): PLUGIN_DIR= $${RS_PLUGIN_DIR}