use automake and libtool
This commits replaces the handwritten makefile with automake+libtool. There is some hackery needed for the LD_PRELOAD shared library, but apart from that there is nothing special and it is a large gain in portability and standardization. The spec file is modified as little as is needed to properly build the RPMs.
This commit is contained in:
16
.gitignore
vendored
16
.gitignore
vendored
@@ -1,13 +1,25 @@
|
||||
/autom4te.cache
|
||||
/depcomp
|
||||
/aclocal.m4
|
||||
/missing
|
||||
/config.guess
|
||||
/config.sub
|
||||
/install-sh
|
||||
/configure
|
||||
/config.h.in
|
||||
/Makefile.in
|
||||
/Makefile
|
||||
.deps
|
||||
.libs
|
||||
/stamp-h1
|
||||
*.o
|
||||
*.a
|
||||
*.so*
|
||||
*.lo
|
||||
*.la
|
||||
bin
|
||||
/config.h
|
||||
/config.log
|
||||
/config.status
|
||||
.dirstamp
|
||||
/libtool
|
||||
/ltmain.sh
|
||||
libiscsi-*.tar.gz
|
||||
|
||||
78
Makefile.am
Normal file
78
Makefile.am
Normal file
@@ -0,0 +1,78 @@
|
||||
# Generic definitions
|
||||
|
||||
ACLOCAL_AMFLAGS =-I m4
|
||||
AUTOMAKE_OPTIONS = foreign subdir-objects
|
||||
AM_CPPFLAGS=-I. -I$(srcdir)/include "-D_U_=__attribute__((unused))"
|
||||
AM_CFLAGS=$(WARN_CFLAGS)
|
||||
LDADD = lib/libiscsi.la -lpopt
|
||||
|
||||
EXTRA_DIST = autogen.sh COPYING.LESSER \
|
||||
packaging/RPM/libiscsi.spec.in packaging/RPM/makerpms.sh
|
||||
|
||||
# libiscsi shared library
|
||||
|
||||
iscsi_includedir = $(includedir)/iscsi
|
||||
dist_iscsi_include_HEADERS = include/iscsi.h include/scsi-lowlevel.h
|
||||
dist_noinst_HEADERS = include/iscsi-private.h include/md5.h include/slist.h
|
||||
|
||||
lib_LTLIBRARIES = lib/libiscsi.la
|
||||
lib_libiscsi_la_SOURCES = \
|
||||
lib/connect.c lib/crc32c.c lib/discovery.c lib/init.c \
|
||||
lib/login.c lib/md5.c lib/nop.c lib/pdu.c lib/scsi-command.c \
|
||||
lib/scsi-lowlevel.c lib/socket.c lib/sync.c lib/task_mgmt.c
|
||||
|
||||
SONAME=$(firstword $(subst ., ,$(VERSION)))
|
||||
SOREL=$(shell printf "%d%02d%02d" $(subst ., ,$(VERSION)))
|
||||
lib_libiscsi_la_LDFLAGS = \
|
||||
-version-info $(SONAME):$(SOREL):0 -bindir $(bindir) -no-undefined
|
||||
|
||||
# libiscsi utilities
|
||||
|
||||
bin_PROGRAMS = bin/iscsi-inq bin/iscsi-ls
|
||||
bin_iscsi_inq_SOURCES = src/iscsi-inq.c
|
||||
bin_iscsi_ls_SOURCES = src/iscsi-ls.c
|
||||
|
||||
# Other examples
|
||||
|
||||
noinst_PROGRAMS = bin/iscsiclient
|
||||
bin_iscsiclient_SOURCES = examples/iscsiclient.c
|
||||
|
||||
EXTRA_PROGRAMS = bin/iscsi-dd
|
||||
bin_iscsi_dd_SOURCES = examples/iscsi-dd.c
|
||||
|
||||
# libiscsi test tool
|
||||
|
||||
noinst_PROGRAMS += bin/iscsi-test
|
||||
dist_noinst_HEADERS += test-tool/iscsi-test.h
|
||||
bin_iscsi_test_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/test-tool
|
||||
bin_iscsi_test_SOURCES = test-tool/iscsi-test.c \
|
||||
test-tool/0100_read10_simple.c test-tool/0101_read10_beyond_eol.c \
|
||||
test-tool/0102_read10_0blocks.c test-tool/0103_read10_rdprotect.c \
|
||||
test-tool/0104_read10_flags.c test-tool/0105_read10_invalid.c \
|
||||
test-tool/0110_readcapacity10_simple.c \
|
||||
test-tool/0111_readcapacity10_pmi.c test-tool/0120_read6_simple.c \
|
||||
test-tool/0121_read6_beyond_eol.c test-tool/0122_read6_invalid.c
|
||||
|
||||
# LD_PRELOAD library.
|
||||
|
||||
if LD_ISCSI
|
||||
EXTRA_PROGRAMS += bin/ld_iscsi
|
||||
CLEANFILES = bin/ld_iscsi.o bin/ld_iscsi.so
|
||||
|
||||
# This gets a bit messy:
|
||||
#
|
||||
# 1) let automake compile the sources
|
||||
bin_ld_iscsi_SOURCES = src/ld_iscsi.c
|
||||
bin_ld_iscsi_CFLAGS = $(AM_CFLAGS) -fPIC
|
||||
|
||||
# 2) let libtool link in the static version of the library
|
||||
noinst_LTLIBRARIES = lib/libiscsi_convenience.la
|
||||
lib_libiscsi_convenience_la_SOURCES = $(lib_libiscsi_la_SOURCES)
|
||||
bin/ld_iscsi.o: src/bin_ld_iscsi-ld_iscsi.o lib/libiscsi_convenience.la
|
||||
$(LIBTOOL) --mode=link $(CC) -o $@ $^
|
||||
|
||||
# 3) Manually create the .so file.
|
||||
bin_SCRIPTS = bin/ld_iscsi.so
|
||||
bin/ld_iscsi.so: bin/ld_iscsi.o
|
||||
$(CC) -shared -o bin/ld_iscsi.so bin/ld_iscsi.o -ldl
|
||||
endif
|
||||
72
Makefile.in
72
Makefile.in
@@ -1,72 +0,0 @@
|
||||
prefix = $(DESTDIR)
|
||||
ifeq ($(prefix),)
|
||||
prefix = @prefix@
|
||||
endif
|
||||
exec_prefix = @exec_prefix@
|
||||
libdir = $(LIBDIR)
|
||||
ifeq ($(libdir),)
|
||||
libdir = @libdir@
|
||||
endif
|
||||
bindir = @bindir@
|
||||
LIBS=-lpopt @LIBS@
|
||||
CC=gcc
|
||||
CFLAGS=-g -O2 -fPIC -Wall -W -I. -I./include "-D_U_=__attribute__((unused))"
|
||||
LIBISCSI_OBJ = lib/connect.o lib/crc32c.o lib/discovery.o lib/init.o lib/login.o lib/md5.o lib/nop.o lib/pdu.o lib/scsi-command.o lib/scsi-lowlevel.o lib/socket.o lib/sync.o lib/task_mgmt.o
|
||||
|
||||
INSTALLCMD = @install@ -c
|
||||
|
||||
LIBISCSI_SO_NAME=libiscsi.so.1
|
||||
VERSION=1.0.0
|
||||
LIBISCSI_SO=libiscsi.so.$(VERSION)
|
||||
|
||||
all: bin/iscsi-inq bin/iscsi-ls lib/$(LIBISCSI_SO) @ld_iscsi@
|
||||
|
||||
bin/ld_iscsi.so: src/ld_iscsi.o lib/libiscsi.a
|
||||
mkdir -p bin
|
||||
ld -shared -o $@ src/ld_iscsi.o lib/libiscsi.a -ldl
|
||||
|
||||
bin/iscsi-ls: src/iscsi-ls.c lib/libiscsi.a
|
||||
mkdir -p bin
|
||||
$(CC) $(CFLAGS) -o $@ src/iscsi-ls.c lib/libiscsi.a $(LIBS)
|
||||
|
||||
bin/iscsi-inq: src/iscsi-inq.c lib/libiscsi.a
|
||||
mkdir -p bin
|
||||
$(CC) $(CFLAGS) -o $@ src/iscsi-inq.c lib/libiscsi.a $(LIBS)
|
||||
|
||||
lib/$(LIBISCSI_SO): $(LIBISCSI_OBJ)
|
||||
@echo Creating shared library $@
|
||||
$(CC) -shared -Wl,-soname=$(LIBISCSI_SO_NAME) -o $@ $(LIBISCSI_OBJ)
|
||||
|
||||
lib/libiscsi.a: $(LIBISCSI_OBJ)
|
||||
@echo Creating library $@
|
||||
ar r lib/libiscsi.a $(LIBISCSI_OBJ)
|
||||
ranlib lib/libiscsi.a
|
||||
|
||||
examples: bin/iscsiclient
|
||||
|
||||
bin/iscsiclient: examples/iscsiclient.c lib/libiscsi.a
|
||||
mkdir -p bin
|
||||
$(CC) $(CFLAGS) -o $@ examples/iscsiclient.c lib/libiscsi.a $(LIBS)
|
||||
|
||||
install: lib/libiscsi.a lib/$(LIBISCSI_SO) bin/iscsi-ls bin/iscsi-inq
|
||||
$(INSTALLCMD) -m 755 lib/$(LIBISCSI_SO) $(libdir)
|
||||
$(INSTALLCMD) -m 755 lib/libiscsi.a $(libdir)
|
||||
$(INSTALLCMD) -m 755 bin/iscsi-ls $(bindir)
|
||||
$(INSTALLCMD) -m 755 bin/iscsi-inq $(bindir)
|
||||
mkdir -p $(exec_prefix)/include/iscsi
|
||||
$(INSTALLCMD) -m 644 include/iscsi.h $(exec_prefix)/include/iscsi
|
||||
$(INSTALLCMD) -m 644 include/scsi-lowlevel.h $(exec_prefix)/include/iscsi
|
||||
|
||||
iscsi-test: lib/libiscsi.a
|
||||
make -C test-tool
|
||||
|
||||
distclean: clean
|
||||
rm -f config.h config.log config.status configure Makefile
|
||||
|
||||
clean:
|
||||
rm -f lib/*.o src/*.o examples/*.o
|
||||
rm -f bin/*
|
||||
rm -f lib/libiscsi.so*
|
||||
rm -f lib/libiscsi.a
|
||||
rm -f iscsi-inq iscsi-ls
|
||||
make -C test-tool clean
|
||||
12
autogen.sh
12
autogen.sh
@@ -1,13 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -rf autom4te.cache
|
||||
rm -f configure config.h.in libiscsi.pc
|
||||
|
||||
IPATHS="-I ./include -I ../include"
|
||||
|
||||
autoheader $IPATHS || exit 1
|
||||
autoconf $IPATHS || exit 1
|
||||
rm -f depcomp aclocal.m4 missing config.guess config.sub install-sh
|
||||
rm -f configure config.h.in config.h.in~ m4/libtool.m4 m4/lt*.m4 Makefile.in
|
||||
|
||||
autoreconf -fvi
|
||||
(cd m4 && for i in libtool.m4 lt*.m4; do
|
||||
echo /$i
|
||||
done) > m4/.gitignore
|
||||
rm -rf autom4te.cache
|
||||
|
||||
echo "Now run ./configure and then make."
|
||||
|
||||
47
configure.ac
47
configure.ac
@@ -1,7 +1,11 @@
|
||||
AC_PREREQ(2.50)
|
||||
AC_INIT(libiscsi, m4_esyscmd([grep 'Version:' ./packaging/RPM/libiscsi.spec.in 2>/dev/null | head -1 | sed -e 's/[ \t]*Version:[ \t]*\([^ \t]*\)[ \t]*.*/\1/' | tr -d '\n']))
|
||||
AC_CONFIG_SRCDIR([lib/init.c])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
AM_INIT_AUTOMAKE
|
||||
AM_SILENT_RULES
|
||||
LT_INIT
|
||||
if test "${libdir}" = '${exec_prefix}/lib'; then
|
||||
case `uname -m` in
|
||||
x86_64|ppc64|powerpc64)
|
||||
@@ -13,33 +17,14 @@ if test "${libdir}" = '${exec_prefix}/lib'; then
|
||||
esac
|
||||
fi
|
||||
|
||||
is_solaris="no"
|
||||
install="/usr/bin/install"
|
||||
ldconfig="ldconfig"
|
||||
ld_iscsi=""
|
||||
|
||||
case `uname` in
|
||||
Linux*)
|
||||
ld_iscsi="bin/ld_iscsi.so"
|
||||
;;
|
||||
AIX*)
|
||||
;;
|
||||
SunOS)
|
||||
is_solaris="yes"
|
||||
install="ginstall"
|
||||
ldconfig="echo no ldconfig on solaris"
|
||||
LIBS="$LIBS -lsocket -lnsl"
|
||||
;;
|
||||
CYGWIN*)
|
||||
ldconfig="echo no ldconfig on cygwin"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
AC_CANONICAL_HOST
|
||||
AM_CONDITIONAL(LD_ISCSI,
|
||||
[case $host_os in linux*) ;; *) AS_SET_STATUS(1);; esac ])
|
||||
|
||||
if test "$ac_cv_prog_gcc" = yes; then
|
||||
CFLAGS="$CFLAGS -Wall -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings"
|
||||
WARN_CFLAGS="-Wall -W -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wwrite-strings"
|
||||
fi
|
||||
AC_SUBST(WARN_CFLAGS)
|
||||
|
||||
LOGDIR='${localstatedir}/log'
|
||||
AC_ARG_WITH([logdir],
|
||||
@@ -54,11 +39,6 @@ AC_SUBST(LOGDIR)
|
||||
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
|
||||
EXTRA_OBJ=""
|
||||
|
||||
#AC_CHECK_HEADERS(sched.h)
|
||||
#AC_CHECK_FUNCS(mlockall)
|
||||
|
||||
AC_CACHE_CHECK([for sin_len in sock],libiscsi_cv_HAVE_SOCK_SIN_LEN,[
|
||||
AC_TRY_COMPILE([#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
@@ -121,10 +101,5 @@ else
|
||||
exit
|
||||
fi
|
||||
|
||||
AC_SUBST(libdir)
|
||||
AC_SUBST(install)
|
||||
AC_SUBST(ldconfig)
|
||||
AC_SUBST(ld_iscsi)
|
||||
#AC_SUBST(LIBISCSI_LDFLAGS)
|
||||
|
||||
AC_OUTPUT(Makefile)
|
||||
AC_CONFIG_FILES(Makefile)
|
||||
AC_OUTPUT
|
||||
|
||||
5
m4/.gitignore
vendored
Normal file
5
m4/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
/libtool.m4
|
||||
/lt~obsolete.m4
|
||||
/ltoptions.m4
|
||||
/ltsugar.m4
|
||||
/ltversion.m4
|
||||
1
packaging/RPM/.gitignore
vendored
Normal file
1
packaging/RPM/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/*.spec
|
||||
@@ -40,25 +40,13 @@ export CC
|
||||
|
||||
## always run autogen.sh
|
||||
./autogen.sh
|
||||
|
||||
CFLAGS="$RPM_OPT_FLAGS $EXTRA -O0" ./configure \
|
||||
--prefix=%{_prefix} \
|
||||
--sysconfdir=%{_sysconfdir} \
|
||||
--mandir=%{_mandir} \
|
||||
--localstatedir="/var"
|
||||
%configure
|
||||
make
|
||||
|
||||
%install
|
||||
# Clean up in case there is trash left from a previous build
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
# Create the target build directory hierarchy
|
||||
mkdir -p $RPM_BUILD_ROOT%{_bindir}
|
||||
mkdir -p $RPM_BUILD_ROOT%{_libdir}
|
||||
mkdir -p $RPM_BUILD_ROOT%{_includedir}
|
||||
mkdir -p $RPM_BUILD_ROOT%{_includedir}/iscsi
|
||||
|
||||
#
|
||||
make DESTDIR=$RPM_BUILD_ROOT%{_prefix} LIBDIR=$RPM_BUILD_ROOT%{_libdir} install
|
||||
make DESTDIR=$RPM_BUILD_ROOT install
|
||||
|
||||
# Remove "*.old" files
|
||||
find $RPM_BUILD_ROOT -name "*.old" -exec rm -f {} \;
|
||||
@@ -73,10 +61,10 @@ rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
|
||||
%{_bindir}/ld_iscsi.so
|
||||
%{_bindir}/iscsi-ls
|
||||
%{_bindir}/iscsi-inq
|
||||
%{_libdir}/libiscsi.so.1.0.0
|
||||
%{_libdir}/libiscsi.so.*
|
||||
|
||||
%package devel
|
||||
Summary: iSCSI client development libraries
|
||||
@@ -90,6 +78,8 @@ development libraries for iSCSI
|
||||
%{_includedir}/iscsi/iscsi.h
|
||||
%{_includedir}/iscsi/scsi-lowlevel.h
|
||||
%{_libdir}/libiscsi.a
|
||||
%{_libdir}/libiscsi.la
|
||||
%{_libdir}/libiscsi.so
|
||||
|
||||
%changelog
|
||||
* Sat Dec 4 2010 : Version 1.0.0
|
||||
|
||||
@@ -58,14 +58,15 @@ VERSION=$(grep ^Version ${DIRNAME}/${SPECFILE} | sed -e 's/^Version:\ \+//')
|
||||
RELEASE=$(grep ^Release ${DIRNAME}/${SPECFILE} | sed -e 's/^Release:\ \+//')
|
||||
|
||||
if echo | gzip -c --rsyncable - > /dev/null 2>&1 ; then
|
||||
GZIP="gzip -9 --rsyncable"
|
||||
GZIP_ENV="-9 --rsyncable"
|
||||
else
|
||||
GZIP="gzip -9"
|
||||
GZIP_ENV="-9"
|
||||
fi
|
||||
|
||||
pushd ${TOPDIR}
|
||||
echo -n "Creating libiscsi-${VERSION}.tar.gz ... "
|
||||
git archive --prefix=libiscsi-${VERSION}/ HEAD | ${GZIP} > ${SRCDIR}/libiscsi-${VERSION}.tar.gz
|
||||
sh autogen.sh
|
||||
make dist GZIP_ENV="\"$GZIP_ENV\""
|
||||
RC=$?
|
||||
popd
|
||||
echo "Done."
|
||||
@@ -79,6 +80,7 @@ fi
|
||||
##
|
||||
## copy additional source files
|
||||
##
|
||||
cp -p ${TOPDIR}/libiscsi-${VERSION}.tar.gz ${SRCDIR}
|
||||
cp -p ${DIRNAME}/${SPECFILE} ${SPECDIR}
|
||||
|
||||
##
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
LIBS=-lpopt
|
||||
CC=gcc
|
||||
CFLAGS=-g -O0 -fPIC -Wall -W -I. -I./include -I../include "-D_U_=__attribute__((unused))"
|
||||
TESTS=0100_read10_simple.o 0101_read10_beyond_eol.o 0102_read10_0blocks.o \
|
||||
0103_read10_rdprotect.o 0104_read10_flags.o 0105_read10_invalid.o \
|
||||
0110_readcapacity10_simple.o 0111_readcapacity10_pmi.o \
|
||||
0120_read6_simple.o 0121_read6_beyond_eol.o 0122_read6_invalid.o
|
||||
|
||||
all: iscsi-test
|
||||
|
||||
iscsi-test: iscsi-test.c $(TESTS)
|
||||
$(CC) $(CFLAGS) iscsi-test.c -o iscsi-test $(TESTS) ../lib/libiscsi.a $(LIBS)
|
||||
|
||||
clean:
|
||||
rm -f *.o
|
||||
rm -f iscsi-test
|
||||
Reference in New Issue
Block a user