Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 372 lines (271 sloc) 10.441 kB
43cc089 @aristidb build: add license headers
aristidb authored
1 # vim:ts=4:sw=4:expandtab:autoindent:
2 #
3 # Copyright (c) 2008, 2009 Aristid Breitkreuz, Ash Berlin, Ruediger Sonderfeld
4 #
5 # Permission is hereby granted, free of charge, to any person obtaining a copy
6 # of this software and associated documentation files (the "Software"), to deal
7 # in the Software without restriction, including without limitation the rights
8 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 # copies of the Software, and to permit persons to whom the Software is
10 # furnished to do so, subject to the following conditions:
11
12 # The above copyright notice and this permission notice shall be included in
13 # all copies or substantial portions of the Software.
14
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 # THE SOFTWARE.
22 #
23
bff9209 @aristidb build: code & output style of CMakeLists.txt
aristidb authored
24 PROJECT(Flusspferd CXX)
fc351d2 @aristidb build: add PROJECT() line
aristidb authored
25
720d7ff @aristidb build: use FindBoost module of cmake 2.6
aristidb authored
26 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
27
3b76466 @aristidb build: at least improve the syntax a little bit
aristidb authored
28 SET (CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
0fe9db4 @aristidb build: add local FindBoost.cmake
aristidb authored
29 SET (CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules)
3b76466 @aristidb build: at least improve the syntax a little bit
aristidb authored
30
4a3644b @aristidb build: start trying cmake
aristidb authored
31 IF(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR})
bff9209 @aristidb build: code & output style of CMakeLists.txt
aristidb authored
32 MESSAGE(FATAL_ERROR "In-source builds are not permitted. Make a separate folder for building:\nmkdir build; cd build; cmake ..\nBefore that, remove the files that cmake just created:\nrm -rf CMakeCache.txt CMakeFiles")
1155c22 @aristidb build: search for boost
aristidb authored
33 ENDIF()
34
16119fc @aristidb build: set LIBRARY_ and EXECUTABLE_OUTPUT_PATH
aristidb authored
35 SET (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
36 SET (EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
37
80fc705 @aristidb build: improve installation procedure for libflusspferd and flusspfer…
aristidb authored
38 SET (INSTALL_EXECUTABLES_PATH ${CMAKE_INSTALL_PREFIX}/bin)
39 SET (INSTALL_LIBRARIES_PATH ${CMAKE_INSTALL_PREFIX}/lib)
0312cd8 @aristidb build: install so much that the installed flusspferd binary works
aristidb authored
40 SET (INSTALL_LIBDATA_PATH ${CMAKE_INSTALL_PREFIX}/lib/flusspferd)
864fc1a @aristidb build: install IO, XML and plugins
aristidb authored
41 SET (INSTALL_MODULES_PATH ${CMAKE_INSTALL_PREFIX}/lib/flusspferd/modules)
5c221d9 @aristidb build: install headers
aristidb authored
42 SET (INSTALL_HEADERS_PATH ${CMAKE_INSTALL_PREFIX}/include)
0312cd8 @aristidb build: install so much that the installed flusspferd binary works
aristidb authored
43 SET (INSTALL_ETC_PATH ${CMAKE_INSTALL_PREFIX}/etc)
80fc705 @aristidb build: improve installation procedure for libflusspferd and flusspfer…
aristidb authored
44
1c2a381 @aristidb build: cmake now recognizes flusspferd's version
aristidb authored
45 EXECUTE_PROCESS(
d4b27b6 @aristidb build: fix typo
aristidb authored
46 COMMAND "${Flusspferd_SOURCE_DIR}/flusspferd-version.sh"
47 WORKING_DIRECTORY "${Flusspferd_SOURCE_DIR}"
1c2a381 @aristidb build: cmake now recognizes flusspferd's version
aristidb authored
48 OUTPUT_VARIABLE FLUSSPFERD_VERSION
49 OUTPUT_STRIP_TRAILING_WHITESPACE)
50
720d7ff @aristidb build: use FindBoost module of cmake 2.6
aristidb authored
51 ADD_DEFINITIONS("-DFLUSSPFERD_VERSION=\"${FLUSSPFERD_VERSION}\"")
52 ADD_DEFINITIONS("-DINSTALL_PREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
2b6333a @aristidb build: compile libflusspferd
aristidb authored
53
bff9209 @aristidb build: code & output style of CMakeLists.txt
aristidb authored
54 MESSAGE(STATUS "Flusspferd Version " ${FLUSSPFERD_VERSION})
1c2a381 @aristidb build: cmake now recognizes flusspferd's version
aristidb authored
55
7541210 @aristidb build: longer divider comment lines
aristidb authored
56 #############################################################################
f2ba500 @aristidb build: check for POSIX
aristidb authored
57
58 INCLUDE (CheckIncludeFile)
59 INCLUDE (CheckCXXCompilerFlag)
60 INCLUDE (CheckCXXSourceCompiles)
61 INCLUDE (CheckCXXSourceRuns)
62 INCLUDE (FindPkgConfig)
63
3622957 @aristidb build: comment line was too short
aristidb authored
64 ## Compiler options #########################################################
6f5a0f4 @aristidb build: add section for compiler options
aristidb authored
65
66 IF (CMAKE_COMPILER_IS_GNUCXX)
67 OPTION (ENABLE_DEBUG_WARNINGS "Enable -Wpadded and -Weffc++" OFF)
68
69 ADD_DEFINITIONS ("-pedantic-errors -Wall -Wextra -Wconversion"
70 "-Wfloat-equal -Wredundant-decls -Wstrict-null-sentinel -Winit-self"
71 "-Woverloaded-virtual -Wnon-virtual-dtor -Wctor-dtor-privacy"
2b6333a @aristidb build: compile libflusspferd
aristidb authored
72 "-Wsign-promo -Wstrict-aliasing=1")
6f5a0f4 @aristidb build: add section for compiler options
aristidb authored
73
74 IF(ENABLE_DEBUG_WARNINGS)
75 ADD_DEFINITIONS("-Wpadded -Weffc++")
76 ENDIF()
77
78 ADD_DEFINITIONS(-D BOOST_FILESYSTEM_NO_DEPRECATED)
79
8ef07a2 @aristidb build: do NOT use -fomit-frame-pointer
aristidb authored
80 SET (CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
6f5a0f4 @aristidb build: add section for compiler options
aristidb authored
81 SET (CMAKE_CXX_FLAGS_DEBUG "-g")
82
83 ADD_DEFINITIONS ("-Wno-long-long -ansi")
84
85 SET (CMAKE_REQUIRED_FLAGS "")
86 ELSEIF (MSVC)
87 ADD_DEFINITIONS ("/W3 /wd4512 /wd4355 /wd4800 /wd4996 /wd4714 /EHa")
88 SET (WINLIBS projects/windows/lib32)
89 SET (WININCLUDES ${CMAKE_SOURCE_DIR}/${WINLIBS})
90 ENDIF ()
91
92 INCLUDE_DIRECTORIES (${Flusspferd_SOURCE_DIR}/include)
93
7541210 @aristidb build: longer divider comment lines
aristidb authored
94 ## libdl ####################################################################
467e215 @aristidb build: find libedit
aristidb authored
95
872fed4 @aristidb build: add FindDL.cmake
aristidb authored
96 SET(DL_REQUIRED TRUE)
97 FIND_PACKAGE(DL)
98 INCLUDE_DIRECTORIES(${DL_INCLUDE_DIR})
467e215 @aristidb build: find libedit
aristidb authored
99
7541210 @aristidb build: longer divider comment lines
aristidb authored
100 ## Boost ####################################################################
f2ba500 @aristidb build: check for POSIX
aristidb authored
101
720d7ff @aristidb build: use FindBoost module of cmake 2.6
aristidb authored
102 SET(Boost_USE_MULTITHREADED ON)
103
672dc53 @aristidb build: enable Boost_FIND_REQUIRED
aristidb authored
104 SET(Boost_FIND_REQUIRED TRUE)
105
1155c22 @aristidb build: search for boost
aristidb authored
106 FIND_PACKAGE(Boost 1.36.0 COMPONENTS
107 unit_test_framework
108 thread
109 filesystem
110 system)
111
f858932 @aristidb build: check Boost include directory
aristidb authored
112 IF(Boost_INCLUDE_DIR)
4db3743 @aristidb build: replace tabs by whitespace
aristidb authored
113 INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
f858932 @aristidb build: check Boost include directory
aristidb authored
114 ELSE()
b7fc71f @aristidb build: improve warning messages when boost was not found
aristidb authored
115 MESSAGE(FATAL_ERROR "Boost headers not found. You will have to specify them in your build environment or you can use -DBOOST_ROOT or -DBOOST_INCLUDE_DIR to tell cmake where your boost installation is.")
35ab338 @aristidb build: check for Boost include directories and libraries, with fatal …
aristidb authored
116 ENDIF()
117
118 IF(Boost_LIBRARY_DIRS)
4db3743 @aristidb build: replace tabs by whitespace
aristidb authored
119 LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
35ab338 @aristidb build: check for Boost include directories and libraries, with fatal …
aristidb authored
120 ELSE()
b7fc71f @aristidb build: improve warning messages when boost was not found
aristidb authored
121 MESSAGE(FATAL_ERROR "Boost libraries not found. Please set -DBOOST_ROOT or -DBOOST_LIBRARY_DIR manually.")
f858932 @aristidb build: check Boost include directory
aristidb authored
122 ENDIF()
123
1155c22 @aristidb build: search for boost
aristidb authored
124 IF(NOT Boost_FOUND)
4db3743 @aristidb build: replace tabs by whitespace
aristidb authored
125 MESSAGE(STATUS "Boost not found!")
3b76466 @aristidb build: at least improve the syntax a little bit
aristidb authored
126 ENDIF()
f2ba500 @aristidb build: check for POSIX
aristidb authored
127
7541210 @aristidb build: longer divider comment lines
aristidb authored
128 ## POSIX ####################################################################
f2ba500 @aristidb build: check for POSIX
aristidb authored
129
130 CHECK_CXX_SOURCE_RUNS(
4db3743 @aristidb build: replace tabs by whitespace
aristidb authored
131 "#include <unistd.h>
132 #include <cstdlib>
133 int main()
134 {
135 return _POSIX_VERSION >= 200100
136 ? EXIT_SUCCESS
137 : EXIT_FAILURE;
138 }"
2b6333a @aristidb build: compile libflusspferd
aristidb authored
139 FLUSSPFERD_HAVE_POSIX)
140
7541210 @aristidb build: longer divider comment lines
aristidb authored
141 ## Spidermonkey #############################################################
2b6333a @aristidb build: compile libflusspferd
aristidb authored
142
3a34849 @aristidb build: use Spidermonkey_REQUIRED variable
aristidb authored
143 SET(Spidermonkey_REQUIRED TRUE)
4af245f @aristidb build: move Spidermonkey search into FindSpidermonkey.cmake module
aristidb authored
144 FIND_PACKAGE(Spidermonkey)
b85e598 @aristidb build: add variable for spidermonkey include directory
aristidb authored
145
4af245f @aristidb build: move Spidermonkey search into FindSpidermonkey.cmake module
aristidb authored
146 IF(NOT SPIDERMONKEY_UTF8)
147 MESSAGE(FATAL_ERROR "Spidermonkey UTF8 support required but not found")
72101ab @aristidb build: check spidermonkey for UTF8 support
aristidb authored
148 ENDIF()
149
be9fa93 @aristidb build: actually add SPIDERMONKEY_INCLUDE_DIR to include path
aristidb authored
150 INCLUDE_DIRECTORIES(${SPIDERMONKEY_INCLUDE_DIR})
cc021ac @aristidb build: check spidermonkey for JS_THREADSAFE
aristidb authored
151 ADD_DEFINITIONS(${SPIDERMONKEY_DEFINITIONS})
152
7541210 @aristidb build: longer divider comment lines
aristidb authored
153 ## libedit ##################################################################
467e215 @aristidb build: find libedit
aristidb authored
154
155 PKG_CHECK_MODULES(LIBEDIT libedit)
156
157 IF(LIBEDIT_FOUND)
158 ADD_DEFINITIONS(-DHAVE_EDITLINE)
159 ENDIF()
160
77ed9ea @aristidb build: add sqlite3 plugin
aristidb authored
161 ## libxml2 ##################################################################
4ea5d2a @aristidb build: search for libxml2
aristidb authored
162
163 PKG_CHECK_MODULES(LIBXML2 libxml-2.0>=2.6.0)
164
165 IF(LIBXML2_FOUND)
166 ADD_DEFINITIONS(-DHAVE_LIBXML2 ${LIBXML2_CFLAGS})
167 ENDIF()
168
77ed9ea @aristidb build: add sqlite3 plugin
aristidb authored
169 ## sqlite3 ##################################################################
170
171 PKG_CHECK_MODULES(SQLITE3 sqlite3>=3.4.0)
172
f626e4d @aristidb build: add gmp plugin
aristidb authored
173 ## libcurl ##################################################################
c3cc279 @aristidb build: add curl plugin (but compiled with wrong name)
aristidb authored
174
175 FIND_PACKAGE(CURL)
176
f626e4d @aristidb build: add gmp plugin
aristidb authored
177 ## GMP ######################################################################
178
179 FIND_PACKAGE(GMP REQUIRED)
180 FIND_PACKAGE(GMPXX REQUIRED)
181
7541210 @aristidb build: longer divider comment lines
aristidb authored
182 ## Library ##################################################################
2b6333a @aristidb build: compile libflusspferd
aristidb authored
183
184 FILE(
185 GLOB
186 flusspferd_library_sources
187 ${Flusspferd_SOURCE_DIR}/src/spidermonkey/*.cpp)
188
189 ADD_LIBRARY(
190 flusspferd
191 SHARED
192 ${flusspferd_library_sources})
28a56c9 @aristidb build: add shell executable
aristidb authored
193
13c4451 @aristidb build: find and link spidermonkey
aristidb authored
194 TARGET_LINK_LIBRARIES(
195 flusspferd
872fed4 @aristidb build: add FindDL.cmake
aristidb authored
196 ${DL_LIBRARIES}
4af245f @aristidb build: move Spidermonkey search into FindSpidermonkey.cmake module
aristidb authored
197 ${SPIDERMONKEY_LIBRARIES}
720d7ff @aristidb build: use FindBoost module of cmake 2.6
aristidb authored
198 ${Boost_THREAD_LIBRARY}
199 ${Boost_FILESYSTEM_LIBRARY}
200 ${Boost_SYSTEM_LIBRARY})
13c4451 @aristidb build: find and link spidermonkey
aristidb authored
201
80fc705 @aristidb build: improve installation procedure for libflusspferd and flusspfer…
aristidb authored
202 INSTALL(TARGETS
203 flusspferd
204 LIBRARY DESTINATION ${INSTALL_LIBRARIES_PATH})
205
7541210 @aristidb build: longer divider comment lines
aristidb authored
206 ## Programs #################################################################
28a56c9 @aristidb build: add shell executable
aristidb authored
207
208 ADD_EXECUTABLE(
209 flusspferd-shell
210 src/programs/flusspferd.cpp)
211
5135631 @aristidb build: rename flusspferd executable flusspferd, no longer flusspferd-…
aristidb authored
212 SET_PROPERTY(
213 TARGET flusspferd-shell
214 PROPERTY OUTPUT_NAME
215 flusspferd)
216
28a56c9 @aristidb build: add shell executable
aristidb authored
217 TARGET_LINK_LIBRARIES(
218 flusspferd-shell
467e215 @aristidb build: find libedit
aristidb authored
219 flusspferd
220 ${LIBEDIT_LIBRARIES})
7a357e1 @aristidb build: add flusspferd-io lib
aristidb authored
221
80fc705 @aristidb build: improve installation procedure for libflusspferd and flusspfer…
aristidb authored
222 INSTALL(TARGETS
223 flusspferd-shell
224 RUNTIME DESTINATION ${INSTALL_EXECUTABLES_PATH})
225
7a357e1 @aristidb build: add flusspferd-io lib
aristidb authored
226 ## IO ######################################################################
227
228 FILE(
229 GLOB
230 flusspferd_io_sources
231 ${Flusspferd_SOURCE_DIR}/src/io/*.cpp)
232
233 ADD_LIBRARY(
234 flusspferd-io
235 SHARED
236 ${flusspferd_io_sources})
237
238 TARGET_LINK_LIBRARIES(
239 flusspferd-io
240 flusspferd)
67cfca5 @aristidb build: compile libflusspferd-xml
aristidb authored
241
864fc1a @aristidb build: install IO, XML and plugins
aristidb authored
242 INSTALL(TARGETS
243 flusspferd-io
244 LIBRARY DESTINATION ${INSTALL_LIBRARIES_PATH})
245
0312cd8 @aristidb build: install so much that the installed flusspferd binary works
aristidb authored
246 INSTALL(TARGETS
247 flusspferd-io
248 LIBRARY DESTINATION ${INSTALL_MODULES_PATH})
249
67cfca5 @aristidb build: compile libflusspferd-xml
aristidb authored
250 ## XML ######################################################################
251
252 FILE(
253 GLOB
254 flusspferd_xml_sources
255 ${Flusspferd_SOURCE_DIR}/src/xml/*.cpp)
256
257 ADD_LIBRARY(
258 flusspferd-xml
259 SHARED
260 ${flusspferd_xml_sources})
261
262 TARGET_LINK_LIBRARIES(
263 flusspferd-xml
264 flusspferd
265 ${LIBXML2_LIBRARIES})
3785582 @aristidb build: installing libflusspferd and flusspferd-shell
aristidb authored
266
864fc1a @aristidb build: install IO, XML and plugins
aristidb authored
267 INSTALL(TARGETS
268 flusspferd-xml
269 LIBRARY DESTINATION ${INSTALL_LIBRARIES_PATH})
270
0312cd8 @aristidb build: install so much that the installed flusspferd binary works
aristidb authored
271 INSTALL(TARGETS
272 flusspferd-xml
273 LIBRARY DESTINATION ${INSTALL_MODULES_PATH})
274
23315c0 @aristidb build: build os plugin
aristidb authored
275 ## Plugins #################################################################
276
f626e4d @aristidb build: add gmp plugin
aristidb authored
277 SET(PLUGINS os posix environment SQLite3 cURL gmp)
77ed9ea @aristidb build: add sqlite3 plugin
aristidb authored
278
28b3d3c @aristidb build: build plugins with proper case
aristidb authored
279 SET(SQLite3_DEFINITIONS ${SQLITE3_DEFINITIONS})
280 SET(SQLite3_LIBRARIES ${SQLITE3_LIBRARIES})
c3cc279 @aristidb build: add curl plugin (but compiled with wrong name)
aristidb authored
281
28b3d3c @aristidb build: build plugins with proper case
aristidb authored
282 SET(cURL_LIBRARIES ${CURL_LIBRARIES})
283 SET(cURL_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIR})
284
f626e4d @aristidb build: add gmp plugin
aristidb authored
285 SET(gmp_LIBRARIES ${GMPXX_LIBRARY} ${GMP_LIBRARY})
286 SET(gmp_INCLUDE_DIRECTORIES ${GMP_INCLUDE_DIR})
287
28b3d3c @aristidb build: build plugins with proper case
aristidb authored
288 FOREACH(PLUGIN ${PLUGINS})
23315c0 @aristidb build: build os plugin
aristidb authored
289
856c1e5 @aristidb build: indentation
aristidb authored
290 FILE(GLOB
291 ${PLUGIN}_sources
292 ${Flusspferd_SOURCE_DIR}/src/plugins/${PLUGIN}/*.cpp)
293
294 ADD_LIBRARY(${PLUGIN}_PLUGIN MODULE ${${PLUGIN}_sources})
295
296 SET_PROPERTY(
297 TARGET ${PLUGIN}_PLUGIN
298 PROPERTY OUTPUT_NAME
299 ${PLUGIN})
300
301 SET_PROPERTY(
302 TARGET ${PLUGIN}_PLUGIN
303 PROPERTY LIBRARY_OUTPUT_DIRECTORY
304 ${Flusspferd_BINARY_DIR}/modules)
305
306 SET_PROPERTY(
307 TARGET ${PLUGIN}_PLUGIN
308 PROPERTY DEFINITIONS
309 ${${PLUGIN}_DEFINITIONS})
310
311 SET_PROPERTY(
312 TARGET ${PLUGIN}_PLUGIN
313 PROPERTY INCLUDE_DIRECTORIES
314 ${${PLUGIN}_INCLUDE_DIRECTORIES})
315
316 TARGET_LINK_LIBRARIES(
317 ${PLUGIN}_PLUGIN
318 flusspferd
319 ${${PLUGIN}_LIBRARIES})
e7bb539 @aristidb build: build plugins with a loop and into the modules/ directory
aristidb authored
320
864fc1a @aristidb build: install IO, XML and plugins
aristidb authored
321 INSTALL(TARGETS
322 ${PLUGIN}_PLUGIN
323 LIBRARY DESTINATION ${INSTALL_MODULES_PATH})
324
0312cd8 @aristidb build: install so much that the installed flusspferd binary works
aristidb authored
325 FILE(GLOB
326 ${PLUGIN}_JS_FILES
327 ${Flusspferd_SOURCE_DIR}/src/plugins/${PLUGIN}/${PLUGIN}.js)
328
329 IF(${PLUGIN}_JS_FILES)
330 INSTALL(FILES
331 ${${PLUGIN}_JS_FILES}
332 DESTINATION ${INSTALL_MODULES_PATH})
333 ENDIF()
334
335 ENDFOREACH()
336
337 SET(JS_PLUGINS
338 Util Util/Array Util/Function Util/Range TestHarness HTTP/Headers)
339
340 FOREACH(JS_PLUGIN ${JS_PLUGINS})
341
342 STRING(REGEX MATCH ".*/" ${JS_PLUGIN}_DIR ${JS_PLUGIN})
343
344 INSTALL(FILES
345 src/js/${JS_PLUGIN}.js
346 DESTINATION ${INSTALL_MODULES_PATH}/${${JS_PLUGIN}_DIR})
347
e7bb539 @aristidb build: build plugins with a loop and into the modules/ directory
aristidb authored
348 ENDFOREACH()
5c221d9 @aristidb build: install headers
aristidb authored
349
350 ## Headers ##################################################################
351
352 INSTALL(
353 DIRECTORY include/
354 DESTINATION ${INSTALL_HEADERS_PATH}
355 FILES_MATCHING PATTERN "*.hpp")
0312cd8 @aristidb build: install so much that the installed flusspferd binary works
aristidb authored
356
357 ## Prelude ##################################################################
358
359 INSTALL(
360 FILES src/js/prelude.js
361 DESTINATION ${INSTALL_LIBDATA_PATH})
362
363 ## jsrepl.js ################################################################
364
365 CONFIGURE_FILE(
366 ${Flusspferd_SOURCE_DIR}/src/js/jsrepl.js.in
367 ${Flusspferd_BINARY_DIR}/js/jsrepl.js)
368
369 INSTALL(
370 FILES ${Flusspferd_BINARY_DIR}/js/jsrepl.js
371 DESTINATION ${INSTALL_ETC_PATH}/flusspferd)
Something went wrong with that request. Please try again.