Skip to content
Snippets Groups Projects
Makefile.generating 7.16 KiB
Newer Older
##########################################################################
#                                                                        #
#  This file is part of Frama-C.                                         #
#                                                                        #
#  Copyright (C) 2007-2021                                               #
#    CEA (Commissariat à l'énergie atomique et aux énergies              #
#         alternatives)                                                  #
#                                                                        #
#  you can redistribute it and/or modify it under the terms of the GNU   #
#  Lesser General Public License as published by the Free Software       #
#  Foundation, version 2.1.                                              #
#                                                                        #
#  It is distributed in the hope that it will be useful,                 #
#  but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
#  GNU Lesser General Public License for more details.                   #
#                                                                        #
#  See the GNU Lesser General Public License version 2.1                 #
#  for more details (enclosed in the file licenses/LGPLv2.1).            #
#                                                                        #
##########################################################################

ptests/ptests_config.ml: Makefile.generating share/Makefile.config
	$(PRINT_MAKING) $@
	$(RM) $@
	$(TOUCH) $@
	$(CHMOD_RO) $@

tests/ptests_config: Makefile.generating share/Makefile.config
	$(PRINT_MAKING) $@
	$(RM) $@
	$(TOUCH) $@
	$(ECHO) "DEFAULT_SUITES=$(PLUGIN_TESTS_LIST)" >> $@
	$(ECHO) "TOPLEVEL_PATH=$(FRAMAC_ROOT_SRCDIR)/bin/toplevel.$(OCAMLBEST)$(EXE)" >> $@
	$(ECHO) "OCAMLRUNPARAM=" >> $@
	$(ECHO) "FRAMAC_SESSION=$(FRAMAC_ROOT_SRCDIR)" >> $@
	$(ECHO) "FRAMAC_SHARE=$(FRAMAC_ROOT_SRCDIR)/share" >> $@
	$(ECHO) "FRAMAC_PLUGIN=$(FRAMAC_ROOT_SRCDIR)/lib/plugins" >> $@
	$(ECHO) "FRAMAC_PLUGIN_GUI=$(FRAMAC_ROOT_SRCDIR)/lib/plugins/gui" >> $@
	$(ECHO) "FRAMAC_LIB=$(FRAMAC_ROOT_SRCDIR)/lib/fc" >> $@
	$(CHMOD_RO) $@

ALL_LIBRARY_NAMES=$(shell ocamlfind query -r -p-format $(LIBRARY_NAMES) $(LIBRARY_NAMES_GUI))
MAJOR_VERSION=$(shell $(SED) -E 's/^([0-9]+)\..*/\1/' VERSION)
MINOR_VERSION=$(shell $(SED) -E 's/^[0-9]+\.([0-9]+).*/\1/' VERSION)

$(CONFIG_FILE): $(CONFIG_FILE).in VERSION VERSION_CODENAME share/Makefile.config Makefile.generating configure.in
	$(SED) \
	  -e "s|@VERSION@|$(VERSION)|" \
          -e "s|@VERSION_CODENAME@|$(VERSION_CODENAME)|" \
          -e "s|@CURR_DATE@|$$(LC_ALL=C date)|" \
	  -e "s|@OCAMLC@|$(OCAMLC)|" \
          -e "s|@OCAMLOPT@|$(OCAMLOPT)|" \
	  -e "s|@WARNINGS@|$(WARNINGS)|" \
          -e "s|@FRAMAC_DATADIR@|$(FRAMAC_DATADIR)|" \
	  -e "s|@FRAMAC_LIBDIR@|$(FRAMAC_LIBDIR)|" \
	  -e "s|@FRAMAC_ROOT_SRCDIR@|$(FRAMAC_ROOT_SRCDIR)|" \
	  -e "s|@FRAMAC_PLUGINDIR@|$(FRAMAC_PLUGINDIR)|" \
	  -e "s|@FRAMAC_DEFAULT_CPP@|$(FRAMAC_DEFAULT_CPP)|" \
          -e "s|@FRAMAC_DEFAULT_CPP_ARGS@|$(FRAMAC_DEFAULT_CPP_ARGS)|" \
	  -e "s|@FRAMAC_GNU_CPP@|$(FRAMAC_GNU_CPP)|" \
          -e "s|@DEFAULT_CPP_KEEP_COMMENTS@|$(DEFAULT_CPP_KEEP_COMMENTS)|" \
          -e "s|@DEFAULT_CPP_SUPPORTED_ARCH_OPTS@|$(DEFAULT_CPP_SUPPORTED_ARCH_OPTS)|" \
          -e "s|@COMPILATION_UNITS@|$(COMPILATION_UNITS)|" \
          -e "s|@LIBRARY_NAMES@|$(foreach p,$(ALL_LIBRARY_NAMES),\"$p\";)|" \
	  -e "s|@OPTDOT@|$(OPTDOT)|" \
          -e "s|@EXE@|$(EXE)|" \
          -e "s|@MAJOR_VERSION@|$(MAJOR_VERSION)|" \
          -e "s|@MINOR_VERSION@|$(MINOR_VERSION)|" \
          $< > $@.tmp
	@touch -r $@.tmp $<
	$(CP_IF_DIFF) $@.tmp $@
	$(RM) $@.tmp
	$(CHMOD_RO) $@

ifeq ("$(LOCAL_MACHDEP)","yes")

MACHDEP_PATH=share

# Create the machine dependency module
# If the cl command cannot be run then the MSVC part will be identical to GCC
.PHONY : machdep $(MACHDEP_PATH)/local_machdep.ml
machdep: $(MACHDEP_PATH)/local_machdep.ml
bin/machdep.exe: machdep

config.h: 
	$(PRINT_MAKING) $@
	$(ECHO) "missing config.h file generated at configure stage using --enable-localmachdep option."
	exit 1;

$(MACHDEP_PATH)/local_machdep.ml: \
  $(MACHDEP_PATH)/machdep.c config.h Makefile.generating
	$(PRINT_MAKING) $@
	$(RM) $@
	$(ECHO) "(* This module was generated automatically by code in Makefile and machdep.c *)" >$@
# Now generate the type definition
	$(ECHO) "open Cil_types" >> $@
	if $(CC) -D_GNUCC $< -o bin/machdep.exe ;then \
	    $(ECHO) "machdep.exe created successfully."; \
	else \
	    $(RM) $@; exit 1; \
	fi
	$(ECHO) "let gcc = {" >>$@
	./bin/machdep.exe >>$@
	$(ECHO) "	 underscore_name = $(UNDERSCORE_NAME) ;" >> $@
	$(ECHO) "}"          >>$@
	if cl /D_MSVC $< /Febin/machdep.exe /Fobin/machdep.obj ;then \
	   $(ECHO) "let hasMSVC = true" >>$@; \
	else \
	   $(ECHO) "let hasMSVC = false" >>$@; \
	fi
	$(ECHO) "let msvc = {" >>$@
	./bin/machdep.exe >>$@
	$(ECHO) "	 underscore_name = true ;" >> $@
	$(ECHO) "}"          >>$@
	$(ECHO) \
	  "let gccHas__builtin_va_list = $(HAVE_BUILTIN_VA_LIST)" >>$@
	$(ECHO) \
	  "$@ generated. You may have this file merged into Frama-C by developers."
	$(CHMOD_RO) $@

endif

# transitioning.ml

GENERATED+= src/libraries/utils/json.ml src/libraries/stdlib/transitioning.ml

src/libraries/stdlib/transitioning.ml: \
  src/libraries/stdlib/transitioning.ml.in \
  Makefile.generating share/Makefile.config
	$(PRINT_MAKING) $@
	rm -f $@
ifeq ($(HAS_DGRAPH),yes)
  DGRAPHFILES:=debug_manager
  GENERATED+=src/plugins/gui/debug_manager.ml
  ifeq ($(HAS_OCAMLGRAPH_2), yes)
	DGRAPH_MODULE=Graph_gtk
	DGRAPH_ERROR=Graph_gtk.DGraphMake.DotError
  else
	DGRAPH_MODULE=Dgraph
	DGRAPH_ERROR=Dgraph.DGraphModel.DotError
  endif
  src/plugins/gui/debug_manager.ml \
  src/plugins/gui/dgraph_helper.ml \
  src/plugins/callgraph/cg_viewer.ml: %.ml: %.yes.ml Makefile.generating share/Makefile.config
	$(RM) $@
	$(SED) -e 's/DGRAPH_MODULE/$(DGRAPH_MODULE)/g' \
               -e 's/DGRAPH_ERROR/$(DGRAPH_ERROR)/g' $< > $@
	$(CHMOD_RO) $@
else
  DGRAPHFILES:=
  src/plugins/gui/dgraph_helper.ml: src/plugins/gui/dgraph_helper.no.ml Makefile.generating share/Makefile.config
	$(CP) $< $@
	$(CHMOD_RO) $@
endif

# Merlin #

.PHONY:merlin
.merlin merlin: share/Makefile.config Makefile.generating
#create Merlin file
	$(PRINT_MAKING) $@
	echo "FLG -c $(FLAGS) $(FRAMAC_USER_MERLIN_FLAGS)" > .merlin
	for PKG in $(LIBRARY_NAMES); do echo PKG $$PKG >> .merlin; done
	for PKG in $(LIBRARY_NAMES_GUI); do echo PKG $$PKG >> .merlin; done
	for PKG in $(MERLIN_PACKAGES); do echo PKG $$PKG >> .merlin; done
	echo "B lib/plugins" >> .merlin
	echo "B lib/plugins/gui" >> .merlin
	find src \( -name '.*' -o -name tests -o -name doc -o -name '*.cache' \) -prune \
	      -o \( -type d -exec printf "B %s\n" {} \; -exec printf "S %s\n" {} \; \) >> .merlin

ifeq ("$(DEVELOPMENT)","yes")
all:: .merlin
endif

François Bobot's avatar
François Bobot committed
lib/fc/META.frama-c: share/META.frama-c share/Makefile.config Makefile.generating
	$(MKDIR) lib/fc/
	$(SED) "s/@REQUIRES/$(LIBRARY_NAMES)/" $< > $@
François Bobot's avatar
François Bobot committed

GENERATED += lib/fc/META.frama-c