From 25a6dceff82b51508f76576d0b3e89ffcace6140 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 27 Jun 2011 01:35:35 +0100 Subject: [PATCH] Switch to using autohate :( I really didn't want to do this, but much as I hate libtool it is the easiest way to portably build shared libraries, and we really do need to build libopenconnect as a shared library. And having used libtool we might as well concede entirely and use autoconf/automake. Signed-off-by: David Woodhouse --- Makefile | 152 ------------------------------------------------------ Makefile.am | 56 ++++++++++++++++++++ autogen.sh | 6 +++ configure.ac | 43 +++++++++++++++ openconnect.pc.in | 12 +++-- 5 files changed, 113 insertions(+), 156 deletions(-) delete mode 100644 Makefile create mode 100644 Makefile.am create mode 100755 autogen.sh create mode 100644 configure.ac diff --git a/Makefile b/Makefile deleted file mode 100644 index 4812160..0000000 --- a/Makefile +++ /dev/null @@ -1,152 +0,0 @@ -# -# in order to use a private copy of openssl instead of the installed one, -# set OPENSSL to the path to the source directory that you built openssl in -# -# OPENSSL := ../openssl-0.9.8i - -ifdef RPM_OPT_FLAGS -OPT_FLAGS := $(RPM_OPT_FLAGS) -else -OPT_FLAGS := -O2 -g -Wall -endif - -PKGCONFIG=$(shell pkg-config --version) -ifeq ($(PKGCONFIG),) -$(error "No pkg-config. Cannot continue"); -endif - -# Allow people to override OpenSSL and build it statically, if they need -# a special build for the DTLS support. $(OPENSSL) points to the build -# dir; there's no need to install it anywhere (we link it statically). -ifdef OPENSSL -SSL_CFLAGS += -I$(OPENSSL)/include -SSL_LDFLAGS += $(OPENSSL)/libssl.a $(OPENSSL)/libcrypto.a -else -SSL_CFLAGS += $(shell pkg-config --cflags openssl) -SSL_LDFLAGS += $(shell pkg-config --libs openssl) -ifeq ($(SSL_LDFLAGS),) -$(error "No OpenSSL support. Cannot continue"); -endif -endif - -XML2_CFLAGS += $(shell xml2-config --cflags) -XML2_LDFLAGS += $(shell xml2-config --libs) -ifeq ($(XML2_LDFLAGS),) -$(error "No libxml2 support. Cannot continue"); -endif - -CFLAGS := $(OPT_FLAGS) $(SSL_CFLAGS) $(XML2_CFLAGS) $(EXTRA_CFLAGS) -LDFLAGS := -lz $(SSL_LDFLAGS) $(XML2_LDFLAGS) $(EXTRA_LDFLAGS) - -ifdef SSL_UI -CFLAGS += -DSSL_UI -endif - --include Make.config - -ifneq ($(IF_TUN_HDR),) -CFLAGS_tun.o += -DIF_TUN_HDR=\"$(IF_TUN_HDR)\" -endif - -ifneq ($(LIBPROXY_HDR),) -CFLAGS += -DOPENCONNECT_LIBPROXY -DLIBPROXY_HDR=\"$(LIBPROXY_HDR)\" -LDFLAGS += -lproxy -endif - -OPENCONNECT_OBJS := xml.o main.o $(SSL_UI) -CONNECTION_OBJS := dtls.o cstp.o mainloop.o tun.o -AUTH_OBJECTS := ssl.o http.o version.o auth.o library.o - -VERSION_OBJS := $(filter-out version.o, \ - $(OPENCONNECT_OBJS) $(CONNECTION_OBJS) $(AUTH_OBJECTS)) - -.PHONY: all clean realclean install tag tarball openconnect.pc - -all: openconnect - -libopenconnect.a: ${AUTH_OBJECTS} - $(AR) rcs $@ $^ - -version.c: $(patsubst %.o,%.c,$(VERSION_OBJS)) Makefile openconnect.h \ - openconnect-internal.h $(wildcard .git/index .git/refs/tags) \ - version.sh - @./version.sh - -openconnect: $(OPENCONNECT_OBJS) $(CONNECTION_OBJS) libopenconnect.a - $(CC) -o $@ $^ $(LDFLAGS) - -%.o: %.c - $(CC) -c -o $@ $(CFLAGS) $(CFLAGS_$@) $< -MD -MF .$@.dep - -clean: - rm -f *.o *.a openconnect $(wildcard .*.o.dep .*.h.dep) Make.config openconnect.pc - -realclean: clean - rm -f *~ - -install: all - mkdir -p $(DESTDIR)/usr/bin $(DESTDIR)/usr/share/man/man8 - install -m 0755 openconnect $(DESTDIR)/usr/bin - install -m 0644 openconnect.8 $(DESTDIR)/usr/share/man/man8 - -include /dev/null $(wildcard .*.o.dep) - -HDRTEST = for a in $2 ; do if echo "\#include <$$a>" | $(CC) -o/dev/null -xc - -M -MF $1 -MP -MT Make.config 2>/dev/null; then \ - echo $$a; break ; fi; done - -Make.config: LIBPROXY_H = $(shell $(call HDRTEST,.libproxy.h.dep,proxy.h libproxy/proxy.h)) -Make.config: IF_TUN_H = $(shell $(call HDRTEST,.if_tun.h.dep, linux/if_tun.h net/if_tun.h net/tun/if_tun.h)) -Make.config: Makefile - ( echo "IF_TUN_HDR := $(IF_TUN_H)"; echo "LIBPROXY_HDR := $(LIBPROXY_H)" ) > $@ - --include Make.config - -INCDIR := /usr/include -LIBDIR := /usr/lib -PKGCONFIGDIR := ${LIBDIR}/pkgconfig -ifeq ($(LIBPROXY_HDR),) -LIBPROXYPC := -else -LIBPROXYPC := libproxy-1.0 -endif - -openconnect.pc: VERSION = $(shell sed 's/.*v\(.*\)";/\1/' version.c) -openconnect.pc: openconnect.pc.in version.c - sed -e 's^VERSION^$(VERSION)^' -e 's^LIBDIR^$(LIBDIR)^' -e 's^LIBPROXY^$(LIBPROXYPC)^' $< > $@ - -install-lib: libopenconnect.a openconnect.pc - install -D -m 0644 libopenconnect.a $(DESTDIR)$(LIBDIR)/libopenconnect.a - install -D -m 0644 openconnect.pc $(DESTDIR)$(PKGCONFIGDIR)/openconnect.pc - install -D -m 0644 openconnect.h $(DESTDIR)$(INCDIR)/openconnect.h - -ifdef VERSION -tag: - @git update-index --refresh --unmerged - @if git diff-index --name-only HEAD | grep ^ ; then \ - echo Uncommitted changes in above files; exit 1; fi - @sed 's/^v=.*/v="v$(VERSION)"/' -i version.sh - @( echo "s/Last modified: .*/Last modified: $(shell date)/" ;\ - echo '/
  • OpenConnect HEAD/a\' ;\ - echo '
      \' ;\ - echo '
    • No changelog entries yet
    • \';\ - echo '

    \' ; echo '
  • \' ;\ - echo '
  • OpenConnect v$(VERSION) — $(shell date +%Y-%m-%d)
    ' ) | \ - sed -f - -i openconnect.html -# stupid syntax highlighting ' - @git commit -s -m "Tag version $(VERSION)" version.sh openconnect.html - @git tag v$(VERSION) - -tarball: version.c - @if ! grep -q '"v$(VERSION)"' version.c; then \ - echo "Tree not at v$(VERSION)"; exit 1 ; fi - @git update-index --refresh --unmerged - @if git diff-index --name-only HEAD | grep ^ ; then \ - echo Uncommitted changes in above files; exit 1; fi - git add -f version.c - git write-tree - git commit -m "add version.c for v$(VERSION)" version.c - git archive --format=tar --prefix=openconnect-$(VERSION)/ `git write-tree` | gzip -9 > openconnect-$(VERSION).tar.gz - git reset v$(VERSION) - git gc --prune -endif - diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..13408e4 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,56 @@ + + +lib_LTLIBRARIES = libopenconnect.la +bin_PROGRAMS = openconnect +man8_MANS = openconnect.8 + +openconnect_SOURCES = xml.c main.c dtls.c cstp.c mainloop.c tun.c + +openconnect_CFLAGS = $(OPENSSL_CFLAGS) $(LIBXML2_CFLAGS) $(LIBPROXY_CFLAGS) +openconnect_LDADD = libopenconnect.la $(OPENSSL_LIBS) $(LIBXML2_LIBS) $(LIBPROXY_LIBS) + +libopenconnect_la_SOURCES = ssl.c http.c version.c auth.c library.c +libopenconnect_la_CFLAGS = $(OPENSSL_CFLAGS) $(LIBXML2_CFLAGS) $(LIBPROXY_CFLAGS) +libopenconnect_la_LIBADD = $(OPENSSL_LIBS) $(LIBXML2_LIBS) $(LIBPROXY_LIBS) +libopenconnect_la_LDFLAGS = -version-number 1:2 +noinst_HEADERS = openconnect-internal.h openconnect.h +include_HEADERS = openconnect.h + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = openconnect.pc + +EXTRA_DIST = version.sh openconnect.html openconnect.8 COPYING.LGPL + +DISTCLEANFILES = $(pkgconfig_DATA) version.c + +version.c: $(filter-out version.c, $(libopenconnect_la_SOURCES)) \ + $(openconnect_SOURCES) Makefile.am configure.ac \ + openconnect.h openconnect-internal.h version.sh \ + $(wildcard .git/index .git/refs/tags) + @./version.sh + +dist-hook: + @git update-index --refresh --unmerged + @if git diff-index --name-only HEAD | grep ^ ; then \ + echo Uncommitted changes in above files; exit 1; fi + + ifdef VERSION +tag: + @git update-index --refresh --unmerged + @if git diff-index --name-only HEAD | grep ^ ; then \ + echo Uncommitted changes in above files; exit 1; fi + @sed 's/AC_INIT.*/AC_INIT(openconnect, $(VERSION))/' -i configure.ac + @sed 's/^v=.*/v="v$(VERSION)"/' -i version.sh + @( echo "s/Last modified: .*/Last modified: $(shell date)/" ;\ + echo '/
  • OpenConnect HEAD/a\' ;\ + echo '
      \' ;\ + echo '
    • No changelog entries yet
    • \';\ + echo '

    \' ; echo '
  • \' ;\ + echo '
  • OpenConnect v$(VERSION) — $(shell date +%Y-%m-%d)
    ' ) | \ + sed -f - -i openconnect.html +# stupid syntax highlighting ' + @git commit -s -m "Tag version $(VERSION)" configure.ac version.sh openconnect.html + @git tag v$(VERSION) + @./autogen.sh + + endif diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..885c0df --- /dev/null +++ b/autogen.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +aclocal && \ + libtoolize --automake --copy --force && \ + automake --foreign --add-missing && \ + autoconf diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..be55123 --- /dev/null +++ b/configure.ac @@ -0,0 +1,43 @@ + +AC_INIT(openconnect, 3.02) +PKG_PROG_PKG_CONFIG +AC_LANG_C +AM_INIT_AUTOMAKE([foreign]) + +AC_ARG_WITH([openssl], + AS_HELP_STRING([--with-openssl], + [Location of OpenSSL build dir]), + [OPENSSL_CFLAGS="-I${with_openssl}/include" + OPENSSL_LIBS="${with_openssl}/libssl.a ${with_openssl}/libcrypto.a -ldl -lz" + AC_SUBST(OPENSSL_CFLAGS) + AC_SUBST(OPENSSL_LIBS) + AC_ENABLE_STATIC + AC_DISABLE_SHARED], + [PKG_CHECK_MODULES(OPENSSL, openssl) + AC_ENABLE_SHARED + AC_DISABLE_STATIC]) + +AC_PROG_LIBTOOL + +PKG_CHECK_MODULES(LIBXML2, libxml-2.0) + +libproxy_hdr=no +AC_CHECK_HEADER([libproxy.h], + [libproxy_hdr='"libproxy.h"'], + [AC_CHECK_HEADER([proxy.h], + [libproxy_hdr='"libproxy.h"'])]) +if (test "$libproxy_hdr" != "no"); then + AC_DEFINE([LIBPROXY_HDR], $libproxy_hdr) + PKG_CHECK_MODULES(LIBPROXY, libproxy-1.0, AC_SUBST(LIBPROXY_PC, libproxy-1.0), dummy=yes) +fi + +AC_CHECK_HEADER([if_tun.h], + [AC_DEFINE([IF_TUN_HDR], ["if_tun.h"])], + [AC_CHECK_HEADER([linux/if_tun.h], + [AC_DEFINE([IF_TUN_HDR], ["linux/if_tun.h"])], + [AC_CHECK_HEADER([net/if_tun.h], + [AC_DEFINE([IF_TUN_HDR], ["net/if_tun.h"])], + [AC_CHECK_HEADER([net/tun/if_tun.h], + [AC_DEFINE([IF_TUN_HDR], ["net/tun/if_tun.h"])])])])]) + +AC_OUTPUT(Makefile openconnect.pc) diff --git a/openconnect.pc.in b/openconnect.pc.in index 833022e..28772dd 100644 --- a/openconnect.pc.in +++ b/openconnect.pc.in @@ -1,8 +1,12 @@ -libdir=LIBDIR +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + Name: openconnect Description: OpenConnect VPN client -Version: VERSION -Requires: LIBPROXY zlib openssl libxml-2.0 +Version: @VERSION@ +Requires: @LIBPROXY_PC@ zlib openssl libxml-2.0 Libs: -L${libdir} -lopenconnect -Cflags: +Cflags: -I${includedir} -- 2.7.4