File name mangling when building configuration steps
This is to avoid problems on Windows, where a file name cannot contain < or > and as a result, tests for HAVE_<unistd.h> failed.
This commit is contained in:
parent
2b627dd62b
commit
93d13f8ecd
|
@ -1,5 +1,5 @@
|
|||
#******************************************************************************
|
||||
# config.gnu.mk Recorder project
|
||||
# config.gnu.mk Recorder project
|
||||
#******************************************************************************
|
||||
#
|
||||
# File Description:
|
||||
|
@ -54,7 +54,7 @@ DEPFLAGS= -MD -MP -MF $(@).d -MT $@
|
|||
|
||||
OBJ_EXT= .o
|
||||
LIB_EXT= .a
|
||||
EXE_EXT=
|
||||
EXE_EXT=
|
||||
DLL_EXT= .so
|
||||
|
||||
|
||||
|
@ -84,10 +84,10 @@ AS_DEPEND= $(CC) $(CPPFLAGS) $(CPPFLAGS_$*) -MM -MP -MF $@ -MT $(@:.d=) $<
|
|||
# Configuration checks
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
CONFIG_UPPER=$(shell echo -n "$*" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]' '_')
|
||||
CONFIG_UPPER=$(shell echo -n "$(ORIG_TARGET)" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]' '_')
|
||||
CONFIG_FLAGS=$(shell grep '// [A-Z]*FLAGS=' "$<" | sed -e 's|// [A-Z]*FLAGS=||g')
|
||||
|
||||
CC_CONFIG= mkdir -p "$$(dirname "$@")" ; echo '\#define' HAVE_$(CONFIG_UPPER)_H $(shell $(CC) $(CFLAGS) $(CFLAGS_CONFIG_$*) $(CONFIG_FLAGS) "$<" -o "$<".exe > "$<".err 2>&1 && "$<".exe > "$<".out && echo 1 || echo 0) | sed -e 's|\#define \(.*\) 0|/* \#undef \1 */|g' > "$@"; [ -f "$<".out ] && cat >> "$@" "$<".out; true
|
||||
CXX_CONFIG= mkdir -p "$$(dirname "$@")" ; echo '\#define' HAVE_$(CONFIG_UPPER) $(shell $(CXX) $(CXXFLAGS) $(CXXFLAGS_CONFIG_$*) $(CONFIG_FLAGS) "$<" -o "$<".exe > "$<".err 2>&1 && "$<".exe > "$<".out && echo 1 || echo 0) | sed -e 's|\#define \(.*\) 0|/* \#undef \1 */|g' > "$@"; [ -f "$<".out ] && cat >> "$@" "$<".out; true
|
||||
LIB_CONFIG= mkdir -p "$$(dirname "$@")" ; echo '\#define HAVE_LIB'$(CONFIG_UPPER) $$($(CC) $(CCFLAGS) $(CFLAGS_CONFIG_$*) -l$* "$<" -o "$<".exe > "$<".err 2>&1 && "$<".exe && echo 1 || echo 0) | sed -e 's|\#define \(.*\) 0|/* \#undef \1 */|g' > "$@"
|
||||
FN_CONFIG= mkdir -p "$$(dirname "$@")" ; echo '\#define HAVE_'$(CONFIG_UPPER) $$($(CC) $(CCFLAGS) $(CFLAGS_CONFIG_$*) "$<" -o "$<".exe > "$<".err 2>&1 && "$<".exe && echo 1 || echo 0) | sed -e 's|\#define \(.*\) 0|/* \#undef \1 */|g' > "$@"
|
||||
CC_CONFIG= echo '\#define' HAVE_$(CONFIG_UPPER)_H $(shell $(CC) $(CFLAGS) $(CFLAGS_CONFIG_$*) $(CONFIG_FLAGS) "$<" -o "$<".exe > "$<".err 2>&1 && "$<".exe > "$<".out && echo 1 || echo 0) | sed -e 's|^\#define \(.*\) 0$$|/* \#undef \1 */|g' > "$@"; [ -f "$<".out ] && cat >> "$@" "$<".out; true
|
||||
CXX_CONFIG= echo '\#define' HAVE_$(CONFIG_UPPER) $(shell $(CXX) $(CXXFLAGS) $(CXXFLAGS_CONFIG_$*) $(CONFIG_FLAGS) "$<" -o "$<".exe > "$<".err 2>&1 && "$<".exe > "$<".out && echo 1 || echo 0) | sed -e 's|^\#define \(.*\) 0$$|/* \#undef \1 */|g' > "$@"; [ -f "$<".out ] && cat >> "$@" "$<".out; true
|
||||
LIB_CONFIG= echo '\#define HAVE_LIB'$(CONFIG_UPPER) $$($(CC) $(CCFLAGS) $(CFLAGS_CONFIG_$*) -l$* "$<" -o "$<".exe > "$<".err 2>&1 && "$<".exe && echo 1 || echo 0) | sed -e 's|^\#define \(.*\) 0$$|/* \#undef \1 */|g' > "$@"
|
||||
FN_CONFIG= echo '\#define HAVE_'$(CONFIG_UPPER) $$($(CC) $(CCFLAGS) $(CFLAGS_CONFIG_$*) "$<" -o "$<".exe > "$<".err 2>&1 && "$<".exe > "$<".out && echo 1 || echo 0) | sed -e 's|^\#define \(.*\) 0$$|/* \#undef \1 */|g' > "$@"; [ -f "$<".out ] && cat >> "$@" "$<".out; true
|
||||
|
|
21
rules.mk
21
rules.mk
|
@ -369,31 +369,34 @@ endif
|
|||
# Configuration rules
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
config.h: $(CONFIG:%=$(OBJDIR)/%)
|
||||
$(PRINT_GENERATE) cat $(CONFIG:%="$(OBJDIR)/%") > $@
|
||||
NORM_CONFIG=$(subst <,.lt.,$(subst >,.gt.,$(subst /,.sl.,$(CONFIG))))
|
||||
ORIG_TARGET=$(subst .lt.,<,$(subst .gt.,>,$(subst .sl.,/,$*)))
|
||||
|
||||
config.h: $(NORM_CONFIG:%=$(OBJDIR)/%)
|
||||
$(PRINT_GENERATE) cat $^ > $@
|
||||
|
||||
# C standard headers, e.g. HAVE_<stdio.h>
|
||||
$(OBJDIR)/HAVE_<%.h>: $(OBJDIR)/CONFIG_HAVE_%.c
|
||||
$(OBJDIR)/HAVE_.lt.%.h.gt.: $(OBJDIR)/CONFIG_HAVE_%.c
|
||||
$(PRINT_CONFIG) $(CC_CONFIG)
|
||||
$(OBJDIR)/CONFIG_HAVE_%.c: $(OBJDIR)/.mkdir
|
||||
$(PRINT_GENERATE) mkdir -p "$$(dirname "$@")" ; echo '#include' "<$*.h>" > "$@"; echo 'int main() { return 0; }' >> "$@"
|
||||
$(PRINT_GENERATE) echo '#include' "<$(ORIG_TARGET).h>" > "$@"; echo 'int main() { return 0; }' >> "$@"
|
||||
|
||||
# C++ Standard headers, e.g. HAVE_<iostream>
|
||||
$(OBJDIR)/HAVE_<%>: $(OBJDIR)/CONFIG_HAVE_%.cpp
|
||||
$(OBJDIR)/HAVE_.lt.%.gt.: $(OBJDIR)/CONFIG_HAVE_%.cpp
|
||||
$(PRINT_CONFIG) $(CXX_CONFIG)
|
||||
$(OBJDIR)/CONFIG_HAVE_%.cpp: $(OBJDIR)/.mkdir
|
||||
$(PRINT_GENERATE) mkdir -p "$$(dirname "$@")" ; echo '#include' "<$*>" > "$@"; echo 'int main() { return 0; }' >> "$@"
|
||||
$(PRINT_GENERATE) echo '#include' "<$(ORIG_TARGET)>" > "$@"; echo 'int main() { return 0; }' >> "$@"
|
||||
|
||||
# Library
|
||||
$(OBJDIR)/HAVE_lib%: $(OBJDIR)/CONFIG_LIB%.c
|
||||
$(PRINT_LIBCONFIG) $(LIB_CONFIG)
|
||||
$(OBJDIR)/CONFIG_LIB%.c:
|
||||
$(PRINT_GENERATE) mkdir -p "$$(dirname "$@")" ; echo 'int main() { return 0; }' > "$@"
|
||||
$(OBJDIR)/CONFIG_LIB%.c: $(OBJDIR)/.mkdir
|
||||
$(PRINT_GENERATE) echo 'int main() { return 0; }' > "$@"
|
||||
|
||||
# Check if a function is present
|
||||
$(OBJDIR)/HAVE_%: $(OBJDIR)/CONFIG_CHECK_%.c
|
||||
$(PRINT_CONFIG) $(FN_CONFIG)
|
||||
$(OBJDIR)/CONFIG_CHECK_%.c: $(BUILD)config/check_%.c
|
||||
$(OBJDIR)/CONFIG_CHECK_%.c: $(BUILD)config/check_%.c $(OBJDIR)/.mkdir
|
||||
$(PRINT_COPY) cp $< $@
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue