268 lines
7.0 KiB
Makefile
268 lines
7.0 KiB
Makefile
.PHONY: all clean install
|
|
|
|
DLOPEN=1
|
|
#USE_ZLIB=1
|
|
|
|
prefix=/usr/local
|
|
exec_prefix=${prefix}
|
|
includedir=${prefix}/include
|
|
libdir=${exec_prefix}/lib
|
|
|
|
INSTALL=/usr/bin/install -c
|
|
INSTALL_PROGRAM=${INSTALL}
|
|
INSTALL_DATA=${INSTALL} -m 644
|
|
#RANLIB=ranlib
|
|
|
|
CC=gcc
|
|
CFLAGS0=-I. -Wall -W -O3 -DHAVE_CONFIG_H
|
|
CFLAGS=$(CFLAGS0) -DDLL
|
|
ifdef DLOPEN
|
|
CFLAGS+=-DDLOPEN
|
|
endif
|
|
ifeq ($(findstring darwin,$(OSTYPE)),darwin) # for example "darwin7.0"
|
|
# On Mac OS X using -s gives the following warning:
|
|
# /usr/bin/libtool: -static not specified, -s invalid
|
|
LDFLAGS=
|
|
else
|
|
LDFLAGS=-s
|
|
endif
|
|
|
|
# The test for Cygwin should be done before the test for DJGPP, because the
|
|
# environment variable DJGPP can be set under Bash for people who have
|
|
# installed both GCC (and friends) ports.
|
|
|
|
GCC_WIN=0
|
|
ifeq ($(TERM),cygwin) # test cygwin before DJGPP
|
|
GCC_WIN=1
|
|
endif
|
|
ifeq ($(OSTYPE),msys) # test msys (MinGW's POSIX build env.) before DJGPP
|
|
GCC_WIN=1
|
|
endif
|
|
|
|
LIBNAME=discmage
|
|
OBJECTS=libdm_misc.o dllinit.o misc.o misc_wav.o format/format.o format/cdi.o \
|
|
format/nero.o format/cue.o format/toc.o format/other.o
|
|
ifneq ($(OSTYPE),beos)
|
|
LIBS=-lm
|
|
else
|
|
LIBS=
|
|
endif
|
|
ifdef USE_ZLIB
|
|
LIBS+=-lz
|
|
OBJECTS+=unzip.o map.o misc_z.o
|
|
else
|
|
ifeq ($(GCC_WIN),1)
|
|
else
|
|
ifdef DJGPP # DJGPP code in dllinit needs map code
|
|
OBJECTS+=map.o
|
|
endif # DJGPP
|
|
endif # GCC_WIN
|
|
endif # USE_ZLIB
|
|
|
|
|
|
ifeq ($(TERM),cygwin) # test cygwin before DJGPP
|
|
|
|
GCCA_DIR=/lib/gcc-lib/i686-pc-cygwin/3.2/
|
|
ifeq ($(CC),g++)
|
|
LIBS+=-lstdc++
|
|
endif
|
|
LIBS+=-L$(GCCA_DIR) -lgcc -lcygwin -lkernel32
|
|
# kernel32 for DLOPEN and DisableThreadLibraryCalls()
|
|
|
|
ifdef DLOPEN
|
|
ENTRY=__cygwin_dll_entry@12
|
|
else
|
|
ENTRY=_DllMain@12
|
|
endif
|
|
|
|
FULLLIBNAME=$(LIBNAME).dll
|
|
DLLFLAGS=$(LDFLAGS) --dll $(OBJECTS) $(LIBS) -e $(ENTRY) -o $(LIBNAME).dll
|
|
DLLTOOLFLAGS=-d $(LIBNAME).def -b tmp.base -e tmp.exp -D $(LIBNAME).dll
|
|
ifndef DLOPEN
|
|
DLLTOOLFLAGS+=-l $(LIBNAME).a
|
|
endif
|
|
|
|
else
|
|
ifeq ($(OSTYPE),msys) # test msys before DJGPP
|
|
|
|
GCCA_DIR=/mingw/lib/gcc-lib/mingw32/3.2.3/
|
|
LIBS+=-L/mingw/lib -lkernel32 -lmsvcrt -L$(GCCA_DIR) -lgcc
|
|
# MSYS problem: Specifying the library directory is necessary when compiling on
|
|
# a different filesystem than the filesystem that MinGW is installed on.
|
|
|
|
FULLLIBNAME=$(LIBNAME).dll
|
|
DLLFLAGS=$(LDFLAGS) --dll $(OBJECTS) $(LIBS) -e _DllMain@12 -o $(LIBNAME).dll
|
|
DLLTOOLFLAGS=-d $(LIBNAME).def -b tmp.base -e tmp.exp -D $(LIBNAME).dll
|
|
ifndef DLOPEN
|
|
DLLTOOLFLAGS+=-l $(LIBNAME).a
|
|
endif
|
|
|
|
else
|
|
ifdef DJGPP
|
|
|
|
OBJECTS+=dxe_misc.o
|
|
|
|
GCCA_DIR=c:/djgpp/lib/gcc-lib/djgpp/3.31
|
|
LIBS+=-L$(GCCA_DIR) -lgcc
|
|
|
|
DLLFLAGS=$(OBJECTS) $(LIBS) $(LDFLAGS)
|
|
# $(LDFLAGS) must come after $(OBJECTS)
|
|
FULLLIBNAME=$(LIBNAME).dxe
|
|
|
|
else # Unix, BeOS or Mac OS X (Darwin)
|
|
|
|
CFLAGS+=-fPIC
|
|
|
|
ifeq ($(findstring darwin,$(OSTYPE)),darwin)
|
|
FULLLIBNAME=$(LIBNAME).dylib
|
|
else
|
|
FULLLIBNAME=$(LIBNAME).so
|
|
endif
|
|
|
|
ifndef DLOPEN # GNU specific: "simply expanded variable"
|
|
FULLLIBNAME:=$(addprefix lib,$(FULLLIBNAME))
|
|
endif
|
|
|
|
ifeq ($(OSTYPE),beos)
|
|
LDFLAGS+=-nostart
|
|
else
|
|
ifeq ($(findstring darwin,$(OSTYPE)),darwin)
|
|
LDFLAGS+=-dynamiclib
|
|
else
|
|
LDFLAGS+=-shared
|
|
endif # darwin
|
|
endif # beos
|
|
|
|
DLLFLAGS+=$(LDFLAGS) $(OBJECTS) $(LIBS) -o $(FULLLIBNAME)
|
|
|
|
endif # DJGPP
|
|
endif # msys
|
|
endif # cygwin
|
|
|
|
|
|
all: $(FULLLIBNAME)
|
|
|
|
|
|
clean:
|
|
ifeq ($(GCC_WIN),1)
|
|
rm -f $(FULLLIBNAME) $(LIBNAME).a $(OBJECTS) *.core *.stackdump *.o \
|
|
tmp.*
|
|
else
|
|
ifdef DJGPP
|
|
del $(FULLLIBNAME)
|
|
ifndef DLOPEN
|
|
del $(LIBNAME).a
|
|
endif
|
|
del *.o
|
|
del format\*.o
|
|
else # Unix, BeOS or Mac OS X (Darwin)
|
|
rm -f $(FULLLIBNAME) $(OBJECTS) *.core *.stackdump *.o
|
|
endif # DJGPP
|
|
endif # GCC_WIN
|
|
|
|
|
|
distclean: clean
|
|
ifeq ($(GCC_WIN),1)
|
|
rm -f Makefile config.log config.status config.cache config.h
|
|
else
|
|
ifdef DJGPP
|
|
del Makefile
|
|
del config.log
|
|
del config.status
|
|
del config.cache
|
|
del config.h
|
|
else
|
|
rm -f Makefile config.log config.status config.cache config.h
|
|
endif # DJGPP
|
|
endif # GCC_WIN
|
|
|
|
|
|
.c.o:
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
|
|
ifeq ($(GCC_WIN),1)
|
|
|
|
ifndef DLOPEN
|
|
$(LIBNAME).dll $(LIBNAME).a: $(OBJECTS)
|
|
else
|
|
$(LIBNAME).dll: $(OBJECTS)
|
|
endif
|
|
# echo EXPORTS > tmp.def
|
|
## nm $(OBJECTS) | grep ' T _' | sed 's/.* T _//' >> tmp.def
|
|
# nm $(OBJECTS) | grep '^........ [T] _' | sed 's/[^_]*_//' >> tmp.def
|
|
# We use nm instead of dlltool --output-def, so that we don't have to
|
|
# specify explicitly (in the source code) which symbols should be exported.
|
|
# We don't create the .def file automatically anymore. Using nm resulted in a
|
|
# (too large?) .def file which resulted in a non-working DLL when using Cygwin.
|
|
|
|
ld --base-file tmp.base $(DLLFLAGS)
|
|
dlltool $(DLLTOOLFLAGS)
|
|
ld tmp.exp $(DLLFLAGS)
|
|
|
|
else
|
|
ifdef DJGPP
|
|
|
|
ifndef DLOPEN
|
|
$(LIBNAME).dxe $(LIBNAME).a: $(OBJECTS) djimport.o dlopen.o
|
|
else
|
|
$(LIBNAME).dxe: $(OBJECTS)
|
|
endif
|
|
dxegen $(LIBNAME).dxe _import_export $(DLLFLAGS)
|
|
ifndef DLOPEN
|
|
# Recompile map.c, because it has to be a normal object file for the import
|
|
# library (no references to import_export)
|
|
$(CC) $(CFLAGS0) -c map.c -o map.o
|
|
ar rs $(LIBNAME).a djimport.o map.o dlopen.o
|
|
endif
|
|
|
|
else # Unix, BeOS or Mac OS X (Darwin)
|
|
# Unix uses LD_LIBRARY_PATH for dynamic linking, BeOS uses LIBRARY_PATH, Darwin
|
|
# uses LD_LIBRARY_PATH, DYLD_LIBRARY_PATH and DYLD_FALLBACK_LIBRARY_PATH
|
|
|
|
$(FULLLIBNAME): $(OBJECTS)
|
|
$(CC) $(DLLFLAGS)
|
|
|
|
endif # DJGPP
|
|
endif # GCC_WIN
|
|
|
|
|
|
install:
|
|
ifndef DLOPEN
|
|
[ -d $(DESTDIR)$(libdir) ] || \
|
|
(mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
|
|
$(INSTALL_DATA) $(FULLLIBNAME) $(DESTDIR)$(libdir)/$(FULLLIBNAME)
|
|
# $(RANLIB) $(DESTDIR)$(libdir)/$(FULLLIBNAME)
|
|
# $(LIBTOOL) --mode=install $(INSTALL) $(FULLLIBNAME) $(libdir)/$(FULLLIBNAME)
|
|
[ -d $(DESTDIR)$(includedir) ] || \
|
|
(mkdir -p $(DESTDIR)$(includedir); chmod 755 $(DESTDIR)$(includedir))
|
|
$(INSTALL_DATA) lib$(LIBNAME).h $(DESTDIR)$(includedir)
|
|
endif
|
|
|
|
uninstall:
|
|
ifndef DLOPEN
|
|
rm -f $(DESTDIR)$(libdir)/$(FULLLIBNAME)
|
|
rm -f $(DESTDIR)$(includedir)/lib$(LIBNAME).h
|
|
endif
|
|
|
|
|
|
# Dependencies
|
|
LIBDM_STD_H=libdiscmage.h misc.h dxedll_priv.h format/format.h config.h
|
|
|
|
libdm_misc.o: $(LIBDM_STD_H)
|
|
format/format.o: $(LIBDM_STD_H)
|
|
format/ccd.o: format/ccd.h $(LIBDM_STD_H)
|
|
format/cdi.o: format/cdi.h $(LIBDM_STD_H)
|
|
format/nero.o: format/nero.h $(LIBDM_STD_H)
|
|
format/cue.o: format/cue.h $(LIBDM_STD_H)
|
|
format/toc.o: format/toc.h $(LIBDM_STD_H)
|
|
format/other.o: format/other.h $(LIBDM_STD_H)
|
|
misc_wav.o: $(LIBDM_STD_H)
|
|
dllinit.o: $(LIBDM_STD_H)
|
|
misc.o: misc.h dxedll_priv.h
|
|
misc_z.o: misc_z.h misc.h dxedll_priv.h
|
|
dxe_misc.o: dxedll_pub.h
|
|
djimport.o: libdiscmage.h dlopen.h dxedll_pub.h
|
|
dlopen.o: dlopen.h dxedll_pub.h
|
|
map.o: map.h
|