autoconf
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Infos for Unix/Windows portable library making?


From: Jason Curl
Subject: Re: Infos for Unix/Windows portable library making?
Date: Thu, 29 Apr 2010 21:01:45 +0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4

On 25/04/2010 12:39, Ralf Wildenhues wrote:
* Kārlis Repsons wrote on Sun, Apr 25, 2010 at 12:07:44PM CEST:
On Sunday 25 April 2010 08:22:12 Ralf Wildenhues wrote:
You can use libtool for portable creation of shared libraries.
http://www.gnu.org/software/libtool is the place to go to,
and address@hidden is the list to ask questions on.
Thanks, I'll read that, just it's somewhat confusing how to start,
when there are three programs to deal with.
Most trivial example, untested:

cat>configure.ac<<\END
AC_INIT([my-package], [1.0], [my-email-address])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign])
LT_INIT([win32-dll])
Does this affect the fact that I might also be targeting Unix like systems, as well as WinSDK?
AC_PROG_CC
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
END

cat>Makefile.am<<\END
lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = foo.c
libfoo_la_LDFLAGS = -no-undefined
bin_PROGRAMS = bar
bar_SOURCES = bar.c
bar_LDADD = libfoo.la
END

mkdir m4
touch foo.c bar.c

libtoolize -c
autoreconf -vi

./configure --host=i586-mingw32msvc  # the prefix of my cross compiler
make
make install


In addition, I'd add to my configure.ac scripts (libtool 2.2.6)

LT_LANG([Windows Resource])
AM_CONDITIONAL([HAVE_WINDRES], [test x$ac_cv_prog_ac_ct_RC != x])

And if you want your libraries to be usable by most other programming languages on Win32 (Win64 doesn't have this problem), I also add stdcall in configure.ac:

SHLIB_VERSION_ARG=""
if test x$ac_cv_c_compiler_gnu = xyes; then
   case "$host_os" in
      mingw* | cygwin*)
         SHLIB_VERSION_ARG="-Wl,--add-stdcall-alias"
# You could also use "-Wl,--kill-at" and you'd only one export. But
         # we use --add-stdcall-alias to make linking easier.
                 ;;
          *)
                 ;;
   esac
fi
AC_SUBST(SHLIB_VERSION_ARG)

and in Makefile.am:

libfoo_la_LDFLAGS = -no-undefined @SHLIB_VERSION_ARG@

Then if you want to include resources in your DLL (to show a version number for example), put the following in Makefile.am

.rc.lo:
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --tag=RC --mode=compile $(RC) $(RCFLAGS) $< -o $@

I actually create a rsrc.rc.in file that gets converted to an rsrc.rc file by configure that contains a bunch of internal information (e.g. debug, etc.) so I can audit my dlls better later.

You might also need to check for __MSVCRT__ to test if you're compiling for Windows or Posix (e.g. checking for Windows.h is unreliable as your users might use a native Cygwin compiler).

Cheers,
Jason.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]