diff --git a/config.gnu.mk b/config.gnu.mk index f1151b9..9dc4a63 100644 --- a/config.gnu.mk +++ b/config.gnu.mk @@ -132,27 +132,31 @@ MIQ_CFGLFLAGS= $(MIQ_LDFLAGS) \ MIQ_CFGFLAGS= $(MIQ_CFGLFLAGS) \ $(shell $(CAT) $(MIQ_PKGCFLAGS) $(MIQ_PKGLDFLAGS)) +MIQ_CFGSET= && MIQ_CFGRC=1 || MIQ_CFGRC=0; MIQ_CFGTEST= "$<" -o "$<".exe > "$<".err 2>&1 && \ [ -x "$<".exe ] && \ - "$<".exe > "$<".out && MIQ_CFGRC=1 || MIQ_CFGRC=0; + "$<".exe > "$<".out \ + $(MIQ_CFGSET) MIQ_CFGUNDEF0= $$MIQ_CFGRC \ | sed -e 's|^\#define \(.*\) 0$$|/* \#undef \1 */|g' > "$@"; \ [ -f "$<".out ] && cat >> "$@" "$<".out; true MIQ_CFGDEF= echo '\#define' -MIQ_CFGCFLAGS= $(MIQ_CFLAGS) $(MIQ_CFGFLAGS) $(CFLAGS_CONFIG_$*) -MIQ_CFGCXXFLAGS=$(MIQCXXFLAGS) $(MIQ_CFGFLAGS) $(CFLAGS_CONFIG_$*) +MIQ_CFGCFLAGS= $(CFLAGS) $(CFLAGS_CONFIG_$*) +MIQ_CFGCXXFLAGS=$(CXXFLAGS) $(CFLAGS_CONFIG_$*) -MIQ_CFGCC_CMD= $(CC) $(MIQ_CFGCFLAGS) $(MIQ_CFGTEST) -MIQ_CFGCXX_CMD= $(CXX) $(MIQ_CFGCXXFLAGS) $(MIQ_CFGTEST) -MIQ_CFGLIB_CMD= $(CC) $(MIQ_CFGLFLAGS) -l$* $(MIQ_CFGTEST) -MIQ_CFGFN_CMD= $(CC) $(MIQ_CFGCFLAGS) $(CFLAGS_CONFIG_$*) $(MIQ_CFGTEST) +MIQ_CFGCC_CMD= $(CC) $(MIQ_CFGCFLAGS) $(MIQ_CFGTEST) +MIQ_CFGCXX_CMD= $(CXX) $(MIQ_CFGCXXFLAGS) $(MIQ_CFGTEST) +MIQ_CFGLIB_CMD= $(CC) $(MIQ_CFGLFLAGS) -l$* $(MIQ_CFGTEST) +MIQ_CFGFN_CMD= $(CC) $(MIQ_CFGCFLAGS) $(CFLAGS_CONFIG_$*) $(MIQ_CFGTEST) +MIQ_CFGPK_CMD= pkg-config $* --silence-errors $(MIQ_CFGSET) -CC_CONFIG= $(MIQ_CFGCC_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER)_H $(MIQ_CFGUNDEF0) -CXX_CONFIG= $(MIQ_CFGCXX_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) -LIB_CONFIG= $(MIQ_CFGLIB_CMD) $(MIQ_CFGDEF) HAVE_LIB$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) -FN_CONFIG= $(MIQ_CFGFN_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) +MIQ_CC_CFG= $(MIQ_CFGCC_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER)_H $(MIQ_CFGUNDEF0) +MIQ_CXX_CFG= $(MIQ_CFGCXX_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) +MIQ_LIB_CFG= $(MIQ_CFGLIB_CMD) $(MIQ_CFGDEF) HAVE_LIB$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) +MIQ_FN_CFG= $(MIQ_CFGFN_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) +MIQ_PK_CFG= $(MIQ_CFGPK_CMD) $(MIQ_CFGDEF) HAVE_$(MIQ_CFGUPPER) $(MIQ_CFGUNDEF0) -MAKE_CONFIG= sed -e 's|^\#define \([^ ]*\) \(.*\)$$|\1=\2|g' \ +MIQ_MK_CFG= sed -e 's|^\#define \([^ ]*\) \(.*\)$$|\1=\2|g' \ -e 's|.*undef.*||g' < "$<" > "$@" diff --git a/config.mk b/config.mk index 0ac7ddf..35a2fef 100644 --- a/config.mk +++ b/config.mk @@ -65,7 +65,7 @@ NOT_PARALLEL?= .NOTPARALLEL GIT_REVISION:= $(shell git rev-parse --short HEAD 2> /dev/null || echo "unknown") # Package installation directory -PACKAGE_DIR=$(PACKAGE_NAME:%=%/) +PACKAGE_DIR?=$(PACKAGE_NAME:%=%/) PACKAGE_LIBS=$(MIQ_PRODLIB) PACKAGE_DLLS=$(MIQ_PRODDLL) diff --git a/rules.mk b/rules.mk index c425a12..f3c032f 100644 --- a/rules.mk +++ b/rules.mk @@ -436,7 +436,9 @@ $(MIQ_OUTEXE): $(MIQ_TOLINK) $$(MIQ_TOLINK) $(MIQ_MAKEDEPS) # Package configuration file MIQ_PKGCFLAGS= $(PKGCONFIGS:%=$(MIQ_OBJDIR)%.pkg-config.cflags) MIQ_PKGLDFLAGS= $(PKGCONFIGS:%=$(MIQ_OBJDIR)%.pkg-config.ldflags) -MIQ_PKGLIBS= $(patsubst %,$(OBJDIR)%.cfg.ldflags,$(filter lib%,$(CONFIG))) +MIQ_PKGCONFIGS= $(PKGCONFIGS:%?=%) +MIQ_PKGCFG= $(MIQ_PKGONFIGS:%=$(MIQ_OBJDIR)CFG_HAVE_PACKAGE_%.h) +MIQ_PKGLIBS= $(patsubst %,$(MIQ_OBJDIR)%.cfg.ldflags,$(filter lib%,$(CONFIG))) MIQ_PKGDEPS= $(MIQ_MAKEDEPS) $(MIQ_OBJDIR).mkdir # Build the package config from cflags, ldflags and libs config @@ -467,7 +469,7 @@ $(MIQ_OBJDIR)lib%.cfg.ldflags: $(MIQ_OBJDIR)CFG_HAVE_lib%.h $(MIQ_PKGDEPS) #------------------------------------------------------------------------------ # Normalize header configuration name (turn into .lt.foo.h.gt. and back) -MIQ_NORMCONFIG=$(subst <,.lt.,$(subst >,.gt.,$(subst /,.sl.,$(CONFIG)))) +MIQ_NORMCONFIG=$(subst <,.lt.,$(subst >,.gt.,$(subst /,.sl.,$(CONFIG) $(PKGCONFIGS:%=PACKAGE_%)))) MIQ_ORIGTARGET=$(subst .lt.,<,$(subst .gt.,>,$(subst .sl.,/,$*))) MIQ_CONFIGDEPS= $(MIQ_PKGDEPS) \ $(PKGCONFIGS:%=$(MIQ_OBJDIR)pkg-config.mk) \ @@ -479,39 +481,44 @@ config.h: $(MIQ_NORMCONFIG:%=$(MIQ_OBJDIR)CFG_HAVE_%.h) # Build makefile configuration files from generated .h files $(MIQ_OBJDIR)CFG_HAVE_%.mk: $(MIQ_OBJDIR)CFG_HAVE_%.h $(MIQ_MAKEDEPS) - $(PRINT_COMMAND) $(MAKE_CONFIG) + $(PRINT_COMMAND) $(MIQ_MK_CFG) -include $(MIQ_NORMCONFIG:%=$(MIQ_OBJDIR)CFG_HAVE_%.mk) # C standard headers, e.g. HAVE_ $(MIQ_OBJDIR)CFG_HAVE_.lt.%.h.gt..h: $(MIQ_OBJDIR)CFGCH%.c $(MIQ_CONFIGDEPS) - $(PRINT_CONFIG) $(CC_CONFIG) + $(PRINT_CONFIG) $(MIQ_CC_CFG) $(MIQ_OBJDIR)CFGCH%.c: $(MIQ_OBJDIR).mkdir $(MIQ_CONFIGDEPS) $(PRINT_COMMAND) (echo '#include' "<$(MIQ_ORIGTARGET).h>" && echo 'int main() { return 0; }') > "$@" .PRECIOUS: $(MIQ_OBJDIR)CFGCH%.c # C++ Standard headers, e.g. HAVE_ $(MIQ_OBJDIR)CFG_HAVE_.lt.%.gt..h: $(MIQ_OBJDIR)CFGCPPH%.cpp $(MIQ_CONFIGDEPS) - $(PRINT_CONFIG) $(CXX_CONFIG) + $(PRINT_CONFIG) $(MIQ_CXX_CFG) $(MIQ_OBJDIR)CFGCPPH%.cpp: $(MIQ_OBJDIR).mkdir $(MIQ_CONFIGDEPS) $(PRINT_COMMAND) (echo '#include' "<$(MIQ_ORIGTARGET)>" && echo 'int main() { return 0; }') > "$@" .PRECIOUS: $(MIQ_OBJDIR)CFGCPPH%.cpp # Library, e.g. libm $(MIQ_OBJDIR)CFG_HAVE_lib%.h: $(MIQ_OBJDIR)CFGLIB%.c $(MIQ_PKGDEPS) - $(PRINT_LIBCONFIG) $(LIB_CONFIG) + $(PRINT_CONFIG) $(MIQ_LIB_CFG) $(MIQ_OBJDIR)CFGLIB%.c: $(MIQ_PKGDEPS) $(PRINT_COMMAND) echo 'int main() { return 0; }' > "$@" .PRECIOUS: $(MIQ_OBJDIR)CFGLIB%.c # Check if a function is present (code to test in config/check_foo.c) $(MIQ_OBJDIR)CFG_HAVE_%.h: $(MIQ_OBJDIR)CFGFN%.c $(MIQ_CONFIGDEPS) - $(PRINT_CONFIG) $(FN_CONFIG) + $(PRINT_CONFIG) $(MIQ_FN_CFG) $(MIQ_OBJDIR)CFGFN%.c: $(CONFIG_SOURCES)check_%.c $(MIQ_CONFIGDEPS) $(PRINT_COMMAND) cp $< $@ $(MIQ_OBJDIR)CFGFN%.c: config/check_%.c $(MIQ_CONFIGDEPS) $(PRINT_COMMAND) cp $< $@ .PRECIOUS: $(MIQ_OBJDIR)CFGFN%.c +# Packages +$(MIQ_OBJDIR)CFG_HAVE_PACKAGE_%?.h: $(MIQ_CONFIGDEPS) + $(PRINT_CONFIG) $(MIQ_PK_CFG) +$(MIQ_OBJDIR)CFG_HAVE_PACKAGE_%.h: $(MIQ_CONFIGDEPS) + $(PRINT_CONFIG) $(MIQ_PK_CFG) endif