4.4 Patching

¦b port ªº·Ç³Æ¹Lµ{¤¤¡A·s¼W©ÎÅܧó¹LªºÀɮסA ¥i¥H§Q¥Î diff(1) ±N³o¨ÇÅܰʦC¥X¡A ¥H«K«áÄòÅý patch(1) ¨Ï¥Î¡C ©Ò¦³§A·Q®M¥Îªº patch ³£À³¸Ó©R¦W¬° patch-*¡A¨ä¤¤ * ªí¥Ü­n patch Àɮתº¸ô®|¤ÎÀɦW¦WºÙ¡A ¨Ò¦p patch-Imakefile ©Î patch-src-config.h¡C ³o¨ÇÀɮ׳£À³¸ÓÀx¦s¦b PATCHDIR (³q±`¬O files/¡A©ñ¦b¨ä¤ºªºÀɮ׳£·|¦Û°Ê³Q®M¥Î¡C ©Ò¦³ patch Àɸô®|³£¬O¬Û¹ï©ó WRKSRC (³q±`·|±N port ªº tarball ¸ÑÀ£¨ì¸Ì­±¡A port ªº«Ø¸m¤]·|¦b³o¸Ì§¹¦¨)¡C ¬°¤F¯àÅý­×¥¿©M§ó·s§ó¶¶§Q¡A§AÀ³¸ÓÁ×§K¦h­Ó patch ­×¥¿¦P¤@­ÓÀÉ®× (Á|¨Ò¨Ó»¡¡Apatch-file ©M patch-file2 ¦P®É§ó°Ê WRKSRC/foobar.c)¡C

½Ð¥u¨Ï¥Î [-+._a-zA-Z0-9] ³o¨Ç¦r¤¸¨Ó©R¦W patch ÀÉ¡A¤£­n¨Ï¥Î³o¨Ç¦r¤¸¥H¥~ªº¦r¤¸¡C ¤d¸U¤£­n±N§Aªº patch ÀÉ©R¦W¦¨ patch-aa ©Î¬O patch-ab µ¥¦WºÙ¡A ½Ð¨Ï¥Î¸ô®|©M¦WºÙ¬ÛÃöªº©R¦W¡C

¤£­n±N RCS ¦r¦ê©ñ¶i§Aªº patch ÀÉ¡CCVS ·|¦b³o¨ÇÀÉ®×°e¤J ports tree ªº®É­Ô§Ë¶ÃÀɮפº®e¡A¦Ó¥B¦b±N¥¦­Ì­«·s check out ¥X¨Ó«á¡A·|¦]Àɮפº®eªº®t²§³y¦¨ patch ¥¢±Ñ¡C RCS ¦r¦ê¬O¥H¿ú¦r¸¹ ($) ¬A°_¨Óªº¡A ³q±`¥H $Id ©Î $RCS ¬°¶}ÀY¡C

§A¥i¥H¨Ï¥Î diff(1) ·f°t recurse (-r) ¿ï¶µ ¨Ó²£¥Í patch ÀÉ¡A¦ý½Ð¦A¦¸À˵ø²£¥Í¥Xªº patch ÀÉ¡A½T«O§A¨S¦³²£¥Í ¥ô¦ó¤£¥²­nªº©U§£¸ê°T¦b¸Ì­±¡C¯S§O¬O¹ï¨º¨Ç¸g¥Ñ Imake ©Î GNU configure ©Ò²£¥Íªº Makefile Àɲ£¥Í patch¡A ³£¬O¤£¥²­nªº¡A³oÃþªº patch Àɳ£À³¸Ó³Q§R°£¡C°²¦p§A¥²¶·³z¹L­×§ï configure.in ¦A°õ¦æ autoconf ¨Ó­«·s²£¥Í configure¡A¤£­n¹ï configure ²£¥Í patch ÀÉ (³o©¹©¹·|ªø¦¨¼Æ¤d¦æ¡I)¡F ½Ð©w¸q USE_AUTOTOOLS=autoconf:261 ¨Ã¹ï configure.in ²£¥Í patch ÀÉ¡C

½Ð¾¨¶q¤£­n¹ïµL¥Îªº whitespace §@­×§ï¡A¦]¬°¦b Open Source ¬É¦U­Ó project ³£·|¨Ï¥Î«Ü¦h¬Û¦Pªº code base¡A³o¨Ç¥i¯à«o¬O±Ä¥Î¤£¦Pªº½s±Æ¤è¦¡ ¡Bcoding style¡C ­Y­n¸Õ¹Ï§ïÅܳo¨Ç½s±Æ­·®æªº¸Ü¡A½Ð¤p¤ß¡G ³o¨Ç¥u·|¬O®{³ÒµL¥\ªº§ó§ï¡C ¦¹¥~¤£¶È·|³y¦¨ CVS repository ªÅ¶¡®ö¶O¡A ¤]·|Åý¤HÃø¥H§ä¥X¯u¥¿°ÝÃDÄpµ²©Ò¦b¡A¥H¤Î¤À¿ë¤£¥X³o¬q patch ¨ì©³¦b§@¤°»ò ¡C

°²¦p§A¥²¶·§R°£¤@­ÓÀɮסA¨º»ò§A¥i¥H¦b post-extract ¶¥¬q°µ³o¥ó¨Æ¡A ¦Ó¤£¬O¦b patch ¶¥¬q¡C

§A¥i¥Hª½±µ¦b port ªº Makefile ¤¤§¹¦¨Â²³æªº¸m´«¤u§@¡A¥u»Ý¨Ï¥Î sed(1) ªº in-place mode §Y¥i¡C³o¦b¥u»Ý patch ¤@­ÓÅܼƪº­È®É¬Û·í¦³¥Î¡C ¨Ò¦p¡G

post-patch:
        @${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README
        @${REINPLACE_CMD} -e 's|-pthread|${PTHREAD_LIBS}|' ${WRKSRC}/configure

¦b²¾´Ó³nÅé®É¡A¯S§O¬O¨º¨Ç¦b Windows® ¥­¥x¶}µoªº³nÅé¡A ®É±`·|¹J¨ì¤@ºØ±¡ªp¡A´N¬O¦b¤j³¡¥÷ªº source file ¤¤¡A ¨Ï¥Î CR/LF °µ¬°Â_¦æ¡C³o·|¼vÅT©¹«áªº patching¡Bcompiler warnings¡B¥H¤Î scripts execution (§ä¤£¨ì /bin/sh^M ªº±¡ªp) µ¥¡C ¬°¤F§Ö³tÂà´« CR/LF ¬° LF¡A¥i¥H§â USE_DOS2UNIX=yes ¥[¨ì port ªº Makefile Àɤ¤¡C §A¤]¥i¥H³]©w¦¨¥u°w¹ï«ü©wªºÀÉ®×°µÂà´«¡G

USE_DOS2UNIX=    util.c util.h

­Y·Q­nÂà´«©Ò¦³¤l¥Ø¿ý¤ºªº¬YÃþ§OÀɮסA¥i¥H¨Ï¥Î DOS2UNIX_REGEX¡C ¥¦ªº°Ñ¼Æ¬O find ¬Û®eªº¥¿³Wªí¹F¦¡¡C ¬ÛÃö®æ¦¡¥i°Ñ¾\ re_format(7)¡C ¹ï©ó©Ò«ü©w°ÆÀɦWªºÀɮפ§Âà´«¦Ó¨¥¡A³o¬Û·í¦n¥Î¡A Á|¨Ò¨Ó»¡¡A¥u°Ê©Ò¦³­ì©l½X³¡¤À¦Ó¤£§ï binary ÀɮסG

USE_DOS2UNIX=    yes
DOS2UNIX_REGEX=  .*\.(c|cpp|h)
For questions about the FreeBSD ports system, e-mail <ports@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.