openfoam/wmake/makefiles/files
Mark Olesen 4730c381ef COMP: avoid cpp replacement of linux,unix,... in Make/options (fixes #2548)
- the cpp command is used to process Make/{files,options}, but builtin
  defines such as `linux` will cause problems (macro replacement) if
  these is present in the Make/{files,options}.

  Solve by undefining -Ulinux, -Uunix macros, which will leave directory
  names such as "/usr/lib/x86_64-linux-gnu/..." intact.

  Directories with _linux, __linux__ content (for example), could
  still pose future issues.
2022-08-19 15:01:43 +02:00

90 lines
3.1 KiB
Plaintext

#----------------------------*- 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)
#------------------------------------------------------------------------------