simplefiles

A lightweight C CGI web application for managing files.
git clone https://scm.kuandu.systems/git-raw/simplefiles.git
Log | Files | Refs | README | LICENSE

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}