Files
hfsutils/libhfs/Makefile
Pablo Lezaeta Reyes 4b792146f3 feat: modernize build system with DESTDIR support and standard Unix conventions
Major build system overhaul implementing modern Unix build standards:

Build System Features:
- Add DESTDIR support for package building staging
- Add PREFIX, BINDIR, LIBDIR, INCLUDEDIR, MANDIR variables
- Add CC, CXX, CFLAGS, CXXFLAGS, LDFLAGS support
- Implement proper variable propagation to all sub-makefiles
- Add automatic manual page installation
- Add library and header installation for development

Files Modified:
- Makefile: Complete rewrite with modern variable handling
- build.sh: Enhanced with environment variable propagation
- libhfs/Makefile*: Added DESTDIR and compiler variable support
- librsrc/Makefile*: Added DESTDIR and compiler variable support
- hfsck/Makefile*: Added DESTDIR and compiler variable support
- libhfs/os/unix.c: Fixed include issues for modern systems

Documentation:
- Add BUILD.md: Comprehensive build system documentation
- Add CHANGELOG.md: Consolidated version history (replaces CHANGES)
- Update COPYRIGHT: Consolidated license info (replaces COPYING)
- Add TEST_RESULTS.md: Build system test verification
- Update README.md: New build system features and documentation links

Testing & Validation:
- Add validate_build.sh: Build system validation script
- Add test_build.sh: Usage examples and testing script
- All tests pass on WSL/Ubuntu environment

Backward Compatibility:
- All existing build commands continue to work
- Enhanced functionality without breaking changes
- Optional traditional command symlinks maintained

Package Manager Support:
- Standard DESTDIR enables clean deb/rpm packaging
- Proper FHS-compliant directory layout
- Cross-compilation support via compiler variables

This modernization enables hfsutils to work with standard Unix build
tools and package managers while maintaining full backward compatibility.
2025-10-21 17:20:43 -03:00

158 lines
4.2 KiB
Makefile

#
# libhfs - library for reading and writing Macintosh HFS volumes
# Copyright (C) 1996-1998 Robert Leslie
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# $Id: Makefile.in,v 1.11 1998/11/02 22:08:51 rob Exp $
#
src = .
### USER CUSTOMIZATIONS FOLLOW ################################################
# Installation directories
PREFIX ?= /usr/local
DESTDIR ?=
prefix = $(PREFIX)
exec_prefix = ${prefix}
MANDEST = ${prefix}/share/man
INCDEST = ${prefix}/include
LIBDEST = ${exec_prefix}/lib
INSTALL = /usr/bin/install -c
LIBINSTALL = ${INSTALL} -m 644
SOFTLINK = ln -s
OS = unix
# Build tools and flags
CC ?= gcc
INCLUDES =
DEFINES = -DHAVE_CONFIG_H
LIBOBJS =
LIBS =
# User-provided flags
CFLAGS ?= -g -O2
LDFLAGS ?=
# Internal flags
COPTS = $(CFLAGS)
LDOPTS = $(LDFLAGS)
AR = ar rc
RANLIB = ranlib
### END OF USER CUSTOMIZATION #################################################
CFLAGS = $(COPTS) $(INCLUDES) $(DEFINES)
LDFLAGS = $(LDOPTS)
###############################################################################
TARGETS = $(HFSTARGET)
HFSTARGET = libhfs.a
HFSOBJS = os.o data.o block.o low.o medium.o file.o btree.o node.o \
record.o volume.o hfs.o version.o $(LIBOBJS)
###############################################################################
all :: $(TARGETS)
check :: all
@echo "No self-tests available."
install ::
install -d "$(DESTDIR)$(LIBDEST)"
install -d "$(DESTDIR)$(INCDEST)"
$(LIBINSTALL) libhfs.a "$(DESTDIR)$(LIBDEST)/."
$(LIBINSTALL) hfs.h "$(DESTDIR)$(INCDEST)/."
again :: clean all
depend ::
( sed -n '1,/^### DEPEND/p' Makefile.in; \
echo; \
$(CC) -MM $(INCLUDES) $(DEFINES) *.c; \
) > Makefile.in.new
mv -f Makefile.in.new Makefile.in
clean ::
rm -f $(TARGETS) *.o gmon.* core
rm -rf autom4te.cache .stamp
distclean :: clean
rm -f config.status config.cache config.log config.h Makefile
rm -f configure
maintainer-clean :: distclean
rm -f config.h.in configure
rm -f configure~ Makefile.in~ config.h.in~
###############################################################################
Makefile: config.status
./config.status && touch .stamp/config.h
.stamp/config.h: config.status
./config.status && touch .stamp/config.h
config.status: .stamp/configure .stamp/config.h.in Makefile.in
./config.status --recheck
.stamp/configure: configure.in
autoconf && touch .stamp/configure
.stamp/config.h.in: configure.in acconfig.h
autoheader && touch .stamp/config.h.in
###############################################################################
$(HFSTARGET): $(HFSOBJS)
$(AR) $@ $(HFSOBJS)
$(RANLIB) $@
os.c: os/$(OS).c
rm -f $@
$(SOFTLINK) os/$(OS).c $@
### DEPENDENCIES FOLLOW #######################################################
block.o: block.c config.h libhfs.h hfs.h apple.h volume.h block.h os.h
btree.o: btree.c config.h libhfs.h hfs.h apple.h btree.h data.h file.h \
block.h node.h
data.o: data.c config.h data.h
file.o: file.c config.h libhfs.h hfs.h apple.h file.h btree.h record.h \
volume.h
hfs.o: hfs.c config.h libhfs.h hfs.h apple.h data.h block.h medium.h \
file.h btree.h node.h record.h volume.h
low.o: low.c config.h libhfs.h hfs.h apple.h low.h data.h block.h \
file.h
medium.o: medium.c config.h libhfs.h hfs.h apple.h block.h low.h \
medium.h
memcmp.o: memcmp.c config.h
node.o: node.c config.h libhfs.h hfs.h apple.h node.h data.h btree.h
os.o: os.c config.h libhfs.h hfs.h apple.h os.h
record.o: record.c config.h libhfs.h hfs.h apple.h record.h data.h
version.o: version.c version.h
volume.o: volume.c config.h libhfs.h hfs.h apple.h volume.h data.h \
block.h low.h medium.h file.h btree.h record.h os.h