implement a symlink function for Windows
SVN revision: 31658
This commit is contained in:
parent
974152be16
commit
266887d1e5
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue