mirror of
https://github.com/michaelrsweet/pdfio.git
synced 2024-12-25 12:58:21 +01:00
Adopt autoconf (Issue #54)
This commit is contained in:
parent
cd80c3037d
commit
41146adbdf
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,6 +5,7 @@
|
|||||||
*.so.1
|
*.so.1
|
||||||
/.vs
|
/.vs
|
||||||
/afl-output
|
/afl-output
|
||||||
|
/autom4te.cache
|
||||||
/doc/pdfio.epub
|
/doc/pdfio.epub
|
||||||
/packages
|
/packages
|
||||||
/pdfio.xcodeproj/xcshareddata
|
/pdfio.xcodeproj/xcshareddata
|
||||||
|
@ -2,6 +2,12 @@ Changes in PDFio
|
|||||||
================
|
================
|
||||||
|
|
||||||
|
|
||||||
|
v1.2.0 (Month DD, YYYY)
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
- Now use autoconf to configure the PDFio sources (Issue #54)
|
||||||
|
|
||||||
|
|
||||||
v1.1.4 (December 3, 2023)
|
v1.1.4 (December 3, 2023)
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
233
Makefile
233
Makefile
@ -1,233 +0,0 @@
|
|||||||
#
|
|
||||||
# Makefile for PDFio.
|
|
||||||
#
|
|
||||||
# Copyright © 2021-2023 by Michael R Sweet.
|
|
||||||
#
|
|
||||||
# Licensed under Apache License v2.0. See the file "LICENSE" for more
|
|
||||||
# information.
|
|
||||||
#
|
|
||||||
|
|
||||||
# POSIX makefile
|
|
||||||
.POSIX:
|
|
||||||
|
|
||||||
# Build silently
|
|
||||||
.SILENT:
|
|
||||||
|
|
||||||
# Variables
|
|
||||||
AR = ar
|
|
||||||
ARFLAGS = cr
|
|
||||||
CC = cc
|
|
||||||
CFLAGS =
|
|
||||||
CODESIGN_IDENTITY = Developer ID
|
|
||||||
COMMONFLAGS = -Os -g
|
|
||||||
#COMMONFLAGS = -O0 -g -fsanitize=address
|
|
||||||
CPPFLAGS =
|
|
||||||
DESTDIR = $(DSTROOT)
|
|
||||||
DSO = cc
|
|
||||||
DSOFLAGS =
|
|
||||||
DSONAME =
|
|
||||||
LDFLAGS =
|
|
||||||
LIBS = -lm -lz
|
|
||||||
RANLIB = ranlib
|
|
||||||
VERSION = 1.1.4
|
|
||||||
prefix = /usr/local
|
|
||||||
|
|
||||||
|
|
||||||
# Base rules
|
|
||||||
.SUFFIXES: .c .h .o
|
|
||||||
.c.o:
|
|
||||||
echo Compiling $<...
|
|
||||||
$(CC) $(CFLAGS) $(CPPFLAGS) $(COMMONFLAGS) -c $<
|
|
||||||
|
|
||||||
|
|
||||||
# Files
|
|
||||||
PUBHEADERS = \
|
|
||||||
pdfio.h \
|
|
||||||
pdfio-content.h
|
|
||||||
PUBOBJS = \
|
|
||||||
pdfio-aes.o \
|
|
||||||
pdfio-array.o \
|
|
||||||
pdfio-common.o \
|
|
||||||
pdfio-content.o \
|
|
||||||
pdfio-crypto.o \
|
|
||||||
pdfio-dict.o \
|
|
||||||
pdfio-file.o \
|
|
||||||
pdfio-md5.o \
|
|
||||||
pdfio-object.o \
|
|
||||||
pdfio-page.o \
|
|
||||||
pdfio-rc4.o \
|
|
||||||
pdfio-sha256.o \
|
|
||||||
pdfio-stream.o \
|
|
||||||
pdfio-string.o \
|
|
||||||
pdfio-token.o \
|
|
||||||
pdfio-value.o
|
|
||||||
LIBOBJS = \
|
|
||||||
$(PUBOBJS) \
|
|
||||||
ttf.o
|
|
||||||
OBJS = \
|
|
||||||
$(LIBOBJS) \
|
|
||||||
pdfiototext.o \
|
|
||||||
testpdfio.o \
|
|
||||||
testttf.o
|
|
||||||
TARGETS = \
|
|
||||||
$(DSONAME) \
|
|
||||||
libpdfio.a \
|
|
||||||
pdfiototext \
|
|
||||||
testpdfio \
|
|
||||||
testttf
|
|
||||||
|
|
||||||
|
|
||||||
# Make everything
|
|
||||||
all: $(TARGETS)
|
|
||||||
|
|
||||||
all-shared:
|
|
||||||
if test `uname` = Darwin; then \
|
|
||||||
$(MAKE) DSONAME="libpdfio.1.dylib" -$(MAKEFLAGS) all; \
|
|
||||||
else \
|
|
||||||
$(MAKE) COMMONFLAGS="-g -Os -fPIC" DSONAME="libpdfio.so.1" -$(MAKEFLAGS) all; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
debug:
|
|
||||||
$(MAKE) -$(MAKEFLAGS) COMMONFLAGS="-g -fsanitize=address -DDEBUG=1" clean all
|
|
||||||
|
|
||||||
macos:
|
|
||||||
$(MAKE) -$(MAKEFLAGS) COMMONFLAGS="-Os -mmacosx-version-min=11 -arch x86_64 -arch arm64" clean all
|
|
||||||
|
|
||||||
|
|
||||||
# Clean everything
|
|
||||||
clean:
|
|
||||||
rm -f $(TARGETS) $(OBJS)
|
|
||||||
|
|
||||||
|
|
||||||
# Install everything
|
|
||||||
install: $(TARGETS)
|
|
||||||
echo Installing header files to $(DESTDIR)$(prefix)/include...
|
|
||||||
-mkdir -p $(DESTDIR)$(prefix)/include
|
|
||||||
cp $(PUBHEADERS) $(DESTDIR)$(prefix)/include
|
|
||||||
echo Installing library files to $(DESTDIR)$(prefix)/lib...
|
|
||||||
-mkdir -p $(DESTDIR)$(prefix)/lib
|
|
||||||
cp libpdfio.a $(DESTDIR)$(prefix)/lib
|
|
||||||
$(RANLIB) $(DESTDIR)$(prefix)/lib/libpdfio.a
|
|
||||||
if test "x$(DSONAME)" = xlibpdfio.so.1; then \
|
|
||||||
cp $(DSONAME) $(DESTDIR)$(prefix)/lib; \
|
|
||||||
ln -sf libpdfio.so.1 $(DESTDIR)$(prefix)/lib/libpdfio.so; \
|
|
||||||
elif test "x$(DSONAME)" = xlibpdfio.1.dylib; then \
|
|
||||||
cp $(DSONAME) $(DESTDIR)$(prefix)/lib; \
|
|
||||||
codesign -s "$(CODESIGN_IDENTITY)" -o runtime --timestamp $(DESTDIR)$(prefix)/lib/libpdfio.1.dylib; \
|
|
||||||
ln -sf libpdfio.1.dylib $(DESTDIR)$(prefix)/lib/libpdfio.dylib; \
|
|
||||||
fi
|
|
||||||
echo Installing pkg-config files to $(DESTDIR)$(prefix)/lib/pkgconfig...
|
|
||||||
-mkdir -p $(DESTDIR)$(prefix)/lib/pkgconfig
|
|
||||||
echo 'prefix="$(prefix)"' >$(DESTDIR)$(prefix)/lib/pkgconfig/pdfio.pc
|
|
||||||
echo 'Version: $(VERSION)' >>$(DESTDIR)$(prefix)/lib/pkgconfig/pdfio.pc
|
|
||||||
cat pdfio.pc.in >>$(DESTDIR)$(prefix)/lib/pkgconfig/pdfio.pc
|
|
||||||
echo Installing documentation to $(DESTDIR)$(prefix)/share/doc/pdfio...
|
|
||||||
-mkdir -p $(DESTDIR)$(prefix)/share/doc/pdfio
|
|
||||||
cp doc/pdfio.html doc/pdfio-512.png LICENSE NOTICE $(DESTDIR)$(prefix)/share/doc/pdfio
|
|
||||||
echo Installing man page to $(DESTDIR)$(prefix)/share/man/man3...
|
|
||||||
-mkdir -p $(DESTDIR)$(prefix)/share/man/man3
|
|
||||||
cp doc/pdfio.3 $(DESTDIR)$(prefix)/share/man/man3
|
|
||||||
|
|
||||||
install-shared:
|
|
||||||
if test `uname` = Darwin; then \
|
|
||||||
$(MAKE) DSONAME="libpdfio.1.dylib" -$(MAKEFLAGS) install; \
|
|
||||||
else \
|
|
||||||
$(MAKE) DSONAME="libpdfio.so.1" -$(MAKEFLAGS) install; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Test everything
|
|
||||||
test: testpdfio
|
|
||||||
./testttf 2>test.log
|
|
||||||
./testpdfio 2>test.log
|
|
||||||
|
|
||||||
valgrind: testpdfio
|
|
||||||
valgrind --leak-check=full ./testpdfio
|
|
||||||
|
|
||||||
|
|
||||||
# pdfio library
|
|
||||||
libpdfio.a: $(LIBOBJS)
|
|
||||||
echo Archiving $@...
|
|
||||||
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
|
|
||||||
$(RANLIB) $@
|
|
||||||
|
|
||||||
libpdfio.so.1: $(LIBOBJS)
|
|
||||||
echo Linking $@...
|
|
||||||
$(CC) $(DSOFLAGS) $(COMMONFLAGS) -shared -o $@ -Wl,-soname,$@ $(LIBOBJS) $(LIBS)
|
|
||||||
|
|
||||||
libpdfio.1.dylib: $(LIBOBJS)
|
|
||||||
echo Linking $@...
|
|
||||||
$(CC) $(DSOFLAGS) $(COMMONFLAGS) -dynamiclib -o $@ -install_name $(prefix)/lib/$@ -current_version $(VERSION) -compatibility_version 1.0 $(LIBOBJS) $(LIBS)
|
|
||||||
|
|
||||||
|
|
||||||
# pdfio1.def (Windows DLL exports file...)
|
|
||||||
#
|
|
||||||
# I'd love to use __declspec(dllexport) but MS puts it before the function
|
|
||||||
# declaration instead of after like everyone else, and it breaks Codedoc and
|
|
||||||
# other tools I rely on...
|
|
||||||
pdfio1.def: $(LIBOBJS) Makefile
|
|
||||||
echo Generating $@...
|
|
||||||
echo "LIBRARY pdfio1" >$@
|
|
||||||
echo "VERSION 1.0" >>$@
|
|
||||||
echo "EXPORTS" >>$@
|
|
||||||
nm $(LIBOBJS) 2>/dev/null | grep "T _" | awk '{print $$3}' | \
|
|
||||||
grep -v '^_ttf' | sed -e '1,$$s/^_//' | sort >>$@
|
|
||||||
|
|
||||||
|
|
||||||
# pdfio text extraction (demo, doesn't handle a lot of things yet)
|
|
||||||
pdfiototext: pdfiototext.o libpdfio.a
|
|
||||||
echo Linking $@...
|
|
||||||
$(CC) $(LDFLAGS) $(COMMONFLAGS) -o $@ pdfiototext.o libpdfio.a $(LIBS)
|
|
||||||
|
|
||||||
|
|
||||||
# pdfio test program
|
|
||||||
testpdfio: testpdfio.o libpdfio.a
|
|
||||||
echo Linking $@...
|
|
||||||
$(CC) $(LDFLAGS) $(COMMONFLAGS) -o $@ testpdfio.o libpdfio.a $(LIBS)
|
|
||||||
|
|
||||||
# TTF test program
|
|
||||||
testttf: ttf.o testttf.o
|
|
||||||
echo Linking $@...
|
|
||||||
$(CC) $(LDFLAGS) $(COMMONFLAGS) -o testttf ttf.o testttf.o $(LIBS)
|
|
||||||
|
|
||||||
|
|
||||||
# Dependencies
|
|
||||||
$(OBJS): pdfio.h pdfio-private.h Makefile
|
|
||||||
pdfio-content.o: pdfio-content.h ttf.h
|
|
||||||
testttf.o: ttf.h
|
|
||||||
ttf.o: ttf.h
|
|
||||||
|
|
||||||
# Make documentation using Codedoc <https://www.msweet.org/codedoc>
|
|
||||||
DOCFLAGS = \
|
|
||||||
--author "Michael R Sweet" \
|
|
||||||
--copyright "Copyright (c) 2021-2023 by Michael R Sweet" \
|
|
||||||
--docversion $(VERSION)
|
|
||||||
|
|
||||||
.PHONY: doc
|
|
||||||
doc:
|
|
||||||
echo Generating documentation...
|
|
||||||
codedoc $(DOCFLAGS) --title "PDFio Programming Manual v$(VERSION)" $(PUBHEADERS) $(PUBOBJS:.o=.c) --body doc/pdfio.md --coverimage doc/pdfio-512.png pdfio.xml >doc/pdfio.html
|
|
||||||
codedoc $(DOCFLAGS) --title "PDFio Programming Manual v$(VERSION)" --body doc/pdfio.md --coverimage doc/pdfio-epub.png pdfio.xml --epub doc/pdfio.epub
|
|
||||||
codedoc $(DOCFLAGS) --title "pdf read/write library" --man pdfio --section 3 --body doc/pdfio.md pdfio.xml >doc/pdfio.3
|
|
||||||
rm -f pdfio.xml
|
|
||||||
|
|
||||||
|
|
||||||
# Fuzz-test the library <>
|
|
||||||
.PHONY: afl
|
|
||||||
afl:
|
|
||||||
$(MAKE) -$(MAKEFLAGS) CC="afl-clang-fast" COMMONFLAGS="-g" clean all
|
|
||||||
test afl-output || rm -rf afl-output
|
|
||||||
afl-fuzz -x afl-pdf.dict -i afl-input -o afl-output -V 600 -e pdf -t 5000 ./testpdfio @@
|
|
||||||
|
|
||||||
|
|
||||||
# Analyze code with the Clang static analyzer <https://clang-analyzer.llvm.org>
|
|
||||||
clang:
|
|
||||||
clang $(CPPFLAGS) --analyze $(OBJS:.o=.c) 2>clang.log
|
|
||||||
rm -rf $(OBJS:.o=.plist)
|
|
||||||
test -s clang.log && (echo "$(GHA_ERROR)Clang detected issues."; echo ""; cat clang.log; exit 1) || exit 0
|
|
||||||
|
|
||||||
|
|
||||||
# Analyze code using Cppcheck <http://cppcheck.sourceforge.net>
|
|
||||||
cppcheck:
|
|
||||||
cppcheck $(CPPFLAGS) --template=gcc --addon=cert.py --suppressions-list=.cppcheck $(OBJS:.o=.c) 2>cppcheck.log
|
|
||||||
test -s cppcheck.log && (echo "$(GHA_ERROR)Cppcheck detected issues."; echo ""; cat cppcheck.log; exit 1) || exit 0
|
|
260
Makefile.in
Normal file
260
Makefile.in
Normal file
@ -0,0 +1,260 @@
|
|||||||
|
#
|
||||||
|
# Makefile for PDFio.
|
||||||
|
#
|
||||||
|
# Copyright © 2021-2023 by Michael R Sweet.
|
||||||
|
#
|
||||||
|
# Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||||
|
# information.
|
||||||
|
#
|
||||||
|
|
||||||
|
# POSIX makefile
|
||||||
|
.POSIX:
|
||||||
|
|
||||||
|
|
||||||
|
# Build silently
|
||||||
|
.SILENT:
|
||||||
|
|
||||||
|
|
||||||
|
# Version number...
|
||||||
|
PDFIO_VERSION = @PDFIO_VERSION@
|
||||||
|
PDFIO_VERSION_MAJOR = @PDFIO_VERSION_MAJOR@
|
||||||
|
PDFIO_VERSION_MINOR = @PDFIO_VERSION_MINOR@
|
||||||
|
|
||||||
|
|
||||||
|
# Programs and options...
|
||||||
|
AR = @AR@
|
||||||
|
ARFLAGS = @ARFLAGS@
|
||||||
|
CC = @CC@
|
||||||
|
CFLAGS = @CFLAGS@ $(CPPFLAGS) $(OPTIM) $(WARNINGS)
|
||||||
|
CODE_SIGN = @CODE_SIGN@
|
||||||
|
CODESIGN_IDENTITY = -
|
||||||
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
CSFLAGS = -s "$(CODESIGN_IDENTITY)" @CSFLAGS@ --timestamp
|
||||||
|
DSOFLAGS = @DSOFLAGS@ $(CFLAGS)
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
LDFLAGS = @LDFLAGS@ $(OPTIM)
|
||||||
|
LIBS = @LIBS@
|
||||||
|
LN = @LN@
|
||||||
|
OPTIM = @OPTIM@
|
||||||
|
RANLIB = @RANLIB@
|
||||||
|
RM = @RM@ -f
|
||||||
|
RMDIR = @RMDIR@
|
||||||
|
SHELL = /bin/sh
|
||||||
|
WARNINGS = @WARNINGS@
|
||||||
|
|
||||||
|
|
||||||
|
# Targets
|
||||||
|
LIBPDFIO = @LIBPDFIO@
|
||||||
|
LIBPDFIO_STATIC = @LIBPDFIO_STATIC@
|
||||||
|
|
||||||
|
|
||||||
|
# Directories...
|
||||||
|
bindir = @bindir@
|
||||||
|
datadir = @datadir@
|
||||||
|
datarootdir = @datarootdir@
|
||||||
|
exec_prefix = @exec_prefix@
|
||||||
|
includedir = @includedir@
|
||||||
|
infodir = @infodir@
|
||||||
|
libdir = @libdir@
|
||||||
|
libexecdir = @libexecdir@
|
||||||
|
localstatedir = @localstatedir@
|
||||||
|
mandir = @mandir@
|
||||||
|
oldincludedir = @oldincludedir@
|
||||||
|
prefix = @prefix@
|
||||||
|
sbindir = @sbindir@
|
||||||
|
sharedstatedir = @sharedstatedir@
|
||||||
|
srcdir = @srcdir@
|
||||||
|
sysconfdir = @sysconfdir@
|
||||||
|
top_srcdir = @top_srcdir@
|
||||||
|
|
||||||
|
BUILDROOT = $(DSTROOT)$(RPM_BUILD_ROOT)$(DESTDIR)
|
||||||
|
|
||||||
|
|
||||||
|
# Build commands...
|
||||||
|
.SUFFIXES: .c .h .o
|
||||||
|
.c.o:
|
||||||
|
echo Compiling $<...
|
||||||
|
$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
|
||||||
|
# Files
|
||||||
|
PUBHEADERS = \
|
||||||
|
pdfio.h \
|
||||||
|
pdfio-content.h
|
||||||
|
PUBOBJS = \
|
||||||
|
pdfio-aes.o \
|
||||||
|
pdfio-array.o \
|
||||||
|
pdfio-common.o \
|
||||||
|
pdfio-content.o \
|
||||||
|
pdfio-crypto.o \
|
||||||
|
pdfio-dict.o \
|
||||||
|
pdfio-file.o \
|
||||||
|
pdfio-md5.o \
|
||||||
|
pdfio-object.o \
|
||||||
|
pdfio-page.o \
|
||||||
|
pdfio-rc4.o \
|
||||||
|
pdfio-sha256.o \
|
||||||
|
pdfio-stream.o \
|
||||||
|
pdfio-string.o \
|
||||||
|
pdfio-token.o \
|
||||||
|
pdfio-value.o
|
||||||
|
LIBOBJS = \
|
||||||
|
$(PUBOBJS) \
|
||||||
|
ttf.o
|
||||||
|
OBJS = \
|
||||||
|
$(LIBOBJS) \
|
||||||
|
pdfiototext.o \
|
||||||
|
testpdfio.o \
|
||||||
|
testttf.o
|
||||||
|
TARGETS = \
|
||||||
|
$(DSONAME) \
|
||||||
|
libpdfio.a \
|
||||||
|
pdfiototext \
|
||||||
|
testpdfio \
|
||||||
|
testttf
|
||||||
|
|
||||||
|
|
||||||
|
# Make everything
|
||||||
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
|
||||||
|
# Clean everything
|
||||||
|
clean:
|
||||||
|
rm -f $(TARGETS) $(OBJS)
|
||||||
|
|
||||||
|
|
||||||
|
# Install everything
|
||||||
|
install: $(TARGETS)
|
||||||
|
echo Installing header files to $(BUILDROOT)$(includedir)...
|
||||||
|
$(INSTALL) -d -m 755 $(BUILDROOT)$(includedir)
|
||||||
|
for file in $(PUBHEADERS); do \
|
||||||
|
$(INSTALL) -c -m 644 $$file $(BUILDROOT)$(includedir); \
|
||||||
|
done
|
||||||
|
echo Installing library files to $(BUILDROOT)$(libdir)...
|
||||||
|
$(INSTALL) -d -m 755 $(BUILDROOT)$(libdir)
|
||||||
|
if test "x$(LIBPDFIO_STATIC)" != x; then \
|
||||||
|
$(INSTALL) -c -m 644 $(LIBPDFIO_STATIC) $(BUILDROOT)$(libdir); \
|
||||||
|
$(RANLIB) $(BUILDROOT)$(libdir)/$(LIBPDFIO_STATIC); \
|
||||||
|
fi
|
||||||
|
if test "x$(LIBPDFIO)" = xlibpdfio.so.1; then \
|
||||||
|
$(INSTALL) -c -m 755 libpdfio.so.1 $(BUILDROOT)$(libdir); \
|
||||||
|
ln -sf libpdfio.so.1 $(BUILDROOT)$(libdir)/libpdfio.so; \
|
||||||
|
elif test "x$(LIBPDFIO)" = xlibpdfio.1.dylib; then \
|
||||||
|
$(INSTALL) -c -m 755 libpdfio.1.dylib $(BUILDROOT)$(libdir); \
|
||||||
|
codesign -s "$(CODESIGN_IDENTITY)" -o runtime --timestamp $(BUILDROOT)$(libdir)/libpdfio.1.dylib; \
|
||||||
|
ln -sf libpdfio.1.dylib $(BUILDROOT)$(libdir)/libpdfio.dylib; \
|
||||||
|
else \
|
||||||
|
$(INSTALL) -c -m 644 $(LIBPDFIO) $(BUILDROOT)$(libdir); \
|
||||||
|
$(RANLIB) $(BUILDROOT)$(libdir)/$(LIBPDFIO); \
|
||||||
|
fi
|
||||||
|
echo Installing pkg-config files to $(BUILDROOT)$(libdir)/pkgconfig...
|
||||||
|
$(INSTALL) -d -m 755 $(BUILDROOT)$(libdir)/pkgconfig
|
||||||
|
$(INSTALL) -c -m 644 pdfio.pc $(BUILDROOT)$(libdir)/pkgconfig
|
||||||
|
echo Installing documentation to $(BUILDROOT)$(datadir)/doc/pdfio...
|
||||||
|
$(INSTALL) -d -m 755 $(BUILDROOT)$(datadir)/doc/pdfio
|
||||||
|
for file in doc/pdfio.html doc/pdfio-512.png LICENSE NOTICE; do \
|
||||||
|
$(INSTALL) -c -m 644 $$file $(BUILDROOT)$(datadir)/doc/pdfio; \
|
||||||
|
done
|
||||||
|
echo Installing man page to $(BUILDROOT)$(datadir)/man/man3...
|
||||||
|
$(INSTALL) -d -m 755 $(BUILDROOT)$(datadir)/man/man3
|
||||||
|
$(INSTALL) -c -m 644 doc/pdfio.3 $(BUILDROOT)$(datadir)/man/man3
|
||||||
|
|
||||||
|
|
||||||
|
# Test everything
|
||||||
|
test: testpdfio testttf
|
||||||
|
./testttf 2>test.log
|
||||||
|
./testpdfio 2>test.log
|
||||||
|
|
||||||
|
valgrind: testpdfio
|
||||||
|
valgrind --leak-check=full ./testpdfio
|
||||||
|
|
||||||
|
|
||||||
|
# pdfio library
|
||||||
|
libpdfio.a: $(LIBOBJS)
|
||||||
|
echo Archiving $@...
|
||||||
|
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
libpdfio.so.1: $(LIBOBJS)
|
||||||
|
echo Linking $@...
|
||||||
|
$(CC) $(DSOFLAGS) -shared -o $@ -Wl,-soname,$@ $(LIBOBJS) $(LIBS)
|
||||||
|
|
||||||
|
libpdfio.1.dylib: $(LIBOBJS)
|
||||||
|
echo Linking $@...
|
||||||
|
$(CC) $(DSOFLAGS) -dynamiclib -o $@ -install_name $(libdir)/$@ -current_version $(PDFIO_VERSION_MAJOR).$(PDFIO_VERSION_MINOR) -compatibility_version 1.0 $(LIBOBJS) $(LIBS)
|
||||||
|
|
||||||
|
|
||||||
|
# pdfio1.def (Windows DLL exports file...)
|
||||||
|
#
|
||||||
|
# I'd love to use __declspec(dllexport) but MS puts it before the function
|
||||||
|
# declaration instead of after like everyone else, and it breaks Codedoc and
|
||||||
|
# other tools I rely on...
|
||||||
|
pdfio1.def: $(LIBOBJS) Makefile
|
||||||
|
echo Generating $@...
|
||||||
|
echo "LIBRARY pdfio1" >$@
|
||||||
|
echo "VERSION $(PDFIO_VERSION_MAJOR).$(PDFIO_VERSION_MINOR)" >>$@
|
||||||
|
echo "EXPORTS" >>$@
|
||||||
|
nm $(LIBOBJS) 2>/dev/null | grep "T _" | awk '{print $$3}' | \
|
||||||
|
grep -v '^_ttf' | sed -e '1,$$s/^_//' | sort >>$@
|
||||||
|
|
||||||
|
|
||||||
|
# pdfio text extraction (demo, doesn't handle a lot of things yet)
|
||||||
|
pdfiototext: pdfiototext.o libpdfio.a
|
||||||
|
echo Linking $@...
|
||||||
|
$(CC) $(LDFLAGS) -o $@ pdfiototext.o libpdfio.a $(LIBS)
|
||||||
|
|
||||||
|
|
||||||
|
# pdfio test program
|
||||||
|
testpdfio: testpdfio.o libpdfio.a
|
||||||
|
echo Linking $@...
|
||||||
|
$(CC) $(LDFLAGS) -o $@ testpdfio.o libpdfio.a $(LIBS)
|
||||||
|
|
||||||
|
|
||||||
|
# TTF test program
|
||||||
|
testttf: ttf.o testttf.o
|
||||||
|
echo Linking $@...
|
||||||
|
$(CC) $(LDFLAGS) -o testttf ttf.o testttf.o $(LIBS)
|
||||||
|
|
||||||
|
|
||||||
|
# Dependencies
|
||||||
|
$(OBJS): pdfio.h pdfio-private.h Makefile
|
||||||
|
pdfio-content.o: pdfio-content.h ttf.h
|
||||||
|
testttf.o: ttf.h
|
||||||
|
ttf.o: ttf.h
|
||||||
|
|
||||||
|
|
||||||
|
# Make documentation using Codedoc <https://www.msweet.org/codedoc>
|
||||||
|
DOCFLAGS = \
|
||||||
|
--author "Michael R Sweet" \
|
||||||
|
--copyright "Copyright (c) 2021-2023 by Michael R Sweet" \
|
||||||
|
--docversion $(PDFIO_VERSION)
|
||||||
|
|
||||||
|
.PHONY: doc
|
||||||
|
doc:
|
||||||
|
echo Generating documentation...
|
||||||
|
codedoc $(DOCFLAGS) --title "PDFio Programming Manual v$(PDFIO_VERSION)" $(PUBHEADERS) $(PUBOBJS:.o=.c) --body doc/pdfio.md --coverimage doc/pdfio-512.png pdfio.xml >doc/pdfio.html
|
||||||
|
codedoc $(DOCFLAGS) --title "PDFio Programming Manual v$(PDFIO_VERSIONmc6809e
|
||||||
|
)" --body doc/pdfio.md --coverimage doc/pdfio-epub.png pdfio.xml --epub doc/pdfio.epub
|
||||||
|
codedoc $(DOCFLAGS) --title "pdf read/write library" --man pdfio --section 3 --body doc/pdfio.md pdfio.xml >doc/pdfio.3
|
||||||
|
rm -f pdfio.xml
|
||||||
|
|
||||||
|
|
||||||
|
# Fuzz-test the library <https://lcamtuf.coredump.cx/afl/>
|
||||||
|
.PHONY: afl
|
||||||
|
afl:
|
||||||
|
$(MAKE) -$(MAKEFLAGS) CC="afl-clang-fast" COMMONFLAGS="-g" clean all
|
||||||
|
test afl-output || rm -rf afl-output
|
||||||
|
afl-fuzz -x afl-pdf.dict -i afl-input -o afl-output -V 600 -e pdf -t 5000 ./testpdfio @@
|
||||||
|
|
||||||
|
|
||||||
|
# Analyze code with the Clang static analyzer <https://clang-analyzer.llvm.org>
|
||||||
|
clang:
|
||||||
|
clang $(CPPFLAGS) --analyze $(OBJS:.o=.c) 2>clang.log
|
||||||
|
rm -rf $(OBJS:.o=.plist)
|
||||||
|
test -s clang.log && (echo "$(GHA_ERROR)Clang detected issues."; echo ""; cat clang.log; exit 1) || exit 0
|
||||||
|
|
||||||
|
|
||||||
|
# Analyze code using Cppcheck <http://cppcheck.sourceforge.net>
|
||||||
|
cppcheck:
|
||||||
|
cppcheck $(CPPFLAGS) --template=gcc --addon=cert.py --suppressions-list=.cppcheck $(OBJS:.o=.c) 2>cppcheck.log
|
||||||
|
test -s cppcheck.log && (echo "$(GHA_ERROR)Cppcheck detected issues."; echo ""; cat cppcheck.log; exit 1) || exit 0
|
1774
config.guess
vendored
Executable file
1774
config.guess
vendored
Executable file
File diff suppressed because it is too large
Load Diff
1907
config.sub
vendored
Executable file
1907
config.sub
vendored
Executable file
File diff suppressed because it is too large
Load Diff
272
configure.ac
Normal file
272
configure.ac
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
dnl
|
||||||
|
dnl Configuration script for PDFio
|
||||||
|
dnl
|
||||||
|
dnl Copyright © 2023 by Michael R Sweet
|
||||||
|
dnl
|
||||||
|
dnl Licensed under Apache License v2.0. See the file "LICENSE" for more
|
||||||
|
dnl information.
|
||||||
|
dnl
|
||||||
|
|
||||||
|
dnl ***********************************************************************
|
||||||
|
dnl
|
||||||
|
dnl Note: Using autoheader or automake on this project will break the PDFio
|
||||||
|
dnl build system. Use "autoconf -f" to regenerate the configure script if
|
||||||
|
dnl you make changes to this file.
|
||||||
|
dnl
|
||||||
|
dnl ***********************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
dnl We need at least autoconf 2.70 for --runstatedir...
|
||||||
|
AC_PREREQ([2.70])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Package name and version...
|
||||||
|
AC_INIT([pdfio], [1.2.0], [https://github.com/michaelrsweet/pdfio/issues], [pdfio], [https://www.msweet.org/pdfio])
|
||||||
|
|
||||||
|
PDFIO_VERSION="AC_PACKAGE_VERSION"
|
||||||
|
PDFIO_VERSION_MAJOR="`echo AC_PACKAGE_VERSION | awk -F. '{print $1}'`"
|
||||||
|
PDFIO_VERSION_MINOR="`echo AC_PACKAGE_VERSION | awk -F. '{printf("%d\n",$2);}'`"
|
||||||
|
AC_SUBST([PDFIO_VERSION])
|
||||||
|
AC_SUBST([PDFIO_VERSION_MAJOR])
|
||||||
|
AC_SUBST([PDFIO_VERSION_MINOR])
|
||||||
|
|
||||||
|
|
||||||
|
dnl This line is provided to ensure that you don't run the autoheader program
|
||||||
|
dnl against this project. Doing so is completely unsupported and WILL cause
|
||||||
|
dnl problems!
|
||||||
|
AH_TOP([#error "Somebody ran autoheader on this project which is unsupported and WILL cause problems."])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Get the build and host platforms and split the host_os value
|
||||||
|
AC_CANONICAL_BUILD
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
|
||||||
|
[host_os_name="$(echo $host_os | sed -e '1,$s/[0-9.]*$//g')"]
|
||||||
|
[host_os_version="$(echo $host_os | sed -e '1,$s/^[^0-9.]*//g' | awk -F. '{print $1 $2}')"]
|
||||||
|
# Linux often does not yield an OS version we can use...
|
||||||
|
AS_IF([test "x$host_os_version" = x], [
|
||||||
|
host_os_version="0"
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Compiler options...
|
||||||
|
CFLAGS="${CFLAGS:=}"
|
||||||
|
CPPFLAGS="${CPPFLAGS:=}"
|
||||||
|
DSOFLAGS="${DSOFLAGS:=}"
|
||||||
|
LDFLAGS="${LDFLAGS:=}"
|
||||||
|
LIBS="${LIBS:=}"
|
||||||
|
OPTIM="${OPTIM:=}"
|
||||||
|
|
||||||
|
AC_SUBST([DSOFLAGS])
|
||||||
|
AC_SUBST([OPTIM])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Standard programs...
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_RANLIB
|
||||||
|
AC_PATH_PROG([AR], [ar])
|
||||||
|
AC_PATH_PROGS([CODE_SIGN], [codesign true])
|
||||||
|
AC_PATH_PROG([MKDIR], [mkdir])
|
||||||
|
AC_PATH_PROG([RM], [rm])
|
||||||
|
AC_PATH_PROG([RMDIR], [rmdir])
|
||||||
|
AC_PATH_PROG([LN], [ln])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Figure out the correct "ar" command flags...
|
||||||
|
AS_IF([test "$ac_cv_prog_ranlib" = ":"], [
|
||||||
|
ARFLAGS="crs"
|
||||||
|
], [
|
||||||
|
ARFLAGS="cr"
|
||||||
|
])
|
||||||
|
AC_SUBST([ARFLAGS])
|
||||||
|
|
||||||
|
|
||||||
|
dnl install-sh
|
||||||
|
AC_MSG_CHECKING([for install-sh script])
|
||||||
|
INSTALL="$(pwd)/install-sh"
|
||||||
|
AC_SUBST([INSTALL])
|
||||||
|
AC_MSG_RESULT([using $INSTALL])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Check for pkg-config, which is used for some other tests later on...
|
||||||
|
AC_PATH_TOOL([PKGCONFIG], [pkg-config])
|
||||||
|
|
||||||
|
PKGCONFIG_CFLAGS="-I\${includedir}"
|
||||||
|
PKGCONFIG_LIBS="-L\${libdir} -lpdfio"
|
||||||
|
PKGCONFIG_LIBS_PRIVATE="-lm"
|
||||||
|
PKGCONFIG_REQUIRES="zlib"
|
||||||
|
AC_SUBST([PKGCONFIG_CFLAGS])
|
||||||
|
AC_SUBST([PKGCONFIG_LIBS])
|
||||||
|
AC_SUBST([PKGCONFIG_LIBS_PRIVATE])
|
||||||
|
AC_SUBST([PKGCONFIG_REQUIRES])
|
||||||
|
|
||||||
|
|
||||||
|
dnl ZLIB
|
||||||
|
AC_MSG_CHECKING([for zlib via pkg-config])
|
||||||
|
AS_IF([$PKCONFIG --exists zlib], [
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
LIBS="$($PKGCONFIG --libs zlib) $LIBS"
|
||||||
|
CPPFLAGS="$($PKGCONFIG --cflags zlib) $CPPFLAGS"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
AC_CHECK_HEADER([zlib.h])
|
||||||
|
AC_CHECK_LIB([z], [inflateCopy])
|
||||||
|
|
||||||
|
AS_IF([test x$ac_cv_header_zlib_h != xyes -o x$ac_cv_lib_z_inflateCopy != xyes], [
|
||||||
|
AC_MSG_ERROR([Sorry, this software requires zlib 1.1 or higher.])
|
||||||
|
])
|
||||||
|
|
||||||
|
PKGCONFIG_LIBS_PRIVATE="-lz $PKGCONFIG_LIBS_PRIVATE"
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Library target...
|
||||||
|
AC_ARG_ENABLE([static], AS_HELP_STRING([--disable-static], [do not install static library]))
|
||||||
|
AC_ARG_ENABLE([shared], AS_HELP_STRING([--disable-shared], [do not install shared library]))
|
||||||
|
|
||||||
|
AS_IF([test x$enable_shared != xno], [
|
||||||
|
AS_IF([test "$host_os_name" = darwin], [
|
||||||
|
LIBPDFIO="libpdfio.1.dylib"
|
||||||
|
], [
|
||||||
|
LIBPDFIO="libpdfio.so.1"
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_IF([test x$enable_static != xno], [
|
||||||
|
LIBPDFIO_STATIC="libpdfio.a"
|
||||||
|
], [
|
||||||
|
LIBPDFIO_STATIC=""
|
||||||
|
])
|
||||||
|
], [
|
||||||
|
LIBPDFIO="libpdfio.a"
|
||||||
|
LIBPDFIO_STATIC=""
|
||||||
|
PKGCONFIG_LIBS="$PKGCONFIG_LIBS $PKGCONFIG_LIBS_PRIVATE"
|
||||||
|
PKGCONFIG_LIBS_PRIVATE=""
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_SUBST([LIBPDFIO])
|
||||||
|
AC_SUBST([LIBPDFIO_STATIC])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Extra compiler options...
|
||||||
|
AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug], [turn on debugging, default=no]))
|
||||||
|
AC_ARG_ENABLE([maintainer], AS_HELP_STRING([--enable-maintainer], [turn on maintainer mode, default=no]))
|
||||||
|
AC_ARG_ENABLE([sanitizer], AS_HELP_STRING([--enable-sanitizer], [build with AddressSanitizer, default=no]))
|
||||||
|
|
||||||
|
AS_IF([test x$enable_debug = xyes], [
|
||||||
|
OPTIM="$OPTIM -g"
|
||||||
|
CSFLAGS=""
|
||||||
|
], [
|
||||||
|
OPTIM="$OPTIM -g -Os"
|
||||||
|
CSFLAGS="-o runtime"
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_SUBST([CSFLAGS])
|
||||||
|
|
||||||
|
WARNINGS=""
|
||||||
|
AC_SUBST([WARNINGS])
|
||||||
|
|
||||||
|
AS_IF([test -n "$GCC"], [
|
||||||
|
AS_IF([test x$enable_sanitizer = xyes], [
|
||||||
|
# Use -fsanitize=address with debugging...
|
||||||
|
OPTIM="$OPTIM -fsanitize=address"
|
||||||
|
], [
|
||||||
|
# Otherwise use the Fortify enhancements to catch any unbounded
|
||||||
|
# string operations...
|
||||||
|
CPPFLAGS="$CPPFLAGS -D_FORTIFY_SOURCE=2"
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Show all standard warnings + unused variables when compiling...
|
||||||
|
WARNINGS="-Wall -Wunused"
|
||||||
|
|
||||||
|
dnl Drop some not-useful/unreliable warnings...
|
||||||
|
for warning in char-subscripts format-truncation format-y2k switch unused-result; do
|
||||||
|
AC_MSG_CHECKING([whether compiler supports -Wno-$warning])
|
||||||
|
|
||||||
|
OLDCFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS -Wno-$warning -Werror"
|
||||||
|
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
WARNINGS="$WARNINGS -Wno-$warning"
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
|
||||||
|
CFLAGS="$OLDCFLAGS"
|
||||||
|
done
|
||||||
|
|
||||||
|
dnl Maintainer mode enables -Werror...
|
||||||
|
AS_IF([test x$enable_maintainer = xyes], [
|
||||||
|
WARNINGS="$WARNINGS -Werror -Wno-error=deprecated"
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl See if PIE options are supported...
|
||||||
|
AC_MSG_CHECKING(whether compiler supports -fPIE)
|
||||||
|
OLDCFLAGS="$CFLAGS"
|
||||||
|
AS_CASE(["$host_os_name"],
|
||||||
|
[darwin*], [
|
||||||
|
CFLAGS="$CFLAGS -fPIC -fPIE -Wl,-pie"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[
|
||||||
|
OLDCFLAGS="-fPIC $OLDCFLAGS"
|
||||||
|
LDFLAGS="-fPIE -Wl,-pie $LDFLAGS"
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
], [*], [
|
||||||
|
CFLAGS="$CFLAGS -fPIC -fPIE -pie"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[
|
||||||
|
OLDCFLAGS="-fPIC $OLDCFLAGS"
|
||||||
|
LDFLAGS="-fPIE -pie $LDFLAGS"
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
||||||
|
CFLAGS="$OLDCFLAGS"
|
||||||
|
|
||||||
|
dnl OS-specific compiler options...
|
||||||
|
AC_MSG_CHECKING([for OS-specific compiler options])
|
||||||
|
AS_CASE(["$host_os_name"], [linux*], [
|
||||||
|
# Make sure we get the full set of 64-bit Linux APIs from the headers...
|
||||||
|
CPPFLAGS="$CPPFLAGS -D__USE_MISC -D_GNU_SOURCE -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64"
|
||||||
|
|
||||||
|
# Mark read-only sections as relocatable to random addresses...
|
||||||
|
LDFLAGS="$LDFLAGS -Wl,-z,relro,-z,now"
|
||||||
|
|
||||||
|
AC_MSG_RESULT([-D__USE_MISC -D_GNU_SOURCE -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 -Wl,-z,relro,-z,now])
|
||||||
|
], [darwin*], [
|
||||||
|
# When not building for debug, target macOS 11 or later, "universal"
|
||||||
|
# binaries when possible...
|
||||||
|
AS_IF([echo "$CPPFLAGS $CFLAGS $LDFLAGS $OPTIM" | grep -q "\\-arch "], [
|
||||||
|
# Don't add architecture/min-version flags if they are already present
|
||||||
|
AC_MSG_RESULT([none])
|
||||||
|
], [echo "$CPPFLAGS $CFLAGS $LDFLAGS $OPTIM" | grep -q "\\-mmacosx-version-"], [
|
||||||
|
# Don't add architecture/min-version flags if they are already present
|
||||||
|
AC_MSG_RESULT([none])
|
||||||
|
], [test "$host_os_version" -ge 200 -a x$enable_debug != xyes], [
|
||||||
|
# macOS 11.0 and higher support the Apple Silicon (arm64) CPUs
|
||||||
|
OPTIM="$OPTIM -mmacosx-version-min=11.0 -arch x86_64 -arch arm64"
|
||||||
|
AC_MSG_RESULT([-mmacosx-version-min=11.0 -arch x86_64 -arch arm64])
|
||||||
|
], [
|
||||||
|
# Don't add architecture/min-version flags if debug enabled
|
||||||
|
AC_MSG_RESULT([none])
|
||||||
|
])
|
||||||
|
], [*], [
|
||||||
|
AC_MSG_RESULT([none])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Extra linker options...
|
||||||
|
AC_ARG_WITH([dsoflags], AS_HELP_STRING([--with-dsoflags=...], [Specify additional DSOFLAGS]), [
|
||||||
|
DSOFLAGS="$withval $DSOFLAGS"
|
||||||
|
])
|
||||||
|
AC_ARG_WITH([ldflags], AS_HELP_STRING([--with-ldflags=...], [Specify additional LDFLAGS]), [
|
||||||
|
LDFLAGS="$withval $LDFLAGS"
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Generate the Makefile and pkg-config file...
|
||||||
|
AC_CONFIG_FILES([Makefile pdfio.pc])
|
||||||
|
AC_OUTPUT
|
232
install-sh
Executable file
232
install-sh
Executable file
@ -0,0 +1,232 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Install a program, script, or datafile.
|
||||||
|
#
|
||||||
|
# Copyright 2008-2012 by Apple Inc.
|
||||||
|
#
|
||||||
|
# This script is not compatible with BSD (or any other) install program, as it
|
||||||
|
# allows owner and group changes to fail with a warning and makes sure that the
|
||||||
|
# destination directory permissions are as specified - BSD install and the
|
||||||
|
# original X11 install script did not change permissions of existing
|
||||||
|
# directories. It also does not support the transform options since CUPS does
|
||||||
|
# not use them...
|
||||||
|
#
|
||||||
|
# Original script from X11R5 (mit/util/scripts/install.sh)
|
||||||
|
# Copyright 1991 by the Massachusetts Institute of Technology
|
||||||
|
#
|
||||||
|
# Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
# documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
# the above copyright notice appear in all copies and that both that
|
||||||
|
# copyright notice and this permission notice appear in supporting
|
||||||
|
# documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
# publicity pertaining to distribution of the software without specific,
|
||||||
|
# written prior permission. M.I.T. makes no representations about the
|
||||||
|
# suitability of this software for any purpose. It is provided "as is"
|
||||||
|
# without express or implied warranty.
|
||||||
|
#
|
||||||
|
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||||
|
# `make' implicit rules from creating a file called install from it
|
||||||
|
# when there is no Makefile.
|
||||||
|
|
||||||
|
# set DOITPROG to echo to test this script
|
||||||
|
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||||
|
doit="${DOITPROG-}"
|
||||||
|
|
||||||
|
# Force umask to 022...
|
||||||
|
umask 022
|
||||||
|
|
||||||
|
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||||
|
mvprog="${MVPROG-mv}"
|
||||||
|
cpprog="${CPPROG-cp}"
|
||||||
|
chmodprog="${CHMODPROG-chmod}"
|
||||||
|
chownprog="${CHOWNPROG-chown}"
|
||||||
|
chgrpprog="${CHGRPPROG-chgrp}"
|
||||||
|
stripprog="${STRIPPROG-strip}"
|
||||||
|
rmprog="${RMPROG-rm}"
|
||||||
|
mkdirprog="${MKDIRPROG-mkdir}"
|
||||||
|
gzipprog="${GZIPPROG-gzip}"
|
||||||
|
|
||||||
|
transformbasename=""
|
||||||
|
transform_arg=""
|
||||||
|
instcmd="$mvprog"
|
||||||
|
chmodcmd="$chmodprog 0755"
|
||||||
|
chowncmd=""
|
||||||
|
chgrpcmd=""
|
||||||
|
stripcmd=""
|
||||||
|
rmcmd="$rmprog -f"
|
||||||
|
mvcmd="$mvprog"
|
||||||
|
src=""
|
||||||
|
dst=""
|
||||||
|
dir_arg=""
|
||||||
|
|
||||||
|
gzipcp() {
|
||||||
|
# gzipcp from to
|
||||||
|
$gzipprog -9 <"$1" >"$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
while [ x"$1" != x ]; do
|
||||||
|
case $1 in
|
||||||
|
-c)
|
||||||
|
instcmd="$cpprog"
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
|
||||||
|
-d)
|
||||||
|
dir_arg=true
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
|
||||||
|
-m)
|
||||||
|
chmodcmd="$chmodprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
|
||||||
|
-o)
|
||||||
|
chowncmd="$chownprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
|
||||||
|
-g)
|
||||||
|
chgrpcmd="$chgrpprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
|
||||||
|
-s)
|
||||||
|
stripcmd="$stripprog"
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
|
||||||
|
-z)
|
||||||
|
instcmd="gzipcp"
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
if [ x"$src" = x ]; then
|
||||||
|
src="$1"
|
||||||
|
else
|
||||||
|
dst="$1"
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ x"$src" = x ]; then
|
||||||
|
echo "install-sh: No input file specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dir_arg" != x ]; then
|
||||||
|
dst="$src"
|
||||||
|
src=""
|
||||||
|
|
||||||
|
if [ -d "$dst" ]; then
|
||||||
|
instcmd=:
|
||||||
|
else
|
||||||
|
instcmd=$mkdirprog
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
||||||
|
# might cause directories to be created, which would be especially bad
|
||||||
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
if [ ! -f "$src" -a ! -d "$src" ]; then
|
||||||
|
echo "install: $src does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dst" = x ]; then
|
||||||
|
echo "install: No destination specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If destination is a directory, append the input filename.
|
||||||
|
if [ -d "$dst" ]; then
|
||||||
|
dst="$dst/`basename $src`"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
## this sed command emulates the dirname command
|
||||||
|
dstdir="`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`"
|
||||||
|
|
||||||
|
# Make sure that the destination directory exists.
|
||||||
|
# This part is taken from Noah Friedman's mkinstalldirs script
|
||||||
|
|
||||||
|
# Skip lots of stat calls in the usual case.
|
||||||
|
if [ ! -d "$dstdir" ]; then
|
||||||
|
defaultIFS='
|
||||||
|
'
|
||||||
|
IFS="${IFS-${defaultIFS}}"
|
||||||
|
|
||||||
|
oIFS="${IFS}"
|
||||||
|
# Some sh's can't handle IFS=/ for some reason.
|
||||||
|
IFS='%'
|
||||||
|
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||||
|
IFS="${oIFS}"
|
||||||
|
|
||||||
|
pathcomp=''
|
||||||
|
|
||||||
|
while [ $# -ne 0 ] ; do
|
||||||
|
pathcomp="${pathcomp}${1}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [ ! -d "${pathcomp}" ]; then $doit $mkdirprog "${pathcomp}"; fi
|
||||||
|
|
||||||
|
pathcomp="${pathcomp}/"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dir_arg" != x ]; then
|
||||||
|
# Make a directory...
|
||||||
|
$doit $instcmd $dst || exit 1
|
||||||
|
|
||||||
|
# Allow chown/chgrp to fail, but log a warning
|
||||||
|
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst || echo "warning: Unable to change owner of $dst!"; fi
|
||||||
|
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst || echo "warning: Unable to change group of $dst!"; fi
|
||||||
|
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst || exit 1; fi
|
||||||
|
else
|
||||||
|
# Install a file...
|
||||||
|
dstfile="`basename $dst`"
|
||||||
|
|
||||||
|
# Check the destination file - for libraries just use the "-x" option
|
||||||
|
# to strip...
|
||||||
|
case "$dstfile" in
|
||||||
|
*.a | *.dylib | *.sl | *.sl.* | *.so | *.so.*)
|
||||||
|
stripopt="-x"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
stripopt=""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Make a temp file name in the proper directory.
|
||||||
|
dsttmp="$dstdir/#inst.$$#"
|
||||||
|
|
||||||
|
# Move or copy the file name to the temp name
|
||||||
|
$doit $instcmd $src $dsttmp || exit 1
|
||||||
|
|
||||||
|
# Update permissions and strip as needed, then move to the final name.
|
||||||
|
# If the chmod, strip, rm, or mv commands fail, remove the installed
|
||||||
|
# file...
|
||||||
|
if [ x"$stripcmd" != x ]; then $doit $stripcmd $stripopt "$dsttmp" || echo "warning: Unable to strip $dst!"; fi
|
||||||
|
if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp" || echo "warning: Unable to change owner of $dst!"; fi
|
||||||
|
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp" || echo "warning: Unable to change group of $dst!"; fi
|
||||||
|
|
||||||
|
trap "rm -f ${dsttmp}" 0 &&
|
||||||
|
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; fi &&
|
||||||
|
$doit $rmcmd -f "$dstdir/$dstfile" &&
|
||||||
|
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
2
pdfio.h
2
pdfio.h
@ -23,7 +23,7 @@ extern "C" {
|
|||||||
// Version number...
|
// Version number...
|
||||||
//
|
//
|
||||||
|
|
||||||
# define PDFIO_VERSION "1.1.4"
|
# define PDFIO_VERSION "1.2.0"
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
13
pdfio.pc.in
13
pdfio.pc.in
@ -1,6 +1,13 @@
|
|||||||
|
prefix=@prefix@
|
||||||
|
exec_prefix=@exec_prefix@
|
||||||
|
libdir=@libdir@
|
||||||
|
includedir=@includedir@
|
||||||
|
|
||||||
Name: pdfio
|
Name: pdfio
|
||||||
Description: PDF read/write library
|
Description: PDF read/write library
|
||||||
|
Version: @PDFIO_VERSION@
|
||||||
URL: https://www.msweet.org/pdfio
|
URL: https://www.msweet.org/pdfio
|
||||||
Requires: zlib >= 1.0
|
Requires: @PKGCONFIG_REQUIRES@
|
||||||
Libs: -L${prefix}/lib -lpdfio -lm
|
Libs: @PKGCONFIG_LIBS@
|
||||||
Cflags: -I${prefix}/include
|
Libs.private: @PKGCONFIG_LIBS_PRIVATE@
|
||||||
|
Cflags: @PKGCONFIG_CFLAGS@
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
LIBRARY pdfio1
|
LIBRARY pdfio1
|
||||||
VERSION 1.0
|
VERSION 1.2
|
||||||
EXPORTS
|
EXPORTS
|
||||||
_pdfioArrayDebug
|
_pdfioArrayDebug
|
||||||
_pdfioArrayDelete
|
_pdfioArrayDelete
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<metadata>
|
<metadata>
|
||||||
<id>pdfio_native</id>
|
<id>pdfio_native</id>
|
||||||
<title>PDFio Library for VS2019+</title>
|
<title>PDFio Library for VS2019+</title>
|
||||||
<version>1.1.4</version>
|
<version>1.2.0</version>
|
||||||
<authors>Michael R Sweet</authors>
|
<authors>Michael R Sweet</authors>
|
||||||
<owners>michaelrsweet</owners>
|
<owners>michaelrsweet</owners>
|
||||||
<projectUrl>https://github.com/michaelrsweet/pappl</projectUrl>
|
<projectUrl>https://github.com/michaelrsweet/pappl</projectUrl>
|
||||||
@ -16,7 +16,7 @@
|
|||||||
<copyright>Copyright © 2019-2023 by Michael R Sweet</copyright>
|
<copyright>Copyright © 2019-2023 by Michael R Sweet</copyright>
|
||||||
<tags>pdf file native</tags>
|
<tags>pdf file native</tags>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="pdfio_native.redist" version="1.1.4" />
|
<dependency id="pdfio_native.redist" version="1.2.0" />
|
||||||
<dependency id="zlib_native.redist" version="1.2.11" />
|
<dependency id="zlib_native.redist" version="1.2.11" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<metadata>
|
<metadata>
|
||||||
<id>pdfio_native.redist</id>
|
<id>pdfio_native.redist</id>
|
||||||
<title>PDFio Library for VS2019+</title>
|
<title>PDFio Library for VS2019+</title>
|
||||||
<version>1.1.4</version>
|
<version>1.2.0</version>
|
||||||
<authors>Michael R Sweet</authors>
|
<authors>Michael R Sweet</authors>
|
||||||
<owners>michaelrsweet</owners>
|
<owners>michaelrsweet</owners>
|
||||||
<projectUrl>https://github.com/michaelrsweet/pappl</projectUrl>
|
<projectUrl>https://github.com/michaelrsweet/pappl</projectUrl>
|
||||||
|
Loading…
Reference in New Issue
Block a user