Le 29 mars 2012 à 22:02, Basile Starynkevitch a écrit : > > Hello All, > > The pre-release candidate 1 of MELT 0.9.5 is available for testing on > http://gcc-melt.org/melt-0.9.5rc1-plugin-for-gcc-4.6-or-4.7.tar.gz > as a gzipped tar archive of 4473286 bytes and md5sum > ae00b9bd31f481e1bbc406711ca4c2f4. > extracted from MELT branch 185969, march 29th 2012 > > You could try building it e.g. with > make MELTGCC=gcc-4.7 GCCMELT_CC=gcc-4.7 > It seems to be also buildable for GCC 4.6 with > make MELTGCC=gcc-4.6 GCCMELT_CC=gcc-4.6 > > (both commands sort of work, with perhaps minor issues very late in the build > process; > I'm not very afraid of these) > > But I'm trying to code a makefile which would autodetect in GCC 4.7 was > compiled in C++ > mode (or if the GCC was compiled in C mode, then it is probably a 4.6 or a 4.7 > configured in a weird fashion). > > So far I tried to code in my Makefile the following trick > ############################################################################ > ## the compiler with which melt.so is used > ifndef MELTGCC > MELTGCC = $(or $(CC),gcc) > endif > > ## gives yes if MELTGCC has been built with C++ or else the empty string > MELTGCC_BUILD_WITH_CXX = $(shell grep -q 'define +ENABLE_BUILD_WITH_CXX +1' \ > `$(MELTGCC) -print-file-name=plugin/include/auto-host.h` && echo yes) > > ## The compiler and flags used to build the melt.so plugin and to > ## compile MELT generated code. Notice that melt-module.mk use the > ## same Make variables. For a melt plugin to GCC 4.7 or later, that > ## could be a C++ compiler! eg > ## make MELTGCC=gcc-4.7 GCCMELT_CC=g++-4.7 > ## hence we add a test if $(MELTGCC) was built with C++ or with C > ifeq ($(strip $(MELTGCC_BUILD_WITH_CXX)),) > GCCMELT_CC ?= $(or $(CC),gcc) -Wc++-compat > else > GCCMELT_CC ?= $(or $(CXX),g++) > endif > > GCCMELT_CFLAGS ?= -g -O -Wall > > $(info MELT plugin for MELTGCC= $(MELTGCC) to be compiled with GCCMELT_CC= > $(GCCMELT_CC) \ > flags $(GCCMELT_CFLAGS) $(if $(MELTGCC_BUILD_WITH_CXX),built with C++ \ > $(MELTGCC_BUILD_WITH_CXX))) > ### rest of makefile skipped > ############################################################################# > > but for some reason it does not work. (Maybe a := versus = make variable > thing). > > Do you have any suggestions about such things? Assuming a plugin whose > source code > should work with both 4.6 & 4.7, how would you autodetect if GCC was compiled > in C++ or > in C mode? What am I doing wrong? > > Regards. > -- > Basile STARYNKEVITCH http://starynkevitch.net/Basile/ > email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359 > 8, rue de la Faiencerie, 92340 Bourg La Reine, France > *** opinions {are only mine, sont seulement les miennes} *** > > -- > Message from the http://groups.google.com/group/gcc-melt group. > About GCC MELT http://gcc-melt.org/ a high level domain specific language to > code extensions to the Gnu Compiler Collection
Hi, You almost got it. You simply need to backslash escape the '+' operator in your regexp. Also, it would be welcome to allow any blank chars to separate words, not any the space char (\t for example). Thus, i changed space ' ' by [[:space:]] (tested with GNU grep). MELTGCC_BUILD_WITH_CXX = $(shell grep -q 'define[[:space:]]\+ENABLE_BUILD_WITH_CXX[[:space:]]\+1' \ `$(MELTGCC) -print-file-name=plugin/include/auto-host.h` && echo yes) Anyway, as i already told you, you don't look for gengtype and gtype.state at the right place. Romain Geissler