Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  main.mak  Sprache: unbekannt

 
Spracherkennung für: .mak vermutete Sprache: Apollo {Apollo[18] Postscript[18] Python[18]} [Methode: maximale Elemente, drei Dimensionen]

# Main makefile for VLC 3rd party libraries ("contrib")
# Copyright (C) 2003-2011 the VideoLAN team
#
# This file is under the same license as the vlc package.

all: install

NULL  :=
SPACE := $(NULL) #

SRC := $(TOPSRC)/src
SRC_BUILT := $(TOPSRC_BUILT)/src
TARBALLS := $(TOPSRC)/tarballs
VLC_TOOLS ?= $(TOPSRC)/../extras/tools/build

CMAKE_GENERATOR ?= Ninja

PKGS_ALL := $(patsubst $(SRC)/%/rules.mak,%,$(wildcard $(SRC)/*/rules.mak))
DATE := $(shell date +%Y%m%d)
VPATH := $(TARBALLS)

# Default Qt version
QTBASE_VERSION_MAJOR := 6.8
QTBASE_VERSION := $(QTBASE_VERSION_MAJOR).3

# Common download locations
GNU ?= https://ftpmirror.gnu.org/gnu
SF := https://downloads.sourceforge.net/project
VIDEOLAN := https://downloads.videolan.org/pub/videolan
CONTRIB_VIDEOLAN := https://downloads.videolan.org/pub/contrib
VIDEOLAN_GIT := https://code.videolan.org
GITHUB := https://github.com
GOOGLE_CODE := https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com
GNUGPG := https://www.gnupg.org/ftp/gcrypt
QT := https://download.qt.io/official_releases/qt/$(QTBASE_VERSION_MAJOR)
XIPH := https://ftp.osuosl.org/pub/xiph/releases
XORG := https://www.x.org/releases/individual

#
# Machine-dependent variables
#

PREFIX ?= $(TOPDST)/$(HOST)
PREFIX := $(abspath $(PREFIX))
BUILDPREFIX ?= $(PREFIX)/..
BUILDPREFIX := $(abspath $(BUILDPREFIX))
BUILDBINDIR ?= $(BUILDPREFIX)/bin

SYSTEM_PATH := $(abspath $(VLC_TOOLS)/bin):$(PATH)
PATH :=$(abspath $(BUILDBINDIR)):$(abspath $(BUILDBINDIR)/../libexec):$(SYSTEM_PATH)
export PATH

ifneq ($(HOST),$(BUILD))
HAVE_CROSS_COMPILE = 1
endif

ifeq ($(findstring mingw32,$(BUILD)),mingw32)
MSYS_BUILD := 1
endif
ifeq ($(findstring msys,$(BUILD)),msys)
MSYS_BUILD := 1
endif

#
# Default values for tools
#
ifdef HAVE_CROSS_COMPILE
MAYBEHOST := $(HOST)-
else
MAYBEHOST :=
endif
ifneq ($(findstring $(origin CC),undefined default),)
CC := $(MAYBEHOST)gcc
endif
ifneq ($(findstring $(origin CXX),undefined default),)
CXX := $(MAYBEHOST)g++
endif
ifneq ($(findstring $(origin LD),undefined default),)
LD := $(MAYBEHOST)ld
endif
ifneq ($(findstring $(origin AR),undefined default),)
ifeq ($(shell $(MAYBEHOST)gcc-ar --version >/dev/null 2>&1 || echo Prehistory),)
AR := $(MAYBEHOST)gcc-ar
else
AR := $(MAYBEHOST)ar
endif
endif
ifeq ($(shell $(MAYBEHOST)gcc-nm --version >/dev/null 2>&1 || echo Prehistory),)
NM ?= $(MAYBEHOST)gcc-nm
else
NM ?= $(MAYBEHOST)nm
endif
ifeq ($(shell $(MAYBEHOST)gcc-ranlib --version >/dev/null 2>&1 || echo Prehistory),)
RANLIB ?= $(MAYBEHOST)gcc-ranlib
else
RANLIB ?= $(MAYBEHOST)ranlib
endif
STRIP ?= $(MAYBEHOST)strip
WINDRES ?= $(MAYBEHOST)windres

ifdef HAVE_ANDROID
ifneq ($(findstring $(origin CC),undefined default),)
CC :=  clang
endif
ifneq ($(findstring $(origin CXX),undefined default),)
CXX := clang++
endif
endif

ifdef HAVE_MACOSX
EXTRA_CXXFLAGS += -stdlib=libc++
ifeq ($(ARCH),aarch64)
XCODE_FLAGS += -arch arm64
else
XCODE_FLAGS += -arch $(ARCH)
endif
endif

ifdef HAVE_EMSCRIPTEN
EXTRA_CFLAGS += -pthread
EXTRA_CXXFLAGS += -pthread
endif

CCAS=$(CC) -c

LN_S = ln -s
ifdef HAVE_WIN32
MINGW_W64_VERSION := $(shell echo "__MINGW64_VERSION_MAJOR" | $(CC) $(CFLAGS) -E -include _mingw.h - | tail -n 1)
ifneq ($(MINGW_W64_VERSION),)
HAVE_MINGW_W64 := 1
mingw_at_least = $(shell [ $(MINGW_W64_VERSION) -ge $(1) ] && echo true)
endif
ifndef HAVE_CROSS_COMPILE
LN_S = cp -R
endif
endif

ifdef HAVE_ANDROID
# Android NDK has vulkan headers but vulkan.h from the sysroot but it is not
# the actual vulkan version from the Android NDK, the proper one is located
# in this third_party folder
EXTRA_CFLAGS += -isystem$(ANDROID_NDK)/sources/third_party/vulkan/src/include
endif

ifdef HAVE_SOLARIS
ifeq ($(ARCH),x86_64)
EXTRA_CFLAGS += -m64
EXTRA_LDFLAGS += -m64
else
EXTRA_CFLAGS += -m32
EXTRA_LDFLAGS += -m32
endif
endif

apple_clang_at_least = $(shell echo false)
apple_clang_at_most  = $(shell echo false)
apple_clang_major_is = $(shell echo false)
clang_at_least = $(shell echo false)
clang_at_most  = $(shell echo false)
clang_major_is = $(shell echo false)
gcc_at_least = $(shell echo false)
gcc_at_most  = $(shell echo false)
gcc_major_is = $(shell echo false)
ifeq ($(shell $(CC) --version 2>/dev/null | grep -qi "Apple clang" || echo FAIL),)
HAVE_APPLE_CLANG := 1
HAVE_CLANG := 1
CLANG_VERSION := $(shell $(CC) --version | head -1 | grep -o '[0-9]\+\.' | head -1 | cut -d '.' -f 1)
apple_clang_at_least = $(shell [ $(CLANG_VERSION) -ge $(1) ] && echo true)
apple_clang_at_most  = $(shell [ $(CLANG_VERSION) -le $(1) ] && echo true)
apple_clang_major_is = $(shell [ $(CLANG_VERSION) -eq $(1) ] && echo true)
else
ifneq ($(findstring clang, $(shell $(CC) --version 2>/dev/null | grep -qi clang && echo "clang")),)
HAVE_CLANG := 1
CLANG_VERSION := $(shell $(CC) --version | head -1 | grep -o '[0-9]\+\.' | head -1 | cut -d '.' -f 1)
clang_at_least = $(shell [ $(CLANG_VERSION) -ge $(1) ] && echo true)
clang_at_most  = $(shell [ $(CLANG_VERSION) -le $(1) ] && echo true)
clang_major_is = $(shell [ $(CLANG_VERSION) -eq $(1) ] && echo true)
else
ifneq ($(findstring Free Software Foundation, $(shell $(CC) --version 2>/dev/null | head -2 | tail -1)),)
HAVE_GCC := 1
GCC_VERSION := $(shell $(CC) --version | head -1 | grep -o '[0-9]\+\.' | head -1 | cut -d '.' -f 1)
gcc_at_least = $(shell [ $(GCC_VERSION) -ge $(1) ] && echo true)
gcc_at_most  = $(shell [ $(GCC_VERSION) -le $(1) ] && echo true)
gcc_major_is = $(shell [ $(GCC_VERSION) -eq $(1) ] && echo true)
endif
endif
endif

# -fno-stack-check is a workaround for a possible
# bug in Xcode 11 or macOS 10.15+
ifeq ($(call apple_clang_major_is,11), true)
EXTRA_CFLAGS += -fno-stack-check
XCODE_FLAGS += OTHER_CFLAGS=-fno-stack-check
endif

cppcheck = $(shell printf '$(2)' | $(CC) $(CFLAGS) -E -dM - 2>/dev/null | grep -E $(1))

try_cxx_compile = $(shell printf '$(1)' | $(CXX) $(CXXFLAGS) $(2) -x c++ -c - -o /dev/null 2>/dev/null && echo true)

EXTRA_CFLAGS += -I$(PREFIX)/include
CPPFLAGS := $(CPPFLAGS) $(EXTRA_CFLAGS)
CFLAGS := $(CFLAGS) $(EXTRA_CFLAGS)
CXXFLAGS := $(CXXFLAGS) $(EXTRA_CFLAGS) $(EXTRA_CXXFLAGS)
LDFLAGS := $(LDFLAGS) -L$(PREFIX)/lib $(EXTRA_LDFLAGS)

ifdef ENABLE_PDB
ifdef HAVE_CLANG
CFLAGS := $(CFLAGS) -gcodeview
CXXFLAGS := $(CXXFLAGS) -gcodeview
endif
endif

ifeq ($(shell gcc --version >/dev/null 2>&1 || echo No GCC),)
BUILDCC ?= gcc
BUILDCXX ?= g++
ifeq ($(shell gcc-ar --version >/dev/null 2>&1 || echo Prehistoric GCC),)
BUILDAR ?= gcc-ar
BUILDNM ?= gcc-nm
BUILDRANLIB ?= gcc-ranlib
endif
else ifeq ($(shell clang --version >/dev/null 2>&1 || No LLVM/Clang),)
BUILDCC ?= clang
BUILDCXX ?= clang++
ifeq ($(shell llvm-ar --version >/dev/null 2>&1 || echo Prehistoric LLVM),)
BUILDAR ?= llvm-ar
BUILDNM ?= llvm-nm
BUILDRANLIB ?= llvm-ranlib
BUILDSTRIP ?= llvm-strip
endif
endif

BUILDCC ?= cc
BUILDCXX ?= c++
BUILDLD ?= $(BUILDCC)
BUILDAR ?= ar
BUILDNM ?= nm
BUILDRANLIB ?= ranlib
BUILDSTRIP ?= strip

BUILDCPPFLAGS ?=
BUILDCFLAGS ?= -O2
BUILDCXXFLAGS ?= $(BUILDCFLAGS)
BUILDLDFLAGS ?= $(BUILDCFLAGS)

# Do not export variables above! Use HOSTVARS or BUILDVARS.

ifdef HAVE_WIN32
define UCRT_HEADER_CHECK :=
#include <crtdefs.h> \n
#if defined(_UCRT) || (__MSVCRT_VERSION__ >= 0x1400) || (__MSVCRT_VERSION__ >= 0xE00 && __MSVCRT_VERSION__ < 0x1000) \n
# undef _UCRT \n
# define _UCRT \n
#endif \n
endef
ifneq ($(call cppcheck, _UCRT, $(UCRT_HEADER_CHECK)),)
HAVE_UCRT = 1
endif
endif

# Do the FPU detection, after we have figured out our compilers and flags.
ifneq ($(findstring $(ARCH),aarch64 i386 ppc ppc64 ppc64le sparc sparc64 x86_64),)
# This should be consistent with include/vlc_cpu.h
HAVE_FPU = 1
else ifneq ($(findstring $(ARCH),arm),)
ifneq ($(call cppcheck, __VFP_FP__)),)
ifeq ($(call cppcheck, __SOFTFP__),)
HAVE_FPU = 1
endif
endif
else ifneq ($(filter riscv%, $(ARCH)),)
ifneq ($(call cppcheck, __riscv_flen),)
HAVE_FPU = 1
endif
else ifneq ($(call cppcheck, __mips_hard_float),)
HAVE_FPU = 1
endif

ifneq ($(wildcard $(VLC_TOOLS)/share/aclocal/*),)
VLC_ACLOCAL_PATH := $(PREFIX)/share/aclocal:$(abspath $(VLC_TOOLS)/share/aclocal):${ACLOCAL_PATH}
else
VLC_ACLOCAL_PATH := $(PREFIX)/share/aclocal:${ACLOCAL_PATH}
endif
export ACLOCAL_PATH=${VLC_ACLOCAL_PATH}

#########
# Tools #
#########

ifdef HAVE_CROSS_COMPILE
# Use pkg-config cross-tool if it actually works
ifeq ($(shell unset PKG_CONFIG_LIBDIR; $(HOST)-pkg-config --version 1>/dev/null 2>/dev/null || echo FAIL),)
PKG_CONFIG ?= $(HOST)-pkg-config
else
# Use the regular pkg-config and set some PKG_CONFIG_LIBDIR ourselves
PKG_CONFIG_LIBDIR ?= /usr/$(HOST)/lib/pkgconfig:/usr/lib/$(HOST)/pkgconfig:/usr/share/pkgconfig
export PKG_CONFIG_LIBDIR
need_pkg = $(shell PKG_CONFIG_PATH=$(SYSTEM_PKG_CONFIG_PATH) PKG_CONFIG_LIBDIR=$(PKG_CONFIG_LIBDIR) $(PKG_CONFIG) $(1) || echo 1)
endif
endif # HAVE_CROSS_COMPILE

need_pkg ?= $(shell PKG_CONFIG_PATH=$(SYSTEM_PKG_CONFIG_PATH) $(PKG_CONFIG) $(1) || echo 1)
PKG_CONFIG ?= pkg-config

SYSTEM_PKG_CONFIG_PATH := $(PKG_CONFIG_PATH)
PKG_CONFIG_PATH := $(PREFIX)/lib/pkgconfig:$(PREFIX)/share/pkgconfig:$(PKG_CONFIG_PATH)
export PKG_CONFIG_PATH

# Get the version of a system tool $1 and pass it through the $2 command(s)
FULL_VERSION_REGEX := 's/[^0-9]*\([0-9]\([0-9a-zA-Z\.\-]*\)\)\(.*\)/\1/p'
system_tool_version = $(shell PATH="${SYSTEM_PATH}" $(1) 2>/dev/null | head -1 | sed -ne ${FULL_VERSION_REGEX} | $(2))
# Get the major.minor version of a system tool
system_tool_majmin = $(call system_tool_version, $(1), cut -d '.' -f -2)
# Print the smallest version value of the given system tool (no spaces in the checked version)
system_tool_min_version = $(shell printf "$(2) $(call system_tool_version, $(1), grep . && echo || echo 0.0.0)" | tr " " "\n" | sort -V | head -n1)
# Check if native tool $1 is at least version $2
system_tool_matches_min = $(shell test "$(call system_tool_min_version,$(1),$(2))" = "$(2)" || echo FAIL)

ifndef GIT
ifeq ($(shell git --version >/dev/null 2>&1 || echo FAIL),)
GIT = git
endif
endif
GIT ?= $(error git not found)

ifeq ($(shell curl --version >/dev/null 2>&1 || echo FAIL),)
download = curl -f -L --retry 3 --output "$@" -- "$(1)"
else ifeq ($(shell wget --version >/dev/null 2>&1 || echo FAIL),)
download = (rm -f $@.tmp && \
 wget --passive -c -p -O $@.tmp "$(1)" && \
 touch $@.tmp && \
 mv $@.tmp $@ )
else ifeq ($(command -v fetch >/dev/null 2>&1 || echo FAIL),)
download = (rm -f $@.tmp && \
 fetch -p -o $@.tmp "$(1)" && \
 touch $@.tmp && \
 mv $@.tmp $@)
else
download = $(error Neither curl nor wget found)
endif

download_pkg = $(call download,$(CONTRIB_VIDEOLAN)/$(2)/$(lastword $(subst /, ,$(@)))) || \
 ( $(call download,$(1)) && echo "Please upload this package $(lastword $(subst /, ,$(@))) to our FTP" )

ifeq ($(shell command -v xz >/dev/null 2>&1 || echo FAIL),)
XZ = xz
else
XZ ?= $(error XZ (LZMA) compressor not found)
endif

ifeq ($(shell sha512sum --version >/dev/null 2>&1 || echo FAIL),)
SHA512SUM = sha512sum --check
else ifeq ($(shell shasum --version >/dev/null 2>&1 || echo FAIL),)
SHA512SUM = shasum -a 512 --check
else ifeq ($(shell openssl version >/dev/null 2>&1 || echo FAIL),)
SHA512SUM = openssl dgst -sha512
else
SHA512SUM = $(error SHA-512 checksumming not found)
endif

#
# Common helpers
#
HOSTCONF := --prefix="$(PREFIX)"
HOSTCONF += --datarootdir="$(PREFIX)/share"
HOSTCONF += --includedir="$(PREFIX)/include"
HOSTCONF += --libdir="$(PREFIX)/lib"
HOSTCONF += --build="$(BUILD)" --host="$(HOST)" --target="$(HOST)"
HOSTCONF += --program-prefix=""
# libtool stuff:
HOSTCONF += --enable-static --disable-shared --disable-dependency-tracking
ifdef HAVE_WIN32
HOSTCONF += --without-pic
PIC :=
else
HOSTCONF += --with-pic
PIC := -fPIC
endif

HOSTTOOLS := \
 CC="$(CC)" CXX="$(CXX)" OBJC="$(OBJC)" OBJCXX="$(OBJCXX)" LD="$(LD)" \
 AR="$(AR)" CCAS="$(CCAS)" RANLIB="$(RANLIB)" STRIP="$(STRIP)" \
 PKG_CONFIG="$(PKG_CONFIG)"

ifdef HAVE_BITCODE_ENABLED
CFLAGS := $(CFLAGS) -fembed-bitcode
CXXFLAGS := $(CXXFLAGS) -fembed-bitcode
endif

# opt-out flags when --enable-sections is used
CFLAGS_NO_SECTIONS := $(CFLAGS)
CXXFLAGS_NO_SECTIONS := $(CXXFLAGS)

ifdef ENABLE_SECTION_SPLIT
CFLAGS := $(CFLAGS) -fdata-sections -ffunction-sections
CXXFLAGS := $(CXXFLAGS) -fdata-sections -ffunction-sections
endif


# Add these flags after CMake consumed the CFLAGS/CXXFLAGS
# CMake handles the optimization level with CMAKE_BUILD_TYPE
# CMake handles LTO flags with INTERPROCEDURAL_OPTIMIZATION
HOSTVARS_CMAKE := \
 CPPFLAGS="$(CPPFLAGS)" \
 CFLAGS="$(CFLAGS)" \
 CXXFLAGS="$(CXXFLAGS)" \
 LDFLAGS="$(LDFLAGS)"

# Add these flags after Meson consumed the CFLAGS/CXXFLAGS
# as when setting those for Meson, it would apply to tests
# and cause the check if symbols have underscore prefix to
# incorrectly report they have not, even if they have.
ifndef WITH_OPTIMIZATION
AUTOTOOLS_CFLAGS := $(AUTOTOOLS_CFLAGS) -g -O0
AUTOTOOLS_CXXFLAGS := $(AUTOTOOLS_CXXFLAGS) -g -O0
else
AUTOTOOLS_CFLAGS := $(AUTOTOOLS_CFLAGS) -g -O2
AUTOTOOLS_CXXFLAGS := $(AUTOTOOLS_CXXFLAGS) -g -O2
endif

ifdef ENABLE_LTO
AUTOTOOLS_CFLAGS := $(AUTOTOOLS_CFLAGS) -flto
AUTOTOOLS_CXXFLAGS := $(AUTOTOOLS_CXXFLAGS) -flto
endif

CFLAGS_NO_SECTIONS := $(CFLAGS_NO_SECTIONS) $(AUTOTOOLS_CFLAGS)
CXXFLAGS_NO_SECTIONS := $(CXXFLAGS_NO_SECTIONS) $(AUTOTOOLS_CFLAGS)

HOSTVARS := $(HOSTTOOLS) \
 CPPFLAGS="$(CPPFLAGS)" \
 CFLAGS="$(CFLAGS) $(AUTOTOOLS_CFLAGS)" \
 CXXFLAGS="$(CXXFLAGS) $(AUTOTOOLS_CXXFLAGS)" \
 LDFLAGS="$(LDFLAGS)"
HOSTVARS_PIC := $(HOSTTOOLS) \
 CPPFLAGS="$(CPPFLAGS) $(PIC)" \
 CFLAGS="$(CFLAGS) $(AUTOTOOLS_CFLAGS) $(PIC)" \
 CXXFLAGS="$(CXXFLAGS) $(AUTOTOOLS_CXXFLAGS) $(PIC)" \
 LDFLAGS="$(LDFLAGS)"

BUILDCOMMONCONF := --disable-dependency-tracking
BUILDCOMMONCONF += --prefix="$(BUILDPREFIX)"
BUILDCOMMONCONF += --bindir="$(BUILDBINDIR)"
BUILDCOMMONCONF += --datarootdir="$(BUILDPREFIX)/share"
BUILDCOMMONCONF += --includedir="$(BUILDPREFIX)/include"
BUILDCOMMONCONF += --libdir="$(BUILDPREFIX)"
BUILDCOMMONCONF += --build="$(BUILD)" --host="$(BUILD)"
# For platform-independent tools (--target should be meaningless):
BUILDPROGCONF := $(BUILDCOMMONCONF) \
 --target="$(BUILD)" --program-prefix=""
# For platform-dependent tools:
BUILDTOOLCONF := $(BUILDCOMMONCONF) \
 --target="$(HOST)" --program-prefix="$(HOST)-"

BUILDTOOLS := \
 CC="$(BUILDCC)" CXX="$(BUILDCXX)" LD="$(BUILDLD)" \
 AR="$(BUILDAR)" NM="$(BUILDNM)" RANLIB="$(BUILDRANLIB)" \
 STRIP="$(BUILDSTRIP)" PATH="$(BUILDBINDIR):$(PATH)"

BUILDVARS := $(BUILDTOOLS) \
 CPPFLAGS="$(BUILDCPPFLAGS)" \
 CFLAGS="$(BUILDCFLAGS)" \
 CXXFLAGS="$(BUILDCXXFLAGS)" \
 LDFLAGS="$(BUILDLDFLAGS)"

download_git = \
 rm -Rf -- "$(@:.tar.xz=)" && \
 $(GIT) init --bare "$(@:.tar.xz=)" && \
 (cd "$(@:.tar.xz=)" && \
 $(GIT) remote add origin "$(1)" && \
 $(GIT) fetch origin "$(2)") && \
 (cd "$(@:.tar.xz=)" && \
 $(GIT) archive --prefix="$(notdir $(@:.tar.xz=))/" \
  --format=tar "$(3)") > "$(@:.xz=)" && \
 echo "$(3) $(@)" > "$(@:.tar.xz=.githash)" && \
 rm -Rf -- "$(@:.tar.xz=)" && \
 $(XZ) --stdout "$(@:.xz=)" > "$@.tmp" && \
 rm -f "$(@:.xz=)" && \
 mv -f -- "$@.tmp" "$@"
check_githash = \
 h=`sed -e "s,^\([0-9a-fA-F]\{40\}\) .*/$(notdir $<),\1,g" \
  < "$(<:.tar.xz=.githash)"` && \
 test "$$h" = "$1"

ifeq ($(V),1)
TAR_VERBOSE := v
else
ZIP_QUIET := -q
endif

checksum = \
 $(foreach f,$(filter $(TARBALLS)/%,$^), \
  grep -- " $(f:$(TARBALLS)/%=%)$$" \
   "$(SRC)/$(patsubst $(3)%,%,$@)/$(2)SUMS" &&) \
 (cd $(TARBALLS) && $(1) /dev/stdin) < \
  "$(SRC)/$(patsubst $(3)%,%,$@)/$(2)SUMS"
CHECK_SHA512 = $(call checksum,$(SHA512SUM),SHA512,.sum-)
UNPACK = $(RM) -R $@ $(UNPACK_DIR) \
 $(foreach f,$(filter %.tar.gz %.tgz %.tar.bz2 %.tar.xz %.tar.zst,$^), && tar $(TAR_VERBOSE)xfo $(f)) \
 $(foreach f,$(filter %.zip,$^), && unzip $(ZIP_QUIET) $(f) $(UNZIP_PARAMS))
UNPACK_DIR = $(patsubst %.tar,%,$(basename $(notdir $<)))
APPLY = (cd $(UNPACK_DIR) && patch -fp1) <
pkg_static = (cd $(UNPACK_DIR) && $(SRC_BUILT)/pkg-static.sh $(1))
MOVE = mv $(UNPACK_DIR) $@ && touch $@

AUTOMAKE_DATA_DIRS:=$(foreach n,$(foreach n,$(subst :, ,$(shell echo $$PATH)),$(abspath $(n)/../share)),$(wildcard $(n)/autoconf*/build-aux))
update_autoconfig = \
 for dir in $(AUTOMAKE_DATA_DIRS); do \
  if test -f "$${dir}/config.sub" -a -f "$${dir}/config.guess"; then \
   install -p "$${dir}/config.guess" "$(UNPACK_DIR)/$(1)/"; \
   install -p "$${dir}/config.sub"   "$(UNPACK_DIR)/$(1)/"; \
   break; \
  fi; \
 done

ifneq ($(wildcard $(abspath $(VLC_TOOLS))/share/autoconf-vlc/build-aux),)
VLC_CONFIG_GUESS := autom4te_buildauxdir=$(abspath $(VLC_TOOLS))/share/autoconf-vlc/build-aux
endif

AUTORECONF = GTKDOCIZE=true autoreconf
RECONF = mkdir -p -- $(PREFIX)/share/aclocal && \
 cd $< && $(VLC_CONFIG_GUESS) $(AUTORECONF) -fiv

BUILD_DIR = $</vlc_build
BUILD_SRC := ..
# build directory relative to UNPACK_DIR
BUILD_DIRUNPACK := vlc_build

MAKEBUILDDIR = mkdir -p $(BUILD_DIR) && rm -f $(BUILD_DIR)/config.status && test ! -f $</config.status || $(MAKE) -C $< distclean
MAKEBUILD = $(MAKE) -C $(BUILD_DIR)
MAKECONFDIR = cd $(BUILD_DIR) && $(HOSTVARS) $(BUILD_SRC)
MAKECONFIGURE = $(MAKECONFDIR)/configure $(HOSTCONF)

# Work around for https://lists.nongnu.org/archive/html/bug-gnulib/2020-05/msg00237.html
# When using a single command, make might take a shortcut and fork/exec
# itself instead of relying on a shell, but a bug in gnulib ends up
# trying to execute a cmake folder when one is found in the PATH
CMAKEBUILD = env cmake --build $(BUILD_DIR)
CMAKEINSTALL = env cmake --install $(BUILD_DIR)
CMAKECLEAN = rm -f $(BUILD_DIR)/CMakeCache.txt
CMAKECONFIG = cmake -S $< -B $(BUILD_DIR) \
  -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
  -DBUILD_SHARED_LIBS:BOOL=OFF \
  -DCMAKE_INSTALL_LIBDIR:STRING=lib \
  -DBUILD_TESTING:BOOL=OFF \
  -G $(CMAKE_GENERATOR)
ifeq ($(V),1)
CMAKECONFIG += -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
endif
ifdef HAVE_EMSCRIPTEN
# by default emcmake forces the processor to X86 to mark it as 32-bit
CMAKECONFIG += -DEMSCRIPTEN_SYSTEM_PROCESSOR=$(ARCH)
endif

CMAKE = $(CMAKECONFIG) \
  -DCMAKE_TOOLCHAIN_FILE=$(abspath toolchain.cmake) \
  -DCMAKE_INSTALL_PREFIX:STRING=$(PREFIX)
CMAKE_NATIVE = $(CMAKECONFIG) \
  -DCMAKE_INSTALL_PREFIX:STRING=$(BUILDPREFIX)
ifndef WITH_OPTIMIZATION
CMAKE += -DCMAKE_BUILD_TYPE=Debug
else
CMAKE += -DCMAKE_BUILD_TYPE=RelWithDebInfo
endif
ifdef ENABLE_LTO
CMAKE += -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_POLICY_DEFAULT_CMP0069:STRING=NEW
endif
ifdef HAVE_WIN32
CMAKE += -DCMAKE_DEBUG_POSTFIX:STRING=
endif
ifdef HAVE_DARWIN_OS
CMAKE += -DCMAKE_REQUIRED_FLAGS="-Werror=partial-availability"
endif
ifdef MSYS_BUILD
CMAKE = PKG_CONFIG_LIBDIR="$(PKG_CONFIG_PATH)" $(CMAKE)
CMAKE += -DCMAKE_LINK_LIBRARY_SUFFIX:STRING=.a
endif
ifdef HAVE_DARWIN_OS
# Ignore 3rd party packager paths in CMakes find_*
# functions, to avoid finding non-system deps
CMAKE_IGNORE_PREFIX_PATHS := /sw /opt/local
HOMEBREW_PREFIX := $(shell brew --prefix 2>/dev/null)
ifneq ($(strip $(HOMEBREW_PREFIX)),)
CMAKE_IGNORE_PREFIX_PATHS += $(HOMEBREW_PREFIX)
endif
CMAKE_IGNORE_PATHS := \
 $(addsuffix /lib,$(CMAKE_IGNORE_PREFIX_PATHS)) \
 $(addsuffix /include,$(CMAKE_IGNORE_PREFIX_PATHS))
CMAKE += -DCMAKE_IGNORE_PATH="$(subst $(SPACE),;,$(strip $(CMAKE_IGNORE_PATHS)))"
endif

MESONFLAGS = $(BUILD_DIR) $< --default-library static --prefix "$(PREFIX)" \
 --backend ninja -Dlibdir=lib -Dcmake_prefix_path="$(PREFIX)"
ifndef WITH_OPTIMIZATION
MESONFLAGS += --buildtype debug
else
MESONFLAGS += --buildtype debugoptimized -Db_ndebug=true
endif
ifdef ENABLE_LTO
MESONFLAGS += -Db_lto=true
endif
ifdef HAVE_BITCODE_ENABLED
MESONFLAGS += -Db_bitcode=true
endif
MESONFLAGS += -Dc_args="$(CFLAGS)" -Dc_link_args="$(LDFLAGS)" -Dcpp_args="$(CXXFLAGS)" -Dcpp_link_args="$(LDFLAGS)"
ifdef HAVE_DARWIN_OS
MESONFLAGS += -Dobjc_args="$(CFLAGS)" -Dobjc_link_args="$(LDFLAGS)" -Dobjcpp_args="$(CXXFLAGS)" -Dobjcpp_link_args="$(LDFLAGS)"
endif

MESONCOMPILEFLAGS =
ifeq ($(V),1)
MESONCOMPILEFLAGS += -v
endif

ifdef HAVE_CROSS_COMPILE
# When cross-compiling meson uses the env vars like
# CC, CXX, etc. and CFLAGS, CXXFLAGS, etc. for the
# build machine compiler and not like most other
# buildsystems for the host compilation. Therefore
# we clear the enviornment variables using the env
# command, except PATH, which is needed.
# The values of the mentioned relevant env variables
# are passed for the host compilation using the
# generated crossfile, so everything should work as
# expected.
MESONFLAGS += --cross-file $(abspath crossfile.meson)
MESON = env -i PATH="$(PATH)" \
 meson setup -Dpkg_config_path="$(PKG_CONFIG_PATH)" \
 $(MESONFLAGS)

else
MESON = $(HOSTTOOLS) meson setup $(MESONFLAGS)
endif
MESON_NATIVE = $(BUILDTOOLS) meson setup $(BUILD_DIR) $< --prefix "$(BUILDPREFIX)" \
 --backend ninja -Dlibdir=lib -Dcmake_prefix_path="$(BUILDPREFIX)" \
 -Dc_args="$(BUILDCFLAGS)" -Dc_link_args="$(BUILDLDFLAGS)" -Dcpp_args="$(BUILDCXXFLAGS)" -Dcpp_link_args="$(BUILDLDFLAGS)"

MESONCLEAN = rm -rf $(BUILD_DIR)/meson-private
MESONBUILD = meson compile -C $(BUILD_DIR) $(MESON_BUILD) $(MESONCOMPILEFLAGS) && meson install -C $(BUILD_DIR)

# shared Qt config
ifeq ($(call system_tool_majmin, qmake6 -query QT_VERSION 2>/dev/null),$(QTBASE_VERSION_MAJOR))

ifdef HAVE_CROSS_COMPILE
QT_LIBEXECS := $(shell qmake6 -query QT_HOST_LIBEXECS)
QT_BINS := $(shell qmake6 -query QT_HOST_BINS)
else
QT_LIBEXECS := $(shell qmake6 -query QT_INSTALL_LIBEXECS):$(shell qmake6 -query QT_HOST_LIBEXECS)
QT_BINS := $(shell qmake6 -query QT_INSTALL_BINS):$(shell qmake6 -query QT_HOST_BINS)
endif

ifeq ($(call system_tool_majmin, PATH="${QT_LIBEXECS}" moc --version),$(QTBASE_VERSION_MAJOR))
ifeq ($(call system_tool_majmin, PATH="${QT_BINS}" qsb --version),$(QTBASE_VERSION_MAJOR))
ifeq ($(call system_tool_majmin, PATH="${QT_LIBEXECS}" qmlcachegen --version),$(QTBASE_VERSION_MAJOR))
QT_USES_SYSTEM_TOOLS = 1
endif
endif
endif
endif

ifdef HAVE_CROSS_COMPILE
ifdef QT_USES_SYSTEM_TOOLS
 # using system Qt native tools
 QT_HOST_PREFIX := $(shell PATH="${SYSTEM_PATH}" qmake6 -query QT_HOST_PREFIX)
 QT_HOST_LIBS := $(shell PATH="${SYSTEM_PATH}" qmake6 -query QT_HOST_LIBS)
else
 # using locally compiled Qt native tools
 QT_HOST_PREFIX := $(BUILDPREFIX)
 QT_HOST_LIBS := $(QT_HOST_PREFIX)/lib
endif
QT_HOST_PATH := -DQT_HOST_PATH=$(QT_HOST_PREFIX) -DQT_HOST_PATH_CMAKE_DIR=$(QT_HOST_LIBS)/cmake
endif
QT_CMAKE_CONFIG := -DCMAKE_TOOLCHAIN_FILE=$(PREFIX)/lib/cmake/Qt6/qt.toolchain.cmake $(QT_HOST_PATH) --log-level=STATUS
ifdef QT_USES_SYSTEM_TOOLS
# We checked the versions match, assume we know what we're going
QT_CMAKE_CONFIG += -DQT_NO_PACKAGE_VERSION_CHECK=TRUE
endif

##### fontconfig
ifdef HAVE_DARWIN_OS
BUILD_WITH_FONTCONFIG := 0
else
ifdef HAVE_WIN32
BUILD_WITH_FONTCONFIG := 0
else
ifdef HAVE_EMSCRIPTEN
BUILD_WITH_FONTCONFIG := 0
else
BUILD_WITH_FONTCONFIG := 1
endif
endif
endif


ifdef GPL
REQUIRE_GPL =
else
REQUIRE_GPL = @echo "Package \"$<\" requires the GPL license." >&2; exit 1
endif
ifdef GNUV3
REQUIRE_GNUV3 =
else
REQUIRE_GNUV3 = \
 @echo "Package \"$<\" requires the version 3 of GNU licenses." >&2; \
 exit 1
endif

PYTHON_VENV = $(BUILDPREFIX)/python-venv
PYTHON_ACTIVATE = . $(PYTHON_VENV)/bin/activate
PYTHON_INSTALL = $(HOSTVARS) $(PYTHON_VENV)/bin/pip3 install ./$<

.python-venv:
 python3 -m venv $(PYTHON_VENV)
 touch $@

#
# Rust specific rules
#
include $(SRC)/main-rust.mak

#
# Per-package build rules
#
PKGS_FOUND :=
include $(SRC)/*/rules.mak

ifeq ($(PKGS_DISABLE), all)
PKGS :=
endif
#
# Targets
#
ifneq ($(filter $(PKGS_DISABLE),$(PKGS_ENABLE)),)
$(error Same package(s) disabled and enabled at the same time)
endif
# Apply automatic selection (= remove distro packages):
PKGS_AUTOMATIC := $(filter-out $(PKGS_FOUND),$(PKGS))
# Apply manual selection (from bootstrap):
PKGS_MANUAL := $(sort $(PKGS_ENABLE) $(filter-out $(PKGS_DISABLE),$(PKGS_AUTOMATIC)))
# Resolve dependencies:
PKGS_DEPS := $(filter-out $(PKGS_FOUND) $(PKGS_MANUAL),$(sort $(foreach p,$(PKGS_MANUAL),$(DEPS_$(p)))))
PKGS := $(sort $(PKGS_MANUAL) $(PKGS_DEPS))

fetch: $(PKGS:%=.sum-%)
fetch-all: $(PKGS_ALL:%=.sum-%)
install: $(PKGS:%=.%)
tools: $(PKGS_TOOLS:%=.dep-%)

mostlyclean:
 -$(RM) $(foreach p,$(PKGS_ALL),.$(p) .sum-$(p) .dep-$(p))
 -$(RM) -R "$(PYTHON_VENV)"
 -$(RM) .python-venv
 -$(RM) toolchain.cmake
 -$(RM) crossfile.meson
 -$(RM) -R "$(PREFIX)"
 -$(RM) "$(BUILDBINDIR)/$(HOST)-*"
 -$(RM) -R */

clean: mostlyclean
 -$(RM) $(TARBALLS)/*.*

distclean: clean
 $(RM) config.mak
 unlink Makefile

PREBUILT_URL=https://download.videolan.org/pub/videolan/contrib/$(HOST)/vlc-contrib-$(HOST)-latest.tar.zst

vlc-contrib-$(HOST)-latest.tar.zst:
 $(call download,$(PREBUILT_URL))

prebuilt: vlc-contrib-$(HOST)-latest.tar.zst
 $(RM) -r $(PREFIX)
 $(UNPACK)
 mv $(HOST) $(PREFIX)
 cd $(PREFIX) && $(abspath $(SRC))/change_prefix.sh
 # Regenerate the machine file with local tool paths, without rebuilding dependencies.
 install -d "$(PREFIX)/share/meson/$(CROSS_OR_NATIVE)"
 PREFIX="$(PREFIX)" \
 $(SRC)/gen-meson-machinefile.py \
  --type external-$(CROSS_OR_NATIVE) \
  $(foreach tool,$(filter-out $(PKGS_FOUND),$(PKGS.tools)),--binary $(PKGS.tools.$(tool).config-tool):$(PKGS.tools.$(tool).path)) \
  "$(PREFIX)/share/meson/$(CROSS_OR_NATIVE)/contrib.ini"

package: install
 rm -Rf tmp/
 mkdir -p tmp/
 cp -R $(PREFIX) tmp/
 # remove useless files
 cd tmp/$(notdir $(PREFIX)); \
  cd share; rm -Rf man doc gtk-doc info lua projectM; cd ..; \
  rm -Rf man sbin etc lib/lua lib/sidplay
 cd tmp/$(notdir $(PREFIX)) && $(abspath $(SRC))/change_prefix.sh $(PREFIX)
ifneq ($(notdir $(PREFIX)),$(HOST))
 (cd tmp && mv $(notdir $(PREFIX)) $(HOST))
endif
 tar -c -C tmp $(HOST)/ | zstd --quiet --force --threads=0 -12 -c > ../vlc-contrib-$(HOST)-$(DATE).tar.zst

list:
 @echo All packages:
 @echo '  $(PKGS_ALL)' | tr " " "\n" | sort | tr "\n" " " |fmt
 @echo All native tools:
 @echo '  $(PKGS_TOOLS)' | tr " " "\n" | sort | tr "\n" " " |fmt
 @echo Distribution-provided packages:
 @echo '  $(PKGS_FOUND)' | tr " " "\n" | sort | tr "\n" " " |fmt
 @echo Automatically selected packages:
 @echo '  $(PKGS_AUTOMATIC)' | tr " " "\n" | sort | tr "\n" " " |fmt
 @echo Manually deselected packages:
 @echo '  $(PKGS_DISABLE)' | tr " " "\n" | sort | tr "\n" " " |fmt
 @echo Manually selected packages:
 @echo '  $(PKGS_ENABLE)' | tr " " "\n" | sort | tr "\n" " " |fmt
 @echo Depended-on packages:
 @echo '  $(PKGS_DEPS)' | tr " " "\n" | sort | tr "\n" " " |fmt
 @echo To-be-built packages:
 @echo '  $(PKGS)' | tr " " "\n" | sort | tr "\n" " " |fmt

help:
 @cat $(SRC)/help.txt

.PHONY: all fetch fetch-all install mostlyclean clean distclean package list help prebuilt tools

CMAKE_HOST_ARCH=$(ARCH)
ifeq ($(ARCH),i386)
CMAKE_HOST_ARCH=i686
else ifeq ($(ARCH),arm)
CMAKE_HOST_ARCH=armv7-a
endif

CMAKE_SYSTEM_NAME =
ifdef HAVE_CROSS_COMPILE
CMAKE_SYSTEM_NAME = $(error CMAKE_SYSTEM_NAME required for cross-compilation)
endif
ifdef HAVE_ANDROID
CMAKE_SYSTEM_NAME = Android
else
CMAKE_SYSTEM_NAME = Linux
endif
ifdef HAVE_WIN32
CMAKE_SYSTEM_NAME = Windows
ifdef HAVE_VISUALSTUDIO
ifdef HAVE_WINSTORE
CMAKE_SYSTEM_NAME = WindowsStore
endif
endif
endif
ifdef HAVE_MACOSX
CMAKE_SYSTEM_NAME = Darwin
else
ifdef HAVE_TVOS
CMAKE_SYSTEM_NAME = tvOS
else
ifdef HAVE_WATCHOS
CMAKE_SYSTEM_NAME = watchOS
else
ifdef HAVE_XROS
CMAKE_SYSTEM_NAME = visionOS
else
ifdef HAVE_IOS
CMAKE_SYSTEM_NAME = iOS
endif
endif
endif
endif
endif
ifdef HAVE_EMSCRIPTEN
CMAKE_SYSTEM_NAME = Emscripten
EMCMAKE_PATH := $(shell command -v emcmake)
EMSDK_PATH := $(dir $(EMCMAKE_PATH))
endif

ifdef HAVE_ANDROID
CFLAGS += -DANDROID_NATIVE_API_LEVEL=$(ANDROID_API)
endif

# CMake toolchain
CMAKE_TOOLCHAIN_ENV := $(HOSTTOOLS) HOST_ARCH="$(CMAKE_HOST_ARCH)" SYSTEM_NAME="$(CMAKE_SYSTEM_NAME)"
ifdef HAVE_WIN32
ifdef HAVE_CROSS_COMPILE
 CMAKE_TOOLCHAIN_ENV += RC_COMPILER="$(WINDRES)"
endif
endif
ifdef HAVE_DARWIN_OS
ifeq ($(ARCH),aarch64)
 CMAKE_TOOLCHAIN_ENV += OSX_ARCHITECTURES="arm64"
else
ifeq ($(ARCH),arm)
 CMAKE_TOOLCHAIN_ENV += OSX_ARCHITECTURES="armv7"
else
 CMAKE_TOOLCHAIN_ENV += OSX_ARCHITECTURES="$(ARCH)"
endif
endif
ifdef VLC_DEPLOYMENT_TARGET
 CMAKE_TOOLCHAIN_ENV += OSX_DEPLOYMENT_TARGET="$(VLC_DEPLOYMENT_TARGET)"
endif
ifdef HAVE_IOS
 CMAKE_TOOLCHAIN_ENV += OSX_SYSROOT="$(IOS_SDK)"
else
 CMAKE_TOOLCHAIN_ENV += OSX_SYSROOT="$(MACOSX_SDK)"
endif
endif
ifdef HAVE_CROSS_COMPILE
 CMAKE_TOOLCHAIN_ENV += TOOLCHAIN_PREFIX="$(HOST)-"
 CMAKE_TOOLCHAIN_ENV += PATH_MODE_LIBRARY="ONLY"
 CMAKE_TOOLCHAIN_ENV += PATH_MODE_INCLUDE="ONLY"
 CMAKE_TOOLCHAIN_ENV += PATH_MODE_PACKAGE="ONLY"
endif
ifdef HAVE_ANDROID
 CMAKE_TOOLCHAIN_ENV += ANDROID_NDK=$(ANDROID_NDK)
 CMAKE_TOOLCHAIN_ENV += ANDROID_ABI=$(ANDROID_ABI)
 CMAKE_TOOLCHAIN_ENV += ANDROID_API=$(ANDROID_API)
 CMAKE_TOOLCHAIN_ENV += EXTRA_INCLUDE=$(ANDROID_NDK)/build/cmake/android.toolchain.cmake
endif
ifdef MSYS_BUILD
 CMAKE_TOOLCHAIN_ENV += FIND_ROOT_PATH="$(shell cygpath -m $(PREFIX))"
else
 CMAKE_TOOLCHAIN_ENV += FIND_ROOT_PATH="$(PREFIX)"
endif
ifdef HAVE_EMSCRIPTEN
 CMAKE_TOOLCHAIN_ENV += EXTRA_INCLUDE="$(EMSDK_PATH)cmake/Modules/Platform/Emscripten.cmake"
endif

toolchain.cmake: $(SRC)/gen-cmake-toolchain.py
 $(CMAKE_TOOLCHAIN_ENV) $(SRC)/gen-cmake-toolchain.py $@
 cat $@

MESON_SYSTEM_NAME =
ifdef HAVE_WIN32
 MESON_SYSTEM_NAME = windows
else
ifdef HAVE_DARWIN_OS
 MESON_SYSTEM_NAME = darwin
else
ifdef HAVE_ANDROID
 MESON_SYSTEM_NAME = android
else
ifdef HAVE_LINUX
 # android has also system = linux and defines HAVE_LINUX
 MESON_SYSTEM_NAME = linux
else
ifdef HAVE_EMSCRIPTEN
 MESON_SYSTEM_NAME = emscripten
else
 $(error "No meson system name known for this target")
endif
endif
endif
endif
endif

MESON_CROSSFILE_ENV = $(HOSTTOOLS) \
 CMAKE="$(shell command -v cmake)" \
 PKG_CONFIG="$(PKG_CONFIG)" \
 HOST_SYSTEM="$(MESON_SYSTEM_NAME)" \
 HOST_ARCH="$(subst i386,x86,$(ARCH))" \
 HOST="$(HOST)"

ifdef HAVE_WIN32
 MESON_CROSSFILE_ENV += WINDRES="$(WINDRES)"
endif

ifdef HAVE_DARWIN_OS
ifdef VLC_DEPLOYMENT_TARGET_LDFLAG
 MESON_CROSSFILE_ENV += CFLAGS_BUILTIN="$(VLC_DEPLOYMENT_TARGET_CFLAG)"
 MESON_CROSSFILE_ENV += CPPFLAGS_BUILTIN="$(VLC_DEPLOYMENT_TARGET_CFLAG)"
 MESON_CROSSFILE_ENV += OBJCFLAGS_BUILTIN="$(VLC_DEPLOYMENT_TARGET_CFLAG)"
 MESON_CROSSFILE_ENV += OBJCPPFLAGS_BUILTIN="$(VLC_DEPLOYMENT_TARGET_CFLAG)"
 MESON_CROSSFILE_ENV += LDFLAGS_C_BUILTIN="$(VLC_DEPLOYMENT_TARGET_LDFLAG)"
 MESON_CROSSFILE_ENV += LDFLAGS_CPP_BUILTIN="$(VLC_DEPLOYMENT_TARGET_LDFLAG)"
 MESON_CROSSFILE_ENV += LDFLAGS_OBJC_BUILTIN="$(VLC_DEPLOYMENT_TARGET_LDFLAG)"
 MESON_CROSSFILE_ENV += LDFLAGS_OBJCPP_BUILTIN="$(VLC_DEPLOYMENT_TARGET_LDFLAG)"
 MESON_CROSSFILE_ENV += OSX_SYSROOT="$(IOS_SDK)"
else
 MESON_CROSSFILE_ENV += CFLAGS_BUILTIN="-mmacosx-version-min=$(VLC_DEPLOYMENT_TARGET)"
 MESON_CROSSFILE_ENV += CPPFLAGS_BUILTIN="-mmacosx-version-min=$(VLC_DEPLOYMENT_TARGET)"
 MESON_CROSSFILE_ENV += OBJCFLAGS_BUILTIN="-mmacosx-version-min=$(VLC_DEPLOYMENT_TARGET)"
 MESON_CROSSFILE_ENV += OBJCPPFLAGS_BUILTIN="-mmacosx-version-min=$(VLC_DEPLOYMENT_TARGET)"
 MESON_CROSSFILE_ENV += LDFLAGS_C_BUILTIN="-mmacosx-version-min=$(VLC_DEPLOYMENT_TARGET)"
 MESON_CROSSFILE_ENV += LDFLAGS_CPP_BUILTIN="-mmacosx-version-min=$(VLC_DEPLOYMENT_TARGET)"
 MESON_CROSSFILE_ENV += LDFLAGS_OBJC_BUILTIN="-mmacosx-version-min=$(VLC_DEPLOYMENT_TARGET)"
 MESON_CROSSFILE_ENV += LDFLAGS_OBJCPP_BUILTIN="-mmacosx-version-min=$(VLC_DEPLOYMENT_TARGET)"
 MESON_CROSSFILE_ENV += OSX_SYSROOT="$(MACOSX_SDK)"
endif
endif

crossfile.meson: $(SRC)/gen-meson-machinefile.py
 $(MESON_CROSSFILE_ENV) $(SRC)/gen-meson-machinefile.py $@
 cat $@

# Default pattern rules
.sum-%: $(SRC)/%/SHA512SUMS
 $(CHECK_SHA512)
 touch $@

.sum-%:
 $(error Download and check target not defined for $*)

# Dummy dependency on found packages
$(patsubst %,.dep-%,$(PKGS_FOUND)): .dep-%:
 touch $@

# Real dependency on missing packages
$(patsubst %,.dep-%,$(filter-out $(PKGS_FOUND),$(PKGS_ALL))): .dep-%: .%
 touch -r $< $@

.SECONDEXPANSION:

# Dependency propagation (convert 'DEPS_foo = bar' to '.foo: .bar')
$(foreach p,$(PKGS_ALL),.$(p)): .%: $$(foreach d,$$(DEPS_$$*),.dep-$$(d))

.DELETE_ON_ERROR:

[Dauer der Verarbeitung: 0.6 Sekunden, vorverarbeitet 2026-10-24]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1104842
#Domains=499167