Making patches -------------- This you need to do when your tarballs need tweaking after they're unpacked. Here's a good link on making patches: http://www.cpqlinux.com/patch.html Example: making a patch for boost 1.36.0:: sudo /opt/i3/ports/bin/port -vd extract boost_1.36.0 DEBUG: Found port in file:///opt/i3/ports/var/db/dports/sources/rsync.code.icecube.wisc.edu_icecube-tools-ports/devel/boost_1.36.0 DEBUG: Changing to port directory: /opt/i3/ports/var/db/dports/sources/rsync.code.icecube.wisc.edu_icecube-tools-ports/devel/boost_1.36.0 DEBUG: Requested variant linux is not provided by port boost_1.36.0. DEBUG: Requested variant i686 is not provided by port boost_1.36.0. DEBUG: Skipping com.apple.main (boost_1.36.0) since this port is already installed DEBUG: Skipping com.apple.fetch (boost_1.36.0) since this port is already installed DEBUG: Skipping com.apple.checksum (boost_1.36.0) since this port is already installed DEBUG: Skipping com.apple.extract (boost_1.36.0) since this port is already installed troy@uranium:~/chasebug % sudo /opt/i3/ports/bin/port -vdf extract boost_1.36.0 DEBUG: Found port in file:///opt/i3/ports/var/db/dports/sources/rsync.code.icecube.wisc.edu_icecube-tools-ports/devel/boost_1.36.0 DEBUG: Changing to port directory: /opt/i3/ports/var/db/dports/sources/rsync.code.icecube.wisc.edu_icecube-tools-ports/devel/boost_1.36.0 DEBUG: Requested variant linux is not provided by port boost_1.36.0. DEBUG: Requested variant i686 is not provided by port boost_1.36.0. DEBUG: Executing com.apple.main (boost_1.36.0) ---> Fetching boost_1.36.0 DEBUG: Executing com.apple.fetch (boost_1.36.0) ---> Verifying checksum(s) for boost_1.36.0 DEBUG: Executing com.apple.checksum (boost_1.36.0) ---> Checksumming boost_1_36_0.tar.gz DEBUG: Correct (md5) checksum for boost_1_36_0.tar.gz ---> Extracting boost_1.36.0 DEBUG: Executing com.apple.extract (boost_1.36.0) ---> Extracting boost_1_36_0.tar.gz DEBUG: setting option extract.args to /opt/i3/ports/var/db/dports/distfiles/boost_1.36.0/boost_1_36_0.tar.gz DEBUG: Assembled command: 'cd "/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work" && gzip -dc /opt/i3/ports/var/db/dports/distfiles/boost_1.36.0/boost_1_36_0.tar.gz | tar --no-same-owner -xf -' You can see the path it was unpacked to, above. It is the ``-vd`` flags that get you all of this detailed output. :: % cd /opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work troy@uranium:/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work % ls boost_1.36.0/ troy@uranium:/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work % cd boost_1.36.0/libs/serialization troy@uranium:/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work/boost_1.36.0/libs/serialization % ls CMakeLists.txt build/ doc/ example/ index.html module.cmake performance/ src/ test/ util/ vc7ide/ troy@uranium:/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work/boost_1.36.0/libs/serialization % cd src troy@uranium:/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work/boost_1.36.0/libs/serialization/src % ls CMakeLists.txt basic_pointer_iserializer.cpp basic_text_woprimitive.cpp binary_woarchive.cpp polymorphic_oarchive.cpp utf8_codecvt_facet.cpp xml_wiarchive.cpp basic_archive.cpp basic_pointer_oserializer.cpp basic_xml_archive.cpp codecvt_null.cpp stl_port.cpp void_cast.cpp xml_woarchive.cpp basic_iarchive.cpp basic_serializer_map.cpp basic_xml_grammar.ipp extended_type_info.cpp text_iarchive.cpp xml_grammar.cpp basic_iserializer.cpp basic_text_iprimitive.cpp binary_iarchive.cpp extended_type_info_no_rtti.cpp text_oarchive.cpp xml_iarchive.cpp basic_oarchive.cpp basic_text_oprimitive.cpp binary_oarchive.cpp extended_type_info_typeid.cpp text_wiarchive.cpp xml_oarchive.cpp basic_oserializer.cpp basic_text_wiprimitive.cpp binary_wiarchive.cpp polymorphic_iarchive.cpp text_woarchive.cpp xml_wgrammar.cpp troy@uranium:/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work/boost_1.36.0/libs/serialization/src % copy the files you want to modify to *filename*.orig and modify the non-.orig version:: cp extended_type_info.cpp extended_type_info.cpp.orig emacs extended_type_info.cpp Then make your patchfile, putting the .orig first:: diff -Naur extended_type_info.cpp.org extended_type_info.cpp > /tmp/extended_type_info_patch The patchfile might look like this:: % cat /tmp/extended_type_info_patch --- extended_type_info.cpp.orig 2008-10-09 10:07:17.000000000 -0400 +++ extended_type_info.cpp 2008-10-09 10:09:25.000000000 -0400 @@ -58,7 +58,19 @@ } }; -typedef std::multiset ktmap; +struct ktmap : + public std::multiset +{ + static bool m_destroyed; + static bool is_destroyed(){ + return m_destroyed; + } + ~ktmap(){ + m_destroyed = true; + } +}; + +bool ktmap::m_destroyed = false; Modify the paths in the patchfile to point to the same file (the non-.orig version) and make the path relative to the root of the unpacked tarball:: --- libs/serialization/src/extended_type_info.cpp 2008-10-09 10:07:17.000000000 -0400 +++ libs/serialization/src/extended_type_info.cpp 2008-10-09 10:09:25.000000000 -0400 (etc) Copy the patchfile to the ``files/`` directory of the port and add them to the ``Portfile``:: cp /tmp/extended_type_info_patch /path/to/ports/devel/boost_1.36.0/files emacs /path/to/ports/checkout/devel/boost_1.36.0/Portfile The Portfile line would look like:: patchfiles extended_type_info_patch Increment the **revision** in the portfile:: revision 7 When you've checked everything in, test again on your local copy. First sync your ports:: port -vd sync You should see the update go by:: devel/boost_1.36.0/ devel/boost_1.36.0/Portfile devel/boost_1.36.0/files/ devel/boost_1.36.0/files/extended_type_info_patch devel/boost_1.36.0/files/extended_type_info_typeid_patch Now have ports unpack and patch the file:: % sudo /opt/i3/ports/bin/port -vd patch boost_1.36.0 DEBUG: Found port in file:///opt/i3/ports/var/db/dports/sources/rsync.code.icecube.wisc.edu_icecube-tools-ports/devel/boost_1.36.0 DEBUG: Changing to port directory: /opt/i3/ports/var/db/dports/sources/rsync.code.icecube.wisc.edu_icecube-tools-ports/devel/boost_1.36.0 DEBUG: Requested variant linux is not provided by port boost_1.36.0. DEBUG: Requested variant i686 is not provided by port boost_1.36.0. DEBUG: Skipping completed com.apple.main (boost_1.36.0) DEBUG: Skipping completed com.apple.fetch (boost_1.36.0) DEBUG: Skipping completed com.apple.checksum (boost_1.36.0) ---> Extracting boost_1.36.0 DEBUG: Executing com.apple.extract (boost_1.36.0) ---> Extracting boost_1_36_0.tar.gz DEBUG: setting option extract.args to /opt/i3/ports/var/db/dports/distfiles/boost_1.36.0/boost_1_36_0.tar.gz DEBUG: Assembled command: 'cd "/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work" && gzip -dc /opt/i3/ports/var/db/dports/distfiles/boost_1.36.0/boost_1_36_0.tar.gz | tar --no-same-owner -xf -' DEBUG: Executing com.apple.patch (boost_1.36.0) ---> Applying patches to boost_1.36.0 ---> Applying /opt/i3/ports/var/db/dports/sources/rsync.code.icecube.wisc.edu_icecube-tools-ports/devel/boost_1.36.0/files/extended_type_info_patch DEBUG: Assembled command: 'cd "/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work/boost_1.36.0" && patch -p0' patching file libs/serialization/src/extended_type_info.cpp ---> Applying /opt/i3/ports/var/db/dports/sources/rsync.code.icecube.wisc.edu_icecube-tools-ports/devel/boost_1.36.0/files/extended_type_info_typeid_patch DEBUG: Assembled command: 'cd "/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work/boost_1.36.0" && patch -p0' patching file libs/serialization/src/extended_type_info_typeid.cpp Verify that there are no errors from the patch program. Using the paths in the output above, go have a look at your patched files:: % cat "/opt/i3/ports/var/db/dports/build/file._opt_i3_ports_var_db_dports_sources_rsync.code.icecube.wisc.edu_icecube-tools-ports_devel_boost_1.36.0/work/boost_1.36.0/libs/serialization/src/extended_type_info.cpp" (verify that the thing looks like you want it) Then you can just install your port:: % port -vd install boost_1.36.0