Skip to content

Commit

Permalink
Updated build process extensively.
Browse files Browse the repository at this point in the history
Cygwin and mingw32 should both be able to create shared objects (DLLs) now.

dact 0.8.41

FossilOrigin-Name: 43763b1acf491b51549106be0c9d56d3a4dcbfce
  • Loading branch information
rkeene committed Dec 20, 2004
1 parent 36b4fb8 commit 65f7fdd
Show file tree
Hide file tree
Showing 9 changed files with 4,896 additions and 1,973 deletions.
51 changes: 31 additions & 20 deletions Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,22 @@ LOADLIBES =
LDLIBS += @LIBS@ @MODLIBS@ -lm @NOMODS@ @MODLIBSCOND@
LDFLAGS += @LDFLAGS@

SHOBJFLAGS = @SHOBJFLAGS@
SHOBJLDFLAGS = @SHOBJLDFLAGS@
SHOBJEXT = @SHOBJEXT@

MODLIBS = @MODLIBS@

INSTALL = @INSTALL@
@SET_MAKE@

prefix = @prefix@
mandir = @mandir@
sysconfdir = @sysconfdir@
datadir = @datadir@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
bindir = @bindir@
sysconfdir = @sysconfdir@
mandir = @mandir@
datadir = @datadir@

CONF = $(sysconfdir)/dact.conf
CFLAGS += -DDACT_CONFIG_FILE=\"$(CONF)\" -DEXEEXT=\"$(EXEEXT)\"
Expand All @@ -33,9 +37,12 @@ CFLAGS += -DDACT_CONFIG_FILE=\"$(CONF)\" -DEXEEXT=\"$(EXEEXT)\"

DEBUGALGO = comp_bitsums.c comp_factor.c comp_textrle.c
OBJS += dact_common.o comp_fail.o comp_plain.o buffer.o header.o sort.o dact.o module.o parse.o dendian.o crc.o net.o ui.o sfx.o libdact.o @LIBOBJS@
# Note that the following lacks "dact_shr.o" but otherwise MUST
# be kept in sync with OBJS
SHLIBOBJS += dact_common_shr.o comp_fail_shr.o comp_plain_shr.o buffer_shr.o header_shr.o sort_shr.o module_shr.o parse_shr.o dendian_shr.o crc_shr.o net_shr.o ui_shr.o sfx_shr.o libdact_shr.o @SHLIBOBJS@
ALGO = comp_snibble.c comp_delta.c comp_text.c comp_rle.c cipher_chaos.c cipher_sub.c cipher_psub.c @ALGO@

TOBUILD = dact libdact.so libdact.a dact.conf
TOBUILD = dact$(EXEEXT) libdact.$(SHOBJEXT) libdact.a dact.conf

all: @DEFAULT@

Expand All @@ -44,7 +51,7 @@ module: @DEPEND@
$(MAKE) $(TOBUILD)

static: @DEPEND@
@OBJS="$(ALGO:.c=.o) $(CR_OBJ)" LDLIBS="$(MODLIBS)" $(MAKE) $(TOBUILD)
@OBJS="$(ALGO:.c=.o) $(CR_OBJ)" SHLIBOBJS="$(ALGO:.c=_shr.o)" LDLIBS="$(MODLIBS)" $(MAKE) $(TOBUILD)

dact.conf: Makefile
@echo "version_check off" > dact.conf
Expand All @@ -58,32 +65,34 @@ dact.conf: Makefile
@echo "module_load_all off" >> dact.conf
@MODS@ @for so in $(MODS:.so=); do echo "load_module $$so" >> dact.conf; done

dact: $(OBJS) $(MODS)
$(CC) $(OBJS) $(LDFLAGS) $(LIBS) $(LDLIBS) -o dact$(EXEEXT)
dact$(EXEEXT): $(OBJS) $(MODS)
$(CC) $(OBJS) $(LIBS) -o dact$(EXEEXT) $(LDLIBS) $(LDFLAGS)

libdact.so: $(OBJS)
@MODS@ @echo $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ @SHARED@ $(filter-out dact.c, $(^:.o=.c)); \
@MODS@ $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ @SHARED@ $(filter-out dact.c, $(^:.o=.c))
@true
libdact.$(SHOBJEXT): $(SHLIBOBJS)
$(CC) $(CPPFLAGS) $(CFLAGS) $(SHOBJFLAGS) -o $@ $^ $(LDLIBS) $(LDFLAGS) $(SHOBJLDFLAGS)

libdact.a: $(OBJS)
@AR@ rcu libdact.a $(filter-out dact.o, $^)
-@RANLIB@ libdact.a

%_shr.o: %.c
$(CC) $(CPPFLAGS) $(CFLAGS) $(SHOBJFLAGS) -c -o $@ $?

%.so: %.c %.lnk
@echo $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ -DAS_MODULE @SHARED@ $< $(filter %.o, $^) `cat $(<:.c=.lnk)`; \
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ -DAS_MODULE @SHARED@ $< $(filter %.o, $^) `cat $(<:.c=.lnk)`
@echo $(CC) $(CPPFLAGS) $(CFLAGS) $(SHOBJFLAGS) -o $@ -DAS_MODULE $(SHOBJLDFLAGS) $(LDFLAGS) $< $(filter %.o, $^) `cat $(<:.c=.lnk)`; \
$(CC) $(CPPFLAGS) $(CFLAGS) $(SHOBJFLAGS) -o $@ -DAS_MODULE $(SHOBJLDFLAGS) $(LDFLAGS) $< $(filter %.o, $^) `cat $(<:.c=.lnk)`

.PHONY: clean distclean install-bin install mrproper install-local install-bin-local uninstall depend
clean:
rm -f dact dact$(EXEEXT) $(OBJS) libdact.so libdact.o libdact.a core *~ $(ALGO:.c=.o) $(ALGO:.c=.so)
rm -f dact dact$(EXEEXT) $(OBJS) libdact.$(SHOBJEXT) libdact.$(SHOBJEXT).def libdact.$(SHOBJEXT).a libdact.o libdact.a core *~ $(ALGO:.c=.o) $(ALGO:.c=.so) $(SHLIBOBJS)

distclean: clean
rm -f Makefile config.h config.status config.log config.cache

mrproper: distclean
rm -rf Makefile.dep configure autom4te.cache/ config.h.in

install-bin: dact
install-bin: dact$(EXEEXT)
-$(INSTALL) -d $(bindir)
$(INSTALL) -m 755 dact$(EXEEXT) $(bindir)/dact$(EXEEXT)

Expand All @@ -94,26 +103,28 @@ install: all install-bin
-$(INSTALL) -d $(sysconfdir)
$(INSTALL) -m 644 dact.conf $(CONF)
$(INSTALL) -m 644 Docs/dact.1 $(mandir)/man1/dact.1
@MODS@ -$(INSTALL) -m 755 libdact.so $(libdir)/libdact.so
-$(INSTALL) -m 755 libdact.$(SHOBJEXT) $(libdir)/libdact.$(SHOBJEXT)
-$(INSTALL) -m 644 libdact.$(SHOBJEXT).def $(libdir)/libdact.$(SHOBJEXT).def
-$(INSTALL) -m 644 libdact.$(SHOBJEXT).a $(libdir)/libdact.$(SHOBJEXT).a
-$(INSTALL) -m 644 libdact.a $(libdir)/libdact.a
@MODS@ for so in *.so; do $(INSTALL) -m 755 $$so $(datadir)/dact/$$so; done
./patch-magic-file $(datadir)/magic

install-bin-local: dact
install-bin-local: dact$(EXEEXT)
-$(INSTALL) -d $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`
$(INSTALL) -m 755 dact$(EXEEXT) $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`/dact$(EXEEXT)

install-local: all install-bin-local
-$(INSTALL) -d $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`
$(INSTALL) -m 644 dact.conf $(HOME)/.dact/dact.conf
-$(INSTALL) -m 644 libdact.a $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`/dact$(EXEEXT)
@MODS@ -$(INSTALL) -m 755 libdact.so $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`/dact$(EXEEXT)
-$(INSTALL) -m 755 libdact.$(SHOBJEXT) $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`/dact$(EXEEXT)
@MODS@ for so in *.so; do $(INSTALL) -m 755 $$so $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`/$$so; done

uninstall:
rm -f $(bindir)/dact$(EXEEXT)
rm -f $(mandir)/man1/dact.1 $(CONF)
rm -f $(libdir)/libdact.a $(libdir)/libdact.so
rm -f $(libdir)/libdact.a $(libdir)/libdact.$(SHOBJEXT)
@MODS@ rm -rf $(datadir)/dact

depend: Makefile.dep
Expand Down
176 changes: 106 additions & 70 deletions aclocal.m4
Original file line number Diff line number Diff line change
Expand Up @@ -117,72 +117,6 @@ AC_DEFUN(DC_NO_MODULE, [
MODS="# "
])

AC_DEFUN(DC_GET_SHARED, [
AC_SUBST(SHARED)
OLD_LDFLAGS="$LDFLAGS"
SHARED=""
if test -z "$SHARED"; then
LDFLAGS="$OLD_LDFLAGS -shared -Wl,-G,-z,textoff -rdynamic -fPIC"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-shared -Wl,-G,-z,textoff -fPIC"; ADD_LDFLAGS="-rdynamic" ], SHARED="", SHARED="");
fi
if test -z "$SHARED"; then
LDFLAGS="$OLD_LDFLAGS -shared -Wl,-G,-z,textoff -rdynamic"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-shared -Wl,-G,-z,textoff"; ADD_LDFLAGS="-rdynamic" ], SHARED="", SHARED="");
fi
if test -z "$SHARED"; then
LDFLAGS="$OLD_LDFLAGS -shared -Wl,-G,-z,textoff -fPIC"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-shared -Wl,-G,-z,textoff -fPIC"; ADD_LDFLAGS="" ], SHARED="", SHARED="");
fi
if test -z "$SHARED"; then
LDFLAGS="$OLD_LDFLAGS -shared -Wl,-G,-z,textoff"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-shared -Wl,-G,-z,textoff"; ADD_LDFLAGS="" ], SHARED="", SHARED="");
fi
if test -z "$SHARED"; then
LDFLAGS="$OLD_LDFLAGS -Wl,-G,-z,textoff -rdynamic -fPIC"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-Wl,-G,-z,textoff -fPIC"; ADD_LDFLAGS="-rdynamic" ], SHARED="", SHARED="");
fi
if test -z "$SHARED"; then
LDFLAGS="$OLD_LDFLAGS -Wl,-G,-z,textoff -rdynamic"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-Wl,-G,-z,textoff"; ADD_LDFLAGS="-rdynamic" ], SHARED="", SHARED="");
fi
if test -z "$SHARED"; then
LDFLAGS="$OLD_LDFLAGS -Wl,-G,-z,textoff -fPIC"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-Wl,-G,-z,textoff -fPIC"; ADD_LDFLAGS="" ], SHARED="", SHARED="");
fi
if test -z "$SHARED"; then
LDFLAGS="$OLD_LDFLAGS -Wl,-G,-z,textoff"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-Wl,-G,-z,textoff"; ADD_LDFLAGS="" ], SHARED="", SHARED="");
fi
if test -z "$SHARED"; then
LDFLAGS="$LDFLAGS -shared -rdynamic -fPIC"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-shared -fPIC"; ADD_LDFLAGS="-rdynamic" ], SHARED="", SHARED="");
fi
if test -z "$SHARED"; then
LDFLAGS="$OLD_LDFLAGS -shared -fPIC"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-shared -fPIC"; ADD_LDFLAGS="" ], SHARED="", SHARED="");
fi
if test -z "$SHARED"; then
LDFLAGS="$OLD_LDFLAGS -shared"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHARED="-shared"; ADD_LDFLAGS="" ], SHARED="", SHARED="");
fi
LDFLAGS="$ADD_LDFLAGS $OLD_LDFLAGS"
])


AC_DEFUN(DC_ASK_MODULE, [
AC_SUBST(DEFAULT)
AC_SUBST(MODS)
Expand All @@ -197,8 +131,7 @@ AC_DEFUN(DC_ASK_MODULE, [
DC_NO_MODULE
;;
*)
DC_GET_SHARED
if test "$HAVEDLOPEN" = yes -a -n "$SHARED"; then
if test "$HAVEDLOPEN" = yes; then
AC_MSG_RESULT(yes)
AC_DEFINE(USE_MODULES, [1], [Enable use of dynamically loadable modules?])
NOMODS="#"
Expand All @@ -210,8 +143,7 @@ AC_DEFUN(DC_ASK_MODULE, [
;;
esac
], [
DC_GET_SHARED
if test "$HAVEDLOPEN" = yes -a -n "$SHARED"; then
if test "$HAVEDLOPEN" = yes; then
AC_MSG_RESULT(yes)
AC_DEFINE(USE_MODULES, [1], [Enable use of dynamically loadable modules?])
NOMODS="#"
Expand Down Expand Up @@ -268,3 +200,107 @@ AC_DEFUN(DC_CHK_DLOPEN, [
])
fi
])




dnl Usage:
dnl DC_TEST_SHOBJFLAGS(shobjflags, shobjldflags, action-if-not-found)
dnl
AC_DEFUN(DC_TEST_SHOBJFLAGS, [
AC_SUBST(SHOBJFLAGS)
AC_SUBST(SHOBJLDFLAGS)
OLD_LDFLAGS="$LDFLAGS"
SHOBJFLAGS=""
LDFLAGS="$OLD_LDFLAGS $1 $2"
AC_TRY_LINK([#include <stdio.h>
int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHOBJFLAGS="$1"; SHOBJLDFLAGS="$2" ], [
LDFLAGS="$OLD_LDFLAGS"
$3
])
LDFLAGS="$OLD_LDFLAGS"
])

AC_DEFUN(DC_GET_SHOBJFLAGS, [
AC_SUBST(SHOBJFLAGS)
AC_SUBST(SHOBJLDFLAGS)
AC_MSG_CHECKING(how to create shared objects)
if test -z "$SHOBJFLAGS" -a -z "$SHOBJLDFLAGS"; then
DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -rdynamic], [
DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared], [
DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -rdynamic -mimpure-text], [
DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -mimpure-text], [
DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -rdynamic -Wl,-G,-z,textoff], [
DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -Wl,-G,-z,textoff], [
DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -dynamiclib -flat_namespace -undefined suppress -bind_at_load], [
DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-dynamiclib -flat_namespace -undefined suppress -bind_at_load], [
AC_MSG_RESULT(cant)
AC_MSG_ERROR([We are unable to make shared objects.])
])
])
])
])
])
])
])
])
fi
AC_MSG_RESULT($SHOBJLDFLAGS $SHOBJFLAGS)
DC_SYNC_SHLIBOBJS
])

AC_DEFUN(DC_SYNC_SHLIBOBJS, [
AC_SUBST(SHLIBOBJS)
SHLIBOBJS=""
for obj in $LIB@&t@OBJS; do
SHLIBOBJS="$SHLIBOBJS `echo $obj | sed 's/\.o$/_shr.o/g'`"
done
])

AC_DEFUN(DC_CHK_OS_INFO, [
AC_CANONICAL_HOST
AC_SUBST(SHOBJEXT)
AC_SUBST(SHOBJFLAGS)
AC_SUBST(SHOBJLDFLAGS)
AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(AREXT)
AC_MSG_CHECKING(host operating system)
AC_MSG_RESULT($host_os)
SHOBJEXT="so"
AREXT="a"
case $host_os in
darwin*)
SHOBJEXT="dylib"
;;
hpux*)
SHOBJEXT="sl"
;;
mingw32msvc*)
SHOBJEXT="dll"
SHOBJFLAGS="-DPIC"
CFLAGS="$CFLAGS -mno-cygwin -mms-bitfields"
CPPFLAGS="$CPPFLAGS -mno-cygwin -mms-bitfields"
SHOBJLDFLAGS='-shared -Wl,--enable-auto-image-base -Wl,--output-def,$[@].def,--out-implib,$[@].a'
;;
cygwin*)
SHOBJEXT="dll"
SHOBJFLAGS="-fPIC -DPIC"
CFLAGS="$CFLAGS -mms-bitfields"
CPPFLAGS="$CPPFLAGS -mms-bitfields"
SHOBJLDFLAGS='-shared -Wl,--enable-auto-image-base -Wl,--output-def,$[@].def,--out-implib,$[@].a'
;;
esac
])
Loading

0 comments on commit 65f7fdd

Please sign in to comment.