implement a symlink function for Windows

SVN revision: 31658
This commit is contained in:
doursse 2007-09-08 18:36:22 +00:00 committed by doursse
parent 974152be16
commit 266887d1e5
3 changed files with 51 additions and 7 deletions

View File

@ -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)

View File

@ -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

View File

@ -10,6 +10,8 @@
#include <unistd.h>
#ifdef _WIN32
# include <windows.h>
# include <shlobj.h>
# include <objidl.h>
#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