diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f17da2c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required (VERSION 2.8.12) +project (tini) + +# Config +set (tini_VERSION_MAJOR 0) +set (tini_VERSION_MINOR 3) +set (tini_VERSION_PATCH 1) +execute_process (COMMAND git log -n 1 --date=local --pretty=format:"%h" OUTPUT_VARIABLE tini_VERSION_GIT) + +# Flags +add_definitions (-D_FORTIFY_SOURCE=2) +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -Wextra -Wall -pedantic -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security") +set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-s") + +# Build + +configure_file ( + "${PROJECT_SOURCE_DIR}/tiniConfig.h.in" + "${PROJECT_BINARY_DIR}/tiniConfig.h" +) + +include_directories ("${PROJECT_BINARY_DIR}") + +add_executable (tini tini.c) + +add_executable (tini-static tini.c) +set_target_properties (tini-static PROPERTIES LINK_FLAGS "-static") diff --git a/Dockerfile b/Dockerfile index 73bc179..8fd286b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,12 @@ FROM ubuntu RUN apt-get update \ - && apt-get install --no-install-recommends --yes build-essential git gdb valgrind \ + && apt-get install --no-install-recommends --yes build-essential git gdb valgrind cmake \ && rm -rf /var/lib/apt/lists/* ADD . /tini -RUN cd /tini && make clean && make +WORKDIR /tini + +RUN cmake . && make clean && make ENTRYPOINT ["/tini/tini"] diff --git a/Makefile b/Makefile deleted file mode 100644 index 0ddc12c..0000000 --- a/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -include config.mk - -OBJ = tini.o -BIN = tini - -all: $(BIN) $(BIN)-static - -$(BIN): $(OBJ) - $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $< - -$(BIN)-static: $(OBJ) - $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -static -o $@ $< - -$(OBJ): - -install: all - mkdir -p $(DESTDIR)$(PREFIX)/bin - cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin - -uninstall: - rm -f $(DESTDIR)$(PREFIX)/bin/$(BIN) - -dist: clean - mkdir -p tini-$(VERSION) - cp LICENSE Makefile README config.def.h config.mk tini.c tini-$(VERSION) - tar -cf tini-$(VERSION).tar tini-$(VERSION) - gzip tini-$(VERSION).tar - rm -rf tini-$(VERSION) - -clean: - rm -f $(BIN) $(OBJ) tini-$(VERSION).tar.gz - -.PHONY: - all install uninstall dist clean check diff --git a/config.mk b/config.mk deleted file mode 100644 index a11012f..0000000 --- a/config.mk +++ /dev/null @@ -1,11 +0,0 @@ -VERSION=0.3.0 -GIT_REV=$(shell git log -n 1 --date=local --pretty=format:"%h") - -# paths -PREFIX=/usr/local - -CC = cc -LD = $(CC) -CPPFLAGS=-D_FORTIFY_SOURCE=2 -DTINI_VERSION="\"$(VERSION) - $(GIT_REV)\"" -CFLAGS=-std=gnu99 -Wextra -Wall -pedantic -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-s diff --git a/ddist.sh b/ddist.sh index 74785a1..cca05dc 100755 --- a/ddist.sh +++ b/ddist.sh @@ -13,7 +13,13 @@ NAME="${IMG}-dist" BIN="tini" docker build -t "${IMG}" . -docker run -it --name="${NAME}" "${IMG}" true "-h" + +# Smoke tests +docker run -it --rm --entrypoint="/tini/${BIN}" "${IMG}" "-h" "--" "true" +docker run -it --rm --entrypoint="/tini/${BIN}-static" "${IMG}" "-h" "--" "true" + +# Copy the binaries +docker run -it --entrypoint="/bin/true" --name="${NAME}" "${IMG}" docker cp "${NAME}:/tini/${BIN}" "${DIST_DIR}" docker cp "${NAME}:/tini/${BIN}-static" "${DIST_DIR}" docker rm "${NAME}" diff --git a/tini.c b/tini.c index ccd6626..1e977df 100644 --- a/tini.c +++ b/tini.c @@ -13,9 +13,7 @@ #include #include -#ifndef TINI_VERSION -#define TINI_VERSION "???" -#endif +#include "tiniConfig.h" #define PRINT_FATAL(...) fprintf(stderr, "[FATAL] "); fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n"); #define PRINT_WARNING(...) if (verbosity > 0) { fprintf(stderr, "[WARN ] "); fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n"); } @@ -56,7 +54,7 @@ int spawn(const sigset_t* const child_sigset_ptr, char (*argv[]), int* const chi void print_usage(char* const name, FILE* const file) { - fprintf(file, "%s (version %s)\n", basename(name), TINI_VERSION); + fprintf(file, "%s (version %s - %s)\n", basename(name), TINI_VERSION, TINI_GIT); fprintf(file, "Usage: %s [OPTIONS] PROGRAM -- [ARGS]\n\n", basename(name)); fprintf(file, "Execute a program under the supervision of a valid init process (%s)\n\n", basename(name)); fprintf(file, " -h: Show this help message and exit.\n"); diff --git a/tiniConfig.h.in b/tiniConfig.h.in new file mode 100644 index 0000000..95a5481 --- /dev/null +++ b/tiniConfig.h.in @@ -0,0 +1,2 @@ +#define TINI_VERSION "@tini_VERSION_MAJOR@.@tini_VERSION_MINOR@.@tini_VERSION_PATCH@" +#define TINI_GIT @tini_VERSION_GIT@