On MinGW it is not possible to build shared and static libraries at once.
authorDiego Biurrun <diego@biurrun.de>
Mon, 30 Jan 2006 00:22:41 +0000 (00:22 +0000)
committerDiego Biurrun <diego@biurrun.de>
Mon, 30 Jan 2006 00:22:41 +0000 (00:22 +0000)
Add means to disable building the static libraries and fix a few issues
with the MinGW build.
All the hard work done by Alexander Strasser, minor changes by myself.

Originally committed as revision 4909 to svn://svn.ffmpeg.org/ffmpeg/trunk

configure
libavcodec/Makefile
libavformat/Makefile
libavutil/Makefile
libavutil/common.h

index a41e149b8e31ba914c63222c04211dfd9fcd8517..db058bd67868675bde3d76b278ef7f2262c43493 100755 (executable)
--- a/configure
+++ b/configure
@@ -31,7 +31,10 @@ echo "  --enable-a52             enable GPLed A52 support [default=no]"
 echo "  --enable-a52bin          open liba52.so.0 at runtime [default=no]"
 echo "  --enable-dts             enable GPLed DTS support [default=no]"
 echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
+echo "  --enable-static          build static libraries [default=yes]"
+echo "  --disable-static         do not build static libraries [default=no]"
 echo "  --enable-shared          build shared libraries [default=no]"
+echo "  --disable-shared         do not build shared libraries [default=yes]"
 echo "  --enable-amr_nb          enable amr_nb float audio codec"
 echo "  --enable-amr_nb-fixed    use fixed point for amr-nb codec"
 echo "  --enable-amr_wb          enable amr_wb float audio codec"
@@ -206,6 +209,7 @@ mingw32="no"
 mingwce="no"
 cygwin="no"
 os2="no"
+lstatic="yes"
 lshared="no"
 optimize="yes"
 debug="yes"
@@ -549,8 +553,14 @@ for opt do
   ;;
   --enable-mingwce) mingwce="yes"
   ;;
+  --enable-static) lstatic="yes"
+  ;;
+  --disable-static) lstatic="no"
+  ;;
   --enable-shared) lshared="yes"
   ;;
+  --disable-shared) lshared="no"
+  ;;
   --disable-debug) debug="no"
   ;;
   --disable-opts) optimize="no"
@@ -607,6 +617,17 @@ for opt do
   esac
 done
 
+# we need to build at least one lib type
+if test "$lstatic" = "no" && test "$lshared" = "no" ; then
+    cat <<EOF
+At least one library type must be built.
+Specify --enable-static to build the static libraries or --enable-shared to
+build the shared libraries as well. To only build the shared libraries specify
+--disable-static in addition to --enable-shared.
+EOF
+    exit 1;
+fi
+
 if test "$theora" = "yes" ; then
     if test "$libogg" = "no"; then
         echo "libogg must be enabled to enable Theora."
@@ -869,6 +890,15 @@ $cc -o $TMPE $TMPC 2> /dev/null || mmi="no"
 fi
 
 if test "$mingw32" = "yes" -o "$mingwce" = "yes"; then
+    if test "$lshared" = "yes" && test "$lstatic" = "yes" ; then
+        cat <<EOF
+You can only build one library type at once on MinGW.
+Specify --disable-static --enable-shared to only build
+the shared libraries. To build only the static libraries
+you don't need to pass additional options.
+EOF
+        exit 1
+    fi
     v4l="no"
     bktr="no"
     audio_oss="no"
@@ -1296,6 +1326,7 @@ echo "pp support       $pp"
 echo "debug symbols    $debug"
 echo "strip symbols    $dostrip"
 echo "optimize         $optimize"
+echo "static           $lstatic"
 echo "shared           $lshared"
 echo "video hooking    $vhook"
 echo "SDL support      $sdl"
@@ -1364,7 +1395,9 @@ echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
 echo "BUILDSUF=$BUILDSUF" >> config.mak
 echo "LIBPREF=$LIBPREF" >> config.mak
 echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
-echo "LIB=$LIB" >> config.mak
+if test "$lstatic" = "yes" ; then
+  echo "LIB=$LIB" >> config.mak
+fi
 echo "SLIBPREF=$SLIBPREF" >> config.mak
 echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
 echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
@@ -1508,6 +1541,7 @@ lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h
 
 
 if test "$lshared" = "yes" ; then
+  echo "#define BUILD_SHARED_AV 1" >> $TMPH
   echo "BUILD_SHARED=yes" >> config.mak
   echo "PIC=-fPIC -DPIC" >> config.mak
   echo "SPPMAJOR=${lavc_version%%.*}" >> config.mak
index b12dff032717502b65e50adbc9045ef33f4989b1..794d3c826a6203f092796a52ed17de30bc390bf1 100644 (file)
@@ -11,7 +11,7 @@ CFLAGS=$(OPTFLAGS) -DHAVE_AV_CONFIG_H -I.. -I$(SRC_PATH)/libavutil -D_FILE_OFFSE
 
 #FIXME: This should be in configure/config.mak
 ifeq ($(CONFIG_WIN32),yes)
-    LDFLAGS=-Wl,--output-def,$(@:.dll=.def)
+    LDFLAGS=-Wl,--output-def,$(@:.dll=.def),--out-implib,lib$(SLIBNAME:$(SLIBSUF)=.dll.a)
 endif
 
 OBJS= bitstream.o utils.o mem.o allcodecs.o \
@@ -449,6 +449,7 @@ dep:        depend
 
 clean: $(CLEANAMR)
        rm -f *.o *.d *~ *.a *.lib *.so *.dylib *.dll \
+          *.dll.a *.def *.exp \
           i386/*.o i386/*~ \
           armv4l/*.o armv4l/*~ \
           mlib/*.o mlib/*~ \
index 92a1e686e8bd47097f3dc728ff8b165a71b7b397..55abd2be2b2eb3ff264bab1a0adfac971b0c30ae 100644 (file)
@@ -10,7 +10,7 @@ CFLAGS=$(OPTFLAGS) -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavutil -I$(SRC_PATH)/liba
 
 #FIXME: This should be in configure/config.mak
 ifeq ($(CONFIG_WIN32),yes)
-    LDFLAGS=-Wl,--output-def,$(@:.dll=.def)
+    LDFLAGS=-Wl,--output-def,$(@:.dll=.def),--out-implib,lib$(SLIBNAME:$(SLIBSUF)=.dll.a)
 endif
 
 OBJS= utils.o cutils.o os_support.o allformats.o
@@ -157,7 +157,8 @@ install-headers:
        g++ $(subst -Wall,,$(CFLAGS)) -c -o $@ $<
 
 clean:
-       rm -f *.o *.d *~ *.a *.lib *.so *.dylib *.dll
+       rm -f *.o *.d *~ *.a *.lib *.so *.dylib *.dll \
+             *.lib *.def *.dll.a *.exp
 
 distclean: clean
        rm -f .depend
index 9d02aab4ef28fb746cd787155ef5a825cf357a23..4dcb7e3b19934e96076f589ab390804a9b4737b1 100644 (file)
@@ -6,11 +6,11 @@ include ../config.mak
 VPATH=$(SRC_PATH)/libavutil
 
 # NOTE: -I.. is needed to include config.h
-CFLAGS=$(OPTFLAGS) -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE
+CFLAGS=$(OPTFLAGS) -DHAVE_AV_CONFIG_H -DBUILD_AVUTIL -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE
 
 #FIXME: This should be in configure/config.mak
 ifeq ($(CONFIG_WIN32),yes)
-    LDFLAGS=-Wl,--output-def,$(@:.dll=.def)
+    LDFLAGS=-Wl,--output-def,$(@:.dll=.def),--out-implib,lib$(SLIBNAME:$(SLIBSUF)=.dll.a)
 endif
 
 OBJS= mathematics.o \
@@ -53,7 +53,8 @@ depend: $(SRCS)
 dep:   depend
 
 clean:
-       rm -f *.o *.d *~ *.a *.lib *.so *.dylib *.dll
+       rm -f *.o *.d *~ *.a *.lib *.so *.dylib *.dll \
+             *.lib *.def *.dll.a *.exp
 
 distclean: clean
        rm -f .depend
index 09638c39e7e728d2bd9da8485ab42162683f7401..f4dcf310b05d244888691a367dfcadb727b199d2 100644 (file)
@@ -247,6 +247,13 @@ static inline float floorf(float f) {
 
 #ifdef HAVE_AV_CONFIG_H
 
+#if defined(__MINGW32__) && !defined(BUILD_AVUTIL) && defined(BUILD_SHARED_AV)
+#  define FF_IMPORT_ATTR __declspec(dllimport)
+#else
+#  define FF_IMPORT_ATTR
+#endif
+
+
 #    include "bswap.h"
 
 // Use rip-relative addressing if compiling PIC code on x86-64.
@@ -345,7 +352,7 @@ void print_stats(void);
 #endif
 
 /* misc math functions */
-extern const uint8_t ff_log2_tab[256];
+extern FF_IMPORT_ATTR const uint8_t ff_log2_tab[256];
 
 static inline int av_log2(unsigned int v)
 {
@@ -423,7 +430,7 @@ static inline int clip_uint8(int a)
 }
 
 /* math */
-extern const uint8_t ff_sqrt_tab[128];
+extern FF_IMPORT_ATTR const uint8_t ff_sqrt_tab[128];
 
 int64_t ff_gcd(int64_t a, int64_t b);