#----------------------------*- makefile-gmake -*------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
#   \\  /    A nd           | www.openfoam.com
#    \\/     M anipulation  |
#------------------------------------------------------------------------------
#     Copyright (C) 2011-2016 OpenFOAM Foundation
#     Copyright (C) 2018-2022 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
#
# File
#     wmake/makefiles/files
#
# Description
#     A Makefile for the 'options' and 'files' files, used by wmake
#
#------------------------------------------------------------------------------

GENERAL_RULES   = $(WM_DIR)/rules/General
include $(GENERAL_RULES)/general


#------------------------------------------------------------------------------
# Declare names of make system control files derived from file 'files'
#------------------------------------------------------------------------------

OBJECTS_DIR     = $(MAKE_DIR)/$(WM_OPTIONS)
OPTIONS         = $(OBJECTS_DIR)/options
FILES           = $(OBJECTS_DIR)/files
VARS            = $(OBJECTS_DIR)/variables
SFILES          = $(OBJECTS_DIR)/sourceFiles

sinclude $(OPTIONS)

#------------------------------------------------------------------------------
# Directory containing the wmake scripts
#------------------------------------------------------------------------------

WM_SCRIPTS      = $(WM_DIR)/scripts


#------------------------------------------------------------------------------
# Declare dependency of all make system files on FILES
# Causes all derived files to be remade if any are changed or missing
#------------------------------------------------------------------------------

# Process 'Make/{files,options}' via cpp, but undefine linux,unix,... to avoid
# inadvertent replacements (Eg, leave /usr/lib/x86_64-linux-gnu/... intact)
define PREFILTER_MAKE_OPTIONS
    @$(CPP) -Ulinux -Uunix $(GFLAGS) $1 | sed -e 's@   *@ @g' > $2
endef


all : $(OPTIONS) $(SFILES) $(VARS)

# Make/options
# ~~~~~~~~~~~~
$(OPTIONS) : $(MAKE_DIR)/options
	$(call PREFILTER_MAKE_OPTIONS,$<,${OPTIONS})
ifneq (,$(findstring windows,$(WM_OSTYPE)))
	@$(WM_SCRIPTS)/wmakeWindowsDlOpenLibs $(OPTIONS) >> $(OPTIONS)
endif
	# Ensure final line is followed by newline. Extra comment for safety.
	@echo >> $(OPTIONS)
	@echo "# options" >> $(OPTIONS)


# Make/files
# ~~~~~~~~~~
$(SFILES): $(MAKE_DIR)/files
	$(call PREFILTER_MAKE_OPTIONS,$<,${FILES})
	# Extracted macro definitions.
	@sed -n -e '/=/p' $(FILES) > $(VARS)
	@echo "SOURCE = \\" > $(SFILES)
	# Remove macros, comments, blank lines, trailing space. Add backslash continuation
	@sed -e '/=/d; /^#/d; /^[ \t]*$$/d' -e 's@[ \t]*$$@ \\@' $(FILES) >> $(SFILES)
	@rm -f $(FILES)
	# Ensure final line is followed by newline. Extra comment for safety.
	@echo >> $(SFILES)
	@echo "# sources" >> $(SFILES)


$(VARS): $(SFILES)


#------------------------------------------------------------------------------
