package File::Flock::Forking;

require Exporter;
@ISA = qw(Exporter);

use strict;
use Config;

die "Import File::Flock::Forking before importing File::Flock"
	if defined $File::Flock::VERSION;

if ((!$Config{d_flock} && ! ($ENV{FLOCK_FORKING_USE} || '') eq 'flock')
	|| (($ENV{FLOCK_FORKING_USE} || '') eq 'subprocess'))
{
	$File::Flock::Forking::SubprocessEnabled = 1;
	require File::Flock::Subprocess;
}

1;

__END__

=head1 NAME

 File::Flock::Forking - adjust File::Flock to handle fork()

=head1 SYNOPSIS

 use File::Flock::Forking;
 use File::Flock;

=head1 DESCRIPTION

The purpose of File::Flock::Forking is to change the implementation
of L<File::Flock> to handle locking on systems that do not hold
locks across calls to fork().

If you are using L<File::Flock> or any module that uses L<File::Flock>
then and your program uses fork(), then you should import
File::Flock::Forking before you import L<File::Flock> or any module that
uses L<File::Flock>.

On most operating systems, File::Flock::Forking does nothing.  On
Solaris, it changes the behavior of L<File::Flock> to be implemented
by L<File::Flock::Subprocess>.

You can also force it to use L<FIle::Flock::Subprocess> by with

	$ENV{FLOCK_FORKING_USE} = 'subprocess'

Or force it to use L<File::Flock> with

	$ENV{FLOCK_FORKING_USE} = 'flock'

=head1 LICENSE

Copyright (C) 2013 Google, Inc.
This module may be used/copied/etc on the same terms as Perl itself.