Basic support for building with Cygwin and MinGW using
authorLasse Collin <lasse.collin@tukaani.org>
Fri, 26 Jun 2009 12:37:53 +0000 (15:37 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Fri, 26 Jun 2009 12:37:53 +0000 (15:37 +0300)
the Autotools based build system. It's not good yet, more
fixes will follow.

configure.ac
src/liblzma/api/lzma.h
src/liblzma/check/crc32_x86.S
src/liblzma/check/crc64_x86.S
src/liblzma/common/common.h
windows/Makefile

index c9676cf..ad43e4f 100644 (file)
@@ -427,7 +427,14 @@ echo
 echo "Initializing Libtool:"
 CXX=no
 F77=no
+AC_LIBTOOL_WIN32_DLL
 AC_PROG_LIBTOOL
+AC_LIBTOOL_RC
+
+dnl Some day we can drop support for libtool 1.5.x. Then the above five
+dnl lines can be replaced with these:
+dnl LT_INIT([win32-dll])
+dnl LT_LANG([Windows Resource])
 
 
 ###############################################################################
index 97e0295..77032f3 100644 (file)
  * to operating systems like Windows, or at least don't care about linking
  * against static liblzma on them, don't worry about LZMA_API_STATIC. That
  * is, most developers will never need to use LZMA_API_STATIC.
+ *
+ * Cygwin is a special case on Windows. We rely on GCC doing the right thing
+ * and thus don't use dllimport and don't specify the calling convention.
  */
 #ifndef LZMA_API_IMPORT
-#      if !defined(LZMA_API_STATIC) && defined(_WIN32)
+#      if !defined(LZMA_API_STATIC) && defined(_WIN32) && !defined(__CYGWIN__)
 #              define LZMA_API_IMPORT __declspec(dllimport)
 #      else
 #              define LZMA_API_IMPORT
 #endif
 
 #ifndef LZMA_API_CALL
-#      ifdef _WIN32
+#      if defined(_WIN32) && !defined(__CYGWIN__)
 #              define LZMA_API_CALL __cdecl
 #      else
 #              define LZMA_API_CALL
index b3c7538..2342168 100644 (file)
@@ -76,7 +76,8 @@ init_table(void)
        .text
        .globl  LZMA_CRC32
 
-#if !defined(__MACH__) && !defined(_WIN32) && !defined(__MSDOS__)
+#if !defined(__MACH__) && !defined(_WIN32) && !defined(__CYGWIN__) \
+               && !defined(__MSDOS__)
        .type   LZMA_CRC32, @function
 #endif
 
@@ -275,8 +276,8 @@ LZMA_CRC32:
        .indirect_symbol LZMA_CRC32_TABLE
        .long 0
 
-#elif defined(_WIN32)
-#      ifndef LZMA_API_STATIC
+#elif defined(_WIN32) || defined(__CYGWIN__)
+#      ifdef DLL_EXPORT
        /* This is equivalent of __declspec(dllexport). */
        .section .drectve
        .ascii " -export:lzma_crc32"
index 5e170bc..8b0a42d 100644 (file)
@@ -66,7 +66,8 @@ init_table(void)
        .text
        .globl  LZMA_CRC64
 
-#if !defined(__MACH__) && !defined(_WIN32) && !defined(__MSDOS__)
+#if !defined(__MACH__) && !defined(_WIN32) && !defined(__CYGWIN__) \
+               && !defined(__MSDOS__)
        .type   LZMA_CRC64, @function
 #endif
 
@@ -258,8 +259,8 @@ LZMA_CRC64:
        .indirect_symbol LZMA_CRC64_TABLE
        .long 0
 
-#elif defined(_WIN32)
-#      ifndef LZMA_API_STATIC
+#elif defined(_WIN32) || defined(__CYGWIN__)
+#      ifdef DLL_EXPORT
        /* This is equivalent of __declspec(dllexport). */
        .section .drectve
        .ascii " -export:lzma_crc64"
index de25260..1fd778b 100644 (file)
@@ -17,7 +17,7 @@
 #include "../../common/mythread.h"
 #include "../../common/integer.h"
 
-#if !defined(LZMA_API_STATIC) && defined(_WIN32)
+#if defined(DLL_EXPORT) && (defined(_WIN32) || defined(__CYGWIN__))
 #      define LZMA_API_EXPORT __declspec(dllexport)
 // Don't use ifdef or defined() below.
 #elif HAVE_VISIBILITY
index d552b1c..c6ebfc9 100644 (file)
@@ -62,8 +62,6 @@ ALL_CPPFLAGS = \
 
 ALL_CPPFLAGS += -DHAVE_CONFIG_H
 
-STATIC_CPPFLAGS = -DLZMA_API_STATIC
-
 # This works with Wine too while using native GNU make, sed, and rm.
 ifdef WINE
 ifdef W64
@@ -213,10 +211,10 @@ liblzma.dll: $(LIBLZMA_OBJS)
        $(STRIP) --strip-all liblzma.dll
 
 $(LIBLZMA_OBJS_C): %.o: %.c
-       $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $<
+       $(CC) -DDLL_EXPORT $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $<
 
 $(LIBLZMA_OBJS_ASM): %.o: %.S
-       $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $<
+       $(CC) -DDLL_EXPORT $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $<
 
 liblzma_static.lib: $(LIBLZMA_OBJS_STATIC)
        $(RM) $@
@@ -224,10 +222,10 @@ liblzma_static.lib: $(LIBLZMA_OBJS_STATIC)
        $(STRIP) --strip-unneeded $@
 
 $(LIBLZMA_OBJS_STATIC_C): %-static.o: %.c
-       $(CC) $(STATIC_CPPFLAGS) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $<
+       $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $<
 
 $(LIBLZMA_OBJS_STATIC_ASM): %-static.o: %.S
-       $(CC) $(STATIC_CPPFLAGS) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $<
+       $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $<
 
 .PHONY: liblzma-clean
 liblzma-clean:
@@ -252,11 +250,11 @@ lzmadec-dynamic.exe: liblzma.dll $(XZDEC_SRCS) lzmadec_rc.o
        $(STRIP) --strip-all $@
 
 xzdec.exe: liblzma_static.lib $(XZDEC_SRCS) xzdec_rc.o
-       $(CC) $(STATIC_CPPFLAGS) $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(XZDEC_SRCS) xzdec_rc.o -o $@ liblzma_static.lib
+       $(CC) -DLZMA_API_STATIC $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(XZDEC_SRCS) xzdec_rc.o -o $@ liblzma_static.lib
        $(STRIP) --strip-all $@
 
 lzmadec.exe: liblzma_static.lib $(XZDEC_SRCS) lzmadec_rc.o
-       $(CC) $(STATIC_CPPFLAGS) $(ALL_CPPFLAGS) -DLZMADEC $(ALL_CFLAGS) $(XZDEC_SRCS) lzmadec_rc.o -o $@ liblzma_static.lib
+       $(CC) -DLZMA_API_STATIC $(ALL_CPPFLAGS) -DLZMADEC $(ALL_CFLAGS) $(XZDEC_SRCS) lzmadec_rc.o -o $@ liblzma_static.lib
        $(STRIP) --strip-all $@
 
 .PHONY: xzdec-clean
@@ -301,7 +299,7 @@ xz-dynamic.exe: liblzma.dll $(XZ_OBJS) xz_rc.o
        $(STRIP) --strip-all $@
 
 $(XZ_OBJS_STATIC): %-static.o: %-fixed.c
-       $(CC) $(STATIC_CPPFLAGS) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $<
+       $(CC) -DLZMA_API_STATIC $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $<
 
 xz.exe: liblzma_static.lib $(XZ_OBJS_STATIC) xz_rc.o
        $(CC) $(ALL_CFLAGS) $(XZ_OBJS_STATIC) xz_rc.o -o $@ liblzma_static.lib