1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
|
# $NetBSD: Packages.txt,v 1.1 1997/11/05 09:35:52 hubertf Exp $
=======================================
An attempt of some documentation on
the NetBSD's Packages system
=======================================
Alistair Crooks, Hubert Feyrer
Tue Nov 4 11:20:56 GMT 1997
0. Introduction and Overview
============================
There's an awful lot of freely-available software available, some of
which has also been "ported" to NetBSD. The NetBSD packages
collection, which is derived from the FreeBSD ports collection,
incorporates any changes necessary to make that software run on
NetBSD, and makes the installation of the package easy by means of a
single command. De-installation is equally simple.
The NetBSD package system is derived from the FreeBSD ports system.
It is used to enable third-party software to be built easily on NetBSD
hosts. Once the software has been built, it is manipulated with the
pkg_* tools so that installation and de-installation is simple, and
inventory printed, and one-line comments and more verbose descriptions
can be retrieved.
this document detailes 4 sections below. They are:
1. To install packages by building
2. To make a binary package
3. To install a binary package
4. Making your own package
The patient readers are advised to go and read the "guidelines" section of
the FreeBSD handbook
(http://www.freebsd.org/handbook/handbook251.html#porting), which provides
detailed instructions on the construction of a FreeBSD "port". Impatient
readers are also advised to read that section. A lot of the information is
this document is taken from that section of the FreeBSD handbook, mostly
without attribution.
1. To install packages by Building
====================================
This assumes that the package is already part of the NetBSD package
system. If it is not, then you are advised to read section 4 of this
document: "Making your own package".
Firstly, become root and change into the relevant directory. You can then
type
make
at the shell prompt to build the various components of the package, and
make install
at the shell prompt to install the various components into the correct
place on your system.
There is one gotcha:
The distribution file (i.e. the unmodified source) must exist on your
system for the packages system to be able to build it. If it's not, then
ftp(1) is used to fetch the distribution files automatically. If you are
sitting behind a firewall, you must specify the relevant proxy hosts to
enable you to talk to other machines on the Internet which are not behind
your firewall. This is an environment variable in the form of a URL e.g.
in Amdahl, the machine orpheus.amdahl.com is one of our firewalls, and it
uses port 80 as the proxy port number. So the proxy environment variables
look like:
ftp_proxy=ftp://orpheus.amdahl.com:80/
http_proxy=http://orpheus.amdahl.com:80/
Taking the top system utility as an example, we can install it on
our system by building as shown in the typescript below:
> Script started on Fri Oct 3 13:22:31 1997
> root@pumpy:/u/pkgsrc/sysutils/top(1342)# make
> >> top-3.5beta5.tar.gz doesn't seem to exist on this system.
> >> Attempting to fetch from ftp://ftp.groupsys.com/pub/top/.
> Requesting ftp://ftp.groupsys.com/pub/top/top-3.5beta5.tar.gz (via ftp://orpheus.amdahl.com:80/)
> Successfully retrieved file.
> >> Checksum OK for top-3.5beta5.tar.gz.
> ===> Extracting for top-3.5beta5
> ===> Patching for top-3.5beta5
> ===> Applying NetBSD patches for top-3.5beta5
> ===> Configuring for top-3.5beta5
> /bin/cp /u/pkgsrc/sysutils/top/files/defaults /u/pkgsrc/sysutils/top/work/top-3.5beta5/.defaults
> chmod a-x /u/pkgsrc/sysutils/top/work/top-3.5beta5/install
>
> Reading configuration from last time...
>
> Using these settings:
> Bourne Shell /bin/sh
> C compiler cc
> Compiler options -DHAVE_GETOPT -O
> Awk command awk
> Install command /usr/bin/install
>
> Module netbsd13
> LoadMax 5.0
> Default TOPN -1
> Nominal TOPN 18
> Default Delay 2
> Random passwd access yes
> Table Size 47
> Owner root
> Group Owner kmem
> Mode 2755
> bin directory $(PREFIX)/bin
> man directory $(PREFIX)/man/man1
> man extension 1
> man style man
>
> Building Makefile...
> Building top.local.h...
> Building top.1...
> Doing a "make clean".
> rm -f *.o top core core.* sigdesc.h
> To create the executable, type "make".
> To install the executable, type "make install".
> ===> Building for top-3.5beta5
> cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c top.c
> awk -f sigconv.awk /usr/include/sys/signal.h >sigdesc.h
> cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c commands.c
> cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c display.c
> cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c screen.c
> cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c username.c
> cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c utils.c
> utils.c: In function `errmsg':
> utils.c:348: warning: return discards `const' from pointer target type
> cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c version.c
> cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c getopt.c
> cc "-DOSREV=12G" -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c machine.c
> rm -f top
> cc -o top top.o commands.o display.o screen.o username.o utils.o version.o getopt.o machine.o -ltermcap -lm -lkvm
> root@pumpy:/u/pkgsrc/sysutils/top(1343)# make install
> >> Checksum OK for top-3.5beta5.tar.gz.
> ===> Installing for top-3.5beta5
> /usr/bin/install -o root -m 2755 -g kmem top /usr/pkg/bin
> /usr/bin/install top.1 /usr/pkg/man/man1/top.1
> strip /usr/pkg/bin/top
> ===> Registering installation for top-3.5beta5
> root@pumpy:/u/pkgsrc/sysutils/top(1344)#
As you can see, the package is installed under the default root of
the packages tree - /usr/pkg. Should this not conform to your tastes,
simply set the PREFIX variable in your environment, and it will use that
value as the root of your packages tree. So, to use /usr/local, set
PREFIX=/usr/local
in your environment.
2. To make a binary package
===========================
Once you have built and installed the package mentioned in section 1
above, you can build it into a "binary package" - you might want to do
this so that you can use the binaries you have just built on another
NetBSD system, or to provide a simple means for others to use your
binary package - this is done by changing to the appropriate directory
in the pkgsrc tree, and typing the command
make package
at the shell prompt. This will build and install your package, and
then construct a binary package out of the results so that you can use
the pkg_* tools to manipulate this. At the present time, this binary
package is in the form of a gzipped tar file.
> root@pumpy:/u/pkgsrc/sysutils/top(1344)# make package
> >> Checksum OK for top-3.5beta5.tar.gz.
> ===> Building package for top-3.5beta5
> Creating package top-3.5beta5.tgz
> Registering depends:.
> Creating gzip'd tar ball in '/u/pkgsrc/sysutils/top/top-3.5beta5.tgz'
> root@pumpy:/u/pkgsrc/sysutils/top(1345)#
3. Installing a binary package
==============================
To install a binary package on a NetBSD system, you should use the
pkg_add(1) command. Please pay very careful attention to the warnings
expressed in that manual page about the inherent dangers of installing
binary packages which you did not create yourself, and the security
holes that can be introduced onto your system by indiscriminate adding
of such files.
Any packages needed to run the package in question will be installed too,
assuming they are present on your system.
4. Making your own package
==========================
This section should also be known as "How to make files for a pkgsrc
directory."
4.1 Category
Firstly, you should consider into which category your software falls.
The NetBSD package collection is divided into categories. At the time
of writing, these categories are:
archivers
astro
audio
benchmarks
cad
chinese
comms
converters
databases
devel
editors
emulators
games
german
graphics
japanese
korean
lang
mail
math
mbone
misc
net
news
plan9
print
russian
security
shells
sysutils
textproc
vietnamese
www
x11
It is possible that your package may fall into more than one category
- in that case, you should pick the one most likely to describe your
software. After all, that is the place that most people will look for
it, and so you have more chance of other people using it if you
describe it properly.
4.2 A package's directory and its component directories and files
4.2.1 Makefile
The building, installation, and creation of a binary package are all
controlled by the package's Makefile.
There's a Makefile for each package. This file includes the standard
<bsd.port.mk> file, which sets all the definitions and actions necessary
for the package to compile and install itself. The mandatory fields are the
DISTNAME, which specifies the base name of the distribution file which will
be downloaded from the site on the Internet, MASTER_SITES which specifies
that site, CATEGORIES which denotes the categories into which the package
falls, PKGNAME which is the name of the package, and the MAINTAINER name.
This is so that anyone who quibbles with the (always completely correct)
decisions taken by the guy who maintains the port can complain vigorously.
(Actually, in my experience, the FreeBSD maintainers have all been very
responsive.)
See /usr/share/mk/bsd.port.mk for a description of all available options.
4.2.2 The files directory
If you have any files that you wish to be placed in the package prior to
configuration or building, you could place these files here, and use a cp
command in the pre-configure target to achieve this. Alternatively, you
could simply diff the file against /dev/null, and use the patch mechanism
to manage the creation of this file.
Besides that, this directory contains the (mandatory) md5 checksome of all
the distfiles need for the package to compile.
4.2.2.1 The files/md5 file
This file contains an md5 checksum of the distribution file(s). It can be
generated by hand using the md5(1) command. An md5 checksum is kept on
most ports to ensure that the file retrieved from the Internet has not been
altered by a malign force to introduce a security hole. The file contains
the md5 checksum of the original distribution file used to create the
NetBSD package, from which any patches were generated etc.
(I usually create this by doing
md5 <dist-file> > files/md5
and then manually editing the name of the file to delete any directory
names)
4.2.3 The patches directory
This directory contains files that are used by the patch(1) command to
modify the sources as distributed in the distribution file, into a form
that will compile and run perfectly on NetBSD. The files are applied
successively, in alphabetic order (as returned by a shell "patches/patch-*"
glob expansion), so patch-aa is applied before patch-ab etc.
The patch-?? files should be in diff -u format. This is because the
FreeBSD ports tsar finds this format easier to read than context diffs, and
so you have more chance of getting your NetBSD package accepted as part of
the FreeBSD ports system if you format your diffs in a unified fashion.
4.2.4 The pkg directory
This directory contains three files used to manage the creation of
binary packages. Files from this directory are used in the binary
package itself, and will thus be installed on other machines, so you
should be aware that there is a wider audience than you might think
for your comments and witticisms.
4.2.4.1 The pkg/COMMENT file
A one-line description of the piece of software. There is no need
to mention the package's name - this will automatically be added by
the pkg_* tools when they are invoked.
4.2.4.2 The pkg/DESCR file
A multi-line description of the piece of software. This should
include any credits where they are due. Please bear in mind that
others do not share your sense of humour (or spelling idiosyncracies),
and that others will read everything that you write here.
4.2.4.3 The pkg/PLIST file
This file governs the files that are installed on your system: all the
binaries, manual pages, etc. There are other directives which may be
entered in this file, to control the creation and deletion of directories,
and the location of inserted files.
4.2.5 The scripts directory
This directory contains any files that are necessary for configuration
of your software, etc.
4.2.6 The work directory
When you type "make" the distribution files are unpacked into this
directory. It can be removed by typing
make clean
at the shell prompt.
4.3 CPP definitions
To port an application to NetBSD, it's usually necessary for the
compiler to be able to judge the system on which it's compiling,
and we use definitions so that the C pre-processor can do this.
The really impatient should just note that a number of the FreeBSD
ports (which are called packages in the NetBSD world) rely on the CPP
definition __FreeBSD__. I believe that this should be used sparingly,
for FreeBSD-specific features, but unfortunately this is not always
the case. A number also rely on the fact that the CPU type is an
Intel-based little-endian CPU.
To test whether you are working on a 4.4 BSD-derived system, you
should use the BSD definition, which is defined in <sys/param.h> on
said systems. Unfortunately, it may not always be appropriate to
include that header file without checking whether it's available -
#ifdef (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h>
#endif
and then you can surround the BSD-specific parts of your port using
the conditional:
#if (defined(BSD) && BSD >= 199306)
...
#endif
Please use the __NetBSD__ definition sparingly - it should only apply
to features of NetBSD that are not present in other 4.4-lite derived
BSDs.
You should also avoid defining __FreeBSD__=1 and then simply using the
FreeBSD port, if only from an aesthetic viewpoint (see section 4.4,
FreeBSD ports).
4.4 FreeBSD ports
It's quite possible that a FreeBSD port exists for the piece of
software you're trying to build on NetBSD. If that is the case, it's
very possible that the FreeBSD port will work on NetBSD. However,
check that the person who ported the software to FreeBSD has not
played fast and loose with the __FreeBSD__ cpp definition without good
cause - a simple way to do this is to do
grep -i freebsd patches/patch-??
in the package directory.
4.5 Idiosyncracies
4.5.1 If your package uses GNU autoconf
> GNU_CONFIGURE= yes
Note that this appends --prefix=${PREFIX} to CONFIGURE_ARGS, so you
don't have to do that yourself, and this may not be what you want.
4.5.2 If your package uses imake or xmkmf
> USE_IMAKE= yes
4.5.3 You don't have to have a patches directory if you don't have any
patches, but it won't hurt you either.
4.5.4 If your package uses a different distribution method from
.tar.gz: take a look at the packages for sam, which uses a gzipped
shell archive (shar), but the quick solution is to set EXTRACT_SUFX to
the name after the DIST_NAME field, and
> EXTRACT_SUFX= .msg.gz
> EXTRACT_CMD= zcat
> EXTRACT_BEFORE_ARGS=
> EXTRACT_AFTER_ARGS= |sh
4.5.5 Your package doesn't create a subdirectory for itself (like GNU
software does, for instance), but extracts itself in the current directory:
see sam again, but the quick answer is:
> NO_WRKSUBDIR= yes
4.5.6 Your package uses a weird Configure script:
See the top package, but the quick answer is
> HAS_CONFIGURE= yes
> CONFIGURE_SCRIPT= Configure
> CONFIGURE_ARGS= netbsd13
4.5.7 Your package has an HTTP URL:
No problem, see the libutf and mysql packages, just use the http URL
and ftp(1) will handle it.
> MASTER_SITES= http://www.tcx.se/ \
> http://www.buoy.com/mysql/ \
> http://web.tryc.on.ca/mysql/ \
> http://mysql.staufen.de/ \
> http://mysql.acer.net/
4.5.8 Your package builds in a different directory from its base DIST_NAME:
see tcl and tk packages:
> WRKSRC= ${WRKDIR}/${DISTNAME}/unix
4.5.9 Your package needs to specify a different PREFIX: This can be fraught
with danger if you're using GNU configure, as (see 4.5.1)
--prefix=${PREFIX} is automatically appended to CONFIGURE_ARGS. SO take a
look at mit-pthreads, omit GNU_CONFIGURE=yes, use HAS_CONFIGURE=yes, and
manually add the modified PREFIX to CONFIGURE_ARGS yourself:
> HAS_CONFIGURE= yes
> CONFIGURE_ARGS += ${PREFIX}/dirname
4.6 A worked example
I checked to find a piece of software that isn't in the FreeBSD ports
collection, and picked GNU bison. Quite why someone would want to
have bison when Berkeley yacc is already present in the tree is beyond
me, but it's useful for the purposes of this exercise.
> root@pumpy:/u/pkgsrc/lang(1765)# cd /usr/pkgsrc/lang
> root@pumpy:/u/pkgsrc/lang(1765)# mkdir bison
> root@pumpy:/u/pkgsrc/lang(1766)# cd bison
> root@pumpy:/u/pkgsrc/lang/bison(1767)# cat > Makefile << EOF
> # <NetBSD RCS Id>
> # New ports collection makefile for: bison
> # Version required: 1.25
> # Date created: 1 October 1997
> # Whom: agc@netbsd.org
> #
> #
>
> DISTNAME= bison-1.25
> CATEGORIES= lang
> MASTER_SITES= ${MASTER_SITE_GNU}
>
> GNU_CONFIGURE= yes
> MAN1= bison.1
>
> .include <bsd.port.mk>
> EOF
> root@pumpy:/u/pkgsrc/lang/bison(1768)# mkdir files patches pkg
> root@pumpy:/u/pkgsrc/lang/bison(1769)# make fetch
> >> bison-1.25.tar.gz doesn't seem to exist on this system.
> >> Attempting to fetch from ftp://prep.ai.mit.edu/pub/gnu//.
> Requesting ftp://prep.ai.mit.edu/pub/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
> ftp: Error retrieving file: 500 Internal error
>
> >> Attempting to fetch from ftp://wuarchive.wustl.edu/systems/gnu//.
> Requesting ftp://wuarchive.wustl.edu/systems/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
> ftp: Error retrieving file: 500 Internal error
>
> >> Attempting to fetch from ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//.
> Requesting ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
> Successfully retrieved file.
> root@pumpy:/u/pkgsrc/lang/bison(1770)# md5 /usr/pkgsrc/distfiles/bison-1.25.tar.gz | sed -e 's;/usr/pkgsrc/distfiles/;;' > files/md5
> root@pumpy:/u/pkgsrc/lang/bison(1771)# cat > pkg/COMMENT << EOF
> GNU yacc clone.
> EOF
> root@pumpy:/u/pkgsrc/lang/bison(1772)# cat > pkg/DESCR << EOF
> GNU version of yacc. Can make re-entrant parsers, and numerous other
> improvements. Why you would want this when Berkeley yacc(1) is part
> of the NetBSD source tree is beyond me.
>
> Alistair Crooks (agc@netbsd.org)
>
> EOF
> root@pumpy:/u/pkgsrc/lang/bison(1773)# cat > pkg/PLIST << EOF
> bin/bison
> EOF
> root@pumpy:/u/pkgsrc/lang/bison(1777)# make
> >> Checksum OK for bison-1.25.tar.gz.
> ===> Extracting for bison-1.25
> ===> Patching for bison-1.25
> ===> Ignoring empty patch directory
> ===> Configuring for bison-1.25
> creating cache ./config.cache
> checking for gcc... cc
> checking whether we are using GNU C... yes
> checking for a BSD compatible install... /usr/bin/install -c -o bin -g bin
> checking how to run the C preprocessor... cc -E
> checking for minix/config.h... no
> checking for POSIXized ISC... no
> checking whether cross-compiling... no
> checking for ANSI C header files... yes
> checking for string.h... yes
> checking for stdlib.h... yes
> checking for memory.h... yes
> checking for working const... yes
> checking for working alloca.h... no
> checking for alloca... yes
> checking for strerror... yes
> updating cache ./config.cache
> creating ./config.status
> creating Makefile
> ===> Building for bison-1.25
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g LR0.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g allocate.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g closure.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g conflicts.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g derives.c
> cc -c -DXPFILE=\"/usr/pkg/share/bison.simple\" -DXPFILE1=\"/usr/pkg/share/bison.hairy\" -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -g ./files.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getargs.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g gram.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g lalr.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g lex.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g main.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g nullable.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g output.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g print.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g reader.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g reduce.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g symtab.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g warshall.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g version.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getopt.c
> cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getopt1.c
> cc -g -o bison LR0.o allocate.o closure.o conflicts.o derives.o files.o getargs.o gram.o lalr.o lex.o main.o nullable.o output.o print.o reader.o reduce.o symtab.o warshall.o version.o getopt.o getopt1.o
> ./files.c:240: warning: mktemp() possibly used unsafely, consider using mkstemp()
> rm -f bison.s1
> sed -e "/^#line/ s|bison|/usr/pkg/share/bison|" < ./bison.simple > bison.s1
> root@pumpy:/u/pkgsrc/lang/bison(1785)# make install
> >> Checksum OK for bison-1.25.tar.gz.
> ===> Installing for bison-1.25
> sh ./mkinstalldirs /usr/pkg/bin /usr/pkg/share /usr/pkg/info /usr/pkg/man/man1
> rm -f /usr/pkg/bin/bison
> cd /usr/pkg/share; rm -f bison.simple bison.hairy
> rm -f /usr/pkg/man/man1/bison.1 /usr/pkg/info/bison.info*
> install -c -o bin -g bin -m 555 bison /usr/pkg/bin/bison
> /usr/bin/install -c -o bin -g bin -m 644 bison.s1 /usr/pkg/share/bison.simple
> /usr/bin/install -c -o bin -g bin -m 644 ./bison.hairy /usr/pkg/share/bison.hairy
> cd .; for f in bison.info*; do /usr/bin/install -c -o bin -g bin -m 644 $f /usr/pkg/info/$f; done
> /usr/bin/install -c -o bin -g bin -m 644 ./bison.1 /usr/pkg/man/man1/bison.1
> ===> Registering installation for bison-1.25
> root@pumpy:/u/pkgsrc/lang/bison(1786)# make package
> >> Checksum OK for bison-1.25.tar.gz.
> ===> Building package for bison-1.25
> Creating package bison-1.25.tgz
> Registering depends:.
> Creating gzip'd tar ball in '/u/pkgsrc/lang/bison/bison-1.25.tgz'
> root@pumpy:/u/pkgsrc/lang/bison(1787)# make clean
> ===> Cleaning for bison-1.25
> root@pumpy:/u/pkgsrc/lang/bison(1788)#
Finally, please tar up and gzip the package directory (without the
binary package) and mail it to me (agc@netbsd.org), remembering to
uuencode it first.
4.7 Gotchas
Whenever you're preparing a port from the FreeBSD collection or doing it
from scratch, there's a number of points to take care for in order to get
everything done propperly. Here is an attempt of list of all these
gotchas.
4.7.1 Makefile
- Add MANCOMPRESSED (if not already there), see comment in bsd.port.mk
- Update MAN?; important for manpages being compressed correctly if MANZ
is set
- Replace /usr/local by ${PREFIX} in all Files but Makefiles (see patches
below)
4.7.2 pkg/PLIST
- If there's a "@exec ldconfig ...", add an "@unexec ldconfig ...", so the
hints-file for ld.so doesn't grow without end.
- Add any missing @dirrm statements
4.7.3 Debugging
To check out all these gotchas, here are the steps that I do in order to
get a package working (Please note this is basically the same as above,
only with some debugging aids ;):
- Look at Makefile, fix if necessary
- Look at patches, remember if not appropriate
- have a look at pkg/PLIST
- make
- If something's not ok, fix; for patches: fix the file, then re-generate
the diff: 'diff foo foo.orig >../../patches/patch-xx' (mv patch-xx
patch-xx.orig before); If there's no foo.orig from a previous patch, be
sure to have an old version of the file somewhere; re-iterate :)
- If all builds ok: touch /tmp/bla
- make install
- find /usr/pkg/ /usr/X11R6/ -newer /tmp/bla >/tmp/x
- pkg_delete blub
- find /usr/pkg/ /usr/X11R6/ -newer /tmp/bla: if this brings up any files,
they are missing pkg/PLIST; add them.
- Compare pkg/PLIST against /tmp/x, fix the further one
- make reinstall && make package
- pkg_delete blub
- find /usr/pkg/ /usr/X11R6/ -type f -newer /tmp/bla shouldn't find anything
now
- pkg_add .../blub.tgz
- Play with it :)
- pkg_delete - still no file should be left (re-run above find)
- submit :)
|