mirror of
https://gitea.nishi.boats/pyrite-dev/milsko
synced 2026-01-05 09:00:54 +00:00
wip VMS port
This commit is contained in:
106
tools/gendcl.pl
Executable file
106
tools/gendcl.pl
Executable file
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
our $clean = 0;
|
||||
my @objs = ();
|
||||
|
||||
sub compile {
|
||||
my ($source) = @_;
|
||||
my $object = "";
|
||||
my $dir = "";
|
||||
|
||||
$dir = $source;
|
||||
$dir =~ s/\/([^\/]+)$//;
|
||||
|
||||
$source =~ s/^(.+)\/([^\/]+)$/[\/\1]\2/;
|
||||
$source =~ s/\//\./g;
|
||||
|
||||
$object = $source;
|
||||
$object =~ s/\.c$/.obj/;
|
||||
|
||||
print(OUT "\$ if f\$search(\"$object;*\") .eqs. \"\"\n");
|
||||
print(OUT "\$ then\n");
|
||||
print(OUT "\$ write sys\$output \"CC $object\"\n");
|
||||
print(OUT
|
||||
"\$ cc /include_directory=(\"./include\",\"./$dir\") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=$object $source\n"
|
||||
);
|
||||
print(OUT "\$ endif\n");
|
||||
|
||||
push(@objs, $object);
|
||||
}
|
||||
|
||||
sub clean {
|
||||
my ($source) = @_;
|
||||
my $object = "";
|
||||
my $dir = "";
|
||||
|
||||
$source =~ s/^(.+)\/([^\/]+)$/[\/\1]\2/;
|
||||
$source =~ s/\//\./g;
|
||||
|
||||
$object = $source;
|
||||
$object =~ s/\.c$/.obj/;
|
||||
|
||||
print(OUT
|
||||
"\$ if f\$search(\"$object\") .nes. \"\" then delete $object;*\n");
|
||||
}
|
||||
|
||||
sub thing {
|
||||
if ($clean) {
|
||||
clean($_[0]);
|
||||
}
|
||||
else {
|
||||
compile($_[0]);
|
||||
}
|
||||
}
|
||||
|
||||
sub scan {
|
||||
my ($dir) = @_;
|
||||
|
||||
opendir(my $dh, $dir);
|
||||
while (my $file = readdir($dh)) {
|
||||
if ( !(($dir . "/" . $file) eq "src/widget/opengl.c")
|
||||
&& !(($dir . "/" . $file) eq "src/widget/vulkan.c")
|
||||
&& !(($dir . "/" . $file) eq "external/stb_truetype.c")
|
||||
&& !(($dir . "/" . $file) eq "external/stb_image.c")
|
||||
&& ($file =~ /\.c$/))
|
||||
{
|
||||
thing($dir . "/" . $file);
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
}
|
||||
|
||||
for (my $i = 0 ; $i < 2 ; $i++) {
|
||||
$clean = $i;
|
||||
|
||||
open(OUT, ">", $i == 0 ? "vms/build.com" : "vms/clean.com");
|
||||
scan("src");
|
||||
scan("src/cursor");
|
||||
scan("src/widget");
|
||||
scan("src/dialog");
|
||||
scan("src/font");
|
||||
scan("src/icon");
|
||||
scan("src/abstract");
|
||||
scan("external");
|
||||
thing("src/backend/x11.c");
|
||||
|
||||
if ($i == 0) {
|
||||
print(OUT "\$ if f\$search(\"[.src]MwSHR.exe;*\") .eqs. \"\"\n");
|
||||
print(OUT "\$ then\n");
|
||||
print(OUT "\$ write sys\$output \"LINK [.src]MwSHR.exe\"\n");
|
||||
print(OUT "\$ OPEN /WRITE LINK_OPT LINK.OPT\n");
|
||||
foreach my $obj (@objs) {
|
||||
print(OUT "\$ WRITE LINK_OPT \"$obj\"\n");
|
||||
}
|
||||
print(OUT
|
||||
"\$ WRITE LINK_OPT \"SYS\$LIBRARY:DECW\$XLIBSHR/SHARE/SHARE\"\n");
|
||||
print(OUT "\$ WRITE LINK_OPT \"SYS\$LIBRARY:DECC\$SHR/SHARE/SHARE\"\n");
|
||||
print(OUT "\$ CLOSE LINK_OPT\n");
|
||||
print(OUT "\$ link /SHAREABLE=[.src]MwSHR.exe LINK.OPT/options\n");
|
||||
print(OUT "\$ DELETE LINK.OPT;*\n");
|
||||
print(OUT "\$ endif\n");
|
||||
}
|
||||
else {
|
||||
clean("src/MwSHR.exe");
|
||||
}
|
||||
close(OUT);
|
||||
}
|
||||
Reference in New Issue
Block a user