feat: add libcli as a git submodule
This commit is contained in:
parent
d27ed4a839
commit
f8a65d87db
4 changed files with 4 additions and 987 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -1,3 +1,6 @@
|
||||||
[submodule "libicmp"]
|
[submodule "libicmp"]
|
||||||
path = libicmp
|
path = libicmp
|
||||||
url = git@github.com:lohhiiccc/icmp.git
|
url = git@github.com:lohhiiccc/icmp.git
|
||||||
|
[submodule "libcli"]
|
||||||
|
path = libcli
|
||||||
|
url = forgejo@lohic.dev:loic/libcli.git
|
||||||
|
|
|
||||||
280
Makefile
280
Makefile
|
|
@ -1,280 +0,0 @@
|
||||||
# Makefile for ft_ping
|
|
||||||
# Uses build.mk generated by ./configure script
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
|
|
||||||
# Include generated configuration (must run ./configure first)
|
|
||||||
-include build.mk
|
|
||||||
|
|
||||||
# Check if build.mk exists
|
|
||||||
ifeq ($(wildcard build.mk),)
|
|
||||||
$(error build.mk not found. Please run './configure' first)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Project Configuration
|
|
||||||
|
|
||||||
NAME = ft_ping
|
|
||||||
TEST_BIN = ft_ping.test
|
|
||||||
VERSION := 0.0.1
|
|
||||||
BUILD_DATE := $(shell git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S' 2>/dev/null || date -u '+%Y-%m-%d %H:%M:%S')
|
|
||||||
GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "nogit")
|
|
||||||
|
|
||||||
ifeq ($(GIT_COMMIT),nogit)
|
|
||||||
HAS_GIT_COMMIT=0
|
|
||||||
else
|
|
||||||
HAS_GIT_COMMIT=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
.DEFAULT_GOAL := all
|
|
||||||
MAKEFLAGS += --no-print-directory
|
|
||||||
|
|
||||||
BINARIES = ft_ping
|
|
||||||
# Future: BINARIES = ft_ping ft_traceroute
|
|
||||||
|
|
||||||
# Include source files
|
|
||||||
include sources/ping.mk
|
|
||||||
|
|
||||||
SRCS = $(PING_SRCS)
|
|
||||||
TESTS = $(PING_TESTS)
|
|
||||||
|
|
||||||
# Get libicmp sources for dependency tracking if building locally
|
|
||||||
ifeq ($(BUILD_LOCAL_LIBICMP),yes)
|
|
||||||
LIBICMP_SRCS = $(shell find $(LIBICMP_DIR)/src -type f -name '*.c' 2>/dev/null)
|
|
||||||
LIBICMP_HEADERS = $(wildcard $(LIBICMP_DIR)/includes/*.h)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Build Directories
|
|
||||||
OBJ_DIR = build
|
|
||||||
OBJS = $(SRCS:src/%.c=$(OBJ_DIR)/%.o)
|
|
||||||
DEPS = $(OBJS:.o=.d)
|
|
||||||
|
|
||||||
# Build Rules
|
|
||||||
|
|
||||||
VERSION_HEADER = includes/version_gen.h
|
|
||||||
|
|
||||||
$(VERSION_HEADER): FORCE
|
|
||||||
@$(MAKE) --no-print-directory update-version-header
|
|
||||||
|
|
||||||
.PHONY: update-version-header
|
|
||||||
update-version-header:
|
|
||||||
@NEW_HEADER=$$(mktemp); \
|
|
||||||
echo "/* Auto-generated - DO NOT EDIT */" > $$NEW_HEADER; \
|
|
||||||
echo "#ifndef PING_VERSION_GEN_H" >> $$NEW_HEADER; \
|
|
||||||
echo "#define PING_VERSION_GEN_H" >> $$NEW_HEADER; \
|
|
||||||
echo "#define PING_VERSION \"$(VERSION)\"" >> $$NEW_HEADER; \
|
|
||||||
echo "#define PING_BUILD_DATE \"$(BUILD_DATE)\"" >> $$NEW_HEADER; \
|
|
||||||
echo "#define PING_GIT_COMMIT \"$(GIT_COMMIT)\"" >> $$NEW_HEADER; \
|
|
||||||
echo "#define PING_HAS_GIT_COMMIT $(HAS_GIT_COMMIT)" >> $$NEW_HEADER; \
|
|
||||||
echo "" >> $$NEW_HEADER; \
|
|
||||||
echo "struct prog_name" >> $$NEW_HEADER; \
|
|
||||||
echo "{" >> $$NEW_HEADER; \
|
|
||||||
echo " char *alloc;" >> $$NEW_HEADER; \
|
|
||||||
echo " const char *name;" >> $$NEW_HEADER; \
|
|
||||||
echo "};" >> $$NEW_HEADER; \
|
|
||||||
echo "" >> $$NEW_HEADER; \
|
|
||||||
echo "extern struct prog_name g_prog_name;" >> $$NEW_HEADER; \
|
|
||||||
echo "" >> $$NEW_HEADER; \
|
|
||||||
echo "#endif" >> $$NEW_HEADER; \
|
|
||||||
if [ ! -f $(VERSION_HEADER) ] || ! cmp -s $$NEW_HEADER $(VERSION_HEADER); then \
|
|
||||||
mv $$NEW_HEADER $(VERSION_HEADER); \
|
|
||||||
echo "[OK] Version header generated"; \
|
|
||||||
else \
|
|
||||||
rm -f $$NEW_HEADER; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
FORCE:
|
|
||||||
.PHONY: FORCE
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all: $(LIBICMP_DEP) $(VERSION_HEADER) $(NAME)
|
|
||||||
|
|
||||||
# Build local libicmp if needed
|
|
||||||
ifeq ($(BUILD_LOCAL_LIBICMP),yes)
|
|
||||||
$(LIBICMP_DEP): $(LIBICMP_SRCS) $(LIBICMP_HEADERS)
|
|
||||||
@echo "[BUILD] Building local libicmp..."
|
|
||||||
$(MAKE) -C $(LIBICMP_DIR) -f $(LIBICMP_MAKEFILE) $(LIBICMP_BUILD_FLAGS)
|
|
||||||
@echo "[OK] libicmp built successfully"
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Link ft_ping
|
|
||||||
$(NAME): $(OBJS) $(LIBICMP_DEP)
|
|
||||||
$(CC) -o $@ $(OBJS) $(LDFLAGS)
|
|
||||||
@echo "[OK] $(NAME) built successfully"
|
|
||||||
|
|
||||||
# Compile object files
|
|
||||||
$(OBJ_DIR)/%.o: src/%.c
|
|
||||||
@mkdir -p $(dir $@)
|
|
||||||
$(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MP -c $< -o $@
|
|
||||||
|
|
||||||
# Include dependencies
|
|
||||||
-include $(DEPS)
|
|
||||||
|
|
||||||
# Test Rules
|
|
||||||
|
|
||||||
.PHONY: test
|
|
||||||
ifeq ($(ENABLE_TESTS),yes)
|
|
||||||
test: $(TEST_BIN)
|
|
||||||
@echo "[TEST] Running tests..."
|
|
||||||
ifeq ($(SUDO_TESTS),yes)
|
|
||||||
@if [ "$$(id -u)" -ne 0 ]; then \
|
|
||||||
echo "[WARN] Tests require root privileges, using sudo..."; \
|
|
||||||
sudo ./$(TEST_BIN); \
|
|
||||||
else \
|
|
||||||
./$(TEST_BIN); \
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
./$(TEST_BIN)
|
|
||||||
endif
|
|
||||||
@echo "[OK] All tests passed"
|
|
||||||
|
|
||||||
|
|
||||||
$(TEST_BIN): $(VERSION_HEADER) $(TESTS) $(filter-out $(OBJ_DIR)/ping/main.o,$(OBJS)) $(LIBICMP_DEP)
|
|
||||||
@mkdir -p $(dir $@)
|
|
||||||
@echo "[BUILD] Building test binary..."
|
|
||||||
$(CC) $(CPPFLAGS) $(CFLAGS) $(filter-out $(VERSION_HEADER),$^) $(LDFLAGS) $(TEST_LDFLAGS) -o $@
|
|
||||||
else
|
|
||||||
test:
|
|
||||||
@echo "[SKIP] Tests are disabled"
|
|
||||||
@echo "Run './configure --enable-tests' to enable tests"
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Installation Rules
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install: all
|
|
||||||
@echo "[INSTALL] Installing $(NAME)..."
|
|
||||||
ifeq ($(BUILD_LOCAL_LIBICMP),yes)
|
|
||||||
ifeq ($(LIBICMP_TYPE),shared)
|
|
||||||
@echo "[INSTALL] Installing libicmp (shared) to $(LIBICMP_PREFIX)..."
|
|
||||||
$(MAKE) -C $(LIBICMP_DIR) -f $(LIBICMP_MAKEFILE) install PREFIX=$(LIBICMP_PREFIX) BUILD_SHARED=yes BUILD_STATIC=no
|
|
||||||
@echo "[OK] libicmp installed"
|
|
||||||
else ifeq ($(INSTALL_LIBICMP),yes)
|
|
||||||
@echo "[INSTALL] Installing libicmp to $(LIBICMP_PREFIX)..."
|
|
||||||
$(MAKE) -C $(LIBICMP_DIR) -f $(LIBICMP_MAKEFILE) install PREFIX=$(LIBICMP_PREFIX)
|
|
||||||
@echo "[OK] libicmp installed"
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
@echo "[INSTALL] Installing binary to $(BINDIR)..."
|
|
||||||
install -d $(DESTDIR)$(BINDIR)
|
|
||||||
install -m 755 $(NAME) $(DESTDIR)$(BINDIR)/$(NAME)
|
|
||||||
@echo "[OK] $(NAME) installed to $(BINDIR)/$(NAME)"
|
|
||||||
@echo ""
|
|
||||||
@echo "Installation complete!"
|
|
||||||
@echo "Run: $(BINDIR)/$(NAME)"
|
|
||||||
|
|
||||||
.PHONY: uninstall
|
|
||||||
uninstall:
|
|
||||||
@echo "[UNINSTALL] Removing $(NAME)..."
|
|
||||||
$(RM) $(DESTDIR)$(BINDIR)/$(NAME)
|
|
||||||
@echo "[OK] $(NAME) removed"
|
|
||||||
ifeq ($(BUILD_LOCAL_LIBICMP),yes)
|
|
||||||
ifeq ($(LIBICMP_TYPE),shared)
|
|
||||||
@echo "[UNINSTALL] Removing libicmp (shared)..."
|
|
||||||
$(MAKE) -C $(LIBICMP_DIR) -f $(LIBICMP_MAKEFILE) uninstall PREFIX=$(LIBICMP_PREFIX)
|
|
||||||
@echo "[OK] libicmp removed"
|
|
||||||
else ifeq ($(INSTALL_LIBICMP),yes)
|
|
||||||
@echo "[UNINSTALL] Removing libicmp..."
|
|
||||||
$(MAKE) -C $(LIBICMP_DIR) -f $(LIBICMP_MAKEFILE) uninstall PREFIX=$(LIBICMP_PREFIX)
|
|
||||||
@echo "[OK] libicmp removed"
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Clean Rules
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
@echo "[CLEAN] Cleaning object files..."
|
|
||||||
$(RM) $(VERSION_HEADER)
|
|
||||||
$(RM) -r $(OBJ_DIR)
|
|
||||||
ifeq ($(BUILD_LOCAL_LIBICMP),yes)
|
|
||||||
@echo "[CLEAN] Cleaning libicmp..."
|
|
||||||
$(MAKE) -C $(LIBICMP_DIR) -f $(LIBICMP_MAKEFILE) clean
|
|
||||||
endif
|
|
||||||
@echo "[OK] Clean complete"
|
|
||||||
|
|
||||||
.PHONY: fclean
|
|
||||||
fclean: clean
|
|
||||||
@echo "[FCLEAN] Removing binaries..."
|
|
||||||
$(RM) $(NAME)
|
|
||||||
$(RM) $(TEST_BIN)
|
|
||||||
ifeq ($(BUILD_LOCAL_LIBICMP),yes)
|
|
||||||
@echo "[FCLEAN] Cleaning libicmp binaries..."
|
|
||||||
$(MAKE) -C $(LIBICMP_DIR) -f $(LIBICMP_MAKEFILE) fclean
|
|
||||||
endif
|
|
||||||
@echo "[OK] Full clean complete"
|
|
||||||
|
|
||||||
.PHONY: re
|
|
||||||
re: fclean
|
|
||||||
$(MAKE) all
|
|
||||||
|
|
||||||
# Configuration Management
|
|
||||||
|
|
||||||
.PHONY: reconfigure
|
|
||||||
reconfigure:
|
|
||||||
@echo "[INFO] Removing build.mk..."
|
|
||||||
$(RM) build.mk
|
|
||||||
@echo "[INFO] Please run './configure' again"
|
|
||||||
|
|
||||||
.PHONY: distclean
|
|
||||||
distclean: fclean
|
|
||||||
@echo "[DISTCLEAN] Removing generated configuration..."
|
|
||||||
$(RM) build.mk
|
|
||||||
@echo "[OK] Distribution clean complete"
|
|
||||||
|
|
||||||
|
|
||||||
# Information Rules
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: info
|
|
||||||
info:
|
|
||||||
@echo "======================================"
|
|
||||||
@echo "Build Configuration for $(NAME)"
|
|
||||||
@echo "======================================"
|
|
||||||
@echo ""
|
|
||||||
@echo "libicmp:"
|
|
||||||
@echo " Source: $(if $(filter yes,$(USE_SYSTEM_LIBICMP)),system,local)"
|
|
||||||
@echo " Type: $(LIBICMP_TYPE)"
|
|
||||||
@echo " Path: $(LIBICMP_PATH)"
|
|
||||||
@echo " Build local: $(BUILD_LOCAL_LIBICMP)"
|
|
||||||
@echo " Install to system: $(INSTALL_LIBICMP)"
|
|
||||||
@echo ""
|
|
||||||
@echo "Compiler:"
|
|
||||||
@echo " CC: $(CC)"
|
|
||||||
@echo " CPPFLAGS: $(CPPFLAGS)"
|
|
||||||
@echo " CFLAGS: $(CFLAGS)"
|
|
||||||
@echo " LDFLAGS: $(LDFLAGS)"
|
|
||||||
@echo ""
|
|
||||||
@echo "Build Options:"
|
|
||||||
@echo " Debug: $(ENABLE_DEBUG)"
|
|
||||||
@echo " Sanitizers: $(ENABLE_SANITIZERS)"
|
|
||||||
@echo " LTO: $(ENABLE_LTO)"
|
|
||||||
@echo " Strict: $(ENABLE_STRICT)"
|
|
||||||
@echo " Tests: $(ENABLE_TESTS)"
|
|
||||||
@echo ""
|
|
||||||
@echo "Installation:"
|
|
||||||
@echo " PREFIX: $(PREFIX)"
|
|
||||||
@echo " BINDIR: $(BINDIR)"
|
|
||||||
@echo " LIBDIR: $(LIBDIR)"
|
|
||||||
@echo " INCLUDEDIR: $(INCLUDEDIR)"
|
|
||||||
@echo ""
|
|
||||||
@echo "Run './configure --help' to reconfigure"
|
|
||||||
|
|
||||||
.PHONY: help
|
|
||||||
help:
|
|
||||||
@echo "Available targets:"
|
|
||||||
@echo ""
|
|
||||||
@echo " make or make all Build ft_ping"
|
|
||||||
@echo " make test Run tests (if enabled)"
|
|
||||||
@echo " make install Install to PREFIX ($(PREFIX))"
|
|
||||||
@echo " make uninstall Uninstall from system"
|
|
||||||
@echo " make clean Remove object files"
|
|
||||||
@echo " make fclean Remove all built files"
|
|
||||||
@echo " make re Rebuild everything"
|
|
||||||
@echo " make reconfigure Remove build.mk (run ./configure again)"
|
|
||||||
@echo " make distclean Full clean including build.mk"
|
|
||||||
@echo " make info Show build configuration"
|
|
||||||
@echo " make help Show this help"
|
|
||||||
@echo ""
|
|
||||||
@echo "Note: Run './configure' first to generate build.mk"
|
|
||||||
|
|
||||||
# vim: tabstop=8 shiftwidth=8 noexpandtab
|
|
||||||
707
configure
vendored
707
configure
vendored
|
|
@ -1,707 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
# configure - Configuration script for ft_ping
|
|
||||||
# Generates build.mk with build configuration
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# CONSTANTS
|
|
||||||
|
|
||||||
SCRIPT_VERSION="1.0.0"
|
|
||||||
PROJECT_NAME="ft_ping"
|
|
||||||
BUILD_MK="build.mk"
|
|
||||||
LIBICMP_DIR="libicmp"
|
|
||||||
LIBICMP_MAKEFILE="Makefile"
|
|
||||||
|
|
||||||
# Default values
|
|
||||||
DEFAULT_PREFIX="/usr/local"
|
|
||||||
DEFAULT_CC="clang"
|
|
||||||
DEFAULT_LIBICMP_MODE="auto"
|
|
||||||
DEFAULT_LIBRARY_TYPE="shared"
|
|
||||||
DEFAULT_ENABLE_TESTS="no"
|
|
||||||
DEFAULT_ENABLE_DEBUG="no"
|
|
||||||
DEFAULT_ENABLE_SANITIZERS="no"
|
|
||||||
DEFAULT_ENABLE_LTO="no"
|
|
||||||
DEFAULT_ENABLE_STRICT="no"
|
|
||||||
DEFAULT_SUDO_TESTS="yes"
|
|
||||||
DEFAULT_INSTALL_LIBICMP="no"
|
|
||||||
|
|
||||||
# Current configuration
|
|
||||||
PREFIX="$DEFAULT_PREFIX"
|
|
||||||
CC="$DEFAULT_CC"
|
|
||||||
LIBICMP_MODE="$DEFAULT_LIBICMP_MODE"
|
|
||||||
LIBRARY_TYPE="$DEFAULT_LIBRARY_TYPE"
|
|
||||||
LIBRARY_PREFERENCE="prefer" # prefer, only
|
|
||||||
ENABLE_TESTS="$DEFAULT_ENABLE_TESTS"
|
|
||||||
ENABLE_DEBUG="$DEFAULT_ENABLE_DEBUG"
|
|
||||||
ENABLE_SANITIZERS="$DEFAULT_ENABLE_SANITIZERS"
|
|
||||||
ENABLE_LTO="$DEFAULT_ENABLE_LTO"
|
|
||||||
ENABLE_STRICT="$DEFAULT_ENABLE_STRICT"
|
|
||||||
SUDO_TESTS="$DEFAULT_SUDO_TESTS"
|
|
||||||
INSTALL_LIBICMP="$DEFAULT_INSTALL_LIBICMP"
|
|
||||||
VERBOSE="no"
|
|
||||||
QUIET="no"
|
|
||||||
|
|
||||||
# User-provided flags
|
|
||||||
USER_CFLAGS=""
|
|
||||||
USER_LDFLAGS=""
|
|
||||||
USER_CPPFLAGS=""
|
|
||||||
|
|
||||||
# Derived paths
|
|
||||||
BINDIR=""
|
|
||||||
LIBDIR=""
|
|
||||||
INCLUDEDIR=""
|
|
||||||
LIBICMP_PREFIX=""
|
|
||||||
|
|
||||||
# HELPER FUNCTIONS
|
|
||||||
|
|
||||||
info() {
|
|
||||||
if [ "$QUIET" != "yes" ]; then
|
|
||||||
echo -e "[INFO] $*"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
success() {
|
|
||||||
if [ "$QUIET" != "yes" ]; then
|
|
||||||
echo -e "[OK] $*"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
warn() {
|
|
||||||
echo -e "[WARN] $*" >&2
|
|
||||||
}
|
|
||||||
|
|
||||||
error() {
|
|
||||||
echo -e "[ERROR] $*" >&2
|
|
||||||
}
|
|
||||||
|
|
||||||
fatal() {
|
|
||||||
error "$@"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
verbose() {
|
|
||||||
if [ "$VERBOSE" = "yes" ]; then
|
|
||||||
echo -e "[VERBOSE] $*"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# HELP
|
|
||||||
|
|
||||||
show_help() {
|
|
||||||
cat << EOF
|
|
||||||
Usage: ./configure [OPTIONS]
|
|
||||||
|
|
||||||
Configuration script for $PROJECT_NAME v$SCRIPT_VERSION
|
|
||||||
|
|
||||||
libicmp Options:
|
|
||||||
--with-system-libicmp Use system-installed libicmp (fail if not found)
|
|
||||||
--with-local-libicmp Build local libicmp (ignore system version)
|
|
||||||
--auto-libicmp Auto-detect libicmp (default)
|
|
||||||
|
|
||||||
Library Type Options:
|
|
||||||
--prefer-static Prefer static library (.a) with fallback (default if local)
|
|
||||||
--prefer-shared Prefer shared library (.so) with fallback (default if system)
|
|
||||||
--static-only Require static library (fail if unavailable)
|
|
||||||
--shared-only Require shared library (fail if unavailable)
|
|
||||||
|
|
||||||
Build Options:
|
|
||||||
--enable-debug Enable debug symbols (-g -O0)
|
|
||||||
--disable-debug Disable debug (default, -O2)
|
|
||||||
--enable-sanitizers Enable AddressSanitizer and UndefinedBehaviorSanitizer
|
|
||||||
--enable-lto Enable Link Time Optimization
|
|
||||||
--strict Enable strict warnings (-Wpedantic -Wconversion etc.)
|
|
||||||
|
|
||||||
Installation Paths:
|
|
||||||
--prefix=PREFIX Installation prefix (default: $DEFAULT_PREFIX)
|
|
||||||
--bindir=DIR Binary directory (default: PREFIX/bin)
|
|
||||||
--libdir=DIR Library directory (default: PREFIX/lib)
|
|
||||||
--includedir=DIR Include directory (default: PREFIX/include)
|
|
||||||
--libicmp-prefix=PREFIX libicmp installation prefix (default: same as --prefix)
|
|
||||||
|
|
||||||
Test Options:
|
|
||||||
--enable-tests Build tests (requires criterion)
|
|
||||||
--disable-tests Don't build tests (default)
|
|
||||||
--enable-sudo-tests Tests require sudo (default)
|
|
||||||
--disable-sudo-tests Tests without sudo (requires capabilities)
|
|
||||||
|
|
||||||
libicmp Installation:
|
|
||||||
--install-libicmp Install libicmp to system (if built locally)
|
|
||||||
--no-install-libicmp Don't install libicmp (default)
|
|
||||||
|
|
||||||
Compiler Options:
|
|
||||||
CC=compiler Specify compiler (default: $DEFAULT_CC)
|
|
||||||
CFLAGS="flags" Additional compilation flags
|
|
||||||
CPPFLAGS="flags" Additional preprocessor flags
|
|
||||||
LDFLAGS="flags" Additional linker flags
|
|
||||||
|
|
||||||
Other Options:
|
|
||||||
--help, -h Show this help message
|
|
||||||
--version, -v Show version
|
|
||||||
--verbose Verbose output during configuration
|
|
||||||
--quiet, -q Quiet mode (minimal output)
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
./configure
|
|
||||||
./configure --with-local-libicmp --static-only
|
|
||||||
./configure --enable-debug --enable-sanitizers --enable-tests
|
|
||||||
./configure --prefix=/opt/ft_ping --install-libicmp
|
|
||||||
./configure CC=gcc --strict
|
|
||||||
|
|
||||||
EOF
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
|
|
||||||
show_version() {
|
|
||||||
echo "$PROJECT_NAME configure script version $SCRIPT_VERSION"
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# ARGUMENT PARSING
|
|
||||||
|
|
||||||
parse_arguments() {
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
--help|-h)
|
|
||||||
show_help
|
|
||||||
;;
|
|
||||||
--version|-v)
|
|
||||||
show_version
|
|
||||||
;;
|
|
||||||
--verbose)
|
|
||||||
VERBOSE="yes"
|
|
||||||
;;
|
|
||||||
--quiet|-q)
|
|
||||||
QUIET="yes"
|
|
||||||
;;
|
|
||||||
|
|
||||||
# libicmp mode
|
|
||||||
--with-system-libicmp)
|
|
||||||
LIBICMP_MODE="system"
|
|
||||||
;;
|
|
||||||
--with-local-libicmp)
|
|
||||||
LIBICMP_MODE="local"
|
|
||||||
;;
|
|
||||||
--auto-libicmp)
|
|
||||||
LIBICMP_MODE="auto"
|
|
||||||
;;
|
|
||||||
|
|
||||||
# Library type
|
|
||||||
--prefer-static)
|
|
||||||
LIBRARY_TYPE="static"
|
|
||||||
LIBRARY_PREFERENCE="prefer"
|
|
||||||
;;
|
|
||||||
--prefer-shared)
|
|
||||||
LIBRARY_TYPE="shared"
|
|
||||||
LIBRARY_PREFERENCE="prefer"
|
|
||||||
;;
|
|
||||||
--static-only)
|
|
||||||
LIBRARY_TYPE="static"
|
|
||||||
LIBRARY_PREFERENCE="only"
|
|
||||||
;;
|
|
||||||
--shared-only)
|
|
||||||
LIBRARY_TYPE="shared"
|
|
||||||
LIBRARY_PREFERENCE="only"
|
|
||||||
;;
|
|
||||||
|
|
||||||
# Build options
|
|
||||||
--enable-debug)
|
|
||||||
ENABLE_DEBUG="yes"
|
|
||||||
;;
|
|
||||||
--disable-debug)
|
|
||||||
ENABLE_DEBUG="no"
|
|
||||||
;;
|
|
||||||
--enable-sanitizers)
|
|
||||||
ENABLE_SANITIZERS="yes"
|
|
||||||
;;
|
|
||||||
--enable-lto)
|
|
||||||
ENABLE_LTO="yes"
|
|
||||||
;;
|
|
||||||
--strict)
|
|
||||||
ENABLE_STRICT="yes"
|
|
||||||
;;
|
|
||||||
|
|
||||||
# Installation paths
|
|
||||||
--prefix=*)
|
|
||||||
PREFIX="${1#*=}"
|
|
||||||
;;
|
|
||||||
--bindir=*)
|
|
||||||
BINDIR="${1#*=}"
|
|
||||||
;;
|
|
||||||
--libdir=*)
|
|
||||||
LIBDIR="${1#*=}"
|
|
||||||
;;
|
|
||||||
--includedir=*)
|
|
||||||
INCLUDEDIR="${1#*=}"
|
|
||||||
;;
|
|
||||||
--libicmp-prefix=*)
|
|
||||||
LIBICMP_PREFIX="${1#*=}"
|
|
||||||
;;
|
|
||||||
|
|
||||||
# Tests
|
|
||||||
--enable-tests)
|
|
||||||
ENABLE_TESTS="yes"
|
|
||||||
;;
|
|
||||||
--disable-tests)
|
|
||||||
ENABLE_TESTS="no"
|
|
||||||
;;
|
|
||||||
--enable-sudo-tests)
|
|
||||||
SUDO_TESTS="yes"
|
|
||||||
;;
|
|
||||||
--disable-sudo-tests)
|
|
||||||
SUDO_TESTS="no"
|
|
||||||
;;
|
|
||||||
|
|
||||||
# libicmp installation
|
|
||||||
--install-libicmp)
|
|
||||||
INSTALL_LIBICMP="yes"
|
|
||||||
;;
|
|
||||||
--no-install-libicmp)
|
|
||||||
INSTALL_LIBICMP="no"
|
|
||||||
;;
|
|
||||||
|
|
||||||
# Compiler variables
|
|
||||||
CC=*)
|
|
||||||
CC="${1#*=}"
|
|
||||||
;;
|
|
||||||
CFLAGS=*)
|
|
||||||
USER_CFLAGS="${1#*=}"
|
|
||||||
;;
|
|
||||||
CPPFLAGS=*)
|
|
||||||
USER_CPPFLAGS="${1#*=}"
|
|
||||||
;;
|
|
||||||
LDFLAGS=*)
|
|
||||||
USER_LDFLAGS="${1#*=}"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
fatal "Unknown option: $1\nTry './configure --help' for more information."
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# VALIDATION
|
|
||||||
|
|
||||||
validate_configuration() {
|
|
||||||
verbose "Validating configuration..."
|
|
||||||
|
|
||||||
# Check for conflicting options
|
|
||||||
if [ "$LIBICMP_MODE" = "system" ] && [ "$INSTALL_LIBICMP" = "yes" ]; then
|
|
||||||
warn "Option --install-libicmp ignored when using system libicmp"
|
|
||||||
INSTALL_LIBICMP="no"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set derived paths
|
|
||||||
[ -z "$BINDIR" ] && BINDIR="$PREFIX/bin"
|
|
||||||
[ -z "$LIBDIR" ] && LIBDIR="$PREFIX/lib"
|
|
||||||
[ -z "$INCLUDEDIR" ] && INCLUDEDIR="$PREFIX/include"
|
|
||||||
[ -z "$LIBICMP_PREFIX" ] && LIBICMP_PREFIX="$PREFIX"
|
|
||||||
|
|
||||||
verbose "PREFIX=$PREFIX"
|
|
||||||
verbose "BINDIR=$BINDIR"
|
|
||||||
verbose "LIBDIR=$LIBDIR"
|
|
||||||
verbose "INCLUDEDIR=$INCLUDEDIR"
|
|
||||||
}
|
|
||||||
|
|
||||||
# DETECTION
|
|
||||||
|
|
||||||
check_command() {
|
|
||||||
local cmd="$1"
|
|
||||||
if command -v "$cmd" >/dev/null 2>&1; then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
check_compiler() {
|
|
||||||
info "Checking for compiler: $CC"
|
|
||||||
|
|
||||||
if ! check_command "$CC"; then
|
|
||||||
fatal "Compiler '$CC' not found"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get compiler version
|
|
||||||
local cc_version
|
|
||||||
cc_version=$($CC --version 2>&1 | head -n1)
|
|
||||||
success "Found $cc_version"
|
|
||||||
|
|
||||||
verbose "Compiler: $CC"
|
|
||||||
verbose "Version: $cc_version"
|
|
||||||
}
|
|
||||||
|
|
||||||
detect_system_libicmp() {
|
|
||||||
local system_libdir="${PREFIX}/lib"
|
|
||||||
local system_includedir="${PREFIX}/include"
|
|
||||||
|
|
||||||
verbose "Searching for system libicmp in $system_libdir"
|
|
||||||
|
|
||||||
SYSTEM_LIBICMP_STATIC="${system_libdir}/libicmp.a"
|
|
||||||
SYSTEM_LIBICMP_SHARED="${system_libdir}/libicmp.so"
|
|
||||||
SYSTEM_ICMP_H="${system_includedir}/icmp.h"
|
|
||||||
|
|
||||||
HAS_STATIC="no"
|
|
||||||
HAS_SHARED="no"
|
|
||||||
HAS_HEADERS="no"
|
|
||||||
|
|
||||||
if [ -f "$SYSTEM_LIBICMP_STATIC" ]; then
|
|
||||||
HAS_STATIC="yes"
|
|
||||||
verbose "Found static library: $SYSTEM_LIBICMP_STATIC"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "$SYSTEM_LIBICMP_SHARED" ]; then
|
|
||||||
HAS_SHARED="yes"
|
|
||||||
verbose "Found shared library: $SYSTEM_LIBICMP_SHARED"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "$SYSTEM_ICMP_H" ]; then
|
|
||||||
HAS_HEADERS="yes"
|
|
||||||
verbose "Found headers: $SYSTEM_ICMP_H"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$HAS_HEADERS" = "yes" ] && { [ "$HAS_STATIC" = "yes" ] || [ "$HAS_SHARED" = "yes" ]; }; then
|
|
||||||
return 0 # System libicmp found
|
|
||||||
else
|
|
||||||
return 1 # System libicmp not found
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
decide_libicmp_source() {
|
|
||||||
info "Determining libicmp source..."
|
|
||||||
|
|
||||||
case "$LIBICMP_MODE" in
|
|
||||||
system)
|
|
||||||
verbose "Mode: force system libicmp"
|
|
||||||
if detect_system_libicmp; then
|
|
||||||
success "Using system-installed libicmp from $PREFIX/lib"
|
|
||||||
USE_SYSTEM_LIBICMP="yes"
|
|
||||||
BUILD_LOCAL_LIBICMP="no"
|
|
||||||
else
|
|
||||||
fatal "System libicmp not found but --with-system-libicmp specified"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
local)
|
|
||||||
verbose "Mode: force local build"
|
|
||||||
success "Building local libicmp from $LIBICMP_DIR/"
|
|
||||||
USE_SYSTEM_LIBICMP="no"
|
|
||||||
BUILD_LOCAL_LIBICMP="yes"
|
|
||||||
;;
|
|
||||||
|
|
||||||
auto)
|
|
||||||
verbose "Mode: auto-detect"
|
|
||||||
if detect_system_libicmp; then
|
|
||||||
success "Using system-installed libicmp from $PREFIX/lib"
|
|
||||||
USE_SYSTEM_LIBICMP="yes"
|
|
||||||
BUILD_LOCAL_LIBICMP="no"
|
|
||||||
else
|
|
||||||
info "System libicmp not found, will build local version"
|
|
||||||
USE_SYSTEM_LIBICMP="no"
|
|
||||||
BUILD_LOCAL_LIBICMP="yes"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
determine_library_type() {
|
|
||||||
info "Determining library type..."
|
|
||||||
|
|
||||||
if [ "$USE_SYSTEM_LIBICMP" = "yes" ]; then
|
|
||||||
# System library - check what's available
|
|
||||||
case "$LIBRARY_TYPE" in
|
|
||||||
static)
|
|
||||||
if [ "$HAS_STATIC" = "yes" ]; then
|
|
||||||
FINAL_LIBRARY_TYPE="static"
|
|
||||||
LIBICMP_PATH="$SYSTEM_LIBICMP_STATIC"
|
|
||||||
success "Using static system library"
|
|
||||||
elif [ "$LIBRARY_PREFERENCE" = "only" ]; then
|
|
||||||
fatal "Static library required but only shared library found"
|
|
||||||
elif [ "$HAS_SHARED" = "yes" ]; then
|
|
||||||
warn "Static library not found, falling back to shared"
|
|
||||||
FINAL_LIBRARY_TYPE="shared"
|
|
||||||
LIBICMP_PATH="$SYSTEM_LIBICMP_SHARED"
|
|
||||||
else
|
|
||||||
fatal "No suitable library found"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
shared)
|
|
||||||
if [ "$HAS_SHARED" = "yes" ]; then
|
|
||||||
FINAL_LIBRARY_TYPE="shared"
|
|
||||||
LIBICMP_PATH="$SYSTEM_LIBICMP_SHARED"
|
|
||||||
success "Using shared system library"
|
|
||||||
elif [ "$LIBRARY_PREFERENCE" = "only" ]; then
|
|
||||||
fatal "Shared library required but only static library found"
|
|
||||||
elif [ "$HAS_STATIC" = "yes" ]; then
|
|
||||||
warn "Shared library not found, falling back to static"
|
|
||||||
FINAL_LIBRARY_TYPE="static"
|
|
||||||
LIBICMP_PATH="$SYSTEM_LIBICMP_STATIC"
|
|
||||||
else
|
|
||||||
fatal "No suitable library found"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
# Local build - we control what to build
|
|
||||||
FINAL_LIBRARY_TYPE="$LIBRARY_TYPE"
|
|
||||||
|
|
||||||
if [ "$FINAL_LIBRARY_TYPE" = "static" ]; then
|
|
||||||
LIBICMP_BUILD_STATIC="yes"
|
|
||||||
LIBICMP_BUILD_SHARED="no"
|
|
||||||
LIBICMP_PATH="$LIBICMP_DIR/libicmp.a"
|
|
||||||
success "Will build static library"
|
|
||||||
else
|
|
||||||
LIBICMP_BUILD_STATIC="no"
|
|
||||||
LIBICMP_BUILD_SHARED="yes"
|
|
||||||
LIBICMP_PATH="$LIBICMP_DIR/libicmp.so"
|
|
||||||
success "Will build shared library"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
verbose "Final library type: $FINAL_LIBRARY_TYPE"
|
|
||||||
verbose "Library path: $LIBICMP_PATH"
|
|
||||||
}
|
|
||||||
|
|
||||||
check_test_dependencies() {
|
|
||||||
if [ "$ENABLE_TESTS" = "yes" ]; then
|
|
||||||
info "Checking test dependencies..."
|
|
||||||
|
|
||||||
# Check for criterion library
|
|
||||||
if ! $CC -lcriterion -o /dev/null -xc - >/dev/null 2>&1 <<< "int main(){return 0;}"; then
|
|
||||||
warn "Criterion library not found, tests may fail to build"
|
|
||||||
warn "Install criterion: https://github.com/Snaipe/Criterion"
|
|
||||||
else
|
|
||||||
success "Found criterion library"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# BUILD.MK GENERATION
|
|
||||||
|
|
||||||
generate_build_mk() {
|
|
||||||
info "Generating $BUILD_MK..."
|
|
||||||
|
|
||||||
local timestamp
|
|
||||||
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|
||||||
|
|
||||||
# Prepare compiler flags
|
|
||||||
local cflags="-Wall -Wextra -Werror -pipe"
|
|
||||||
local cppflags="-std=c99 -I includes -D_GNU_SOURCE"
|
|
||||||
local ldflags=""
|
|
||||||
local debug_flags=""
|
|
||||||
local sanitizer_flags=""
|
|
||||||
local lto_flags=""
|
|
||||||
local strict_flags=""
|
|
||||||
|
|
||||||
# Debug flags
|
|
||||||
if [ "$ENABLE_DEBUG" = "yes" ]; then
|
|
||||||
debug_flags="-g -O0 -DDEBUG"
|
|
||||||
else
|
|
||||||
debug_flags="-O2 -DNDEBUG"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Sanitizer flags
|
|
||||||
if [ "$ENABLE_SANITIZERS" = "yes" ]; then
|
|
||||||
sanitizer_flags="-fsanitize=address,undefined -fno-omit-frame-pointer"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# LTO flags
|
|
||||||
if [ "$ENABLE_LTO" = "yes" ]; then
|
|
||||||
lto_flags="-flto"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Strict flags
|
|
||||||
if [ "$ENABLE_STRICT" = "yes" ]; then
|
|
||||||
strict_flags="-Wpedantic -Wconversion -Wshadow -Wcast-align -Wstrict-prototypes -Wvla -Wswitch-enum -Wunreachable-code"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# libicmp-specific configuration
|
|
||||||
if [ "$USE_SYSTEM_LIBICMP" = "yes" ]; then
|
|
||||||
LIBICMP_DEP=""
|
|
||||||
ldflags="-licmp"
|
|
||||||
else
|
|
||||||
LIBICMP_DEP="$LIBICMP_PATH"
|
|
||||||
cppflags="$cppflags -I $LIBICMP_DIR/includes"
|
|
||||||
ldflags="-L$LIBICMP_DIR -licmp"
|
|
||||||
|
|
||||||
if [ "$FINAL_LIBRARY_TYPE" = "shared" ] && [ "$INSTALL_LIBICMP" = "yes" ]; then
|
|
||||||
ldflags="$ldflags -Wl,-rpath,$LIBDIR"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Math library (required for stats mdev)
|
|
||||||
ldflags="$ldflags -lm"
|
|
||||||
|
|
||||||
# User-provided flags
|
|
||||||
if [ -n "$USER_CFLAGS" ]; then
|
|
||||||
cflags="$cflags $USER_CFLAGS"
|
|
||||||
fi
|
|
||||||
if [ -n "$USER_CPPFLAGS" ]; then
|
|
||||||
cppflags="$cppflags $USER_CPPFLAGS"
|
|
||||||
fi
|
|
||||||
if [ -n "$USER_LDFLAGS" ]; then
|
|
||||||
ldflags="$ldflags $USER_LDFLAGS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Write build.mk
|
|
||||||
cat > "$BUILD_MK" << EOF
|
|
||||||
# $BUILD_MK - Generated by configure on $timestamp
|
|
||||||
# DO NOT EDIT - This file is automatically generated
|
|
||||||
|
|
||||||
|
|
||||||
# libicmp Configuration
|
|
||||||
|
|
||||||
USE_SYSTEM_LIBICMP = $USE_SYSTEM_LIBICMP
|
|
||||||
BUILD_LOCAL_LIBICMP = $BUILD_LOCAL_LIBICMP
|
|
||||||
LIBICMP_TYPE = $FINAL_LIBRARY_TYPE
|
|
||||||
LIBICMP_DIR = $LIBICMP_DIR
|
|
||||||
LIBICMP_PATH = $LIBICMP_PATH
|
|
||||||
LIBICMP_DEP = $LIBICMP_DEP
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [ "$BUILD_LOCAL_LIBICMP" = "yes" ]; then
|
|
||||||
local libicmp_cflags="-Wall -Wextra -Werror -pipe -Wpedantic -Wconversion"
|
|
||||||
local libicmp_cppflags="-std=c99 -I includes -D_POSIX_C_SOURCE=199309L"
|
|
||||||
|
|
||||||
libicmp_cflags="$libicmp_cflags $debug_flags"
|
|
||||||
|
|
||||||
if [ "$ENABLE_SANITIZERS" = "yes" ]; then
|
|
||||||
libicmp_cflags="$libicmp_cflags $sanitizer_flags"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$ENABLE_LTO" = "yes" ]; then
|
|
||||||
libicmp_cflags="$libicmp_cflags $lto_flags"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >> "$BUILD_MK" << EOF
|
|
||||||
# libicmp build configuration
|
|
||||||
LIBICMP_BUILD_STATIC = $LIBICMP_BUILD_STATIC
|
|
||||||
LIBICMP_BUILD_SHARED = $LIBICMP_BUILD_SHARED
|
|
||||||
LIBICMP_CC = $CC
|
|
||||||
LIBICMP_CPPFLAGS = $libicmp_cppflags
|
|
||||||
LIBICMP_CFLAGS = $libicmp_cflags
|
|
||||||
LIBICMP_BUILD_FLAGS = BUILD_STATIC=\$(LIBICMP_BUILD_STATIC) BUILD_SHARED=\$(LIBICMP_BUILD_SHARED) CC=\$(LIBICMP_CC) CPPFLAGS="\$(LIBICMP_CPPFLAGS)" CFLAGS="\$(LIBICMP_CFLAGS)"
|
|
||||||
LIBICMP_MAKEFILE = $LIBICMP_MAKEFILE
|
|
||||||
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >> "$BUILD_MK" << EOF
|
|
||||||
|
|
||||||
# Compiler Configuration
|
|
||||||
|
|
||||||
CC = $CC
|
|
||||||
CPPFLAGS = $cppflags
|
|
||||||
CFLAGS = $cflags
|
|
||||||
LDFLAGS = $ldflags
|
|
||||||
|
|
||||||
# Individual flag components (for reference)
|
|
||||||
DEBUG_FLAGS = $debug_flags
|
|
||||||
SANITIZER_FLAGS = $sanitizer_flags
|
|
||||||
LTO_FLAGS = $lto_flags
|
|
||||||
STRICT_FLAGS = $strict_flags
|
|
||||||
|
|
||||||
# Combined flags
|
|
||||||
CFLAGS += \$(DEBUG_FLAGS) \$(SANITIZER_FLAGS) \$(LTO_FLAGS) \$(STRICT_FLAGS)
|
|
||||||
LDFLAGS += \$(SANITIZER_FLAGS) \$(LTO_FLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
# Installation Paths
|
|
||||||
|
|
||||||
PREFIX = $PREFIX
|
|
||||||
BINDIR = $BINDIR
|
|
||||||
LIBDIR = $LIBDIR
|
|
||||||
INCLUDEDIR = $INCLUDEDIR
|
|
||||||
|
|
||||||
|
|
||||||
# Test Configuration
|
|
||||||
|
|
||||||
ENABLE_TESTS = $ENABLE_TESTS
|
|
||||||
SUDO_TESTS = $SUDO_TESTS
|
|
||||||
TEST_LDFLAGS = -lcriterion
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
|
|
||||||
ENABLE_DEBUG = $ENABLE_DEBUG
|
|
||||||
ENABLE_SANITIZERS = $ENABLE_SANITIZERS
|
|
||||||
ENABLE_LTO = $ENABLE_LTO
|
|
||||||
ENABLE_STRICT = $ENABLE_STRICT
|
|
||||||
|
|
||||||
|
|
||||||
# libicmp Installation (if built locally)
|
|
||||||
|
|
||||||
INSTALL_LIBICMP = $INSTALL_LIBICMP
|
|
||||||
LIBICMP_PREFIX = $LIBICMP_PREFIX
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
success "Generated $BUILD_MK"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# SUMMARY
|
|
||||||
|
|
||||||
|
|
||||||
show_summary() {
|
|
||||||
if [ "$QUIET" = "yes" ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat << EOF
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
Configuration Summary for $PROJECT_NAME
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
libicmp Source: $([ "$USE_SYSTEM_LIBICMP" = "yes" ] && echo "system ($PREFIX/lib)" || echo "local ($LIBICMP_DIR/)")
|
|
||||||
Library Type: $FINAL_LIBRARY_TYPE
|
|
||||||
Compiler: $CC
|
|
||||||
Installation Prefix: $PREFIX
|
|
||||||
|
|
||||||
Build Options:
|
|
||||||
Debug: $ENABLE_DEBUG
|
|
||||||
Sanitizers: $ENABLE_SANITIZERS
|
|
||||||
LTO: $ENABLE_LTO
|
|
||||||
Strict: $ENABLE_STRICT
|
|
||||||
Tests: $ENABLE_TESTS$([ "$ENABLE_TESTS" = "yes" ] && echo " ($([ "$SUDO_TESTS" = "yes" ] && echo "with sudo" || echo "without sudo"))" || echo "")
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [ "$BUILD_LOCAL_LIBICMP" = "yes" ]; then
|
|
||||||
cat << EOF
|
|
||||||
libicmp Installation: $([ "$INSTALL_LIBICMP" = "yes" ] && echo "yes (to $LIBICMP_PREFIX)" || echo "no (local use only)")
|
|
||||||
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat << EOF
|
|
||||||
Compiler Flags:
|
|
||||||
CPPFLAGS: $cppflags
|
|
||||||
CFLAGS: -Wall -Wextra -Werror -pipe $debug_flags $sanitizer_flags $lto_flags $strict_flags
|
|
||||||
LDFLAGS: $ldflags
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Configuration saved to $BUILD_MK
|
|
||||||
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# MAIN
|
|
||||||
|
|
||||||
main() {
|
|
||||||
parse_arguments "$@"
|
|
||||||
validate_configuration
|
|
||||||
check_compiler
|
|
||||||
decide_libicmp_source
|
|
||||||
determine_library_type
|
|
||||||
check_test_dependencies
|
|
||||||
generate_build_mk
|
|
||||||
show_summary
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
1
libcli
Submodule
1
libcli
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit a1bb371d3ad2a77af8888b8c7d8b645026483f76
|
||||||
Loading…
Add table
Reference in a new issue