¦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 Yn¸Õ¹Ï§ïÅܳ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·QnÂà´«©Ò¦³¤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)