summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-10-06 21:04:25 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-10-06 21:04:25 -0700
commit475e058d40690803a4114f5aa9055023af6e6b4b (patch)
tree352b9ccb4fd147dd098135fa70145358dc0b6387
parent34db6dc2bea6173c070c9820a2e57a511b9ca0b1 (diff)
downloadsubsurface-475e058d40690803a4114f5aa9055023af6e6b4b.tar.gz
Make Windows cross compile again
But this is broken as the utf8/utf16 conversions in windows.c are gone without glib. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--Rules.mk4
-rw-r--r--dive.h14
-rw-r--r--profile.c2
-rw-r--r--uemis-downloader.c6
-rw-r--r--windows.c31
5 files changed, 39 insertions, 18 deletions
diff --git a/Rules.mk b/Rules.mk
index 9fa3095bb..d711ad025 100644
--- a/Rules.mk
+++ b/Rules.mk
@@ -144,6 +144,10 @@ create-macosx-bundle: all
sign-macosx-bundle: all
codesign -s "3A8CE62A483083EDEA5581A61E770EC1FA8BECE8" /Applications/$(CAPITALIZED_NAME).app/Contents/MacOS/$(NAME)-bin
+$(RESFILE): packaging/windows/subsurface.rc
+ @$(PRETTYECHO) ' WINDRES' $<
+ @i686-w64-mingw32-windres -O coff -i $< -o $@
+
install-cross-windows: all
$(INSTALL) -d -m 755 $(WINDOWSSTAGING)/share/locale
for MSG in $(WINMSGDIRS); do\
diff --git a/dive.h b/dive.h
index a6347b897..78d91f066 100644
--- a/dive.h
+++ b/dive.h
@@ -5,7 +5,19 @@
#include <stdint.h>
#include <time.h>
#include <math.h>
-#include <sys/param.h>
+
+/* Windows has no MIN/MAX macros - so let's just roll our own */
+#define MIN(x, y) ({ \
+ typeof(x) _min1 = (x); \
+ typeof(y) _min2 = (y); \
+ (void) (&_min1 == &_min2); \
+ _min1 < _min2 ? _min1 : _min2; })
+
+#define MAX(x, y) ({ \
+ typeof(x) _max1 = (x); \
+ typeof(y) _max2 = (y); \
+ (void) (&_max1 == &_max2); \
+ _max1 > _max2 ? _max1 : _max2; })
#include <libxml/tree.h>
#include <libxslt/transform.h>
diff --git a/profile.c b/profile.c
index 656c6bb6a..b360c6f1c 100644
--- a/profile.c
+++ b/profile.c
@@ -92,7 +92,7 @@ int get_maxdepth(struct plot_info *pi)
md = ROUND_UP(mm+3000, 10000);
} else {
/* Minimum 30m, rounded up to 10m, with at least 3m to spare */
- md = MAX(30000, ROUND_UP(mm+3000, 10000));
+ md = MAX((unsigned)30000, ROUND_UP(mm+3000, 10000));
}
md += pi->maxpp * 9000;
return md;
diff --git a/uemis-downloader.c b/uemis-downloader.c
index 9f1dfb354..067e113b0 100644
--- a/uemis-downloader.c
+++ b/uemis-downloader.c
@@ -148,9 +148,11 @@ static int number_of_file(char *path)
dirp = opendir(path);
while ((entry = readdir(dirp)) != NULL) {
- if (entry->d_type == DT_REG) { /* If the entry is a regular file */
+#ifndef WIN32
+ if (entry->d_type == DT_REG) /* If the entry is a regular file */
+#endif
count++;
- }
+
}
closedir(dirp);
return count;
diff --git a/windows.c b/windows.c
index 731ef2448..cd1acf368 100644
--- a/windows.c
+++ b/windows.c
@@ -14,7 +14,8 @@ const char *system_default_filename(void)
char *buffer;
int len;
- user = g_get_user_name();
+ /* I don't think this works on Windows */
+ user = getenv("LOGNAME");
if (! SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, datapath))) {
datapath[0] = '.';
datapath[1] = '\0';
@@ -29,14 +30,14 @@ const char *system_default_filename(void)
extern int __wgetmainargs(int *, wchar_t ***, wchar_t ***, int, int *);
/* expand-convert the UTF-16 argument list to a list of UTF-8 strings */
-void subsurface_command_line_init(gint *argc, gchar ***argv)
+void subsurface_command_line_init(int *argc, char ***argv)
{
wchar_t **wargv, **wenviron, *p, path[MAX_PATH] = {0};
- gchar **argv_new;
- gchar *s;
+ char **argv_new;
+ char *s;
/* for si we assume that a struct address will equal the address
* of its first and only int member */
- gint i, n, ret, si;
+ int i, n, ret, si;
/* change the current process path to the module path, so that we can
* access relative folders such as ./share and ./xslt */
@@ -51,23 +52,25 @@ void subsurface_command_line_init(gint *argc, gchar ***argv)
* lifespan as the process heap. */
ret = __wgetmainargs(&n, &wargv, &wenviron, TRUE, &si);
if (ret < 0) {
- g_warning("Cannot convert command line");
+ fprintf(stderr, "Cannot convert command line");
return;
}
- argv_new = g_malloc(sizeof(gchar *) * (n + 1));
+ argv_new = malloc(sizeof(char *) * (n + 1));
+#if MISSING_GLIB_FUNCTIONS
for (i = 0; i < n; ++i) {
s = g_utf16_to_utf8((gunichar2 *)wargv[i], -1, NULL, NULL, NULL);
if (!s) {
- g_warning("Cannot convert command line argument (%d) to UTF-8", (i + 1));
+ fprintf(stderr, "Cannot convert command line argument (%d) to UTF-8", (i + 1));
s = "\0";
- } else if (!g_utf8_validate(s, -1, NULL)) {
- g_warning("Cannot validate command line argument '%s' (%d)", s, (i + 1));
- g_free(s);
+ } else if (!g_utf8_validate(s, -1, NULL)) {
+ fprintf(stderr,"Cannot validate command line argument '%s' (%d)", s, (i + 1));
+ free(s);
s = "\0";
}
argv_new[i] = s;
}
+#endif
argv_new[n] = NULL;
/* update the argument list and count */
@@ -78,12 +81,12 @@ void subsurface_command_line_init(gint *argc, gchar ***argv)
}
/* once done, free the argument list */
-void subsurface_command_line_exit(gint *argc, gchar ***argv)
+void subsurface_command_line_exit(int *argc, char ***argv)
{
int i;
for (i = 0; i < *argc; i++)
- g_free((*argv)[i]);
- g_free(*argv);
+ free((*argv)[i]);
+ free(*argv);
}
/* check if we are running a newer OS version */