diff -buNr configure.org configure --- configure.org 2008-09-24 13:45:48.000000000 +0900 +++ configure 2008-09-28 12:04:34.000000000 +0900 @@ -234,6 +234,13 @@ LDFLAGS="$LDFLAGS -lm" HAVE_GETOPT_LONG=0 ;; + os2*) + SYS="OS2" + EXE=".exe" + DEVNULL="NUL" + CFLAGS="$CFLAGS -DHAVE_MALLOC_H" + LDFLAGS="$LDFLAGS -Zbin-files" + ;; *) echo "Unknown system $host, edit the configure" exit 1 @@ -249,6 +256,8 @@ ASFLAGS="$ASFLAGS -f macho -DPREFIX" elif [ "$SYS" = MINGW ]; then ASFLAGS="$ASFLAGS -f win32 -DPREFIX" + elif [ "$SYS" = OS2 ]; then + ASFLAGS="$ASFLAGS -f aout -DPREFIX" else ASFLAGS="$ASFLAGS -f elf" fi @@ -438,6 +447,7 @@ HAVE_GETOPT_LONG=$HAVE_GETOPT_LONG DEVNULL=$DEVNULL ECHON=$ECHON +INSTALL=${INSTALL-install} EOF $ECHON 'CONFIGURE_ARGS=' >> config.mak @@ -458,6 +468,12 @@ echo "SOSUFFIX=dylib" >> config.mak echo "SONAME=libx264.$API.dylib" >> config.mak echo 'SOFLAGS=-dynamiclib -Wl,-single_module -Wl,-read_only_relocs,suppress -install_name $(DESTDIR)$(libdir)/$(SONAME)' >> config.mak + elif [ "$SYS" = "OS2" ]; then + echo "SOSUFFIX=dll" >> config.mak + echo "SONAME=libx264.dll" >> config.mak + echo "SODEF=libx264.def" >> config.mak + echo "IMPLIBNAME=libx264_dll.a" >> config.mak + echo 'SOFLAGS=-Zdll $(SODEF)' >> config.mak else echo "SOSUFFIX=so" >> config.mak echo "SONAME=libx264.so.$API" >> config.mak diff -buNr Makefile.org Makefile --- Makefile.org 2008-09-24 13:45:48.000000000 +0900 +++ Makefile 2008-09-28 18:09:28.000000000 +0900 @@ -42,7 +42,7 @@ SRCS += common/x86/mc-c.c common/x86/predict-c.c OBJASM = $(ASMSRC:%.asm=%.o) $(OBJASM): common/x86/x86inc.asm common/x86/x86util.asm -checkasm: tools/checkasm-a.o +checkasm$(EXE): tools/checkasm-a.o endif endif @@ -78,6 +78,13 @@ ranlib libx264.a $(SONAME): .depend $(OBJS) $(OBJASM) +ifeq ($(SYS),OS2) + echo "LIBRARY $(SONAME:.$(SOSUFFIX)=)" > $(SODEF) + echo "DATA MULTIPLE NONSHARED" >> $(SODEF) + echo "EXPORTS" >> $(SODEF) + emxexp $(OBJS) $(OBJASM) >> $(SODEF) + emximp -o $(IMPLIBNAME) $(SODEF) +endif $(CC) -shared -o $@ $(OBJS) $(OBJASM) $(SOFLAGS) $(LDFLAGS) x264$(EXE): $(OBJCLI) libx264.a @@ -86,7 +93,7 @@ libx264gtk.a: muxers.o libx264.a $(MAKE) -C gtk -checkasm: tools/checkasm.o libx264.a +checkasm$(EXE): tools/checkasm.o libx264.a $(CC) -o $@ $+ $(LDFLAGS) %.o: %.asm @@ -138,8 +145,8 @@ endif clean: - rm -f $(OBJS) $(OBJASM) $(OBJCLI) $(SONAME) *.a x264 x264.exe .depend TAGS - rm -f checkasm checkasm.exe tools/checkasm.o + rm -f $(OBJS) $(OBJASM) $(OBJCLI) $(SONAME) $(SODEF) *.a x264 x264.exe .depend TAGS + rm -f checkasm checkasm.exe tools/checkasm.o tools/checkasm-a.o rm -f tools/avc2avi tools/avc2avi.exe tools/avc2avi.o rm -f $(SRC2:%.c=%.gcda) $(SRC2:%.c=%.gcno) - sed -e 's/ *-fprofile-\(generate\|use\)//g' config.mak > config.mak2 && mv config.mak2 config.mak @@ -151,20 +158,22 @@ $(MAKE) -C gtk distclean install: x264$(EXE) $(SONAME) - install -d $(DESTDIR)$(bindir) $(DESTDIR)$(includedir) - install -d $(DESTDIR)$(libdir) $(DESTDIR)$(libdir)/pkgconfig - install -m 644 x264.h $(DESTDIR)$(includedir) - install -m 644 libx264.a $(DESTDIR)$(libdir) - install -m 644 x264.pc $(DESTDIR)$(libdir)/pkgconfig - install x264$(EXE) $(DESTDIR)$(bindir) + $(INSTALL) -d $(DESTDIR)$(bindir) $(DESTDIR)$(includedir) + $(INSTALL) -d $(DESTDIR)$(libdir) $(DESTDIR)$(libdir)/pkgconfig + $(INSTALL) -m 644 x264.h $(DESTDIR)$(includedir) + $(INSTALL) -m 644 libx264.a $(DESTDIR)$(libdir) + $(INSTALL) -m 644 x264.pc $(DESTDIR)$(libdir)/pkgconfig + $(INSTALL) x264$(EXE) $(DESTDIR)$(bindir) ranlib $(DESTDIR)$(libdir)/libx264.a ifeq ($(SYS),MINGW) - $(if $(SONAME), install -m 755 $(SONAME) $(DESTDIR)$(bindir)) + $(if $(SONAME), $(INSTALL) -m 755 $(SONAME) $(DESTDIR)$(bindir)) else +ifneq ($(SYS),OS2) $(if $(SONAME), ln -sf $(SONAME) $(DESTDIR)$(libdir)/libx264.$(SOSUFFIX)) - $(if $(SONAME), install -m 755 $(SONAME) $(DESTDIR)$(libdir)) endif - $(if $(IMPLIBNAME), install -m 644 $(IMPLIBNAME) $(DESTDIR)$(libdir)) + $(if $(SONAME), $(INSTALL) -m 755 $(SONAME) $(DESTDIR)$(libdir)) +endif + $(if $(IMPLIBNAME), $(INSTALL) -m 644 $(IMPLIBNAME) $(DESTDIR)$(libdir)) install-gtk: libx264gtk.a $(MAKE) -C gtk install @@ -173,6 +182,7 @@ rm -f $(DESTDIR)$(includedir)/x264.h $(DESTDIR)$(libdir)/libx264.a rm -f $(DESTDIR)$(bindir)/x264 $(DESTDIR)$(libdir)/pkgconfig/x264.pc $(if $(SONAME), rm -f $(DESTDIR)$(libdir)/$(SONAME) $(DESTDIR)$(libdir)/libx264.$(SOSUFFIX)) + $(if $(IMPLIBNAME), rm -f $(DESTDIR)$(libdir)/$(IMPLIBNAME)) $(MAKE) -C gtk uninstall etags: TAGS diff -buNr x264.c.org x264.c --- x264.c.org 2008-09-24 13:45:48.000000000 +0900 +++ x264.c 2008-09-26 23:25:42.000000000 +0900 @@ -96,10 +96,8 @@ pthread_win32_thread_attach_np(); #endif -#ifdef _WIN32 - _setmode(_fileno(stdin), _O_BINARY); - _setmode(_fileno(stdout), _O_BINARY); -#endif + set_bin_mode(stdin); + set_bin_mode(stdout); x264_param_default( ¶m ); diff -buNr common/cpu.c.org common/cpu.c --- common/cpu.c.org 2008-09-24 13:45:48.000000000 +0900 +++ common/cpu.c 2008-09-28 12:10:42.000000000 +0900 @@ -32,6 +32,10 @@ #include #include #endif +#ifdef SYS_OS2 +#define INCL_DOS +#include +#endif #include "common.h" #include "cpu.h" @@ -291,6 +295,13 @@ } return numberOfCPUs; +#elif defined(SYS_OS2) + uint32_t numprocs = 1; + + DosQuerySysInfo(QSV_NUMPROCESSORS, QSV_NUMPROCESSORS, &numprocs, sizeof(numprocs)); + + return numprocs; + #else return 1; #endif diff -buNr common/osdep.h.org common/osdep.h --- common/osdep.h.org 2008-09-24 13:45:48.000000000 +0900 +++ common/osdep.h 2008-09-26 23:25:02.000000000 +0900 @@ -37,6 +37,13 @@ #ifdef _WIN32 #include // _setmode() #include // _O_BINARY +#define set_bin_mode(stream) _setmode(_fileno(stream), _O_BINARY) +#elif defined(SYS_OS2) +#include // setmode() +#include // O_BINARY +#define set_bin_mode(stream) setmode(fileno(stream), O_BINARY) +#else +#define set_bin_mode(stream) #endif #ifdef _MSC_VER diff -buNr common/x86/x86inc.asm.org common/x86/x86inc.asm --- common/x86/x86inc.asm.org 2008-09-24 13:45:48.000000000 +0900 +++ common/x86/x86inc.asm 2008-09-25 22:13:40.000000000 +0900 @@ -26,12 +26,15 @@ ; Name of the .rodata section. ; Kludge: Something on OS X fails to align .rodata even given an align attribute, ; so use a different read-only section. +; Kludge: aout format does not support .rodata neither align, so use .data. %macro SECTION_RODATA 0 %ifidn __OUTPUT_FORMAT__,macho64 SECTION .text align=16 %elifidn __OUTPUT_FORMAT__,macho SECTION .text align=16 fakegot: + %elifidn __OUTPUT_FORMAT__,aout + SECTION .data %else SECTION .rodata align=16 %endif