Files
hfsutils/librsrc/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

139 lines
3.4 KiB
Makefile

#
# librsrc - library for reading and writing Macintosh resources
# 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.8 1998/04/12 01:33:26 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
# Build tools and flags
CC ?= cc
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 = $(RSRCTARGET)
RSRCTARGET = librsrc.a
RSRCOBJS = data.o rsrc.o version.o $(LIBOBJS)
###############################################################################
all :: $(TARGETS)
check :: all
@echo "No self-tests available."
install ::
install -d "$(DESTDIR)$(LIBDEST)"
install -d "$(DESTDIR)$(INCDEST)"
$(LIBINSTALL) librsrc.a "$(DESTDIR)$(LIBDEST)/."
$(LIBINSTALL) rsrc.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 -f main
distclean :: clean
rm -f config.status config.cache config.log config.h Makefile
maintainer-clean :: distclean
rm -f config.h.in configure
###############################################################################
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
###############################################################################
$(RSRCTARGET): $(RSRCOBJS)
$(AR) $@ $(RSRCOBJS)
$(RANLIB) $@
main.o:
$(CC) $(CFLAGS) -I. -I../libhfs -c main.c -o $@
main: librsrc.a main.o
$(CC) $(LDFLAGS) -L. -L../libhfs main.o -lhfs -lrsrc -o $@
### DEPENDENCIES FOLLOW #######################################################
data.o: data.c config.h data.h
main.o: main.c /usr/local/include/hfs.h rsrc.h
rsrc.o: rsrc.c config.h librsrc.h rsrc.h data.h
version.o: version.c version.h