mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 13:10:19 +00:00
52d5172a70
We use a little script to create the code snippet. This script in return relies on comments that were added to the latest libdivecomputer source (in the Subsurface-branch). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
85 lines
2 KiB
Raku
Executable file
85 lines
2 KiB
Raku
Executable file
#!/bin/perl
|
|
#
|
|
# Extract supported divecomputers on Android and iOS from libdivecomputer source
|
|
#
|
|
# Usage:
|
|
#
|
|
# dcTransport.pl <path to libdivecomputer/src/descriptor.c> <outfile>
|
|
#
|
|
use Carp;
|
|
|
|
#set command line arguments
|
|
my ($infi, $outfi) = @ARGV;
|
|
|
|
if ($infi !~ /.*descriptor.c/) {
|
|
croak "run as $ARGV[0] <path to descriptor.c> <outputfile>\n";
|
|
}
|
|
|
|
open(my $fh, "<", $infi) || croak "can't open $infi: $!";
|
|
open(STDOUT, ">", $outfi) || croak "can't open $outfi: $!";
|
|
|
|
my $ftdi = "\/\/ FTDI";
|
|
my $bt = "\/\/ BT";
|
|
my $ble = "\/\/ BLE";
|
|
printf("// This segment of the source is automatically generated\n");
|
|
printf("// please edit scripts/dcTransport.pl , regenerated the code and copy it here\n\n");
|
|
|
|
my @android = ();
|
|
my @ios = ();
|
|
while (<$fh>) {
|
|
if (/^\s*{\s*"([^\,]*)"\s*,\s*"([^\,]*)"\s*,\s*([^\,]*).*}/) {
|
|
my $v = $1;
|
|
my $p = $2;
|
|
if (/$ftdi/) {
|
|
push(@android, "$v,$p");
|
|
}
|
|
if (/$bt/) {
|
|
push(@android, "$v,$p");
|
|
}
|
|
if (/$ble/) {
|
|
push(@android, "$v,$p");
|
|
push(@ios, "$v,$p");
|
|
}
|
|
}
|
|
}
|
|
|
|
my $lastMod;
|
|
my $lastVend;
|
|
my @sortedandroid = sort @android;
|
|
my @sortedios = sort @ios;
|
|
print("#if defined(Q_OS_ANDROID)\n\t/* BT, BLE and FTDI devices */\n");
|
|
|
|
my $endV;
|
|
foreach (@sortedandroid) {
|
|
($vend, $mod) = split(',', $_);
|
|
next if ($vend eq $lastVend && $mod eq $lastMod);
|
|
if ($vend eq $lastVend) {
|
|
printf(", {\"%s\"}", $mod);
|
|
} else {
|
|
printf($endV);
|
|
printf("\tmobileProductList[\"%s\"] =\n\t\tQStringList({{\"%s\"}", $vend, $mod);
|
|
$endV = "});\n";
|
|
}
|
|
$lastVend = $vend;
|
|
$lastMod = $mod;
|
|
}
|
|
printf($endV);
|
|
$endV="";
|
|
printf("\n#endif\n#if defined(Q_OS_IOS)\n\t/* BLE only, Qt does not support classic BT on iOS */\n");
|
|
foreach (@sortedios) {
|
|
($vend, $mod) = split(',', $_);
|
|
next if ($vend eq $lastVend && $mod eq $lastMod);
|
|
if ($vend eq $lastVend) {
|
|
printf(", {\"%s\"}", $mod);
|
|
} else {
|
|
printf($endV);
|
|
printf("\tmobileProductList[\"%s\"] =\n\t\tQStringList({{\"%s\"}", $vend, $mod);
|
|
$endV = "});\n";
|
|
}
|
|
$lastVend = $vend;
|
|
$lastMod = $mod;
|
|
}
|
|
printf($endV);
|
|
printf("\n#endif\n");
|
|
printf("// end of the automatically generated code\n");
|
|
close $fh;
|