Makefile (7738B)
1 # 2 # SimpleFiles Makefile 3 # 4 5 CC= cc 6 CFLAGS= -static -Wall -Wextra -O2 -fno-pie -nopie -Isrc 7 8 # 9 # Directories 10 # 11 12 BUILDDIR= build 13 TESTROOT= testroot 14 TEST_CSRF_ORIGIN= http://localhost:8000 15 16 HTDOCS= ${TESTROOT}/htdocs 17 CGIBIN= ${TESTROOT}/cgi-bin 18 ETCDIR= ${TESTROOT}/etc 19 RUN= ${TESTROOT}/run 20 LOGS= ${TESTROOT}/logs 21 STORAGEROOT= ${TESTROOT}/storage 22 UPLOADDIR= ${TESTROOT}/run/simplefiles/uploads 23 LOCKSDIR= ${TESTROOT}/run/simplefiles/lock 24 TEMPLATE_ROOT= ${TESTROOT}/simplefiles 25 GLOBAL_CONFIG= ${ETCDIR}/simplefiles.conf 26 AUTHDIR= ${TESTROOT}/auth 27 28 29 # 30 # Build targets 31 # 32 33 UPLOAD_CGI= ${BUILDDIR}/upload.cgi 34 LIST_CGI= ${BUILDDIR}/list.cgi 35 DELETE_CGI= ${BUILDDIR}/delete.cgi 36 DOWNLOAD_CGI= ${BUILDDIR}/download.cgi 37 RENAME_CGI= ${BUILDDIR}/rename.cgi 38 39 CGI_TARGETS= ${UPLOAD_CGI} \ 40 ${LIST_CGI} \ 41 ${DELETE_CGI} \ 42 ${DOWNLOAD_CGI} \ 43 ${RENAME_CGI} 44 45 # 46 # Common source files 47 # 48 49 COMMON_SRCS= src/common.c \ 50 src/config.c \ 51 src/http.c \ 52 src/html.c \ 53 src/url.c 54 55 COMMON_HDRS= src/common.h \ 56 src/config.h \ 57 src/http.h \ 58 src/html.h \ 59 src/url.h 60 61 REQUSET_HDRS= src/request.h 62 REQUEST_SRCS= src/request.c 63 64 # 65 # Unit tests 66 # 67 68 VALID_FILENAME_TEST= ${BUILDDIR}/valid_filename 69 URL_TEST= ${BUILDDIR}/url 70 HTML_TEST= ${BUILDDIR}/html 71 HTTP_TEST= ${BUILDDIR}/http 72 COMMON_TEST= ${BUILDDIR}/common 73 CONFIG_TEST= ${BUILDDIR}/config 74 MULTIPART_TEST= ${BUILDDIR}/multipart 75 76 UNIT_TESTS= ${VALID_FILENAME_TEST} \ 77 ${URL_TEST} \ 78 ${HTML_TEST} \ 79 ${HTTP_TEST} \ 80 ${COMMON_TEST} \ 81 ${CONFIG_TEST} \ 82 ${MULTIPART_TEST} 83 # 84 # Regression tests 85 # 86 87 UPLOAD_REGRESSION= tests/regression/upload.sh 88 LIST_REGRESSION= tests/regression/list.sh 89 DELETE_REGRESSION= tests/regression/delete.sh 90 DOWNLOAD_REGRESSION= tests/regression/download.sh 91 RENAME_REGRESSION= tests/regression/rename.sh 92 93 # 94 # Templates / static files 95 # 96 97 UPLOAD_TEMPLATE= html/upload.html.template 98 DELETE_TEMPLATE= html/delete.html.template 99 LIST_TEMPLATE= html/list.html.template 100 LIST_READONLY_TEMPLATE= html/list-readonly.html.template 101 RENAME_TEMPLATE= html/rename.html.template 102 AUTH_FILE= conf/bob 103 104 # 105 # Deployment package 106 # 107 108 DIST_NAME= simplefiles 109 DIST_DIR= ${DIST_NAME} 110 DIST_ARCHIVE= ${DIST_NAME}.tar.gz 111 112 # 113 # Default targets 114 # 115 116 .PHONY: all build test test-unit test-regression 117 .PHONY: testroot prepare-testroot 118 .PHONY: clean cleantestroot dist clean-dist 119 120 all: ${CGI_TARGETS} 121 122 build: ${CGI_TARGETS} 123 124 # 125 # CGI programs 126 # 127 128 ${UPLOAD_CGI}: src/upload.c ${COMMON_SRCS} ${COMMON_HDRS} src/multipart.h src/multipart.c 129 mkdir -p ${BUILDDIR} 130 ${CC} ${CFLAGS} -o $@ src/upload.c ${COMMON_SRCS} src/multipart.c 131 132 ${LIST_CGI}: src/list.c ${COMMON_SRCS} ${COMMON_HDRS} 133 mkdir -p ${BUILDDIR} 134 ${CC} ${CFLAGS} -o $@ src/list.c ${COMMON_SRCS} 135 136 ${DELETE_CGI}: src/delete.c ${COMMON_SRCS} ${COMMON_HDRS} ${REQUEST_HDRS} 137 mkdir -p ${BUILDDIR} 138 ${CC} ${CFLAGS} -o $@ src/delete.c ${COMMON_SRCS} ${REQUEST_SRCS} 139 140 ${DOWNLOAD_CGI}: src/download.c ${COMMON_SRCS} ${COMMON_HDRS} ${REQUEST_HDRS} 141 mkdir -p ${BUILDDIR} 142 ${CC} ${CFLAGS} -o $@ src/download.c ${COMMON_SRCS} ${REQUEST_SRCS} 143 144 ${RENAME_CGI}: src/rename.c ${COMMON_SRCS} ${COMMON_HDRS} ${REQUEST_HDRS} 145 mkdir -p ${BUILDDIR} 146 ${CC} ${CFLAGS} -o $@ src/rename.c ${COMMON_SRCS} ${REQUEST_SRCS} 147 148 # 149 # Unit tests 150 # 151 152 ${VALID_FILENAME_TEST}: tests/unit/valid_filename.c \ 153 src/common.c \ 154 src/common.h \ 155 src/config.h \ 156 src/html.h 157 mkdir -p ${BUILDDIR} 158 ${CC} ${CFLAGS} -o $@ \ 159 tests/unit/valid_filename.c \ 160 src/common.c \ 161 src/config.c \ 162 src/html.c 163 164 ${URL_TEST}: tests/unit/url.c \ 165 src/url.c \ 166 src/url.h 167 mkdir -p ${BUILDDIR} 168 ${CC} ${CFLAGS} -o $@ \ 169 tests/unit/url.c \ 170 src/url.c 171 172 ${HTML_TEST}: tests/unit/html.c \ 173 src/html.c \ 174 src/html.h 175 mkdir -p ${BUILDDIR} 176 ${CC} ${CFLAGS} -o $@ \ 177 tests/unit/html.c \ 178 src/html.c 179 180 ${HTTP_TEST}: tests/unit/http.c src/http.c src/http.h src/html.c src/html.h 181 mkdir -p ${BUILDDIR} 182 ${CC} ${CFLAGS} -o $@ \ 183 tests/unit/http.c \ 184 src/http.c \ 185 src/html.c 186 187 ${COMMON_TEST}: tests/unit/common.c \ 188 src/common.c \ 189 src/common.h \ 190 src/config.c \ 191 src/config.h \ 192 src/http.c \ 193 src/http.h \ 194 src/html.c \ 195 src/html.h 196 mkdir -p ${BUILDDIR} 197 ${CC} ${CFLAGS} -o $@ \ 198 tests/unit/common.c \ 199 src/common.c \ 200 src/config.c \ 201 src/http.c \ 202 src/html.c 203 204 ${CONFIG_TEST}: tests/unit/config.c \ 205 src/config.c \ 206 src/config.h \ 207 src/common.c \ 208 src/common.h 209 mkdir -p ${BUILDDIR} 210 ${CC} ${CFLAGS} -o $@ \ 211 tests/unit/config.c \ 212 src/config.c \ 213 src/common.c 214 215 ${MULTIPART_TEST}: tests/unit/multipart.c \ 216 src/multipart.c \ 217 src/multipart.h \ 218 src/config.c \ 219 src/config.h \ 220 src/http.c \ 221 src/http.h \ 222 src/common.c \ 223 src/common.h \ 224 src/html.c \ 225 src/html.h 226 mkdir -p ${BUILDDIR} 227 ${CC} ${CFLAGS} -o $@ \ 228 tests/unit/multipart.c \ 229 src/multipart.c \ 230 src/config.c \ 231 src/http.c \ 232 src/common.c \ 233 src/html.c 234 235 test-unit: ${UNIT_TESTS} 236 @for test in ${UNIT_TESTS}; do \ 237 echo "==> $$test"; \ 238 ./$$test || exit 1; \ 239 done 240 241 # 242 # Regression tests 243 # 244 245 test-regression: ${CGI_TARGETS} 246 sh ${UPLOAD_REGRESSION} ${UPLOAD_CGI} 247 sh ${LIST_REGRESSION} ${LIST_CGI} 248 sh ${DELETE_REGRESSION} ${DELETE_CGI} 249 sh ${DOWNLOAD_REGRESSION} ${DOWNLOAD_CGI} 250 sh ${RENAME_REGRESSION} ${RENAME_CGI} 251 252 # 253 # All tests 254 # 255 256 test: test-unit test-regression 257 258 # 259 # Test root 260 # 261 262 prepare-testroot: 263 mkdir -p \ 264 ${HTDOCS} \ 265 ${CGIBIN} \ 266 $(ETCDIR) \ 267 ${RUN} \ 268 ${LOGS} \ 269 ${STORAGEROOT} \ 270 ${UPLOADDIR} \ 271 ${LOCKSDIR} \ 272 ${TEMPLATE_ROOT} \ 273 ${AUTHDIR} 274 275 testroot: ${CGI_TARGETS} prepare-testroot 276 install -m 755 ${UPLOAD_CGI} ${CGIBIN}/upload.cgi 277 install -m 755 ${LIST_CGI} ${CGIBIN}/list.cgi 278 install -m 755 ${DELETE_CGI} ${CGIBIN}/delete.cgi 279 install -m 755 ${DOWNLOAD_CGI} ${CGIBIN}/download.cgi 280 install -m 755 ${RENAME_CGI} ${CGIBIN}/rename.cgi 281 282 printf '%s\n' \ 283 'CSRF_ORIGIN=${TEST_CSRF_ORIGIN}' \ 284 > ${GLOBAL_CONFIG} 285 chmod 644 ${GLOBAL_CONFIG} 286 287 chmod 755 ${TESTROOT} 288 chmod 755 ${HTDOCS} 289 chmod 755 ${CGIBIN} 290 chmod 755 ${RUN} 291 chmod 755 ${LOGS} 292 chmod 755 ${STORAGEROOT} 293 chmod 755 ${UPLOADDIR} 294 chmod 755 ${LOCKSDIR} 295 chmod 755 ${TEMPLATE_ROOT} 296 chmod 755 ${AUTHDIR} 297 298 mkdir -p ${HTDOCS}/default 299 chmod 755 ${HTDOCS}/default 300 301 mkdir -p ${STORAGEROOT}/default 302 mkdir -p ${TEMPLATE_ROOT} 303 304 ln -sf ../../cgi-bin/list.cgi \ 305 ${HTDOCS}/default/list.cgi 306 307 ln -sf ../../cgi-bin/upload.cgi \ 308 ${HTDOCS}/default/upload.cgi 309 310 ln -sf ../../cgi-bin/delete.cgi \ 311 ${HTDOCS}/default/delete.cgi 312 313 ln -sf ../../cgi-bin/download.cgi \ 314 ${HTDOCS}/default/download.cgi 315 316 ln -sf ../../cgi-bin/rename.cgi \ 317 ${HTDOCS}/default/rename.cgi 318 319 install -m 644 css/style.css \ 320 ${HTDOCS}/default/style.css 321 322 install -m 644 ${UPLOAD_TEMPLATE} \ 323 ${TEMPLATE_ROOT}/upload.html.template 324 325 install -m 644 ${DELETE_TEMPLATE} \ 326 ${TEMPLATE_ROOT}/delete.html.template 327 328 install -m 644 ${LIST_TEMPLATE} \ 329 ${TEMPLATE_ROOT}/list.html.template 330 331 install -m 644 ${RENAME_TEMPLATE} \ 332 ${TEMPLATE_ROOT}/rename.html.template 333 334 install -m 644 ${LIST_READONLY_TEMPLATE} \ 335 ${TEMPLATE_ROOT}/list-readonly.html.template 336 337 install -m 644 ${AUTH_FILE} ${TESTROOT}/auth/bob 338 printf "%s\n" "ADMIN_USER=bob" > "${TESTROOT}/storage/default/.config" 339 # 340 # Housekeeping 341 # 342 343 clean: 344 rm -rf ${BUILDDIR} 345 346 cleantestroot: 347 rm -rf ${TESTROOT} 348 349 # 350 # Deployment Package 351 # 352 353 dist: clean build 354 echo "Creating deployment package: ${DIST_ARCHIVE}" 355 mkdir -p ${DIST_DIR} 356 357 cp ${UPLOAD_CGI} ${DIST_DIR}/ 358 cp ${LIST_CGI} ${DIST_DIR}/ 359 cp ${DELETE_CGI} ${DIST_DIR}/ 360 cp ${DOWNLOAD_CGI} ${DIST_DIR}/ 361 cp ${RENAME_CGI} ${DIST_DIR}/ 362 363 cp css/style.css ${DIST_DIR}/ 364 365 cp ${UPLOAD_TEMPLATE} ${DIST_DIR}/ 366 cp ${DELETE_TEMPLATE} ${DIST_DIR}/ 367 cp ${LIST_TEMPLATE} ${DIST_DIR}/ 368 cp ${RENAME_TEMPLATE} ${DIST_DIR}/ 369 cp ${LIST_READONLY_TEMPLATE} ${DIST_DIR}/ 370 371 cd ${DIST_DIR} && tar -czf ../${DIST_ARCHIVE} . 372 373 clean-dist: 374 rm -rf ${DIST_DIR} ${DIST_ARCHIVE}