aboutsummaryrefslogtreecommitdiffstats
path: root/sysutils/e2fsprogs/Makefile
blob: baa10e259ac29e6fad9b801512142d13fa8dcc9d (plain) (blame)
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
# New ports collection makefile for:    e2fsprogs
# Date created:             3 July 2001
# Whom:                 Maxim Sobolev <sobomax@FreeBSD.org>
#
# $FreeBSD$
#

PORTNAME=   e2fsprogs
PORTVERSION=    1.42.2
PORTREVISION?=  0
CATEGORIES?=    sysutils
MASTER_SITES=   SF/${PORTNAME}/${PORTNAME}/v${PORTVERSION}

MAINTAINER?=    mandree@FreeBSD.org
COMMENT?=   Utilities & library to manipulate ext2/3/4 filesystems

PATCH_STRIP=    -p1
USE_GMAKE=  yes
USE_CSTD=   gnu89
USE_LDCONFIG=   yes
GNU_CONFIGURE=  yes
CONFIGURE_ARGS+=--disable-fsck --disable-e2initrd-helper \
        --with-root-prefix='${PREFIX}'
CPPFLAGS+=  -I${WRKSRC}/lib -I${LOCALBASE}/include # -D_EXT2_USE_C_VERSIONS
MAKE_ARGS+= LDFLAGS='${LDFLAGS} -L${LOCALBASE}/lib'

OPTIONS?=   NLS "Enable national language support" on

.if !defined(MASTERDIR)
MAN1=       chattr.1 lsattr.1
MAN5=       e2fsck.conf.5 mke2fs.conf.5
MAN8=       badblocks.8 debugfs.8 dumpe2fs.8 e2fsck.8 e2image.8 e2label.8 \
        e2undo.8 mke2fs.8 mklost+found.8 resize2fs.8 tune2fs.8 \
        fsck.ext2.8 fsck.ext3.8 fsck.ext4.8 fsck.ext4dev.8 \
        mkfs.ext2.8 mkfs.ext3.8 mkfs.ext4.8 mkfs.ext4dev.8 \
        findfs.8 blkid.8 logsave.8 fsck_ext2fs.8 e2freefrag.8
PORTDOCS=   COPYING RELEASE-NOTES

post-extract:
    @${CHMOD} u+w ${WRKSRC}/po/*.po ${WRKSRC}/po/*.pot \
        ${WRKSRC}/${CONFIGURE_SCRIPT}
.endif

PKGDEINSTALL=   ${PKGINSTALL}

MAKE_JOBS_UNSAFE=   yes

# get more details into tinderbox logs
.if defined(PACKAGE_BUILDING)
MAKE_ARGS+= V=1
.endif

.include <bsd.port.pre.mk>

.if defined(WITHOUT_NLS)
CONFIGURE_ARGS+=--disable-nls
PLIST_SUB=  NLS="@comment "
libintl=
.else
USE_GETTEXT=    yes
PLIST_SUB=  NLS=""
libintl=    "${LOCALBASE}/lib/libintl.a ${LOCALBASE}/lib/libiconv.a"
.endif

post-patch::
    @${REINPLACE_CMD} -E -e \
        's:\$$\(libdir\)/pkgconfig:${PREFIX}/libdata/pkgconfig:' \
        ${WRKSRC}/lib/*/Makefile.in
# don't build/install libext2fs.info
    @${REINPLACE_CMD} -e 's/ install-doc-libs$$//' ${WRKSRC}/Makefile.in
    @${REINPLACE_CMD} -E -e 's/md5sum ([^ ]*)/printf "%s  %s\\n" $$(md5 -q \1) \1/' \
        -e "s/ == 0/ = 0/" ${WRKSRC}/tests/[a-t]_*/script
# disable f_mmp_garbage, fails on FreeBSD
.for i in f_mmp_garbage m_bigjournal
    @${MV} ${WRKSRC}/tests/${i} ${WRKSRC}/tests/disabled_test-${i}
.endfor

.if ${MASTERDIR} == ${.CURDIR}
post-build:
# Relink e2fsck statically - We need to make sure that tools for the root file
# system are statically linked against anything that is outside the root fs,
# else we're in trouble if e2fsck is needed for boot:
# (we don't use e2fsck.static, since we can link libc.so dynamically)
    cd ${WRKSRC}/e2fsck && ${RM} -f e2fsck \
        && ${GMAKE} e2fsck \
        STATIC_LIBS="../lib/libext2fs.a ../lib/libcom_err.a \
        ../lib/libblkid.a  ../lib/libuuid.a" \
        LIBINTL=${libintl}
# Regression check: avoid a port (not upstream!) regression from 1.40.5,
# check that e2fsck isn't dynalinked against anything but libc.so:
    @${ECHO_CMD} -n "===>  checking that e2fsck depends on no shared objects beyond libc and libgcc: "
    @a="$$(ldd ${WRKSRC}/e2fsck/e2fsck 2>/dev/null \
        | ${GREP} -v 'not a dynamic executable' \
        | ${GREP} '=>' \
        | ${AWK}  '{print $$3;}' \
        | ${EGREP} -v '^/lib/libgcc(_s)?\.so\.' \
        | ${GREP} -v '^/lib/libc\.so\.' || :)"; \
    if test "x$$a" = "x" ; then echo 'PASS' ; else \
        echo 'FAIL' ; echo '===>  e2fsck depends on:' ; echo "$$a" ; exit 1 ; fi
# Update translation binary files
.if !defined(WITHOUT_NLS)
    cd ${WRKSRC}/po && ${GMAKE} update-gmo
.endif
# Build fsck(8) wrapper
    ${CC} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} -s ${LIBS} \
        -o ${WRKSRC}/fsck_ext2fs ${FILESDIR}/fsck_ext2fs.c
# While the ${MAKE} check can take a minute on an end user's system, the
# correctness of tools such as e2fsck is critical to the health of the
# file systems.  The upstream is not using any *BSD as his development
# system, and therefore let's exercise due diligence in running the self-
# test on each and every system and not just package building hosts.
# There have been subtle failures induced by Linux-isms in the past.
# -- Matthias Andree, package maintainer, 2007-09-18
    @${ECHO_CMD} '===>  Running e2fsprogs self-test suite'
    cd ${WRKSRC}/tests && ${GMAKE} check \
        || { head -n30000 ${WRKSRC}/tests/*.failed 2>/dev/null ; exit 1 ; }

post-install:
    ${INSTALL_PROGRAM} ${WRKSRC}/fsck_ext2fs ${PREFIX}/sbin/
    ${INSTALL_MAN} ${FILESDIR}/fsck_ext2fs.8 ${PREFIX}/man/man8/
.if !defined(NOPORTDOCS)
    ${MKDIR} ${DOCSDIR}
.for i in ${PORTDOCS}
    ${INSTALL_DATA} ${WRKSRC}/${i} ${DOCSDIR}
.endfor
.endif
    PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
    @${ECHO_MSG} ; ${CAT} ${PKGMESSAGE} ; ${ECHO_MSG}
# the next line closes .if ${MASTERDIR} == ${.CURDIR}
.endif

.include <bsd.port.post.mk>