echo "TARGETARCH=-march=$cpu" &&
echo "TARGETCPU=-mcpu=$cpu"
- [ "`uname`" = "Linux" ] &&
- echo "LIBDL=-ldl"
-
echo "OPTIMISATIONS=-O4 -pipe -ffast-math -fomit-frame-pointer"
- echo "CFLAGS+=-Wall -fPIC -DPIC \$(TARGETARCH) \$(TARGETCPU) \$(OPTIMISATIONS) \$(MMX_FLAGS) \$(DEBUG_FLAGS) \$(LARGE_FILE) -pthread"
+ echo "CFLAGS+=-Wall -fPIC -DPIC \$(TARGETARCH) \$(TARGETCPU) \$(OPTIMISATIONS) \$(MMX_FLAGS) \$(DEBUG_FLAGS) \$(LARGE_FILE)"
+
+ case $targetos in
+ Darwin)
+ echo "CFLAGS+=-DDARWIN"
+ echo "SHFLAGS=-dynamiclib"
+ ;;
+ Linux)
+ echo "CFLAGS+=-pthread"
+ echo "SHFLAGS=-shared"
+ echo "LIBDL=-ldl"
+ echo "RDYNAMIC=-rdynamic"
+ ;;
+ *)
+ ;;
+ esac
+ echo "LIBSUF=$LIBSUF"
) > config.mak
echo "#!/bin/sh" > mlt-config
export gpl=false
export cpu=
+# Determine OS
+targetos=$(uname -s)
+# Chose appropriate suffix for libraries
+case $targetos in
+ Darwin)
+ LIBSUF=".dylib"
+ ;;
+ Linux)
+ LIBSUF=".so"
+ ;;
+ *)
+ LIBSUF=".so"
+ ;;
+esac
+export LIBSUF
+
# Iterate through arguments
for i in "$@"
do
`pwd`/../sr_sdk_release:\
$LD_LIBRARY_PATH
+[ $(uname -s) = Darwin ] && export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH
+
export PATH=\
`pwd`/src/albino:\
`pwd`/src/inigo:\
OBJS = albino.o
-CFLAGS += -I.. -rdynamic
+CFLAGS += -I.. $(RDYNAMIC)
LDFLAGS += -L../miracle -lmiracle -L../valerie -lvalerie -L../miracle -lmiracle -L../framework -lmlt
// Use realtime scheduling if possible
memset( &scp, '\0', sizeof( scp ) );
scp.sched_priority = sched_get_priority_max( SCHED_FIFO ) - 1;
+#ifndef DARWIN
sched_setscheduler( 0, SCHED_FIFO, &scp );
+#endif
printf( "Miracle Standalone Instance\n" );
parser = miracle_parser_init_local( );
include ../../config.mak
-TARGET = libmlt.so
+TARGET = libmlt$(LIBSUF)
OBJS = mlt_frame.o \
mlt_geometry.o \
SRCS := $(OBJS:.o=.c)
-CFLAGS += -rdynamic -DPREFIX="\"$(prefix)\""
+CFLAGS += $(RDYNAMIC) -DPREFIX="\"$(prefix)\""
LDFLAGS += -lm $(LIBDL) -lpthread
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
rm -f $(OBJS) $(TARGET)
install:
- install -m 755 $(TARGET) $(prefix)/lib/libmlt.so
+ install -m 755 $(TARGET) $(prefix)/lib/libmlt$(LIBSUF)
install -d "$(prefix)/include/mlt/framework"
install -m 644 $(INCS) "$(prefix)/include/mlt/framework"
io.o \
remote.o
-CFLAGS += -I.. -rdynamic
+CFLAGS += -I.. $(RDYNAMIC)
-LDFLAGS += -L ../valerie -L ../framework -lvalerie -lmlt
+LDFLAGS += -L../valerie -L../framework -lvalerie -lmlt
SRCS := $(OBJS:.o=.c)
#include <ctype.h>
#include <termios.h>
#include <unistd.h>
+#include <sys/time.h>
/* Application header files */
#include "io.h"
OBJS = inigo.o \
io.o
-CFLAGS += -I.. -rdynamic
+CFLAGS += -I.. $(RDYNAMIC)
-LDFLAGS += -L ../framework -lmlt
+LDFLAGS += -L../framework -lmlt
SRCS := $(OBJS:.o=.c)
// Use realtime scheduling if possible
memset( &scp, '\0', sizeof( scp ) );
scp.sched_priority = sched_get_priority_max( SCHED_FIFO ) - 1;
+#ifndef DARWIN
sched_setscheduler( 0, SCHED_FIFO, &scp );
+#endif
// Construct the factory
mlt_factory_init( NULL );
#include <ctype.h>
#include <termios.h>
#include <unistd.h>
+#include <sys/time.h>
/* Application header files */
#include "io.h"
OBJS = $(APP_OBJS) $(LIB_OBJS)
-CFLAGS += -I.. -rdynamic
+CFLAGS += -I.. $(RDYNAMIC)
-LDFLAGS += -L ../valerie -lvalerie -L ../framework -lmlt
+LDFLAGS += -L../valerie -lvalerie -L../framework -lmlt
SRCS := $(OBJS:.o=.c)
all: $(TARGET)
-$(TARGET): $(APP_OBJS) libmiracle.so
+$(TARGET): $(APP_OBJS) libmiracle$(LIBSUF)
$(CC) -o $@ $(APP_OBJS) -L. -lmiracle $(LDFLAGS)
-libmiracle.so: $(LIB_OBJS)
- $(CC) -shared -o $@ $(LIB_OBJS) $(LDFLAGS)
+libmiracle$(LIBSUF): $(LIB_OBJS)
+ $(CC) $(SHFLAGS) -o $@ $(LIB_OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
rm -f .depend
clean:
- rm -f $(OBJS) $(TARGET) libmiracle.so
+ rm -f $(OBJS) $(TARGET) libmiracle$(LIBSUF)
install: all
install -d "$(bindir)"
install -c -s -m 755 $(TARGET) "$(bindir)"
- install -m 755 libmiracle.so $(prefix)/lib/libmiracle.so
+ install -m 755 libmiracle$(LIBSUF) $(prefix)/lib/libmiracle$(LIBSUF)
mkdir -p "$(prefix)/include/mlt/miracle"
install -m 644 $(INCS) "$(prefix)/include/mlt/miracle"
// Use realtime scheduling if possible
memset( &scp, '\0', sizeof( scp ) );
scp.sched_priority = sched_get_priority_max( SCHED_FIFO ) - 1;
+#ifndef DARWIN
sched_setscheduler( 0, SCHED_FIFO, &scp );
+#endif
mlt_factory_init( NULL );
include ../../../config.mak
include config.mak
-TARGET = ../libmltavformat.so
+TARGET = ../libmltavformat$(LIBSUF)
OBJS = factory.o \
producer_avformat.o \
$(TARGET): $(OBJS)
if [ $(LOCAL_FFMPEG) ] ; then \
$(MAKE) -C ffmpeg all ; \
- cp -f ffmpeg/libavcodec/libavcodec.so ../../framework/libmltavcodec.so ; \
- cp -f ffmpeg/libavformat/libavformat.so ../../framework/libmltavformat.so ; \
+ cp -f ffmpeg/libavcodec/libavcodec$(LIBSUF) ../../framework/libmltavcodec$(LIBSUF) ; \
+ cp -f ffmpeg/libavformat/libavformat$(LIBSUF) ../../framework/libmltavformat$(LIBSUF) ; \
fi
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
if [ $(LOCAL_FFMPEG) ] ; then $(MAKE) -C ffmpeg dep ; fi
install: all
install -m 755 $(TARGET) "$(prefix)/share/mlt/modules"
if [ $(LOCAL_FFMPEG) ] ; then \
- install -m 755 ../../framework/libmltavcodec.so "$(prefix)/share/mlt/modules" ; \
- install -m 755 ../../framework/libmltavformat.so "$(prefix)/share/mlt/modules" ; \
+ install -m 755 ../../framework/libmltavcodec.$(LIBSUF) "$(prefix)/share/mlt/modules" ; \
+ install -m 755 ../../framework/libmltavformat.$(LIBSUF) "$(prefix)/share/mlt/modules" ; \
fi
ifneq ($(wildcard .depend),)
#!/bin/sh
+
if [ "$help" = "1" ]
then
cat << EOF
EOF
else
+ targetos=$(uname -s)
+ case $targetos in
+ Darwin)
+ export LIBSUF=.dylib
+ ;;
+ Linux)
+ export LIBSUF=.so
+ ;;
+ *)
+ ;;
+ esac
+
echo > config.mak
export static_ffmpeg=
then
echo "CFLAGS+=-I$static_ffmpeg/libavformat -I$static_ffmpeg/libavcodec" >> config.mak
echo "LDFLAGS+=-L$static_ffmpeg/libavformat -L$static_ffmpeg/libavcodec" >> config.mak
+ [ $targetos = "Darwin" ] &&
+ echo "LDFLAGS+=-single_module" >> config.mak
else
echo "avformat: Invalid path specified: $static_ffmpeg"
touch ../disable-avformat
echo "EXTRA_LIBS=$extra_libs" >> config.mak
cat << EOF >> ../producers.dat
-avformat libmltavformat.so
+avformat libmltavformat$LIBSUF
EOF
cat << EOF >> ../filters.dat
-avdeinterlace libmltavformat.so
-avresample libmltavformat.so
-avcolour_space libmltavformat.so
+avdeinterlace libmltavformat$LIBSUF
+avresample libmltavformat$LIBSUF
+avcolour_space libmltavformat$LIBSUF
EOF
cat << EOF >> ../consumers.dat
-avformat libmltavformat.so
+avformat libmltavformat$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltcore.so
+TARGET = ../libmltcore$(LIBSUF)
OBJS = factory.o \
producer_colour.o \
all: $(TARGET)
$(TARGET): $(OBJS) $(ASM_OBJS)
- $(CC) -shared -o $@ $(OBJS) $(ASM_OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(ASM_OBJS) $(LDFLAGS)
composite_line_yuv_mmx.o: composite_line_yuv_mmx.S
$(CC) -o $@ -c composite_line_yuv_mmx.S
then
cat << EOF >> ../producers.dat
-colour libmltcore.so
-noise libmltcore.so
-ppm libmltcore.so
+colour libmltcore$LIBSUF
+noise libmltcore$LIBSUF
+ppm libmltcore$LIBSUF
EOF
cat << EOF >> ../filters.dat
-brightness libmltcore.so
-channelcopy libmltcore.so
-data_feed libmltcore.so
-data_show libmltcore.so
-gamma libmltcore.so
-greyscale libmltcore.so
-luma libmltcore.so
-mirror libmltcore.so
-obscure libmltcore.so
-region libmltcore.so
-rescale libmltcore.so
-resize libmltcore.so
-watermark libmltcore.so
+brightness libmltcore$LIBSUF
+channelcopy libmltcore$LIBSUF
+data_feed libmltcore$LIBSUF
+data_show libmltcore$LIBSUF
+gamma libmltcore$LIBSUF
+greyscale libmltcore$LIBSUF
+luma libmltcore$LIBSUF
+mirror libmltcore$LIBSUF
+obscure libmltcore$LIBSUF
+region libmltcore$LIBSUF
+rescale libmltcore$LIBSUF
+resize libmltcore$LIBSUF
+watermark libmltcore$LIBSUF
EOF
cat << EOF >> ../transitions.dat
-composite libmltcore.so
-luma libmltcore.so
-mix libmltcore.so
-region libmltcore.so
+composite libmltcore$LIBSUF
+luma libmltcore$LIBSUF
+mix libmltcore$LIBSUF
+region libmltcore$LIBSUF
EOF
cat << EOF >> ../consumers.dat
-null libmltcore.so
+null libmltcore$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltdv.so
+TARGET = ../libmltdv$(LIBSUF)
OBJS = factory.o \
producer_libdv.o \
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../producers.dat
-libdv libmltdv.so
+libdv libmltdv$LIBSUF
EOF
cat << EOF >> ../consumers.dat
-libdv libmltdv.so
+libdv libmltdv$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltfezzik.so
+TARGET = ../libmltfezzik$(LIBSUF)
OBJS = factory.o \
producer_fezzik.o \
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../producers.dat
-fezzik libmltfezzik.so
-hold libmltfezzik.so
+fezzik libmltfezzik$LIBSUF
+hold libmltfezzik$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltgtk2.so
+TARGET = ../libmltgtk2$(LIBSUF)
OBJS = factory.o \
consumer_gtk2.o \
all: $(TARGET)
$(TARGET): $(OBJS) $(ASM_OBJS)
- $(CC) -shared -o $@ $(OBJS) $(ASM_OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(ASM_OBJS) $(LDFLAGS)
have_mmx.o:
$(CC) -o $@ -c have_mmx.S
then
cat << EOF >> ../producers.dat
-pixbuf libmltgtk2.so
-pango libmltgtk2.so
+pixbuf libmltgtk2$LIBSUF
+pango libmltgtk2$LIBSUF
EOF
cat << EOF >> ../filters.dat
-gtkrescale libmltgtk2.so
+gtkrescale libmltgtk2$LIBSUF
EOF
cat << EOF >> ../consumers.dat
-gtk2_preview libmltgtk2.so
+gtk2_preview libmltgtk2$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltinigo.so
+TARGET = ../libmltinigo$(LIBSUF)
OBJS = factory.o \
producer_inigo.o
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../producers.dat
-inigo libmltinigo.so
-inigo_file libmltinigo.so
+inigo libmltinigo$LIBSUF
+inigo_file libmltinigo$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltjackrack.so
+TARGET = ../libmltjackrack$(LIBSUF)
OBJS = factory.o \
jack_rack.o \
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../filters.dat
-jackrack libmltjackrack.so
+jackrack libmltjackrack$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltnormalize.so
+TARGET = ../libmltnormalize$(LIBSUF)
OBJS = factory.o \
filter_volume.o
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../filters.dat
-volume libmltnormalize.so
+volume libmltnormalize$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltplus.so
+TARGET = ../libmltplus$(LIBSUF)
OBJS = factory.o \
filter_affine.o \
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
EOF
cat << EOF >> ../filters.dat
-affine libmltplus.so
-charcoal libmltplus.so
-invert libmltplus.so
-sepia libmltplus.so
+affine libmltplus$LIBSUF
+charcoal libmltplus$LIBSUF
+invert libmltplus$LIBSUF
+sepia libmltplus$LIBSUF
EOF
cat << EOF >> ../transitions.dat
-affine libmltplus.so
+affine libmltplus$LIBSUF
EOF
cat << EOF >> ../consumers.dat
include ../../../config.mak
-TARGET = ../libmltresample.so
+TARGET = ../libmltresample$(LIBSUF)
OBJS = factory.o \
filter_resample.o
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../filters.dat
-resample libmltresample.so
+resample libmltresample$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltsdl.so
+TARGET = ../libmltsdl$(LIBSUF)
OBJS = factory.o \
consumer_sdl.o \
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../consumers.dat
-sdl libmltsdl.so
-sdl_preview libmltsdl.so
-sdl_still libmltsdl.so
+sdl libmltsdl$LIBSUF
+sdl_preview libmltsdl$LIBSUF
+sdl_still libmltsdl$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltsox.so
+TARGET = ../libmltsox$(LIBSUF)
OBJS = factory.o \
filter_sox.o
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../filters.dat
-sox libmltsox.so
+sox libmltsox$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltvalerie.so
+TARGET = ../libmltvalerie$(LIBSUF)
OBJS = factory.o \
consumer_valerie.o
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../consumers.dat
-valerie libmltvalerie.so
+valerie libmltvalerie$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltvorbis.so
+TARGET = ../libmltvorbis$(LIBSUF)
OBJS = factory.o \
producer_vorbis.o
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../producers.dat
-vorbis libmltvorbis.so
+vorbis libmltvorbis$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltwestley.so
+TARGET = ../libmltwestley$(LIBSUF)
OBJS = factory.o \
consumer_westley.o \
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../producers.dat
-westley libmltwestley.so
-westley-xml libmltwestley.so
+westley libmltwestley$LIBSUF
+westley-xml libmltwestley$LIBSUF
EOF
cat << EOF >> ../consumers.dat
-westley libmltwestley.so
+westley libmltwestley$LIBSUF
EOF
fi
include ../../../config.mak
-TARGET = ../libmltxine.so
+TARGET = ../libmltxine$(LIBSUF)
OBJS = factory.o \
deinterlace.o \
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
then
cat << EOF >> ../filters.dat
-deinterlace libmltxine.so
+deinterlace libmltxine$LIBSUF
EOF
fi
TARGET = dan charlie pango pixbuf dissolve luma
-CFLAGS += -I.. -rdynamic
+CFLAGS += -I.. $(RDYNAMIC)
-LDFLAGS += -L ../framework -L ../modules -lmlt -lmltdv -lmltsdl
+LDFLAGS += -L../framework -L../modules -lmlt -lmltdv -lmltsdl
all: $(TARGET)
hello: hello.o
- $(CC) hello.o -o $@ -L ../framework -L ../modules -lmlt
+ $(CC) hello.o -o $@ -L../framework -L../modules -lmlt
pango: pango.o
$(CC) pango.o -o $@ $(LDFLAGS)
include ../../config.mak
-TARGET = libvalerie.so
+TARGET = libvalerie$(LIBSUF)
OBJS = valerie.o \
valerie_notifier.o \
SRCS := $(OBJS:.o=.c)
-CFLAGS += -I.. -rdynamic
-LDFLAGS += -L ../framework -lmlt -lpthread
+CFLAGS += -I.. $(RDYNAMIC)
+LDFLAGS += -L../framework -lmlt -lpthread
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) -shared -o $@ $(OBJS) $(LDFLAGS)
+ $(CC) $(SHFLAGS) -o $@ $(OBJS) $(LDFLAGS)
depend: $(SRCS)
$(CC) -MM $(CFLAGS) $^ 1>.depend
rm -f $(OBJS) $(TARGET)
install: all
- install -m 755 $(TARGET) $(prefix)/lib/libvalerie.so
+ install -m 755 $(TARGET) $(prefix)/lib/libvalerie$(LIBSUF)
mkdir -p "$(prefix)/include/mlt/valerie"
install -m 644 $(INCS) "$(prefix)/include/mlt/valerie"
#include <fcntl.h>
#include <errno.h>
#include <netinet/in.h>
+#include <sys/time.h>
/* Application header files */
#include "valerie_socket.h"