From 266887d1e53a01eb062d289f6560305e7ba99d30 Mon Sep 17 00:00:00 2001 From: doursse Date: Sat, 8 Sep 2007 18:36:22 +0000 Subject: [PATCH] implement a symlink function for Windows SVN revision: 31658 --- legacy/edje/configure.in | 3 ++ legacy/edje/src/bin/Makefile.am | 6 ++-- legacy/edje/src/bin/edje_decc.c | 49 ++++++++++++++++++++++++++++++--- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/legacy/edje/configure.in b/legacy/edje/configure.in index 9b798d0771..82159e9f04 100644 --- a/legacy/edje/configure.in +++ b/legacy/edje/configure.in @@ -20,13 +20,16 @@ AM_PROG_LIBTOOL AC_FUNC_ALLOCA create_shared_lib="" +edje_decc_lib="" case "$host_os" in mingw|mingw32) create_shared_lib="-no-undefined " + edje_decc_lib="-lole32 -luuid" ;; esac AC_SUBST(create_shared_lib) +AC_SUBST(edje_decc_lib) AC_CHECK_FUNCS(realpath) diff --git a/legacy/edje/src/bin/Makefile.am b/legacy/edje/src/bin/Makefile.am index 194d258f4a..60268a23ae 100644 --- a/legacy/edje/src/bin/Makefile.am +++ b/legacy/edje/src/bin/Makefile.am @@ -1,13 +1,13 @@ ## Process this file with automake to produce Makefile.in -AM_CFLAGS = \ +INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/bin \ -I$(top_srcdir)/src/lib \ @EDJE_CFLAGS@ \ -DPACKAGE_BIN_DIR=\"@PACKAGE_BIN_DIR@\" \ -DPACKAGE_LIB_DIR=\"@PACKAGE_LIB_DIR@\" \ --DPACKAGE_DATA_DIR=\"@PACKAGE_DATA_DIR@\" +-DPACKAGE_DATA_DIR=\"@PACKAGE_DATA_DIR@\" bin_SCRIPTS = \ @EDJE_RECC_PRG@ @@ -48,6 +48,6 @@ edje_cc_mem.c \ edje_cc_sources.c edje_decc_LDADD = \ -$(top_builddir)/src/lib/libedje.la +$(top_builddir)/src/lib/libedje.la @edje_decc_lib@ edje_decc_DEPENDENCIES = $(top_builddir)/src/lib/libedje.la diff --git a/legacy/edje/src/bin/edje_decc.c b/legacy/edje/src/bin/edje_decc.c index cf0e36de27..e6c9bc29ed 100644 --- a/legacy/edje/src/bin/edje_decc.c +++ b/legacy/edje/src/bin/edje_decc.c @@ -10,6 +10,8 @@ #include #ifdef _WIN32 # include +# include +# include #endif /* _WIN32 */ char *progname = NULL; @@ -40,6 +42,49 @@ main_help(void) ,progname); } +#ifdef _WIN32 +int +symlink (const char *oldpath, const char newpath) +{ + IShellLink *pISL; + IPersistFile *pIPF; + + if (FAILED(CoInitialize(NULL))) + return 0; + + if (FAILED(CoCreateInstance(&CLSID_ShellLink, + NULL, + CLSCTX_INPROC_SERVER, + &IID_IShellLink, + (PVOID *)&pISL))) + goto no_instance; + + if (FAILED(pISL->lpVtbl->SetPath(pISL, oldpath))) + goto no_setpath; + + if (FAILED(pISL->lpVtbl->QueryInterface(pISL, &IID_IPersistFile, (PVOID *) &pIPF))) + goto no_queryinterface; + + if (FAILED(pIPF->lpVtbl->Save(pIPF, newpath, FALSE))) + goto no_save; + + pIPF->lpVtbl->Release(pIPF); + pISL->lpVtbl->Release(pISL); + CoUninitialize(); + + return 1; + + no_save: + pIPF->lpVtbl->Release(pIPF); + no_queryinterface: + no_setpath: + pISL->lpVtbl->Release(pISL); + no_instance: + CoUninitialize(); + return 0; +} +#endif /* _WIN32 */ + int main(int argc, char **argv) { @@ -301,11 +346,7 @@ output(void) if (file_out) { snprintf(out, sizeof(out), "%s/%s", outdir, file_out); -#ifdef _WIN32 - CopyFile(sf->name, out, TRUE); -#else symlink(sf->name, out); -#endif /* _WIN32 */ } #ifndef _WIN32