Marcel Telka
2024-04-02 966b7de801e4d31160b59d0892ff8ae43028ae01
make-rules/cmake.mk
@@ -63,17 +63,37 @@
# Ref: http://www.cmake.org/cmake/help/v2.8.12/cmake.html#module:GNUInstallDirs
#
ifeq ($(strip $(PREFERRED_BITS)),64)
CMAKE_BINDIR.32 =   bin/$(MACH32)
CMAKE_BINDIR.64 =   bin
CMAKE_SBINDIR.32 =   sbin/$(MACH32)
CMAKE_SBINDIR.64 =   sbin
else
CMAKE_BINDIR.32 =   bin
CMAKE_BINDIR.64 =   bin/$(MACH64)
CMAKE_SBINDIR.32 =   sbin
CMAKE_SBINDIR.64 =   sbin/$(MACH64)
endif
CMAKE_LIBDIR.32 =   lib
CMAKE_LIBDIR.64 =   lib/$(MACH64)
# If the component prefers 64-bit binaries, then ensure builds deliver 64-bit
# binaries to the standard directories and 32-bit binaries to the non-standard
# location.  This allows simplification of package manifests and makes it
# easier to deliver the 64-bit binaries as the default.
ifeq ($(strip $(PREFERRED_BITS)),64)
CMAKE_LIBEXECDIR.32 =   libexec/$(MACH32)
CMAKE_LIBEXECDIR.64 =   libexec
else
CMAKE_LIBEXECDIR.32 =   libexec
CMAKE_LIBEXECDIR.64 =   libexec/$(MACH64)
endif
CMAKE_INCLUDEDIR =   include
CMAKE_DATAROOTDIR =   share
CMAKE_INFODIR =      share/info
CMAKE_LOCALEDIR =   share/locale
CMAKE_MANDIR =      share/man
CMAKE_DATADIR =      $(CMAKE_DATAROOTDIR)
CMAKE_INFODIR =      $(CMAKE_DATAROOTDIR)/info
CMAKE_LOCALEDIR =   $(CMAKE_DATAROOTDIR)/locale
CMAKE_MANDIR =      $(CMAKE_DATAROOTDIR)/man
CMAKE_DOCDIR =      $(CMAKE_DATAROOTDIR)/doc
CMAKE_ENV = CONFIG_SHELL="$(CONFIG_SHELL)"
CMAKE_ENV += CC="$(CC)"
@@ -86,6 +106,7 @@
CMAKE_ENV += FCFLAGS="$(FCFLAGS)"
CMAKE_ENV += LDFLAGS="$(LDFLAGS)"
CMAKE_ENV += PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)"
CMAKE_ENV += PATH="$(PATH)"
# Rewrite absolute source-code paths into relative for ccache, so that any
# workspace with a shared CCACHE_DIR can benefit when compiling a component
@@ -116,19 +137,27 @@
CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS:STRING="$(CXXFLAGS)"
CMAKE_OPTIONS += -DCMAKE_Fortran_FLAGS:STRING="$(FCFLAGS)"
CMAKE_OPTIONS += LDFLAGS="$(LDFLAGS)"
CMAKE_OPTIONS += PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)"
CMAKE_OPTIONS += -DCMAKE_INSTALL_PREFIX:PATH=$(CMAKE_PREFIX)
ifeq ($(CMAKE_DEFAULT_DIRS),yes)
CMAKE_OPTIONS += -DCMAKE_INSTALL_BINDIR:PATH=$(CMAKE_BINDIR.$(BITS))
CMAKE_OPTIONS += -DCMAKE_INSTALL_SBINDIR:PATH=$(CMAKE_SBINDIR.$(BITS))
CMAKE_OPTIONS += -DCMAKE_INSTALL_LIBDIR:PATH=$(CMAKE_LIBDIR.$(BITS))
CMAKE_OPTIONS += -DCMAKE_INSTALL_SBINDIR:PATH=$(CMAKE_SBINDIR.$(BITS))
CMAKE_OPTIONS += -DCMAKE_INSTALL_DATAROOTDIR:PATH=$(CMAKE_DATAROOTDIR)
CMAKE_OPTIONS += -DCMAKE_INSTALL_DATADIR:PATH=$(CMAKE_DATAROOTDIR)
CMAKE_OPTIONS += -DCMAKE_INSTALL_INFODIR:PATH=$(CMAKE_INFODIR)
CMAKE_OPTIONS += -DCMAKE_INSTALL_LOCALEDIR:PATH=$(CMAKE_LOCALEDIR)
CMAKE_OPTIONS += -DCMAKE_INSTALL_MANDIR:PATH=$(CMAKE_MANDIR)
CMAKE_OPTIONS += -DLIBEXEC_INSTALL_DIR="$(CMAKE_PREFIX)/$(CMAKE_LIBEXECDIR.$(BITS))"
# Some components use LIB_INSTALL_DIR or CMAKE_INSTALL_LIBDIR, as-is,
# others forcibly ignore it and set
# based on CMAKE_INSTALL_PREFIX.  Those usually instead offer a LIB_SUFFIX
# variable that we can generally use to accomplish the same result.  Setting
# them both shouldn't harm anything.
CMAKE_OPTIONS += -DLIB_INSTALL_DIR="$(CMAKE_PREFIX)/$(CMAKE_LIBDIR.$(BITS))"
CMAKE_OPTIONS.64 += -DCMAKE_LIBRARY_ARCHITECTURE=$(MACH64)
CMAKE_OPTIONS.64 += -DLIB_SUFFIX="/$(MACH64)"
endif
CMAKE_OPTIONS += $(CMAKE_OPTIONS.$(BITS))
@@ -139,8 +168,28 @@
CMAKE_ENV += $(CMAKE_ENV.$(BITS))
COMPONENT_TEST_CMD=ctest
COMPONENT_TEST_TARGETS=
# configure the unpacked source for building 32 and 64 bit version
CMAKE =   cmake
# provide test transforms for ctest
CMAKE_TEST_TRANSFORMS = \
   ' -e "s/[0-9]*\.[0-9]* sec//" ' \
   ' -n ' \
   ' -e "/Not Run/p" ' \
   ' -e "/Start/p" ' \
   ' -e "/Skipped/p" ' \
   ' -e "/Failed/p" ' \
   ' -e "/Passed/p" ' \
   ' -e "/failed/p" '
USE_DEFAULT_TEST_TRANSFORMS?=no
ifeq ($(strip $(USE_DEFAULT_TEST_TRANSFORMS)),yes)
COMPONENT_TEST_TRANSFORMS += $(CMAKE_TEST_TRANSFORMS)
endif
$(BUILD_DIR)/%/.configured:   $(SOURCE_DIR)/.prep
   ($(RM) -rf $(@D) ; $(MKDIR) $(@D))
   $(COMPONENT_PRE_CMAKE_ACTION)
@@ -156,9 +205,6 @@
      $(GMAKE) $(COMPONENT_BUILD_GMAKE_ARGS) $(COMPONENT_BUILD_ARGS) \
      $(COMPONENT_BUILD_TARGETS))
   $(COMPONENT_POST_BUILD_ACTION)
ifeq   ($(strip $(PARFAIT_BUILD)),yes)
   -$(PARFAIT) build
endif
   $(TOUCH) $@
# install the built source into a prototype area
@@ -170,7 +216,7 @@
   $(TOUCH) $@
# test the built source
$(BUILD_DIR)/%/.tested-and-compared:   $(BUILD_DIR)/%/.built
$(BUILD_DIR)/%/.tested-and-compared:   $(COMPONENT_TEST_DEP)
   $(RM) -rf $(COMPONENT_TEST_BUILD_DIR)
   $(MKDIR) $(COMPONENT_TEST_BUILD_DIR)
   $(COMPONENT_PRE_TEST_ACTION)
@@ -186,23 +232,21 @@
   $(COMPONENT_TEST_CLEANUP)
   $(TOUCH) $@
$(BUILD_DIR)/%/.tested:   $(BUILD_DIR)/%/.built
$(BUILD_DIR)/%/.tested:   SHELLOPTS=pipefail
$(BUILD_DIR)/%/.tested:   $(COMPONENT_TEST_DEP)
   $(RM) -rf $(COMPONENT_TEST_BUILD_DIR)
   $(MKDIR) $(COMPONENT_TEST_BUILD_DIR)
   $(COMPONENT_PRE_TEST_ACTION)
   (cd $(COMPONENT_TEST_DIR) ; \
      $(COMPONENT_TEST_ENV_CMD) $(COMPONENT_TEST_ENV) \
      $(COMPONENT_TEST_CMD) \
      $(COMPONENT_TEST_ARGS) $(COMPONENT_TEST_TARGETS))
      $(COMPONENT_TEST_ARGS) $(COMPONENT_TEST_TARGETS)) \
      |& $(TEE) $(COMPONENT_TEST_OUTPUT)
   $(COMPONENT_POST_TEST_ACTION)
   $(COMPONENT_TEST_CREATE_TRANSFORMS)
   $(COMPONENT_TEST_PERFORM_TRANSFORM)
   $(COMPONENT_TEST_CLEANUP)
   $(TOUCH) $@
ifeq   ($(strip $(PARFAIT_BUILD)),yes)
parfait: install
   -$(PARFAIT) build
else
parfait:
   $(MAKE) PARFAIT_BUILD=yes parfait
endif
clean::
   $(RM) -r $(BUILD_DIR) $(PROTO_DIR)