# $OpenBSD: Makefile,v 1.5 2021/12/17 14:55:43 patrick Exp $

.include <bsd.own.mk>

.if ${COMPILER_VERSION:L} != "clang"
CC=		clang
CXX=		clang++
.endif

.if ${BUILD_CLANG:L} == "yes"

HDRDIR=		${.CURDIR}/../../../gnu/llvm/libcxx/include
SRCDIR=		${.CURDIR}/../../../gnu/llvm/libcxx/src
AHDRDIR=	${.CURDIR}/../../../gnu/llvm/libcxxabi/include
UHDRDIR=	${.CURDIR}/../../../gnu/llvm/libunwind/include
CXXINCLUDEDIR=	/usr/include/c++/v1

LOCALHDRDIR=	${.CURDIR}/include/c++/v1
CONFIG_SITE=	${LOCALHDRDIR}/__config_site

.PATH:	${SRCDIR} ${SRCDIR}/filesystem

LIB=		c++


SRCS+=		algorithm.cpp \
		any.cpp \
		atomic.cpp \
		barrier.cpp \
		bind.cpp \
		charconv.cpp \
		chrono.cpp \
		condition_variable.cpp \
		condition_variable_destructor.cpp \
		debug.cpp \
		directory_iterator.cpp \
		exception.cpp \
		functional.cpp \
		future.cpp \
		hash.cpp \
		ios.cpp \
		ios.instantiations.cpp \
		iostream.cpp \
		locale.cpp \
		memory.cpp \
		mutex.cpp \
		mutex_destructor.cpp \
		new.cpp \
		operations.cpp \
		optional.cpp \
		random.cpp \
		random_shuffle.cpp \
		regex.cpp \
		shared_mutex.cpp \
		stdexcept.cpp \
		string.cpp \
		strstream.cpp \
		system_error.cpp \
		thread.cpp \
		typeinfo.cpp \
		utility.cpp \
		valarray.cpp \
		variant.cpp \
		vector.cpp

CPPFLAGS+=	-Wall -DLIBCXXABI -I${HDRDIR} -D_LIBCPP_BUILDING_LIBRARY \
		-DLIBCXX_BUILDING_LIBCXXABI -I${AHDRDIR} -I${UHDRDIR} -I${LOCALHDRDIR} \
		-DNDEBUG
CXXFLAGS+=	-nostdlib -nostdinc++
.if empty(CXXFLAGS:M-std=*)
CXXFLAGS+=	-std=c++14
.endif

LDADD+=		-L${BSDOBJDIR}/gnu/lib/libcxxabi -lc++abi


STD_HEADERS=	\
	__algorithm/adjacent_find.h \
	__algorithm/all_of.h \
	__algorithm/any_of.h \
	__algorithm/binary_search.h \
	__algorithm/clamp.h \
	__algorithm/comp_ref_type.h \
	__algorithm/comp.h \
	__algorithm/copy_backward.h \
	__algorithm/copy_if.h \
	__algorithm/copy_n.h \
	__algorithm/copy.h \
	__algorithm/count_if.h \
	__algorithm/count.h \
	__algorithm/equal_range.h \
	__algorithm/equal.h \
	__algorithm/fill_n.h \
	__algorithm/fill.h \
	__algorithm/find_end.h \
	__algorithm/find_first_of.h \
	__algorithm/find_if_not.h \
	__algorithm/find_if.h \
	__algorithm/find.h \
	__algorithm/for_each_n.h \
	__algorithm/for_each.h \
	__algorithm/generate_n.h \
	__algorithm/generate.h \
	__algorithm/half_positive.h \
	__algorithm/includes.h \
	__algorithm/inplace_merge.h \
	__algorithm/is_heap_until.h \
	__algorithm/is_heap.h \
	__algorithm/is_partitioned.h \
	__algorithm/is_permutation.h \
	__algorithm/is_sorted_until.h \
	__algorithm/is_sorted.h \
	__algorithm/iter_swap.h \
	__algorithm/lexicographical_compare.h \
	__algorithm/lower_bound.h \
	__algorithm/make_heap.h \
	__algorithm/max_element.h \
	__algorithm/max.h \
	__algorithm/merge.h \
	__algorithm/min_element.h \
	__algorithm/min.h \
	__algorithm/minmax_element.h \
	__algorithm/minmax.h \
	__algorithm/mismatch.h \
	__algorithm/move_backward.h \
	__algorithm/move.h \
	__algorithm/next_permutation.h \
	__algorithm/none_of.h \
	__algorithm/nth_element.h \
	__algorithm/partial_sort_copy.h \
	__algorithm/partial_sort.h \
	__algorithm/partition_copy.h \
	__algorithm/partition_point.h \
	__algorithm/partition.h \
	__algorithm/pop_heap.h \
	__algorithm/prev_permutation.h \
	__algorithm/push_heap.h \
	__algorithm/remove_copy_if.h \
	__algorithm/remove_copy.h \
	__algorithm/remove_if.h \
	__algorithm/remove.h \
	__algorithm/replace_copy_if.h \
	__algorithm/replace_copy.h \
	__algorithm/replace_if.h \
	__algorithm/replace.h \
	__algorithm/reverse_copy.h \
	__algorithm/reverse.h \
	__algorithm/rotate_copy.h \
	__algorithm/rotate.h \
	__algorithm/sample.h \
	__algorithm/search_n.h \
	__algorithm/search.h \
	__algorithm/set_difference.h \
	__algorithm/set_intersection.h \
	__algorithm/set_symmetric_difference.h \
	__algorithm/set_union.h \
	__algorithm/shift_left.h \
	__algorithm/shift_right.h \
	__algorithm/shuffle.h \
	__algorithm/sift_down.h \
	__algorithm/sort_heap.h \
	__algorithm/sort.h \
	__algorithm/stable_partition.h \
	__algorithm/stable_sort.h \
	__algorithm/swap_ranges.h \
	__algorithm/transform.h \
	__algorithm/unique_copy.h \
	__algorithm/unique.h \
	__algorithm/unwrap_iter.h \
	__algorithm/upper_bound.h \
	__availability \
	__bit_reference \
	__bits \
	__bsd_locale_defaults.h \
	__bsd_locale_fallbacks.h \
	__config \
	__debug \
	__errc \
	__format/format_error.h \
	__format/format_parse_context.h \
	__function_like.h \
	__functional_base \
	__functional/binary_function.h \
	__functional/binary_negate.h \
	__functional/bind_front.h \
	__functional/bind.h \
	__functional/binder1st.h \
	__functional/binder2nd.h \
	__functional/default_searcher.h \
	__functional/function.h \
	__functional/hash.h \
	__functional/identity.h \
	__functional/invoke.h \
	__functional/is_transparent.h \
	__functional/mem_fn.h \
	__functional/mem_fun_ref.h \
	__functional/not_fn.h \
	__functional/operations.h \
	__functional/perfect_forward.h \
	__functional/pointer_to_binary_function.h \
	__functional/pointer_to_unary_function.h \
	__functional/ranges_operations.h \
	__functional/reference_wrapper.h \
	__functional/unary_function.h \
	__functional/unary_negate.h \
	__functional/unwrap_ref.h \
	__functional/weak_result_type.h \
	__hash_table \
	__iterator/access.h \
	__iterator/advance.h \
	__iterator/back_insert_iterator.h \
	__iterator/common_iterator.h \
	__iterator/concepts.h \
	__iterator/counted_iterator.h \
	__iterator/data.h \
	__iterator/default_sentinel.h \
	__iterator/distance.h \
	__iterator/empty.h \
	__iterator/erase_if_container.h \
	__iterator/front_insert_iterator.h \
	__iterator/incrementable_traits.h \
	__iterator/insert_iterator.h \
	__iterator/istream_iterator.h \
	__iterator/istreambuf_iterator.h \
	__iterator/iter_move.h \
	__iterator/iter_swap.h \
	__iterator/iterator_traits.h \
	__iterator/iterator.h \
	__iterator/move_iterator.h \
	__iterator/next.h \
	__iterator/ostream_iterator.h \
	__iterator/ostreambuf_iterator.h \
	__iterator/prev.h \
	__iterator/projected.h \
	__iterator/readable_traits.h \
	__iterator/reverse_access.h \
	__iterator/reverse_iterator.h \
	__iterator/size.h \
	__iterator/wrap_iter.h \
	__libcpp_version \
	__locale \
	__memory/addressof.h \
	__memory/allocation_guard.h \
	__memory/allocator_arg_t.h \
	__memory/allocator_traits.h \
	__memory/allocator.h \
	__memory/auto_ptr.h \
	__memory/compressed_pair.h \
	__memory/construct_at.h \
	__memory/pointer_safety.h \
	__memory/pointer_traits.h \
	__memory/raw_storage_iterator.h \
	__memory/shared_ptr.h \
	__memory/temporary_buffer.h \
	__memory/uninitialized_algorithms.h \
	__memory/unique_ptr.h \
	__memory/uses_allocator.h \
	__mutex_base \
	__node_handle \
	__nullptr \
	__random/uniform_int_distribution.h \
	__ranges/access.h \
	__ranges/all.h \
	__ranges/common_view.h \
	__ranges/concepts.h \
	__ranges/copyable_box.h \
	__ranges/dangling.h \
	__ranges/data.h \
	__ranges/drop_view.h \
	__ranges/empty_view.h \
	__ranges/empty.h \
	__ranges/enable_borrowed_range.h \
	__ranges/enable_view.h \
	__ranges/non_propagating_cache.h \
	__ranges/ref_view.h \
	__ranges/size.h \
	__ranges/subrange.h \
	__ranges/transform_view.h \
	__ranges/view_interface.h \
	__split_buffer \
	__std_stream \
	__string \
	__support/android/locale_bionic.h \
	__support/fuchsia/xlocale.h \
	__support/ibm/gettod_zos.h \
	__support/ibm/limits.h \
	__support/ibm/locale_mgmt_aix.h \
	__support/ibm/locale_mgmt_zos.h \
	__support/ibm/nanosleep.h \
	__support/ibm/support.h \
	__support/ibm/xlocale.h \
	__support/musl/xlocale.h \
	__support/newlib/xlocale.h \
	__support/nuttx/xlocale.h \
	__support/openbsd/xlocale.h \
	__support/solaris/floatingpoint.h \
	__support/solaris/wchar.h \
	__support/solaris/xlocale.h \
	__support/win32/limits_msvc_win32.h \
	__support/win32/locale_win32.h \
	__support/xlocale/__nop_locale_mgmt.h \
	__support/xlocale/__posix_l_fallback.h \
	__support/xlocale/__strtonum_fallback.h \
	__threading_support \
	__tree \
	__tuple \
	__undef_macros \
	__utility/__decay_copy.h \
	__utility/as_const.h \
	__utility/cmp.h \
	__utility/declval.h \
	__utility/exchange.h \
	__utility/forward.h \
	__utility/in_place.h \
	__utility/integer_sequence.h \
	__utility/move.h \
	__utility/pair.h \
	__utility/piecewise_construct.h \
	__utility/rel_ops.h \
	__utility/swap.h \
	__utility/to_underlying.h \
	__variant/monostate.h \
	algorithm \
	any \
	array \
	atomic \
	barrier \
	bit \
	bitset \
	cassert \
	ccomplex \
	cctype \
	cerrno \
	cfenv \
	cfloat \
	charconv \
	chrono \
	cinttypes \
	ciso646 \
	climits \
	clocale \
	cmath \
	codecvt \
	compare \
	complex \
	complex.h \
	concepts \
	condition_variable \
	csetjmp \
	csignal \
	cstdarg \
	cstdbool \
	cstddef \
	cstdint \
	cstdio \
	cstdlib \
	cstring \
	ctgmath \
	ctime \
	ctype.h \
	cwchar \
	cwctype \
	deque \
	errno.h \
	exception \
	execution \
	experimental/__config \
	experimental/__memory \
	experimental/algorithm \
	experimental/coroutine \
	experimental/deque \
	experimental/filesystem \
	experimental/forward_list \
	experimental/functional \
	experimental/iterator \
	experimental/list \
	experimental/map \
	experimental/memory_resource \
	experimental/propagate_const \
	experimental/regex \
	experimental/set \
	experimental/simd \
	experimental/string \
	experimental/type_traits \
	experimental/unordered_map \
	experimental/unordered_set \
	experimental/utility \
	experimental/vector \
	ext/__hash \
	ext/hash_map \
	ext/hash_set \
	fenv.h \
	filesystem \
	float.h \
	format \
	forward_list \
	fstream \
	functional \
	future \
	initializer_list \
	inttypes.h \
	iomanip \
	ios \
	iosfwd \
	iostream \
	istream \
	iterator \
	latch \
	limits \
	limits.h \
	list \
	locale \
	locale.h \
	map \
	math.h \
	memory \
	module.modulemap \
	mutex \
	new \
	numbers \
	numeric \
	optional \
	ostream \
	queue \
	random \
	ranges \
	ranges \
	ratio \
	regex \
	scoped_allocator \
	semaphore \
	set \
	setjmp.h \
	shared_mutex \
	span \
	sstream \
	stack \
	stdbool.h \
	stddef.h \
	stdexcept \
	stdint.h \
	stdio.h \
	stdlib.h \
	streambuf \
	string \
	string_view \
	string.h \
	strstream \
	system_error \
	tgmath.h \
	thread \
	tuple \
	type_traits \
	typeindex \
	typeinfo \
	unordered_map \
	unordered_set \
	utility \
	valarray \
	variant \
	vector \
	version \
	wchar.h \
	wctype.h

includes:
	@echo installing ${STD_HEADERS}
.	for hdr in ${STD_HEADERS}
		cmp -s ${HDRDIR}/${hdr} ${DESTDIR}/${CXXINCLUDEDIR}/${hdr} || \
			${INSTALL} ${INSTALL_COPY} -D -m 444 ${HDRDIR}/${hdr} \
				${DESTDIR}/${CXXINCLUDEDIR}/${hdr};
.	endfor
	cmp -s ${CONFIG_SITE} ${DESTDIR}/${CXXINCLUDEDIR}/${CONFIG_SITE:T} || \
		${INSTALL} ${INSTALL_COPY} -D -m 444 ${CONFIG_SITE} \
			${DESTDIR}/${CXXINCLUDEDIR}/${CONFIG_SITE:T}

.include <bsd.lib.mk>

.else
NOPROG=
.include <bsd.prog.mk>
.endif
