Adding check for wine.
This commit is contained in:
parent
7fd0870be1
commit
ed89c0bc52
|
@ -55,8 +55,13 @@ if is_windows
|
||||||
launcher_sources += i
|
launcher_sources += i
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
|
launcherdeps = [
|
||||||
|
dependency('glib-2.0'),
|
||||||
|
dependency('owlpath'),
|
||||||
|
]
|
||||||
executable('recuento_launcher_windows',
|
executable('recuento_launcher_windows',
|
||||||
launcher_sources,
|
launcher_sources,
|
||||||
|
dependencies : launcherdeps,
|
||||||
install: true,
|
install: true,
|
||||||
win_subsystem: 'windows',
|
win_subsystem: 'windows',
|
||||||
)
|
)
|
||||||
|
@ -68,4 +73,3 @@ executable('recuento',
|
||||||
install : true,
|
install : true,
|
||||||
win_subsystem: 'windows',
|
win_subsystem: 'windows',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -12,10 +12,14 @@ print $recuento_inner.'';
|
||||||
$recuento_inner->mkpath;
|
$recuento_inner->mkpath;
|
||||||
my $resources = $recuento_inner->child('resources');
|
my $resources = $recuento_inner->child('resources');
|
||||||
$resources->mkpath;
|
$resources->mkpath;
|
||||||
copy_recursive('/home/sergio/recuento_root/usr/bin/*.{exe,dll,EXE,DLL}', $recuento_inner);
|
copy_recursive('/home/sergio/recuento_root/usr/bin/*.{exe,EXE}', $recuento_inner);
|
||||||
|
copy_recursive('/home/sergio/recuento_root/usr/bin/*.{dll,DLL}', $destdir);
|
||||||
copy_recursive('/usr/lib/gcc/x86_64-w64-mingw32/11.3.0/libgcc_s_seh-1.dll', $recuento_inner);
|
copy_recursive('/usr/lib/gcc/x86_64-w64-mingw32/11.3.0/libgcc_s_seh-1.dll', $recuento_inner);
|
||||||
|
copy_recursive('/usr/lib/gcc/x86_64-w64-mingw32/11.3.0/libgcc_s_seh-1.dll', $destdir);
|
||||||
copy_recursive('/usr/x86_64-w64-mingw32/usr/bin/libwinpthread-1.dll', $recuento_inner);
|
copy_recursive('/usr/x86_64-w64-mingw32/usr/bin/libwinpthread-1.dll', $recuento_inner);
|
||||||
|
copy_recursive('/usr/x86_64-w64-mingw32/usr/bin/libwinpthread-1.dll', $destdir);
|
||||||
copy_recursive('/usr/lib/gcc/x86_64-w64-mingw32/11.3.0/libstdc++-6.dll', $recuento_inner);
|
copy_recursive('/usr/lib/gcc/x86_64-w64-mingw32/11.3.0/libstdc++-6.dll', $recuento_inner);
|
||||||
|
copy_recursive('/usr/lib/gcc/x86_64-w64-mingw32/11.3.0/libstdc++-6.dll', $destdir);
|
||||||
copy_recursive('/home/sergio/recuento_root/usr/share/recuento/', $resources);
|
copy_recursive('/home/sergio/recuento_root/usr/share/recuento/', $resources);
|
||||||
move_launcher ($recuento_inner, $destdir);
|
move_launcher ($recuento_inner, $destdir);
|
||||||
make_config ($destdir);
|
make_config ($destdir);
|
||||||
|
|
|
@ -288,8 +288,8 @@ void create_input_party (Gtk.Box parties_container,
|
||||||
void create_select_party_image_button (Gtk.Picture picture, Gtk.Box input_fields) {
|
void create_select_party_image_button (Gtk.Picture picture, Gtk.Box input_fields) {
|
||||||
var button_select_image = new Gtk.Button.from_icon_name ("folder-symbolic");
|
var button_select_image = new Gtk.Button.from_icon_name ("folder-symbolic");
|
||||||
button_select_image.clicked.connect (() => {
|
button_select_image.clicked.connect (() => {
|
||||||
var file_chooser = new Gtk.FileChooserDialog ("Select an image",
|
var file_chooser = new Gtk.FileChooserNative ("Select an image",
|
||||||
null, Gtk.FileChooserAction.OPEN);
|
null, Gtk.FileChooserAction.OPEN, "_Open", "_Cancel");
|
||||||
file_chooser.response.connect (() => {
|
file_chooser.response.connect (() => {
|
||||||
picture.set_file(file_chooser.get_file ());
|
picture.set_file(file_chooser.get_file ());
|
||||||
picture.height_request = 200;
|
picture.height_request = 200;
|
||||||
|
|
|
@ -1,15 +1,107 @@
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <owlpath.h>
|
||||||
|
|
||||||
|
const char *keyboard_layouts_key = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\00000809";
|
||||||
|
|
||||||
|
BYTE *wineGetKdbusContents (void) {
|
||||||
|
HKEY keyboard_key;
|
||||||
|
BYTE *keyboard_file = NULL;
|
||||||
|
DWORD keyboard_file_length = 0;
|
||||||
|
|
||||||
|
RegCreateKeyEx (HKEY_LOCAL_MACHINE, TEXT(keyboard_layouts_key), 0,
|
||||||
|
NULL, 0, KEY_READ, NULL, &keyboard_key, NULL);
|
||||||
|
LSTATUS status_search_keyboard_layout = RegGetValue (
|
||||||
|
keyboard_key, NULL, TEXT ("Layout File"), RRF_RT_ANY, NULL, keyboard_file, &keyboard_file_length);
|
||||||
|
|
||||||
|
if (status_search_keyboard_layout != ERROR_MORE_DATA || !keyboard_file_length) {
|
||||||
|
RegCloseKey (keyboard_key);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
keyboard_file = g_malloc (sizeof *keyboard_file * keyboard_file_length);
|
||||||
|
status_search_keyboard_layout = RegGetValue (
|
||||||
|
keyboard_key, NULL, TEXT ("Layout File"), RRF_RT_ANY, NULL, keyboard_file, &keyboard_file_length);
|
||||||
|
if (status_search_keyboard_layout != ERROR_SUCCESS) {
|
||||||
|
RegCloseKey (keyboard_key);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
status_search_keyboard_layout = RegQueryValueEx (
|
||||||
|
keyboard_key, TEXT ("Layout File"), 0, NULL, NULL, &keyboard_file_length);
|
||||||
|
if (keyboard_file[keyboard_file_length-1] == '\0') {
|
||||||
|
RegCloseKey (keyboard_key);
|
||||||
|
return keyboard_file;
|
||||||
|
}
|
||||||
|
printf ("The registry key HKEY_LOCAL_MACHINE\\%s is not null terminated\n", keyboard_layouts_key);
|
||||||
|
RegCloseKey (keyboard_key);
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wineHasKbdus (void) {
|
||||||
|
OwlPath *system32 = owl_path_new_from_path ("C:\\\\Windows\\System32");
|
||||||
|
BYTE *kbdus = wineGetKdbusContents ();
|
||||||
|
if (kbdus == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
OwlPath *kbdus_path = owl_path_child (system32, (char *)kbdus, NULL);
|
||||||
|
if (owl_path_exists (kbdus_path)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
printf ("KBDUS path %s does not exists\n", owl_path_get_path (kbdus_path));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isWine (void) {
|
||||||
|
HKEY wine_key;
|
||||||
|
LSTATUS status_search_wine = RegOpenKeyEx (HKEY_LOCAL_MACHINE,
|
||||||
|
TEXT("Software\\Wine"), 0, KEY_READ, &wine_key);
|
||||||
|
RegCloseKey (wine_key);
|
||||||
|
if (status_search_wine == ERROR_SUCCESS) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isInstallingKbdusNeeded (void) {
|
||||||
|
if (isWine ()) {
|
||||||
|
printf ("%s\n", "This is wine");
|
||||||
|
return !wineHasKbdus ();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void installKbdus (void) {
|
||||||
|
HKEY keyboard_key;
|
||||||
|
BYTE *kbdus_value = (BYTE *) "KBDUS_RECUENTO.DLL";
|
||||||
|
RegCreateKeyEx (HKEY_LOCAL_MACHINE, TEXT(keyboard_layouts_key), 0,
|
||||||
|
NULL, 0, KEY_SET_VALUE, NULL, &keyboard_key, NULL);
|
||||||
|
RegSetValueEx (keyboard_key, TEXT ("Layout File"), 0, REG_SZ, kbdus_value, strlen ((char *)kbdus_value) + 1);
|
||||||
|
OwlPath *kbdus_path = owl_path_new_from_path ("recuento\\\\libKBDUS.dll");
|
||||||
|
OwlPath *system32 = owl_path_new_from_path ("C:\\\\Windows\\System32");
|
||||||
|
OwlPath *system32_kbdus = owl_path_child (system32, (char *)kbdus_value, NULL);
|
||||||
|
owl_path_copy (kbdus_path, system32_kbdus, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR pCmdLine, int nCmdShow)
|
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR pCmdLine, int nCmdShow)
|
||||||
{
|
{
|
||||||
char* argument_list[] = { _fullpath(NULL, "recuento\\\\recuento.exe", 3000), NULL };
|
char* argument_list[] = { _fullpath(NULL, "recuento\\\\recuento.exe", 3000), NULL };
|
||||||
|
|
||||||
|
if (isInstallingKbdusNeeded ()) {
|
||||||
|
installKbdus ();
|
||||||
|
}
|
||||||
|
|
||||||
_putenv_s("DATADIR_RECUENTO", "recuento\\\\resources/");
|
_putenv_s("DATADIR_RECUENTO", "recuento\\\\resources/");
|
||||||
_putenv_s("GSETTINGS_SCHEMA_DIR", "share\\\\glib-2.0\\\\schemas");
|
_putenv_s("GSETTINGS_SCHEMA_DIR", "share\\\\glib-2.0\\\\schemas");
|
||||||
_putenv_s("XDG_CONFIG_DIRS", "etc");
|
_putenv_s("XDG_CONFIG_DIRS", "etc");
|
||||||
|
_putenv_s("PATH", ".");
|
||||||
|
|
||||||
int return_value = execvp(argument_list[0], argument_list);
|
int return_value = execvp(argument_list[0], argument_list);
|
||||||
if (return_value == -1) {
|
if (return_value == -1) {
|
||||||
printf ("%s\n", strerror(errno));
|
printf ("%s\n", strerror(errno));
|
||||||
|
|
Loading…
Reference in New Issue