@@ -254,7 +254,7 @@ endif
254254# objects recipes generation
255255# #
256256$(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y), $(eval $(t)_SOURCES+=$(patsubst %.hpp,%.moc.cpp,$($(t)_QTHEADERS) $($(t)_QTHEADERS-y))))
257- $(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y), $(if $(findstring .cpp, $(notdir $($(t)_SOURCES))), $(eval $(t)_LIBRARY +=stdc++)))
257+ $(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y), $(if $(findstring .cpp, $(notdir $($(t)_SOURCES))), $(eval $(t)_LIBS +=stdc++)))
258258
259259$(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y), $(eval $(t)-objs+=$(patsubst %.s,%.o,$(patsubst %.S,%.o,$(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$($(t)_SOURCES) $($(t)_SOURCES-y)))))))
260260target-objs: =$(foreach t, $(slib-y ) $(lib-y ) $(bin-y ) $(sbin-y ) $(modules-y ) , $(if $($(t ) -objs) , $(addprefix $(obj ) ,$($(t ) -objs) ) , $(obj )$(t ) .o) )
@@ -292,17 +292,22 @@ gcov-target:=$(target-objs:%.o=%.gcov)
292292
293293$(foreach t,$(slib-y) $(lib-y),$(eval include-y+=$($(t)_HEADERS)))
294294
295+ define cmd_pkgconfig
296+ $(shell $(PKGCONFIG ) --silence-errors $(2 ) $(1 ) )
297+ endef
295298# LIBRARY may contain libraries name to check
296299# The name may terminate with {<version>} informations like LIBRARY+=usb{1.0}
297- # Here the commands remove the informations and store the name into LIBS
300+ # The LIBRARY values use pkg-config to update CFLAGS, LDFLAGS and LIBS
298301# After LIBS contains all libraries name to link
299- $(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y),$(foreach l, $($(t)_LIBRARY),$(eval $(t)_LIBS+=$(firstword $(subst {, ,$(subst },,$(l)))) ) ))
300- $(foreach l, $(LIBRARY),$(eval LIBS+=$(firstword $(subst {, ,$(subst },,$(l)))) ) )
301302
302- $(foreach l, $(LIBS),$(eval CFLAGS+=$(shell $(PKGCONFIG) --cflags lib$(l) 2> /dev/null) ) )
303- $(foreach l, $(LIBS),$(eval LDFLAGS+=$(shell $(PKGCONFIG) --libs-only-L lib$(l) 2> /dev/null) ) )
304- $(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y),$(foreach l, $($(t)_LIBS),$(eval $(t)_CFLAGS+=$(shell $(PKGCONFIG) --cflags lib$(l) 2> /dev/null))))
305- $(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y),$(foreach l, $($(t)_LIBS),$(eval $(t)_LDFLAGS+=$(shell $(PKGCONFIG) --libs-only-L lib$(l) 2> /dev/null) ) ))
303+ $(foreach l,$(LIBRARY),$(eval CFLAGS+=$(call cmd_pkgconfig,$(firstword $(subst {, ,$(subst },,$(l)))), --cflags) ) )
304+ $(foreach l,$(LIBRARY),$(eval LDFLAGS+=$(call cmd_pkgconfig,$(firstword $(subst {, ,$(subst },,$(l)))), --libs-only-L) ) )
305+ $(eval LIBS=$(sort $(LIBS)))
306+ $(foreach l,$(LIBRARY),$(eval LIBS+=$(subst -l,,$(call cmd_pkgconfig,$(firstword $(subst {, ,$(subst },,$(l)))), --libs-only-l)) ) )
307+ $(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y),$(foreach l, $($(t)_LIBRARY),$(eval $(t)_CFLAGS+=$(call cmd_pkgconfig,$(firstword $(subst {, ,$(subst },,$(l)))), --cflags))))
308+ $(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y),$(foreach l, $($(t)_LIBRARY),$(eval $(t)_LDFLAGS+=$(call cmd_pkgconfig,$(firstword $(subst {, ,$(subst },,$(l)))), --libs-only-L) ) ))
309+ $(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y),$(foreach l, $($(t)_LIBRARY),$(eval $(t)_LIBS+=$(subst -l,,$(call cmd_pkgconfig,$(firstword $(subst {, ,$(subst },,$(l)))), --libs-only-l)) ) ))
310+ $(foreach t,$(slib-y) $(lib-y) $(bin-y) $(sbin-y) $(modules-y),$(eval $(t)_LIBS=$(sort $($(t)_LIBS))))
306311
307312# set the CFLAGS of each source file
308313$(foreach t,$(slib-y ) $(lib-y ) $(bin-y ) $(sbin-y ) $(modules-y ) ,$(foreach s, $($(t ) _SOURCES) $($(t ) _SOURCES-y) ,$(eval $(s :% .c=% )_CFLAGS+=$($(t ) _CFLAGS) ) ))
@@ -320,7 +325,7 @@ $(foreach t,$(bin-y) $(sbin-y),$(if $(findstring dl, $($(t)_LIBS) $(LIBS)),$(eva
320325# targets recipes generation
321326# #
322327
323- lib-check-target: =$(LIBRARY ) $(sort $(foreach t,$(slib-y ) $(lib-y ) $(bin-y ) $(sbin-y ) $(modules-y ) ,$($(t ) _LIBRARY) ) )
328+ lib-check-target: =$(sort $( LIBRARY:%=check_% ) $(sort $(foreach t,$(slib-y ) $(lib-y ) $(bin-y ) $(sbin-y ) $(modules-y ) ,$($(t ) _LIBRARY:%=check_%) ) ) )
324329
325330ifeq (STATIC,y)
326331lib-static-target: =$(addprefix $(obj ) ,$(addsuffix $(slib-ext:%=.% ) ,$(addprefix $(library_prefix ) ,$(slib-y ) $(lib-y ) ) ) )
@@ -505,25 +510,25 @@ RPATH=$(wildcard $(addsuffix /.,$(wildcard $(CURDIR:%/=%)/* $(obj)*)))
505510quiet_cmd_yacc_y =YACC $*
506511 cmd_yacc_y =$(YACC ) -o $@ $<
507512quiet_cmd_as_o_s =AS $*
508- cmd_as_o_s =$(TARGETAS ) $(ASFLAGS ) $($* _CFLAGS) $(SYSROOT_CFLAGS ) -c -o $@ $<
513+ cmd_as_o_s =$(TARGETAS ) $(ASFLAGS ) $($* _CFLAGS) $(if $( SYSROOT ) , $( SYSROOT_CFLAGS ) ) -c -o $@ $<
509514quiet_cmd_cc_o_c =CC $*
510515 cmd_cc_o_c =$(TARGETCC ) $(CFLAGS ) $($* _CFLAGS) $(SYSROOT_CFLAGS ) -c -o $@ $<
511516quiet_cc_gcov_c =GCOV $*
512517 cmd_cc_gcov_c =$(TARGETGCOV ) -p $<
513518quiet_cmd_cc_o_cpp =CXX $*
514- cmd_cc_o_cpp =$(TARGETCXX ) $(CXXFLAGS ) $(CFLAGS ) $($* _CXXFLAGS) $($* _CFLAGS) $(SYSROOT_CFLAGS ) -c -o $@ $<
519+ cmd_cc_o_cpp =$(TARGETCXX ) $(CXXFLAGS ) $(CFLAGS ) $($* _CXXFLAGS) $($* _CFLAGS) $(if $( SYSROOT ) , $( SYSROOT_CFLAGS ) ) -c -o $@ $<
515520quiet_cmd_moc_hpp =QTMOC $*
516521 cmd_moc_hpp =$(MOC ) $(INCLUDES ) $($* _MOCFLAGS) $($* _MOCFLAGS-y) -o $@ $<
517522quiet_cmd_uic_hpp =QTUIC $*
518523 cmd_uic_hpp =$(UIC ) $< > $@
519524quiet_cmd_ld_bin =LD $*
520- cmd_ld_bin =$(TARGETCC ) -L. $($* _LDFLAGS) $(LDFLAGS ) $(SYSROOT_LDFLAGS ) $(RPATHFLAGS ) -o $@ $^ -Wl,--start-group $(LIBS:%=-l% ) $($* _LIBS:%=-l%) -Wl,--end-group -lc
525+ cmd_ld_bin =$(TARGETCC ) -L. $($* _LDFLAGS) $(LDFLAGS ) $(if $( SYSROOT ) , $( SYSROOT_LDFLAGS ) ) $(RPATHFLAGS ) -o $@ $^ -Wl,--start-group $(LIBS:%=-l% ) $($* _LIBS:%=-l%) -Wl,--end-group -lc
521526quiet_cmd_ld_slib =LD $*
522527 cmd_ld_slib =$(RM ) $@ && \
523528 $(TARGETAR ) -cvq $@ $^ > /dev/null && \
524529 $(TARGETRANLIB ) $@
525530quiet_cmd_ld_dlib =LD $*
526- cmd_ld_dlib =$(TARGETCC ) $($* _LDFLAGS) $(LDFLAGS ) $(SYSROOT_LDFLAGS ) $(RPATHFLAGS ) -Bdynamic -shared -o $@ $^ $( addprefix -L, $( RPATH ) ) $(LIBS:%=-l% ) $($* _LIBS:%=-l%) -lc
531+ cmd_ld_dlib =$(TARGETCC ) $($* _LDFLAGS) $(LDFLAGS ) $(if $( SYSROOT ) , $( SYSROOT_LDFLAGS )) $(RPATHFLAGS ) -Bdynamic -shared -o $@ $^ $(LIBS:%=-l% ) $($* _LIBS:%=-l%) -lc
527532
528533quiet_cmd_hostcc_o_c =HOSTCC $*
529534 cmd_hostcc_o_c =$(HOSTCC ) $(HOSTCFLAGS ) $($* _CFLAGS) -c -o $@ $<
@@ -621,21 +626,22 @@ quiet_cmd_check_lib=CHECK $*
621626define cmd_check_lib
622627 $(RM ) $(TMPDIR ) /$(TESTFILE:%=%.c ) $(TMPDIR ) /$(TESTFILE )
623628 echo "int main(){}" > $(TMPDIR ) /$(TESTFILE:%=%.c )
624- $(TARGETCC ) -c -o $(TMPDIR ) /$(TESTFILE:%=%.o ) $(TMPDIR ) /$(TESTFILE:%=%.c ) $(INTERN_CFLAGS ) $(CFLAGS ) > /dev/null 2>&1
625- $(TARGETLD ) -o $(TMPDIR ) /$(TESTFILE ) $(TMPDIR ) /$(TESTFILE:%=%.o ) $(INTERN_LDFLAGS ) $(LDFLAGS ) $(addprefix -l, $2) > /dev/null 2>&1
629+ $(eval CHECKLIB=$(firstword $(subst {, ,$(subst },,$2) ) ) )
630+ $(eval CHECKVERSION=$(if $(findstring {, $(2 ) ) ,$(subst -, - ,$(lastword $(subst {, ,$(subst },,$2) ) ) ) ) )
631+ $(eval CHECKOPTIONS=$(if $(CHECKVERSION ) ,$(if $(findstring -,$(firstword $(CHECKVERSION ) ) ) ,--atleast-version=$(word 2,$(CHECKVERSION ) ) ) ) )
632+ $(eval CHECKOPTIONS+=$(if $(CHECKVERSION ) ,$(if $(findstring -,$(lastword $(CHECKVERSION ) ) ) ,--max-version=$(word 1,$(CHECKVERSION ) ) ) ) )
633+ $(eval CHECKOPTIONS+=$(if $(CHECKVERSION ) ,$(if $(findstring -,$(CHECKVERSION ) ) ,,--exact-version=$(CHECKVERSION ) ) ) )
634+ $(PKGCONFIG ) --exists --print-errors $(CHECKOPTIONS ) $(CHECKLIB )
635+ $(eval CHECKCFLAGS:=$(call cmd_pkgconfig,$(CHECKLIB ) ,--cflags) )
636+ $(eval CHECKLDFLAGS:=$(call cmd_pkgconfig,$(CHECKLIB ) ,--libs) )
637+ $(TARGETCC ) -c -o $(TMPDIR ) /$(TESTFILE:%=%.o ) $(TMPDIR ) /$(TESTFILE:%=%.c ) $(INTERN_CFLAGS ) $(CHECKCFLAGS ) > /dev/null 2>&1
638+ $(TARGETLD ) -o $(TMPDIR ) /$(TESTFILE ) $(TMPDIR ) /$(TESTFILE:%=%.o ) $(INTERN_LDFLAGS ) $(CHECKLDFLAGS ) > /dev/null 2>&1
626639endef
627640
628- checkoption: =--exact-version
629- prepare_check =$(if $(filter % -, $2) ,$(eval checkoption:=--atleast-version) ,$(if $(filter -% , $2) ,$(eval checkoption:=--max-version) ) )
630- cmd_check2_lib =$(if $(findstring $(3:%-=% ) , $3) ,$(if $(findstring $(3:-%=% ) , $3) ,,$(eval checkoption:=--atleast-version) ,$(eval checkoption:=--max-version) ) ) \
631- $(PKGCONFIG ) --print-errors $(checkoption ) $(subst -,,$3) lib$2
632-
633- $(lib-check-target ) : % :
634- @$(RM ) $(TMPDIR ) /$(TESTFILE:%=%.c ) $(TMPDIR ) /$(TESTFILE )
635- @echo " int main(){}" > $(TMPDIR ) /$(TESTFILE:%=%.c )
636- @$(call cmd,check_lib,$(firstword $(subst {, ,$(subst },,$@ ) ) ) )
637- @$(call prepare_check,$(lastword $(subst {, ,$(subst },,$@ ) ) ) )
638- @$(if $(findstring $(words $(subst {, ,$(subst },,$@ ) ) ) ,2) ,$(call cmd,check2_lib,$(firstword $(subst {, ,$(subst },,$@ ) ) ) ,$(lastword $(subst {, ,$(subst },,$@ ) ) ) ) )
641+ $(lib-check-target ) : check_% :
642+ $(Q )$(RM ) $(TMPDIR ) /$(TESTFILE:%=%.c ) $(TMPDIR ) /$(TESTFILE )
643+ $(Q ) echo " int main(){}" > $(TMPDIR ) /$(TESTFILE:%=%.c )
644+ $(Q )$(call cmd,check_lib,$* )
639645
640646# ##############################################################################
641647# Commands for install
@@ -777,6 +783,7 @@ quiet_cmd_generate_pkgconfig=PKGCONFIG $*
777783define cmd_generate_pkgconfig
778784 printf '# generated by makemore\n' > $@
779785 printf 'prefix=$(prefix ) \n' >> $@
786+ printf 'exec_prefix=$${prefix}\n' >> $@
780787 printf 'sysconfdir=$(sysconfdir:$(prefix ) /%=$${prefix}/% ) \n' >> $@
781788 printf 'libdir=$(libdir:$(prefix ) /%=$${exec_prefix}/% ) \n' >> $@
782789 printf 'pkglibdir=$(pkglibdir:$(prefix ) /%=$${exec_prefix}/% ) \n' >> $@
0 commit comments