*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->IRIX man pages -> perl5/ExtUtils::MakeMaker (3)              
Title
Content
Arch
Section
 

Contents


ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)


NAME    [Toc]    [Back]

     ExtUtils::MakeMaker - create an extension Makefile

SYNOPSIS    [Toc]    [Back]

     use ExtUtils::MakeMaker;

     WriteMakefile( ATTRIBUTE => VALUE [, ...] );

     which is really

     MM->new(\%att)->flush;

DESCRIPTION    [Toc]    [Back]

     This utility is designed to write a Makefile for an extension module from
     a Makefile.PL. It is based	on the Makefile.SH model provided by Andy
     Dougherty and the perl5-porters.

     It	splits the task	of generating the Makefile into	several	subroutines
     that can be individually overridden.  Each	subroutine returns the text it
     wishes to have written to the Makefile.

     MakeMaker is object oriented. Each	directory below	the current directory
     that contains a Makefile.PL. Is treated as	a separate object. This	makes
     it	possible to write an unlimited number of Makefiles with	a single
     invocation	of WriteMakefile().

     How To Write A Makefile.PL    [Toc]    [Back]

     The short answer is: Don't.

	     Always begin with h2xs.
	     Always begin with h2xs!
	     ALWAYS BEGIN WITH H2XS!

     even if you're not	building around	a header file, and even	if you don't
     have an XS	component.

     Run h2xs(1) before	you start thinking about writing a module. For so
     called pm-only modules that consist of *.pm files only, h2xs has the -X
     switch. This will generate	dummy files of all kinds that are useful for
     the module	developer.

     The medium	answer is:

	 use ExtUtils::MakeMaker;
	 WriteMakefile(	NAME =>	"Foo::Bar" );

     The long answer is	the rest of the	manpage	:-)







									Page 1






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     Default Makefile Behaviour    [Toc]    [Back]

     The generated Makefile enables the	user of	the extension to invoke

       perl Makefile.PL	# optionally "perl Makefile.PL verbose"
       make
       make test	# optionally set TEST_VERBOSE=1
       make install	# See below

     The Makefile to be	produced may be	altered	by adding arguments of the
     form KEY=VALUE. E.g.

       perl Makefile.PL	PREFIX=/tmp/myperl5

     Other interesting targets in the generated	Makefile are

       make config     # to check if the Makefile is up-to-date
       make clean      # delete	local temp files (Makefile gets	renamed)
       make realclean  # delete	derived	files (including ./blib)
       make ci	       # check in all the files	in the MANIFEST	file
       make dist       # see below the Distribution Support section


     make test

     MakeMaker checks for the existence	of a file named	test.pl	in the current
     directory and if it exists	it adds	commands to the	test target of the
     generated Makefile	that will execute the script with the proper set of
     perl -I options.

     MakeMaker also checks for any files matching glob("t/*.t"). It will add
     commands to the test target of the	generated Makefile that	execute	all
     matching files via	the the	Test::Harness manpage module with the -I
     switches set correctly.

     make testdb

     A useful variation	of the above is	the target testdb. It runs the test
     under the Perl debugger (see the perldebug	manpage). If the file test.pl
     exists in the current directory, it is used for the test.

     If	you want to debug some other testfile, set TEST_FILE variable thusly:

       make testdb TEST_FILE=t/mytest.t

     By	default	the debugger is	called using -d	option to perl.	If you want to
     specify some other	option,	set TESTDB_SW variable:

       make testdb TESTDB_SW=-Dx






									Page 2






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     make install

     make alone	puts all relevant files	into directories that are named	by the
     macros INST_LIB, INST_ARCHLIB, INST_SCRIPT, INST_MAN1DIR, and
     INST_MAN3DIR. All these default to	something below	./blib if you are not
     building below the	perl source directory. If you are building below the
     perl source, INST_LIB and INST_ARCHLIB default to
      ../../lib, and INST_SCRIPT is not	defined.

     The install target	of the generated Makefile copies the files found below
     each of the INST_*	directories to their INSTALL* counterparts. Which
     counterparts are chosen depends on	the setting of INSTALLDIRS according
     to	the following table:

				INSTALLDIRS set	to
			     perl	       site

	 INST_ARCHLIB	 INSTALLARCHLIB	   INSTALLSITEARCH
	 INST_LIB	 INSTALLPRIVLIB	   INSTALLSITELIB
	 INST_BIN		   INSTALLBIN
	 INST_SCRIPT		  INSTALLSCRIPT
	 INST_MAN1DIR		  INSTALLMAN1DIR
	 INST_MAN3DIR		  INSTALLMAN3DIR

     The INSTALL... macros in turn default to their %Config
     ($Config{installprivlib}, $Config{installarchlib},	etc.) counterparts.

     You can check the values of these variables on your system	with

	 perl '-V:install.*'

     And to check the sequence in which	the library directories	are searched
     by	perl, run

	 perl -le 'print join $/, @INC'


     PREFIX and	LIB attribute

     PREFIX and	LIB can	be used	to set several INSTALL*	attributes in one go.
     The quickest way to install a module in a non-standard place might	be

	 perl Makefile.PL LIB=~/lib

     This will install the module's architecture-independent files into	~/lib,
     the architecture-dependent	files into ~/lib/$archname/auto.

     Another way to specify many INSTALL directories with a single parameter
     is	PREFIX.






									Page 3






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



	 perl Makefile.PL PREFIX=~

     This will replace the string specified by $Config{prefix} in all
     $Config{install*} values.

     Note, that	in both	cases the tilde	expansion is done by MakeMaker,	not by
     perl by default, nor by make. Conflicts between parmeters LIB, PREFIX and
     the various INSTALL* arguments are	resolved so that XXX

     If	the user has superuser privileges, and is not working on AFS (Andrew
     File System) or relatives,	then the defaults for INSTALLPRIVLIB,
     INSTALLARCHLIB, INSTALLSCRIPT, etc. will be appropriate, and this
     incantation will be the best:

	 perl Makefile.PL; make; make test
	 make install

     make install per default writes some documentation	of what	has been done
     into the file $(INSTALLARCHLIB)/perllocal.pod. This feature can be
     bypassed by calling make pure_install.

     AFS users    [Toc]    [Back]

     will have to specify the installation directories as these	most probably
     have changed since	perl itself has	been installed.	They will have to do
     this by calling

	 perl Makefile.PL INSTALLSITELIB=/afs/here/today \
	     INSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages
	 make

     Be	careful	to repeat this procedure every time you	recompile an
     extension,	unless you are sure the	AFS installation directories are still
     valid.

     Static Linking of a new Perl Binary    [Toc]    [Back]

     An	extension that is built	with the above steps is	ready to use on
     systems supporting	dynamic	loading. On systems that do not	support
     dynamic loading, any newly	created	extension has to be linked together
     with the available	resources. MakeMaker supports the linking process by
     creating appropriate targets in the Makefile whenever an extension	is
     built. You	can invoke the corresponding section of	the makefile with

	 make perl

     That produces a new perl binary in	the current directory with all
     extensions	linked in that can be found in INST_ARCHLIB , SITELIBEXP, and
     PERL_ARCHLIB. To do that, MakeMaker writes	a new Makefile,	on UNIX, this
     is	called Makefile.aperl (may be system dependent). If you	want to	force
     the creation of a new perl, it is recommended, that you delete this
     Makefile.aperl, so	the directories	are searched-through for linkable



									Page 4






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     libraries again.

     The binary	can be installed into the directory where perl normally
     resides on	your machine with

	 make inst_perl

     To	produce	a perl binary with a different name than perl, either say

	 perl Makefile.PL MAP_TARGET=myperl
	 make myperl
	 make inst_perl

     or	say

	 perl Makefile.PL
	 make myperl MAP_TARGET=myperl
	 make inst_perl	MAP_TARGET=myperl

     In	any case you will be prompted with the correct invocation of the
     inst_perl target that installs the	new binary into	INSTALLBIN.

     make inst_perl per	default	writes some documentation of what has been
     done into the file	$(INSTALLARCHLIB)/perllocal.pod. This can be bypassed
     by	calling	make pure_inst_perl.

     Warning: the inst_perl: target will most probably overwrite your existing
     perl binary. Use with care!

     Sometimes you might want to build a statically linked perl	although your
     system supports dynamic loading. In this case you may explicitly set the
     linktype with the invocation of the Makefile.PL or	make:

	 perl Makefile.PL LINKTYPE=static    # recommended

     or

	 make LINKTYPE=static		     # works on	most systems


     Determination of Perl Library and Installation Locations    [Toc]    [Back]

     MakeMaker needs to	know, or to guess, where certain things	are located.
     Especially	INST_LIB and INST_ARCHLIB (where to put	the files during the
     make(1) run), PERL_LIB and	PERL_ARCHLIB (where to read existing modules
     from), and	PERL_INC (header files and libperl*.*).

     Extensions	may be built either using the contents of the perl source
     directory tree or from the	installed perl library.	The recommended	way is
     to	build extensions after you have	run 'make install' on perl itself. You
     can do that in any	directory on your hard disk that is not	below the perl
     source tree. The support for extensions below the ext directory of	the



									Page 5






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     perl distribution is only good for	the standard extensions	that come with
     perl.

     If	an extension is	being built below the ext/ directory of	the perl
     source then MakeMaker will	set PERL_SRC automatically (e.g., ../..).  If
     PERL_SRC is defined and the extension is recognized as a standard
     extension,	then other variables default to	the following:

       PERL_INC	    = PERL_SRC
       PERL_LIB	    = PERL_SRC/lib
       PERL_ARCHLIB = PERL_SRC/lib
       INST_LIB	    = PERL_LIB
       INST_ARCHLIB = PERL_ARCHLIB

     If	an extension is	being built away from the perl source then MakeMaker
     will leave	PERL_SRC undefined and default to using	the installed copy of
     the perl library. The other variables default to the following:

       PERL_INC	    = $archlibexp/CORE
       PERL_LIB	    = $privlibexp
       PERL_ARCHLIB = $archlibexp
       INST_LIB	    = ./blib/lib
       INST_ARCHLIB = ./blib/arch

     If	perl has not yet been installed	then PERL_SRC can be defined on	the
     command line as shown in the previous section.

     Which architecture	dependent directory?

     If	you don't want to keep the defaults for	the INSTALL* macros, MakeMaker
     helps you to minimize the typing needed: the usual	relationship between
     INSTALLPRIVLIB and	INSTALLARCHLIB is determined by	Configure at perl
     compilation time. MakeMaker supports the user who sets INSTALLPRIVLIB. If
     INSTALLPRIVLIB is set, but	INSTALLARCHLIB not, then MakeMaker defaults
     the latter	to be the same subdirectory of INSTALLPRIVLIB as Configure
     decided for the counterparts in %Config , otherwise it defaults to
     INSTALLPRIVLIB. The same relationship holds for INSTALLSITELIB and
     INSTALLSITEARCH.

     MakeMaker gives you much more freedom than	needed to configure internal
     variables and get different results. It is	worth to mention, that make(1)
     also lets you configure most of the variables that	are used in the
     Makefile. But in the majority of situations this will not be necessary,
     and should	only be	done, if the author of a package recommends it (or you
     know what you're doing).

     Using Attributes and Parameters    [Toc]    [Back]

     The following attributes can be specified as arguments to WriteMakefile()
     or	as NAME=VALUE pairs on the command line:





									Page 6






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     C Ref to array of *.c file	names. Initialised from	a directory scan and
       the values portion of the XS attribute hash. This is not	currently used
       by MakeMaker but	may be handy in	Makefile.PLs.

     CCFLAGS
       String that will	be included in the compiler call command line between
       the arguments INC and OPTIMIZE.

     CONFIG
       Arrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from
       config.sh. MakeMaker will add to	CONFIG the following values anyway:
       ar cc cccdlflags	ccdlflags dlext	dlsrc ld lddlflags ldflags libc
       lib_ext obj_ext ranlib sitelibexp sitearchexp so

     CONFIGURE
       CODE reference. The subroutine should return a hash reference. The hash
       may contain further attributes, e.g. {LIBS => ...}, that	have to	be
       determined by some evaluation method.

     DEFINE
       Something like "-DHAVE_UNISTD_H"

     DIR
       Ref to array of subdirectories containing Makefile.PLs e.g. [ 'sdbm' ]
       in ext/SDBM_File

     DISTNAME
       Your name for distributing the package (by tar file). This defaults to
       NAME above.

     DL_FUNCS
       Hashref of symbol names for routines to be made available as universal
       symbols.	 Each key/value	pair consists of the package name and an array
       of routine names	in that	package.  Used only under AIX (export lists)
       and VMS (linker options)	at present.  The routine names supplied	will
       be expanded in the same way as XSUB names are expanded by the XS()
       macro.  Defaults	to

	 {"$(NAME)" => ["boot_$(NAME)" ] }

       e.g.

	 {"RPC"	=> [qw(	boot_rpcb rpcb_gettime getnetconfigent )],
	  "NetconfigPtr" => [ 'DESTROY'] }


     DL_VARS
       Array of	symbol names for variables to be made available	as universal
       symbols.	 Used only under AIX (export lists) and	VMS (linker options)
       at present.  Defaults to	[].  (e.g. [ qw( Foo_version Foo_numstreams
       Foo_tree	) ])




									Page 7






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     EXCLUDE_EXT
       Array of	extension names	to exclude when	doing a	static build.  This is
       ignored if INCLUDE_EXT is present.  Consult INCLUDE_EXT for more
       details.	 (e.g.	[ qw( Socket POSIX ) ] )

       This attribute may be most useful when specified	as a string on the
       commandline:  perl Makefile.PL EXCLUDE_EXT='Socket Safe'

     EXE_FILES
       Ref to array of executable files. The files will	be copied to the
       INST_SCRIPT directory. Make realclean will delete them from there
       again.

     NO_VC
       In general any generated	Makefile checks	for the	current	version	of
       MakeMaker and the version the Makefile was built	under. If NO_VC	is
       set, the	version	check is neglected. Do not write this into your
       Makefile.PL, use	it interactively instead.

     FIRST_MAKEFILE
       The name	of the Makefile	to be produced.	Defaults to the	contents of
       MAKEFILE, but can be overridden.	This is	used for the second Makefile
       that will be produced for the MAP_TARGET.

     FULLPERL
       Perl binary able	to run this extension.

     H Ref to array of *.h file	names. Similar to C.

     IMPORTS
       IMPORTS is only used on OS/2.

     INC
       Include file dirs eg: "-I/usr/5include -I/path/to/inc"

     INCLUDE_EXT
       Array of	extension names	to be included when doing a static build.
       MakeMaker will normally build with all of the installed extensions when
       doing a static build, and that is usually the desired behavior.	If
       INCLUDE_EXT is present then MakeMaker will build	only with those
       extensions which	are explicitly mentioned. (e.g.	 [ qw( Socket POSIX )
       ])

       It is not necessary to mention DynaLoader or the	current	extension when
       filling in INCLUDE_EXT.	If the INCLUDE_EXT is mentioned	but is empty
       then only DynaLoader and	the current extension will be included in the
       build.

       This attribute may be most useful when specified	as a string on the
       commandline:  perl Makefile.PL INCLUDE_EXT='POSIX Socket	Devel::Peek'





									Page 8






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     INSTALLARCHLIB
       Used by 'make install', which copies files from INST_ARCHLIB to this
       directory if INSTALLDIRS	is set to perl.

     INSTALLBIN
       Directory to install binary files (e.g. tkperl) into.

     INSTALLDIRS
       Determines which	of the two sets	of installation	directories to choose:
       installprivlib and installarchlib versus	installsitelib and
       installsitearch.	The first pair is chosen with INSTALLDIRS=perl,	the
       second with INSTALLDIRS=site. Default is	site.

     INSTALLMAN1DIR
       This directory gets the man pages at 'make install' time. Defaults to
       $Config{installman1dir}.

     INSTALLMAN3DIR
       This directory gets the man pages at 'make install' time. Defaults to
       $Config{installman3dir}.

     INSTALLPRIVLIB
       Used by 'make install', which copies files from INST_LIB	to this
       directory if INSTALLDIRS	is set to perl.

     INSTALLSCRIPT
       Used by 'make install' which copies files from INST_SCRIPT to this
       directory.

     INSTALLSITELIB
       Used by 'make install', which copies files from INST_LIB	to this
       directory if INSTALLDIRS	is set to site (default).

     INSTALLSITEARCH
       Used by 'make install', which copies files from INST_ARCHLIB to this
       directory if INSTALLDIRS	is set to site (default).

     INST_ARCHLIB
       Same as INST_LIB	for architecture dependent files.

     INST_BIN
       Directory to put	real binary files during 'make'. These will be copied
       to INSTALLBIN during 'make install'

     INST_EXE
       Old name	for INST_SCRIPT. Deprecated. Please use	INST_SCRIPT if you
       need to use it.

     INST_LIB
       Directory where we put library files of this extension while building
       it.




									Page 9






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     INST_MAN1DIR
       Directory to hold the man pages at 'make' time

     INST_MAN3DIR
       Directory to hold the man pages at 'make' time

     INST_SCRIPT
       Directory, where	executable files should	be installed during 'make'.
       Defaults	to "./blib/bin", just to have a	dummy location during testing.
       make install will copy the files	in INST_SCRIPT to INSTALLSCRIPT.

     LDFROM
       defaults	to "$(OBJECT)" and is used in the ld command to	specify	what
       files to	link/load from (also see dynamic_lib below for how to specify
       ld flags)

     LIBPERL_A
       The filename of the perllibrary that will be used together with this
       extension. Defaults to libperl.a.

     LIB
       LIB can only be set at perl Makefile.PL time. It	has the	effect of
       setting both INSTALLPRIVLIB and INSTALLSITELIB to that value regardless
       any

     LIBS
       An anonymous array of alternative library specifications	to be searched
       for (in order) until at least one library is found. E.g.

	 'LIBS'	=> ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]

       Mind, that any element of the array contains a complete set of
       arguments for the ld command. So	do not specify

	 'LIBS'	=> ["-ltcl", "-ltk", "-lX11"]

       See ODBM_File/Makefile.PL for an	example, where an array	is needed. If
       you specify a scalar as in

	 'LIBS'	=> "-ltcl -ltk -lX11"

       MakeMaker will turn it into an array with one element.

     LINKTYPE
       'static'	or 'dynamic' (default unless usedl=undef in config.sh).	Should
       only be used to force static linking (also see linkext below).

     MAKEAPERL
       Boolean which tells MakeMaker, that it should include the rules to make
       a perl. This is handled automatically as	a switch by MakeMaker. The
       user normally does not need it.




								       Page 10






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     MAKEFILE
       The name	of the Makefile	to be produced.

     MAN1PODS
       Hashref of pod-containing files.	MakeMaker will default this to all
       EXE_FILES files that include POD	directives. The	files listed here will
       be converted to man pages and installed as was requested	at Configure
       time.

     MAN3PODS
       Hashref of .pm and .pod files. MakeMaker	will default this to all
	.pod and any .pm files that include POD	directives. The	files listed
       here will be converted to man pages and installed as was	requested at
       Configure time.

     MAP_TARGET
       If it is	intended, that a new perl binary be produced, this variable
       may hold	a name for that	binary.	Defaults to perl

     MYEXTLIB
       If the extension	links to a library that	it builds set this to the name
       of the library (see SDBM_File)

     NAME
       Perl module name	for this extension (DBD::Oracle). This will default to
       the directory name but should be	explicitly defined in the Makefile.PL.

     NEEDS_LINKING
       MakeMaker will figure out, if an	extension contains linkable code
       anywhere	down the directory tree, and will set this variable
       accordingly, but	you can	speed it up a very little bit, if you define
       this boolean variable yourself.

     NOECHO
       Defaults	to @. By setting it to an empty	string you can generate	a
       Makefile	that echos all commands. Mainly	used in	debugging MakeMaker
       itself.

     NORECURS
       Boolean.	 Attribute to inhibit descending into subdirectories.

     OBJECT
       List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a
       long string containing all object files,	e.g. "tkpBind.o	tkpButton.o
       tkpCanvas.o"

     OPTIMIZE
       Defaults	to -O. Set it to -g to turn debugging on. The flag is passed
       to subdirectory makes.






								       Page 11






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     PERL
       Perl binary for tasks that can be done by miniperl

     PERLMAINCC
       The call	to the program that is able to compile perlmain.c. Defaults to
       $(CC).

     PERL_ARCHLIB
       Same as above for architecture dependent	files

     PERL_LIB
       Directory containing the	Perl library to	use.

     PERL_SRC
       Directory containing the	Perl source code (use of this should be
       avoided,	it may be undefined)

     PL_FILES
       Ref to hash of files to be processed as perl programs. MakeMaker	will
       default to any found *.PL file (except Makefile.PL) being keys and the
       basename	of the file being the value. E.g.

	 {'foobar.PL' => 'foobar'}

       The *.PL	files are expected to produce output to	the target files
       themselves.

     PM
       Hashref of .pm files and	*.pl files to be installed.  e.g.

	 {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}

       By default this will include *.pm and *.pl. If a	lib directory exists
       and is not listed in DIR	(above)	then any *.pm and *.pl files it
       contains	will also be included by default.  Defining PM in the
       Makefile.PL will	override PMLIBDIRS.

     PMLIBDIRS
       Ref to array of subdirectories containing library files.	 Defaults to [
       'lib', $(BASEEXT) ]. The	directories will be scanned and	any files they
       contain will be installed in the	corresponding location in the library.
       A libscan() method can be used to alter the behaviour.  Defining	PM in
       the Makefile.PL will override PMLIBDIRS.

     PREFIX
       Can be used to set the three INSTALL* attributes	in one go (except for
       probably	INSTALLMAN1DIR,	if it is not below PREFIX according to
       %Config).  They will have PREFIX	as a common directory node and will
       branch from that	node into lib/,	lib/ARCHNAME or	whatever Configure
       decided at the build time of your perl (unless you override one of
       them, of	course).




								       Page 12






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     PREREQ_PM
       Hashref:	Names of modules that need to be available to run this
       extension (e.g. Fcntl for SDBM_File) are	the keys of the	hash and the
       desired version is the value. If	the required version number is 0, we
       only check if any version is installed already.

     SKIP
       Arryref.	E.g. [qw(name1 name2)] skip (do	not write) sections of the
       Makefile. Caution! Do not use the SKIP attribute	for the	neglectible
       speedup.	It may seriously damage	the resulting Makefile.	Only use it,
       if you really need it.

     TYPEMAPS
       Ref to array of typemap file names.  Use	this when the typemaps are in
       some directory other than the current directory or when they are	not
       named typemap.  The last	typemap	in the list takes precedence.  A
       typemap in the current directory	has highest precedence,	even if	it
       isn't listed in TYPEMAPS.  The default system typemap has lowest
       precedence.

     VERSION
       Your version number for distributing the	package.  This defaults	to
       0.1.

     VERSION_FROM
       Instead of specifying the VERSION in the	Makefile.PL you	can let
       MakeMaker parse a file to determine the version number. The parsing
       routine requires	that the file named by VERSION_FROM contains one
       single line to compute the version number. The first line in the	file
       that contains the regular expression

	   /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/

       will be evaluated with eval() and the value of the named	variable after
       the eval() will be assigned to the VERSION attribute of the MakeMaker
       object. The following lines will	be parsed o.k.:

	   $VERSION = '1.00';
	   *VERSION = \'1.01';
	   ( $VERSION )	= '$Revision: 1.216 $ '	=~ /\$Revision:\s+([^\s]+)/;
	   $FOO::VERSION = '1.10';
	   *FOO::VERSION = \'1.11';

       but these will fail:

	   my $VERSION = '1.01';
	   local $VERSION = '1.02';
	   local $FOO::VERSION = '1.30';

       The file	named in VERSION_FROM is not added as a	dependency to
       Makefile. This is not really correct, but it would be a major pain
       during development to have to rewrite the Makefile for any smallish



								       Page 13






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



       change in that file. If you want	to make	sure that the Makefile
       contains	the correct VERSION macro after	any change of the file,	you
       would have to do	something like

	   depend => { Makefile	=> '$(VERSION_FROM)' }

       See attribute depend below.

     XS
       Hashref of .xs files. MakeMaker will default this.  e.g.

	 {'name_of_file.xs' => 'name_of_file.c'}

       The .c files will automatically be included in the list of files
       deleted by a make clean.

     XSOPT
       String of options to pass to xsubpp.  This might	include	-C++ or
       -extern.	 Do not	include	typemaps here; the TYPEMAP parameter exists
       for that	purpose.

     XSPROTOARG
       May be set to an	empty string, which is identical to -prototypes, or
       -noprototypes. See the xsubpp documentation for details.	MakeMaker
       defaults	to the empty string.

     XS_VERSION
       Your version number for the .xs file of this package.  This defaults to
       the value of the	VERSION	attribute.

     Additional	lowercase attributes

     can be used to pass parameters to the methods which implement that	part
     of	the Makefile.

     clean

	 {FILES	=> "*.xyz foo"}


     depend

	 {ANY_TARGET =>	ANY_DEPENDECY, ...}


     dist

	 {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => 'gz',
	 SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
	 ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }

       If you specify COMPRESS,	then SUFFIX should also	be altered, as it is



								       Page 14






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



       needed to tell make the target file of the compression. Setting DIST_CP
       to ln can be useful, if you need	to preserve the	timestamps on your
       files. DIST_CP can take the values 'cp',	which copies the file, 'ln',
       which links the file, and 'best'	which copies symbolic links and	links
       the rest. Default is 'best'.

     dynamic_lib

	 {ARMAYBE => 'ar', OTHERLDFLAGS	=> '...', INST_DYNAMIC_DEP => '...'}


     installpm
       Deprecated as of	MakeMaker 5.23.	See the	pm_to_blib entry in the
       ExtUtils::MM_Unix manpage.

     linkext

	 {LINKTYPE => 'static',	'dynamic' or ''}

       NB: Extensions that have	nothing	but *.pm files had to say

	 {LINKTYPE => ''}

       with Pre-5.0 MakeMakers.	Since version 5.00 of MakeMaker	such a line
       can be deleted safely. MakeMaker	recognizes, when there's nothing to be
       linked.

     macro

	 {ANY_MACRO => ANY_VALUE, ...}


     realclean

	 {FILES	=> '$(INST_ARCHAUTODIR)/*.xyz'}


     tool_autosplit

	 {MAXLEN =E<gt>	8}


     Overriding	MakeMaker Methods

     If	you cannot achieve the desired Makefile	behaviour by specifying
     attributes	you may	define private subroutines in the Makefile.PL.	Each
     subroutines returns the text it wishes to have written to the Makefile.
     To	override a section of the Makefile you can either say:

	     sub MY::c_o { "new	literal	text" }

     or	you can	edit the default by saying something like:



								       Page 15






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



	     sub MY::c_o {
		 package MY; # so that "SUPER" works right
		 my $inherited = shift->SUPER::c_o(@_);
		 $inherited =~ s/old text/new text/;
		 $inherited;
	     }

     If	you running experiments	with embedding perl as a library into other
     applications, you might find MakeMaker not	sufficient. You'd better have
     a look at ExtUtils::embed which is	a collection of	utilities for
     embedding.

     If	you still need a different solution, try to develop another
     subroutine, that fits your	needs and submit the diffs to perl5-
     porters@nicoh.com or comp.lang.perl.misc as appropriate.

     For a complete description	of all MakeMaker methods see the
     ExtUtils::MM_Unix manpage.

     Here is a simple example of how to	add a new target to the	generated
     Makefile:

	 sub MY::postamble {
	     '
	 $(MYEXTLIB): sdbm/Makefile
		 cd sdbm && $(MAKE) all
	 ';
	 }


     Hintsfile support    [Toc]    [Back]

     MakeMaker.pm uses the architecture	specific information from Config.pm.
     In	addition it evaluates architecture specific hints files	in a hints/
     directory.	The hints files	are expected to	be named like their
     counterparts in PERL_SRC/hints, but with an .pl file name extension (eg.
     next_3_2.pl). They	are simply evaled by MakeMaker within the
     WriteMakefile() subroutine, and can be used to execute commands as	well
     as	to include special variables. The rules	which hintsfile	is chosen are
     the same as in Configure.

     The hintsfile is eval()ed immediately after the arguments given to
     WriteMakefile are stuffed into a hash reference $self but before this
     reference becomes blessed.	So if you want to do the equivalent to
     override or create	an attribute you would say something like

	 $self->{LIBS} = ['-ldbm -lucb -lc'];








								       Page 16






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



     Distribution Support    [Toc]    [Back]

     For authors of extensions MakeMaker provides several Makefile targets.
     Most of the support comes from the	ExtUtils::Manifest module, where
     additional	documentation can be found.

     make distcheck
	 reports which files are below the build directory but not in the
	 MANIFEST file and vice	versa. (See ExtUtils::Manifest::fullcheck()
	 for details)

     make skipcheck
	 reports which files are skipped due to	the entries in the
	 MANIFEST.SKIP file (See ExtUtils::Manifest::skipcheck() for details)

     make distclean
	 does a	realclean first	and then the distcheck.	Note that this is not
	 needed	to build a new distribution as long as you are sure, that the
	 MANIFEST file is ok.

     make manifest
	 rewrites the MANIFEST file, adding all	remaining files	found (See
	 ExtUtils::Manifest::mkmanifest() for details)

     make distdir
	 Copies	all the	files that are in the MANIFEST file to a newly created
	 directory with	the name $(DISTNAME)-$(VERSION). If that directory
	 exists, it will be removed first.

     make disttest
	 Makes a distdir first,	and runs a perl	Makefile.PL, a make, and a
	 make test in that directory.

     make tardist
	 First does a distdir. Then a command $(PREOP) which defaults to a
	 null command, followed	by $(TOUNIX), which defaults to	a null command
	 under UNIX, and will convert files in distribution directory to UNIX
	 format	otherwise. Next	it runs	tar on that directory into a tarfile
	 and deletes the directory. Finishes with a command $(POSTOP) which
	 defaults to a null command.

     make dist
	 Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.

     make uutardist
	 Runs a	tardist	first and uuencodes the	tarfile.

     make shdist
	 First does a distdir. Then a command $(PREOP) which defaults to a
	 null command. Next it runs shar on that directory into	a sharfile and
	 deletes the intermediate directory again. Finishes with a command
	 $(POSTOP) which defaults to a null command.  Note: For	shdist to work



								       Page 17






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)



	 properly a shar program that can handle directories is	mandatory.

     make zipdist
	 First does a distdir. Then a command $(PREOP) which defaults to a
	 null command. Runs $(ZIP) $(ZIPFLAGS) on that directory into a
	 zipfile. Then deletes that directory. Finishes	with a command
	 $(POSTOP) which defaults to a null command.

     make ci
	 Does a	$(CI) and a $(RCS_LABEL) on all	files in the MANIFEST file.

     Customization of the dist targets can be done by specifying a hash
     reference to the dist attribute of	the WriteMakefile call.	The following
     parameters	are recognized:

	 CI	      ('ci -u')
	 COMPRESS     ('compress')
	 POSTOP	      ('@ :')
	 PREOP	      ('@ :')
	 TO_UNIX      (depends on the system)
	 RCS_LABEL    ('rcs -q -Nv$(VERSION_SYM):')
	 SHAR	      ('shar')
	 SUFFIX	      ('Z')
	 TAR	      ('tar')
	 TARFLAGS     ('cvf')
	 ZIP	      ('zip')
	 ZIPFLAGS     ('-r')

     An	example:

	 WriteMakefile(	'dist' => { COMPRESS=>"gzip", SUFFIX=>"gz" })

SEE ALSO    [Toc]    [Back]

      
      
     ExtUtils::MM_Unix,	ExtUtils::Manifest, ExtUtils::testlib,
     ExtUtils::Install,	ExtUtils::embed

AUTHORS    [Toc]    [Back]

     Andy Dougherty <doughera@lafcol.lafayette.edu>, Andreas Koenig
     <A.Koenig@franz.ww.TU-Berlin.DE>, Tim Bunce <Tim.Bunce@ig.co.uk>.	VMS
     support by	Charles	Bailey <bailey@genetics.upenn.edu>.  OS/2 support by
     Ilya Zakharevich <ilya@math.ohio-state.edu>.  Contact the makemaker
     mailing list makemaker@franz.ww.tu-berlin.de, if you have any
     questions.











								       Page 18






ExtUtils::MakeMaker(3)					ExtUtils::MakeMaker(3)


								       PPPPaaaaggggeeee 11119999
[ Back ]
 Similar pages
Name OS Title
automake Linux automatically create Makefile.in's from Makefile.am's
mmkmf IRIX create a Makefile from an Imakefile
xmkmf Tru64 create a Makefile from an Imakefile
mkmf HP-UX make a makefile
mkdep OpenBSD construct Makefile dependency list
ftnmgen IRIX Invokes the Fortran makefile generator
mkdep FreeBSD construct Makefile dependency list
bsd.regress.mk OpenBSD regression test master Makefile fragment
bsd.port.mk OpenBSD ports tree master Makefile fragment
style.Makefile FreeBSD FreeBSD Makefile file style guide
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service