set('version', '1.46.4') cflags{ '-std=c99', '-Wall', '-Wno-address-of-packed-member', '-Wno-format-truncation', '-Wno-unused-variable', '-Wno-stringop-truncation', '-Wno-stringop-overflow', '-Wno-unused-label', '-D HAVE_CONFIG_H', '-I $outdir', '-I $outdir/include', '-I $outdir/internal', '-I $outdir/internal/support', '-I $srcdir/lib', '-isystem $builddir/pkg/linux-headers/include', '-isystem $builddir/pkg/util-linux/include', } build('cat', '$outdir/config.h', { '$builddir/probe/HAVE__THREAD_LOCAL', '$builddir/probe/SIZEOF_LONG', '$builddir/probe/SIZEOF_TIME_T', '$dir/config.h', }) set('subst', { '-e s,@E2FSPROGS_VERSION@,$version,', '-e s,@E2FSPROGS_MONTH@,Aug,', '-e s,@E2FSPROGS_YEAR@,2021,', '-e s,@JDEV@,,', }) local function et(file, src, hdr) src = '$outdir/'..src hdr = '$outdir/'..hdr build('awk', src, {file, '|', '$srcdir/lib/et/et_c.awk'}, { expr='-f $srcdir/lib/et/et_c.awk -v outfile=/dev/stdout outfn='..src:match('[^/]*$'), }) build('awk', hdr, {file, '|', '$srcdir/lib/et/et_h.awk'}, { expr='-f $srcdir/lib/et/et_h.awk -v outfile=/dev/stdout outfn='..hdr:match('[^/]*$'), }) end local function subst(output, input) output = '$outdir/'..output build('sed', output, '$srcdir/'..input, {expr='$subst'}) return output end local function substman(files) for _, file in ipairs(files) do if file:hassuffix('.in') then file = subst(file:sub(1, -4), file) end man{file} end end subst('ext2_err.et', 'lib/ext2fs/ext2_err.et.in') et('$outdir/ext2_err.et', 'ext2_err.c', 'include/ext2fs/ext2_err.h') et('$srcdir/lib/support/prof_err.et', 'prof_err.c', 'internal/support/prof_err.h') build('copy', '$outdir/include/ext2fs/ext2_types.h', '$dir/ext2_types.h') sub('tools.ninja', function() toolchain(config.host) exe('gen_crc32ctable', {'lib/ext2fs/gen_crc32ctable.c'}) end) rule('gen_crc32ctable', '$outdir/gen_crc32ctable >$out') build('gen_crc32ctable', '$outdir/internal/crc32c_table.h', {'|', '$outdir/gen_crc32ctable'}) pkg.hdrs = { '$outdir/include/ext2fs/ext2_err.h', '$outdir/include/ext2fs/ext2_types.h', } pkg.deps = { '$outdir/config.h', '$gendir/headers', '$outdir/internal/support/prof_err.h', '$outdir/internal/crc32c_table.h', 'pkg/linux-headers/headers', 'pkg/util-linux/headers', } lib('libcomm_err.a', [[lib/et/(error_message.c et_name.c init_et.c com_err.c com_right.c)]]) lib('libe2p.a', [[lib/e2p/( feature.c fgetflags.c fsetflags.c fgetversion.c fsetversion.c getflags.c getversion.c hashstr.c iod.c ls.c ljs.c mntopts.c parse_num.c pe.c pf.c ps.c setflags.c setversion.c uuid.c ostype.c percent.c crypto_mode.c fgetproject.c fsetproject.c encoding.c errcode.c )]]) lib('libext2fs.a', [[$outdir/ext2_err.c lib/ext2fs/( alloc.c alloc_sb.c alloc_stats.c alloc_tables.c atexit.c badblocks.c bb_inode.c bitmaps.c bitops.c blkmap64_ba.c blkmap64_rb.c blknum.c block.c bmap.c check_desc.c closefs.c crc16.c crc32c.c csum.c dblist.c dblist_dir.c dirblock.c dirhash.c dir_iterate.c expanddir.c ext_attr.c extent.c fallocate.c fileio.c finddev.c flushb.c freefs.c gen_bitmap.c gen_bitmap64.c get_num_dirs.c get_pathname.c getsize.c getsectsize.c hashmap.c i_block.c icount.c ind_block.c initialize.c inline.c inline_data.c inode.c io_manager.c ismounted.c link.c llseek.c lookup.c mkdir.c mkjournal.c mmp.c namei.c native.c newdir.c nls_utf8.c openfs.c progress.c punch.c qcow2.c read_bb.c read_bb_file.c res_gdt.c rw_bitmaps.c sha512.c swapfs.c symlink.c undo_io.c unix_io.c sparse_io.c unlink.c valid_blk.c version.c rbtree.c dupfs.c )]]) lib('libsupport.a', [[$outdir/prof_err.c lib/support/( cstring.c mkquota.c plausible.c profile.c parse_qtype.c profile_helpers.c quotaio.c quotaio_v2.c quotaio_tree.c dict.c )]]) exe('bin/e2fsck', [[ e2fsck/( unix.c e2fsck.c super.c pass1.c pass1b.c pass2.c pass3.c pass4.c pass5.c journal.c badblocks.c util.c dirinfo.c dx_dirinfo.c ehandler.c problem.c message.c quota.c recovery.c region.c revoke.c ea_refcount.c rehash.c logfile.c sigcatcher.c readahead.c extents.c encrypted_files.c ) libsupport.a libext2fs.a libe2p.a libcomm_err.a $builddir/pkg/util-linux/libblkid.a.d $builddir/pkg/util-linux/libuuid.a.d ]]) file('bin/e2fsck', '755', '$outdir/bin/e2fsck') substman{'e2fsck/e2fsck.8.in', 'e2fsck/e2fsck.conf.5.in'} exe('bin/resize2fs', [[ resize/( extent.c resize2fs.c main.c online.c resource_track.c sim_progress.c ) libext2fs.a libe2p.a libcomm_err.a ]]) file('bin/resize2fs', '755', '$outdir/bin/resize2fs') substman{'resize/resize2fs.8.in'} build('awk', '$outdir/default_profile.c', {'$srcdir/misc/mke2fs.conf.in', '|', '$srcdir/misc/profile-to-c.awk'}, { expr='-f $srcdir/misc/profile-to-c.awk', }) cc('misc/util.c') exe('bin/mke2fs', [[ misc/( mke2fs.c util.c.o mk_hugefiles.c create_inode.c ) $outdir/default_profile.c libsupport.a libext2fs.a libe2p.a libcomm_err.a $builddir/pkg/util-linux/libblkid.a.d $builddir/pkg/util-linux/libuuid.a.d ]]) file('bin/mke2fs', '755', '$outdir/bin/mke2fs') substman{'misc/mke2fs.8.in'} sub('journal.ninja', function() cflags{ '-I $srcdir/e2fsck', '-D DEBUGFS', } set('outdir', '$outdir/misc') lib('libjournal.a', [[ debugfs/journal.c e2fsck/(revoke.c recovery.c) ]]) end) exe('bin/tune2fs', [[ misc/(tune2fs.c util.c.o libjournal.a) libsupport.a libext2fs.a libe2p.a libcomm_err.a $builddir/pkg/util-linux/libblkid.a.d $builddir/pkg/util-linux/libuuid.a.d ]]) file('bin/tune2fs', '755', '$outdir/bin/tune2fs') substman{'misc/tune2fs.8.in'} exe('bin/e4crypt', [[ misc/e4crypt.c libext2fs.a $builddir/pkg/util-linux/libuuid.a.d ]]) file('bin/e4crypt', '755', '$outdir/bin/e4crypt') substman{'misc/e4crypt.8.in'} fetch 'git'