require '_h2ph_pre.ph';

no warnings qw(redefine misc);

unless(defined(&_GLIBCXX_DEBUG_ASSERTIONS_H)) {
    eval 'sub _GLIBCXX_DEBUG_ASSERTIONS_H () {1;}' unless defined(&_GLIBCXX_DEBUG_ASSERTIONS_H);
    unless(defined(&_GLIBCXX_DEBUG)) {
	eval 'sub _GLIBCXX_DEBUG_ASSERT {
	    my($_Condition) = @_;
    	    eval q();
	}' unless defined(&_GLIBCXX_DEBUG_ASSERT);
	eval 'sub _GLIBCXX_DEBUG_PEDASSERT {
	    my($_Condition) = @_;
    	    eval q();
	}' unless defined(&_GLIBCXX_DEBUG_PEDASSERT);
	eval 'sub _GLIBCXX_DEBUG_ONLY {
	    my($_Statement) = @_;
    	    eval q();
	}' unless defined(&_GLIBCXX_DEBUG_ONLY);
    }
    unless(defined(&_GLIBCXX_ASSERTIONS)) {
	eval 'sub __glibcxx_requires_non_empty_range {
	    my($_First,$_Last) = @_;
    	    eval q();
	}' unless defined(&__glibcxx_requires_non_empty_range);
	eval 'sub __glibcxx_requires_nonempty () {
	    eval q();
	}' unless defined(&__glibcxx_requires_nonempty);
	eval 'sub __glibcxx_requires_subscript {
	    my($_N) = @_;
    	    eval q();
	}' unless defined(&__glibcxx_requires_subscript);
    } else {
	eval 'sub __glibcxx_requires_non_empty_range {
	    my($_First,$_Last) = @_;
    	    eval q( &__glibcxx_assert( &__builtin_expect($_First != $_Last,  &true)));
	}' unless defined(&__glibcxx_requires_non_empty_range);
	eval 'sub __glibcxx_requires_subscript {
	    my($_N) = @_;
    	    eval q( &__glibcxx_assert( &__builtin_expect($_N <  ($this->{size})(),  &true)));
	}' unless defined(&__glibcxx_requires_subscript);
	eval 'sub __glibcxx_requires_nonempty () {
	    eval q( &__glibcxx_assert( &__builtin_expect(! ($this->{empty})(),  &true)));
	}' unless defined(&__glibcxx_requires_nonempty);
    }
    if(defined(&_GLIBCXX_DEBUG)) {
	eval 'sub _GLIBCXX_DEBUG_ASSERT {
	    my($_Condition) = @_;
    	    eval q( &__glibcxx_assert($_Condition));
	}' unless defined(&_GLIBCXX_DEBUG_ASSERT);
	if(defined(&_GLIBCXX_DEBUG_PEDANTIC)) {
	    eval 'sub _GLIBCXX_DEBUG_PEDASSERT {
	        my($_Condition) = @_;
    		eval q( &_GLIBCXX_DEBUG_ASSERT($_Condition));
	    }' unless defined(&_GLIBCXX_DEBUG_PEDASSERT);
	} else {
	    eval 'sub _GLIBCXX_DEBUG_PEDASSERT {
	        my($_Condition) = @_;
    		eval q();
	    }' unless defined(&_GLIBCXX_DEBUG_PEDASSERT);
	}
	eval 'sub _GLIBCXX_DEBUG_ONLY {
	    my($_Statement) = @_;
    	    eval q($_Statement);
	}' unless defined(&_GLIBCXX_DEBUG_ONLY);
    }
}
1;
