Much of the credit goes to Michael Zenov.
[ "$cpu" != "" ] && echo "TARGETCPU=-mcpu=$cpu"
echo "OPTIMISATIONS=-O2 -pipe -fomit-frame-pointer"
- echo "CFLAGS+=-Wall -fPIC -DPIC \$(TARGETARCH) \$(TARGETCPU) \$(OPTIMISATIONS) \$(MMX_FLAGS) \$(SSE_FLAGS) \$(SSE2_FLAGS) \$(DEBUG_FLAGS) \$(LARGE_FILE)"
+ echo "CFLAGS+=-Wall -DPIC \$(TARGETARCH) \$(TARGETCPU) \$(OPTIMISATIONS) \$(MMX_FLAGS) \$(SSE_FLAGS) \$(SSE2_FLAGS) \$(DEBUG_FLAGS) \$(LARGE_FILE)"
case $targetos in
Darwin)
sysctl -a hw | grep "x86_64: 1" > /dev/null && echo "ARCH_X86_64=1" && echo "CFLAGS+=-DARCH_X86_64"
- echo "CFLAGS+=-D__DARWIN__ `sdl-config --cflags`"
+ echo "CFLAGS+=-fPIC -D__DARWIN__ `sdl-config --cflags`"
echo "SHFLAGS=-dynamiclib"
echo "LDFLAGS+=`sdl-config --libs`"
;;
Linux)
[ "$(uname -m)" = "x86_64" ] && echo "ARCH_X86_64=1" && echo "CFLAGS+=-DARCH_X86_64"
echo "OPTIMISATIONS+=-ffast-math"
- echo "CFLAGS+=-pthread"
+ echo "CFLAGS+=-fPIC -pthread"
echo "SHFLAGS=-shared"
echo "LIBDL=-ldl"
echo "RDYNAMIC=-rdynamic"
FreeBSD)
[ "$(uname -m)" = "x86_64" ] && echo "ARCH_X86_64=1" && echo "CFLAGS+=-DARCH_X86_64"
echo "OPTIMISATIONS+=-ffast-math"
- echo "CFLAGS+=-pthread"
+ echo "CFLAGS+=-fPIC -pthread"
echo "SHFLAGS=-shared"
echo "RDYNAMIC=-rdynamic"
echo "LDFLAGS+=-Wl,--no-undefined -Wl,--as-needed"
echo "RDYNAMIC=-rdynamic"
echo "LDFLAGS+=-Wl,--no-undefined -Wl,--as-needed"
;;
+ MinGW)
+ [ "$(uname -m)" = "x86_64" ] && echo "ARCH_X86_64=1" && echo "CFLAGS+=-DARCH_X86_64"
+ echo "OPTIMISATIONS+=-ffast-math"
+ echo "SHFLAGS=-shared"
+ echo "LIBDL=-ldl"
+ echo "RDYNAMIC="
+ echo "LDFLAGS+=-Wl,--no-undefined -Wl,--as-needed"
+ ;;
*)
;;
esac
Linux|FreeBSD|NetBSD)
LIBSUF=".so"
;;
+ MINGW32_NT-*)
+ targetos="MinGW"
+ LIBSUF=".dll"
+ ;;
*)
LIBSUF=".so"
;;
NAME = libmlt$(LIBSUF)
TARGET = $(NAME).$(version)
-ifneq ($(targetos), Darwin)
-NAME = libmlt$(LIBSUF)
-TARGET = $(NAME).$(version)
-SONAME = $(NAME).$(soversion)
-SHFLAGS += -Wl,-soname,$(SONAME)
-else
+ifeq ($(targetos), Darwin)
NAME = libmlt$(LIBSUF)
TARGET = libmlt.$(version)$(LIBSUF)
SONAME = libmlt.$(soversion)$(LIBSUF)
SHFLAGS += -install_name $(libdir)/$(SONAME) -current_version $(version) -compatibility_version $(soversion)
+else ifeq ($(targetos), MinGW)
+NAME = libmlt$(LIBSUF)
+TARGET = libmlt-$(soversion)$(LIBSUF)
+libdir = $(prefix)
+else
+NAME = libmlt$(LIBSUF)
+TARGET = $(NAME).$(version)
+SONAME = $(NAME).$(soversion)
+SHFLAGS += -Wl,-soname,$(SONAME)
endif
OBJS = mlt_frame.o \
$(TARGET): $(OBJS)
$(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
ln -sf $(TARGET) $(NAME)
- ln -sf $(TARGET) $(SONAME)
+ if [ "$(targetos)" != "MinGW" ]; then \
+ ln -sf $(TARGET) $(SONAME) ; \
+ fi
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
install:
install -d $(DESTDIR)$(libdir)
install -m 755 $(TARGET) $(DESTDIR)$(libdir)
- ln -sf $(TARGET) $(DESTDIR)$(libdir)/$(SONAME)
- ln -sf $(TARGET) $(DESTDIR)$(libdir)/$(NAME)
+ if [ "$(targetos)" != "MinGW" ]; then \
+ ln -sf $(TARGET) $(DESTDIR)$(libdir)/$(SONAME) ; \
+ ln -sf $(TARGET) $(DESTDIR)$(libdir)/$(NAME) ; \
+ fi
install -d "$(DESTDIR)$(prefix)/include/mlt/framework"
install -m 644 $(INCS) "$(DESTDIR)$(prefix)/include/mlt/framework"
install -d "$(DESTDIR)$(datadir)/mlt"
uninstall:
rm -f "$(DESTDIR)$(libdir)/$(TARGET)"
- rm -f "$(DESTDIR)$(libdir)/$(SONAME)"
- rm -f "$(DESTDIR)$(libdir)/$(NAME)"
+ if [ "$(targetos)" != "MinGW" ]; then \
+ rm -f "$(DESTDIR)$(libdir)/$(SONAME)" ; \
+ rm -f "$(DESTDIR)$(libdir)/$(NAME)" ; \
+ fi
rm -rf "$(DESTDIR)$(prefix)/include/mlt/framework"
rm -f "$(DESTDIR)$(datadir)/mlt/metaschema.yaml"
SRCS := $(OBJS:.o=.c)
+ifeq ($(targetos), MinGW)
+OBJS += ../win32/win32.o
+SRCS += ../win32/win32.c
+bindir = $(prefix)
+endif
+
all: $(TARGET)
$(TARGET): $(OBJS)
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
+#ifndef WIN32
#include <termios.h>
+#endif
#include <unistd.h>
#include <sys/time.h>
void term_exit(void)
{
+#ifndef WIN32
if ( mode == 1 )
{
tcsetattr( 0, TCSANOW, &oldtty );
mode = 0;
}
+#endif
}
/** Init terminal so that we can grab keys without blocking.
void term_init( )
{
+#ifndef WIN32
struct termios tty;
tcgetattr( 0, &tty );
mode = 1;
atexit( term_exit );
+#endif
}
/** Check for a keypress without blocking infinitely.
int term_read( )
{
+#ifndef WIN32
int n = 1;
unsigned char ch;
struct timeval tv;
return ch;
return n;
}
+#endif
return -1;
}
include config.mak
INSTALL = install
-ifneq ($(targetos), Darwin)
-NAME = libmlt++$(LIBSUF)
-TARGET = $(NAME).$(version)
-SONAME = $(NAME).$(soversion)
-LIBFLAGS += -Wl,-soname,$(SONAME)
-else
+ifeq ($(targetos), Darwin)
NAME = libmlt++$(LIBSUF)
TARGET = libmlt++.$(version)$(LIBSUF)
SONAME = libmlt++.$(soversion)$(LIBSUF)
LIBFLAGS += -install_name $(libdir)/$(SONAME) -current_version $(version) -compatibility_version $(soversion)
+else ifeq ($(targetos), MinGW)
+NAME = libmlt++$(LIBSUF)
+TARGET = libmlt++-$(soversion)$(LIBSUF)
+libdir = $(prefix)
+else
+NAME = libmlt++$(LIBSUF)
+TARGET = $(NAME).$(version)
+SONAME = $(NAME).$(soversion)
+LIBFLAGS += -Wl,-soname,$(SONAME)
endif
CXXFLAGS += -I.. $(RDYNAMIC) -DVERSION=\"$(version)\"
$(TARGET): $(OBJS)
$(CXX) $(LIBFLAGS) -o $@ $(OBJS) $(LDFLAGS)
ln -sf $(TARGET) $(NAME)
- ln -sf $(TARGET) $(SONAME)
+ if [ "$(targetos)" != "MinGW" ]; then \
+ ln -sf $(TARGET) $(SONAME) ; \
+ fi
depend: $(SRCS)
$(CXX) -MM $(CXXFLAGS) $^ 1>.depend
install:
$(INSTALL) -d "$(DESTDIR)$(libdir)"
$(INSTALL) -m 755 $(TARGET) $(DESTDIR)$(libdir)
- ln -sf $(TARGET) $(DESTDIR)$(libdir)/$(NAME)
- ln -sf $(TARGET) $(DESTDIR)$(libdir)/$(SONAME)
+ if [ "$(targetos)" != "MinGW" ]; then \
+ ln -sf $(TARGET) $(DESTDIR)$(libdir)/$(NAME) ; \
+ ln -sf $(TARGET) $(DESTDIR)$(libdir)/$(SONAME) ; \
+ fi
$(INSTALL) -d "$(DESTDIR)$(prefix)/include/mlt++"
$(INSTALL) -m 644 $(HEADERS) "$(DESTDIR)$(prefix)/include/mlt++"
uninstall:
rm -f "$(DESTDIR)$(libdir)/$(TARGET)"
- rm -f "$(DESTDIR)$(libdir)/$(NAME)"
- rm -f "$(DESTDIR)$(libdir)/$(SONAME)"
+ if [ "$(targetos)" != "MinGW" ]; then \
+ rm -f "$(DESTDIR)$(libdir)/$(NAME)" ; \
+ rm -f "$(DESTDIR)$(libdir)/$(SONAME)" ; \
+ fi
rm -rf "$(DESTDIR)$(prefix)/include/mlt++"
ifneq ($(wildcard .depend),)
return new Consumer( profile, id, arg );
}
-#ifdef WIN32
-char *Factory::getenv( const char *name )
-{
- return mlt_getenv( name );
-}
-
-int Factory::setenv( const char *name, const char *value )
-{
- return mlt_setenv( name, value );
-}
-#endif
-
void Factory::close( )
{
mlt_factory_close( );
static Filter *filter( Profile& profile, char *id, char *arg = NULL );
static Transition *transition( Profile& profile, char *id, char *arg = NULL );
static Consumer *consumer( Profile& profile, char *id, char *arg = NULL );
-#ifdef WIN32
- static char *getenv( const char * );
- static int setenv( const char *, const char * );
-#endif
static void close( );
};
}
#ifndef MLTPP_CONFIG_H_
#define MLTPP_CONFIG_H_
-#ifdef WIN32
+#if defined(WIN32) && defined(_MSC_VER)
#ifdef MLTPP_EXPORTS
#define MLTPP_DECLSPEC __declspec( dllexport )
#else
WARNINGS="-W -Wwrite-strings -Wcast-qual -Wpointer-arith -Wcast-align -Wredundant-decls"
-targetos=$(uname -s)
case $targetos in
Darwin)
echo LIBSUF=.dylib
echo "CXXFLAGS+=-Wall $WARNINGS -fPIC -DPIC"
echo "LIBFLAGS=-shared"
;;
+ MinGW)
+ echo LIBSUF=.dll
+ echo "CXXFLAGS+=-Wall $WARNINGS -DPIC"
+ echo "LIBFLAGS=-enable-auto-import -shared"
+ ;;
esac >> config.mak
SRCS := $(OBJS:.o=.c)
+ifeq ($(targetos), MinGW)
+OBJS += ../../win32/win32.o
+SRCS += ../../win32/win32.c
+endif
+
all: $(TARGET)
$(LOCAL_FFMPEG_OBJS):
SRCS := $(OBJS:.o=.c)
+ifeq ($(targetos), MinGW)
+CFLAGS += -I../../win32
+OBJS += ../../win32/fnmatch.o
+SRCS += ../../win32/fnmatch.c
+endif
+
all: $(TARGET)
$(TARGET): $(OBJS) $(ASM_OBJS)
mlt_producer result = NULL;
// 1st Line - check for service:resource handling
- if ( strchr( file, ':' ) )
+ // And ignore drive letters on Win32 - no single char services supported.
+ if ( strchr( file, ':' ) > file + 1 )
{
char *temp = strdup( file );
char *service = temp;
if [ "$help" != "1" ]
then
- if [ "$targetos" = "Darwin" ]
+ if [ "$targetos" = "Darwin" ] || [ "$targetos" = "MinGW" ]
then
- echo "- does not build on Darwin: disabling"
+ echo "- does not build on Darwin or Windows: disabling"
touch ../disable-kino
exit 0
fi
include ../../../config.mak
-TARGET = ../libmltmotion_est.so
+TARGET = ../libmltmotion_est.$(LIBSUF)
OBJS = factory.o \
filter_motion_est.o \
ifeq ($(targetos),Darwin)
CFLAGS += -ObjC
LDFLAGS += -lobjc -framework Foundation
-else
+else ifeq ($(targetos), Linux|FreeBSD)
LDFLAGS += -lX11
endif
SRCS += consumer_sdl_osx.m consumer_sdl_osx.h
endif
+ifeq ($(targetos), MinGW)
+OBJS += ../../win32/win32.o
+SRCS += ../../win32/win32.c
+endif
+
all: $(TARGET)
$(TARGET): $(OBJS)
// Kill the thread and clean up
this->joined = 1;
this->running = 0;
+#ifndef WIN32
if ( this->thread )
+#endif
pthread_join( this->thread, NULL );
// internal cleanup
// Get the wm structure
if ( SDL_GetWMInfo( &wm ) == 1 )
{
+#ifndef WIN32
// Check that we have the X11 wm
if ( wm.subsystem == SDL_SYSWM_X11 )
{
*width = attr.width;
*height = attr.height;
}
+#endif
}
#endif
pthread_mutex_unlock( &this->refresh_mutex );
// Cleanup the main thread
+#ifndef WIN32
if ( this->thread )
+#endif
pthread_join( this->thread, NULL );
// Unlatch the audio callback
pthread_mutex_lock( &this->refresh_mutex );
pthread_cond_broadcast( &this->refresh_cond );
pthread_mutex_unlock( &this->refresh_mutex );
+#ifndef WIN32
if ( this->thread )
+#endif
pthread_join( this->thread, NULL );
this->joined = 1;
// Specify the SDL Version
SDL_VERSION( &wm.version );
+#ifndef __DARWIN__
// Get the wm structure
if ( SDL_GetWMInfo( &wm ) == 1 )
{
-#ifndef __DARWIN__
+#ifndef WIN32
// Check that we have the X11 wm
if ( wm.subsystem == SDL_SYSWM_X11 )
{
}
#endif
}
+#endif
return changed;
}
--- /dev/null
+/*
+ * Copyright (c) 1989, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Guido van Rossum.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * From FreeBSD fnmatch.c 1.11
+ * $Id$
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)fnmatch.c 8.2 (Berkeley) 4/16/94";
+#endif /* LIBC_SCCS and not lint */
+
+/*
+ * Function fnmatch() as specified in POSIX 1003.2-1992, section B.6.
+ * Compares a filename or pathname to a pattern.
+ */
+
+#include <ctype.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "fnmatch.h"
+
+#define EOS '\0'
+
+static const char *rangematch(const char *, char, int);
+
+int fnmatch(const char *pattern, const char *string, int flags)
+{
+ const char *stringstart;
+ char c, test;
+
+ for (stringstart = string;;)
+ switch (c = *pattern++) {
+ case EOS:
+ if ((flags & FNM_LEADING_DIR) && *string == '/')
+ return (0);
+ return (*string == EOS ? 0 : FNM_NOMATCH);
+ case '?':
+ if (*string == EOS)
+ return (FNM_NOMATCH);
+ if (*string == '/' && (flags & FNM_PATHNAME))
+ return (FNM_NOMATCH);
+ if (*string == '.' && (flags & FNM_PERIOD) &&
+ (string == stringstart ||
+ ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
+ return (FNM_NOMATCH);
+ ++string;
+ break;
+ case '*':
+ c = *pattern;
+ /* Collapse multiple stars. */
+ while (c == '*')
+ c = *++pattern;
+
+ if (*string == '.' && (flags & FNM_PERIOD) &&
+ (string == stringstart ||
+ ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
+ return (FNM_NOMATCH);
+
+ /* Optimize for pattern with * at end or before /. */
+ if (c == EOS)
+ if (flags & FNM_PATHNAME)
+ return ((flags & FNM_LEADING_DIR) ||
+ strchr(string, '/') == NULL ?
+ 0 : FNM_NOMATCH);
+ else
+ return (0);
+ else if (c == '/' && flags & FNM_PATHNAME) {
+ if ((string = strchr(string, '/')) == NULL)
+ return (FNM_NOMATCH);
+ break;
+ }
+
+ /* General case, use recursion. */
+ while ((test = *string) != EOS) {
+ if (!fnmatch(pattern, string, flags & ~FNM_PERIOD))
+ return (0);
+ if (test == '/' && flags & FNM_PATHNAME)
+ break;
+ ++string;
+ }
+ return (FNM_NOMATCH);
+ case '[':
+ if (*string == EOS)
+ return (FNM_NOMATCH);
+ if (*string == '/' && flags & FNM_PATHNAME)
+ return (FNM_NOMATCH);
+ if ((pattern =
+ rangematch(pattern, *string, flags)) == NULL)
+ return (FNM_NOMATCH);
+ ++string;
+ break;
+ case '\\':
+ if (!(flags & FNM_NOESCAPE)) {
+ if ((c = *pattern++) == EOS) {
+ c = '\\';
+ --pattern;
+ }
+ }
+ /* FALLTHROUGH */
+ default:
+ if (c == *string)
+ ;
+ else if ((flags & FNM_CASEFOLD) &&
+ (tolower((unsigned char)c) ==
+ tolower((unsigned char)*string)))
+ ;
+ else if ((flags & FNM_PREFIX_DIRS) && *string == EOS &&
+ (c == '/' && string != stringstart ||
+ string == stringstart+1 && *stringstart == '/') )
+ return (0);
+ else
+ return (FNM_NOMATCH);
+ string++;
+ break;
+ }
+ /* NOTREACHED */
+}
+
+static const char *
+rangematch(const char *pattern, char test, int flags)
+{
+ int negate, ok;
+ char c, c2;
+
+ /*
+ * A bracket expression starting with an unquoted circumflex
+ * character produces unspecified results (IEEE 1003.2-1992,
+ * 3.13.2). This implementation treats it like '!', for
+ * consistency with the regular expression syntax.
+ * J.T. Conklin (conklin@ngai.kaleida.com)
+ */
+ if ( (negate = (*pattern == '!' || *pattern == '^')) )
+ ++pattern;
+
+ if (flags & FNM_CASEFOLD)
+ test = tolower((unsigned char)test);
+
+ for (ok = 0; (c = *pattern++) != ']';) {
+ if (c == '\\' && !(flags & FNM_NOESCAPE))
+ c = *pattern++;
+ if (c == EOS)
+ return (NULL);
+
+ if (flags & FNM_CASEFOLD)
+ c = tolower((unsigned char)c);
+
+ if (*pattern == '-'
+ && (c2 = *(pattern+1)) != EOS && c2 != ']') {
+ pattern += 2;
+ if (c2 == '\\' && !(flags & FNM_NOESCAPE))
+ c2 = *pattern++;
+ if (c2 == EOS)
+ return (NULL);
+
+ if (flags & FNM_CASEFOLD)
+ c2 = tolower((unsigned char)c2);
+
+ if ((unsigned char)c <= (unsigned char)test &&
+ (unsigned char)test <= (unsigned char)c2)
+ ok = 1;
+ } else if (c == test)
+ ok = 1;
+ }
+ return (ok == negate ? NULL : pattern);
+}
--- /dev/null
+/*-
+ * Copyright (c) 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)fnmatch.h 8.1 (Berkeley) 6/2/93
+ *
+ * From FreeBSD fnmatch.h 1.7
+ * $Id$
+ */
+
+#ifndef _FNMATCH_H_
+#define _FNMATCH_H_
+
+
+#define FNM_NOMATCH 1 /* Match failed. */
+
+#define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */
+#define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */
+#define FNM_PERIOD 0x04 /* Period must be matched by period. */
+#define FNM_LEADING_DIR 0x08 /* Ignore /<tail> after Imatch. */
+#define FNM_CASEFOLD 0x10 /* Case insensitive search. */
+#define FNM_PREFIX_DIRS 0x20 /* Directory prefixes of pattern match too. */
+
+int fnmatch(const char *pattern, const char *string, int flags);
+
+#endif /* !_FNMATCH_H_ */
--- /dev/null
+
+#include <errno.h>
+#include <time.h>
+#include <windows.h>
+#include <pthread.h>
+
+int usleep(unsigned int useconds)
+{
+ HANDLE timer;
+ LARGE_INTEGER due;
+
+ due.QuadPart = -(10 * (__int64)useconds);
+
+ timer = CreateWaitableTimer(NULL, TRUE, NULL);
+ SetWaitableTimer(timer, &due, 0, NULL, NULL, 0);
+ WaitForSingleObject(timer, INFINITE);
+ CloseHandle(timer);
+ return 0;
+}
+
+
+int nanosleep( const struct timespec * rqtp, struct timespec * rmtp )
+{
+ if (rqtp->tv_nsec > 999999999) {
+ /* The time interval specified 1,000,000 or more microseconds. */
+ errno = EINVAL;
+ return -1;
+ }
+ return usleep( rqtp->tv_sec * 1000000 + rqtp->tv_nsec / 1000 );
+}
+
+int setenv(const char *name, const char *value, int overwrite)
+{
+ int result = 1;
+ if (overwrite == 0 && getenv (name)) {
+ result = 0;
+ } else {
+ result = SetEnvironmentVariable (name,value);
+ }
+
+ return result;
+}
+