Diff for /wikisrc/pkgsrc/intro_to_packaging.mdwn between versions 1.3 and 1.10

version 1.3, 2014/07/08 14:44:38 version 1.10, 2021/11/02 13:53:21
Line 13  listed below: Line 13  listed below:
 ## pkgsrc tree  ## pkgsrc tree
   
 You should have a copy of the pkgsrc tree sitting somewhere on your  You should have a copy of the pkgsrc tree sitting somewhere on your
 disk, already bootstrapped, see this [blog  disk, already bootstrapped.
 post](http://saveosx.org/pkgsrc-bootstrap/) on how to do this.  
   
 The tree contains a `Makefile`, a `README`, distfiles, packages,  The tree contains a `Makefile`, a `README`, distfiles, packages,
 category directories containing the ports, the bootstrap directory  category directories containing the ports, the bootstrap directory
 and some documentation.  and some documentation.
Line 92  long ago in pkgsrc-wip Line 90  long ago in pkgsrc-wip
   
 Makefile:  Makefile:
                   
 {% highlight make %}  [[!format makefile """
 # [[!paste id=rcsid1]][[!paste id=rcsid2]]  # [[!paste id=rcsid1]][[!paste id=rcsid2]]
   
 PKGNAME=      osxinfo-0.1  PKGNAME=      osxinfo-0.1
Line 113  WRKSRC= ${WRKDIR}/osxinfo-${GHCOMMIT} Line 111  WRKSRC= ${WRKDIR}/osxinfo-${GHCOMMIT}
   
 .include "../../databases/sqlite3/buildlink3.mk"  .include "../../databases/sqlite3/buildlink3.mk"
 .include "../../mk/bsd.pkg.mk"  .include "../../mk/bsd.pkg.mk"
 {% endhighlight %}  """]]
   
 DESCR:  DESCR:
                   
         Small and fast Mac OS X info program written in C          Small and fast Mac OS X info program written in C.
         by Youri Mouton.  
   
   
 PLIST:  PLIST:
Line 200  these targets, like Line 197  these targets, like
 The framework uses an `mk.conf` file, usually found in /etc. Here's  The framework uses an `mk.conf` file, usually found in /etc. Here's
 how mine looks:  how mine looks:
   
 {% highlight make %}  [[!format makefile """
 # Tue Oct 15 21:21:46 CEST 2013  # Tue Oct 15 21:21:46 CEST 2013
   
 .ifdef BSD_PKG_MK          # begin pkgsrc settings  .ifdef BSD_PKG_MK          # begin pkgsrc settings
Line 232  PKG_DEVELOPER=             yes Line 229  PKG_DEVELOPER=             yes
 SIGN_PACKAGES=             gpg  SIGN_PACKAGES=             gpg
 PKG_DEFAULT_OPTIONS+=      -pulseaudio -x264 -imlib2-amd64 -dconf  PKG_DEFAULT_OPTIONS+=      -pulseaudio -x264 -imlib2-amd64 -dconf
 .endif                     # end pkgsrc settings  .endif                     # end pkgsrc settings
 {% endhighlight %}  """]]
   
 - I use `DISTDIR`, `PACKAGES`, `WRKOBJDIR` to move distfiles,  - I use `DISTDIR`, `PACKAGES`, `WRKOBJDIR` to move distfiles,
   packages and source files somewhere else to keep my pkgsrc tree    packages and source files somewhere else to keep my pkgsrc tree
Line 269  PKG_DEFAULT_OPTIONS+=      -pulseaudio - Line 266  PKG_DEFAULT_OPTIONS+=      -pulseaudio -
   I disabled a few options so less ports would break, pulseaudio    I disabled a few options so less ports would break, pulseaudio
   doesn't build on Mac OS X for example, neither do x264, dconf    doesn't build on Mac OS X for example, neither do x264, dconf
   
 Keep in mind that there are many other available options documented  Keep in mind that there are many other available options.
 in the official pkgsrc guide.  
   
   
 ## creating a simple port  ## creating a simple port
Line 316  on the program's homepage. Line 312  on the program's homepage.
 Here's how they look like at the moment:  Here's how they look like at the moment:
                   
 Makefile:  Makefile:
 {% highlight make %}  [[!format makefile """
 # [[!paste id=rcsid1]][[!paste id=rcsid2]]  # [[!paste id=rcsid1]][[!paste id=rcsid2]]
   
 DISTNAME=       2bwm-0.1  DISTNAME=       2bwm-0.1
Line 329  COMMENT=        Fast floating WM written Line 325  COMMENT=        Fast floating WM written
 LICENSE=        isc  LICENSE=        isc
   
 .include "../../mk/bsd.pkg.mk"  .include "../../mk/bsd.pkg.mk"
 {% endhighlight %}  """]]
   
 distinfo:  distinfo:
   
Line 399  in our Makefile. Line 395  in our Makefile.
 Clean, build again, and add more dependencies until it passes the  Clean, build again, and add more dependencies until it passes the
 build stage. Here's how my Makefile ends up looking like:  build stage. Here's how my Makefile ends up looking like:
   
 {% highlight make %}  [[!format makefile """
 # [[!paste id=rcsid1]][[!paste id=rcsid2]]  # [[!paste id=rcsid1]][[!paste id=rcsid2]]
   
 DISTNAME=       2bwm-0.1  DISTNAME=       2bwm-0.1
Line 416  LICENSE=        isc Line 412  LICENSE=        isc
 .include "../../x11/xcb-util-keysyms/buildlink3.mk"  .include "../../x11/xcb-util-keysyms/buildlink3.mk"
 .include "../../x11/xcb-util/buildlink3.mk"  .include "../../x11/xcb-util/buildlink3.mk"
 .include "../../mk/bsd.pkg.mk"  .include "../../mk/bsd.pkg.mk"
 {% endhighlight %}  """]]
   
   
 #### install phase  #### install phase
Line 456  how 2bwm installs: Line 452  how 2bwm installs:
   
 From 2bwm's Makefile:  From 2bwm's Makefile:
   
 {% highlight make %}  [[!format makefile """
 install: $(TARGETS)  install: $(TARGETS)
         test -d $(DESTDIR)$(PREFIX)/bin || mkdir -p $(DESTDIR)$(PREFIX)/bin          test -d $(DESTDIR)$(PREFIX)/bin || mkdir -p $(DESTDIR)$(PREFIX)/bin
         install -pm 755 2bwm $(DESTDIR)$(PREFIX)/bin          install -pm 755 2bwm $(DESTDIR)$(PREFIX)/bin
Line 464  install: $(TARGETS) Line 460  install: $(TARGETS)
         test -d $(DESTDIR)$(MANPREFIX)/man1 || mkdir -p $(DESTDIR)$(MANPREFIX)/man1          test -d $(DESTDIR)$(MANPREFIX)/man1 || mkdir -p $(DESTDIR)$(MANPREFIX)/man1
         install -pm 644 2bwm.man $(DESTDIR)$(MANPREFIX)/man1/2bwm.1          install -pm 644 2bwm.man $(DESTDIR)$(MANPREFIX)/man1/2bwm.1
         install -pm 644 hidden.man $(DESTDIR)$(MANPREFIX)/man1/hidden.1          install -pm 644 hidden.man $(DESTDIR)$(MANPREFIX)/man1/hidden.1
 {% endhighlight %}  """]]
   
 This looks fine since it installs in a `DESTDIR`/`PREFIX` but it sets  This looks fine since it installs in a `DESTDIR`/`PREFIX` but it sets
   
Line 554  You should be able to fix the prefix err Line 550  You should be able to fix the prefix err
 the patching explained above thanks to the sed substitution framework.  the patching explained above thanks to the sed substitution framework.
 Here's how it looks like in my port Makefile:  Here's how it looks like in my port Makefile:
   
 {% highlight make %}  [[!format makefile """
 SUBST_CLASSES+=         makefile  SUBST_CLASSES+=         makefile
 SUBST_STAGE.makefile=   pre-build  SUBST_STAGE.makefile=   pre-build
 SUBST_MESSAGE.makefile= Fixing makefile  SUBST_MESSAGE.makefile= Fixing makefile
 SUBST_FILES.makefile=   Makefile  SUBST_FILES.makefile=   Makefile
 SUBST_SED.makefile=     -e 's,/usr/local,${PREFIX},g'  SUBST_SED.makefile=     -e 's,/usr/local,${PREFIX},g'
 SUBST_SED.makefile+=    -e 's,share/man,${PKGMANDIR},g'  SUBST_SED.makefile+=    -e 's,share/man,${PKGMANDIR},g'
 {% endhighlight %}  """]]
   
 As you can see, you can do multiple commands on multiple files, it  As you can see, you can do multiple commands on multiple files, it
 is very useful for very small fixes like this.  is very useful for very small fixes like this.
Line 596  You can find the 2bwm port I submitted i Line 592  You can find the 2bwm port I submitted i
 ## pkgsrc and wip  ## pkgsrc and wip
   
 If you want to submit your port for others to use you can either  If you want to submit your port for others to use you can either
 subscribe to pkgsrc-wip or ask a NetBSD developer to add it for you  subscribe to pkgsrc-wip or ask a NetBSD developer to add it for you.
 which can be tough. Even though there are many IRC channels in which  
 you can find nice developers, you will have to take the time to get  
 to know them. The easiest way for beginners is to submit to pkgsrc-wip  
 so other people can review and test it first.  
   
 pkgsrc-wip is hosted on  pkgsrc-wip is hosted on
 [sourceforge](https://sourceforge.net/projects/pkgsrc-wip/) and you  [sourceforge](https://sourceforge.net/projects/pkgsrc-wip/) and you
 can easily get cvs access to it if you create an account on there  can easily get cvs access to it if you create an account on there
 and send an email to NetBSD developer `@wiz` (Thomas Klausner)  and send an email to NetBSD developer `@wiz` (Thomas Klausner)
 asking nicely for commit access. I got access fairly quickly and  asking nicely for commit access.
 he even fixed a port to show me how to do it properly.  
   
 You can also send me an email or talk to me on IRC so I can submit it for you.  
   
   
 ## the options framework  ## the options framework
Line 617  You can also send me an email or talk to Line 606  You can also send me an email or talk to
 You can create port options with the `options.mk` file, like for `wm/dwm`  You can create port options with the `options.mk` file, like for `wm/dwm`
   
                   
 {% highlight make %}  [[!format makefile """
 # [[!paste id=rcsid1]][[!paste id=rcsid2]]  # [[!paste id=rcsid1]][[!paste id=rcsid2]]
   
 PKG_OPTIONS_VAR=                        PKG_OPTIONS.dwm  PKG_OPTIONS_VAR=                        PKG_OPTIONS.dwm
Line 642  SUBST_FILES.options=    config.mk Line 631  SUBST_FILES.options=    config.mk
 SUBST_SED.options+=     -e '/^XINERAMA/d'  SUBST_SED.options+=     -e '/^XINERAMA/d'
 .  include "../../x11/libX11/buildlink3.mk"  .  include "../../x11/libX11/buildlink3.mk"
 .endif  .endif
 {% endhighlight %}  """]]
   
 This file should be included in the Makefile:  This file should be included in the Makefile:
   
Line 680  packages available for testing. You will Line 669  packages available for testing. You will
 on the host system. I host my [packages](http://pkgsrc.saveosx.org/)  on the host system. I host my [packages](http://pkgsrc.saveosx.org/)
 on a FreeBSD server with a bootstrapped pkgsrc.  on a FreeBSD server with a bootstrapped pkgsrc.
   
 I use this `zsh` function to :  use this shell function to :
   
 {% highlight bash %}  [[!format sh """
 add () {  add () {
         # upload the package to remote server          # upload the package to remote server
         scp $1 yrmt@saveosx.org:/usr/local/www/saveosx/packages/Darwin/2013Q4/x86_64/All/ 2> /dev/null          scp $1 youri@saveosx.org:/usr/local/www/saveosx/packages/Darwin/2013Q4/x86_64/All/ 2> /dev/null
                   
         # update the package summary          # update the package summary
         ssh yrmt@saveosx.org 'cd /usr/local/www/saveosx/packages/Darwin/2013Q4/x86_64/All/;          ssh youri@saveosx.org 'cd /usr/local/www/saveosx/packages/Darwin/2013Q4/x86_64/All/;
                 rm pkg_summary.gz;                  rm pkg_summary.gz;
                 /usr/pkg/sbin/pkg_info -X *.tgz | gzip -9 > pkg_summary.gz'                  /usr/pkg/sbin/pkg_info -X *.tgz | gzip -9 > pkg_summary.gz'
                   
         # pkgin update          # pkgin update
         sudo pkgin update          sudo pkgin update
 }  }
 {% endhighlight %}  """]]
   
 - upload a package  - upload a package
 - update the package summary, which is an archive containing  - update the package summary, which is an archive containing
Line 722  add () { Line 711  add () {
                 REQUIRES=/usr/pkg/lib/libsqlite3.0.dylib                  REQUIRES=/usr/pkg/lib/libsqlite3.0.dylib
                 FILE_NAME=osxinfo-0.1.tgz                  FILE_NAME=osxinfo-0.1.tgz
                 FILE_SIZE=9710                  FILE_SIZE=9710
                 DESCRIPTION=Small and fast Mac OS X info program written in C                  DESCRIPTION=Small and fast Mac OS X info program written in C.
                 DESCRIPTION=by Youri Mouton.  
                 DESCRIPTION=                  DESCRIPTION=
                 DESCRIPTION=Homepage:                  DESCRIPTION=Homepage:
                 DESCRIPTION=http://github.com/yrmt/osxinfo                  DESCRIPTION=http://github.com/yrmt/osxinfo
Line 735  add () { Line 723  add () {
 And this shell alias to upload all my built packages, but I still  And this shell alias to upload all my built packages, but I still
 need to run `add()` mentionned above to update the pkg_summary  need to run `add()` mentionned above to update the pkg_summary
   
 {% highlight bash %}  [[!format sh """
 up='rsync -avhz --progress /pkgsrc/packages/ root@saveosx.org:/usr/local/www/saveosx/packages/Darwin/2013Q4/x86_64/'  up='rsync -avhz --progress /pkgsrc/packages/ youri@saveosx.org:/usr/local/www/saveosx/packages/Darwin/2013Q4/x86_64/'
 {% endhighlight %}  """]]
   
 Then you should be able to set the url in repositories.conf to use  Then you should be able to set the url in repositories.conf to use
 your packages with pkgin. You can also install them directly with  your packages with pkgin. You can also install them directly with
Line 748  course. Line 736  course.
   
 ## build all packages  ## build all packages
   
 Bulk building pkgsrc packages is a topic for another post, see  see jperkin's excellent blog
 jperkin's excellent blog  
 [posts](http://www.perkin.org.uk/posts/distributed-chrooted-pkgsrc-bulk-builds.html)  [posts](http://www.perkin.org.uk/posts/distributed-chrooted-pkgsrc-bulk-builds.html)
 about this.  about this.
   
Line 767  earlier like this: Line 754  earlier like this:
   
 pkgsrc supports fetching archives from specific git commits on  pkgsrc supports fetching archives from specific git commits on
 GitHub like this:  GitHub like this:
 {% highlight make %}  [[!format makefile """
 PKGNAME=           2bwm-0.1  PKGNAME=           2bwm-0.1
 CATEGORIES=        wm  CATEGORIES=        wm
 GHCOMMIT=          52a097ca644eb571b22a135951c945fcca57a25c  GHCOMMIT=          52a097ca644eb571b22a135951c945fcca57a25c
Line 775  DISTNAME=          ${GHCOMMIT} Line 762  DISTNAME=          ${GHCOMMIT}
 MASTER_SITES=      https://github.com/venam/2bwm/archive/  MASTER_SITES=      https://github.com/venam/2bwm/archive/
 DIST_SUBDIR=       2bwm  DIST_SUBDIR=       2bwm
 WRKSRC=            ${WRKDIR}/2bwm-${GHCOMMIT}  WRKSRC=            ${WRKDIR}/2bwm-${GHCOMMIT}
 {% endhighlight %}  """]]
   
 You can then easily update the git commit and the distinfo with it  You can then easily update the git commit and the distinfo with it
 to update the program.  to update the program.
Line 786  You can do all Makefile operations direc Line 773  You can do all Makefile operations direc
 like this:  like this:
   
   
 {% highlight make %}  [[!format makefile """
 post-extract:  post-extract:
         ${CHMOD} a-x ${WRKSRC}/elementary/apps/48/internet-mail.svg          ${CHMOD} a-x ${WRKSRC}/elementary/apps/48/internet-mail.svg
   
 do-install:  do-install:
         ${INSTALL_DATA_DIR} ${DESTDIR}${PREFIX}/share/icons          ${INSTALL_DATA_DIR} ${DESTDIR}${PREFIX}/share/icons
         cd ${WRKSRC} && pax -rw -pe . ${DESTDIR}${PREFIX}/share/icons/          cd ${WRKSRC} && pax -rw -pe . ${DESTDIR}${PREFIX}/share/icons/
 {% endhighlight %}  """]]
   
 To install, but you can also build programs from the Makefile. This  To install, but you can also build programs from the Makefile. This
 is what qt4-sqlite3 uses:  is what qt4-sqlite3 uses:
   
 {% highlight make %}  [[!format makefile """
 do-build:  do-build:
         cd ${WRKSRC}/src/tools/bootstrap && env ${MAKE_ENV} ${GMAKE}          cd ${WRKSRC}/src/tools/bootstrap && env ${MAKE_ENV} ${GMAKE}
         cd ${WRKSRC}/src/tools/moc && env ${MAKE_ENV} ${GMAKE}          cd ${WRKSRC}/src/tools/moc && env ${MAKE_ENV} ${GMAKE}
         cd ${WRKSRC}/src/plugins/sqldrivers/sqlite && env ${MAKE_ENV} ${GMAKE}          cd ${WRKSRC}/src/plugins/sqldrivers/sqlite && env ${MAKE_ENV} ${GMAKE}
 {% endhighlight %}  """]]
   
   
 You can install the following type of files:  You can install the following type of files:
Line 848  make installed from the pkgsrc bootstrap Line 835  make installed from the pkgsrc bootstrap
 - If you have a feeling a port is stuck in the building stage,  - If you have a feeling a port is stuck in the building stage,
   disable make jobs in your mk.conf    disable make jobs in your mk.conf
   
 - Please contribute here :)  
   
   
 ## links  
 - [Jonathan Perkin's excellent blog](http://www.perkin.org.uk/)  
 - [NetBSD's very extensive pkgsrc guide](http://www.netbsd.org/docs/pkgsrc/)  
 - [NetBSD's pkgsrc wiki](http://wiki.netbsd.org/pkgsrc/)  
 - Other blog posts here :)  
   
 ## where to find me  
   
 - yrmt@edgebsd.org  
 - irc.oftc.net  
           
         `#saveosx`  
   
 [[!cut id=rcsid1 text="$Net"]]  [[!cut id=rcsid1 text="$Net"]]
 [[!cut id=rcsid2 text="BSD$"]]  [[!cut id=rcsid2 text="BSD$"]]

Removed from v.1.3  
changed lines
  Added in v.1.10


CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb