2
INCLUDE_DIRECTORIES(. include ${CMAKE_BINARY_DIR} )
3
FILE(GLOB SRCS "source/*.cc")
5
SET(SRCS ${SRCS} 3rd-party/md5.cc)
7
#FIXME: cope with CFLAGS from makefile wrapper somehow
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)
3
INCLUDE_DIRECTORIES(. ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} "include")
5
SET(FLAGS_ACNG " -pthread -Wall -D_FILE_OFFSET_BITS=64 ")
8
list(APPEND AcngLdList pthread z bz2)
10
INCLUDE(CheckIncludeFiles)
11
INCLUDE(CheckCXXSourceCompiles)
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 )
18
message(FATAL_ERROR "apt-cacher-ng requires gzip library and development files ${HAVE_ZLIB}")
17
# make sure we get shared_ptr functionality
18
INCLUDE(CheckCXXSourceCompiles)
24
MARK_AS_ADVANCED(HAVE_LIBBZ2)
26
message(FATAL_ERROR "apt-cacher-ng requires bzip2 library and development files")
29
INCLUDE_DIRECTORIES(${BZIP2_INCLUDE_DIR})
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 "")
36
SET(CMAKE_REQUIRED_LIBRARIES lzma)
39
lzma_stream t; int main(){ return lzma_stream_decoder (&t, 32000000, LZMA_TELL_UNSUPPORTED_CHECK | LZMA_CONCATENATED); }
41
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_LZMA)
43
list(APPEND AcngLdList lzma)
45
MESSAGE("XZ (liblzma) not found or not working, disabling support")
48
SET(CMAKE_REQUIRED_LIBRARIES "")
52
int main(int argc, char **argv) { wordexp_t p; return wordexp(*argv, &p, 0); }
54
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_WORDEXP)
58
int main(int argc, char **argv) { glob_t p; return glob(*argv, 0, 0, &p); }
60
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_GLOB)
63
#define _XOPEN_SOURCE 600
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);}
67
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_FADVISE)
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);}
74
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_FADVISE)
75
ENDIF(NOT HAVE_FADVISE)
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);}
81
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_MADVISE)
85
#include <linux/falloc.h>
87
int main() { int fd=1; return fallocate(fd, FALLOC_FL_KEEP_SIZE, 1, 2); }
89
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_LINUX_FALLOCATE)
92
#include <sys/sendfile.h>
93
int main(int argc, char **argv) { off_t yes(3); return (int) sendfile(1, 2, &yes, 4); }
95
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_LINUX_SENDFILE)
97
FIND_LIBRARY(HAVE_SOCKETLIB socket) # separate socket lib looks like Solaris-like environment
99
link_libraries(socket nsl)
100
endif(HAVE_SOCKETLIB)
102
INCLUDE(CheckTypeSize)
103
CHECK_TYPE_SIZE(int SIZE_INT)
104
CHECK_TYPE_SIZE(long SIZE_LONG)
106
INCLUDE(TestBigEndian)
107
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
111
int main() { return NULL != std::shared_ptr<int>(new int(1)); }
113
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_MEMORY_SPTR)
20
116
#include <tr1/memory>
21
117
int main() { return NULL != std::tr1::shared_ptr<int>(new int(1)); }
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)
28
#include <boost/smart_ptr.hpp>
29
int main() { return NULL != boost::shared_ptr<int>(new int(1)); }
31
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_BOOST)
34
MESSAGE(FATAL_ERROR "No shared_ptr implementation found, install boost or modern GCC (4.x).")
36
ENDIF(NOT HAS_TR1_SMART_POINTERS)
38
SET(CMAKE_REQUIRED_LIBRARIES bz2)
41
bz_stream t; int main(){ return BZ2_bzDecompressInit(&t, 1, 0); }
43
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_LIBBZ2)
45
# MARK_AS_ADVANCED(HAS_LIBBZ2)
47
MESSAGE(FATAL_ERROR "Unable to use libbz2 development components. Install libbz2-dev.")
50
SET(CMAKE_REQUIRED_LIBRARIES z)
53
z_stream t; int main(){ return inflateInit2(&t, 42); }
55
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_LIBZ)
56
MARK_AS_ADVANCED(HAS_LIBZ)
59
MESSAGE(FATAL_ERROR "Unable to use ZLib development components. Install libz-dev.")
119
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_TR1_MEMORY)
121
set(CMAKE_REQUIRED_INCLUDES . ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
124
#include <boost/smart_ptr.hpp>
125
int main() { return NULL != boost::shared_ptr<int>(new int(1)); }
127
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_BOOST_SMARTPTR)
128
set(CMAKE_REQUIRED_INCLUDES "")
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)
138
######################################
139
# checks done, save configuration #
140
######################################
142
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/acsyscap.h.in" "${CMAKE_BINARY_DIR}/acsyscap.h")
145
# I don't need -rdynamic
146
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
147
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
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)
67
ADD_EXECUTABLE(apt-cacher-ng-debug ${SRCS})
68
TARGET_LINK_LIBRARIES(apt-cacher-ng-debug pthread bz2 z)
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})
154
SET_TARGET_PROPERTIES(apt-cacher-ng PROPERTIES COMPILE_FLAGS ${FLAGS_ACNG})
157
ADD_EXECUTABLE(in.acng client/client.cc)
158
SET_TARGET_PROPERTIES(in.acng PROPERTIES COMPILE_FLAGS ${FLAGS_ACNG})
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
167
#TARGET_LINK_LIBRARIES(in.acng supc++)
168
#SET_TARGET_PROPERTIES(in.acng PROPERTIES LINKER_LANGUAGE C)
169
ENDIF(HAVE_WL_AS_NEEDED)
172
############################################
173
## Attempt to build acngfs where possible ##
174
############################################
176
include(FindPkgConfig)
177
pkg_check_modules(fuse fuse)
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})
185
# double-check and make sure it compiles
187
#define _FILE_OFFSET_BITS 64
188
#define FUSE_USE_VERSION 26
190
int main() { return 0; }
192
SET(CMAKE_REQUIRED_FLAGS ${fuse_CFLAGS})
193
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAVE_FUSE_26)
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)
198
#message("hm, ${acngfs_cflags}")
199
SET_TARGET_PROPERTIES(acngfs PROPERTIES COMPILE_FLAGS "${acngfs_cflags}" )
200
TARGET_LINK_LIBRARIES(acngfs ${fuse_LDFLAGS})
202
IF(HAVE_WL_AS_NEEDED)
203
SET_TARGET_PROPERTIES(acngfs PROPERTIES LINK_FLAGS -Wl,--as-needed)
204
ENDIF(HAVE_WL_AS_NEEDED)
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)