Hello,
In preparation for src/{ICAP,eCAP} move to src/adaptation, I needed
to move AsyncJob.* files away from src/ICAP/. I have decided to put them
into the new src/base directory until a better place is found. While
adding src/base, I discovered and started to fix a few problems with
adding more src/ subdirectories.
These changes are small steps towards a nice layout. I wanted to post
them anyway because they affect a couple of strange places in our
Makefiles (e.g., src/ip found in the top-level Makefile and seemingly
bogus cf_gen dependencies).
I also wanted to ask whether AsyncJob and related Async* classes belong
to src/base/ or their own subdirectory. If we want a separate dir,
should we use src/jobs/ or perhaps src/calls (keeping in mind that not
all calls are between jobs and that jobs do more than just async calls)?
Probably not src/async as that clashes with I/O APIs.
Detailed change log is below.
Thank you,
Alex.
=== modified file 'Makefile.am'
Removed src/ip from the top-level SUBDIRS list. That directory is not
a top-level subdirectory and it is already listed in src/Makefile.am.
The commit message introducing the change talked about libip being a "POD
library". I do not know what that is, but, hopefully, we do not really
need to
make this kind of exceptions for any src/ libraries.
=== added file 'src/common.am'
Copied common Makefile.am stuff seen in a few Makefile.ams to a single
Makefile "header". This avoids evil code duplication. This file should be
included by most Makefile.ams inside src/. Needs more work as some of the
copied code is questionable and more code can probably be extracted
here. See
XXXs.
TODO: The .h dependency test script part seems pretty universal, but if
many subdirs need to customize it, we may want to put it into a separate
Makefile "header".
=== modified file 'src/AsyncJobCalls.h'
=== modified file 'src/BodyPipe.h'
=== modified file 'src/Server.h'
=== modified file 'src/adaptation/AccessCheck.h'
=== modified file 'src/adaptation/Initiate.h'
=== modified file 'src/adaptation/Initiator.h'
=== modified file 'src/client_side.h'
=== modified file 'src/client_side_request.h'
Moved src/ICAP/AsyncJob.* to src/base/ to prepare for the src/ICAP move to
src/adaptation/icap.
=== added dir 'src/base'
=== added dir 'src/base/Makefile.am'
=== modified file 'src/Makefile.am'
=== modified file 'configure.in'
Added src/base directory for fundamental, commonly-used code pieces that are
not large enough to warrant their own directories. Currently base/ contains
the beginning of AsyncCalls hierarchy, which may eventually get its own
directory.
=== modified file 'src/Makefile.am'
Reduced cf_gen dependencies so that it can be built before subdirectories,
as, apparently, required by BUILT_SOURCES.
Moved some libraries that are used by virtually all executables to
COMMON_LIBS.
The list will probably grow as we try to reduce the insane complexity of the
current Makefile.am.
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [email protected]\
# yh0tbx1cwwao6h5j
# target_branch: http://www.squid-cache.org/bzr/squid3/trunk
# testament_sha1: 7fa69373f801658a092a1d124cc3dbab90f00e7a
# timestamp: 2009-02-19 00:23:41 -0700
# base_revision_id: [email protected]\
# tfo2bh5i9obd9csi
#
# Begin patch
=== modified file 'Makefile.am'
--- Makefile.am 2009-02-14 13:18:34 +0000
+++ Makefile.am 2009-02-19 07:11:38 +0000
@@ -3,7 +3,7 @@
AUTOMAKE_OPTIONS = dist-bzip2 subdir-objects 1.5 foreign
DIST_SUBDIRS = compat lib snmplib scripts src icons errors contrib doc helpers test-suite tools
-SUBDIRS = compat lib @makesnmplib@ scripts src/ip src icons errors doc helpers test-suite tools
+SUBDIRS = compat lib @makesnmplib@ scripts src icons errors doc helpers test-suite tools
DISTCLEANFILES = include/stamp-h include/stamp-h[0-9]*
DEFAULT_PINGER = $(libexecdir)/`echo pinger | sed '$(transform);s/$$/$(EXEEXT)/'`
=== modified file 'configure.in'
--- configure.in 2009-02-18 09:45:46 +0000
+++ configure.in 2009-02-19 07:15:47 +0000
@@ -3795,6 +3795,7 @@
scripts/RunCache \
scripts/RunAccel \
src/Makefile \
+ src/base/Makefile \
src/fs/Makefile \
src/repl/Makefile \
src/auth/Makefile \
=== modified file 'src/AsyncJobCalls.h'
--- src/AsyncJobCalls.h 2009-01-21 03:47:47 +0000
+++ src/AsyncJobCalls.h 2009-02-19 07:17:31 +0000
@@ -6,7 +6,7 @@
#ifndef SQUID_ASYNCJOBCALLS_H
#define SQUID_ASYNCJOBCALLS_H
-#include "ICAP/AsyncJob.h"
+#include "base/AsyncJob.h"
/*
* *MemFunT are member function (i.e., class method) wrappers. They store
=== modified file 'src/BodyPipe.h'
--- src/BodyPipe.h 2008-10-10 08:02:53 +0000
+++ src/BodyPipe.h 2009-02-19 07:17:31 +0000
@@ -4,7 +4,7 @@
#include "MemBuf.h"
#include "AsyncCall.h"
-#include "ICAP/AsyncJob.h"
+#include "base/AsyncJob.h"
class BodyPipe;
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2009-02-18 10:58:53 +0000
+++ src/Makefile.am 2009-02-19 07:16:14 +0000
@@ -32,7 +32,7 @@
TESTS=$(check_PROGRAMS)
check_PROGRAMS=
-SUBDIRS = fs repl auth icmp ip
+SUBDIRS = base fs repl auth icmp ip
if USE_ADAPTATION
SUBDIRS += adaptation
@@ -210,6 +210,13 @@
noinst_LIBRARIES = @DISK_LIBS@
noinst_LTLIBRARIES = libsquid.la libauth.la
+# libraries used by many targets
+COMMON_LIBS = \
+ libsquid.la \
+ libauth.la \
+ base/libbase.la \
+ ip/libip.la
+
INCLUDES = \
-I$(top_srcdir) \
-I$(top_srcdir)/src \
@@ -247,18 +254,10 @@
@DISK_PROGRAMS@ \
$(UNLINKD)
-cf_gen_SOURCES = \
- cf_gen.cc \
- defines.h \
- debug.cc \
- time.cc
-
-nodist_cf_gen_SOURCES = globals.cc
+cf_gen_SOURCES = cf_gen.cc
nodist_cf_gen_HEADER = cf_gen_defines.h
cf_gen_LDADD= \
- libsquid.la \
- libauth.la \
- ip/libip.la \
+ ../compat/libcompat.la \
-L../lib -lmiscutil \
@XTRA_LIBS@ \
@EPOLL_LIBS@ \
@@ -432,8 +431,6 @@
CommCalls.h \
DescriptorSet.cc \
DescriptorSet.h \
- ICAP/AsyncJob.cc \
- ICAP/AsyncJob.h \
SquidConfig.cc \
TextException.cc \
TextException.h
@@ -695,10 +692,8 @@
string_arrays.c
squid_LDADD = \
- libsquid.la \
- libauth.la \
+ $(COMMON_LIBS) \
icmp/libicmp.la icmp/libicmp-core.la \
- ip/libip.la \
-L../lib \
@XTRA_OBJS@ \
@DISK_LINKOBJS@ \
@@ -921,10 +916,8 @@
wordlist.cc \
$(WIN32_SOURCE)
ufsdump_LDADD = \
- libsquid.la \
- libauth.la \
+ $(COMMON_LIBS) \
icmp/libicmp.la icmp/libicmp-core.la \
- ip/libip.la \
@XTRA_OBJS@ \
@REPL_OBJS@ \
@STORE_OBJS@ \
@@ -968,7 +961,7 @@
data_DATA = \
mib.txt
-LDADD = libsquid.la libauth.la ip/libip.la -L../lib -lmiscutil @XTRA_LIBS@ @EPOLL_LIBS@ @MINGW_LIBS@
+LDADD = $(COMMON_LIBS) -L../lib -lmiscutil @XTRA_LIBS@ @EPOLL_LIBS@ @MINGW_LIBS@
EXTRA_DIST = \
cf_gen_defines \
@@ -1251,9 +1244,7 @@
$(TESTSOURCES)
tests_testAuth_LDADD= \
- libsquid.la \
- libauth.la \
- ip/libip.la \
+ $(COMMON_LIBS) \
@AUTH_LINKOBJS@ @AUTH_OBJS@ \
-L../lib -lmiscutil \
@REGEXLIB@ \
@@ -1325,9 +1316,7 @@
nodist_tests_testACLMaxUserIP_SOURCES= \
$(TESTSOURCES)
tests_testACLMaxUserIP_LDADD= \
- libsquid.la \
- libauth.la \
- ip/libip.la \
+ $(COMMON_LIBS) \
-L../lib -lmiscutil \
@REGEXLIB@ \
@SQUID_CPPUNIT_LIBS@ \
@@ -1490,10 +1479,8 @@
repl_modules.cc \
string_arrays.c
tests_testCacheManager_LDADD = \
- libsquid.la \
- libauth.la \
+ $(COMMON_LIBS) \
icmp/libicmp.la icmp/libicmp-core.la \
- ip/libip.la \
@REPL_OBJS@ \
${ADAPTATION_LIBS} \
@REGEXLIB@ \
@@ -1517,8 +1504,7 @@
nodist_tests_testDiskIO_SOURCES= \
$(SWAP_TEST_GEN_SOURCES)
tests_testDiskIO_LDADD = \
- ip/libip.la \
- libsquid.la \
+ $(COMMON_LIBS) \
@DISK_LIBS@ \
$(SWAP_TEST_LDADD) \
SquidConfig.o
@@ -1668,10 +1654,8 @@
repl_modules.cc \
string_arrays.c
tests_testEvent_LDADD = \
- libsquid.la \
- libauth.la \
+ $(COMMON_LIBS) \
icmp/libicmp.la icmp/libicmp-core.la \
- ip/libip.la \
@REPL_OBJS@ \
${ADAPTATION_LIBS} \
@REGEXLIB@ \
@@ -1825,10 +1809,8 @@
repl_modules.cc \
string_arrays.c
tests_testEventLoop_LDADD = \
- libsquid.la \
- libauth.la \
+ $(COMMON_LIBS) \
icmp/libicmp.la icmp/libicmp-core.la \
- ip/libip.la \
@REPL_OBJS@ \
${ADAPTATION_LIBS} \
@REGEXLIB@ \
@@ -1977,10 +1959,8 @@
repl_modules.cc \
string_arrays.c
tests_test_http_range_LDADD = \
- libsquid.la \
- libauth.la \
+ $(COMMON_LIBS) \
icmp/libicmp.la icmp/libicmp-core.la \
- ip/libip.la \
@REPL_OBJS@ \
@STORE_OBJS@ \
${ADAPTATION_LIBS} \
@@ -2135,10 +2115,8 @@
repl_modules.cc \
string_arrays.c
tests_testHttpRequest_LDADD = \
- libsquid.la \
- libauth.la \
+ $(COMMON_LIBS) \
icmp/libicmp.la icmp/libicmp-core.la \
- ip/libip.la \
@REPL_OBJS@ \
${ADAPTATION_LIBS} \
@REGEXLIB@ \
@@ -2226,9 +2204,7 @@
$(STORE_TEST_GEN_SOURCES)
tests_testStore_LDADD= \
- libsquid.la \
- libauth.la \
- ip/libip.la \
+ $(COMMON_LIBS) \
-L../lib -lmiscutil \
@REGEXLIB@ \
@SQUID_CPPUNIT_LIBS@ \
@@ -2250,8 +2226,7 @@
nodist_tests_testString_SOURCES = \
$(TESTSOURCES)
tests_testString_LDADD = \
- libsquid.la \
- ip/libip.la \
+ $(COMMON_LIBS) \
-L../lib -lmiscutil \
@REGEXLIB@ \
@SQUID_CPPUNIT_LIBS@ \
@@ -2296,7 +2271,6 @@
$(DISKIO_GEN_SOURCE)
SWAP_TEST_LDADD = \
- libauth.la \
@REGEXLIB@ \
@STORE_LINKOBJS@ \
@STORE_OBJS@ \
@@ -2322,8 +2296,7 @@
nodist_tests_testUfs_SOURCES = \
$(SWAP_TEST_GEN_SOURCES)
tests_testUfs_LDADD = \
- libsquid.la \
- ip/libip.la \
+ $(COMMON_LIBS) \
$(SWAP_TEST_LDADD) \
@SSLLIB@
tests_testUfs_LDFLAGS = $(LIBADD_DL)
@@ -2500,10 +2473,8 @@
repl_modules.cc \
string_arrays.c
tests_testURL_LDADD = \
- libsquid.la \
- libauth.la \
+ $(COMMON_LIBS) \
icmp/libicmp.la icmp/libicmp-core.la \
- ip/libip.la \
@REGEXLIB@ \
@REPL_OBJS@ \
${ADAPTATION_LIBS} \
=== modified file 'src/Server.h'
--- src/Server.h 2009-01-21 03:47:47 +0000
+++ src/Server.h 2009-02-19 07:17:31 +0000
@@ -37,7 +37,7 @@
#include "StoreIOBuffer.h"
#include "forward.h"
#include "BodyPipe.h"
-#include "ICAP/AsyncJob.h"
+#include "base/AsyncJob.h"
#include "CommCalls.h"
#if USE_ADAPTATION
=== modified file 'src/adaptation/AccessCheck.h'
--- src/adaptation/AccessCheck.h 2008-10-10 08:02:53 +0000
+++ src/adaptation/AccessCheck.h 2009-02-19 07:17:31 +0000
@@ -1,7 +1,7 @@
#ifndef SQUID_ADAPTATION__ACCESS_CHECK_H
#define SQUID_ADAPTATION__ACCESS_CHECK_H
-#include "ICAP/AsyncJob.h"
+#include "base/AsyncJob.h"
#include "adaptation/Elements.h"
#include "adaptation/forward.h"
=== modified file 'src/adaptation/Initiate.h'
--- src/adaptation/Initiate.h 2008-10-10 08:02:53 +0000
+++ src/adaptation/Initiate.h 2009-02-19 07:17:31 +0000
@@ -2,7 +2,7 @@
#define SQUID_ADAPTATION__INITIATE_H
#include "AsyncCall.h"
-#include "ICAP/AsyncJob.h"
+#include "base/AsyncJob.h"
#include "adaptation/forward.h"
class HttpMsg;
=== modified file 'src/adaptation/Initiator.h'
--- src/adaptation/Initiator.h 2008-10-10 08:02:53 +0000
+++ src/adaptation/Initiator.h 2009-02-19 07:17:31 +0000
@@ -1,7 +1,7 @@
#ifndef SQUID_ADAPTATION__INITIATOR_H
#define SQUID_ADAPTATION__INITIATOR_H
-#include "ICAP/AsyncJob.h"
+#include "base/AsyncJob.h"
#include "adaptation/forward.h"
/*
=== added directory 'src/base'
=== renamed file 'src/ICAP/AsyncJob.cc' => 'src/base/AsyncJob.cc'
=== renamed file 'src/ICAP/AsyncJob.h' => 'src/base/AsyncJob.h'
--- src/ICAP/AsyncJob.h 2009-01-21 03:47:47 +0000
+++ src/base/AsyncJob.h 2009-02-19 07:17:31 +0000
@@ -5,9 +5,6 @@
#ifndef SQUID_ASYNC_JOB_H
#define SQUID_ASYNC_JOB_H
-/// \todo move src/ICAP/AsyncJob.* to src/
-
-
#include "AsyncCall.h"
#include "TextException.h"
=== added file 'src/base/Makefile.am'
--- src/base/Makefile.am 1970-01-01 00:00:00 +0000
+++ src/base/Makefile.am 2009-02-19 07:15:47 +0000
@@ -0,0 +1,8 @@
+
+include $(top_srcdir)/src/common.am
+
+noinst_LTLIBRARIES = libbase.la
+
+libbase_la_SOURCES = \
+ AsyncJob.h \
+ AsyncJob.cc
=== modified file 'src/client_side.h'
--- src/client_side.h 2009-01-21 03:47:47 +0000
+++ src/client_side.h 2009-02-19 07:17:31 +0000
@@ -37,7 +37,7 @@
#include "StoreIOBuffer.h"
#include "BodyPipe.h"
#include "RefCount.h"
-#include "ICAP/AsyncJob.h"
+#include "base/AsyncJob.h"
#include "CommCalls.h"
class ConnStateData;
=== modified file 'src/client_side_request.h'
--- src/client_side_request.h 2009-01-21 03:47:47 +0000
+++ src/client_side_request.h 2009-02-19 07:17:31 +0000
@@ -41,7 +41,7 @@
#include "client_side.h"
#include "AccessLogEntry.h"
#include "dlink.h"
-#include "ICAP/AsyncJob.h"
+#include "base/AsyncJob.h"
#if USE_ADAPTATION
#include "adaptation/forward.h"
=== added file 'src/common.am'
--- src/common.am 1970-01-01 00:00:00 +0000
+++ src/common.am 2009-02-19 07:14:08 +0000
@@ -0,0 +1,37 @@
+# Settings common to many Squid Makefiles
+
+# This file should be included first in all src/subdir/Makefile.am
+# so it must not contain stuff specific to or bad for some subdirectories.
+
+# TODO: make this set by configure?
+AM_CFLAGS = @SQUID_CFLAGS@
+AM_CXXFLAGS = @SQUID_CXXFLAGS@
+DEFS = @DEFS@
+
+# so that others can always use += for this variable
+CLEANFILES =
+
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/src \
+ -I$(top_builddir)/lib \
+ @SQUID_CPPUNIT_INC@
+
+# make all compiled sources depend on generated files
+# XXX: Do we really need this? Does auto-dependency tracking work?
+# XXX: And should not autoconf be in $(top_builddir)?
+$(OBJS): $(top_srcdir)/include/version.h $(top_srcdir)/include/autoconf.h
+
+check_PROGRAMS = testHeaders
+TESTS = $(check_PROGRAMS)
+
+## Special Universal .h dependency test script
+## aborts build process on errors
+testHeaders: $(srcdir)/*.h
+ $(SHELL) $(top_srcdir)/test-suite/testheaders.sh "$(CXXCOMPILE)" "$(srcdir)/" || exit 1
+
+## No such file...
+testHeaders.c:
+ touch testHeaders.c
+CLEANFILES += testHeaders.c
# Begin bundle
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