~ubuntu-branches/ubuntu/quantal/apt-cacher-ng/quantal-backports

« back to all changes in this revision

Viewing changes to CMakeLists.txt

  • Committer: Bazaar Package Importer
  • Author(s): Eduard Bloch
  • Date: 2011-08-01 23:40:11 UTC
  • mfrom: (1.1.29 upstream) (29.1.13 sid)
  • Revision ID: james.westby@ubuntu.com-20110801234011-2ouft5pay71773vs
Tags: 0.6.4-1
* New upstream version
  + fixes potential pipeline freeze (closes: #628995)
  + supports "soft" blacklisting of bad hosts when important files are
    missing (see keyfile in documentation, closes: #616091)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
PROJECT(ACNG)
2
 
INCLUDE_DIRECTORIES(. include ${CMAKE_BINARY_DIR} )
3
 
FILE(GLOB SRCS "source/*.cc")
4
 
 
5
 
SET(SRCS ${SRCS} 3rd-party/md5.cc)
6
 
 
7
 
#FIXME: cope with CFLAGS from makefile wrapper somehow
8
 
 
9
 
#SET(CMAKE_CXX_FLAGS " )
10
 
SET(FLAGS_DEBUG " -O0 -g -pthread ")
11
 
SET(FLAGS_OPT " -O3 -pthread -fno-exceptions  ")
12
 
SET(FLAGS_EMBED "-static -Os -pthread -fno-exceptions ")
 
1
cmake_minimum_required(VERSION 2.6)
 
2
PROJECT(ACNG CXX C)
 
3
INCLUDE_DIRECTORIES(. ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} "include")
 
4
 
 
5
SET(FLAGS_ACNG " -pthread -Wall -D_FILE_OFFSET_BITS=64 ")
 
6
 
 
7
# minimum prqs
 
8
list(APPEND AcngLdList pthread z bz2)
 
9
 
 
10
INCLUDE(CheckIncludeFiles)
 
11
INCLUDE(CheckCXXSourceCompiles)
 
12
 
 
13
#INCLUDE(FindZLIB) # broken, hangs for 10 seconds
 
14
# header check should be enough, gzip should be everywhere nowadays
 
15
#CHECK_INCLUDE_FILES("gzip.h" HAVE_ZLIB)
 
16
FIND_PATH(HAVE_ZLIB zlib.h )
 
17
if(NOT HAVE_ZLIB)
 
18
   message(FATAL_ERROR "apt-cacher-ng requires gzip library and development files ${HAVE_ZLIB}")
 
19
endif(NOT HAVE_ZLIB)
13
20
 
14
21
INCLUDE(FindBZip2)
15
 
INCLUDE(FindZLIB)
16
 
 
17
 
# make sure we get shared_ptr functionality
18
 
INCLUDE(CheckCXXSourceCompiles)
 
22
if (BZIP2_FOUND)
 
23
   SET(HAVE_LIBBZ2 1)
 
24
   MARK_AS_ADVANCED(HAVE_LIBBZ2)
 
25
else (BZIP2_FOUND)
 
26
   message(FATAL_ERROR "apt-cacher-ng requires bzip2 library and development files")
 
27
endif (BZIP2_FOUND)
 
28
 
 
29
INCLUDE_DIRECTORIES(${BZIP2_INCLUDE_DIR})
 
30
 
 
31
SET(CMAKE_REQUIRED_FLAGS "-Wl,--as-needed")
 
32
SET(TESTSRC "int main() {return 0;}")
 
33
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_WL_AS_NEEDED)
 
34
SET(CMAKE_REQUIRED_FLAGS "")
 
35
 
 
36
SET(CMAKE_REQUIRED_LIBRARIES lzma)
 
37
SET(TESTSRC "
 
38
#include <lzma.h>
 
39
lzma_stream t; int main(){ return lzma_stream_decoder (&t, 32000000, LZMA_TELL_UNSUPPORTED_CHECK | LZMA_CONCATENATED); }
 
40
")
 
41
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_LZMA)
 
42
IF(HAVE_LZMA)
 
43
   list(APPEND AcngLdList lzma)
 
44
ELSE(HAVE_LZMA)
 
45
   MESSAGE("XZ (liblzma) not found or not working, disabling support")
 
46
   SET(HAVE_LZMA )
 
47
ENDIF(HAVE_LZMA)
 
48
SET(CMAKE_REQUIRED_LIBRARIES "")
 
49
 
 
50
SET(TESTSRC "
 
51
#include <wordexp.h>
 
52
int main(int argc, char **argv) { wordexp_t p; return wordexp(*argv, &p, 0); }
 
53
")
 
54
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_WORDEXP)
 
55
 
 
56
SET(TESTSRC "
 
57
#include <glob.h>
 
58
int main(int argc, char **argv) { glob_t p; return glob(*argv, 0, 0, &p); }
 
59
")
 
60
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_GLOB)
 
61
 
 
62
SET(TESTSRC "
 
63
#define _XOPEN_SOURCE 600
 
64
#include <fcntl.h>
 
65
int testme(int fd, off_t offset, off_t len, int) { return posix_fadvise(fd, offset, len, POSIX_FADV_SEQUENTIAL); }; int main(int,char**){return testme(0,0,0,0);}
 
66
")
 
67
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_FADVISE)
 
68
# Solaris fallback
 
69
IF(NOT HAVE_FADVISE)
 
70
SET(TESTSRC "
 
71
#include <fcntl.h>
 
72
int testme(int fd, off_t offset, off_t len, int) { return posix_fadvise(fd, offset, len, POSIX_FADV_SEQUENTIAL); }; int main(int,char**){return testme(0,0,0,0);}
 
73
")
 
74
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_FADVISE)
 
75
ENDIF(NOT HAVE_FADVISE)
 
76
 
 
77
SET(TESTSRC "
 
78
#include <sys/mman.h>
 
79
int testme(void *addr, size_t length, int advice) { return posix_madvise(addr, length, advice); } int main(int,char**){return testme(0,0,0);}
 
80
")
 
81
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_MADVISE)
 
82
 
 
83
SET(TESTSRC "
 
84
#define _GNU_SOURCE
 
85
#include <linux/falloc.h>
 
86
#include <fcntl.h>
 
87
int main() { int fd=1; return fallocate(fd, FALLOC_FL_KEEP_SIZE, 1, 2); }
 
88
")
 
89
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_LINUX_FALLOCATE)
 
90
 
 
91
SET(TESTSRC "
 
92
#include <sys/sendfile.h>
 
93
int main(int argc, char **argv) { off_t yes(3); return (int) sendfile(1, 2, &yes, 4); }
 
94
")
 
95
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_LINUX_SENDFILE)
 
96
 
 
97
FIND_LIBRARY(HAVE_SOCKETLIB socket) # separate socket lib looks like Solaris-like environment
 
98
if(HAVE_SOCKETLIB)
 
99
   link_libraries(socket nsl)
 
100
endif(HAVE_SOCKETLIB)
 
101
 
 
102
INCLUDE(CheckTypeSize)
 
103
CHECK_TYPE_SIZE(int SIZE_INT)
 
104
CHECK_TYPE_SIZE(long SIZE_LONG)
 
105
 
 
106
INCLUDE(TestBigEndian)
 
107
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
 
108
 
 
109
SET(TESTSRC "
 
110
#include <memory>
 
111
int main() { return NULL != std::shared_ptr<int>(new int(1)); }
 
112
")
 
113
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_MEMORY_SPTR)
 
114
 
19
115
SET(TESTSRC "
20
116
#include <tr1/memory>
21
117
int main() { return NULL != std::tr1::shared_ptr<int>(new int(1)); }
22
118
")
23
 
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_TR1_SMART_POINTERS)
24
 
IF(NOT HAS_TR1_SMART_POINTERS)
25
 
   SET(HAS_TR1_SMART_POINTERS )
26
 
   ADD_DEFINITIONS(-DUSE_BOOST)
27
 
   SET(TESTSRC "
28
 
   #include <boost/smart_ptr.hpp>
29
 
   int main() { return NULL != boost::shared_ptr<int>(new int(1)); }
30
 
   ")
31
 
   CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_BOOST)
32
 
   IF(NOT HAS_BOOST)
33
 
      SET(HAS_BOOST )
34
 
      MESSAGE(FATAL_ERROR "No shared_ptr implementation found, install boost or modern GCC (4.x).")
35
 
   ENDIF(NOT HAS_BOOST)
36
 
ENDIF(NOT HAS_TR1_SMART_POINTERS)
37
 
 
38
 
SET(CMAKE_REQUIRED_LIBRARIES bz2)
39
 
SET(TESTSRC "
40
 
#include <bzlib.h>
41
 
bz_stream t; int main(){ return BZ2_bzDecompressInit(&t, 1, 0); }
42
 
")
43
 
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_LIBBZ2)
44
 
IF(NOT HAS_LIBBZ2)
45
 
   # MARK_AS_ADVANCED(HAS_LIBBZ2)
46
 
   SET(HAS_LIBBZ2 )
47
 
   MESSAGE(FATAL_ERROR "Unable to use libbz2 development components. Install libbz2-dev.")
48
 
ENDIF(NOT HAS_LIBBZ2)
49
 
 
50
 
SET(CMAKE_REQUIRED_LIBRARIES z)
51
 
SET(TESTSRC "
52
 
#include <zlib.h>
53
 
z_stream t; int main(){ return inflateInit2(&t, 42); }
54
 
")
55
 
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_LIBZ)
56
 
MARK_AS_ADVANCED(HAS_LIBZ)
57
 
IF(NOT HAS_LIBZ)
58
 
#   SET(HAS_LIBZ )
59
 
   MESSAGE(FATAL_ERROR "Unable to use ZLib development components. Install libz-dev.")
60
 
ENDIF(NOT HAS_LIBZ)
61
 
 
62
 
 
63
 
 
 
119
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_TR1_MEMORY)
 
120
 
 
121
set(CMAKE_REQUIRED_INCLUDES . ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
 
122
 
 
123
SET(TESTSRC "
 
124
#include <boost/smart_ptr.hpp>
 
125
int main() { return NULL != boost::shared_ptr<int>(new int(1)); }
 
126
")
 
127
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_BOOST_SMARTPTR)
 
128
set(CMAKE_REQUIRED_INCLUDES "")
 
129
 
 
130
if(NOT HAVE_BOOST_SMARTPTR)
 
131
   if(NOT HAVE_TR1_MEMORY)
 
132
      if(NOT HAVE_MEMORY_SPTR)
 
133
         message(FATAL_ERROR "Could not find a working smart pointer implementation. Please read documentation and include boost headers.")
 
134
      endif(NOT HAVE_MEMORY_SPTR)
 
135
   endif(NOT HAVE_TR1_MEMORY)
 
136
endif(NOT HAVE_BOOST_SMARTPTR)
 
137
 
 
138
######################################
 
139
# checks done, save configuration    #
 
140
######################################
 
141
 
 
142
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/acsyscap.h.in" "${CMAKE_BINARY_DIR}/acsyscap.h")
 
143
 
 
144
 
 
145
# I don't need -rdynamic
 
146
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
 
147
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
 
148
 
 
149
FILE(GLOB SRCS "${CMAKE_SOURCE_DIR}/source/*.cc")
64
150
ADD_EXECUTABLE(apt-cacher-ng ${SRCS})
65
 
TARGET_LINK_LIBRARIES(apt-cacher-ng pthread bz2 z)
66
 
 
67
 
ADD_EXECUTABLE(apt-cacher-ng-debug ${SRCS})
68
 
TARGET_LINK_LIBRARIES(apt-cacher-ng-debug pthread bz2 z)
69
 
 
70
 
SET_TARGET_PROPERTIES(apt-cacher-ng
71
 
                        PROPERTIES COMPILE_FLAGS "  ${FLAGS_OPT}  ")
72
 
SET_TARGET_PROPERTIES(apt-cacher-ng-debug
73
 
                        PROPERTIES COMPILE_FLAGS " ${FLAGS_DEBUG} ")
 
151
list(REMOVE_DUPLICATES AcngLdList)
 
152
TARGET_LINK_LIBRARIES(apt-cacher-ng ${AcngLdList})
 
153
 
 
154
SET_TARGET_PROPERTIES(apt-cacher-ng PROPERTIES COMPILE_FLAGS ${FLAGS_ACNG})
 
155
 
 
156
 
 
157
ADD_EXECUTABLE(in.acng client/client.cc)
 
158
SET_TARGET_PROPERTIES(in.acng PROPERTIES COMPILE_FLAGS ${FLAGS_ACNG})
 
159
 
 
160
IF(HAVE_WL_AS_NEEDED)
 
161
SET_TARGET_PROPERTIES(in.acng apt-cacher-ng PROPERTIES LINK_FLAGS  -Wl,--as-needed)
 
162
# funny hack, link with gcc and avoid libstdc++/libm (since no STL parts used
 
163
# there). However, it needs to be investigated - the alternative linking makes
 
164
# the binary 40kb larger, might include higher relocation costs and bigger
 
165
# chunks of unique memory while libstdc++ needs to be loaded anyway for the
 
166
# server process.
 
167
#TARGET_LINK_LIBRARIES(in.acng supc++)
 
168
#SET_TARGET_PROPERTIES(in.acng PROPERTIES LINKER_LANGUAGE C)
 
169
ENDIF(HAVE_WL_AS_NEEDED)
 
170
 
 
171
 
 
172
############################################
 
173
## Attempt to build acngfs where possible ##
 
174
############################################
 
175
 
 
176
include(FindPkgConfig)
 
177
pkg_check_modules(fuse fuse)
 
178
 
 
179
set(acngfs_cflags "${FLAGS_ACNG} -DMINIBUILD")
 
180
# what a mess... convert sepator back to space
 
181
foreach(arg ${fuse_CFLAGS})
 
182
   set(acngfs_cflags "${acngfs_cflags} ${arg}")
 
183
endforeach(arg ${fuse_CFLAGS})
 
184
 
 
185
# double-check and make sure it compiles
 
186
SET(TESTSRC "
 
187
#define _FILE_OFFSET_BITS 64
 
188
#define FUSE_USE_VERSION 26
 
189
#include <fuse.h>
 
190
int main() { return 0; }
 
191
")
 
192
SET(CMAKE_REQUIRED_FLAGS ${fuse_CFLAGS})
 
193
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_FUSE_26)
 
194
 
 
195
if(fuse_FOUND AND HAVE_FUSE_26)
 
196
ADD_EXECUTABLE(acngfs fs/httpfs.cc source/lockable.cc source/header.cc source/caddrinfo.cc source/acbuf.cc source/meta.cc source/acfg.cc source/acfg_defaults.cc)
 
197
 
 
198
#message("hm, ${acngfs_cflags}")
 
199
SET_TARGET_PROPERTIES(acngfs PROPERTIES COMPILE_FLAGS "${acngfs_cflags}" )
 
200
TARGET_LINK_LIBRARIES(acngfs ${fuse_LDFLAGS})
 
201
 
 
202
IF(HAVE_WL_AS_NEEDED)
 
203
SET_TARGET_PROPERTIES(acngfs PROPERTIES LINK_FLAGS  -Wl,--as-needed)
 
204
ENDIF(HAVE_WL_AS_NEEDED)
 
205
 
 
206
 
 
207
else(fuse_FOUND AND HAVE_FUSE_26)
 
208
   message("FUSE not found or incompatible, not building acngfs")
 
209
endif(fuse_FOUND AND HAVE_FUSE_26)